def save_touchstone(db, filename): """Write a Datablock to a touchstone-format file with name filename. """ with open(filename, "w") as fil: for comment in db.comments.fullcomments: fil.write("!" + comment) fil.write("\n") for k, v in db.vardata.items(): if v.shape == (): fil.write("!%s: %s\n" % (k, v.outputformat % v)) # fil.write("\t".join(rad)) fil.write("#HZ S RI R 50\n") header, columns = make_col_from_matrix([db.S.dims[0].name, "S"], [hfarray(db.S.dims[0]), db.S], "%s[%s,%s]", fortranorder=True) fmts = [x.outputformat for x in columns] for row in zip(*columns): out = [] for elem, fmt in zip(row, fmts): if iscomplexobj(elem): out.append(fmt % elem.real) out.append(fmt % elem.imag) else: out.append(fmt % elem) fil.write("\t".join(out)) fil.write("\n")
def test_make_col_from_matrix_2(self): header = ["S"] dims = (DimSweep("f", 1), DimMatrix_i("i", 2), DimMatrix_j("j", 2), ) columns = [hfarray([[[11, 12], [21, 22]]], dims=dims)] res = common.make_col_from_matrix(header, columns, "%s%s%s", fortranorder=True) self.assertEqual(res, (["S11", "S21", "S12", "S22"], [11, 21, 12, 22]))
def test_make_col_from_matrix_1(self): header = ["S", "P"] dims = (DimSweep("f", 1), DimMatrix_i("i", 2), DimMatrix_j("j", 2), ) columns = [hfarray([[[11, 12], [21, 22]]], dims=dims), hfarray([10], dims=dims[:1])] res = common.make_col_from_matrix(header, columns, "%s%s%s") self.assertEqual(res, (["S11", "S12", "S21", "S22", "P"], [11, 12, 21, 22, 10]))
def test_make_col_from_matrix_2(self): header = ["S"] dims = ( DimSweep("f", 1), DimMatrix_i("i", 2), DimMatrix_j("j", 2), ) columns = [hfarray([[[11, 12], [21, 22]]], dims=dims)] res = common.make_col_from_matrix(header, columns, "%s%s%s", fortranorder=True) self.assertEqual(res, (["S11", "S21", "S12", "S22"], [11, 21, 12, 22]))
def test_make_col_from_matrix_1(self): header = ["S", "P"] dims = ( DimSweep("f", 1), DimMatrix_i("i", 2), DimMatrix_j("j", 2), ) columns = [ hfarray([[[11, 12], [21, 22]]], dims=dims), hfarray([10], dims=dims[:1]) ] res = common.make_col_from_matrix(header, columns, "%s%s%s") self.assertEqual( res, (["S11", "S12", "S21", "S22", "P"], [11, 12, 21, 22, 10]))
def format_sp_block(sweepvars, header, fmts, columns, blockname, comments): for comment in comments.fullcomments: yield ["!" + comment.lstrip("!")] for iname, fmt, value in sweepvars: yield [("!@%s=" + fmt) % (iname, value)] header, columns = make_col_from_matrix(header, columns, "%s%s%s") outheader = format_complex_header(header, columns, "%s", "Re(%s)", "Im(%s)", padheader=True) yield outheader fmts = [x.outputformat for x in columns] for row in zip(*columns): out = [] for elem, fmt in zip(row, fmts): out.extend(format_elem(fmt, elem)) yield out
def format_sp_block(sweepvars, header, fmts, columns, blockname, comments): for comment in comments.fullcomments: yield ["!" + comment.lstrip("!")] for iname, fmt, value in sweepvars: yield [("!@%s=" + fmt) % (iname, value)] header, columns = make_col_from_matrix(header, columns, "%s%s%s") outheader = format_complex_header(header, columns, "%s", "Re(%s)", "Im(%s)") yield outheader fmts = [x.outputformat for x in columns] for row in zip(*columns): out = [] for elem, fmt in zip(row, fmts): out.extend(format_elem(fmt, elem)) yield out
def format_touchstone_block(sweepvars, header, fmts, columns, blockname, comments): for comment in comments.fullcomments: yield ["!" + comment] yield [comments.property.get("INFO", ["#HZ S RI R 50"])[0]] header, columns = make_col_from_matrix(header, columns, "%s[%s,%s]", fortranorder=True) fmts = [x.outputformat for x in columns] for row in zip(*columns): out = [] for elem, fmt in zip(row, fmts): if iscomplexobj(elem): out.append(fmt % elem.real) out.append(fmt % elem.imag) else: out.append(fmt % elem) yield out
def save_touchstone(db, filename, sep="\t", format="RI"): """Write a Datablock to a touchstone-format file with name filename. """ fmt = format.upper() if fmt not in ["RI", "MA", "DB"]: raise TouchstoneError(f'Format {fmt} unknown, use "RI", "MA" or "DB"') with open(filename, "w") as fil: for comment in db.comments.fullcomments: print(f"!{comment}", file=fil) for k, v in db.vardata.items(): if v.shape == (): print(f"!{k}: {v.outputformat}", file=fil) print(f"#HZ S {fmt} R 50", file=fil) header, columns = make_col_from_matrix([db.S.dims[0].name, "S"], [hfarray(db.S.dims[0]), db.S], "%s[%s,%s]", fortranorder=True) fmts = [x.outputformat for x in columns] out = [] for row in zip(*columns): rowout = [] for elem, numfmt in zip(row, fmts): if iscomplexobj(elem): if fmt == "RI": rowout.append(numfmt % elem.real) rowout.append(numfmt % elem.imag) elif fmt == "MA": rowout.append(numfmt % abs(elem)) rowout.append(numfmt % np.angle(elem, deg=True)) elif fmt == "DB": rowout.append(numfmt % dB(elem)) rowout.append(numfmt % np.angle(elem, deg=True)) else: raise TouchstoneError( "Format error unknown format {fmt}") else: rowout.append(numfmt % elem) out.append(rowout) for rad in pad_columns(out): print(*rad, sep=sep, file=fil)
def save_touchstone(db, filename, sep="\t", format="RI"): """Write a Datablock to a touchstone-format file with name filename. """ fmt = format.upper() if fmt not in ["RI", "MA", "DB"]: raise TouchstoneError(f'Format {fmt} unknown, use "RI", "MA" or "DB"') with open(filename, "w") as fil: for comment in db.comments.fullcomments: print(f"!{comment}", file=fil) for k, v in db.vardata.items(): if v.shape == (): print(f"!{k}: {v.outputformat}", file=fil) print(f"#HZ S {fmt} R 50", file=fil) header, columns = make_col_from_matrix([db.S.dims[0].name, "S"], [hfarray(db.S.dims[0]), db.S], "%s[%s,%s]", fortranorder=True) fmts = [x.outputformat for x in columns] out = [] for row in zip(*columns): rowout = [] for elem, numfmt in zip(row, fmts): if iscomplexobj(elem): if fmt == "RI": rowout.append(numfmt % elem.real) rowout.append(numfmt % elem.imag) elif fmt == "MA": rowout.append(numfmt % abs(elem)) rowout.append(numfmt % np.angle(elem, deg=True)) elif fmt == "DB": rowout.append(numfmt % dB(elem)) rowout.append(numfmt % np.angle(elem, deg=True)) else: raise TouchstoneError("Format error unknown format {fmt}") else: rowout.append(numfmt % elem) out.append(rowout) for rad in pad_columns(out): print(*rad, sep=sep, file=fil)