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_tmts_tensormap_block_by_id(): get amts_block_tin 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_twith the givenkeysandblocks.blocks_countmust 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
blocksarray
- Returns:
A pointer to the newly allocated tensor map, or a
NULLpointer 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
NULLpointer 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
tensorpreviously created withmts_tensormap.If
tensorisNULL, 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
tensormap.This function allocates memory for
keyswhich must be releasedmts_labels_freewhen 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_freeor the set of keys is modified by calling one of themts_tensormap_keys_to_XXXfunction.- 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
tensorcorresponding to the givenselection. Theselectionshould 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,
*countshould contain the number of entries inblock_indexes. When the function returns successfully,*countwill 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
selectioncount – number of entries in
block_indexesselection – 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_movewill 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_movemust 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_samplesis 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_movewill 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_movedoes 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=0and propertiesp=1, 2with a block with keya=2and propertiesp=1, 3will produce a block with propertiesa, p = (0, 1), (0, 2), (2, 1), (2, 3).If
keys_to_movecontains 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_moveand then the current property labels. For example, usinga=2, 3inkeys_to_move, and blocks with propertiesp=1, 2will 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_samplesis 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
NULLpointer 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.
dimensionsmust be an array ofdimensions_countNULL-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
dimensionsarray
- 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.