Lacaml_utilsSourceGeneral auxiliary functions
Preallocated strings (names)
Range checking
raise_var_lt0 ~loc ~name var
check_var_lt0 ~loc ~name var checks whether integer variable var with name name at location loc is lower than 0.
Valueless vector checking and allocation functions (do not require a vector value as argument
calc_vec_min_dim ~n ~ofs ~inc
raise_vec_min_dim ~loc ~vec_name ~dim ~min_dim
check_vec_min_dim ~loc ~vec_name ~dim ~min_dim checks whether vector with name vec_name and dimension dim satisfies minimum dimension min_dim.
raise_vec_bad_ofs ~loc ~vec_name ~ofs ~max_ofs
check_vec_ofs ~loc ~vec_name ~ofs ~max_ofs checks whether vector offset ofs for vector of name vec_name is invalid (i.e. outside of 1..max_ofs).
check_vec_inc ~loc ~vec_name inc checks whether vector increment inc for vector of name vec_name is invalid (i.e. 0).
calc_vec_max_n ~dim ~ofs ~inc
calc_vec_opt_max_n ?ofs ?inc dim
raise_max_len ~loc ~len_name ~len ~max_len
val check_vec_dim :
loc:string ->
vec_name:string ->
dim:int ->
ofs:int ->
inc:int ->
n_name:string ->
n:int ->
unitcheck_vec_dim ~loc ~vec_name ~dim ~ofs ~inc ~n_name ~n checks the vector operation length in parameter n with name n_name at location loc for vector with name vec_name and dimension dim given the operation offset ofs and increment inc.
val get_vec_n :
loc:string ->
vec_name:string ->
dim:int ->
ofs:int ->
inc:int ->
n_name:string ->
int option ->
intget_vec_n ~loc ~vec_name ~dim ~ofs ~inc ~n_name n checks or infers the vector operation length in the option parameter n with name n_name at location loc for vector with name vec_name and dimension dim given the operation offset ofs and increment inc.
get_vec_min_dim ~loc ~vec_name ~ofs ~inc ~n
get_vec_start_stop ~ofsx ~incx ~n
Valueless matrix checking and allocation functions (do not require a matrix value as argument
val raise_bad_mat_ofs :
loc:string ->
name:string ->
ofs_name:string ->
ofs:int ->
max_ofs:int ->
'araise_bad_mat_ofs ~loc ~name ~ofs_name ~ofs ~max_ofs
raise_mat_bad_r ~loc ~mat_name ~r ~max_r
raise_mat_bad_c ~loc ~mat_name ~c ~max_c
check_mat_r ~loc ~vec_name ~r ~max_r checks whether matrix row offset r for vector of name vec_name is invalid (i.e. outside of 1..max_r).
check_mat_c ~loc ~vec_name ~c ~max_c checks whether matrix column offset c for vector of name vec_name is invalid (i.e. outside of 1..max_c).
calc_mat_max_rows ~dim1 ~r
calc_mat_opt_max_rows ?r dim1
calc_mat_max_cols ~dim2 ~c
calc_mat_opt_max_cols ?c dim1
val check_mat_rows :
loc:string ->
mat_name:string ->
dim1:int ->
r:int ->
p:int ->
param_name:string ->
unitcheck_mat_rows ~loc ~mat_name ~dim1 ~r ~p ~param_name checks the matrix row operation length in parameter p with name param_name at location loc for matrix with name mat_name and dimension dim1 given the operation row r.
check_mat_m ~loc ~mat_name ~dim1 ~r ~m checks the matrix row operation length in parameter m at location loc for matrix with name mat_name and dimension dim1 given the operation row r.
val check_mat_cols :
loc:string ->
mat_name:string ->
dim2:int ->
c:int ->
p:int ->
param_name:string ->
unitcheck_mat_cols ~loc ~mat_name ~dim2 ~c ~p ~param_name checks the matrix column operation length in parameter p with name param_name at location loc for matrix with name mat_name and dimension dim2 given the operation column c.
check_mat_n ~loc ~mat_name ~dim2 ~c ~n checks the matrix column operation length in parameter n at location loc for matrix with name mat_name and dimension dim2 given the operation column c.
val check_mat_mn :
loc:string ->
mat_name:string ->
dim1:int ->
dim2:int ->
r:int ->
c:int ->
m:int ->
n:int ->
unitcheck_mat_mn ~loc ~mat_name ~dim1 ~dim2 ~r ~c ~m ~n checks the matrix operation lengths in parameters m and n at location loc for matrix with name mat_name and dimensions dim1 and dim2 given the operation row r and column c.
val get_mat_rows :
loc:string ->
mat_name:string ->
dim1:int ->
r:int ->
p:int option ->
param_name:string ->
intget_mat_rows ~loc ~mat_name ~dim1 ~r p ~param_name checks or infers the matrix row operation length in the option parameter p with name param_name at location loc for matrix with name mat_name and dimension dim1 given the row operation offset r.
val get_mat_dim1 :
loc:string ->
mat_name:string ->
dim1:int ->
r:int ->
m:int option ->
m_name:string ->
intget_mat_dim1 ~loc ~mat_name ~dim1 ~r ~m ~m_name checks or infers the matrix row operation length in the option parameter m with name m_name at location loc for matrix with name mat_name and dimension dim1 given the row operation offset r.
get_mat_m ~loc ~mat_name ~dim1 ~r ~m checks or infers the matrix row operation length in the option parameter m at location loc for matrix with name mat_name and dimension dim1 given the row operation offset r.
val get_mat_cols :
loc:string ->
mat_name:string ->
dim2:int ->
c:int ->
p:int option ->
param_name:string ->
intget_mat_cols ~loc ~mat_name ~dim2 ~c ~param_name p checks or infers the matrix column operation length in the option parameter p with name param_name at location loc for matrix with name mat_name and dimension dim2 given the column operation offset c.
val get_mat_dim2 :
loc:string ->
mat_name:string ->
dim2:int ->
c:int ->
n:int option ->
n_name:string ->
intget_mat_dim2 ~loc ~mat_name ~dim2 ~c ~n ~n_name checks or infers the matrix column operation length in the option parameter n with name n_name at location loc for matrix with name mat_name and dimension dim2 given the column operation offset c.
get_mat_n ~loc ~mat_name ~dim2 ~c ~n checks or infers the matrix column operation length in the option parameter n at location loc for matrix with name mat_name and dimension dim2 given the column operation offset c.
get_mat_min_dim1 ~loc ~mat_name ~r ~m
get_mat_min_dim2 ~loc ~mat_name ~c ~n
check_mat_min_dim1 ~loc ~mat_name ~dim1 ~min_dim1 checks the minimum row dimension min_dim1 of a matrix with name mat_name at location loc given its row dimension dim1.
check_mat_min_dim2 ~loc ~mat_name ~dim2 ~min_dim2 checks the minimum column dimension min_dim2 of a matrix with name mat_name at location loc given its column dimension dim2.
val check_mat_min_dims :
loc:string ->
mat_name:string ->
dim1:int ->
dim2:int ->
min_dim1:int ->
min_dim2:int ->
unitcheck_mat_min_dim2 ~loc ~mat_name ~dim2 ~min_dim2 checks the minimum column dimension min_dim2 of a matrix with name mat_name at location loc given its column dimension dim2.
(Old) Vector checking and allocation functions
check_vec_is_perm loc vec_name vec n checks whether vec is a valid permutation vector.
val get_vec :
string ->
string ->
('a, 'b, 'c) Bigarray.Array1.t option ->
int ->
int ->
int ->
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
('a, 'b, 'c) Bigarray.Array1.tval get_dim_vec :
string ->
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array1.t ->
string ->
int option ->
intget_dim_vec loc vec_name ofs inc vec n_name n if the dimension n is given, check that the vector vec is big enough, otherwise return the maximal n for the given vector vec.
(Old) Matrix checking and allocation functions
val get_mat :
string ->
string ->
(int -> int -> ('a, 'b, 'c) Bigarray.Array2.t) ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.tval check_dim1_mat :
string ->
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
string ->
int ->
unitval check_dim2_mat :
string ->
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
string ->
int ->
unitval check_dim_mat :
string ->
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
int ->
unitval get_dim1_mat :
string ->
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
string ->
int option ->
intval get_dim2_mat :
string ->
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
string ->
int option ->
intval get_work :
string ->
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
('a, 'b, 'c) Bigarray.Array1.t option ->
int ->
int ->
string ->
('a, 'b, 'c) Bigarray.Array1.t * intval get_k_mat_sb :
string ->
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
string ->
int option ->
intval get_dim_mat_packed :
string ->
string ->
int ->
('a, 'b, 'c) Bigarray.Array1.t ->
string ->
int option ->
intval get_n_of_square :
string ->
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int option ->
intval get_nrhs_of_b :
string ->
int ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int option ->
intval orgqr_err :
loc:string ->
m:int ->
n:int ->
k:int ->
work:('a, 'b, 'c) Bigarray.Array1.t ->
a:('d, 'e, 'f) Bigarray.Array2.t ->
err:int ->
'gval orgqr_get_params :
string ->
?m:int ->
?n:int ->
?k:int ->
tau:('a, 'b, 'c) Bigarray.Array1.t ->
ar:int ->
ac:int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int * int * intval ormqr_err :
loc:string ->
side:[< `L | `R ] ->
m:int ->
n:int ->
k:int ->
lwork:int ->
a:('a, 'b, 'c) Bigarray.Array2.t ->
c:('d, 'e, 'f) Bigarray.Array2.t ->
err:int ->
'gval ormqr_get_params :
string ->
side:[< `L | `R ] ->
?m:int ->
?n:int ->
?k:int ->
tau:('a, 'b, 'c) Bigarray.Array1.t ->
ar:int ->
ac:int ->
('d, 'e, 'f) Bigarray.Array2.t ->
cr:int ->
cc:int ->
('g, 'h, 'i) Bigarray.Array2.t ->
int * int * intval gelsX_err :
string ->
(m:int -> n:int -> nrhs:int -> int) ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
int ->
int ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int ->
'gval gelsX_get_s :
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array1.t option ->
('a, 'b, 'c) Bigarray.Array1.tval gelsX_get_params :
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int option ->
int option ->
int option ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int * int * intval xxev_get_params :
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int option ->
bool ->
bool ->
int * char * charval xxev_get_wx :
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
string ->
string ->
int ->
('a, 'b, 'c) Bigarray.Array1.t option ->
int ->
int * ('a, 'b, 'c) Bigarray.Array1.tval geev_get_job_side :
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
(int -> int -> ('a, 'b, 'c) Bigarray.Array2.t) ->
string ->
int ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option option ->
int * int * ('a, 'b, 'c) Bigarray.Array2.t * char * boolval geev_gen_get_params :
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
(int -> int -> ('a, 'b, 'c) Bigarray.Array2.t) ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int option ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option option ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option option ->
int
* int
* int
* ('a, 'b, 'c) Bigarray.Array2.t
* char
* int
* int
* ('a, 'b, 'c) Bigarray.Array2.t
* char
* boolval gXmv_get_params :
string ->
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
int ->
int ->
int option ->
int option ->
('d, 'e, 'f) Bigarray.Array1.t ->
int option ->
int option ->
('a, 'b, 'c) Bigarray.Array1.t option ->
[< `C | `N | `T N ] ->
int * int * int * int * ('a, 'b, 'c) Bigarray.Array1.t * charval symv_get_params :
string ->
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int option ->
int option ->
int option ->
('g, 'h, 'i) Bigarray.Array1.t ->
int option ->
int option ->
('a, 'b, 'c) Bigarray.Array1.t option ->
bool ->
int * int * int * int * int * ('a, 'b, 'c) Bigarray.Array1.t * charval trXv_get_params :
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int option ->
int option ->
int option ->
('d, 'e, 'f) Bigarray.Array1.t ->
bool ->
[< `C | `N | `T ] ->
[< `N | `U ] ->
int * int * int * char * char * charval tpXv_get_params :
string ->
int option ->
('a, 'b, 'c) Bigarray.Array1.t ->
?n:int ->
int option ->
int option ->
('d, 'e, 'f) Bigarray.Array1.t ->
bool ->
[< `C | `N | `T ] ->
[< `N | `U ] ->
int * int * int * int * char * char * charval get_c :
string ->
(int -> int -> ('a, 'b, 'c) Bigarray.Array2.t) ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.tval get_rows_mat_tr :
string ->
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
int ->
[> `N ] ->
string ->
int option ->
intval get_cols_mat_tr :
string ->
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
int ->
[> `N ] ->
string ->
int option ->
intval get_inner_dim :
string ->
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
int ->
[> `N ] ->
string ->
('d, 'e, 'f) Bigarray.Array2.t ->
int ->
int ->
[> `N ] ->
string ->
int option ->
intval gemm_get_params :
string ->
(int -> int -> ('a, 'b, 'c) Bigarray.Array2.t) ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
[< `C | `N | `T N ] ->
int ->
int ->
('g, 'h, 'i) Bigarray.Array2.t ->
int ->
[< `C | `N | `T N ] ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option ->
int option ->
int option ->
int option ->
int * int * int * char * char * ('a, 'b, 'c) Bigarray.Array2.tval check_mat_square :
string ->
string ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
int ->
int ->
unitval symm_get_params :
string ->
(int -> int -> ('a, 'b, 'c) Bigarray.Array2.t) ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int ->
int ->
('g, 'h, 'i) Bigarray.Array2.t ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option ->
int option ->
int option ->
[< `L | `R L ] ->
bool ->
int * int * char * char * ('a, 'b, 'c) Bigarray.Array2.tval trXm_get_params :
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int option ->
int option ->
[< `L | `R L ] ->
bool ->
[< `C | `N | `T ] ->
[< `N | `U ] ->
int * int * char * char * char * charval syrk_get_params :
string ->
(int -> int -> ('a, 'b, 'c) Bigarray.Array2.t) ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option ->
int option ->
int option ->
bool ->
[< `C | `N | `T N ] ->
int * int * char * char * ('a, 'b, 'c) Bigarray.Array2.tval syr2k_get_params :
string ->
(int -> int -> ('a, 'b, 'c) Bigarray.Array2.t) ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int ->
int ->
('g, 'h, 'i) Bigarray.Array2.t ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option ->
int option ->
int option ->
bool ->
[< `C | `N | `T N ] ->
int * int * char * char * ('a, 'b, 'c) Bigarray.Array2.tval xlange_get_params :
string ->
int option ->
int option ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int * intval xxtrs_get_params :
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int option ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int option ->
int * intval xxtrs_err :
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
('d, 'e, 'f) Bigarray.Array2.t ->
int ->
'gval geXrf_get_params :
string ->
int option ->
int option ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int * intval getrf_get_ipiv :
string ->
(int32, Bigarray.int32_elt, Bigarray.fortran_layout) Bigarray.Array1.t option ->
int ->
int ->
Lacaml_common.int32_vecval sytrf_get_ipiv :
string ->
(int32, Bigarray.int32_elt, Bigarray.fortran_layout) Bigarray.Array1.t option ->
int ->
Lacaml_common.int32_vecval potrs_err :
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
('d, 'e, 'f) Bigarray.Array2.t ->
int ->
'gval trtrs_err :
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
('d, 'e, 'f) Bigarray.Array2.t ->
int ->
'gval tbtrs_err :
string ->
int ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
('d, 'e, 'f) Bigarray.Array2.t ->
int ->
'gval getri_err :
string ->
(int -> int) ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int ->
int ->
'dval gees_get_params_generic :
string ->
(int -> int -> ('a, 'b, 'c) Bigarray.Array2.t) ->
('a, 'b, 'c) Bigarray.Array2.t ->
[< `Compute_Schur_vectors | `No_Schur_vectors ] ->
[< `No_sort
| `Select_custom of 'd -> bool
| `Select_exterior_disk
| `Select_interior_disk
| `Select_left_plane
| `Select_right_plane ] ->
int option ->
int ->
int ->
('e, 'f, 'g) Bigarray.Array2.t ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t option ->
char * char * int * ('d -> bool) * int * ('a, 'b, 'c) Bigarray.Array2.tval gees_get_params_real :
string ->
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
(int -> int -> ('d, 'e, 'f) Bigarray.Array2.t) ->
('d, 'e, 'f) Bigarray.Array2.t ->
[< `Compute_Schur_vectors | `No_Schur_vectors ] ->
[< `No_sort
| `Select_custom of 'g -> bool
| `Select_exterior_disk
| `Select_interior_disk
| `Select_left_plane
| `Select_right_plane ] ->
int option ->
int ->
int ->
('h, 'i, 'j) Bigarray.Array2.t ->
('a, 'b, 'c) Bigarray.Array1.t option ->
('a, 'b, 'c) Bigarray.Array1.t option ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t option ->
char
* char
* int
* ('g ->
bool)
* int
* ('d, 'e, 'f) Bigarray.Array2.t
* ('a, 'b, 'c) Bigarray.Array1.t
* ('a, 'b, 'c) Bigarray.Array1.tval gees_get_params_complex :
string ->
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
(int -> int -> ('d, 'e, 'f) Bigarray.Array2.t) ->
('d, 'e, 'f) Bigarray.Array2.t ->
[< `Compute_Schur_vectors | `No_Schur_vectors ] ->
[< `No_sort
| `Select_custom of 'g -> bool
| `Select_exterior_disk
| `Select_interior_disk
| `Select_left_plane
| `Select_right_plane ] ->
int option ->
int ->
int ->
('h, 'i, 'j) Bigarray.Array2.t ->
('a, 'b, 'c) Bigarray.Array1.t option ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t option ->
char
* char
* int
* ('g ->
bool)
* int
* ('d, 'e, 'f) Bigarray.Array2.t
* ('a, 'b, 'c) Bigarray.Array1.tval gesvd_err :
string ->
char ->
char ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
('d, 'e, 'f) Bigarray.Array2.t ->
('g, 'h, 'i) Bigarray.Array2.t ->
int ->
int ->
'jval gesvd_get_params :
string ->
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
(int -> int -> ('d, 'e, 'f) Bigarray.Array2.t) ->
[< `A | `N | `O | `S ] ->
[< `A | `N | `O | `S ] ->
int option ->
int option ->
int ->
int ->
('g, 'h, 'i) Bigarray.Array2.t ->
('a, 'b, 'c) Bigarray.Array1.t option ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t option ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t option ->
char
* char
* int
* int
* ('a, 'b, 'c) Bigarray.Array1.t
* ('d, 'e, 'f) Bigarray.Array2.t
* ('d, 'e, 'f) Bigarray.Array2.tval gesdd_err :
string ->
char ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
('d, 'e, 'f) Bigarray.Array2.t ->
('g, 'h, 'i) Bigarray.Array2.t ->
int ->
int ->
'jval gesdd_get_params :
string ->
(int -> ('a, 'b, 'c) Bigarray.Array1.t) ->
(int -> int -> ('d, 'e, 'f) Bigarray.Array2.t) ->
[< `A | `N | `O | `S ] ->
int option ->
int option ->
int ->
int ->
('g, 'h, 'i) Bigarray.Array2.t ->
('a, 'b, 'c) Bigarray.Array1.t option ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t option ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t option ->
char
* int
* int
* ('a, 'b, 'c) Bigarray.Array1.t
* ('d, 'e, 'f) Bigarray.Array2.t
* ('d, 'e, 'f) Bigarray.Array2.tval xxsv_get_ipiv :
string ->
(int32, Bigarray.int32_elt, Bigarray.fortran_layout) Bigarray.Array1.t option ->
int ->
Lacaml_common.int32_vecval xxsv_get_params :
string ->
int ->
int ->
('a, 'b, 'c) Bigarray.Array2.t ->
int option ->
int ->
int ->
('d, 'e, 'f) Bigarray.Array2.t ->
int option ->
int * int