Skip to content

Commit 253cbef

Browse files
koubaaMohamed Koubaapyansys-ci-botpre-commit-ci[bot]
authored
feat: add parameter set to lib (#644)
Co-authored-by: Mohamed Koubaa <[email protected]> Co-authored-by: pyansys-ci-bot <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent d05fdb5 commit 253cbef

18 files changed

+177
-52
lines changed

doc/changelog/644.documentation.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
add parameter set to lib

src/ansys/dyna/core/lib/card.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from ansys.dyna.core.lib.format_type import format_type
3030
from ansys.dyna.core.lib.io_utils import write_or_return
3131
from ansys.dyna.core.lib.kwd_line_formatter import load_dataline, read_line
32+
from ansys.dyna.core.lib.parameter_set import ParameterSet
3233

3334

3435
class Card(CardInterface):
@@ -54,22 +55,22 @@ def _convert_fields_to_long_format(self) -> typing.List[Field]:
5455
fields.append(new_field)
5556
return fields
5657

57-
def read(self, buf: typing.TextIO) -> bool:
58+
def read(self, buf: typing.TextIO, parameter_set: ParameterSet = None) -> bool:
5859
if not self._is_active():
5960
return False
6061
line, to_exit = read_line(buf)
6162
if to_exit:
6263
return True
63-
self._load(line)
64+
self._load(line, parameter_set)
6465
return False
6566

66-
def _load(self, data_line: str) -> None:
67+
def _load(self, data_line: str, parameter_set: ParameterSet) -> None:
6768
"""loads the card data from a list of strings"""
6869
fields = self._fields
6970
if self.format == format_type.long:
7071
fields = self._convert_fields_to_long_format()
7172
format = [(field.offset, field.width, field.type) for field in fields]
72-
values = load_dataline(format, data_line)
73+
values = load_dataline(format, data_line, parameter_set)
7374
num_fields = len(fields)
7475
for field_index in range(num_fields):
7576
self._fields[field_index].value = values[field_index]

src/ansys/dyna/core/lib/card_interface.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import typing
2525

2626
from ansys.dyna.core.lib.format_type import format_type
27+
from ansys.dyna.core.lib.parameter_set import ParameterSet
2728

2829
# TODO - implement __repr__ on all cards
2930

@@ -41,7 +42,7 @@ def __subclasshook__(cls, subclass):
4142
)
4243

4344
@abc.abstractmethod
44-
def read(self, buf: typing.TextIO) -> None:
45+
def read(self, buf: typing.TextIO, parameter_set: typing.Optional[ParameterSet]) -> None:
4546
"""Reads the card data from an input text buffer."""
4647
raise NotImplementedError
4748

src/ansys/dyna/core/lib/card_set.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from ansys.dyna.core.lib.io_utils import write_or_return
3535
from ansys.dyna.core.lib.kwd_line_formatter import at_end_of_keyword
3636
from ansys.dyna.core.lib.option_card import OptionSpec
37+
from ansys.dyna.core.lib.parameter_set import ParameterSet
3738

3839

3940
class CardSet(CardInterface):
@@ -137,37 +138,37 @@ def _write(buf: typing.TextIO):
137138

138139
return write_or_return(buf, _write)
139140

140-
def _read_item_cards(self, buf: typing.TextIO, index: int) -> bool:
141+
def _read_item_cards(self, buf: typing.TextIO, index: int, parameter_set: ParameterSet) -> bool:
141142
item = self._items[index]
142143
for card in item._get_all_cards():
143-
ret = card.read(buf)
144+
ret = card.read(buf, parameter_set)
144145
if ret:
145146
# according to the card, we are at the end of the keyword, so
146147
# we can break out of the card reading loop.
147148
return True
148149
return False
149150

150-
def _load_bounded_from_buffer(self, buf: typing.TextIO) -> None:
151+
def _load_bounded_from_buffer(self, buf: typing.TextIO, parameter_set: ParameterSet) -> None:
151152
length = self._length_func()
152153
for index in range(length):
153-
if self._read_item_cards(buf, index):
154+
if self._read_item_cards(buf, index, parameter_set):
154155
break
155156

156-
def _load_unbounded_from_buffer(self, buf: typing.TextIO) -> None:
157+
def _load_unbounded_from_buffer(self, buf: typing.TextIO, parameter_set: ParameterSet) -> None:
157158
index = -1
158159
while True:
159160
self._add_item_simple()
160161
index += 1
161-
self._read_item_cards(buf, index)
162+
self._read_item_cards(buf, index, parameter_set)
162163
if at_end_of_keyword(buf):
163164
# the buffer is at the end of the keyword, exit
164165
return
165166

166-
def read(self, buf: typing.TextIO) -> bool:
167+
def read(self, buf: typing.TextIO, parameter_set: ParameterSet = None) -> bool:
167168
self._initialize()
168169
if self.bounded:
169-
self._load_bounded_from_buffer(buf)
170+
self._load_bounded_from_buffer(buf, parameter_set)
170171
return False
171172
else:
172-
self._load_unbounded_from_buffer(buf)
173+
self._load_unbounded_from_buffer(buf, parameter_set)
173174
return True

