Skip to content

Commit 9a99ff2

Browse files
authored
Add PropertyField.name (#1469)
* Add the FieldDefinition to the PropertyField and get/set the name through it. Signed-off-by: paul.profizi <[email protected]> * Add testing Signed-off-by: paul.profizi <[email protected]> * Fix retro-compatibility Signed-off-by: paul.profizi <[email protected]> * Fix retro-compatibility Signed-off-by: paul.profizi <[email protected]> * Add typehinting Signed-off-by: paul.profizi <[email protected]> * Add @version_requires decorators to new properties Signed-off-by: paul.profizi <[email protected]> --------- Signed-off-by: paul.profizi <[email protected]>
1 parent ecf0fa3 commit 9a99ff2

File tree

5 files changed

+57
-4
lines changed

5 files changed

+57
-4
lines changed

src/ansys/dpf/core/field.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ def shell_layers(self, value):
338338
fielddef.shell_layers = value
339339
self.field_definition = fielddef
340340

341-
def get_entity_data(self, index):
341+
def get_entity_data(self, index: int) -> dpf_array.DPFArray:
342342
try:
343343
vec = dpf_vector.DPFVectorDouble(client=self._server.client)
344344
self._api.csfield_get_entity_data_for_dpf_vector(
@@ -353,7 +353,7 @@ def get_entity_data(self, index):
353353
data.shape = (data.size // n_comp, n_comp)
354354
return data
355355

356-
def get_entity_data_by_id(self, id):
356+
def get_entity_data_by_id(self, id: int) -> dpf_array.DPFArray:
357357
try:
358358
vec = dpf_vector.DPFVectorDouble(client=self._server.client)
359359
self._api.csfield_get_entity_data_by_id_for_dpf_vector(

src/ansys/dpf/core/fields_container.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ def get_imaginary_field(self, timeid=None):
297297

298298
return super()._get_entry(label_space)
299299

300-
def __getitem__(self, key):
300+
def __getitem__(self, key) -> field.Field:
301301
"""Retrieve the field at a requested index.
302302
303303
Parameters

src/ansys/dpf/core/property_field.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
"""
55

66
import numpy as np
7+
from ansys.dpf.core.check_version import version_requires
78
from ansys.dpf.core.common import natures, locations, _get_size_of_list
89
from ansys.dpf.core import scoping, dimensionality
910
from ansys.dpf.core.field_base import _FieldBase, _LocalFieldBase
11+
from ansys.dpf.core.check_version import meets_version
12+
from ansys.dpf.core.field_definition import FieldDefinition
1013
from ansys.dpf.gate import (
1114
property_field_abstract_api,
1215
property_field_capi,
@@ -69,6 +72,9 @@ def __init__(
6972
field=property_field,
7073
server=server,
7174
)
75+
self._field_definition = None
76+
if meets_version(self._server.version, "8.1"):
77+
self._field_definition = self._load_field_definition()
7278

7379
@property
7480
def _api(self) -> property_field_abstract_api.PropertyFieldAbstractAPI:
@@ -101,6 +107,14 @@ def _field_create_internal_obj(
101107
else:
102108
return api.csproperty_field_new(nentities, nentities * dim.component_count)
103109

110+
111+
@version_requires("8.1")
112+
def _load_field_definition(self):
113+
"""Attempt to load the field definition for this field."""
114+
# try:
115+
out = self._api.csproperty_field_get_shared_field_definition(self)
116+
return FieldDefinition(out, self._server)
117+
104118
@property
105119
def location(self):
106120
"""Location of the property field.
@@ -299,6 +313,35 @@ def as_local_field(self):
299313
"""
300314
return _LocalPropertyField(self)
301315

316+
@property
317+
@version_requires("8.1")
318+
def name(self):
319+
"""Name of the property field.
320+
321+
..note:
322+
Available starting with DPF 2024.2.pre1.
323+
"""
324+
if self._field_definition:
325+
return self._field_definition.name
326+
327+
@name.setter
328+
@version_requires("8.1")
329+
def name(self, value):
330+
"""Change the name of the property field
331+
332+
Parameters
333+
----------
334+
value : str
335+
Name of the property field.
336+
337+
..note:
338+
Available starting with DPF 2024.2.pre1.
339+
"""
340+
if self._field_definition:
341+
self._field_definition._api.csfield_definition_set_name(
342+
self._field_definition, name=value
343+
)
344+
302345

303346
class _LocalPropertyField(_LocalFieldBase, PropertyField):
304347
"""Caches the internal data of a field so that it can be modified locally.

tests/conftest.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,9 @@ def return_ds(server=None):
304304

305305
return return_ds
306306

307-
307+
SERVERS_VERSION_GREATER_THAN_OR_EQUAL_TO_8_1 = meets_version(
308+
get_server_version(core._global_server()), "8.1"
309+
)
308310
SERVERS_VERSION_GREATER_THAN_OR_EQUAL_TO_8_0 = meets_version(
309311
get_server_version(core._global_server()), "8.0"
310312
)

tests/test_propertyfield.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ def test_set_get_data_property_field(server_type):
4141
assert np.allclose(field.data, data)
4242

4343

44+
@pytest.mark.skipif(not conftest.SERVERS_VERSION_GREATER_THAN_OR_EQUAL_TO_8_1,
45+
reason="Available starting with DPF 8.1")
46+
def test_set_get_name_property_field(server_type):
47+
field = dpf.core.PropertyField(server=server_type)
48+
field.name = "test"
49+
assert field.name == "test"
50+
51+
4452
def test_create_property_field_push_back(server_type):
4553
f_vec = core.PropertyField(1, core.natures.vector, core.locations.nodal, server=server_type)
4654
f_vec.append([1, 2, 4], 1)

0 commit comments

Comments
 (0)