Exemple #1
0
    def test_5(self):
        d = DataBlock()
        d.comments = Comments(["Vgs=13", "Ig=14", "Datetime=2011-10-11 20:11:02",
                               "Vds=-13", "Calibration=SOLT"])
        fi = DimSweep("Freq", 3)
        gi = DimSweep("g", 4)
        d["Vds"] = hfarray([1, 2, 3], dims=(fi,))
        d["Id"] = hfarray([1, 2, 3, 4], dims=(gi,))
        d.comments.property["Ig"].unit = "mA"
        d.guess_units()
        d.values_from_property()

        self.assertEqual(d.Vds.unit, "V")
        self.assertAllclose(d.Vds, [1, 2, 3])
        self.assertEqual(d.Id.unit, "A")
        self.assertAllclose(d.Id, [1, 2, 3, 4])
        self.assertEqual(d.Freq.unit, "Hz")
        self.assertEqual(d.comments.property["Vgs"].unit, "V")
        self.assertEqual(d.comments.property["Ig"].unit, "mA")

        self.assertEqual(d.Ig, 14)
        self.assertEqual(d.Vgs, 13)
        self.assertEqual(d.Ig.unit, "mA")
        self.assertEqual(d.Vgs.unit, "V")
        self.assertTrue("Datetime" in d.allvarnames)
Exemple #2
0
 def setUp(self):
     self.d = DataBlock()
     self.fi = DimSweep("Freq", 3)
     self.gi = DimSweep("g", 4)
     self.hi = DimSweep("h", 4)
     self.d["Vds"] = hfarray([1, 2, 3], dims=(self.fi, ))
     self.d["Id"] = hfarray([1, 2, 3, 4], dims=(self.gi, ))
Exemple #3
0
 def setUp(self):
     self.d = DataBlock()
     self.fi = DimSweep("Freq", 3)
     self.gi = DimSweep("g", 4)
     self.hi = DimSweep("h", 4)
     self.d["Vds"] = hfarray([1, 2, 3], dims=(self.fi,))
     self.d["Id"] = hfarray([1, 2, 3, 4], dims=(self.gi,))
Exemple #4
0
    def test_1(self):
        d = DataBlock()
        fi = DimSweep("Freq[Hz]", 3)
        gi = DimSweep("g", 4)
        dims = (fi,)
        d["a"] = hfarray([1, 2, 3], dims=dims,
                            outputformat="%.5f", unit="V")
        d["b"] = hfarray([10, 20, 30], dims=dims,
                            outputformat="%.7f", unit="A")
        d["c"] = hfarray([10, 20, 30, 40], dims=(gi,),
                            outputformat="%.7f", unit="A")

        w = d.filter(d["Freq[Hz]"] <= 1)
        self.assertEqual(id(d.comments), id(w.comments))
        self.assertEqual(w["Freq[Hz]"].dims, (DimSweep("Freq[Hz]", 2),))
        self.assertEqual(w.a.dims, (DimSweep("Freq[Hz]", 2),))
        self.assertEqual(w.b.dims, (DimSweep("Freq[Hz]", 2),))
        self.assertEqual(w.c.dims, (DimSweep("g", 4),))

        self.assertAllclose(w["Freq[Hz]"], [0, 1])
        self.assertAllclose(w.a, [1, 2])
        self.assertAllclose(w.b, [10, 20])
        self.assertAllclose(w.c, [10, 20, 30, 40])
        self.assertEqual(w.a.unit, "V")
        self.assertEqual(w.b.unit, "A")
        self.assertEqual(w.c.unit, "A")
Exemple #5
0
    def test_5(self):
        d = DataBlock()
        d.comments = Comments([
            "Vgs=13", "Ig=14", "Datetime=2011-10-11 20:11:02", "Vds=-13",
            "Calibration=SOLT"
        ])
        fi = DimSweep("Freq", 3)
        gi = DimSweep("g", 4)
        d["Vds"] = hfarray([1, 2, 3], dims=(fi, ))
        d["Id"] = hfarray([1, 2, 3, 4], dims=(gi, ))
        d.comments.property["Ig"].unit = "mA"
        d.guess_units()
        d.values_from_property()

        self.assertEqual(d.Vds.unit, "V")
        self.assertAllclose(d.Vds, [1, 2, 3])
        self.assertEqual(d.Id.unit, "A")
        self.assertAllclose(d.Id, [1, 2, 3, 4])
        self.assertEqual(d.Freq.unit, "Hz")
        self.assertEqual(d.comments.property["Vgs"].unit, "V")
        self.assertEqual(d.comments.property["Ig"].unit, "mA")

        self.assertEqual(d.Ig, 14)
        self.assertEqual(d.Vgs, 13)
        self.assertEqual(d.Ig.unit, "mA")
        self.assertEqual(d.Vgs.unit, "V")
        self.assertTrue("Datetime" in d.allvarnames)
Exemple #6
0
    def test_1(self):
        d = DataBlock()
        fi = DimSweep("Freq[Hz]", 3)
        gi = DimSweep("g", 4)
        dims = (fi, )
        d["a"] = hfarray([1, 2, 3], dims=dims, outputformat="%.5f", unit="V")
        d["b"] = hfarray([10, 20, 30],
                         dims=dims,
                         outputformat="%.7f",
                         unit="A")
        d["c"] = hfarray([10, 20, 30, 40],
                         dims=(gi, ),
                         outputformat="%.7f",
                         unit="A")

        w = d.filter(d["Freq[Hz]"] <= 1)
        self.assertEqual(id(d.comments), id(w.comments))
        self.assertEqual(w["Freq[Hz]"].dims, (DimSweep("Freq[Hz]", 2), ))
        self.assertEqual(w.a.dims, (DimSweep("Freq[Hz]", 2), ))
        self.assertEqual(w.b.dims, (DimSweep("Freq[Hz]", 2), ))
        self.assertEqual(w.c.dims, (DimSweep("g", 4), ))

        self.assertAllclose(w["Freq[Hz]"], [0, 1])
        self.assertAllclose(w.a, [1, 2])
        self.assertAllclose(w.b, [10, 20])
        self.assertAllclose(w.c, [10, 20, 30, 40])
        self.assertEqual(w.a.unit, "V")
        self.assertEqual(w.b.unit, "A")
        self.assertEqual(w.c.unit, "A")
