TensorMap#
-
typedef struct mts_tensormap_t mts_tensormap_t#
Opaque type representing a
TensorMap
.
The following functions operate on mts_tensormap_t
:
mts_tensormap()
: create new tensor mapmts_tensormap_copy()
: copy existing tensor mapsmts_tensormap_free()
: free allocated tensor mapsmts_tensormap_keys()
: get the keys defined in a tensor map asmts_labels_t
mts_tensormap_block_by_id()
: get amts_block_t
in a tensor map from its indexmts_tensormap_blocks_matching()
: get a list of block indexes matching a selectionmts_tensormap_keys_to_samples()
: move entries from keys to sample labelsmts_tensormap_keys_to_properties()
: move entries from keys to properties labelsmts_tensormap_components_to_properties()
: move entries from component labels to properties labels
-
struct mts_tensormap_t *mts_tensormap(struct mts_labels_t keys, struct mts_block_t **blocks, uintptr_t blocks_count)#
Create a new
mts_tensormap_t
with the givenkeys
andblocks
.blocks_count
must be set to the number of entries in the blocks array.The new tensor map takes ownership of the blocks, which should not be released separately.
The memory allocated by this function and the blocks should be released using
mts_tensormap_free
.- Parameters:
keys – labels containing the keys associated with each block
blocks – pointer to the first element of an array of blocks
blocks_count – number of elements in the
blocks
array
- Returns:
A pointer to the newly allocated tensor map, or a
NULL
pointer in case of error. In case of error, you can usemts_last_error()
to get the error message.
-
struct mts_tensormap_t *mts_tensormap_copy(const struct mts_tensormap_t *tensor)#
Make a copy of an
mts_tensormap_t
.The memory allocated by this function and the blocks should be released using
mts_tensormap_free
.- Parameters:
tensor – existing tensor to copy
- Returns:
A pointer to the newly allocated tensor, or a
NULL
pointer in case of error. In case of error, you can usemts_last_error()
to get the error message.
-
mts_status_t mts_tensormap_free(struct mts_tensormap_t *tensor)#
Free the memory associated with a
tensor
previously created withmts_tensormap
.If
tensor
isNULL
, this function does nothing.- Parameters:
tensor – pointer to an existing tensor map, or
NULL
- Returns:
The status code of this operation. If the status is not
MTS_SUCCESS
, you can usemts_last_error()
to get the full error message.
-
mts_status_t mts_tensormap_keys(const struct mts_tensormap_t *tensor, struct mts_labels_t *keys)#
Get the keys for the given
tensor
map.This function allocates memory for
keys
which must be releasedmts_labels_free
when you don’t need it anymore.- Parameters:
tensor – pointer to an existing tensor map
keys – pointer to be filled with the keys of the tensor map
- Returns:
The status code of this operation. If the status is not
MTS_SUCCESS
, you can usemts_last_error()
to get the full error message.
-
mts_status_t mts_tensormap_block_by_id(struct mts_tensormap_t *tensor, struct mts_block_t **block, uintptr_t index)#
Get a pointer to the
index
-th block in this tensor map.The block memory is still managed by the tensor map, this block should not be freed. The block is invalidated when the tensor map is freed with
mts_tensormap_free
or the set of keys is modified by calling one of themts_tensormap_keys_to_XXX
function.- Parameters:
tensor – pointer to an existing tensor map
block – pointer to be filled with a block
index – index of the block to get
- Returns:
The status code of this operation. If the status is not
MTS_SUCCESS
, you can usemts_last_error()
to get the full error message.
-
mts_status_t mts_tensormap_blocks_matching(const struct mts_tensormap_t *tensor, uintptr_t *block_indexes, uintptr_t *count, struct mts_labels_t selection)#
Get indices of the blocks in this
tensor
corresponding to the givenselection
. Theselection
should have a subset of the names/dimensions of the keys for this tensor map, and only one entry, describing the requested blocks.When calling this function,
*count
should contain the number of entries inblock_indexes
. When the function returns successfully,*count
will contain the number of blocks matching the selection, i.e. how many values were written toblock_indexes
.- Parameters:
tensor – pointer to an existing tensor map
block_indexes – array to be filled with indexes of blocks in the tensor map matching the
selection
count – number of entries in
block_indexes
selection – labels with a single entry describing which blocks are requested
- Returns:
The status code of this operation. If the status is not
MTS_SUCCESS
, you can usemts_last_error()
to get the full error message.
-
struct mts_tensormap_t *mts_tensormap_keys_to_samples(const struct mts_tensormap_t *tensor, struct mts_labels_t keys_to_move, bool sort_samples)#
Merge blocks with the same value for selected keys dimensions along the samples axis.
The dimensions (names) of
keys_to_move
will be moved from the keys to the sample labels, and blocks with the same remaining keys dimensions will be merged together along the sample axis.keys_to_move
must be empty (keys_to_move.count == 0
), and the new sample labels will contain entries corresponding to the merged blocks’ keys.The new sample labels will contains all of the merged blocks sample labels. The order of the samples is controlled by
sort_samples
. Ifsort_samples
is true, samples are re-ordered to keep them lexicographically sorted. Otherwise they are kept in the order in which they appear in the blocks.This function is only implemented if all merged block have the same property labels.
- Parameters:
tensor – pointer to an existing tensor map
keys_to_move – description of the keys to move
sort_samples – whether to sort the samples lexicographically after merging blocks or not
- Returns:
The status code of this operation. If the status is not
MTS_SUCCESS
, you can usemts_last_error()
to get the full error message.
-
struct mts_tensormap_t *mts_tensormap_keys_to_properties(const struct mts_tensormap_t *tensor, struct mts_labels_t keys_to_move, bool sort_samples)#
Merge blocks with the same value for selected keys dimensions along the property axis.
The dimensions (names) of
keys_to_move
will be moved from the keys to the property labels, and blocks with the same remaining keys dimensions will be merged together along the property axis.If
keys_to_move
does not contains any entries (keys_to_move.count == 0
), then the new property labels will contain entries corresponding to the merged blocks only. For example, merging a block with keya=0
and propertiesp=1, 2
with a block with keya=2
and propertiesp=1, 3
will produce a block with propertiesa, p = (0, 1), (0, 2), (2, 1), (2, 3)
.If
keys_to_move
contains entries, then the property labels must be the same for all the merged blocks. In that case, the merged property labels will contains each of the entries ofkeys_to_move
and then the current property labels. For example, usinga=2, 3
inkeys_to_move
, and blocks with propertiesp=1, 2
will result ina, p = (2, 1), (2, 2), (3, 1), (3, 2)
.The new sample labels will contains all of the merged blocks sample labels. The order of the samples is controlled by
sort_samples
. Ifsort_samples
is true, samples are re-ordered to keep them lexicographically sorted. Otherwise they are kept in the order in which they appear in the blocks.The result is a new tensor map, which should be freed with
mts_tensormap_free
.- Parameters:
tensor – pointer to an existing tensor map
keys_to_move – description of the keys to move
sort_samples – whether to sort the samples lexicographically after merging blocks
- Returns:
A pointer to the newly allocated tensor map, or a
NULL
pointer in case of error. In case of error, you can usemts_last_error()
to get the error message.
-
struct mts_tensormap_t *mts_tensormap_components_to_properties(struct mts_tensormap_t *tensor, const char *const *dimensions, uintptr_t dimensions_count)#
Move the given dimensions from the component labels to the property labels for each block in this tensor map.
dimensions
must be an array ofdimensions_count
NULL-terminated strings, encoded as UTF-8.- Parameters:
tensor – pointer to an existing tensor map
dimensions – names of the key dimensions to move to the properties
dimensions_count – number of entries in the
dimensions
array
- Returns:
The status code of this operation. If the status is not
MTS_SUCCESS
, you can usemts_last_error()
to get the full error message.