Source code for pyNastran.bdf.cards.utils

"""
defines:
 - fields_out = build_table_lines(fields, nstart=1, nend=0)
 - fields_out = wipe_empty_fields(card)

"""
from typing import Union


[docs] def build_table_lines(fields, nstart: int=1, nend: int=0): """ Builds a table of the form: +--------+-------+--------+-------+--------+-------+-------+-------+ | DESVAR | DVID1 | DVID2 | DVID3 |DVID4 | DVID5 | DVID6 | DVID7 | +--------+-------+--------+-------+--------+-------+-------+-------+ | | DVID8 | etc. | | | | | | +--------+-------+--------+-------+--------+-------+-------+-------+ | | UM | VAL1 | VAL2 | etc. | | | | +--------+-------+--------+-------+--------+-------+-------+-------+ and pads the rest of the fields with None's (e.g. at the end of the DVID8 line). Parameters ---------- fields: list[int/float/str] the fields to enter, including DESVAR nstart: int; default=1 the number of blank fields at the start of the line nend : int; default=0) the number of blank fields at the end of the line Returns ------- fields_out : list[str/None] the values ready for card printing .. note:: will be used for DVCREL2, DVMREL2, DVPREL2, RBE1, RBE3, DRESP2, DRESP3 .. warning:: only works for small field format??? """ fields_out = [] n = 8 - nstart - nend # pack all the fields into a list. Only consider an entry as isolated for (i, field) in enumerate(fields): fields_out.append(field) if i > 0 and i % n == 0: # beginning of line #pad = [None] * (i + j) #fields_out += pad fields_out += [None] * (nstart + nend) # make sure they're aren't any trailing None's (from a new line) fields_out = wipe_empty_fields(fields_out) # push the next key (aka next fields[0]) onto the next line nspaces = 8 - (len(fields_out)) % 8 # puts UM onto next line if nspaces < 8: fields_out += [None] * nspaces return fields_out
[docs] def wipe_empty_fields(card: list[Union[str, int, float, None]]) -> list[Union[str, int, float, None]]: """ Removes any trailing Nones from the card. Also converts empty strings to None. Allows floats & ints, but that's not the intended value, though it is ok (it's just extra work). Parameters ---------- card : list[str] the fields on the card as a list Returns ------- short_card : list[str] the card with no trailing blank fields """ short_card = [] # type: list[Union[str, int, float, None]] for field in card: if isinstance(field, str): field = field.strip() if field == '': short_card.append(None) else: short_card.append(field) else: short_card.append(field) imax = 0 for i, field in enumerate(card): if short_card[i] is not None: imax = i out = short_card[:imax + 1] return out