###########################################################################################
# Copyright ironArray SL 2021.
#
# All rights reserved.
#
# This software is the confidential and proprietary information of ironArray SL
# ("Confidential Information"). You shall not disclose such Confidential Information
# and shall use it only in accordance with the terms of the license agreement.
###########################################################################################
from libcpp cimport bool
cdef extern from "":
ctypedef signed char int8_t
ctypedef signed short int16_t
ctypedef signed int int32_t
ctypedef signed long int64_t
ctypedef unsigned char uint8_t
ctypedef unsigned short uint16_t
ctypedef unsigned int uint32_t
ctypedef unsigned long long uint64_t
ctypedef unsigned long int uintptr_t
cdef extern from "libiarray/iarray.h":
ctypedef uint64_t ina_rc_t
# Stuff from "libinac/ina.h"
cdef enum:
INA_ES_USER_DEFINED = 1024UL
cdef enum:
INA_RC_BIT_C = 16U
cdef enum:
INA_ERR_COMPILED = 18ULL << INA_RC_BIT_C
INA_ERR_FAILED = 43ULL << INA_RC_BIT_C
INA_ERR_OUT_OF_RANGE = 84ULL << INA_RC_BIT_C
# End of stuff from "libinac/ina.h"
cdef enum:
IARRAY_COMP_SHUFFLE = 0x1,
IARRAY_COMP_BITSHUFFLE = 0x2,
IARRAY_COMP_DELTA = 0x4,
IARRAY_COMP_TRUNC_PREC = 0x8,
cdef enum:
IARRAY_ES_CONTAINER = INA_ES_USER_DEFINED + 1
IARRAY_ES_DTSHAPE
IARRAY_ES_SHAPE
IARRAY_ES_CHUNKSHAPE
IARRAY_ES_NDIM
IARRAY_ES_DTYPE
IARRAY_ES_STORAGE
IARRAY_ES_PERSISTENCY
IARRAY_ES_BUFFER
IARRAY_ES_CATERVA
IARRAY_ES_BLOSC
IARRAY_ES_ASSERTION
IARRAY_ES_BLOCKSHAPE
IARRAY_ES_RNG_METHOD
IARRAY_ES_RAND_METHOD
IARRAY_ES_RAND_PARAM
IARRAY_ES_ITER
IARRAY_ES_EVAL_METHOD
IARRAY_ES_EVAL_ENGINE
cdef enum:
IARRAY_ERR_EVAL_ENGINE_FAILED = INA_ERR_FAILED | IARRAY_ES_EVAL_ENGINE
IARRAY_ERR_EVAL_ENGINE_NOT_COMPILED = INA_ERR_COMPILED | IARRAY_ES_EVAL_ENGINE
IARRAY_ERR_EVAL_ENGINE_OUT_OF_RANGE = INA_ERR_OUT_OF_RANGE | IARRAY_ES_EVAL_ENGINE
cdef enum:
IARRAY_DIMENSION_MAX = 8
cdef enum:
IARRAY_EXPR_OPERANDS_MAX = 128
cdef enum:
IARRAY_EXPR_USER_PARAMS_MAX = 128
ctypedef enum iarray_container_flags_t:
IARRAY_CONTAINER_PERSIST = 0x1
ctypedef enum iarray_data_type_t:
IARRAY_DATA_TYPE_DOUBLE
IARRAY_DATA_TYPE_FLOAT
IARRAY_DATA_TYPE_INT64
IARRAY_DATA_TYPE_INT32
IARRAY_DATA_TYPE_INT16
IARRAY_DATA_TYPE_INT8
IARRAY_DATA_TYPE_UINT64
IARRAY_DATA_TYPE_UINT32
IARRAY_DATA_TYPE_UINT16
IARRAY_DATA_TYPE_UINT8
IARRAY_DATA_TYPE_BOOL
IARRAY_DATA_TYPE_MAX
ctypedef enum iarray_compression_codec_t:
IARRAY_COMPRESSION_BLOSCLZ = 0
IARRAY_COMPRESSION_LZ4
IARRAY_COMPRESSION_LZ4HC
IARRAY_COMPRESSION_SNAPPY
IARRAY_COMPRESSION_ZLIB
IARRAY_COMPRESSION_ZSTD
IARRAY_COMPRESSION_ZFP_FIXED_ACCURACY
IARRAY_COMPRESSION_ZFP_FIXED_PRECISION
IARRAY_COMPRESSION_ZFP_FIXED_RATE
ctypedef enum iarray_compression_favor_t:
IARRAY_COMPRESSION_FAVOR_BALANCE = 0
IARRAY_COMPRESSION_FAVOR_SPEED
IARRAY_COMPRESSION_FAVOR_CRATIO
ctypedef enum iarray_eval_method_t:
IARRAY_EVAL_METHOD_AUTO
IARRAY_EVAL_METHOD_ITERCHUNK
IARRAY_EVAL_METHOD_ITERBLOSC
IARRAY_EVAL_METHOD_ITERBLOSC2
ctypedef enum iarray_eval_engine_t:
IARRAY_EVAL_ENGINE_AUTO
IARRAY_EVAL_ENGINE_INTERPRETER
IARRAY_EVAL_ENGINE_COMPILER
ctypedef enum iarray_split_mode_t:
IARRAY_ALWAYS_SPLIT = 1
IARRAY_NEVER_SPLIT = 2
IARRAY_AUTO_SPLIT = 3
IARRAY_FORWARD_COMPAT_SPLIT = 4
ctypedef struct iarray_config_t:
iarray_compression_codec_t compression_codec
int compression_level
iarray_compression_favor_t compression_favor
int use_dict
int splitmode
int filter_flags
unsigned int eval_method
int max_num_threads
uint8_t fp_mantissa_bits
bool btune
uint8_t compression_meta
ctypedef struct iarray_storage_t:
const char *urlpath
bool contiguous
int64_t chunkshape[IARRAY_DIMENSION_MAX]
int64_t blockshape[IARRAY_DIMENSION_MAX]
ctypedef struct iarray_dtshape_t:
iarray_data_type_t dtype
int32_t dtype_size
int8_t ndim
int64_t shape[IARRAY_DIMENSION_MAX]
ctypedef struct iarray_context_t
ctypedef struct iarray_container_t:
iarray_dtshape_t *dtshape
# iarray_auxshape_t *auxshape;
# caterva_array_t *catarr;
iarray_storage_t *storage
#iarray_container_t *container_viewed;
bool transposed
#union { float f; double d; } scalar_value;
ctypedef struct _iarray_jug_var_t:
const char *var
iarray_container_t *c
ctypedef union iarray_user_param_t:
float f32
double f64
int32_t i32
int64_t i64
bool b
ctypedef struct iarray_expression_t:
iarray_context_t *ctx
# ina_str_t expr;
int32_t typesize
int64_t nbytes
int nvars
int32_t max_out_len
# jug_expression_t *jug_expr;
uint64_t jug_expr_func
iarray_dtshape_t *out_dtshape
iarray_storage_t *out_store_properties
iarray_container_t *out
_iarray_jug_var_t vars[IARRAY_EXPR_OPERANDS_MAX]
iarray_user_param_t user_params[IARRAY_EXPR_USER_PARAMS_MAX]
int nuser_params
ina_rc_t iarray_init()
void iarray_destroy()
const char* iarray_err_strerror(ina_rc_t rc)
ina_rc_t iarray_context_new(iarray_config_t *cfg,
iarray_context_t **ctx)
void iarray_context_free(iarray_context_t **ctx)
ina_rc_t iarray_get_ncores(int *ncores, int64_t max_ncores);
ina_rc_t iarray_get_L2_size(uint64_t *l2_size);
ina_rc_t iarray_partition_advice(iarray_context_t *ctx, iarray_dtshape_t *dtshape,
iarray_storage_t *storage,
int64_t min_chunksize, int64_t max_chunksize,
int64_t min_blocksize, int64_t max_blocksize);
ina_rc_t iarray_uninit(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_storage_t *storage,
iarray_container_t ** container)
void iarray_container_free(iarray_context_t *ctx,
iarray_container_t **container)
ina_rc_t iarray_container_info(iarray_container_t *c,
int64_t *nbytes,
int64_t *cbytes)
ina_rc_t iarray_arange(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
double start,
double step,
iarray_storage_t *storage,
iarray_container_t **container)
ina_rc_t iarray_linspace(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
double start,
double stop,
iarray_storage_t *storage,
iarray_container_t **container)
ina_rc_t iarray_zeros(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_storage_t *storage,
iarray_container_t **container)
ina_rc_t iarray_ones(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_storage_t *storage,
iarray_container_t **container)
ina_rc_t iarray_fill(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
void *value,
iarray_storage_t *storage,
iarray_container_t ** container)
ina_rc_t iarray_copy(iarray_context_t *ctx,
iarray_container_t *src,
bool view,
iarray_storage_t *storage,
iarray_container_t **dest) nogil
ina_rc_t iarray_get_slice(iarray_context_t *ctx,
iarray_container_t *src,
int64_t *start,
int64_t *stop,
bool view,
iarray_storage_t *storage,
iarray_container_t **container)
ina_rc_t iarray_get_type_view(iarray_context_t *ctx,
iarray_container_t *src,
iarray_data_type_t view_dtype,
iarray_container_t **container)
ina_rc_t iarray_set_slice_buffer(iarray_context_t *ctx,
iarray_container_t *container,
const int64_t *start,
const int64_t *stop,
void *buffer,
int64_t buflen)
ina_rc_t iarray_to_buffer(iarray_context_t *ctx,
iarray_container_t *container,
void *buffer,
int64_t buflen)
ina_rc_t iarray_container_resize(iarray_context_t *ctx,
iarray_container_t *container,
int64_t *new_shape,
int64_t *start)
ina_rc_t iarray_container_insert(iarray_context_t *ctx,
iarray_container_t *container,
void *buffer,
int64_t buffersize,
const int8_t axis,
int64_t insert_start)
ina_rc_t iarray_container_append(iarray_context_t *ctx,
iarray_container_t *container,
void *buffer,
int64_t buffersize,
const int8_t axis)
ina_rc_t iarray_container_delete(iarray_context_t *ctx,
iarray_container_t *container,
const int8_t axis,
int64_t delete_start,
int64_t delete_len)
ina_rc_t iarray_squeeze_index(iarray_context_t *ctx,
iarray_container_t *container,
bool *index)
ina_rc_t iarray_squeeze(iarray_context_t *ctx,
iarray_container_t *container)
ina_rc_t iarray_get_dtshape(iarray_context_t *ctx,
iarray_container_t *c,
iarray_dtshape_t *dtshape)
ina_rc_t iarray_get_storage(iarray_context_t *ctx,
iarray_container_t *c,
iarray_storage_t *storage)
ina_rc_t iarray_get_cfg(iarray_context_t *ctx,
iarray_container_t *c,
iarray_config_t *cfg)
ina_rc_t iarray_is_view(iarray_context_t *ctx,
iarray_container_t *c,
bool *view)
ina_rc_t iarray_is_transposed(iarray_context_t *ctx,
iarray_container_t *c,
bool *transposed)
ina_rc_t iarray_from_buffer(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
void *buffer,
int64_t buflen,
iarray_storage_t *storage,
iarray_container_t **container)
ina_rc_t iarray_container_load(iarray_context_t *ctx,
char *urlpath,
iarray_container_t **container)
ina_rc_t iarray_container_open(iarray_context_t *ctx,
char *urlpath,
iarray_container_t **container)
ina_rc_t iarray_to_cframe(iarray_context_t *ctx,
iarray_container_t *src,
uint8_t ** frame,
int64_t *frame_len,
bool *needs_free);
ina_rc_t iarray_from_cframe(iarray_context_t *ctx,
uint8_t *frame,
int64_t frame_len,
bool copy,
iarray_container_t ** container);
ina_rc_t iarray_split(iarray_context_t *ctx,
iarray_container_t *src,
iarray_container_t ** dest);
ina_rc_t iarray_from_chunk_index(iarray_context_t *ctx,
iarray_container_t *src,
int64_t *shape,
int64_t *chunk_indexes,
int64_t chunk_indexes_len,
iarray_container_t ** dest);
ina_rc_t iarray_concatenate(iarray_context_t *ctx,
iarray_container_t ** src,
iarray_dtshape_t *dtshape,
iarray_storage_t *storage,
iarray_container_t ** dest);
bool iarray_is_empty(iarray_container_t *container)
ina_rc_t iarray_expr_new(iarray_context_t *ctx,
iarray_data_type_t dtype,
iarray_expression_t **e)
void iarray_expr_free(iarray_context_t *ctx,
iarray_expression_t **e)
ina_rc_t iarray_expr_bind(iarray_expression_t *e, const char *var, iarray_container_t *val)
ina_rc_t iarray_expr_bind_param(iarray_expression_t *e, iarray_user_param_t val)
ina_rc_t iarray_expr_bind_out_properties(iarray_expression_t *e,
iarray_dtshape_t *dtshape,
iarray_storage_t *store);
ina_rc_t iarray_expr_compile(iarray_expression_t *e, const char *expr)
ina_rc_t iarray_expr_compile_udf(iarray_expression_t *e,
int llvm_bc_len,
const char *llvm_bc,
const char *name)
ina_rc_t iarray_eval(iarray_expression_t *e, iarray_container_t **c) nogil
# Linear algebra
ctypedef enum iarray_operator_hint_t:
IARRAY_OPERATOR_GENERAL = 0
IARRAY_OPERATOR_SYMMETRIC
IARRAY_OPERATOR_TRIANGULAR
ina_rc_t iarray_matmul_advice(iarray_context_t *ctx,
iarray_container_t *a,
iarray_container_t *b,
iarray_container_t *c,
int64_t *blockshape_a,
int64_t *blockshape_b,
int64_t low,
int64_t high)
ina_rc_t iarray_linalg_matmul(iarray_context_t *ctx,
iarray_container_t *a,
iarray_container_t *b,
iarray_storage_t *store,
iarray_container_t **result)
ina_rc_t iarray_opt_gemv(iarray_context_t *ctx,
iarray_container_t *a,
iarray_container_t *b,
iarray_storage_t *store,
iarray_container_t **result)
ina_rc_t iarray_opt_gemm(iarray_context_t *ctx,
iarray_container_t *a,
iarray_container_t *b,
iarray_storage_t *store,
iarray_container_t **result)
ina_rc_t iarray_opt_gemm_b(iarray_context_t *ctx,
iarray_container_t *a,
iarray_container_t *b,
iarray_storage_t *store,
iarray_container_t **result)
ina_rc_t iarray_opt_gemm_a(iarray_context_t *ctx,
iarray_container_t *a,
iarray_container_t *b,
iarray_storage_t *store,
iarray_container_t **result)
ina_rc_t iarray_linalg_transpose(iarray_context_t *ctx,
iarray_container_t *a,
iarray_container_t **b);
# Reductions
ctypedef enum iarray_reduce_func_t:
IARRAY_REDUCE_MAX,
IARRAY_REDUCE_MIN,
IARRAY_REDUCE_SUM,
IARRAY_REDUCE_PROD,
IARRAY_REDUCE_MEAN,
IARRAY_REDUCE_VAR,
IARRAY_REDUCE_STD,
IARRAY_REDUCE_MEDIAN,
IARRAY_REDUCE_NAN_MAX,
IARRAY_REDUCE_NAN_MIN,
IARRAY_REDUCE_NAN_SUM,
IARRAY_REDUCE_NAN_PROD,
IARRAY_REDUCE_NAN_MEAN,
IARRAY_REDUCE_NAN_VAR,
IARRAY_REDUCE_NAN_STD,
IARRAY_REDUCE_NAN_MEDIAN,
IARRAY_REDUCE_ALL,
IARRAY_REDUCE_ANY,
ina_rc_t iarray_reduce(iarray_context_t *ctx,
iarray_container_t *a,
iarray_reduce_func_t func,
int8_t axis,
iarray_storage_t *store,
iarray_container_t **b,
bool oneshot,
double correction);
ina_rc_t iarray_reduce_multi(iarray_context_t *ctx,
iarray_container_t *a,
iarray_reduce_func_t func,
int8_t naxis,
int8_t *axis,
iarray_storage_t *store,
iarray_container_t **b,
bool oneshot,
double correction);
# Iterators
ctypedef struct iarray_iter_write_block_t
ctypedef struct iarray_iter_write_block_value_t:
void *block_pointer
int64_t *block_index
int64_t *elem_index
int64_t nblock
int64_t *block_shape
int64_t block_size
ina_rc_t iarray_iter_write_block_new(iarray_context_t *ctx,
iarray_iter_write_block_t **itr,
iarray_container_t *container,
const int64_t *blockshape,
iarray_iter_write_block_value_t *value,
bool external_buffer)
void iarray_iter_write_block_free(iarray_iter_write_block_t **itr)
ina_rc_t iarray_iter_write_block_next(iarray_iter_write_block_t *itr, void *buffer, int32_t bufsize)
ina_rc_t iarray_iter_write_block_has_next(iarray_iter_write_block_t *itr)
ctypedef struct iarray_iter_read_block_t
ctypedef struct iarray_iter_read_block_value_t:
void *block_pointer
int64_t *block_index
int64_t *elem_index
int64_t nblock
int64_t* block_shape
int64_t block_size
ina_rc_t iarray_iter_read_block_new(iarray_context_t *ctx,
iarray_iter_read_block_t **itr,
iarray_container_t *cont,
const int64_t *blockshape,
iarray_iter_read_block_value_t *value,
bool external_buffer)
void iarray_iter_read_block_free(iarray_iter_read_block_t **itr)
ina_rc_t iarray_iter_read_block_next(iarray_iter_read_block_t *itr, void *buffer, int32_t bufsize)
ina_rc_t iarray_iter_read_block_has_next(iarray_iter_read_block_t *itr)
# Random
ctypedef enum iarray_random_rng_t:
IARRAY_RANDOM_RNG_MRG32K3A
ctypedef enum iarray_random_dist_parameter_t:
IARRAY_RANDOM_DIST_PARAM_MU
IARRAY_RANDOM_DIST_PARAM_SIGMA
IARRAY_RANDOM_DIST_PARAM_ALPHA
IARRAY_RANDOM_DIST_PARAM_BETA
IARRAY_RANDOM_DIST_PARAM_LAMBDA
IARRAY_RANDOM_DIST_PARAM_A
IARRAY_RANDOM_DIST_PARAM_B
IARRAY_RANDOM_DIST_PARAM_P
IARRAY_RANDOM_DIST_PARAM_M
IARRAY_RANDOM_DIST_PARAM_SENTINEL
ctypedef struct iarray_random_ctx_t
ina_rc_t iarray_random_ctx_new(iarray_context_t *ctx,
uint32_t seed,
iarray_random_rng_t rng,
iarray_random_ctx_t **rng_ctx)
void iarray_random_ctx_free(iarray_context_t *ctx, iarray_random_ctx_t **rng_ctx)
ina_rc_t iarray_random_dist_set_param(iarray_random_ctx_t *ctx,
iarray_random_dist_parameter_t key,
double value)
ina_rc_t iarray_random_rand(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *rand_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_randn(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *rand_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_beta(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *rand_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_lognormal(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *rand_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_exponential(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *random_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_uniform(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *random_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_normal(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *random_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_bernoulli(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *random_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_binomial(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *random_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_poisson(iarray_context_t *ctx,
iarray_dtshape_t *dtshape,
iarray_random_ctx_t *random_ctx,
iarray_storage_t *store,
iarray_container_t **container)
ina_rc_t iarray_random_kstest(iarray_context_t *ctx,
iarray_container_t *container1,
iarray_container_t *container2,
bool *res)
# Vlmetalayers
ctypedef struct iarray_metalayer_t:
char *name;
uint8_t *sdata;
int32_t size;
ina_rc_t iarray_vlmeta_exists(iarray_context_t *ctx, iarray_container_t *c, const char *name, bool *exists);
ina_rc_t iarray_vlmeta_add(iarray_context_t *ctx, iarray_container_t *c, iarray_metalayer_t *meta);
ina_rc_t iarray_vlmeta_update(iarray_context_t *ctx, iarray_container_t *c, iarray_metalayer_t *meta);
ina_rc_t iarray_vlmeta_get(iarray_context_t *ctx, iarray_container_t *c, const char *name, iarray_metalayer_t *meta);
ina_rc_t iarray_vlmeta_delete(iarray_context_t *ctx, iarray_container_t *c, const char *name);
ina_rc_t iarray_vlmeta_nitems(iarray_context_t *ctx, iarray_container_t *c, int16_t *nitems);
ina_rc_t iarray_vlmeta_get_names(iarray_context_t *ctx, iarray_container_t *c, char ** names);
# Zarr proxy
ctypedef void (*zhandler_ptr) (char *zarr_urlpath, int64_t *slice_start, int64_t *slice_stop, uint8_t *dest)
ina_rc_t iarray_add_zproxy_postfilter(iarray_container_t *src, char *zarr_urlpath, zhandler_ptr zhandler)
# UDF registry and library functionality
ctypedef struct iarray_udf_library_t
ina_rc_t iarray_udf_library_new(const char *name,
iarray_udf_library_t **lib);
void iarray_udf_library_free(iarray_udf_library_t **lib);
ina_rc_t iarray_udf_func_register(iarray_udf_library_t *lib,
int llvm_bc_len,
const char *llvm_bc,
iarray_data_type_t return_type,
int num_args,
iarray_data_type_t *arg_types,
const char *name);
ina_rc_t iarray_udf_func_lookup(const char *full_name,
uint64_t *function_ptr);
# Indexing
ina_rc_t iarray_set_orthogonal_selection(iarray_context_t *ctx,
iarray_container_t *c,
int64_t ** selection, int64_t *selection_size,
void *buffer,
int64_t *buffer_shape,
int64_t buffer_size);
ina_rc_t iarray_get_orthogonal_selection(iarray_context_t *ctx,
iarray_container_t *c,
int64_t ** selection, int64_t *selection_size,
void *buffer,
int64_t *buffer_shape,
int64_t buffer_size);