Skip to content

Commit 8d8ef82

Browse files
authored
Fix update of empty vectors (#2285)
* Fix update of empty vectors * backward comp * skip test
1 parent fe00fa8 commit 8d8ef82

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

src/ansys/dpf/gate/dpf_vector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def has_changed(self):
8888
-----
8989
self._check_changes is set to True by default when a client is added at the class init
9090
"""
91-
return self._modified
91+
return self._modified and self.size > 0 # Updating is not necessary for an empty vector. Updating it can cause issue, see #2274
9292

9393
def __del__(self):
9494
try:

tests/test_dpf_vector.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@
1919
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2020
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121
# SOFTWARE.
22-
2322
import numpy as np
23+
import pytest
2424

2525
from ansys.dpf import core as dpf
2626
from ansys.dpf.core import fields_factory
27+
import conftest
2728

2829

2930
def test_perf_vec_setters(server_type):
@@ -58,3 +59,48 @@ def test_perf_vec_getters(server_type):
5859
for index, chunk in enumerate(chunks):
5960
d = field.data[chunk]
6061
d = field.scoping.ids[chunk]
62+
63+
64+
def test_update_empty_dpf_vector_prop_field(server_type):
65+
prop_field = dpf.PropertyField(server=server_type)
66+
prop_field.data = np.zeros((100))
67+
prop_field.scoping.ids = list(range(1, 100))
68+
assert np.allclose(prop_field.get_entity_data(1), [0])
69+
dp = prop_field._data_pointer
70+
dp = None
71+
assert np.allclose(prop_field.get_entity_data(1), [0])
72+
73+
74+
def test_update_empty_dpf_vector_field(server_type):
75+
field = dpf.Field(server=server_type)
76+
field.data = np.zeros((100), dtype=np.double)
77+
field.scoping.ids = list(range(1, 100))
78+
assert np.allclose(field.get_entity_data(1), [0])
79+
dp = field._data_pointer
80+
dp = None
81+
assert np.allclose(field.get_entity_data(1), [0])
82+
83+
84+
@pytest.mark.skipif(
85+
not conftest.SERVERS_VERSION_GREATER_THAN_OR_EQUAL_TO_7_0,
86+
reason="change in memory ownership in server 7.0",
87+
)
88+
def test_update_empty_dpf_vector_string_field(server_type):
89+
string_field = dpf.StringField(server=server_type)
90+
string_field.data = ["high", "goodbye", "hello"]
91+
string_field.scoping.ids = list(range(1, 3))
92+
assert string_field.get_entity_data(1) == ["goodbye"]
93+
dp = string_field._data_pointer
94+
dp = None
95+
assert string_field.get_entity_data(1) == ["goodbye"]
96+
97+
98+
@conftest.raises_for_servers_version_under("5.0")
99+
def test_update_empty_dpf_vector_custom_type_field(server_type):
100+
field = dpf.CustomTypeField(unitary_type=np.double, server=server_type)
101+
field.data = np.zeros((100), dtype=np.double)
102+
field.scoping.ids = list(range(1, 100))
103+
assert np.allclose(field.get_entity_data(1), [0])
104+
dp = field._data_pointer
105+
dp = None
106+
assert np.allclose(field.get_entity_data(1), [0])

0 commit comments

Comments
 (0)