package eigen

  1. Overview
  2. Docs

Source file eigen_spmat_z.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
(*
 * Eigen - an OCaml interface to C++ Eigen library
 * Copyright (c) 2016-2017 Liang Wang <liang.wang@cl.cam.ac.uk>
 *)

open Ctypes
open Eigen_types.SPMAT_Z

let create ?(reserve=0.01) m n =
  let s = max 1024 (float_of_int (m * n) *. reserve |> int_of_float) in
  let x = ml_eigen_new (Int64.of_int s) (Int64.of_int m) (Int64.of_int n) in
  Gc.finalise ml_eigen_delete x;
  x

let delete x = ml_eigen_delete x

let eye m = ml_eigen_eye (Int64.of_int m)

let rows x = ml_eigen_rows x |> Int64.to_int

let cols x = ml_eigen_cols x |> Int64.to_int

let nnz x = ml_eigen_nnz x |> Int64.to_int

let get x i j = ml_eigen_get x (Int64.of_int i) (Int64.of_int j)

let set x i j a = ml_eigen_set x (Int64.of_int i) (Int64.of_int j) a

let insert x i j a = ml_eigen_insert x (Int64.of_int i) (Int64.of_int j) a

let reset x = ml_eigen_reset x

let is_compressed x = ml_eigen_is_compressed x = 1

let compress x = ml_eigen_compress x

let uncompress x = ml_eigen_uncompress x

let reshape x m n = ml_eigen_reshape x (Int64.of_int m) (Int64.of_int n)

let prune x r e = ml_eigen_prune x r e

let valueptr x =
  let l = allocate int64_t (Signed.Int64.of_int 0) in
  let raw = ml_eigen_valueptr x l in
  let l = Signed.Int64.to_int !@l in
  bigarray_of_ptr array1 l Bigarray.complex64 raw

let innerindexptr x =
  let raw = ml_eigen_innerindexptr x in
  bigarray_of_ptr array1 (nnz x) Bigarray.int64 raw

let outerindexptr x =
  let raw = ml_eigen_outerindexptr x in
  bigarray_of_ptr array1 (rows x + 1) Bigarray.int64 raw

let clone x = ml_eigen_clone x

let row x i = ml_eigen_row x (Int64.of_int i)

let col x i = ml_eigen_col x (Int64.of_int i)

let transpose x = ml_eigen_transpose x

let adjoint x = ml_eigen_adjoint x

let diagonal x = ml_eigen_diagonal x

let trace x = ml_eigen_trace x

let is_zero x = ml_eigen_is_zero x = 1

let is_positive x = ml_eigen_is_positive x = 1

let is_negative x = ml_eigen_is_negative x = 1

let is_nonpositive x = ml_eigen_is_nonpositive x = 1

let is_nonnegative x = ml_eigen_is_nonnegative x = 1

let is_equal x y = ml_eigen_is_equal x y = 1

let is_unequal x y = ml_eigen_is_unequal x y = 1

let is_greater x y = ml_eigen_is_greater x y = 1

let is_smaller x y = ml_eigen_is_smaller x y = 1

let equal_or_greater x y = ml_eigen_equal_or_greater x y = 1

let equal_or_smaller x y = ml_eigen_equal_or_smaller x y = 1

let add x y = ml_eigen_add x y

let sub x y = ml_eigen_sub x y

let mul x y = ml_eigen_mul x y

let div x y = ml_eigen_div x y

let gemm x y = ml_eigen_gemm x y

let add_scalar x a = ml_eigen_add_scalar x a

let sub_scalar x a = ml_eigen_sub_scalar x a

let mul_scalar x a = ml_eigen_mul_scalar x a

let div_scalar x a = ml_eigen_div_scalar x a

let sum x = ml_eigen_sum x

let neg x = ml_eigen_neg x

let sqrt x = ml_eigen_sqrt x

let print x = ml_eigen_print x
OCaml

Innovation. Community. Security.