def assert_fields(card1, card2): try: fields1 = wipe_empty_fields_typed(card1.repr_fields()) fields2 = wipe_empty_fields_typed(card2.repr_fields()) except: print("card1 = \n%s" % (card1)) print("card2 = \n%s" % (card2)) raise if len(fields1) != len(fields2): msg = ('len(fields1)=%s len(fields2)=%s\n%r\n%r\n%s\n%s' % (len(fields1), len(fields2), fields1, fields2, print_card_8(fields1), print_card_8(fields2))) raise RuntimeError(msg) msg_end = '' for (i, field1, field2) in zip(count(), fields1, fields2): value1a = print_field(field1) value2a = print_field(field2) msg_end += '%-2s: %-8s %-8s\n' % (i, field1, field2) if value1a != value2a: value1 = print_field(interpret_value(value1a)) value2 = print_field(interpret_value(value2a)) if value1 != value2: msg = 'value1 != value2\n' msg += ('cardName=%s ID=%s i=%s field1=%r field2=%r value1=%r ' 'value2=%r\n%r\n%r\n' % (fields1[0], fields1[1], i, field1, field2, value1, value2, fields1, fields2)) raise RuntimeError(msg + msg_end)
def print_card_16(fields, wipe_fields=True): """ Prints a nastran-style card with 16-character width fields. :param fields: all the fields in the BDF card (no trailing Nones) :param wipe_fields: some cards (e.g. PBEAM) have ending fields that need to be there, others cannot have them. .. note:: An internal field value of None or '' will be treated as a blank field .. note:: A large field format follows the 8-16-16-16-16-8 = 80 format where the first 8 is the card name or blank (continuation). The last 8-character field indicates an optional continuation, but because it's a left-justified unneccessary field, print_card doesnt use it. .. code-block:: python >>> fields = ['DUMMY', 1, 2, 3, None, 4, 5, 6, 7, 8.] >>> print_card_16(fields) DUMMY* 1 2 3 * 4 5 6 7 * 8. * """ if wipe_fields: fields = wipe_empty_fields_typed(fields) nfields_main = len(fields) - 1 # chop off the card name nbdf_lines = nfields_main // 8 if nfields_main % 8 != 0: nbdf_lines += 1 nextra_fields = 8 * nbdf_lines - nfields_main fields += [None] * nextra_fields try: out = '%-8s' % (fields[0] + '*') except: print("ERROR! fields=%s" % fields) sys.stdout.flush() raise for i in range(1, len(fields)): field = fields[i] try: out += print_field_16(field) except: print("bad fields = %s" % fields) raise if i % 4 == 0: # allow 1+4 fields per line out = out.rstrip(' ') if out[-1] == '\n': # empty line out += '*' out += '\n* ' out = out.rstrip(' *') # removes one continuation star if not out.endswith('\n'): out += '\n' return out
def print_card_double(fields, wipe_fields=True): """ Prints a nastran-style card with 16-character width fields. :param fields: all the fields in the BDF card (no trailing Nones) :param wipe_fields: some cards (e.g. PBEAM) have ending fields that need to be there, others cannot have them. .. note:: An internal field value of None or '' will be treated as a blank field .. note:: A large field format follows the 8-16-16-16-16-8 = 80 format where the first 8 is the card name or blank (continuation). The last 8-character field indicates an optional continuation, but because it's a left-justified unneccessary field, print_card doesnt use it. .. code-block:: python >>> fields = ['DUMMY', 1, 2, 3, None, 4, 5, 6, 7, 8.] >>> print_card_double(fields) DUMMY* 1 2 3 * 4 5 6 7 * 8.0000000000D+00 * """ if wipe_fields: fields = wipe_empty_fields_typed(fields) nfields_main = len(fields) - 1 # chop off the card name nbdf_lines = nfields_main // 8 if nfields_main % 8 != 0: nbdf_lines += 1 nextra_fields = 8 * nbdf_lines - nfields_main fields += [None] * nextra_fields try: out = '%-8s' % (fields[0] + '*') except: print("ERROR! fields=%s" % fields) sys.stdout.flush() raise for i in range(1, len(fields)): field = fields[i] try: out += print_field_double(field) except: print("bad fields = %s" % fields) raise if i % 4 == 0: # allow 1+4 fields per line out = out.rstrip(' ') if out[-1] == '\n': # empty line out += '*' out += '\n* ' out = out.rstrip(' *') # removes one continuation star if not out.endswith('\n'): out += '\n' return out
def assert_fields(card1, card2): try: fields1 = wipe_empty_fields_typed(card1.repr_fields()) fields2 = wipe_empty_fields_typed(card2.repr_fields()) except: print("card1 = \n%s" % (card1)) print("card2 = \n%s" % (card2)) raise if len(fields1) != len(fields2): msg = ('len(fields1)=%s len(fields2)=%s\n%r\n%r\n%s\n%s' % (len(fields1), len(fields2), fields1, fields2, print_card_8(fields1), print_card_8(fields2))) raise RuntimeError(msg) msg_end = '' max_int = 99999999 for (i, field1, field2) in zip(count(), fields1, fields2): if isinstance(field1, int) and field1 > max_int: value1a = print_field_16(field1) value2a = print_field_16(field2) else: value1a = print_field_8(field1) value2a = print_field_8(field2) msg_end += '%-2s: %-8s %-8s\n' % (i, field1, field2) if value1a != value2a: if isinstance(field1, int) and field1 > max_int: value1 = print_field_16(interpret_value(value1a)) value2 = print_field_16(interpret_value(value2a)) else: value1 = print_field_8(interpret_value(value1a)) value2 = print_field_8(interpret_value(value2a)) if value1 != value2: msg = 'value1 != value2\n' msg += ( 'card_name=%s ID=%s i=%s field1=%r field2=%r value1=%r ' 'value2=%r\n%r\n%r\n' % (fields1[0], fields1[1], i, field1, field2, value1, value2, fields1, fields2)) raise RuntimeError(msg + msg_end)