Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:48:18

0001 /*
0002  * Copyright 2008-2009 Katholieke Universiteit Leuven
0003  *
0004  * Use of this software is governed by the MIT license
0005  *
0006  * Written by Sven Verdoolaege, K.U.Leuven, Departement
0007  * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
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