src/ansys/dyna/core/lib/cards.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121
# SOFTWARE.
2222

23-
"""Base class for cards and I/O"""
23+
"""Base class for cards and I/O."""
2424

2525
import typing
2626

@@ -29,6 +29,7 @@
2929
from ansys.dyna.core.lib.format_type import format_type
3030
from ansys.dyna.core.lib.kwd_line_formatter import read_line
3131
from ansys.dyna.core.lib.option_card import OptionCardSet, OptionsAPI
32+
from ansys.dyna.core.lib.parameter_set import ParameterSet
3233

3334

3435
class Cards:
@@ -141,14 +142,12 @@ def _try_read_options_with_no_title(self, buf: typing.TextIO) -> None:
141142
if not any_options_read:
142143
buf.seek(pos)
143144

144-
def _read_data(self, buf: typing.TextIO) -> None:
145+
def _read_data(self, buf: typing.TextIO, parameters: ParameterSet) -> None:
145146
for card in self._get_pre_option_cards():
146-
card.read(buf)
147-
147+
card.read(buf, parameters)
148148
for card in self._get_non_option_cards():
149-
card.read(buf)
150-
149+
card.read(buf, parameters)
151150
for card in self._get_post_option_cards():
152-
card.read(buf)
151+
card.read(buf, parameters)
153152

154153
self._try_read_options_with_no_title(buf)

src/ansys/dyna/core/lib/deck.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from ansys.dyna.core.lib.format_type import format_type
3131
from ansys.dyna.core.lib.io_utils import write_or_return
3232
from ansys.dyna.core.lib.keyword_base import KeywordBase
33+
from ansys.dyna.core.lib.parameter_set import ParameterSet
3334

3435

3536
class Deck:
@@ -38,6 +39,7 @@ class Deck:
3839
def __init__(self, title: str = None, **kwargs):
3940
"""Initialize the deck."""
4041
self._keywords: typing.List = kwargs.get("keywords", [])
42+
self._parameter_set = ParameterSet()
4143
self.comment_header: str = None
4244
self.title: str = title
4345
self.format: format_type = kwargs.get("format", format_type.default)
@@ -56,6 +58,10 @@ def clear(self):
5658
self.title = None
5759
self.format = format_type.default
5860

61+
@property
62+
def parameters(self) -> ParameterSet:
63+
return self._parameter_set
64+
5965
@property
6066
def format(self) -> format_type:
6167
"""Format type of the deck."""

src/ansys/dyna/core/lib/deck_loader.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,9 @@ def handle_keyword(block: typing.List[str], deck: "ansys.dyna.core.deck.Deck") -
142142
format = deck.format
143143
keyword_object.format = format
144144
try:
145-
keyword_object.loads(keyword_data)
145+
keyword_object.loads(keyword_data, deck.parameters)
146146
deck.append(keyword_object)
147-
except Exception:
147+
except:
148148
result.add_unprocessed_keyword(keyword)
149149
deck.append(keyword_data)
150150

src/ansys/dyna/core/lib/duplicate_card.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from ansys.dyna.core.lib.format_type import format_type
3232
from ansys.dyna.core.lib.io_utils import write_or_return
3333
from ansys.dyna.core.lib.kwd_line_formatter import buffer_to_lines
34+
from ansys.dyna.core.lib.parameter_set import ParameterSet
3435

3536
CHECK_TYPE = True
3637

@@ -138,7 +139,9 @@ def _get_read_options(self):
138139
options = {"names": names, "colspecs": colspecs, "dtype": dtype, "comment": "$"}
139140
return options
140141

141-
def _read_buffer_as_dataframe(self, buffer: typing.TextIO, fields: typing.Iterable[Field]) -> pd.DataFrame:
142+
def _read_buffer_as_dataframe(
143+
self, buffer: typing.TextIO, fields: typing.Iterable[Field], parameter_set: ParameterSet
144+
) -> pd.DataFrame:
142145
read_options = self._get_read_options()
143146
df = pd.read_fwf(buffer, **read_options)
144147
return df
@@ -149,32 +152,32 @@ def _get_fields(self) -> typing.List[Field]:
149152
fields = self._convert_fields_to_long_format()
150153
return fields
151154

152-
def _load_bounded_from_buffer(self, buf: typing.TextIO) -> None:
155+
def _load_bounded_from_buffer(self, buf: typing.TextIO, parameter_set: ParameterSet) -> None:
153156
read_options = self._get_read_options()
154157
read_options["nrows"] = self._num_rows()
155158
df = pd.read_fwf(buf, **read_options)
156159
self._table = df
157160
self._initialized = True
158161

159-
def _load_unbounded_from_buffer(self, buf: typing.TextIO) -> None:
162+
def _load_unbounded_from_buffer(self, buf: typing.TextIO, parameter_set: ParameterSet) -> None:
160163
data_lines = buffer_to_lines(buf)
161-
self._load_lines(data_lines)
164+
self._load_lines(data_lines, parameter_set)
162165

