privately export isl_mat_unimodular_complete
[platform/upstream/isl.git] / isl_mat.h
index 12346fa..97cc107 100644 (file)
--- a/isl_mat.h
+++ b/isl_mat.h
@@ -29,6 +29,8 @@ struct isl_mat {
 
 struct isl_mat *isl_mat_alloc(struct isl_ctx *ctx,
        unsigned n_row, unsigned n_col);
+struct isl_mat *isl_mat_extend(struct isl_ctx *ctx, struct isl_mat *mat,
+       unsigned n_row, unsigned n_col);
 struct isl_mat *isl_mat_identity(struct isl_ctx *ctx, unsigned n_row);
 struct isl_mat *isl_mat_copy(struct isl_ctx *ctx, struct isl_mat *mat);
 struct isl_mat *isl_mat_cow(struct isl_ctx *ctx, struct isl_mat *mat);
@@ -41,6 +43,8 @@ void isl_mat_sub_copy(struct isl_ctx *ctx, isl_int **dst, isl_int **src,
 void isl_mat_sub_neg(struct isl_ctx *ctx, isl_int **dst, isl_int **src,
        unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col);
 
+struct isl_mat *isl_mat_swap_cols(struct isl_ctx *ctx,
+       struct isl_mat *mat, unsigned i, unsigned j);
 struct isl_mat *isl_mat_swap_rows(struct isl_ctx *ctx,
        struct isl_mat *mat, unsigned i, unsigned j);
 
@@ -49,20 +53,32 @@ struct isl_vec *isl_mat_vec_product(struct isl_ctx *ctx,
 struct isl_mat *isl_mat_aff_direct_sum(struct isl_ctx *ctx,
        struct isl_mat *left, struct isl_mat *right);
 struct isl_mat *isl_mat_left_hermite(struct isl_ctx *ctx,
-       struct isl_mat *M, struct isl_mat **U, struct isl_mat **Q);
+       struct isl_mat *M, int neg, struct isl_mat **U, struct isl_mat **Q);
 struct isl_mat *isl_mat_lin_to_aff(struct isl_ctx *ctx, struct isl_mat *mat);
 struct isl_mat *isl_mat_inverse_product(struct isl_ctx *ctx,
        struct isl_mat *left, struct isl_mat *right);
 struct isl_mat *isl_mat_product(struct isl_ctx *ctx,
        struct isl_mat *left, struct isl_mat *right);
+struct isl_mat *isl_mat_transpose(struct isl_ctx *ctx, struct isl_mat *mat);
+struct isl_mat *isl_mat_right_inverse(struct isl_ctx *ctx,
+       struct isl_mat *mat);
+struct isl_mat *isl_mat_right_kernel(struct isl_ctx *ctx, struct isl_mat *mat);
 
-struct isl_mat *isl_mat_drop_col(struct isl_ctx *ctx, struct isl_mat *mat,
-                               unsigned col);
+struct isl_mat *isl_mat_drop_cols(struct isl_ctx *ctx, struct isl_mat *mat,
+                               unsigned col, unsigned n);
 struct isl_mat *isl_mat_drop_rows(struct isl_ctx *ctx, struct isl_mat *mat,
                                unsigned row, unsigned n);
 
-struct isl_basic_set *isl_basic_set_preimage(struct isl_ctx *ctx,
-       struct isl_basic_set *bset, struct isl_mat *mat);
+void isl_mat_col_mul(struct isl_mat *mat, int dst_col, isl_int f, int src_col);
+void isl_mat_col_submul(struct isl_mat *mat,
+                       int dst_col, isl_int f, int src_col);
+
+struct isl_basic_set *isl_basic_set_preimage(struct isl_basic_set *bset,
+       struct isl_mat *mat);
+struct isl_set *isl_set_preimage(struct isl_set *set, struct isl_mat *mat);
+
+struct isl_mat *isl_mat_unimodular_complete(struct isl_ctx *ctx,
+                                               struct isl_mat *M, int row);
 
 void isl_mat_dump(struct isl_ctx *ctx, struct isl_mat *mat,
                                FILE *out, int indent);