Labels#
- 
class Labels#
- A set of labels used to carry metadata associated with a tensor map. - This is similar to an array of named tuples, but stored as a 2D array of shape - (count, size), with a set of names associated with the columns of this array (often called dimensions). Each row/entry in this array is unique, and they are often (but not always) sorted in lexicographic order.- Public Functions - 
inline Labels(const std::vector<std::string> &names, const std::vector<std::initializer_list<int32_t>> &values)#
- Create a new set of Labels from the given - namesand- values.- Each entry in the values must contain - names.size()elements.- auto labels = Labels({"first", "second"}, { {0, 1}, {1, 4}, {2, 1}, {2, 3}, }); 
 - 
inline explicit Labels(const std::vector<std::string> &names)#
- Create an empty set of Labels with the given names. 
 - 
inline Labels(const std::vector<std::string> &names, const int32_t *values, size_t count)#
- Create labels with the given - namesand- values.- valuesmust be an array with- count x names.size()elements.
 - 
inline const std::vector<const char*> &names() const#
- Get the names of the dimensions used in these - Labels.
 - 
inline size_t count() const#
- Get the number of entries in this set of Labels. - This is the same as - shape()[0]for the corresponding values array
 - 
inline size_t size() const#
- Get the number of dimensions in this set of Labels. - This is the same as - shape()[1]for the corresponding values array
 - 
inline mts_labels_t as_mts_labels_t() const#
- Convert from this set of Labels to the C - mts_labels_t
 - 
inline void *user_data() &#
- Get the user data pointer registered with these - Labels.- If no user data have been registered, this function will return - nullptr.
 - 
inline void set_user_data(LabelsUserData user_data)#
- Register some user data pointer with these - Labels.- Any existing user data will be released (by calling the provided - deletefunction) before overwriting with the new data.
 - 
inline int64_t position(std::initializer_list<int32_t> entry) const#
- Get the position of the - entryin this set of Labels, or -1 if the entry is not part of these Labels.
 - 
template<size_t N>
 inline int64_t position(const std::array<int32_t, N> &entry) const#
- Variant of - Labels::positiontaking a fixed-size array as input.
 - 
inline int64_t position(const std::vector<int32_t> &entry) const#
- Variant of - Labels::positiontaking a vector as input.
 - 
inline int64_t position(const int32_t *entry, size_t length) const#
- Variant of - Labels::positiontaking a pointer and length as input.
 - 
inline Labels set_union(const Labels &other, int64_t *first_mapping = nullptr, size_t first_mapping_count = 0, int64_t *second_mapping = nullptr, size_t second_mapping_count = 0) const#
- Take the union of these - Labelswith- other.- If requested, this function can also give the positions in the union where each entry of the input - Labelsended up.- No user data pointer is registered with the output, even if the inputs have some. - Parameters:
- other – the - Labelswe want to take the union with
- first_mapping – if you want the mapping from the positions of entries in - thisto the positions in the union, this should be a pointer to an array containing- this->count()elements, to be filled by this function. Otherwise it should be a- nullptr.
- first_mapping_count – number of elements in - first_mapping
- second_mapping – if you want the mapping from the positions of entries in - otherto the positions in the union, this should be a pointer to an array containing- other.count()elements, to be filled by this function. Otherwise it should be a- nullptr.
- second_mapping_count – number of elements in - second_mapping
 
- Returns:
- The status code of this operation. If the status is not - MTS_SUCCESS, you can use- mts_last_error()to get the full error message.
 
 - 
inline Labels set_union(const Labels &other, std::vector<int64_t> &first_mapping, std::vector<int64_t> &second_mapping) const#
- Take the union of these - Labelswith- other.- If requested, this function can also give the positions in the union where each entry of the input - Labelsended up.- No user data pointer is registered with the output, even if the inputs have some. - Parameters:
- other – the - Labelswe want to take the union with
- first_mapping – if you want the mapping from the positions of entries in - thisto the positions in the union, this should be a vector containing- this->count()elements, to be filled by this function. Otherwise it should be an empty vector.
- second_mapping – if you want the mapping from the positions of entries in - otherto the positions in the union, this should be a vector containing- other.count()elements, to be filled by this function. Otherwise it should be an empty vector.
 