163-
def read(self, buf: typing.TextIO) -> None:
166+
def read(self, buf: typing.TextIO, parameter_set: ParameterSet = None) -> None:
164167
if self.bounded:
165168
self._initialized = True
166-
self._load_bounded_from_buffer(buf)
169+
self._load_bounded_from_buffer(buf, parameter_set)
167170
else:
168171
self._initialize_data(0)
169172
self._initialized = True
170-
self._load_unbounded_from_buffer(buf)
173+
self._load_unbounded_from_buffer(buf, parameter_set)
171174

172-
def _load_lines(self, data_lines: typing.List[str]) -> None:
175+
def _load_lines(self, data_lines: typing.List[str], parameter_set: ParameterSet) -> None:
173176
fields = self._get_fields()
174177
buffer = io.StringIO()
175178
[(buffer.write(line), buffer.write("\n")) for line in data_lines]
176179
buffer.seek(0)
177-
self._table = self._read_buffer_as_dataframe(buffer, fields)
180+
self._table = self._read_buffer_as_dataframe(buffer, fields, parameter_set)
178181
self._initialized = True
179182

180183
def write(

src/ansys/dyna/core/lib/duplicate_card_group.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from ansys.dyna.core.lib.format_type import format_type
3333
from ansys.dyna.core.lib.io_utils import write_or_return
3434
from ansys.dyna.core.lib.kwd_line_formatter import buffer_to_lines
35+
from ansys.dyna.core.lib.parameter_set import ParameterSet
3536

3637

3738
def _to_duplicate_card(card: Card, length_func: typing.Callable) -> DuplicateCard:
@@ -99,25 +100,25 @@ def format(self, value: format_type) -> None:
99100
for card in self._cards:
100101
card.format = value
101102

102-
def _load_unbounded_from_buffer(self, buf: typing.TextIO) -> None:
103+
def _load_unbounded_from_buffer(self, buf: typing.TextIO, parameter_set: ParameterSet) -> None:
103104
data_lines = buffer_to_lines(buf)
104-
self._load_lines(data_lines)
105+
self._load_lines(data_lines, parameter_set)
105106

106-
def _load_bounded_from_buffer(self, buf: typing.TextIO) -> None:
107+
def _load_bounded_from_buffer(self, buf: typing.TextIO, parameter_set: ParameterSet) -> None:
107108
data_lines = buffer_to_lines(buf, self._num_rows())
108-
self._load_lines(data_lines)
109+
self._load_lines(data_lines, parameter_set)
109110

110-
def read(self, buf: typing.TextIO) -> None:
111+
def read(self, buf: typing.TextIO, parameter_set: ParameterSet = None) -> None:
111112
if self.bounded:
112-
self._load_bounded_from_buffer(buf)
113+
self._load_bounded_from_buffer(buf, parameter_set)
113114
else:
114-
self._load_unbounded_from_buffer(buf)
115+
self._load_unbounded_from_buffer(buf, parameter_set)
115116

116-
def _load_lines(self, data_lines: typing.List[str]) -> None:
117+
def _load_lines(self, data_lines: typing.List[str], parameter_set: ParameterSet) -> None:
117118
"""Load the card data from a list of strings."""
118119
card_lines = self._divide_data_lines(data_lines)
119120
for index, lines in enumerate(card_lines):
120-
self._cards[index]._load_lines(lines)
121+
self._cards[index]._load_lines(lines, parameter_set)
121122
self.table = pd.concat([card.table for card in self._cards], axis=1)
122123

123124
def write(

src/ansys/dyna/core/lib/keyword_base.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from ansys.dyna.core.lib.cards import Cards
2929
from ansys.dyna.core.lib.format_type import format_type
3030
from ansys.dyna.core.lib.option_card import OptionsAPI
31+
from ansys.dyna.core.lib.parameter_set import ParameterSet
3132

3233

3334
class KeywordBase(Cards):
@@ -269,20 +270,20 @@ def _process_title(self, title_line: str) -> None:
269270
return title_line[:-1]
270271
return title_line
271272

272-
def read(self, buf: typing.TextIO) -> None:
273+
def read(self, buf: typing.TextIO, parameters: ParameterSet = None) -> None:
273274
title_line = buf.readline()
274275
title_line = self._process_title(title_line)
275276
self.before_read(buf)
276277
if title_line != self.get_title():
277278
self._activate_options(title_line.strip("*"))
278279
# TODO: self.user_comment should come from somewhere.
279280
# maybe after the keyword but before any $#
280-
self._read_data(buf)
281+
self._read_data(buf, parameters)
281282

282-
def loads(self, value: str) -> None:
283+
def loads(self, value: str, parameters: ParameterSet = None) -> None:
283284
"""Load the keyword from string."""
284285
# TODO - add a method to load from a buffer.
285286
s = io.StringIO()
286287
s.write(value)
287288
s.seek(0)
288-
self.read(s)
289+
self.read(s, parameters)

0 commit comments

Comments
 (0)