Exemple #7
0
def getvar(db, key):
    X = db[key]

    dims = []
    for x in X.dims:
        if len(x):
            dimcls = dimrep[cast_unicode(x[0].attrs.get("dimtype",
                                                        "DimSweep"))]
            dim = dimcls(x[0].name.strip("/"),
                         x[0][...],
                         unit=x[0].attrs.get("unit", None))
            dims.append(dim)

    unit = X.attrs.get("unit", None)
    outputformat = X.attrs.get("outputformat", None)
    dtype = X.attrs.get("dtype", None)
    if len(dims) == len(X.dims):
        return hfarray(X.value,
                       dims=dims,
                       unit=unit,
                       dtype=dtype,
                       outputformat=outputformat)
    else:
        dimcls = dimrep[X.attrs.get("dimtype", "DimSweep")]
        dim = dimcls(X.name.strip("/"), X[...], unit=unit)
        return hfarray(X.value,
                       dims=(dim, ),
                       unit=unit,
                       dtype=dtype,
                       outputformat=outputformat)
Exemple #8
0
 def test_copy_2(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", 3)
     dims = (fi, )
     d.comments = Comments(["Hej=10"])
     d["a"] = hfarray([1, 2, 3], dims=dims, outputformat="%.5f", unit="V")
     d["b"] = hfarray([10, 20, 30],
                      dims=dims,
                      outputformat="%.7f",
                      unit="A")
     c = d.copy()
     self.assertEqual(c.allvarnames, d.allvarnames)
     self.assertEqual(c.vardata.keys(), d.vardata.keys())
     self.assertEqual(c.ivardata.keys(), d.ivardata.keys())
     self.assertAllclose(c["Freq[Hz]"], d["Freq[Hz]"])
     self.assertAllclose(d.a, [1, 2, 3])
     self.assertAllclose(c.a, d.a)
     self.assertAllclose(c.b, d.b)
     self.assertFalse(id(d.comments) == id(c.comments))
     c.a[0] = 7
     c.b[0] = 7
     self.assertAllclose(c.a, [7, 2, 3])
     self.assertAllclose(c.b, [7, 20, 30])
     self.assertAllclose(d.a, [1, 2, 3])
     self.assertAllclose(d.b, [10, 20, 30])
Exemple #9
0
 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]))
Exemple #10
0
 def test_normalize_names_3(self):
     db = DataBlock()
     db.b = hfarray(1)
     db["a1/a2 raw"] = hfarray(1)
     db["a12"] = hfarray(2)
     res = common.normalize_names(db)
     self.assertTrue("a1/a2 raw" in res.vardata)
     self.assertTrue("a12" in res.vardata)
Exemple #11
0
 def setUp(self):
     self.db = db = DataBlock()
     Sdims = (DimRep("freq", [1, 2]), DimRep("r", [1]),
              DimMatrix_i("i", 2), DimMatrix_j("j", 2))
     db.S = hfarray(np.array([[11, 12], [21, 22]])[None, None, :, :] *
                    np.array([[10], [20]])[..., None, None], dims=Sdims)
     db.V = hfarray([1.23], Sdims[1:2])
     db.Y = hfarray([1.23], (DimRep("k", [1]),))
Exemple #12
0
 def test_normalize_names_3(self):
     db = DataBlock()
     db.b = hfarray(1)
     db["a1/a2 raw"] = hfarray(1)
     db["a12"] = hfarray(2)
     res = common.normalize_names(db)
     self.assertTrue("a1/a2 raw" in res.vardata)
     self.assertTrue("a12" in res.vardata)
Exemple #13
0
 def setUp(self):
     Test_DataBlock.setUp(self)
     self.a.P = hfarray([0.5, -.3, .5])
     Sdims = (DimMatrix_i("i", 2), DimMatrix_j("j", 2))
     self.a.S = hfarray([[11, 12], [21, 22]], dims=Sdims)
     Wdims = (DimSweep("g", 1), DimMatrix_i("i", 2), DimMatrix_j("j", 2))
     self.a.W = hfarray([[[11, 12], [21, 22]]], dims=Wdims)
     self.a.T = hfarray(["Text"], dims=(DimSweep("text_i", ["index0"]),))
Exemple #14
0
 def setUp(self):
     Test_DataBlock.setUp(self)
     self.a.P = hfarray([0.5, -.3, .5])
     Sdims = (DimMatrix_i("i", 2), DimMatrix_j("j", 2))
     self.a.S = hfarray([[11, 12], [21, 22]], dims=Sdims)
     Wdims = (DimSweep("g", 1), DimMatrix_i("i", 2), DimMatrix_j("j", 2))
     self.a.W = hfarray([[[11, 12], [21, 22]]], dims=Wdims)
     self.a.T = hfarray(["Text"], dims=(DimSweep("text_i", ["index0"]), ))
Exemple #15
0
    def read_file(cls,
                  filename,
                  make_complex=True,
                  property_to_vars=True,
                  guess_unit=True,
                  normalize=True,
                  make_matrix=False,
                  merge=True,
                  verbose=False,
                  multiple_files=True,
                  blockname=None,
                  **kw):

        if multiple_files:
            merge = False
        obj = cls(make_complex=make_complex,
                  property_to_vars=property_to_vars,
                  guess_unit=guess_unit,
                  normalize=normalize,
                  make_matrix=make_matrix,
                  merge=merge,
                  verbose=verbose,
                  **kw)
        obj.filename = filename

        if multiple_files:
            filenames = glob(filename)
        else:
            filenames = [filename]
        objs = {}
        for idx, fname in enumerate(filenames):
            with open(fname) as fil:
                res = obj.do_file(fil)
                for k, v in res.items():
                    if isinstance(v, list):
                        for a in v:
                            a["FILENAME"] = hfarray(fname)
                        objs.setdefault(k, []).extend(v)
                    else:
                        v["FILENAME"] = hfarray(fname)
                        objs.setdefault(k, []).append(v)

        if multiple_files:
            res = {}
            for k, v in objs.items():
                res[k] = simple_merge_blocks(v)
                res[k].guess_units()
        else:
            res = objs

        if blockname:
            if blockname in res:
                return res[blockname]
            else:
                msg = "%r not a block in mdif file %r" % (blockname, filename)
                MDIFError(msg)
        else:
            return res