- Returns:
- The status code of this operation. If the status is not - MTS_SUCCESS, you can use- mts_last_error()to get the full error message.
 
 - 
inline Labels set_intersection(const Labels &other, int64_t *first_mapping = nullptr, size_t first_mapping_count = 0, int64_t *second_mapping = nullptr, size_t second_mapping_count = 0) const#
- Take the intersection of these - Labelswith- other.- If requested, this function can also give the positions in the intersection where each entry of the input - Labelsended up.- No user data pointer is registered with the output, even if the inputs have some. - Parameters:
- other – the - Labelswe want to take the intersection with
- first_mapping – if you want the mapping from the positions of entries in - thisto the positions in the intersection, this should be a pointer to an array containing- this->count()elements, to be filled by this function. Otherwise it should be a- nullptr. If an entry in- thisis not used in the intersection, the mapping will be set to -1.
- first_mapping_count – number of elements in - first_mapping
- second_mapping – if you want the mapping from the positions of entries in - otherto the positions in the intersection, this should be a pointer to an array containing- other.count()elements, to be filled by this function. Otherwise it should be a- nullptr. If an entry in- otheris not used in the intersection, the mapping will be set to -1.
- second_mapping_count – number of elements in - second_mapping
 
- Returns:
- The status code of this operation. If the status is not - MTS_SUCCESS, you can use- mts_last_error()to get the full error message.
 
 - 
inline Labels set_intersection(const Labels &other, std::vector<int64_t> &first_mapping, std::vector<int64_t> &second_mapping) const#
- Take the intersection of this - Labelswith- other.- If requested, this function can also give the positions in the intersection where each entry of the input - Labelsended up.- No user data pointer is registered with the output, even if the inputs have some. - Parameters:
- other – the - Labelswe want to take the intersection with
- first_mapping – if you want the mapping from the positions of entries in - thisto the positions in the intersection, this should be a vector containing- this->count()elements, to be filled by this function. Otherwise it should be an empty vector. If an entry in- thisis not used in the intersection, the mapping will be set to -1.
- second_mapping – if you want the mapping from the positions of entries in - otherto the positions in the intersection, this should be a vector containing- other.count()elements, to be filled by this function. Otherwise it should be an empty vector. If an entry in- otheris not used in the intersection, the mapping will be set to -1.
 
- Returns:
- The status code of this operation. If the status is not - MTS_SUCCESS, you can use- mts_last_error()to get the full error message.
 
 
- 
inline Labels(const std::vector<std::string> &names, const std::vector<std::initializer_list<int32_t>> &values)#
- 
class LabelsUserData#
- It is possible to store some user-provided data inside - Labels, and access it later. This class is used to take ownership of the data and corresponding delete function before giving the data to metatensor.- User data inside - Labelsis an advanced functionality, that most users should not need to interact with.- Public Functions - 
inline LabelsUserData(void *data, void (*deleter)(void*))#
- Create - LabelsUserDatacontaining the given- data.- deleterwill be called when the data is dropped, and should free the corresponding memory.
 - 
LabelsUserData(const LabelsUserData &other) = delete#
- LabelsUserData is not copy-constructible. 
 - 
LabelsUserData &operator=(const LabelsUserData &other) = delete#
- LabelsUserData can not be copy-assigned. 
 - 
inline LabelsUserData(LabelsUserData &&other) noexcept#
- LabelsUserData is move-constructible. 
 - 
inline LabelsUserData &operator=(LabelsUserData &&other) noexcept#
- LabelsUserData be move-assigned. 
 
- 
inline LabelsUserData(void *data, void (*deleter)(void*))#