It also takes an optional argument `mode` ('c' or 'fortran') and a boolean `allocate_buffer`, that indicates
It also takes an optional argument `mode` ('c' or 'fortran') and a boolean `allocate_buffer`, that indicates whether a buffer should be allocated and freed when it goes out of scope::