let array_dim arr =
match arr.arr_flat with
| Some f -> object_of f.arr_cell , f.arr_dim - 1
| None ->
let rec collect_dim arr n =
match object_of arr.arr_element with
| C_array arr -> collect_dim arr (succ n)
| te -> te,n
in collect_dim arr 1