Skip to content

Commit 1a5cfcc

Browse files
Merge branch 'master' into develop
Signed-off-by: Johannes Mueller <[email protected]>
2 parents da130be + ec65159 commit 1a5cfcc

File tree

7 files changed

+46
-16
lines changed

7 files changed

+46
-16
lines changed

CHANGELOG.md

+12
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,18 @@
33
In this file noteworthy changes of new releases of pyLife are documented since
44
2.0.0.
55

6+
7+
## pylife-2.1.3
8+
9+
### Improvements
10+
11+
* Massive performance improvement when reading element connectivity by
12+
`odbclient.` Note that also `odbserver` needs to be updated in its
13+
environment. (#121)
14+
15+
* Fix some warnings on import
16+
17+
618
## pylife-2.1.2
719

820
### New features

src/pylife/strength/meanstress.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,9 @@ def sum_intervals(iv, ranges, obj):
458458

459459
range_itv_idx, means_itg_idx = resulting_intervals()
460460

461+
# TODO: remove once we drop python 3.8 support
462+
future_stack = {} if pd.__version__ < "2.1" else {'future_stack': True}
463+
461464
if len(self._remaining_names) > 0:
462465
remaining_idx = self._obj.index.to_frame(index=False).groupby(self._remaining_names).first().index
463466
result = (
@@ -466,7 +469,9 @@ def sum_intervals(iv, ranges, obj):
466469
)
467470
result.index = remaining_idx
468471
result.columns = pd.MultiIndex.from_arrays([result.columns, means_itg_idx])
469-
result = result.stack(['range', 'mean']).reorder_levels(['range', 'mean'] + self._remaining_names)
472+
result = result.stack(['range', 'mean'], **future_stack).reorder_levels(
473+
['range', 'mean'] + self._remaining_names
474+
)
470475
else:
471476
result = range_itv_idx.to_series().apply(lambda iv: sum_intervals(iv, ranges, self._obj))
472477
result.index = pd.MultiIndex.from_arrays([result.index, means_itg_idx])

tools/odbclient/src/odbclient/odbclient.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,19 @@ def element_connectivity(self, instance_name, elset_name=''):
219219
For every element there is list of node ids that the element is connected to.
220220
221221
"""
222-
index, connectivity = self._query('get_connectivity', (instance_name, elset_name))
223-
return pd.DataFrame({'connectivity': connectivity},
224-
index=pd.Index(index, name='element_id', dtype=np.int64))
222+
index, connectivity = self._query(
223+
'get_connectivity', (instance_name, elset_name)
224+
)
225+
226+
return pd.DataFrame(
227+
{
228+
'connectivity': [
229+
conn[conn >= -0].astype(np.int64).tolist() for conn in connectivity
230+
]
231+
},
232+
index=pd.Index(index, name='element_id', dtype=np.int64),
233+
)
234+
225235

226236
def nset_names(self, instance_name=''):
227237
"""Query the available node set names.

tools/odbclient/tests/connectivity.csv

-5
This file was deleted.
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"1":{"connectivity":[5,7,3,1,6,8,4,2,24,23,22,21,25,26,27,28,30,29,31,32]},
3+
"2":{"connectivity":[9,11,7,5,10,12,8,6,35,34,24,33,36,37,25,38,40,39,29,30]},
4+
"3":{"connectivity":[13,15,11,9,14,16,12,10,43,42,35,41,44,45,36,46,48,47,39,40]},
5+
"4":{"connectivity":[17,19,15,13,18,20,16,14,51,50,43,49,52,53,44,54,56,55,47,48]}
6+
}

tools/odbclient/tests/test_odbclient.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,14 @@ def test_odbclient_elset_names_invalid_instance_name(client):
106106
client.elset_names('nonexistent')
107107

108108

109-
@pytest.mark.skip("to be implemented")
110109
def test_element_connectivity(client):
111-
expected = pd.read_csv('tests/connectivity.csv', index_col='element_id')
110+
expected = pd.read_json(
111+
'tests/connectivity.json', orient="index"
112+
)
113+
expected.index.names = ["element_id"]
114+
112115
result = client.element_connectivity('PART-1-1')
113-
print(result)
114-
print(expected)
116+
115117
pd.testing.assert_frame_equal(result, expected)
116118

117119

tools/odbserver/odbserver/interface.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import odbAccess as ODB
2323
import json
2424

25-
2625
class OdbInterface:
2726

2827
def __init__(self, odbfile):
@@ -78,10 +77,11 @@ def connectivity(self, instance_name, element_set_name):
7877
raise KeyError(element_set_name)
7978

8079
index = np.empty(len(elements), dtype=np.int)
81-
connectivity = []
80+
connectivity = -np.ones((len(elements), 20))
8281
for i, el in enumerate(elements):
8382
index[i] = el.label
84-
connectivity.append(list(el.connectivity))
83+
conns = list(el.connectivity)
84+
connectivity[i, :len(conns)] = conns
8585

8686
return (index, connectivity)
8787

0 commit comments

Comments
 (0)