2 * Copyright 2008-2009 Katholieke Universiteit Leuven
4 * Use of this software is governed by the MIT license
6 * Written by Sven Verdoolaege, K.U.Leuven, Departement
7 * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
17 #include <isl/val_type.h>
19 #if defined(__cplusplus)
24 typedef struct isl_mat isl_mat
;
26 isl_ctx
*isl_mat_get_ctx(__isl_keep isl_mat
*mat
);
28 __isl_give isl_mat
*isl_mat_alloc(isl_ctx
*ctx
,
29 unsigned n_row
, unsigned n_col
);
30 __isl_give isl_mat
*isl_mat_extend(__isl_take isl_mat
*mat
,
31 unsigned n_row
, unsigned n_col
);
32 __isl_give isl_mat
*isl_mat_identity(isl_ctx
*ctx
, unsigned n_row
);
33 __isl_give isl_mat
*isl_mat_copy(__isl_keep isl_mat
*mat
);
34 __isl_null isl_mat
*isl_mat_free(__isl_take isl_mat
*mat
);
36 isl_size
isl_mat_rows(__isl_keep isl_mat
*mat
);
37 isl_size
isl_mat_cols(__isl_keep isl_mat
*mat
);
38 __isl_give isl_val
*isl_mat_get_element_val(__isl_keep isl_mat
*mat
,
40 __isl_give isl_mat
*isl_mat_set_element_si(__isl_take isl_mat
*mat
,
41 int row
, int col
, int v
);
42 __isl_give isl_mat
*isl_mat_set_element_val(__isl_take isl_mat
*mat
,
43 int row
, int col
, __isl_take isl_val
*v
);
45 __isl_give isl_mat
*isl_mat_swap_cols(__isl_take isl_mat
*mat
,
46 unsigned i
, unsigned j
);
47 __isl_give isl_mat
*isl_mat_swap_rows(__isl_take isl_mat
*mat
,
48 unsigned i
, unsigned j
);
50 __isl_give isl_vec
*isl_mat_vec_product(__isl_take isl_mat
*mat
,
51 __isl_take isl_vec
*vec
);
52 __isl_give isl_vec
*isl_vec_mat_product(__isl_take isl_vec
*vec
,
53 __isl_take isl_mat
*mat
);
54 __isl_give isl_vec
*isl_mat_vec_inverse_product(__isl_take isl_mat
*mat
,
55 __isl_take isl_vec
*vec
);
56 __isl_give isl_mat
*isl_mat_aff_direct_sum(__isl_take isl_mat
*left
,
57 __isl_take isl_mat
*right
);
58 __isl_give isl_mat
*isl_mat_diagonal(__isl_take isl_mat
*mat1
,
59 __isl_take isl_mat
*mat2
);
60 __isl_give isl_mat
*isl_mat_left_hermite(__isl_take isl_mat
*M
, int neg
,
61 __isl_give isl_mat
**U
, __isl_give isl_mat
**Q
);
62 __isl_give isl_mat
*isl_mat_lin_to_aff(__isl_take isl_mat
*mat
);
63 __isl_give isl_mat
*isl_mat_inverse_product(__isl_take isl_mat
*left
,
64 __isl_take isl_mat
*right
);
65 __isl_give isl_mat
*isl_mat_product(__isl_take isl_mat
*left
,
66 __isl_take isl_mat
*right
);
67 __isl_give isl_mat
*isl_mat_transpose(__isl_take isl_mat
*mat
);
68 __isl_give isl_mat
*isl_mat_right_inverse(__isl_take isl_mat
*mat
);
69 __isl_give isl_mat
*isl_mat_right_kernel(__isl_take isl_mat
*mat
);
71 __isl_give isl_mat
*isl_mat_normalize(__isl_take isl_mat
*mat
);
72 __isl_give isl_mat
*isl_mat_normalize_row(__isl_take isl_mat
*mat
, int row
);
74 __isl_give isl_mat
*isl_mat_drop_cols(__isl_take isl_mat
*mat
,
75 unsigned col
, unsigned n
);
76 __isl_give isl_mat
*isl_mat_drop_rows(__isl_take isl_mat
*mat
,
77 unsigned row
, unsigned n
);
78 __isl_give isl_mat
*isl_mat_insert_cols(__isl_take isl_mat
*mat
,
79 unsigned col
, unsigned n
);
80 __isl_give isl_mat
*isl_mat_insert_rows(__isl_take isl_mat
*mat
,
81 unsigned row
, unsigned n
);
82 __isl_give isl_mat
*isl_mat_move_cols(__isl_take isl_mat
*mat
,
83 unsigned dst_col
, unsigned src_col
, unsigned n
);
84 __isl_give isl_mat
*isl_mat_add_rows(__isl_take isl_mat
*mat
, unsigned n
);
85 __isl_give isl_mat
*isl_mat_insert_zero_cols(__isl_take isl_mat
*mat
,
86 unsigned first
, unsigned n
);
87 __isl_give isl_mat
*isl_mat_add_zero_cols(__isl_take isl_mat
*mat
, unsigned n
);
88 __isl_give isl_mat
*isl_mat_insert_zero_rows(__isl_take isl_mat
*mat
,
89 unsigned row
, unsigned n
);
90 __isl_give isl_mat
*isl_mat_add_zero_rows(__isl_take isl_mat
*mat
, unsigned n
);
92 void isl_mat_col_add(__isl_keep isl_mat
*mat
, int dst_col
, int src_col
);
94 __isl_give isl_mat
*isl_mat_unimodular_complete(__isl_take isl_mat
*M
, int row
);
95 __isl_give isl_mat
*isl_mat_row_basis(__isl_take isl_mat
*mat
);
96 __isl_give isl_mat
*isl_mat_row_basis_extension(
97 __isl_take isl_mat
*mat1
, __isl_take isl_mat
*mat2
);
99 __isl_give isl_mat
*isl_mat_from_row_vec(__isl_take isl_vec
*vec
);
100 __isl_give isl_mat
*isl_mat_concat(__isl_take isl_mat
*top
,
101 __isl_take isl_mat
*bot
);
102 __isl_give isl_mat
*isl_mat_vec_concat(__isl_take isl_mat
*top
,
103 __isl_take isl_vec
*bot
);
105 isl_bool
isl_mat_is_equal(__isl_keep isl_mat
*mat1
, __isl_keep isl_mat
*mat2
);
106 isl_bool
isl_mat_has_linearly_independent_rows(__isl_keep isl_mat
*mat1
,
107 __isl_keep isl_mat
*mat2
);
109 isl_size
isl_mat_rank(__isl_keep isl_mat
*mat
);
110 int isl_mat_initial_non_zero_cols(__isl_keep isl_mat
*mat
);
112 void isl_mat_print_internal(__isl_keep isl_mat
*mat
, FILE *out
, int indent
);
113 void isl_mat_dump(__isl_keep isl_mat
*mat
);
115 #if defined(__cplusplus)