File indexing completed on 2026-05-10 08:48:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef ISL_MAT_H
0011 #define ISL_MAT_H
0012
0013 #include <stdio.h>
0014
0015 #include <isl/ctx.h>
0016 #include <isl/vec.h>
0017 #include <isl/val_type.h>
0018
0019 #if defined(__cplusplus)
0020 extern "C" {
0021 #endif
0022
0023 struct isl_mat;
0024 typedef struct isl_mat isl_mat;
0025
0026 isl_ctx *isl_mat_get_ctx(__isl_keep isl_mat *mat);
0027
0028 __isl_give isl_mat *isl_mat_alloc(isl_ctx *ctx,
0029 unsigned n_row, unsigned n_col);
0030 __isl_give isl_mat *isl_mat_extend(__isl_take isl_mat *mat,
0031 unsigned n_row, unsigned n_col);
0032 __isl_give isl_mat *isl_mat_identity(isl_ctx *ctx, unsigned n_row);
0033 __isl_give isl_mat *isl_mat_copy(__isl_keep isl_mat *mat);
0034 __isl_null isl_mat *isl_mat_free(__isl_take isl_mat *mat);
0035
0036 isl_size isl_mat_rows(__isl_keep isl_mat *mat);
0037 isl_size isl_mat_cols(__isl_keep isl_mat *mat);
0038 __isl_give isl_val *isl_mat_get_element_val(__isl_keep isl_mat *mat,
0039 int row, int col);
0040 __isl_give isl_mat *isl_mat_set_element_si(__isl_take isl_mat *mat,
0041 int row, int col, int v);
0042 __isl_give isl_mat *isl_mat_set_element_val(__isl_take isl_mat *mat,
0043 int row, int col, __isl_take isl_val *v);
0044
0045 __isl_give isl_mat *isl_mat_swap_cols(__isl_take isl_mat *mat,
0046 unsigned i, unsigned j);
0047 __isl_give isl_mat *isl_mat_swap_rows(__isl_take isl_mat *mat,
0048 unsigned i, unsigned j);
0049
0050 __isl_give isl_vec *isl_mat_vec_product(__isl_take isl_mat *mat,
0051 __isl_take isl_vec *vec);
0052 __isl_give isl_vec *isl_vec_mat_product(__isl_take isl_vec *vec,
0053 __isl_take isl_mat *mat);
0054 __isl_give isl_vec *isl_mat_vec_inverse_product(__isl_take isl_mat *mat,
0055 __isl_take isl_vec *vec);
0056 __isl_give isl_mat *isl_mat_aff_direct_sum(__isl_take isl_mat *left,
0057 __isl_take isl_mat *right);
0058 __isl_give isl_mat *isl_mat_diagonal(__isl_take isl_mat *mat1,
0059 __isl_take isl_mat *mat2);
0060 __isl_give isl_mat *isl_mat_left_hermite(__isl_take isl_mat *M, int neg,
0061 __isl_give isl_mat **U, __isl_give isl_mat **Q);
0062 __isl_give isl_mat *isl_mat_lin_to_aff(__isl_take isl_mat *mat);
0063 __isl_give isl_mat *isl_mat_inverse_product(__isl_take isl_mat *left,
0064 __isl_take isl_mat *right);
0065 __isl_give isl_mat *isl_mat_product(__isl_take isl_mat *left,
0066 __isl_take isl_mat *right);
0067 __isl_give isl_mat *isl_mat_transpose(__isl_take isl_mat *mat);
0068 __isl_give isl_mat *isl_mat_right_inverse(__isl_take isl_mat *mat);
0069 __isl_give isl_mat *isl_mat_right_kernel(__isl_take isl_mat *mat);
0070
0071 __isl_give isl_mat *isl_mat_normalize(__isl_take isl_mat *mat);
0072 __isl_give isl_mat *isl_mat_normalize_row(__isl_take isl_mat *mat, int row);
0073
0074 __isl_give isl_mat *isl_mat_drop_cols(__isl_take isl_mat *mat,
0075 unsigned col, unsigned n);
0076 __isl_give isl_mat *isl_mat_drop_rows(__isl_take isl_mat *mat,
0077 unsigned row, unsigned n);
0078 __isl_give isl_mat *isl_mat_insert_cols(__isl_take isl_mat *mat,
0079 unsigned col, unsigned n);
0080 __isl_give isl_mat *isl_mat_insert_rows(__isl_take isl_mat *mat,
0081 unsigned row, unsigned n);
0082 __isl_give isl_mat *isl_mat_move_cols(__isl_take isl_mat *mat,
0083 unsigned dst_col, unsigned src_col, unsigned n);
0084 __isl_give isl_mat *isl_mat_add_rows(__isl_take isl_mat *mat, unsigned n);
0085 __isl_give isl_mat *isl_mat_insert_zero_cols(__isl_take isl_mat *mat,
0086 unsigned first, unsigned n);
0087 __isl_give isl_mat *isl_mat_add_zero_cols(__isl_take isl_mat *mat, unsigned n);
0088 __isl_give isl_mat *isl_mat_insert_zero_rows(__isl_take isl_mat *mat,
0089 unsigned row, unsigned n);
0090 __isl_give isl_mat *isl_mat_add_zero_rows(__isl_take isl_mat *mat, unsigned n);
0091
0092 void isl_mat_col_add(__isl_keep isl_mat *mat, int dst_col, int src_col);
0093
0094 __isl_give isl_mat *isl_mat_unimodular_complete(__isl_take isl_mat *M, int row);
0095 __isl_give isl_mat *isl_mat_row_basis(__isl_take isl_mat *mat);
0096 __isl_give isl_mat *isl_mat_row_basis_extension(
0097 __isl_take isl_mat *mat1, __isl_take isl_mat *mat2);
0098
0099 __isl_give isl_mat *isl_mat_from_row_vec(__isl_take isl_vec *vec);
0100 __isl_give isl_mat *isl_mat_concat(__isl_take isl_mat *top,
0101 __isl_take isl_mat *bot);
0102 __isl_give isl_mat *isl_mat_vec_concat(__isl_take isl_mat *top,
0103 __isl_take isl_vec *bot);
0104
0105 isl_bool isl_mat_is_equal(__isl_keep isl_mat *mat1, __isl_keep isl_mat *mat2);
0106 isl_bool isl_mat_has_linearly_independent_rows(__isl_keep isl_mat *mat1,
0107 __isl_keep isl_mat *mat2);
0108
0109 isl_size isl_mat_rank(__isl_keep isl_mat *mat);
0110 int isl_mat_initial_non_zero_cols(__isl_keep isl_mat *mat);
0111
0112 void isl_mat_print_internal(__isl_keep isl_mat *mat, FILE *out, int indent);
0113 void isl_mat_dump(__isl_keep isl_mat *mat);
0114
0115 #if defined(__cplusplus)
0116 }
0117 #endif
0118
0119 #endif