Exemplo n.º 1
0
    def make_matrices(self, db, header):
        matrices, vectors, scalars = match_matrix_names(header)
        for matrix, value in matrices.items():
            a = [(i, j) for x, i, j, y in value]
            a.sort()
            arrays = []
            for i, j in a:
                vname = "%s[%s,%s]" % (matrix, i, j)
                arrays.append(np.array(db.vardata[vname])[:, np.newaxis])
            dims = db.vardata["%s[%s,%s]" % (matrix, i, j)].dims
            X = np.concatenate(arrays, 1)
            I, J = map(set, zip(*a))
            X.shape = X.shape[:1] + (len(I), len(J))
            db.vardata[matrix] = make_matrix(X, dims)
            idx = min([db.vardata.order.index("%s[%s,%s]" % (matrix, i, j)) for i, j in a])
            for i, j in a:
                del db.vardata["%s[%s,%s]" % (matrix, i, j)]
            del db.vardata.order[db.vardata.order.index(matrix)]
            db.vardata.order.insert(idx, matrix)

        for matrix, value in vectors.items():
            a = [(i,) for x, i, y in value]
            a.sort()
            fmt = "%s[%%s]" % (matrix,)
            arrays = [np.array(db.vardata[fmt % i])[:, np.newaxis] for i, in a]
            dims = db.vardata["%s[%s]" % (matrix, i)].dims
            X = np.concatenate(arrays, 1)
            X.shape = X.shape[:1] + (len(a),)
            db.vardata[matrix] = make_vector(X, dims)
            idx = min([db.vardata.order.index("%s[%s]" % (matrix, i)) for i, in a])
            for (i,) in a:
                del db.vardata["%s[%s]" % (matrix, i)]
            del db.vardata.order[db.vardata.order.index(matrix)]
            db.vardata.order.insert(idx, matrix)
Exemplo n.º 2
0
def combine_elements_to_matrix(data, name):
    reg = re.compile("%s([0-9])([0-9])" % name)
    i_idx = set()
    j_idx = set()
    vnames = []
    for v in data.vardata:
        res = reg.match(v)
        if res:
            i_idx.add(int(res.groups()[0]))
            j_idx.add(int(res.groups()[1]))
            vnames.append(v)
    if vnames and len(i_idx) * len(j_idx) == len(vnames):
        i_indices = sorted(i_idx)
        j_indices = sorted(j_idx)
        ex = data["%s%d%d" % (name, list(i_idx)[0], list(j_idx)[0])]
        shape = ex.shape
        x = np.empty(shape + (
            len(i_indices),
            len(j_indices),
        ),
                     dtype=ex.dtype)

        for i, j in itertools.product(i_indices, j_indices):
            val = data["%s%d%d" % (name, i, j)]
            x[..., i_indices.index(i), j_indices.index(j), ] = val

    else:
        msg = "Can not build complete matrix using elements with name %r"
        raise Exception(msg % name)

    data[name] = make_matrix(np.array(x), dims=ex.dims)
    return data
Exemplo n.º 3
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
Exemplo n.º 4
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
Exemplo n.º 5
0
def build_data(data):
    out = build_meas_state(data)
    for k, v in build_measmnt(data).items():
        out[k] = hfarray(v)

    data = data["data"][0, 0]
    type = data["type"][0, 0][0]
    Z0 = float(data["reference"][0, 0][0][0])
    freq = DimSweep("freq", data["freq"][0, 0][:, 0], unit="Hz")
    arraydata = data["data"][0, 0][0]["mtrx"][0].transpose((2, 0, 1))
    if arraydata.dtype.name.startswith("unicode"):
        arraydata = np.char.encode(arraydata, "cp1252", errors="replace")
    if np.isrealobj(arraydata):
        arraydata = array(arraydata, np.float64)
    S = make_matrix(arraydata, (freq, ))
    Scov = data["datacov"][0, 0]
    out[type] = S
    out["Z0"] = hfarray(Z0)
    if "Date" in out:
        try:
            out["Date"] = hfarray(
                array(datetime.datetime.strptime(out["Date"].flatten()[0],
                                                 "%d-%b-%Y %H:%M:%S"),
                      dtype="M8[us]"))
        except ValueError:
            pass
    if Scov.size:
        Scov = make_matrix(Scov[0]["mtrx"][0].transpose((2, 0, 1)), (freq, ))
        out["%scov" % type] = Scov

    for k, v in out.vardata.items():
        if k in ["V1", "V2", "V1_SET", "V2_SET"]:
            v.unit = "V"

    for k, v in out.vardata.items():
        if k in ["I1", "I2", "I1_SET", "I2_SET"]:
            v.unit = "A"

    for k, v in out.vardata.items():
        if k in ["Z0"]:
            v.unit = "Ohm"
    return out
