ovito 3.14.0__cp313-cp313-win_amd64.whl → 3.14.1__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ovito might be problematic. Click here for more details.
- ovito/data/__init__.pyi +46 -0
- ovito/data/_property_class.py +19 -4
- ovito/data/_property_container.py +210 -36
- ovito/io/ase/__init__.py +1 -1
- ovito/pipeline/__init__.pyi +2 -1
- ovito/pipeline/_modifier_interface.py +1 -1
- ovito/pipeline/_pipeline_source_interface.py +1 -1
- ovito/plugins/anari_library_visrtx.dll +0 -0
- ovito/plugins/libcrypto-3-x64.dll +0 -0
- ovito/plugins/libssl-3-x64.dll +0 -0
- ovito/plugins/ovito_bindings.pyd +0 -0
- ovito/plugins/ssh.dll +0 -0
- {ovito-3.14.0.dist-info → ovito-3.14.1.dist-info}/METADATA +1 -1
- {ovito-3.14.0.dist-info → ovito-3.14.1.dist-info}/RECORD +32 -32
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/etc/jupyter/nbconfig/notebook.d/jupyter-ovito.json +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/package.json +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/212.a91d8c3b2f0512f1a27a.js +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/212.a91d8c3b2f0512f1a27a.js.LICENSE.txt +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/261.7f7ef969c49c49fa7b56.js +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/406.626f8de2687e0a1e52c7.js +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/486.a609121e89fefbcc13d9.js +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/486.a609121e89fefbcc13d9.js.LICENSE.txt +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/968.ec4930f7e55ef707366b.js +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/remoteEntry.20fbded037a6d6e82936.js +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/style.js +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/static/third-party-licenses.json +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/nbextensions/jupyter-ovito/extension.js +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/nbextensions/jupyter-ovito/index.js +0 -0
- {ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/nbextensions/jupyter-ovito/index.js.LICENSE.txt +0 -0
- {ovito-3.14.0.dist-info → ovito-3.14.1.dist-info}/WHEEL +0 -0
- {ovito-3.14.0.dist-info → ovito-3.14.1.dist-info}/entry_points.txt +0 -0
- {ovito-3.14.0.dist-info → ovito-3.14.1.dist-info}/top_level.txt +0 -0
ovito/data/__init__.pyi
CHANGED
|
@@ -41,6 +41,7 @@ import ovito.pipeline
|
|
|
41
41
|
import numpy
|
|
42
42
|
from ovito import ArrayLike
|
|
43
43
|
from numpy.typing import NDArray, DTypeLike
|
|
44
|
+
import numbers
|
|
44
45
|
import enum
|
|
45
46
|
import os
|
|
46
47
|
from dataclasses import dataclass
|
|
@@ -1042,6 +1043,7 @@ OVITO has several concrete implementations of the abstract :py:class:`PropertyCo
|
|
|
1042
1043
|
* :py:class:`VoxelGrid`
|
|
1043
1044
|
* :py:class:`DataTable`
|
|
1044
1045
|
* :py:class:`Lines`
|
|
1046
|
+
* :py:class:`Vectors`
|
|
1045
1047
|
* :py:attr:`SurfaceMesh.vertices`
|
|
1046
1048
|
* :py:attr:`SurfaceMesh.faces`
|
|
1047
1049
|
* :py:attr:`SurfaceMesh.regions`"""
|
|
@@ -1062,6 +1064,45 @@ OVITO has several concrete implementations of the abstract :py:class:`PropertyCo
|
|
|
1062
1064
|
def __delitem__(self, key: str) -> None:
|
|
1063
1065
|
...
|
|
1064
1066
|
|
|
1067
|
+
def append(self, new_row: Mapping[str, numbers.Number | Sequence[numbers.Number] | ArrayLike], strict: bool=True) -> int:
|
|
1068
|
+
"""Appends a new row of data to the end of the :py:class:`PropertyContainer` by incrementing the :py:attr:`count` by one.
|
|
1069
|
+
The data of the new element is provided as a dictionary of key-value pairs, where the keys are the property names in the container and the values are the corresponding property values.
|
|
1070
|
+
If the container type does not support appending elements, a ``RuntimeError`` is raised.
|
|
1071
|
+
|
|
1072
|
+
:param new_row: A dictionary mapping property names to their values for the new row.
|
|
1073
|
+
:param strict: If set to ``True`` (default), a strict checking of the keys in *new_row* is performed.
|
|
1074
|
+
:returns: The zero-based index of the newly added row.
|
|
1075
|
+
|
|
1076
|
+
When the `strict` parameter is set to ``True`` (default), the dictionary keys must match the container's property names exactly.
|
|
1077
|
+
In other words, you have to specify a value for every existing property in the container (and *only* those properties).
|
|
1078
|
+
If any keys are missing or extra, a ``KeyError`` is raised.
|
|
1079
|
+
|
|
1080
|
+
When `strict` is set to ``False``:
|
|
1081
|
+
|
|
1082
|
+
* Missing keys are ignored, and the corresponding property values are initialized to 0.
|
|
1083
|
+
* For extra keys, new properties are added to the container and initialized to 0 for all existing elements.
|
|
1084
|
+
* The *dtype* and number of vector components of new properties are inferred from the provided values.
|
|
1085
|
+
|
|
1086
|
+
Example usage of the :py:meth:`append` method:
|
|
1087
|
+
|
|
1088
|
+
```python
|
|
1089
|
+
print(sorted(data.particles.keys()))
|
|
1090
|
+
# >>> ['Force', 'Particle Identifier', 'Particle Type', 'Position', 'peatom']
|
|
1091
|
+
print(data.particles.count)
|
|
1092
|
+
# >>> 7071
|
|
1093
|
+
data.particles_.append({"Force": (1.2, -1.2, 3.1),
|
|
1094
|
+
"Particle Identifier": 7072,
|
|
1095
|
+
"Particle Type": 2,
|
|
1096
|
+
"Position": (31.2, 33.0, 29.8),
|
|
1097
|
+
"peatom": -4.32})
|
|
1098
|
+
print(data.particles.count)
|
|
1099
|
+
# -> 7072
|
|
1100
|
+
data.particles_.append({"Charge": -0.33, "Gradient 2D": (1.3, 1.2)}, strict=False)
|
|
1101
|
+
print(sorted(data.particles.keys()))
|
|
1102
|
+
# >>> ['Charge', 'Force', 'Gradient 2D', 'Particle Identifier', 'Particle Type', 'Position', 'peatom']
|
|
1103
|
+
```"""
|
|
1104
|
+
...
|
|
1105
|
+
|
|
1065
1106
|
def create_property(self, name: str, dtype: Optional[DTypeLike]=None, components: Optional[Union[int, Sequence[str]]]=None, data: Optional[ArrayLike]=None) -> Property:
|
|
1066
1107
|
"""Adds a new property with the given *name* to the container and optionally initializes its element-wise values with *data*.
|
|
1067
1108
|
If a property with the given *name* already exists in the container, that existing property is returned
|
|
@@ -1084,6 +1125,8 @@ predefined names for the container type:
|
|
|
1084
1125
|
* `SurfaceMesh.vertices`: List of standard mesh vertex properties
|
|
1085
1126
|
* `SurfaceMesh.faces`: List of standard mesh face properties
|
|
1086
1127
|
* `SurfaceMesh.regions`: List of standard mesh region properties
|
|
1128
|
+
* :py:class:`Vectors`: List of standard vector properties
|
|
1129
|
+
* :py:class:`Lines`: List of standard line properties
|
|
1087
1130
|
|
|
1088
1131
|
The length of the provided *data* array must match the number of elements in the container, which is given by :py:attr:`PropertyContainer.count`.
|
|
1089
1132
|
If the property to be created is a vectorial property (having :math:`M>1` components), the initial data
|
|
@@ -1994,6 +2037,7 @@ OVITO has several concrete implementations of the abstract :py:class:`PropertyCo
|
|
|
1994
2037
|
* :py:class:`VoxelGrid`
|
|
1995
2038
|
* :py:class:`DataTable`
|
|
1996
2039
|
* :py:class:`Lines`
|
|
2040
|
+
* :py:class:`Vectors`
|
|
1997
2041
|
* :py:attr:`SurfaceMesh.vertices`
|
|
1998
2042
|
* :py:attr:`SurfaceMesh.faces`
|
|
1999
2043
|
* :py:attr:`SurfaceMesh.regions`"""
|
|
@@ -2030,6 +2074,7 @@ OVITO has several concrete implementations of the abstract :py:class:`PropertyCo
|
|
|
2030
2074
|
* :py:class:`VoxelGrid`
|
|
2031
2075
|
* :py:class:`DataTable`
|
|
2032
2076
|
* :py:class:`Lines`
|
|
2077
|
+
* :py:class:`Vectors`
|
|
2033
2078
|
* :py:attr:`SurfaceMesh.vertices`
|
|
2034
2079
|
* :py:attr:`SurfaceMesh.faces`
|
|
2035
2080
|
* :py:attr:`SurfaceMesh.regions`"""
|
|
@@ -2066,6 +2111,7 @@ OVITO has several concrete implementations of the abstract :py:class:`PropertyCo
|
|
|
2066
2111
|
* :py:class:`VoxelGrid`
|
|
2067
2112
|
* :py:class:`DataTable`
|
|
2068
2113
|
* :py:class:`Lines`
|
|
2114
|
+
* :py:class:`Vectors`
|
|
2069
2115
|
* :py:attr:`SurfaceMesh.vertices`
|
|
2070
2116
|
* :py:attr:`SurfaceMesh.faces`
|
|
2071
2117
|
* :py:attr:`SurfaceMesh.regions`"""
|
ovito/data/_property_class.py
CHANGED
|
@@ -1,34 +1,49 @@
|
|
|
1
1
|
from . import Property
|
|
2
2
|
from ._ovito_ndarray_adapter import add_ndarray_interface
|
|
3
3
|
|
|
4
|
+
|
|
4
5
|
# Give the Property class a Numpy-like interface.
|
|
5
6
|
add_ndarray_interface(Property)
|
|
6
7
|
|
|
8
|
+
|
|
7
9
|
# Returns a NumPy array wrapper for a property.
|
|
8
10
|
# For backward compatibility with OVITO 2.9.0:
|
|
9
11
|
def _Property_array(self):
|
|
10
12
|
# This attribute returns a NumPy array, which provides read access to the per-element data stored in this property object.
|
|
11
13
|
return self.__array__()
|
|
14
|
+
|
|
15
|
+
|
|
12
16
|
Property.array = property(_Property_array)
|
|
13
17
|
|
|
18
|
+
|
|
14
19
|
# Returns a NumPy array wrapper for a property with write access.
|
|
15
20
|
# For backward compatibility with OVITO 2.9.0:
|
|
16
21
|
def _Property_marray(self):
|
|
17
|
-
with self:
|
|
22
|
+
with self:
|
|
18
23
|
return self.__array__()
|
|
19
24
|
|
|
25
|
+
|
|
20
26
|
# This is needed to enable the augmented assignment operators (+=, -=, etc.) for the 'marray' property.
|
|
21
27
|
# For backward compatibility with OVITO 2.9.0:
|
|
22
28
|
def _Property_marray_assign(self, other):
|
|
23
29
|
if not hasattr(other, "__array_interface__"):
|
|
24
|
-
raise ValueError(
|
|
30
|
+
raise ValueError(
|
|
31
|
+
"Only objects supporting the array interface can be assigned to the 'marray' property."
|
|
32
|
+
)
|
|
25
33
|
o = other.__array_interface__
|
|
26
34
|
s = self.__array_interface__
|
|
27
|
-
if
|
|
28
|
-
|
|
35
|
+
if (
|
|
36
|
+
o["shape"] != s["shape"]
|
|
37
|
+
or o["typestr"] != s["typestr"]
|
|
38
|
+
or o["data"] != s["data"]
|
|
39
|
+
):
|
|
40
|
+
raise ValueError(
|
|
41
|
+
"Assignment to the 'marray' property is restricted. Left and right-hand side must be identical."
|
|
42
|
+
)
|
|
29
43
|
# Assume that the data has been changed in the meantime.
|
|
30
44
|
self.notify_object_changed()
|
|
31
45
|
|
|
46
|
+
|
|
32
47
|
# For backward compatibility with OVITO 2.9.0:
|
|
33
48
|
Property.marray = property(_Property_marray, _Property_marray_assign)
|
|
34
49
|
Property.get_type_by_id = lambda self, id: self.type_by_id(id)
|
|
@@ -5,17 +5,20 @@ import warnings
|
|
|
5
5
|
from typing import Optional, Union
|
|
6
6
|
import numpy
|
|
7
7
|
import numpy.typing
|
|
8
|
-
|
|
9
8
|
from . import Property, PropertyContainer
|
|
10
9
|
|
|
11
10
|
# Give the PropertyContainer class a dict-like interface for accessing properties by name:
|
|
12
11
|
collections.abc.Mapping.register(PropertyContainer)
|
|
13
12
|
|
|
13
|
+
|
|
14
14
|
# Implementation of the printing method for the PropertyContainer class.
|
|
15
15
|
def _PropertyContainer__str__(self):
|
|
16
16
|
return str(dict(self))
|
|
17
|
+
|
|
18
|
+
|
|
17
19
|
PropertyContainer.__str__ = _PropertyContainer__str__
|
|
18
20
|
|
|
21
|
+
|
|
19
22
|
# Assigns the property to the container.
|
|
20
23
|
# This is needed to make statements of the following kind work:
|
|
21
24
|
#
|
|
@@ -28,69 +31,106 @@ PropertyContainer.__str__ = _PropertyContainer__str__
|
|
|
28
31
|
# invoking this __setitem__() special method.
|
|
29
32
|
def _PropertyContainer__setitem__(self, key, value):
|
|
30
33
|
if not isinstance(value, Property):
|
|
31
|
-
raise ValueError(
|
|
32
|
-
|
|
34
|
+
raise ValueError(
|
|
35
|
+
"Expected a Property object. PropertyContainer only accepts Property objects as dictionary values."
|
|
36
|
+
)
|
|
37
|
+
if key.endswith("_"):
|
|
33
38
|
key = key[:-1]
|
|
34
39
|
if value.name != key:
|
|
35
|
-
raise ValueError(
|
|
40
|
+
raise ValueError(
|
|
41
|
+
"Can only assign a Property whose name matches the key string. Consider using PropertyContainer.create_property() method instead."
|
|
42
|
+
)
|
|
36
43
|
# Accept only the existing property as new dictionary value:
|
|
37
44
|
if self.get(key) is not value:
|
|
38
|
-
raise ValueError(
|
|
45
|
+
raise ValueError(
|
|
46
|
+
"Can only re-assign an existing Property instance to the PropertyContainer but not a new instance. Consider using PropertyContainer.create_property() method instead if you want to assign a new property or replace the values of an existing property in the container."
|
|
47
|
+
)
|
|
39
48
|
# The following check is not needed as long as we only accept the existing property:
|
|
40
|
-
#if not self.is_safe_to_modify:
|
|
49
|
+
# if not self.is_safe_to_modify:
|
|
41
50
|
# raise ValueError("Property assignment is only possible for a container that itself is mutable. "
|
|
42
51
|
# "Make sure you are working with a mutable version of the {} object.".format(self.__class__.__name__))
|
|
52
|
+
|
|
53
|
+
|
|
43
54
|
PropertyContainer.__setitem__ = _PropertyContainer__setitem__
|
|
44
55
|
|
|
56
|
+
|
|
45
57
|
# Removes the property with the given name from the container.
|
|
46
58
|
def _PropertyContainer__delitem__(self, key):
|
|
47
59
|
for p in self.properties:
|
|
48
60
|
if p.name == key:
|
|
49
61
|
self._remove_property(p)
|
|
50
62
|
return
|
|
51
|
-
raise KeyError(
|
|
63
|
+
raise KeyError(
|
|
64
|
+
f"{self.__class__.__name__} data object does not contain the property '{key}'."
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
52
68
|
PropertyContainer.__delitem__ = _PropertyContainer__delitem__
|
|
53
69
|
|
|
70
|
+
|
|
54
71
|
# Returns the list of names of all properties in the PropertyContainer.
|
|
55
72
|
def _PropertyContainer_keys(self):
|
|
56
73
|
return collections.abc.KeysView(self)
|
|
74
|
+
|
|
75
|
+
|
|
57
76
|
PropertyContainer.keys = _PropertyContainer_keys
|
|
58
77
|
|
|
78
|
+
|
|
59
79
|
# Returns the list of name-property pairs in the PropertyContainer.
|
|
60
80
|
def _PropertyContainer_items(self):
|
|
61
81
|
return collections.abc.ItemsView(self)
|
|
82
|
+
|
|
83
|
+
|
|
62
84
|
PropertyContainer.items = _PropertyContainer_items
|
|
63
85
|
|
|
86
|
+
|
|
64
87
|
# Returns the list Property objects in the PropertyContainer.
|
|
65
88
|
def _PropertyContainer_values(self):
|
|
66
89
|
return self.properties
|
|
90
|
+
|
|
91
|
+
|
|
67
92
|
PropertyContainer.values = _PropertyContainer_values
|
|
68
93
|
|
|
94
|
+
|
|
69
95
|
# Internal helper function for registering standard property accessor fields for a PropertyContainer subclass.
|
|
70
|
-
def create_property_accessor(property_name, doc
|
|
96
|
+
def create_property_accessor(property_name, doc=None):
|
|
71
97
|
base_property_name = property_name
|
|
72
98
|
# Remove the leading underscore to get the actual property name.
|
|
73
|
-
if base_property_name.endswith(
|
|
99
|
+
if base_property_name.endswith("_"):
|
|
74
100
|
base_property_name = base_property_name[:-1]
|
|
101
|
+
|
|
75
102
|
def getter(self):
|
|
76
103
|
return self.get_(base_property_name)
|
|
104
|
+
|
|
77
105
|
else:
|
|
106
|
+
|
|
78
107
|
def getter(self) -> Optional[Property]:
|
|
79
108
|
return self.get(property_name)
|
|
109
|
+
|
|
80
110
|
def setter(self, val):
|
|
81
111
|
# Detect trivial case where the property object is assigned to itself:
|
|
82
|
-
if
|
|
112
|
+
if (
|
|
113
|
+
isinstance(val, Property)
|
|
114
|
+
and val in self.properties
|
|
115
|
+
and val.name == base_property_name
|
|
116
|
+
):
|
|
83
117
|
return
|
|
84
118
|
self.create_property(base_property_name, data=val)
|
|
119
|
+
|
|
85
120
|
return property(getter, setter, doc=doc)
|
|
121
|
+
|
|
122
|
+
|
|
86
123
|
PropertyContainer._create_property_accessor = staticmethod(create_property_accessor)
|
|
87
124
|
|
|
125
|
+
|
|
88
126
|
# Implementation of the PropertyContainer.create_property() method.
|
|
89
|
-
def _PropertyContainer_create_property(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
127
|
+
def _PropertyContainer_create_property(
|
|
128
|
+
self,
|
|
129
|
+
name: str,
|
|
130
|
+
dtype: Optional[numpy.typing.DTypeLike] = None,
|
|
131
|
+
components: Optional[Union[int, collections.abc.Sequence[str]]] = None,
|
|
132
|
+
data: Optional[numpy.typing.ArrayLike] = None,
|
|
133
|
+
) -> Property:
|
|
94
134
|
"""
|
|
95
135
|
Adds a new property with the given *name* to the container and optionally initializes its element-wise values with *data*.
|
|
96
136
|
If a property with the given *name* already exists in the container, that existing property is returned
|
|
@@ -113,6 +153,8 @@ def _PropertyContainer_create_property(self,
|
|
|
113
153
|
* :py:attr:`SurfaceMesh.vertices <ovito.data.SurfaceMesh.vertices>`: :ref:`List of standard mesh vertex properties <surface-mesh-vertex-properties-list>`
|
|
114
154
|
* :py:attr:`SurfaceMesh.faces <ovito.data.SurfaceMesh.faces>`: :ref:`List of standard mesh face properties <surface-mesh-face-properties-list>`
|
|
115
155
|
* :py:attr:`SurfaceMesh.regions <ovito.data.SurfaceMesh.regions>`: :ref:`List of standard mesh region properties <surface-mesh-region-properties-list>`
|
|
156
|
+
* :py:class:`~ovito.data.Vectors`: :ref:`List of standard vector properties <vectors-properties-list>`
|
|
157
|
+
* :py:class:`~ovito.data.Lines`: :ref:`List of standard line properties <lines-properties-list>`
|
|
116
158
|
|
|
117
159
|
The length of the provided *data* array must match the number of elements in the container, which is given by :py:attr:`PropertyContainer.count`.
|
|
118
160
|
If the property to be created is a vectorial property (having :math:`M>1` components), the initial data
|
|
@@ -182,29 +224,43 @@ def _PropertyContainer_create_property(self,
|
|
|
182
224
|
|
|
183
225
|
if property_type != 0:
|
|
184
226
|
if component_count is not None:
|
|
185
|
-
raise ValueError(
|
|
227
|
+
raise ValueError(
|
|
228
|
+
f"'{property_name}' is the name of a standard property. When creating such a predefined property with a fixed data layout, you may not explicitly specify the component count or list of vector components."
|
|
229
|
+
)
|
|
186
230
|
if dtype is not None:
|
|
187
|
-
raise ValueError(
|
|
231
|
+
raise ValueError(
|
|
232
|
+
f"'{property_name}' is the name of a standard property. When creating such a predefined property with a fixed data layout, you may not explicitly specify a data type."
|
|
233
|
+
)
|
|
188
234
|
else:
|
|
189
235
|
if dtype is None:
|
|
190
236
|
if data is None:
|
|
191
|
-
raise ValueError(
|
|
237
|
+
raise ValueError(
|
|
238
|
+
"Must provide either a 'data' array or a data type (dtype)."
|
|
239
|
+
)
|
|
192
240
|
if data is not None:
|
|
193
241
|
data = numpy.asanyarray(data)
|
|
194
242
|
elif component_count is None:
|
|
195
243
|
component_count = 1
|
|
196
244
|
if component_count is None:
|
|
197
245
|
if data.ndim < 1 or data.ndim > 2:
|
|
198
|
-
raise ValueError(
|
|
199
|
-
|
|
246
|
+
raise ValueError(
|
|
247
|
+
"Provided data array must be either 1 or 2-dimensional (or specify no. of components explicitly)"
|
|
248
|
+
)
|
|
249
|
+
component_count = data.shape[1] if data.ndim == 2 else 1
|
|
200
250
|
if dtype is None:
|
|
201
251
|
dtype = data.dtype
|
|
202
252
|
if component_count < 1:
|
|
203
|
-
raise ValueError(
|
|
253
|
+
raise ValueError(
|
|
254
|
+
f"Invalid number of vector components specified for a user-defined property: {component_count}"
|
|
255
|
+
)
|
|
204
256
|
if not property_name:
|
|
205
|
-
raise ValueError(
|
|
206
|
-
|
|
207
|
-
|
|
257
|
+
raise ValueError(
|
|
258
|
+
f"Invalid name for a property: '{property_name}'. Property name must not be empty."
|
|
259
|
+
)
|
|
260
|
+
if "." in property_name:
|
|
261
|
+
raise ValueError(
|
|
262
|
+
f"Invalid name for a property: '{property_name}'. Name contains illegal character '.'"
|
|
263
|
+
)
|
|
208
264
|
|
|
209
265
|
# Translate data type from Python to Qt metatype id.
|
|
210
266
|
if dtype in (int, numpy.int32):
|
|
@@ -218,7 +274,9 @@ def _PropertyContainer_create_property(self,
|
|
|
218
274
|
elif dtype in (float, numpy.float64):
|
|
219
275
|
dtype = Property.DataType.Float64
|
|
220
276
|
else:
|
|
221
|
-
raise TypeError(
|
|
277
|
+
raise TypeError(
|
|
278
|
+
"Invalid property dtype. Supported dtypes are: 'int', 'int8', 'int32', 'int64', 'float', 'float32', and 'float64'."
|
|
279
|
+
)
|
|
222
280
|
|
|
223
281
|
# Validate user-defined property name and component names.
|
|
224
282
|
try:
|
|
@@ -230,40 +288,72 @@ def _PropertyContainer_create_property(self,
|
|
|
230
288
|
warnings.warn(str(exc), DeprecationWarning, stacklevel=2)
|
|
231
289
|
|
|
232
290
|
# Check whether property already exists in the container.
|
|
233
|
-
existing_prop =
|
|
291
|
+
existing_prop = (
|
|
292
|
+
self.get_standard_property(property_type)
|
|
293
|
+
if property_type != 0
|
|
294
|
+
else self.get_user_property(property_name)
|
|
295
|
+
)
|
|
234
296
|
|
|
235
297
|
if existing_prop is None:
|
|
236
298
|
|
|
237
|
-
if
|
|
299
|
+
if (
|
|
300
|
+
data is not None
|
|
301
|
+
and isinstance(data, collections.abc.Sized)
|
|
302
|
+
and (not isinstance(data, numpy.ndarray) or data.ndim != 0)
|
|
303
|
+
):
|
|
238
304
|
element_count_hint = len(data)
|
|
239
305
|
else:
|
|
240
306
|
element_count_hint = self.count
|
|
241
307
|
|
|
242
308
|
# If property does not exist yet in the container, create and add a new Property instance.
|
|
243
309
|
if property_type != 0:
|
|
244
|
-
prop = self.create_standard_property(
|
|
310
|
+
prop = self.create_standard_property(
|
|
311
|
+
property_type, data, element_count_hint
|
|
312
|
+
)
|
|
245
313
|
else:
|
|
246
|
-
prop = self.create_user_property(
|
|
314
|
+
prop = self.create_user_property(
|
|
315
|
+
property_name,
|
|
316
|
+
dtype,
|
|
317
|
+
component_count,
|
|
318
|
+
data,
|
|
319
|
+
element_count_hint,
|
|
320
|
+
component_names,
|
|
321
|
+
)
|
|
247
322
|
else:
|
|
248
323
|
# Make sure the data layout of the existing property is compatible with the requested layout.
|
|
249
|
-
if
|
|
250
|
-
|
|
324
|
+
if (
|
|
325
|
+
component_count is not None
|
|
326
|
+
and existing_prop.component_count != component_count
|
|
327
|
+
):
|
|
328
|
+
raise ValueError(
|
|
329
|
+
f"Existing property '{existing_prop.name}' has {existing_prop.component_count} vector component(s), but {component_count} component(s) have been requested for the new property."
|
|
330
|
+
)
|
|
251
331
|
if dtype is not None and existing_prop.data_type != dtype:
|
|
252
332
|
from ovito.qt_compat import QtCore
|
|
253
|
-
|
|
333
|
+
|
|
334
|
+
raise ValueError(
|
|
335
|
+
f"Existing property '{existing_prop.name}' has data type '{QtCore.QMetaType.typeName(existing_prop.data_type)}', but data type '{QtCore.QMetaType.typeName(dtype)}' has been requested for the new property."
|
|
336
|
+
)
|
|
254
337
|
|
|
255
338
|
# Adjust container's element count to the provided data array length in case the count is still zero (the default).
|
|
256
|
-
if data is not None and hasattr(data,
|
|
339
|
+
if data is not None and hasattr(data, "__iter__") and self.count == 0:
|
|
257
340
|
self.count = len(data)
|
|
258
341
|
# Note: Have to look up the property in the container again now, because changing the element count likely replaces all property objects with copies.
|
|
259
|
-
existing_prop =
|
|
342
|
+
existing_prop = (
|
|
343
|
+
self.get_standard_property(property_type)
|
|
344
|
+
if property_type != 0
|
|
345
|
+
else self.get(property_name)
|
|
346
|
+
)
|
|
260
347
|
|
|
261
348
|
# Make a copy of the existing property if necessary so that we can safely modify it. Then overwrite its contents if the user has provided new values.
|
|
262
349
|
prop = self._assign_property_contents(existing_prop, data)
|
|
263
350
|
|
|
264
351
|
return prop
|
|
352
|
+
|
|
353
|
+
|
|
265
354
|
PropertyContainer.create_property = _PropertyContainer_create_property
|
|
266
355
|
|
|
356
|
+
|
|
267
357
|
# Implementation of the PropertyContainer.delete_elements() method.
|
|
268
358
|
def _PropertyContainer_delete_elements(self, mask: numpy.typing.ArrayLike):
|
|
269
359
|
"""
|
|
@@ -281,11 +371,16 @@ def _PropertyContainer_delete_elements(self, mask: numpy.typing.ArrayLike):
|
|
|
281
371
|
The effect of this statement is the same as for applying the :py:class:`~ovito.modifiers.DeleteSelectedModifier` to the particles list.
|
|
282
372
|
"""
|
|
283
373
|
mask_arr = numpy.asanyarray(mask)
|
|
284
|
-
if mask_arr.shape != (self.count,
|
|
285
|
-
raise ValueError(
|
|
374
|
+
if mask_arr.shape != (self.count,):
|
|
375
|
+
raise ValueError(
|
|
376
|
+
f"Mask array must be a 1-d array of length {self.count}, matching the element count in the PropertyContainer."
|
|
377
|
+
)
|
|
286
378
|
return self._delete_elements(mask_arr)
|
|
379
|
+
|
|
380
|
+
|
|
287
381
|
PropertyContainer.delete_elements = _PropertyContainer_delete_elements
|
|
288
382
|
|
|
383
|
+
|
|
289
384
|
# Implementation of the PropertyContainer.delete_indices() method.
|
|
290
385
|
def _PropertyContainer_delete_indices(self, indices: collections.abc.Iterable[int]):
|
|
291
386
|
"""
|
|
@@ -300,4 +395,83 @@ def _PropertyContainer_delete_indices(self, indices: collections.abc.Iterable[in
|
|
|
300
395
|
:lines: 25-25
|
|
301
396
|
"""
|
|
302
397
|
return self._delete_indices(indices)
|
|
398
|
+
|
|
399
|
+
|
|
303
400
|
PropertyContainer.delete_indices = _PropertyContainer_delete_indices
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
def _property_append(
|
|
404
|
+
self,
|
|
405
|
+
new_row: collections.abc.Mapping[str, numbers.Number | collections.abc.Sequence[numbers.Number]],
|
|
406
|
+
strict: bool = True,
|
|
407
|
+
) -> int:
|
|
408
|
+
"""
|
|
409
|
+
Appends a new row of data to the end of the :py:class:`PropertyContainer` by incrementing the :py:attr:`count` by one.
|
|
410
|
+
The data of the new element is provided as a dictionary of key-value pairs, where the keys are the property names in the container and the values are the corresponding property values.
|
|
411
|
+
If the container type does not support appending elements, a ``RuntimeError`` is raised.
|
|
412
|
+
|
|
413
|
+
:param new_row: A dictionary mapping property names to their values for the new row.
|
|
414
|
+
:param strict: If set to ``True`` (default), a strict checking of the keys in *new_row* is performed.
|
|
415
|
+
:returns: The zero-based index of the newly added row.
|
|
416
|
+
|
|
417
|
+
When the `strict` parameter is set to ``True`` (default), the dictionary keys must match the container's property names exactly.
|
|
418
|
+
In other words, you have to specify a value for every existing property in the container (and *only* those properties).
|
|
419
|
+
If any keys are missing or extra, a ``KeyError`` is raised.
|
|
420
|
+
|
|
421
|
+
When `strict` is set to ``False``:
|
|
422
|
+
|
|
423
|
+
* Missing keys are ignored, and the corresponding property values are initialized to 0.
|
|
424
|
+
* For extra keys, new properties are added to the container and initialized to 0 for all existing elements.
|
|
425
|
+
* The *dtype* and number of vector components of new properties are inferred from the provided values.
|
|
426
|
+
|
|
427
|
+
Example usage of the :py:meth:`!append` method:
|
|
428
|
+
|
|
429
|
+
.. literalinclude:: ../example_snippets/property_container.py
|
|
430
|
+
:lines: 60-73
|
|
431
|
+
"""
|
|
432
|
+
|
|
433
|
+
# Check that this container support item appending.
|
|
434
|
+
self.check_appendability()
|
|
435
|
+
|
|
436
|
+
if not isinstance(new_row, collections.abc.Mapping):
|
|
437
|
+
raise TypeError("new_row must be a mapping (dict-like object).")
|
|
438
|
+
|
|
439
|
+
# Validate keys
|
|
440
|
+
if strict and set(new_row.keys()) != set(self.keys()):
|
|
441
|
+
raise KeyError(
|
|
442
|
+
f"In strict mode, keys provided in the new_row dictionary must match keys in the PropertyContainer exactly. The keys in the PropertyContainer are: {sorted(list(self.keys()))}. Alternatively, you can set the strict parameter to False."
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
# Extend the current container by 1
|
|
446
|
+
self.count += 1
|
|
447
|
+
|
|
448
|
+
try:
|
|
449
|
+
# Transfer the data
|
|
450
|
+
for key, value in new_row.items():
|
|
451
|
+
prop = self.get_(key, require=False)
|
|
452
|
+
if prop is None:
|
|
453
|
+
# Insert new property by key
|
|
454
|
+
if self.standard_property_type_id(key) != 0:
|
|
455
|
+
prop = self.create_property(key)
|
|
456
|
+
else:
|
|
457
|
+
if isinstance(value, collections.abc.Sequence):
|
|
458
|
+
components = len(value)
|
|
459
|
+
if components == 0:
|
|
460
|
+
raise ValueError(
|
|
461
|
+
"Cannot create a property with zero components."
|
|
462
|
+
)
|
|
463
|
+
itemType = type(value[0])
|
|
464
|
+
else:
|
|
465
|
+
itemType = type(value)
|
|
466
|
+
components = 1
|
|
467
|
+
prop = self.create_property(key, itemType, components=components)
|
|
468
|
+
# Set the value of the last element
|
|
469
|
+
prop[-1] = value
|
|
470
|
+
except Exception:
|
|
471
|
+
# Reset the count if anything went wrong
|
|
472
|
+
self.count -= 1
|
|
473
|
+
# Re-raise the exception
|
|
474
|
+
raise
|
|
475
|
+
return self.count - 1
|
|
476
|
+
|
|
477
|
+
PropertyContainer.append = _property_append
|
ovito/io/ase/__init__.py
CHANGED
|
@@ -121,7 +121,7 @@ def ase_to_ovito(atoms: 'ase.atoms.Atoms', data_collection: Optional[ovito.data.
|
|
|
121
121
|
tarray[i] = types.add_type_name(sym, particles).id
|
|
122
122
|
|
|
123
123
|
# Check for computed properties - forces, energies, stresses
|
|
124
|
-
calc = atoms.get_calculator()
|
|
124
|
+
calc = atoms.calc if hasattr(atoms, "calc") else atoms.get_calculator() # get_calculator() is deprecated since ASE 3.20.0
|
|
125
125
|
if calc is not None:
|
|
126
126
|
for name, ptype in [('forces', 'Force'),
|
|
127
127
|
('energies', 'Potential Energy'),
|
ovito/pipeline/__init__.pyi
CHANGED
|
@@ -22,6 +22,7 @@ import ovito.modifiers
|
|
|
22
22
|
from ovito import ArrayLike
|
|
23
23
|
import enum
|
|
24
24
|
import abc
|
|
25
|
+
import os
|
|
25
26
|
from dataclasses import dataclass
|
|
26
27
|
|
|
27
28
|
@dataclass(kw_only=True)
|
|
@@ -304,7 +305,7 @@ A typical use case is assigning the radii and names to particle types loaded fro
|
|
|
304
305
|
pipeline.modifiers.append(setup_atom_types)
|
|
305
306
|
```"""
|
|
306
307
|
|
|
307
|
-
def load(self, location: Union[str, Sequence[str]], **params: Any) -> None:
|
|
308
|
+
def load(self, location: Union[str, os.PathLike, Sequence[str]], **params: Any) -> None:
|
|
308
309
|
"""Sets a new input file, from which this pipeline source will retrieve its data.
|
|
309
310
|
|
|
310
311
|
The function accepts additional keyword arguments, which are forwarded to the format-specific file reader
|
|
@@ -58,7 +58,7 @@ class ModifierInterface(traits.api.HasTraits):
|
|
|
58
58
|
"""
|
|
59
59
|
return super().compute(frame)
|
|
60
60
|
|
|
61
|
-
# Event trait is is fired
|
|
61
|
+
# Event trait is is fired whenever the number of trajectory frames the modifier generates changes.
|
|
62
62
|
_trajectory_length_changed_event = traits.api.Event(descr='Requests recomputation of the number of output animation frames')
|
|
63
63
|
|
|
64
64
|
def notify_trajectory_length_changed(self):
|
|
@@ -28,7 +28,7 @@ class PipelineSourceInterface(traits.api.HasTraits):
|
|
|
28
28
|
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
|
-
# Event trait is is fired
|
|
31
|
+
# Event trait is is fired whenever the number of trajectory frames the source generates changes.
|
|
32
32
|
_trajectory_length_changed_event = traits.api.Event(descr='Requests recomputation of the number of animation frames')
|
|
33
33
|
|
|
34
34
|
def notify_trajectory_length_changed(self):
|
|
Binary file
|
|
Binary file
|
ovito/plugins/libssl-3-x64.dll
CHANGED
|
Binary file
|
ovito/plugins/ovito_bindings.pyd
CHANGED
|
Binary file
|
ovito/plugins/ssh.dll
CHANGED
|
Binary file
|
|
@@ -44,7 +44,7 @@ ovito/_extensions/scripts/readers/__init__.py,sha256=1p3M7BMfAU-gHAESvZn8HvskfMT
|
|
|
44
44
|
ovito/_extensions/scripts/writers/ASE Trajectory.py,sha256=qwdGDmXCHzJGOrjgU_YzD6i260CQM0J8-9dHZiojrjo,1555
|
|
45
45
|
ovito/_extensions/scripts/writers/__init__.py,sha256=KLnPEbV6yq8oKwmyOSJttDez2hFBGVme7YAW26a20AQ,416
|
|
46
46
|
ovito/data/__init__.py,sha256=GeCW_PAQWPeQI60agPJm1vgIgcRG6XkAKng_OdaJGtM,2186
|
|
47
|
-
ovito/data/__init__.pyi,sha256=
|
|
47
|
+
ovito/data/__init__.pyi,sha256=zAPxZDiEcbPl9RYZTJfBJ4b7ZxLmpDDnGbxvLFScQs4,266332
|
|
48
48
|
ovito/data/_bonds_class.py,sha256=tMzpLk0HoiKLEMhXd_8enURg8ir-xYVnsEEE739b3rs,4351
|
|
49
49
|
ovito/data/_cutoff_neighbor_finder.py,sha256=Qg885pSSL--wqQuePIIEPE-CVNcVhpIs1ECXXS7Jd5U,10686
|
|
50
50
|
ovito/data/_data_collection.py,sha256=pThm3xXkRHjMHMxnM1zqJnAOXc5NjlPEjMPLfiiCLFM,12675
|
|
@@ -54,8 +54,8 @@ ovito/data/_lines.py,sha256=2YMpyI-NAK2ypdTOZymyAlHOx8nCTZrqkl3hs1h0DJ4,3811
|
|
|
54
54
|
ovito/data/_nearest_neighbor_finder.py,sha256=Y6noThJEAvZZeCKUbCMkTCq1w9PJ7ESxRERCcakQ2UY,10928
|
|
55
55
|
ovito/data/_ovito_ndarray_adapter.py,sha256=IN3ohPIV5VKSSx9ktqkE5fiSL5l8av7BwBJUgPOVxSY,8439
|
|
56
56
|
ovito/data/_particles_class.py,sha256=MBGadUCnMoyk9TU9M2EdFv7xxlvfhvLx0d7O9XD3oQs,14836
|
|
57
|
-
ovito/data/_property_class.py,sha256=
|
|
58
|
-
ovito/data/_property_container.py,sha256=
|
|
57
|
+
ovito/data/_property_class.py,sha256=0CxLWIqy2lN890MQNWmw6qAHizv4t6ssWKKV9gJQiLw,1848
|
|
58
|
+
ovito/data/_property_container.py,sha256=_tBMWC3F4BH_6s3ia8bMQ4M91Nc0WZcFxQPxlhr4h6A,21977
|
|
59
59
|
ovito/data/_ptm_neighbor_finder.py,sha256=9D8GJQYIc-P3rZtoKQ3IttawN4iKUBKCo6xzlEK5dzY,3414
|
|
60
60
|
ovito/data/_simulation_cell.py,sha256=OaIlJCQczYPkIgINYR9_wZ2zI5USVM-tOHhzgxgNteY,7408
|
|
61
61
|
ovito/data/_vectors.py,sha256=cV5-S1WIlXmVUKki5sziGqCDxDx6xIkoBRdhgM8DFh8,3060
|
|
@@ -71,7 +71,7 @@ ovito/io/_export_file_func.py,sha256=jw6zV9ZpfkSSMtjRw6Dpw8RLdHz4ll7_3PWwsAIyyb0
|
|
|
71
71
|
ovito/io/_file_reader_interface.py,sha256=f4J9KKB3W5rMmOoZ28xBlO4uBnUJ9fhg9r1SydOj088,5895
|
|
72
72
|
ovito/io/_file_writer_interface.py,sha256=WzZGjatNPeZAnIo6QaWoI7jScr3OjKZ4FHa82yQtZu0,6264
|
|
73
73
|
ovito/io/_import_file_func.py,sha256=LVWibl2r_AlqsADajppokxZbvEiONlCrIAf-5YEiuxE,12003
|
|
74
|
-
ovito/io/ase/__init__.py,sha256=
|
|
74
|
+
ovito/io/ase/__init__.py,sha256=UAB4Xkuo7qT3ZCbiWsefqSeWUGAdijrTH9H27-D1w-k,6930
|
|
75
75
|
ovito/io/ase/__init__.pyi,sha256=899gDlEHWlTph06E9Rkklp4IB7hEuQ4N-WsamCsHVgY,3010
|
|
76
76
|
ovito/io/lammps/__init__.py,sha256=exssf6Xxky-7j0p8MbmG8wfVpJ1hf1wHseSTAu3B0Kk,5652
|
|
77
77
|
ovito/io/lammps/__init__.pyi,sha256=Cek7_UDBWHmwMG8-KYAp_WFNCzHyHakh5sWdL7eCDAU,3766
|
|
@@ -104,18 +104,18 @@ ovito/nonpublic/_lammps_data_io.py,sha256=NchvGhkU5OBx1pqkPaFjay3LbwGNK2mVe6HD1A
|
|
|
104
104
|
ovito/nonpublic/_render_settings.py,sha256=4ZE7jgzhEADG1wH-izyIQhdFZ_9uL4bxXfvUcon27mQ,1858
|
|
105
105
|
ovito/nonpublic/_viewport_configuration.py,sha256=V7XMWPuE8yg8Ol4WU5HZEpbCsSHXyyhnKhGstS85Gjg,658
|
|
106
106
|
ovito/pipeline/__init__.py,sha256=nQX0UwLcpei7VnWQsWZM_S8EKDYNf33GUX6Yjlb_XZI,1321
|
|
107
|
-
ovito/pipeline/__init__.pyi,sha256=
|
|
107
|
+
ovito/pipeline/__init__.pyi,sha256=2Y0rxyjxRmWEJyWpvYprvPtCb-na0XrfCI_MbxP8gj4,51499
|
|
108
108
|
ovito/pipeline/_file_source.py,sha256=aUbT-O7ZUrRUnx0xXJS-SCFimUjie-APtw7iuWVUFFA,7079
|
|
109
|
-
ovito/pipeline/_modifier_interface.py,sha256=
|
|
109
|
+
ovito/pipeline/_modifier_interface.py,sha256=Pm5fzuforfykCGDY8L5fD2LVAtGZAILCrCxa7k6ejHc,11746
|
|
110
110
|
ovito/pipeline/_pipeline_class.py,sha256=cFa7zNwhHuYX7g8O7pAqV1bmGaffgsjkJ8ZP7J54XMk,14077
|
|
111
111
|
ovito/pipeline/_pipeline_node.py,sha256=I5PvVGUzZJj2bAjyv3QegJOD8q1h-mcuzeZV52XavSk,1636
|
|
112
|
-
ovito/pipeline/_pipeline_source_interface.py,sha256=
|
|
112
|
+
ovito/pipeline/_pipeline_source_interface.py,sha256=FY3bb_1VLR6643arpvuZ0G3SF6ZM9tE8Rm366TLxSbo,4094
|
|
113
113
|
ovito/plugins/OpenImageDenoise.dll,sha256=r0u9mea3x2E23nPIFQeQaWqtSssyU0CgoWcidHCgasg,85504
|
|
114
114
|
ovito/plugins/OpenImageDenoise_core.dll,sha256=fM5YYT_ntNcOgI7Tm7GHaBZ_m3nC05-hi1wx0ewBpf8,47530496
|
|
115
115
|
ovito/plugins/OpenImageDenoise_device_cpu.dll,sha256=27daHquP9s7Q-bziDF199VSSkM10Z4GDrrXcID6Vg7g,494592
|
|
116
116
|
ovito/plugins/__init__.py,sha256=dpdiBpNwzk02ljt69MvY3haQAsMt1hiP9Xx91OkAxqM,5764
|
|
117
117
|
ovito/plugins/anari.dll,sha256=8NpDkp2DdOWrwuqjlCEckxedcNrUB_beg-XTMbQ98BY,41984
|
|
118
|
-
ovito/plugins/anari_library_visrtx.dll,sha256=
|
|
118
|
+
ovito/plugins/anari_library_visrtx.dll,sha256=hS99lUh6XBMLTXHLSMvbmgS507pCJ05AyoaOxvZknnM,54049280
|
|
119
119
|
ovito/plugins/avcodec-61.dll,sha256=WzSrZWjyP0nL27M70ubotelv06y-AQvIGzTal8_6Fn8,7873024
|
|
120
120
|
ovito/plugins/avfilter-10.dll,sha256=Ns7CRa7UNhIl6POS2ovXtM5osIxtaCDTGsIzcBifXFU,4075520
|
|
121
121
|
ovito/plugins/avformat-61.dll,sha256=MNGEitFbEe0y2oL0ZnZyaPC3qXLKQfgH5yoBwsaJXRw,2299904
|
|
@@ -124,8 +124,8 @@ ovito/plugins/cudart64_12.dll,sha256=wsmpwiqby6kOJhgllog2eHszEDgEeiZ3DP-3pYPCg0Q
|
|
|
124
124
|
ovito/plugins/embree4.dll,sha256=QNKxXSq3jb0-iwSzSRf4OnBzDRG7ADGiX5ATif-n2fM,25335296
|
|
125
125
|
ovito/plugins/hdf5.dll,sha256=oMyjRZsd9XDfVIrlV4ORALaPHbUmC2O7f6gCY0B6VTY,3338240
|
|
126
126
|
ovito/plugins/hdf5_hl.dll,sha256=Dz4WdzP5izgt7Rh6j6vGpAXw5MNZpzpeGQVl0fovGUM,121344
|
|
127
|
-
ovito/plugins/libcrypto-3-x64.dll,sha256=
|
|
128
|
-
ovito/plugins/libssl-3-x64.dll,sha256=
|
|
127
|
+
ovito/plugins/libcrypto-3-x64.dll,sha256=JH0BsKnolaSZV9PxPMeZtNnUvmWSAA_BFyVtxYaXabs,5237760
|
|
128
|
+
ovito/plugins/libssl-3-x64.dll,sha256=iVkqbrFCGvtIa1ayyh06jHRsKYq_IbAK3D-8i_txyeo,780800
|
|
129
129
|
ovito/plugins/netcdf.dll,sha256=1DQNxVRkxf6izmIuEQ_LG93twsrP42Pw3NufiUMYK08,1034240
|
|
130
130
|
ovito/plugins/openvkl.dll,sha256=PUxCiHBsqIiuU51PJFht8phJswiaMsLvt1kwnTMd3S0,193024
|
|
131
131
|
ovito/plugins/openvkl_module_cpu_device.dll,sha256=ZfalKyCv0Sdi3_M564bn6uD4XcRlx3vETDrUAtdH5S4,26112
|
|
@@ -134,9 +134,9 @@ ovito/plugins/openvkl_module_cpu_device_8.dll,sha256=t7F5YkyYjy0Fc3mrRsBjorY5Rj-
|
|
|
134
134
|
ovito/plugins/ospray.dll,sha256=dqN09zQerBAoI0_w4tuy_oKd0k_9ZBjS4zVCw1ob_tQ,211456
|
|
135
135
|
ovito/plugins/ospray_module_cpu.dll,sha256=S06HMaalVTj8GDcdtAgbG7qSoY3clcnrmkBxOgsA0YY,9701376
|
|
136
136
|
ovito/plugins/ospray_module_denoiser.dll,sha256=3I2ysZBqqKjFO13HI_evkbwZphndT16AfSWdmyoY7Ck,53760
|
|
137
|
-
ovito/plugins/ovito_bindings.pyd,sha256=
|
|
137
|
+
ovito/plugins/ovito_bindings.pyd,sha256=VEcSiBaPvZCD1RaxrdcDv1dBSwU8pI22MsHIAnaRFz4,21118976
|
|
138
138
|
ovito/plugins/rkcommon.dll,sha256=FP8ZSmMde6BuwCi7UQRYtX5hjK8h2YSRewBrbgXjEps,136192
|
|
139
|
-
ovito/plugins/ssh.dll,sha256=
|
|
139
|
+
ovito/plugins/ssh.dll,sha256=9tJOHv7xPJezqDSx72Lh6pV99rtu9Rj_UtQqTlsCkFE,350208
|
|
140
140
|
ovito/plugins/swresample-5.dll,sha256=IT-mpgX9mvZhWPmZ5z-3BQlA5082Qa-6QGSSaoyo34Y,230912
|
|
141
141
|
ovito/plugins/swscale-8.dll,sha256=s5tFydFqpB4fsUdr6xbf31os9-Bp0kWU2Yn_e1yZUzA,744448
|
|
142
142
|
ovito/plugins/tbb12.dll,sha256=YmmCLrELneLmOBL9UrlsTZPVrVODV2AZL1yJLjfY5S0,339336
|
|
@@ -151,23 +151,23 @@ ovito/vis/_dislocation_vis.py,sha256=fqdALxEFKi4g7PxpFm4N5ZOUyvT8OVrDDwUHbohjfkQ
|
|
|
151
151
|
ovito/vis/_viewport.py,sha256=daqHwCDdpeorqWu0yjRjXnBdJQFlHHnfmywKdJPO-pI,14498
|
|
152
152
|
ovito/vis/_viewport_create_jupyter_widget.py,sha256=v7oSYt9Jd0Yc5-fCEm7mWjNduIKSl29Xb4KKmxe8OiQ,632
|
|
153
153
|
ovito/vis/_viewport_overlay_interface.py,sha256=qTUSpouKA6sEvboGLUnHln54T4335_DG1d4P6HOeq9M,26673
|
|
154
|
-
ovito-3.14.
|
|
155
|
-
ovito-3.14.
|
|
156
|
-
ovito-3.14.
|
|
157
|
-
ovito-3.14.
|
|
158
|
-
ovito-3.14.
|
|
159
|
-
ovito-3.14.
|
|
160
|
-
ovito-3.14.
|
|
161
|
-
ovito-3.14.
|
|
162
|
-
ovito-3.14.
|
|
163
|
-
ovito-3.14.
|
|
164
|
-
ovito-3.14.
|
|
165
|
-
ovito-3.14.
|
|
166
|
-
ovito-3.14.
|
|
167
|
-
ovito-3.14.
|
|
168
|
-
ovito-3.14.
|
|
169
|
-
ovito-3.14.
|
|
170
|
-
ovito-3.14.
|
|
171
|
-
ovito-3.14.
|
|
172
|
-
ovito-3.14.
|
|
173
|
-
ovito-3.14.
|
|
154
|
+
ovito-3.14.1.data/data/etc/jupyter/nbconfig/notebook.d/jupyter-ovito.json,sha256=ur_rRIOdKiN6HHcJnwSqJmL3z02Qrri7AfFSwTEER3Y,78
|
|
155
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/package.json,sha256=lSzylvZ9COm1Nk3gNmDsG2iPBCMEr7TWiL2W_3EFTes,5356
|
|
156
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/212.a91d8c3b2f0512f1a27a.js,sha256=rVqO1EEpTwF2Wm-TDFdp3rZbpUGco4vaSMifpto_IS4,646723
|
|
157
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/212.a91d8c3b2f0512f1a27a.js.LICENSE.txt,sha256=WlkM2QXJOY0Ixiqf5LCX7H_CdipOt5KYV8ip2FEecX8,92
|
|
158
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/261.7f7ef969c49c49fa7b56.js,sha256=f375acScSfp7VnLQ1_KxNCNstAmi4GUbc9oW9ej9LKM,304
|
|
159
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/406.626f8de2687e0a1e52c7.js,sha256=Ym-N4mh-Ch5Sx7ZrKfBPhtvwsOanA-d6PkT8XjaIc0c,230656
|
|
160
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/486.a609121e89fefbcc13d9.js,sha256=k1e9catKz7grg-BM9de8rWyMis8Jpln06uKB1ihndDY,70494
|
|
161
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/486.a609121e89fefbcc13d9.js.LICENSE.txt,sha256=0z77300wm_pESBmVUTcf-B1fV2YbeB-vedJWVU4DhZU,336
|
|
162
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/968.ec4930f7e55ef707366b.js,sha256=7Ekw9-Ve9wc2azd0HKPpH7stBKVy3jbOLrPotpe_6Zc,56726
|
|
163
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/remoteEntry.20fbded037a6d6e82936.js,sha256=IPve0Dem1ugpNu3FV2XMSNTKCOtkCJu9yt93ea4xSO4,7386
|
|
164
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/style.js,sha256=-CQt0ZTPaCTvrRiLcznxflAbfvIKlOVzjOos-muaXQ8,118
|
|
165
|
+
ovito-3.14.1.data/data/share/jupyter/labextensions/jupyter-ovito/static/third-party-licenses.json,sha256=-b9NN21Lgw--CkTtP9y3RcohV3L2MYsGIDpgZlDAhhM,5802
|
|
166
|
+
ovito-3.14.1.data/data/share/jupyter/nbextensions/jupyter-ovito/extension.js,sha256=6jGtI8C5z7cjmII51rcQa-bgN-Hw2rsdGM9gAQfl7Xg,324
|
|
167
|
+
ovito-3.14.1.data/data/share/jupyter/nbextensions/jupyter-ovito/index.js,sha256=_c__hqxu5nZ6gO8il_ilytV7NjXOJitY3wNKNBq8hEw,851400
|
|
168
|
+
ovito-3.14.1.data/data/share/jupyter/nbextensions/jupyter-ovito/index.js.LICENSE.txt,sha256=vXSfdCv-VyJaPCZwz8ppxmu1U7OsjgRBXrnE3Ovabs4,429
|
|
169
|
+
ovito-3.14.1.dist-info/METADATA,sha256=EvUwhPcwBLOP6zhZ571bDfasYo__ALXmuB4Y8sdu0fE,2366
|
|
170
|
+
ovito-3.14.1.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
|
|
171
|
+
ovito-3.14.1.dist-info/entry_points.txt,sha256=lW-u-1opGho2K7OiaiGv0qp9rfwd6iF-fF7vXacH-6o,641
|
|
172
|
+
ovito-3.14.1.dist-info/top_level.txt,sha256=0tFsUJTGWdGujHIJslwurR1vDrOk080U4u24BAbLlKQ,12
|
|
173
|
+
ovito-3.14.1.dist-info/RECORD,,
|
{ovito-3.14.0.data → ovito-3.14.1.data}/data/etc/jupyter/nbconfig/notebook.d/jupyter-ovito.json
RENAMED
|
File without changes
|
{ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/labextensions/jupyter-ovito/package.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/nbextensions/jupyter-ovito/extension.js
RENAMED
|
File without changes
|
{ovito-3.14.0.data → ovito-3.14.1.data}/data/share/jupyter/nbextensions/jupyter-ovito/index.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|