struct   type int_array = (int64, int64_elt, c_layout) Array1.t   type elt_array = (float, float64_elt, c_layout) Array1.t   type spmat_struct   let spmat_struct : spmat_struct structure typ = structure "gsl_spmatrix"     let sp_size1 = field spmat_struct "size1" int64_t     let sp_size2 = field spmat_struct "size2" int64_t     let sp_i     = field spmat_struct "i" (ptr int64_t)     let sp_data  = field spmat_struct "data" (ptr double)     let sp_p     = field spmat_struct "p" (ptr int64_t)     let sp_nzmax = field spmat_struct "nzmax" int64_t     let sp_nz    = field spmat_struct "nz" int64_t     let sp_tree  = field spmat_struct "tree_data" (ptr void)     let sp_work  = field spmat_struct "work" (ptr void)     let sp_type  = field spmat_struct "sptype" int64_t   let () = seal spmat_struct   
  (** record definition for sparse matrix *)
  type spmat_record = {     mutable m   : int;           (* number of rows *)     mutable n   : int;           (* number of columns *)     mutable i   : int_array;     (* i index, meaning depends on the matrix format *)     mutable d   : elt_array;     (* where data actually stored *)     mutable p   : int_array;     (* p index, meaning depends on the matrix format *)     mutable nz  : int;           (* total number of non-zero elements. BE CAREFUL! *)     (* tree missing *)     (* work missing *)     mutable typ : int;           (* sparse matrix format, 0:triplet; 1:CCS; 2:CRS *)     mutable ptr : spmat_struct Ctypes_static.structure Ctypes_static.ptr;     (* pointer to the sparse metrix *)   } end