Skip to content

Commit 3b49ba5

Browse files
committed
Organize Vector and Matrix interface
1 parent 0678f66 commit 3b49ba5

File tree

5 files changed

+66
-68
lines changed

5 files changed

+66
-68
lines changed

src/analyses/apron/affineEqualityAnalysis.apron.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ include RelationAnalysis
1515
let spec_module: (module MCPSpec) Lazy.t =
1616
lazy (
1717
let module AD = AffineEqualityDomain.D2 (SparseVector) (ListMatrix) in
18+
let module AD_A = AffineEqualityDomain.D2 (ArrayVector) (ArrayMatrix) in (* TODO: Remove this! Just to suppress warning *)
1819
let module Priv = (val RelationPriv.get_priv ()) in
1920
let module Spec =
2021
struct

src/cdomains/affineEquality/matrix.ml

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,58 +5,56 @@ sig
55
type vec
66
type t [@@deriving eq, ord, hash]
77

8+
val show: t -> string
9+
10+
val copy: t -> t
11+
812
val empty: unit -> t (* TODO: needs unit? *)
913

1014
val is_empty: t -> bool
1115

12-
val show: t -> string
16+
val num_rows: t -> int
1317

14-
val add_empty_columns: t -> int array -> t
18+
val num_cols: t -> int
19+
20+
val init_with_vec: vec -> t
1521

1622
val append_row: t -> vec -> t
1723

1824
val get_row: t -> int -> vec
1925

20-
val del_col: t -> int -> t
21-
22-
val del_cols: t -> int array -> t
23-
2426
val remove_row: t -> int -> t
2527

26-
val get_col: t -> int -> vec
27-
28-
val append_matrices: t -> t -> t
29-
30-
val num_rows: t -> int
28+
val remove_zero_rows: t -> t
3129

32-
val num_cols: t -> int
30+
val swap_rows: t -> int -> int -> t
3331

34-
val reduce_col: t -> int -> t
32+
val add_empty_columns: t -> int array -> t
3533

36-
val normalize: t -> t Option.t (*Gauss-Jordan Elimination to get matrix in reduced row echelon form (rref) + deletion of zero rows. None matrix has no solution*)
34+
val get_col: t -> int -> vec
3735

38-
val rref_vec: t -> vec -> t Option.t (* added to remove side effects in affineEqualityDomain*)
36+
val set_col: t -> vec -> int -> t
3937

40-
val rref_matrix: t -> t -> t Option.t (* this as well *)
38+
val del_col: t -> int -> t
4139

42-
val find_opt: (vec -> bool) -> t -> vec option
40+
val del_cols: t -> int array -> t
4341

4442
val map2: (vec -> num -> vec) -> t -> vec -> t
4543

46-
val map2: (vec -> num -> vec) -> t -> vec -> t (* why is this here twice??*)
47-
4844
val map2i: (int -> vec-> num -> vec) -> t -> vec -> t
4945

50-
val set_col: t -> vec -> int -> t
46+
val find_opt: (vec -> bool) -> t -> vec option
5147

52-
val init_with_vec: vec -> t
48+
val append_matrices: t -> t -> t
5349

54-
val remove_zero_rows: t -> t
50+
val reduce_col: t -> int -> t
5551

56-
val is_covered_by: t -> t -> bool
52+
val normalize: t -> t Option.t (*Gauss-Jordan Elimination to get matrix in reduced row echelon form (rref) + deletion of zero rows. None matrix has no solution*)
5753

58-
val copy: t -> t
54+
val rref_vec: t -> vec -> t Option.t
5955

60-
val swap_rows: t -> int -> int -> t
56+
val rref_matrix: t -> t -> t Option.t
57+
58+
val is_covered_by: t -> t -> bool
6159

6260
end

src/cdomains/affineEquality/sparseImplementation/listMatrix.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ module ListMatrix: AbstractMatrix =
221221
in if validate_vec pivot_l then validate vs (i+1) else raise (Invalid_argument "Matrix not in rref: pivot column not empty!")
222222
in validate m 0
223223

224+
(* TODO: Remove this! Just to suppress warning *)
225+
let () = assert_rref (empty ())
226+
224227
(* Sets the jth column to zero by subtracting multiples of v *)
225228
let reduce_col_with_vec m j v =
226229
let pivot_element = V.nth v j in

src/cdomains/affineEquality/sparseImplementation/sparseVector.ml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ open RatOps
33
open ConvenienceOps
44

55
open BatList
6-
open BatArray
76
open Batteries
87

98
module List = BatList

src/cdomains/affineEquality/vector.ml

Lines changed: 39 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,23 @@ sig
66

77
val show: t -> string
88

9-
val keep_vals: t -> int -> t
10-
11-
val remove_nth: t -> int -> t
12-
13-
val remove_at_indices: t -> int list -> t
14-
15-
val insert_zero_at_indices: t -> (int * int) list -> int -> t
9+
val copy: t -> t
1610

17-
val set_nth: t -> int -> num -> t
11+
val of_list: num list -> t
1812

19-
val insert_val_at: int -> num -> t -> t
13+
val of_array: num array -> t
2014

21-
val map_f_preserves_zero: (num -> num) -> t -> t
15+
val of_sparse_list: int -> (int * num) list -> t
2216

23-
val map2_f_preserves_zero: (num -> num -> num) -> t -> t -> t
17+
val to_list: t -> num list
2418

25-
val fold_left_f_preserves_zero: ('acc -> num -> 'acc) -> 'acc -> t -> 'acc
19+
val to_array: t -> num array
2620

27-
val fold_left2_f_preserves_zero: ('acc -> num -> num -> 'acc) -> 'acc -> t -> t -> 'acc
21+
val to_sparse_list: t -> (int * num) list
2822

29-
val apply_with_c: (num -> num -> num) -> num -> t -> t
23+
val length: t -> int
3024

31-
val apply_with_c_f_preserves_zero: (num -> num -> num) -> num -> t -> t
25+
val compare_length_with: t -> int -> int
3226

3327
val zero_vec: int -> t
3428

@@ -38,60 +32,63 @@ sig
3832

3933
val nth: t -> int -> num
4034

41-
val length: t -> int
42-
43-
val map2: (num -> num -> num) -> t -> t -> t
35+
val set_nth: t -> int -> num -> t
4436

45-
val findi: (num -> bool) -> t -> int
37+
val insert_val_at: int -> num -> t -> t
4638

47-
(* Returns optional tuple of position and value which was found*)
48-
val findi_val_opt: (num -> bool) -> t -> (int * num) Option.t
39+
val insert_zero_at_indices: t -> (int * int) list -> int -> t
4940

50-
val find_first_non_zero : t -> (int * num) option
41+
val remove_nth: t -> int -> t
5142

52-
val find_opt: (num -> bool) -> t -> num Option.t
43+
val remove_at_indices: t -> int list -> t
5344

54-
val map: (num -> num) -> t -> t
45+
val keep_vals: t -> int -> t
5546

56-
val map: (num -> num) -> t -> t
47+
(* Returns the part of the vector starting from index n*)
48+
val starting_from_nth : int -> t -> t
5749

58-
val compare_length_with: t -> int -> int
50+
val find_opt: (num -> bool) -> t -> num Option.t
5951

60-
val of_list: num list -> t
52+
val findi: (num -> bool) -> t -> int
6153

62-
val to_list: t -> num list
54+
val find2i: (num -> num -> bool) -> t -> t -> int
6355

64-
val filteri: (int -> num -> bool) -> t -> t
56+
(* Returns optional tuple of position and value which was found*)
57+
val findi_val_opt: (num -> bool) -> t -> (int * num) Option.t
6558

66-
val append: t -> t -> t
59+
val find_first_non_zero : t -> (int * num) option
6760

6861
val exists: (num -> bool) -> t -> bool
6962

7063
val exists2: (num -> num -> bool) -> t -> t -> bool
71-
val rev: t -> t
7264

73-
val map2i: (int -> num -> num -> num) -> t -> t -> t
65+
val filteri: (int -> num -> bool) -> t -> t
7466

75-
val map2i_f_preserves_zero: (int -> num -> num -> num) -> t -> t -> t
67+
val map: (num -> num) -> t -> t
68+
69+
val map_f_preserves_zero: (num -> num) -> t -> t
7670

7771
val mapi: (int -> num -> num) -> t -> t
7872

7973
val mapi_f_preserves_zero: (int -> num -> num) -> t -> t
8074

81-
val mapi: (int -> num -> num) -> t -> t
75+
val map2: (num -> num -> num) -> t -> t -> t
8276

83-
val find2i: (num -> num -> bool) -> t -> t -> int
77+
val map2_f_preserves_zero: (num -> num -> num) -> t -> t -> t
8478

85-
val to_array: t -> num array
79+
val map2i: (int -> num -> num -> num) -> t -> t -> t
8680

87-
val of_array: num array -> t
81+
val map2i_f_preserves_zero: (int -> num -> num -> num) -> t -> t -> t
8882

89-
val copy: t -> t
83+
val fold_left_f_preserves_zero: ('acc -> num -> 'acc) -> 'acc -> t -> 'acc
9084

91-
val of_sparse_list: int -> (int * num) list -> t
85+
val fold_left2_f_preserves_zero: ('acc -> num -> num -> 'acc) -> 'acc -> t -> t -> 'acc
9286

93-
val to_sparse_list: t -> (int * num) list
87+
val apply_with_c: (num -> num -> num) -> num -> t -> t
9488

95-
(* Returns the part of the vector starting from index n*)
96-
val starting_from_nth : int -> t -> t
89+
val apply_with_c_f_preserves_zero: (num -> num -> num) -> num -> t -> t
90+
91+
val rev: t -> t
92+
93+
val append: t -> t -> t
9794
end

0 commit comments

Comments
 (0)