Exemplo n.º 6
0
def build_data(data):
    out = build_meas_state(data)
    for k, v in build_measmnt(data).items():
        out[k] = hfarray(v)

    data = data["data"][0, 0]
    type = data["type"][0, 0][0]
    Z0 = float(data["reference"][0, 0][0][0])
    freq = DimSweep("freq", data["freq"][0, 0][:, 0], unit="Hz")
    arraydata = data["data"][0, 0][0]["mtrx"][0].transpose((2,0,1))
    if arraydata.dtype.name.startswith("unicode"):
        arraydata = np.char.encode(arraydata, "cp1252", errors="replace")
    if np.isrealobj(arraydata):
        arraydata = array(arraydata, np.float64)
    S = make_matrix(arraydata, (freq,))
    Scov = data["datacov"][0, 0]
    out[type] = S
    out["Z0"] = hfarray(Z0)
    if "Date" in out:
        try:
            out["Date"] = hfarray(array(datetime.datetime.strptime(out["Date"].flatten()[0], "%d-%b-%Y %H:%M:%S"), dtype="M8[us]"))
        except ValueError:
            pass
    if Scov.size:
        Scov = make_matrix(Scov[0]["mtrx"][0].transpose((2,0,1)), (freq,))
        out["%scov"%type] = Scov

    for k,v in out.vardata.items():
        if k in ["V1", "V2", "V1_SET", "V2_SET"]:
            v.unit = "V"

    for k,v in out.vardata.items():
        if k in ["I1", "I2", "I1_SET", "I2_SET"]:
            v.unit = "A"

    for k,v in out.vardata.items():
        if k in ["Z0"]:
            v.unit = "Ohm"
    return out
Exemplo n.º 7
0
 def _make_matrix_from_block(self, block):
     matrices = {}
     for matcher in self.match_matrix_element_name:
         matrices.update(
             match_matrix_elements(block.vardata.keys(), matcher))
     for vname, (elems, i_indices, j_indices) in matrices.items():
         ex = block[elems[0]]
         shape = ex.shape
         x = np.empty(shape + (len(i_indices) * len(j_indices), ),
                      dtype=ex.dtype)
         for idx, elem in enumerate(elems):
             x[..., idx] = block[elem]
             del block[elem]
         x.shape = shape + (
             len(i_indices),
             len(j_indices),
         )
         block[vname] = make_matrix(x, dims=ex.dims)
Exemplo n.º 8
0
    def make_matrices(self, db, header):
        matrices, vectors, scalars = match_matrix_names(header)
        for matrix, value in matrices.items():
            a = [(i, j) for x, i, j, y in value]
            a.sort()
            arrays = []
            for i, j in a:
                vname = "%s[%s,%s]" % (matrix, i, j)
                arrays.append(np.array(db.vardata[vname])[:, np.newaxis])
            dims = db.vardata["%s[%s,%s]" % (matrix, i, j)].dims
            X = np.concatenate(arrays, 1)
            I, J = map(set, zip(*a))
            X.shape = X.shape[:1] + (len(I), len(J))
            db.vardata[matrix] = make_matrix(X, dims)
            idx = min([
                db.vardata.order.index("%s[%s,%s]" % (matrix, i, j))
                for i, j in a
            ])
            for i, j in a:
                del db.vardata["%s[%s,%s]" % (matrix, i, j)]
            del db.vardata.order[db.vardata.order.index(matrix)]
            db.vardata.order.insert(idx, matrix)

        for matrix, value in vectors.items():
            a = [(i, ) for x, i, y in value]
            a.sort()
            fmt = "%s[%%s]" % (matrix, )
            arrays = [np.array(db.vardata[fmt % i])[:, np.newaxis] for i, in a]
            dims = db.vardata["%s[%s]" % (matrix, i)].dims
            X = np.concatenate(arrays, 1)
            X.shape = X.shape[:1] + (len(a), )
            db.vardata[matrix] = make_vector(X, dims)
            idx = min(
                [db.vardata.order.index("%s[%s]" % (matrix, i)) for i, in a])
            for i, in a:
                del db.vardata["%s[%s]" % (matrix, i)]
            del db.vardata.order[db.vardata.order.index(matrix)]
            db.vardata.order.insert(idx, matrix)