Exemple #16
0
 def setUp(self):
     self.db = db = DataBlock()
     Sdims = (DimRep("freq", [1, 2]), DimRep("r", [1]), DimMatrix_i("i", 2),
              DimMatrix_j("j", 2))
     db.S = hfarray(np.array([[11, 12], [21, 22]])[None, None, :, :] *
                    np.array([[10], [20]])[..., None, None],
                    dims=Sdims)
     db.V = hfarray([1.23], Sdims[1:2])
     db.Y = hfarray([1.23], (DimRep("k", [1]), ))
Exemple #17
0
 def test_intersection_2(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", [10, 20, 30, 40, 50])
     gi = DimSweep("g", 4)
     dims = (fi, gi)
     d["a"] = hfarray([[1, 2, 3, 4]] * 5, dims=dims,
                         outputformat="%.5f", unit="V")
     x = DimSweep("Freq[Hz]", [20, 40])
     dres = d.filter(hfarray(x))
     self.assertAllclose(dres["Freq[Hz]"], [20, 40])
Exemple #18
0
def proc_info(info, f, data, fn, noisedata):
    info_list = info.upper().split()
    if len(info_list) == 5:
        info = freq_mult, twoporttype, datatype, rtype, z0 = info_list
    elif len(info_list) == 3:
        info = freq_mult, twoporttype, datatype = info_list
        z0 = 1.
    else:
        msg = ("# format should only have 5 values this one has %d" %
               len(info_list))
        raise TouchstoneError(msg)
    z0 = float(z0)
    f = f * freqmultdict[freq_mult]
    if fn is not None:
        fn = fn * freqmultdict[freq_mult]

    convfunc = dict(RI=re_im_to_complex,
                    DB=dB_angle_to_complex,
                    MA=mag_angle_to_complex)

    if datatype not in convfunc:
        pars = datatype
        msg = "Unknown dataformat: %s, valid formats: RI, DB, MAG" % pars
        raise TouchstoneError(msg)

    out = np.empty((data.shape[0], data.shape[1] // 2), dtype=np.complex128)

    out[...] = convfunc[datatype](data[:, ::2],  data[:, 1::2])
    if out.shape[1] == 1:
        out.shape = (out.shape[0], 1, 1)
    elif out.shape[1] == 4:
        out.shape = (out.shape[0], 2, 2)
        out = out.transpose(0, 2, 1)
    else:
        N = int(sqrt(out.shape[1]))
        out.shape = (out.shape[0], N, N)

    dims = (DimSweep("freq", f, unit="Hz"), )
    if fn is not None and len(f) == len(fn) and np.allclose(f, fn):
        noisedims = dims
    elif fn is None:
        noisedims = None
    else:
        noisedims = (DimSweep("freqn", fn, unit="Hz"), )
    out = make_matrix(out, dims)
    f = hfarray(f, dims)
    db = DataBlock()
    db[info[1]] = out
    if noisedata is not None:
        db.Rn = hfarray(noisedata[..., -1], dims=noisedims) * z0
        db.Fmin = 10 ** (hfarray(noisedata[..., 0], dims=noisedims) / 10)
        db.Gopt = hfarray(convfunc[datatype](noisedata[:, 1], noisedata[:, 2]),
                          dims=noisedims)
    db.Z0 = hfarray(z0, unit="Ohm")
    return db
Exemple #19
0
def proc_info(info, f, data, fn, noisedata):
    info_list = info.upper().split()
    if len(info_list) == 5:
        info = freq_mult, twoporttype, datatype, rtype, z0 = info_list
    elif len(info_list) == 3:
        info = freq_mult, twoporttype, datatype = info_list
        z0 = 1.
    else:
        msg = ("# format should only have 5 values this one has %d" %
               len(info_list))
        raise TouchstoneError(msg)
    z0 = float(z0)
    f = f * freqmultdict[freq_mult]
    if fn is not None:
        fn = fn * freqmultdict[freq_mult]

    convfunc = dict(RI=re_im_to_complex,
                    DB=dB_angle_to_complex,
                    MA=mag_angle_to_complex)

    if datatype not in convfunc:
        pars = datatype
        msg = "Unknown dataformat: %s, valid formats: RI, DB, MAG" % pars
        raise TouchstoneError(msg)

    out = np.empty((data.shape[0], data.shape[1] // 2), dtype=np.complex128)

    out[...] = convfunc[datatype](data[:, ::2], data[:, 1::2])
    if out.shape[1] == 1:
        out.shape = (out.shape[0], 1, 1)
    elif out.shape[1] == 4:
        out.shape = (out.shape[0], 2, 2)
        out = out.transpose(0, 2, 1)
    else:
        N = int(sqrt(out.shape[1]))
        out.shape = (out.shape[0], N, N)

    dims = (DimSweep("freq", f, unit="Hz"), )
    if fn is not None and len(f) == len(fn) and np.allclose(f, fn):
        noisedims = dims
    elif fn is None:
        noisedims = None
    else:
        noisedims = (DimSweep("freqn", fn, unit="Hz"), )
    out = make_matrix(out, dims)
    f = hfarray(f, dims)
    db = DataBlock()
    db[info[1]] = out
    if noisedata is not None:
        db.Rn = hfarray(noisedata[..., -1], dims=noisedims) * z0
        db.Fmin = 10**(hfarray(noisedata[..., 0], dims=noisedims) / 10)
        db.Gopt = hfarray(convfunc[datatype](noisedata[:, 1], noisedata[:, 2]),
                          dims=noisedims)
    db.Z0 = hfarray(z0, unit="Ohm")
    return db
Exemple #20
0
def merge_blocks(blocks, hyper=False, indexed=False):
    db = DataBlock()
    dimpartialgroups = OrderedDict()

    for b in blocks:
        parts = get_partials(b)
        partgroup = dimpartialgroups.setdefault(tuple(parts.keys()), {})
        for k, v in parts.items():
            partgroup.setdefault(k, []).extend(v)

    for idx, dims in enumerate(dimpartialgroups.values(), 1):
        for k, v in dims.items():
            dims = (DimSweep("INDEX%s" % idx, len(v)),)
            db[k] = hfarray([x.data[0] for x in v],
                            dims=dims, unit=v[0].unit)

    varnames = set()
    for b in blocks:
        for k, v in b.ivardata.items():
            if k not in db:
                db[k] = v
        for k in b.vardata.keys():
            varnames.add(k)

    for vname in varnames:
        v = []
        for b in blocks:
            if vname not in b:
                continue
            partials = get_partials(b)
            v.append(b[vname])
        if v:
            k = tuple(partials.keys())
            if k:
                ri = (db[tuple(dimpartialgroups[k].keys())[0]].dims[0],)
            else:
                ri = tuple()
            value = hfarray(v, dims=ri + v[0].dims, unit=v[0].unit)
            if v[0].dims and isinstance(v[0].dims[0], DimSweep):
                value = value.reorder_dimensions(v[0].dims[0])
            db[vname] = value
    cmt = Comments()
    for block in blocks:
        if block.comments:
            cmt.extend(block.comments)
    db.comments = cmt
    db.blockname = blocks[0].blockname

    if hyper:
        for vnames in dimpartialgroups.keys():
            if vnames:
                hyperindex = db[vnames[0]].dims[0]
                db = db.hyper(vnames, hyperindex, all=True)
    db = db.squeeze()
    return db
Exemple #21
0
def merge_blocks(blocks, hyper=False, indexed=False):
    db = DataBlock()
    dimpartialgroups = OrderedDict()

    for b in blocks:
        parts = get_partials(b)
        partgroup = dimpartialgroups.setdefault(tuple(parts.keys()), {})
        for k, v in parts.items():
            partgroup.setdefault(k, []).extend(v)

    for idx, dims in enumerate(dimpartialgroups.values(), 1):
        for k, v in dims.items():
            dims = (DimSweep("INDEX%s" % idx, len(v)), )
            db[k] = hfarray([x.data[0] for x in v], dims=dims, unit=v[0].unit)

    varnames = set()
    for b in blocks:
        for k, v in b.ivardata.items():
            if k not in db:
                db[k] = v
        for k in b.vardata.keys():
            varnames.add(k)

    for vname in varnames:
        v = []
        for b in blocks:
            if vname not in b:
                continue
            partials = get_partials(b)
            v.append(b[vname])
        if v:
            k = tuple(partials.keys())
            if k:
                ri = (db[tuple(dimpartialgroups[k].keys())[0]].dims[0], )
            else:
                ri = tuple()
            value = hfarray(v, dims=ri + v[0].dims, unit=v[0].unit)
            if v[0].dims and isinstance(v[0].dims[0], DimSweep):
                value = value.reorder_dimensions(v[0].dims[0])
            db[vname] = value
    cmt = Comments()
    for block in blocks:
        if block.comments:
            cmt.extend(block.comments)
    db.comments = cmt
    db.blockname = blocks[0].blockname

    if hyper:
        for vnames in dimpartialgroups.keys():
            if vnames:
                hyperindex = db[vnames[0]].dims[0]
                db = db.hyper(vnames, hyperindex, all=True)
    db = db.squeeze()
    return db
Exemple #22
0
 def test_2(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", 3)
     gi = DimSweep("P[W]", 3)
     dims = (fi,)
     dims2 = (fi, gi)
     dims3 = (gi,)
     d["f"] = hfarray([[1, 2, 3]] * 3, dims=dims2)
     d["P[W]"] = hfarray([10, 20, 30], dims=dims)
     self.assertEqual(d.allvarnames, ["Freq[Hz]", "P[W]", "f"])
     self.assertAllclose(d["P[W]"], [10, 20, 30])
Exemple #23
0
 def test_2(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", 3)
     gi = DimSweep("P[W]", 3)
     dims = (fi, )
     dims2 = (fi, gi)
     dims3 = (gi, )
     d["f"] = hfarray([[1, 2, 3]] * 3, dims=dims2)
     d["P[W]"] = hfarray([10, 20, 30], dims=dims)
     self.assertEqual(d.allvarnames, ["Freq[Hz]", "P[W]", "f"])
     self.assertAllclose(d["P[W]"], [10, 20, 30])
Exemple #24
0
 def setUp(self):
     self.db = db = DataBlock()
     fi = DimSweep("freq", [1e9, 2e9, 3e9, 4e9], unit="Hz")
     db.y = hfarray([1, 2, 3, 4], dims=(fi, ), unit="V")
     db.z = hfarray([1, 2, 3, 4 + 0j], dims=(fi, ), unit="Ohm")
     self.fig = plt.figure(1)
     self.ax = plt.subplot(111, projection=self.proj)
     self.lines = plt.plot(self.db.y)
     self.outpath = p = path(basepath / "savetest")
     if not p.exists():  # pragma: no cover
         p.makedirs()
Exemple #25
0
 def setUp(self):
     self.db = db = DataBlock()
     fi = DimSweep("freq", [1e9, 2e9, 3e9, 4e9], unit="Hz")
     db.y = hfarray([1, 2, 3, 4], dims=(fi, ), unit="V")
     db.z = hfarray([1, 2, 3, 4 + 0j], dims=(fi, ), unit="Ohm")
     self.fig = plt.figure(1)
     self.ax = plt.subplot(111, projection=self.proj)
     self.lines = plt.plot(self.db.y)
     self.outpath = p = path(basepath / "savetest")
     if not p.exists():  # pragma: no cover
         p.makedirs()
Exemple #26
0
 def test_make_matrix_1(self):
     a = hfarray([1, 10])
     b = hfarray([2, 20])
     c = hfarray([3, 30])
     d = hfarray([4, 40])
     i = DimMatrix_i("i", 2)
     j = DimMatrix_j("j", 2)
     fi = DimSweep("freq", [0, 1])
     matrix = hfmath.make_matrix(a, b, c, d)
     self.assertTrue(isinstance(matrix, hfarray))
     self.assertEqual(matrix.dims, (fi, i, j))
     self.assertAllclose(matrix, [[[1, 2], [3, 4]], [[10, 20], [30, 40]]])
Exemple #27
0
 def test_intersection_2(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", [10, 20, 30, 40, 50])
     gi = DimSweep("g", 4)
     dims = (fi, gi)
     d["a"] = hfarray([[1, 2, 3, 4]] * 5,
                      dims=dims,
                      outputformat="%.5f",
                      unit="V")
     x = DimSweep("Freq[Hz]", [20, 40])
     dres = d.filter(hfarray(x))
     self.assertAllclose(dres["Freq[Hz]"], [20, 40])
Exemple #28
0
 def test_1(self):
     d = DataBlock()
     dims = (DimSweep("Freq[Hz]", 3),)
     d.P = hfarray([1, 2, 3], dims=dims)
     d.L = hfarray([10, 20, 30], dims=dims)
     self.assertEqual(d.allvarnames, ["Freq[Hz]", "P", "L"])
     d.rename("P", "H")
     self.assertEqual(d.allvarnames, ["Freq[Hz]", "H", "L"])
     d.rename("Freq[Hz]", "f")
     self.assertEqual(d.allvarnames, ["f", "H", "L"])
     d.rename("foo", "bar")
     self.assertEqual(d.allvarnames, ["f", "H", "L"])
Exemple #29
0
 def test_1(self):
     d = DataBlock()
     dims = (DimSweep("Freq[Hz]", 3), )
     d.P = hfarray([1, 2, 3], dims=dims)
     d.L = hfarray([10, 20, 30], dims=dims)
     self.assertEqual(d.allvarnames, ["Freq[Hz]", "P", "L"])
     d.rename("P", "H")
     self.assertEqual(d.allvarnames, ["Freq[Hz]", "H", "L"])
     d.rename("Freq[Hz]", "f")
     self.assertEqual(d.allvarnames, ["f", "H", "L"])
     d.rename("foo", "bar")
     self.assertEqual(d.allvarnames, ["f", "H", "L"])
Exemple #30
0
def make_block_iterator(data, first=False):
    if not data.vardata:  # only x-values
        sweepvars = ()
        head = data.ivardata.keys()[0]
        dim = data.ivardata[head]

        header = [
            head,
        ]
        fmts = (data[head].outputformat, )
        columns = (hfarray(dim), )
        blockname = data.blockname
        comments = data.comments
        yield (sweepvars, header, fmts, columns, blockname, comments)
        raise StopIteration
    d = data.vardata.values()[0]
    if ismatrix(d):
        dimsnames = [x.name for x in d.dims[:-2]]
    else:
        dimsnames = [x.name for x in d.dims]
    dimsdata = [hfarray(data.ivardata[iname]) for iname in dimsnames]
    dimsidx = [range(x.shape[0]) for x in dimsdata]
    if first:
        if data.comments:
            comments = data.comments.copy()
            comments.property.clear()
        else:
            comments = Comments()
    else:
        comments = Comments()
    for enum, idx in enumerate(itertools.product(*dimsidx[1:])):
        sweepvars = []
        for iname, dim, i in zip(dimsnames[1:], dimsdata[1:], idx):
            fmt = getattr(dim, "outputformat", "%.16e")
            sweepvars.append((iname, fmt, dim[i]))
        if dimsnames:
            header = [dimsnames[0]] + data.vardata.keys()
            columns = dimsdata[:1] + [
                col[(slice(None), ) + idx] for col in data.vardata.values()
            ]
            fmts = [getattr(x, "outputformat", "%.16e") for x in columns]
        else:
            header = []
            columns = []
            fmts = []
            for k, v in data.vardata.items():
                if v.dims == tuple():
                    comments.property[k] = v

        if enum:
            comments = Comments()
        yield (sweepvars, header, fmts, columns, data.blockname, comments)
Exemple #31
0
    def test_wrong_version_1(self):
        ia = DimSweep("a", 1, unit="")
        d1 = DataBlock()
        d1.b = hfarray([2], dims=(ia, ))
        d2 = DataBlock()
        d2.b = hfarray([3], dims=(ia, ))
        fname = testpath / "testdata/hdf5/v02/savetest/res_1.hdf5"

        with hdf5context(fname, mode="w") as fil:
            save_hdf5_v01(d1, fil)
            self.assertRaises(Exception, append_hdf5, d2, fil)
#            append_hdf5(d2, fil)
        fname.unlink()
Exemple #32
0
 def test_11(self):
     ia = DimSweep("a", 1)
     d = DataBlock()
     d.comments = Comments(["Hej=10"])
     #        import pdb;pdb.set_trace()
     d.b = hfarray([u"kalle"], dims=(ia, ), unit="V")
     d.c = hfarray(u"kalle")
     fname = testpath / "testdata/hdf5/v02/savetest/res_11.hdf5"
     self.savefun[0](d, fname)
     d2 = readfun(fname)
     self.assertEqual(d2.b[0], u"kalle")
     self.assertEqual(d2.c, u"kalle")
     fname.unlink()
Exemple #33
0
    def test_4(self):
        d = DataBlock()
        fi = DimSweep("Freq", 3)
        gi = DimSweep("g", 4)
        d["Vds"] = hfarray([1, 2, 3], dims=(fi,))
        d["Id"] = hfarray([1, 2, 3, 4], dims=(gi,))
        d.guess_units(["Freq", "Vds", "Ig"])

        self.assertEqual(d.Vds.unit, "V")
        self.assertAllclose(d.Vds, [1, 2, 3])
        self.assertEqual(d.Id.unit, None)
        self.assertAllclose(d.Id, [1, 2, 3, 4])
        self.assertEqual(d.Freq.unit, "Hz")
Exemple #34
0
 def test_1(self):
     db = DataBlock()
     Sdims = (DimRep("freq", [1, 2]) ,DimRep("r", [1]), DimMatrix_i("i", 2), DimMatrix_j("j", 2))
     db.S = hfarray(np.array([[11, 12], [21, 22]])[np.newaxis, np.newaxis, :, :] * np.array([[10], [20]])[..., np.newaxis, np.newaxis], dims=Sdims)
     db.V = hfarray([1.23], Sdims[1:2])
     db.Y = hfarray([1.23], (DimRep("k", [1]),))
     out = dset.subset_datablock_by_dims(dset.convert_matrices_to_elements(db), Sdims[:-2])
     self.assertTrue("V" in out)
     self.assertTrue("S11" in out)
     self.assertTrue("S12" in out)
     self.assertTrue("S21" in out)
     self.assertTrue("S22" in out)
     self.assertFalse("Y" in out)
Exemple #35
0
    def test_4(self):
        d = DataBlock()
        fi = DimSweep("Freq", 3)
        gi = DimSweep("g", 4)
        d["Vds"] = hfarray([1, 2, 3], dims=(fi, ))
        d["Id"] = hfarray([1, 2, 3, 4], dims=(gi, ))
        d.guess_units(["Freq", "Vds", "Ig"])

        self.assertEqual(d.Vds.unit, "V")
        self.assertAllclose(d.Vds, [1, 2, 3])
        self.assertEqual(d.Id.unit, None)
        self.assertAllclose(d.Id, [1, 2, 3, 4])
        self.assertEqual(d.Freq.unit, "Hz")
Exemple #36
0
    def test_2(self):
        d = DataBlock()
        fi = DimSweep("Freq", 3, unit="m")
        gi = DimSweep("g", 4)
        d["Vds"] = hfarray([1, 2, 3], dims=(fi, ), unit="A")
        d["Id"] = hfarray([1, 2, 3, 4], dims=(gi, ), unit="V")
        d.guess_units()

        self.assertEqual(d.Vds.unit, "A")
        self.assertAllclose(d.Vds, [1, 2, 3])
        self.assertEqual(d.Id.unit, "V")
        self.assertAllclose(d.Id, [1, 2, 3, 4])
        self.assertEqual(d.Freq.unit, "m")
Exemple #37
0
    def test_2(self):
        d = DataBlock()
        fi = DimSweep("Freq", 3, unit="m")
        gi = DimSweep("g", 4)
        d["Vds"] = hfarray([1, 2, 3], dims=(fi,), unit="A")
        d["Id"] = hfarray([1, 2, 3, 4], dims=(gi,), unit="V")
        d.guess_units()

        self.assertEqual(d.Vds.unit, "A")
        self.assertAllclose(d.Vds, [1, 2, 3])
        self.assertEqual(d.Id.unit, "V")
        self.assertAllclose(d.Id, [1, 2, 3, 4])
        self.assertEqual(d.Freq.unit, "m")
Exemple #38
0
    def test_11(self):
        ia = DimSweep("a", 1)
        d = DataBlock()
        d.comments = Comments(["Hej=10"])
#        import pdb;pdb.set_trace()
        d.b = hfarray([u"kalle"], dims=(ia, ), unit="V")
        d.c = hfarray(u"kalle")
        fname = testpath / "testdata/hdf5/v02/savetest/res_11.hdf5"
        self.savefun[0](d, fname)
        d2 = readfun(fname)
        self.assertEqual(d2.b[0], u"kalle")
        self.assertEqual(d2.c, u"kalle")
        fname.unlink()
Exemple #39
0
    def test_wrong_version_2(self):
        ia = DimSweep("a", 1, unit="")
        d1 = DataBlock()
        d1.b = hfarray([2], dims=(ia,))
        d2 = DataBlock()
        d2.b = hfarray([3], dims=(ia,))
        fname = testpath / "testdata/hdf5/v02/savetest/res_1.hdf5"

        with hdf5context(fname, mode="w") as fil:
            save_hdf5_v01(d1, fil)
            self.assertRaises(Exception, append_hdf5, d2, fil)
#            append_hdf5(d2, fil)
        fname.unlink()
Exemple #40
0
 def setUp(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", 3)
     gi = DimSweep("g", 4)
     dims = (fi,)
     d["a"] = hfarray([3, 2, 1], dims=dims,
                         outputformat="%.5f", unit="V")
     d["b"] = hfarray([30, 10, 20], dims=dims,
                         outputformat="%.7f", unit="A")
     d["c"] = hfarray([30, 20, 10, 40], dims=(gi,),
                         outputformat="%.7f", unit="A")
     d["ac"] = d.a * d.c
     self.d = d
Exemple #41
0
def make_block_iterator(data, first=False):
    if not data.vardata:   # only x-values
        sweepvars = ()
        head = data.ivardata.keys()[0]
        dim = data.ivardata[head]

        header = [head, ]
        fmts = (data[head].outputformat,)
        columns = (hfarray(dim),)
        blockname = data.blockname
        comments = data.comments
        yield (sweepvars, header, fmts, columns,
               blockname, comments)
        raise StopIteration
    d = data.vardata.values()[0]
    if ismatrix(d):
        dimsnames = [x.name for x in d.dims[:-2]]
    else:
        dimsnames = [x.name for x in d.dims]
    dimsdata = [hfarray(data.ivardata[iname]) for iname in dimsnames]
    dimsidx = [range(x.shape[0]) for x in dimsdata]
    if first:
        if data.comments:
            comments = data.comments.copy()
            comments.property.clear()
        else:
            comments = Comments()
    else:
        comments = Comments()
    for enum, idx in enumerate(itertools.product(*dimsidx[1:])):
        sweepvars = []
        for iname, dim, i in zip(dimsnames[1:], dimsdata[1:], idx):
            fmt = getattr(dim, "outputformat", "%.16e")
            sweepvars.append((iname, fmt, dim[i]))
        if dimsnames:
            header = [dimsnames[0]] + data.vardata.keys()
            columns = dimsdata[:1] + [col[(slice(None), ) + idx]
                                      for col in data.vardata.values()]
            fmts = [getattr(x, "outputformat", "%.16e") for x in columns]
        else:
            header = []
            columns = []
            fmts = []
            for k, v in data.vardata.items():
                if v.dims == tuple():
                    comments.property[k] = v

        if enum:
            comments = Comments()
        yield (sweepvars, header, fmts, columns,
               data.blockname, comments)
Exemple #42
0
 def setUp(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", 3)
     gi = DimRep("g", 2)
     hi = DimRep("h", 3)
     ji = DimRep("j", 4)
     dims = (fi, )
     d["a"] = hfarray([3, 2, 1], dims=dims, outputformat="%.5f", unit="V")
     d["b"] = hfarray([30, 10], dims=(gi, ), outputformat="%.7f", unit="A")
     d["c"] = hfarray([[30, 20, 10, 40], [20, 30, 40, 10]],
                      dims=(gi, hi),
                      outputformat="%.7f",
                      unit="A")
     self.d = d
Exemple #43
0
 def setUp(self):
     d = DataBlock()
     gi = DimSweep("Index", 6)
     ri = DimRep("Rep", 2)
     dims = (gi,)
     d["a"] = hfarray([1, 1, 2, 2, 3, 3], dims=dims,
                         outputformat="%.5f", unit="V")
     d["b"] = hfarray([10, 20, 10, 20, 10, 20],
                         dims=(gi,), outputformat="%.7f", unit="A")
     d["c"] = hfarray([10.1, 20.1, 10.2, 20.2, 10.3, 20.3],
                         dims=(gi,), outputformat="%.7f", unit="A")
     d["d"] = hfarray([17, 19], dims=(ri,),
                         outputformat="%.7f", unit="A")
     self.d = d
Exemple #44
0
 def setUp(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", 3)
     gi = DimRep("g", 2)
     hi = DimRep("h", 3)
     ji = DimRep("j", 4)
     dims = (fi,)
     d["a"] = hfarray([3, 2, 1], dims=dims,
                         outputformat="%.5f", unit="V")
     d["b"] = hfarray([30, 10], dims=(gi,),
                         outputformat="%.7f", unit="A")
     d["c"] = hfarray([[30, 20, 10, 40], [20, 30, 40, 10]],
                         dims=(gi, hi), outputformat="%.7f", unit="A")
     self.d = d
Exemple #45
0
 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]))
Exemple #46
0
 def test_cant_append(self):
     i1 = DimSweep("a", 1, unit="s", outputformat="")
     i2 = DimSweep("INDEX", 2, unit="s")
     iexpand = DimRep("INDEX", 1, unit="s", outputformat="")
     d1 = DataBlock()
     d1.b = hfarray([2], dims=(i1, ), outputformat="")
     d1.c = hfarray(3)
     d2 = DataBlock()
     d2.b = hfarray([3], dims=(i1, ))
     fname = testpath / "testdata/hdf5/v02/savetest/res_1.hdf5"
     with hdf5context(fname, mode="w") as fil:
         savefun(d1, fil, expandable=True, expanddim=iexpand)
         self.assertRaises(ValueError, append_hdf5, d2, fil)
     fname.unlink()
Exemple #47
0
    def test_1(self):
        d = DataBlock()
        fi = DimSweep("Freq", 3)
        gi = DimSweep("g", 4)
        d["Vds"] = hfarray([1, 2, 3], dims=(fi,))
        d["Id"] = hfarray([1, 2, 3, 4], dims=(gi,))
        d.guess_units()
        d.values_from_property()

        self.assertEqual(d.Vds.unit, "V")
        self.assertAllclose(d.Vds, [1, 2, 3])
        self.assertEqual(d.Id.unit, "A")
        self.assertAllclose(d.Id, [1, 2, 3, 4])
        self.assertEqual(d.Freq.unit, "Hz")
Exemple #48
0
    def test_1(self):
        d = DataBlock()
        fi = DimSweep("Freq", 3)
        gi = DimSweep("g", 4)
        d["Vds"] = hfarray([1, 2, 3], dims=(fi, ))
        d["Id"] = hfarray([1, 2, 3, 4], dims=(gi, ))
        d.guess_units()
        d.values_from_property()

        self.assertEqual(d.Vds.unit, "V")
        self.assertAllclose(d.Vds, [1, 2, 3])
        self.assertEqual(d.Id.unit, "A")
        self.assertAllclose(d.Id, [1, 2, 3, 4])
        self.assertEqual(d.Freq.unit, "Hz")
Exemple #49
0
 def test_cant_append(self):
     i1 = DimSweep("a", 1, unit="s", outputformat="")
     i2 = DimSweep("INDEX", 2, unit="s")
     iexpand = DimRep("INDEX", 1, unit="s", outputformat="")
     d1 = DataBlock()
     d1.b = hfarray([2], dims=(i1,), outputformat="")
     d1.c = hfarray(3)
     d2 = DataBlock()
     d2.b = hfarray([3], dims=(i1,))
     fname = testpath / "testdata/hdf5/v02/savetest/res_1.hdf5"
     with hdf5context(fname, mode="w") as fil:
         savefun(d1, fil, expandable=True, expanddim=iexpand)
         self.assertRaises(ValueError, append_hdf5, d2, fil)
     fname.unlink()
Exemple #50
0
 def test_1(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", 3)
     gi = DimSweep("P[W]", 3)
     dims = (fi, )
     dims2 = (fi, gi)
     d["f"] = hfarray([[1, 2, 3]] * 3, dims=dims2, outputformat="%.5f")
     d["P"] = hfarray([10, 20, 30], dims=dims, outputformat="%.7f")
     self.assertEqual(d["f"].outputformat, "%.5f")
     self.assertEqual(d["P"].outputformat, "%.7f")
     d.outputformat = "%.9f"
     for v in d.ivardata.values():
         self.assertEqual(v.outputformat, "%.9f")
     for v in d.vardata.values():
         self.assertEqual(v.outputformat, "%.9f")
Exemple #51
0
def build_meas_state(data):
    state_names = data["measstate"][0, 0]["props"][0, 0][0]
    state_data = data["measstate"][0, 0]["values"][0, 0][0]
    d = DataBlock()
    for k, v in zip(state_names, state_data):
        if k[0] == "Index":
            d["Index"] = DimPartial("Index", v[0])
        else:
            if v[0].ndim == 1:
                d[k[0]] = hfarray(make_real(v[0][0]))
            else:
                d[k[0]] = hfarray(make_real(v[0]))
        if d[k[0]].dtype.name.startswith("unicode"):
            d[k[0]] = hfarray(np.char.encode(d[k[0]], "cp1252", errors="replace"), dims=d[k[0]].dims)
    return d
Exemple #52
0
 def test_1(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", 3)
     gi = DimSweep("P[W]", 3)
     dims = (fi,)
     dims2 = (fi, gi)
     d["f"] = hfarray([[1, 2, 3]] * 3, dims=dims2, outputformat="%.5f")
     d["P"] = hfarray([10, 20, 30], dims=dims, outputformat="%.7f")
     self.assertEqual(d["f"].outputformat, "%.5f")
     self.assertEqual(d["P"].outputformat, "%.7f")
     d.outputformat = "%.9f"
     for v in d.ivardata.values():
         self.assertEqual(v.outputformat, "%.9f")
     for v in d.vardata.values():
         self.assertEqual(v.outputformat, "%.9f")
Exemple #53
0
 def test_intersection_1(self):
     d = DataBlock()
     fi = DimSweep("Freq[Hz]", [10, 20, 30, 40, 50])
     gi = DimSweep("g", 4)
     dims = (fi, gi)
     d["a"] = hfarray([[1, 2, 3, 4]] * 5, dims=dims,
                         outputformat="%.5f", unit="V")
     x = DimSweep("Freq", [20, 40])
     reset_hftools_warnings()
     self.assertHFToolsWarning(d.filter, hfarray(x))
     with warnings.catch_warnings() as log:
         warnings.resetwarnings()
         warnings.simplefilter("ignore", HFToolsWarning)
         d.filter(hfarray(x))
     reset_hftools_warnings()
Exemple #54
0
    def setUp(self):
        self.I = I = DimSweep("I", [1, 2])
        self.J = J = DimSweep("J", [10, 20, 30])
        self.K = K = DimSweep("K", [100, 200, 300, 400])
        self.mi = mi = DimMatrix_i("i", [0, 1])
        self.mj = mj = DimMatrix_j("j", [0, 1])
        self.i, self.j, self.k = (i, j, k) = list(map(hfarray, (I, J, K)))

        self.a = i * j * k
        self.b = hfarray(i * j * k, unit="Hz", outputformat="%.3f")
        cdims = (DimMatrix_i("i", 2), DimMatrix_j("j", 2))
        self.c = hfarray([[11, 12], [21, 22]], dims=cdims)

        self.m = hfarray([[[1., 2], [3, 4]]] * 3, dims=(J, mi, mj))
        self.m2 = hfarray([[1., 2], [3, 4]], dims=(mi, mj))
Exemple #55
0
def fmt_mdif_block(dims, db):
    dimnames = [x.name for x in dims]
    fmts = [x.outputformat for x in dims]
    for coord in itertools.product(*[x.data for x in dims[1:]]):
        for iname, fmt, value in zip(dimnames[1:], fmts[1:], coord):
            #            import pdb;pdb.set_trace()
            yield [("VAR SWEEP.%s(real) = " + fmt) % (iname, value)]
        blockname = db.blockname
        if blockname is None:
            blockname = "DATABLOCK"
        yield ["BEGIN %s" % blockname]

        attribnames, attribdata = zip(*[(k, v) for (k, v) in db.vardata.items() if v.dims == dims[1:]])
        attribheader = format_complex_header(attribnames, attribdata, "%s(real)", "%s(complex)", None, unit_fmt=False)
        for name, data in zip(attribheader, attribdata):
            yield [("# %s = %s" % (name, data.outputformat)) % data[coord]]

        header, columns = zip(*[(k, v) for (k, v) in db.vardata.items() if v.dims == dims])
        header = (dims[0].name,) + header

        idx = (Ellipsis,) + coord
        columns = [col[idx] for col in columns]
        columns = [hfarray(dims[0])] + columns
        outheader = format_complex_header(header, columns, "%s(real)", "%s(complex)", None, unit_fmt=False)

        yield ["% " + " ".join(outheader)]
        fmts = [x.outputformat for x in columns]
        #        import pdb;pdb.set_trace()
        for row in zip(*columns):
            out = []
            for elem, fmt in zip(row, fmts):
                out.extend(format_elem(fmt, elem))
            yield out
        yield ["END"]
Exemple #56
0
def solve_Ab(A, b, squeeze=True):
    AA, bb = make_same_dims(A, b)
    x = np.linalg.solve(AA, bb)
    result = hfarray(x, dims=bb.dims)
    if squeeze:
        result = result.squeeze()
    return result
Exemple #57
0
def check_passive(S):
    eig = np.linalg.eigvals
    out = []
    for s in S:
        lambda_max = max(abs(eig(s)))
        out.append(lambda_max)
    return hfarray(out, dims=S.dims[:1])
Exemple #58
0
 def test_8(self):
     d = DataBlock()
     d.b = hfarray([2], dims=(DimSweep("a", 1), ))
     fname = testpath / "testdata/hdf5/v02/savetest/res_8.hdf5"
     with h5py.File(fname, mode="w") as fil:
         self.savefun[0](d, fil)
     fname.unlink()