TensorMap¶
- class metatensor.torch.TensorMap(keys: Labels, blocks: List[TensorBlock])[source]¶
A TensorMap is the main user-facing class of this library, and can store any kind of data used in atomistic machine learning.
A tensor map contains a list of
TensorBlock, each one associated with a key. It also provides functions to access blocks associated with a key or part of a key, functions to merge blocks together and in general to manipulate this collection of blocks.See also
The pure Python version of this class
metatensor.TensorMap, and the differences between TorchScript and Python API for metatensor.- Parameters:
keys (Labels) – keys associated with each block
blocks (List[TensorBlock]) – set of blocks containing the actual data
- __getitem__(selection: int | Labels | LabelsEntry | Dict[str, int]) TensorBlock[source]¶
Get a single block with indexing syntax. This calls
TensorMap.block()directly.- Parameters:
- Return type:
- copy() TensorMap[source]¶
get a deep copy of this
TensorMap, including all the data and metadata- Return type:
- static load(path: str) TensorMap[source]¶
Load a serialized
TensorMapfrom the file atpath, this is equivalent tometatensor.torch.load().Warning
PyTorch can execute
staticfunctions (like this one) coming from a TorchScript extension, but fails when trying to save code calling this function withtorch.jit.save(), giving the following error:Failed to downcast a Function to a GraphFunction
This issue is reported as PyTorch#115639. In the mean time, you should use
metatensor.torch.load()instead of this function to save your code to TorchScript.
- static load_buffer(buffer: Tensor) TensorMap[source]¶
Load a serialized
TensorMapfrom an in-memorybuffer, this is equivalent tometatensor.torch.load_buffer().Warning
PyTorch can execute
staticfunctions (like this one) coming from a TorchScript extension, but fails when trying to save code calling this function withtorch.jit.save(), giving the following error:Failed to downcast a Function to a GraphFunction
This issue is reported as PyTorch#115639. In the mean time, you should use
metatensor.torch.load_buffer()instead of this function to save your code to TorchScript.
- save(path: str)[source]¶
Save this
TensorMapto a file, this is equivalent tometatensor.torch.save().- Parameters:
path (str) – Path of the file. If the file already exists, it will be overwritten
- save_buffer() Tensor[source]¶
Save this
TensorMapto an in-memory buffer, this is equivalent tometatensor.torch.save_buffer().- Return type:
- items() List[Tuple[LabelsEntry, TensorBlock]][source]¶
get an iterator over (key, block) pairs in this
TensorMap- Return type:
- keys_to_samples(keys_to_move: str | List[str] | Tuple[str, ...] | Labels, sort_samples: bool = True) TensorMap[source]¶
Merge blocks along the samples axis, adding
keys_to_moveto the end of the samples labels dimensions.This function will remove
keys_to_movefrom the keys, and find all blocks with the same remaining keys values. It will then merge these blocks along the samples direction (i.e. do a vertical concatenation), addingkeys_to_moveto the end of the samples labels dimensions. The values taken bykeys_to_movein the new samples labels will be the values of these dimensions in the merged blocks’ keys.If
keys_to_moveis a set ofLabels, it must be empty (len(keys_to_move) == 0), and only theLabels.nameswill be used.The order of the samples in the merged blocks is controlled by
sort_samples. Ifsort_samplesisTrue, 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 when the blocks to merge have the same properties values.
- keys_to_properties(keys_to_move: str | List[str] | Tuple[str, ...] | Labels, sort_samples: bool = True) TensorMap[source]¶
Merge blocks along the properties direction, adding
keys_to_moveat the beginning of the properties labels dimensions.This function will remove
keys_to_movefrom the keys, and find all blocks with the same remaining keys values. Then it will merge these blocks along the properties direction (i.e. do an horizontal concatenation).If
keys_to_moveis given as strings, then the new property labels will only contain entries from the existing blocks. 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_moveis a set ofLabelsand it is empty (len(keys_to_move) == 0), theLabels.nameswill be used as if they where passed directly.Finally, if
keys_to_moveis a non empty set ofLabels, the new properties labels will contains all of the entries ofkeys_to_move(regardless of the values taken bykeys_to_move.namesin the merged blocks’ keys) followed by the existing properties labels. For example, usinga=2, 3inkeys_to_move, blocks with propertiesp=1, 2will result ina, p = (2, 1), (2, 2), (3, 1), (3, 2). If there is no values (no block/missing sample) for a given property in the merged block, then the value will be set to zero.When using a non empty
Labelsforkeys_to_move, the properties labels of all the merged blocks must take the same values.The order of the samples in the merged blocks is controlled by
sort_samples. Ifsort_samplesisTrue, samples are re-ordered to keep them lexicographically sorted. Otherwise they are kept in the order in which they appear in the blocks.
- components_to_properties(dimensions: str | List[str] | Tuple[str, ...]) TensorMap[source]¶
Move the given
dimensionsfrom the component labels to the property labels for each block.
- blocks_matching(selection: Labels) List[int][source]¶
Get a (possibly empty) list of block indexes matching the
selection.This function finds all keys in this
TensorMapwith the same values asselectionfor the dimensions/names contained in theselection; and return the corresponding indexes.The
selectionshould contain a single entry.
- block_by_id(index: int) TensorBlock[source]¶
Get the block at
indexin thisTensorMap.- Parameters:
index (int) – index of the block to retrieve
- Return type:
- blocks_by_id(indices: List[int]) List[TensorBlock][source]¶
Get the blocks with the given
indicesin thisTensorMap.- Parameters:
- Return type:
- block(selection: None | int | Labels | LabelsEntry | Dict[str, int] = None) TensorBlock[source]¶
Get the single block in this
TensorMapmatching theselection.When
selectionis anint, this is equivalent toTensorMap.block_by_id().When
selectionis anLabels, it should only contain a single entry, which will be used for the selection.When
selectionis aDict[str, int], it is converted into a single singleLabelsEntry(the dict keys becoming the names and the dict values being joined together to form theLabelsEntryvalues), which is then used for the selection.When
selectionis aLabelsEntry, this function finds the key in thisTensorMapwith the same values asselectionfor the dimensions/names contained in theselection; and return the corresponding indexes.
- blocks(selection: None | List[int] | int | Labels | LabelsEntry | Dict[str, int] = None) List[TensorBlock][source]¶
Get the blocks in this
TensorMapmatching theselection.When
selectionisNone(the default), all blocks are returned.When
selectionis anint, this is equivalent toTensorMap.block_by_id(); and for aList[int]this is equivalent toTensorMap.blocks_by_id().When
selectionis anLabels, it should only contain a single entry, which will be used for the selection.When
selectionis aDict[str, int], it is converted into a single singleLabelsEntry(the dict keys becoming the names and the dict values being joined together to form theLabelsEntryvalues), which is then used for the selection.When
selectionis aLabelsEntry, this function finds all keys in thisTensorMapwith the same values asselectionfor the dimensions/names contained in theselection; and return the corresponding blocks.
- print(max_keys: int) str[source]¶
Print this
TensorMapto a string, including at mostmax_keysin the output.
- property dtype: dtype¶
get the dtype of all the arrays stored inside this
TensorMapWarning
Due to limitations in TorchScript C++ extensions, the dtype is returned as an integer, which can not be compared with
torch.dtypeinstances. SeeTensorBlock.dtype()for more information.
- to(dtype: dtype | None = None, device: device | None = None, arrays: str | None = None) TensorMap[source]¶
Move all the data (keys and blocks) in this
TensorMapto the givendtype,deviceandarraysbackend.- Parameters:
dtype (dtype | None) – new dtype to use for all arrays. The dtype stays the same if this is set to
None.device (device | None) – new device to use for all arrays. The device stays the same if this is set to
None.arrays (str | None) – new backend to use for the arrays. This parameter is here for compatibility with the pure Python API, can only be set to
"torch"orNoneand does nothing.
- Return type: