class TestFortranFormatParser(object): def setup_method(self): self.parser = FortranFormatParser() def _test_equal(self, format, ref): ret = self.parser.parse(format) assert_equal(ret.__dict__, ref.__dict__) def test_simple_int(self): self._test_equal("(I4)", IntFormat(4)) def test_simple_repeated_int(self): self._test_equal("(3I4)", IntFormat(4, repeat=3)) def test_simple_exp(self): self._test_equal("(E4.3)", ExpFormat(4, 3)) def test_exp_exp(self): self._test_equal("(E8.3E3)", ExpFormat(8, 3, 3)) def test_repeat_exp(self): self._test_equal("(2E4.3)", ExpFormat(4, 3, repeat=2)) def test_repeat_exp_exp(self): self._test_equal("(2E8.3E3)", ExpFormat(8, 3, 3, repeat=2)) def test_wrong_formats(self): def _test_invalid(bad_format): assert_raises(BadFortranFormat, lambda: self.parser.parse(bad_format)) _test_invalid("I4") _test_invalid("(E4)") _test_invalid("(E4.)") _test_invalid("(E4.E3)")
def __init__(self, title, key, total_nlines, pointer_nlines, indices_nlines, values_nlines, mxtype, nrows, ncols, nnon_zeros, pointer_format_str, indices_format_str, values_format_str, right_hand_sides_nlines=0, nelementals=0): """Do not use this directly, but the class ctrs (from_* functions).""" self.title = title self.key = key if title is None: title = "No Title" if len(title) > 72: raise ValueError("title cannot be > 72 characters") if key is None: key = "|No Key" if len(key) > 8: warnings.warn("key is > 8 characters (key is %s)" % key, LineOverflow) self.total_nlines = total_nlines self.pointer_nlines = pointer_nlines self.indices_nlines = indices_nlines self.values_nlines = values_nlines parser = FortranFormatParser() pointer_format = parser.parse(pointer_format_str) if not isinstance(pointer_format, IntFormat): raise ValueError("Expected int format for pointer format, got %s" % pointer_format) indices_format = parser.parse(indices_format_str) if not isinstance(indices_format, IntFormat): raise ValueError("Expected int format for indices format, got %s" % indices_format) values_format = parser.parse(values_format_str) if isinstance(values_format, ExpFormat): if mxtype.value_type not in ["real", "complex"]: raise ValueError("Inconsistency between matrix type %s and " "value type %s" % (mxtype, values_format)) values_dtype = np.float64 elif isinstance(values_format, IntFormat): if mxtype.value_type not in ["integer"]: raise ValueError("Inconsistency between matrix type %s and " "value type %s" % (mxtype, values_format)) # XXX: fortran int -> dtype association ? values_dtype = int else: raise ValueError("Unsupported format for values %r" % (values_format,)) self.pointer_format = pointer_format self.indices_format = indices_format self.values_format = values_format self.pointer_dtype = np.int32 self.indices_dtype = np.int32 self.values_dtype = values_dtype self.pointer_nlines = pointer_nlines self.pointer_nbytes_full = _nbytes_full(pointer_format, pointer_nlines) self.indices_nlines = indices_nlines self.indices_nbytes_full = _nbytes_full(indices_format, indices_nlines) self.values_nlines = values_nlines self.values_nbytes_full = _nbytes_full(values_format, values_nlines) self.nrows = nrows self.ncols = ncols self.nnon_zeros = nnon_zeros self.nelementals = nelementals self.mxtype = mxtype
def setup_method(self): self.parser = FortranFormatParser()
def setUp(self): self.parser = FortranFormatParser()