Пример #1
0
def test_typeclass_ndim_v03():
    objects = [
        C.Histogram(np.arange(6), np.arange(5)),
        C.Points(np.arange(5)),
        C.Histogram2d(np.arange(6), np.arange(7)),
        C.Points(np.arange(12).reshape(3, 4))
    ]
    outputs = [p.single() for p in objects]

    obj = C.DummyType()
    list(map(obj.add_input, outputs))

    dt = R.TypeClasses.CheckNdimT(context.current_precision())(1, (0, 1))
    R.SetOwnership(dt, False)
    dt.dump()
    print()
    obj.add_typeclass(dt)
    res = obj.process_types()
    assert res

    dt1 = R.TypeClasses.CheckNdimT(context.current_precision())(2, (-2, -1))
    R.SetOwnership(dt1, False)
    dt1.dump()
    print()
    obj.add_typeclass(dt1)
    res = obj.process_types()
    assert res
Пример #2
0
def test_typeclass_passtype():
    """Last input has another edges"""
    objects = [
            C.Histogram2d(np.arange(4), np.arange(5)),
            C.Histogram(np.arange(4)),
            C.Points(np.arange(12).reshape(3,4))
            ]
    outputs = [p.single() for p in objects]

    obj = C.DummyType()
    k = list(map(obj.add_input, outputs))
    for i in range(5):
        obj.add_output()

    dt1 = R.TypeClasses.PassTypeT(context.current_precision())((0,), (0,1))
    dt2 = R.TypeClasses.PassTypeT(context.current_precision())((1,), (2,-1))
    R.SetOwnership(dt1, False)
    R.SetOwnership(dt2, False)
    dt1.dump(); print()
    dt2.dump(); print()
    obj.add_typeclass(dt1)
    obj.add_typeclass(dt2)
    res = obj.process_types();
    assert res

    obj.print()
    dta = outputs[0].datatype()
    dtb = outputs[1].datatype()

    doutputs = obj.transformations.back().outputs
    assert doutputs[0].datatype()==dta
    assert doutputs[1].datatype()==dta
    assert doutputs[2].datatype()==dtb
    assert doutputs[3].datatype()==dtb
    assert doutputs[4].datatype()==dtb
Пример #3
0
def test_typeclass_kind_v01():
    objects = [
        C.Histogram(np.arange(6), np.arange(5)),
        C.Histogram2d(np.arange(6), np.arange(7))
    ]
    outputs = [p.single() for p in objects]

    obj = C.DummyType()
    list(map(obj.add_input, outputs))

    dt_points = R.TypeClasses.CheckKindT(context.current_precision())(1)
    R.SetOwnership(dt_points, False)
    dt_points.dump()
    print()

    dt_hist = R.TypeClasses.CheckKindT(context.current_precision())(2)
    R.SetOwnership(dt_hist, False)
    dt_hist.dump()
    print()

    obj.add_typeclass(dt_hist)
    res = obj.process_types()
    assert res

    obj.add_typeclass(dt_points)
    print('Exception expected: ', end='')
    res = obj.process_types()
    assert not res
Пример #4
0
def test_typeclass_same_v02():
    """Last input has another shape"""
    arrays = [np.arange(12, dtype='d').reshape(3,4) for i in range(5)]
    arrays[-1]=arrays[-1].reshape(4,3)
    points = [C.Points(a) for a in arrays]
    outputs = [p.points.points for p in points]
    print(outputs)

    obj = C.DummyType()
    list(map(obj.add_input, outputs))

    dt = R.TypeClasses.CheckSameTypesT(context.current_precision())((1,-2))
    R.SetOwnership(dt, False)
    dt.dump(); print()
    obj.add_typeclass(dt)
    res = obj.process_types();
    assert res

    dt1 = R.TypeClasses.CheckSameTypesT(context.current_precision())((-2,-1))
    R.SetOwnership(dt1, False)
    dt1.dump(); print()
    obj.add_typeclass(dt1)
    print('Exception expected: ',end='')
    res = obj.process_types();
    assert not res
Пример #5
0
def Dummy(shape, name, varnames=None, *args, **kwargs):
    if varnames:
        return R.GNA.GNAObjectTemplates.DummyT(context.current_precision())(
            shape, name, stdvector(varnames), *args, **kwargs)

    return R.GNA.GNAObjectTemplates.DummyT(context.current_precision())(
        shape, name, *args, **kwargs)
Пример #6
0
def Identity(outputs=None, **kwargs):
    if outputs is None:
        return R.GNA.GNAObjectTemplates.IdentityT(
            context.current_precision())(**kwargs)

    return R.GNA.GNAObjectTemplates.IdentityT(context.current_precision())(
        OutputDescriptors(outputs), **kwargs)
Пример #7
0
def get_cpp_type( array ):
    """Guess appropriate C++ type to store data based on array.dtype or type"""
    if len(array)==0:
        raise Exception('Unable to determine type of the elements of the empty array')
    if hasattr( array, 'dtype' ):
        typemap = {
                'int32':   'int',
                'float64': 'double',
                'float32': 'float',
                # 'uint64':  'size_t',
                }
        atype = array.dtype.name
    else:
        typemap = {
                int: 'int',
                float: context.current_precision(),
                str: 'std::string',
                'int': 'int',
                'float': context.current_precision(),
                'str': 'std::string',
                'variable<double>': 'variable<double>',
                'variable<float>': 'variable<float>',
                }
        atype = type( array[0] ).__name__
    ret = typemap.get( atype )
    if not ret:
        raise Exception( 'Do not know how to convert type '+str(atype) )
    return ret
Пример #8
0
def test_arrayview_allocation():
    nitems, ndata = 6, 15
    allocator = R.arrayviewAllocatorSimple(context.current_precision())(ndata)

    arrays = []
    for i in range(1, nitems):
        array = R.arrayview(context.current_precision())(i, allocator)
        for j in range(i):
            array[j] = j
        print(i, array.view())
        arrays.append(array)

    print('Arrays:', [array.view() for array in arrays])
    print('Data (filled):', allocator.view())
    print('Data (all):', allocator.viewall())
Пример #9
0
def test_typeclass_passeach_02():
    """Pass with step 2"""
    objects = [
            C.Histogram2d(np.arange(4), np.arange(5)),
            C.Histogram(np.arange(4)),
            C.Points(np.arange(20).reshape(4,5))
            ]
    outputs = [p.single() for p in objects]

    obj = C.DummyType()
    i = list(map(obj.add_input, outputs))
    i1 = list(map(obj.add_input, outputs))
    for i in range(3):
        obj.add_output()

    dt1 = R.TypeClasses.PassEachTypeT(context.current_precision())((0,-1,2), (0,-1))
    R.SetOwnership(dt1, False)
    dt1.dump(); print()
    obj.add_typeclass(dt1)
    res = obj.process_types();
    assert res

    obj.print()
    dta = outputs[0].datatype()
    dtb = outputs[1].datatype()
    dtc = outputs[2].datatype()

    doutputs = obj.transformations.back().outputs
    assert doutputs[0].datatype()==dta
    assert doutputs[1].datatype()==dtc
    assert doutputs[2].datatype()==dtb
Пример #10
0
def test_variable_allocation(function_name):
    from gna.env import env
    ns = env.globalns(function_name)
    ndata = 10
    allocator = R.arrayviewAllocatorSimple(context.current_precision())(ndata)

    with context.allocator(allocator):
        ns.defparameter('float1',
                        central=1,
                        fixed=True,
                        label='Float variable 1')
        ns.defparameter('float2',
                        central=2,
                        fixed=True,
                        label='Float variable 2')
        ns.defparameter('angle',
                        central=3,
                        label='Angle parameter',
                        type='uniformangle')
        ns.defparameter('discrete',
                        default='a',
                        label='Discrete parameter',
                        type='discrete',
                        variants=OrderedDict([('a', 10.0), ('b', 20.0),
                                              ('c', 30.0)]))

    ns.printparameters(labels=True)

    print('Data (filled):', allocator.view())
    print('Data (all):', allocator.viewall())
Пример #11
0
def test_arrayview_complex():
    a1 = R.arrayview(context.current_precision())(2)
    a1[0] = 2
    a1[1] = 3
    c1 = a1.complex()
    assert c1.real == 2.0
    assert c1.imag == 3.0
Пример #12
0
def Product(outputs=None, **kwargs):
    if outputs is None:
        args = ()
    else:
        args = OutputDescriptors(outputs),

    return R.GNA.GNAObjectTemplates.ProductT(context.current_precision())(
        *args, **kwargs)
Пример #13
0
def test_arrayview_vector():
    size = 5
    from gna.constructors import stdvector
    a1 = N.arange(size, dtype=context.current_precision_short())
    v1 = stdvector(a1)
    view1 = R.arrayview(context.current_precision())(a1, size)

    assert view1 == v1
    assert not view1 != v1
Пример #14
0
def test_arrayview_constructor():
    size = 5
    import ctypes
    san_size = ctypes.c_int(5)
    a = N.arange(size, dtype=context.current_precision_short())
    print("in failing test! Precision is {}".format(
        context.current_precision()))
    view = R.arrayview[context.current_precision()](size)

    assert view.size() == size
    assert view.isOwner()

    for i, v in enumerate(a):
        view[i] = v

    vview = view.view()
    print('C++', vview)

    assert (a == vview).all()
Пример #15
0
def WeightedSumSq(weights, inputs=None, *args, **kwargs):
    weights = stdvector(weights)
    if inputs is None:
        inputs = weights
    elif isinstance(inputs[0], str):
        inputs = stdvector(inputs)
    else:
        inputs = OutputDescriptors(inputs)

    return R.GNA.GNAObjectTemplates.WeightedSumSqT(
        context.current_precision())(weights, inputs, *args, **kwargs)
Пример #16
0
def test_arrayview_comparison():
    size = 5
    a1 = N.arange(size, dtype=context.current_precision_short())
    a2 = N.ascontiguousarray(a1[::-1])
    a3 = N.arange(size + 1, dtype=context.current_precision_short())
    view1a = R.arrayview(context.current_precision())(a1, a1.size)
    view1b = R.arrayview(context.current_precision())(a1, a1.size)
    view2 = R.arrayview(context.current_precision())(a2, a2.size)
    view3 = R.arrayview(context.current_precision())(a3, a3.size)

    assert view1a == view1b
    assert not view1a != view1b
    assert view1a != view2
    assert not view1a == view2
    assert view1a != view3
    assert not view1a == view3

    view4 = R.arrayview(context.current_precision())(view3.size())
    view4 = view3
    assert view3 == view4
    assert not view3 != view4

    view5 = R.arrayview(context.current_precision())(view3)
    assert view3 == view5
    assert not view3 != view5
Пример #17
0
def test_vararray_preallocated_v01(function_name):
    ns = env.globalns(function_name)

    names = ['zero', 'one', 'two', 'three', 'four', 'five']
    values = N.arange(len(names), dtype=context.current_precision_short())
    variables = R.vector('variable<%s>' % context.current_precision())()

    with context.allocator(100) as allocator:
        for name, value in zip(names, values):
            par = ns.defparameter(name, central=value, relsigma=0.1)
            variables.push_back(par.getVariable())

        with ns:
            vsum = C.VarSum(names, 'sum', ns=ns)
            vsum_var = ns['sum'].get()
            variables.push_back(vsum_var.getVariable())
            vprod = C.VarProduct(names, 'product', ns=ns)
            vprod_var = ns['product'].get()
            variables.push_back(vprod_var.getVariable())

        va = C.VarArrayPreallocated(variables)

    pool = allocator.view()
    res = va.vararray.points.data()

    values_all = N.zeros(shape=values.size + 2, dtype=values.dtype)
    values_all[:-2] = values
    values_all[-2] = values_all[:-2].sum()
    values_all[-1] = values_all[:-2].prod()

    print('Python array:', values_all)
    print('VarArray (preallocated):', res)
    print('Pool:', pool)

    assert (values_all == res).all()
    assert (values_all == pool).all()
    assert (res == pool).all()

    for i, (val, name) in enumerate(enumerate(names, 2)):
        ns[name].set(val)
        values_all[i] = val
        values_all[-2] = values_all[:-2].sum()
        values_all[-1] = values_all[:-2].prod()
        res = va.vararray.points.data()

        print('Iteration', i)
        print('    Python array:', values_all)
        print('    VarArray (preallocated):', res)

        assert (values_all == res).all()
        assert (values_all == pool).all()
        assert (res == pool).all()
Пример #18
0
def test_arrayview_constructor_view():
    a = N.arange(5, dtype=context.current_precision_short())
    view = R.arrayview(context.current_precision())(a, a.size)

    assert view.size() == a.size
    assert not view.isOwner()

    vview = view.view()
    print('Python/C++', a, vview)

    assert (a == vview).all()
    assert view == view
    assert not view != view
Пример #19
0
def test_typeclass_same_v04():
    """Last input has another edges"""
    objects=[C.Histogram2d(np.arange(4), np.arange(5)) for i in range(5)]
    objects.append(C.Histogram2d(np.arange(1,5), np.arange(5)))
    outputs = [p.single() for p in objects]

    obj = C.DummyType()
    list(map(obj.add_input, outputs))

    dt = R.TypeClasses.CheckSameTypesT(context.current_precision())((1,-1), 'shape')
    R.SetOwnership(dt, False)
    dt.dump(); print()
    obj.add_typeclass(dt)
    res = obj.process_types();
    assert res

    dt1 = R.TypeClasses.CheckSameTypesT(context.current_precision())((1,-1),)
    R.SetOwnership(dt1, False)
    dt1.dump(); print()
    obj.add_typeclass(dt1)
    print('Exception expected: ',end='')
    res = obj.process_types();
    assert not res
Пример #20
0
def test_typeclass_same_v01():
    """All inputs have same types"""
    arrays = [np.arange(12, dtype='d').reshape(3,4) for i in range(5)]
    points = [C.Points(a) for a in arrays]
    outputs = [p.points.points for p in points]

    obj = C.DummyType()
    list(map(obj.add_input, outputs))

    dt = R.TypeClasses.CheckSameTypesT(context.current_precision())((0,-1))
    R.SetOwnership(dt, False)
    dt.dump(); print()
    obj.add_typeclass(dt)
    res = obj.process_types();
    assert res
Пример #21
0
def OscProb3(*args, **kwargs):
    """OscProb3 wrapper

    Aguments:
       Neutrino from,
       Neutrino to,
       std::string l_name="L",
       bool modecos=true,
       std::vector<std::string> dmnames={}
    """
    if len(args) >= 5:
        args = list(args)
        args[4] = stdvector(args[4])

    return R.GNA.GNAObjectTemplates.OscProb3T(context.current_precision())(
        *args, **kwargs)
Пример #22
0
def test_typeclass_setpoints_v01():
    sizes = (1, 2, 3)

    for size in sizes:
        obj = C.DummyType()
        obj.add_output('out')

        dt = R.TypeClasses.SetPointsT(context.current_precision())(size)
        R.SetOwnership(dt, False)
        dt.dump(); print()
        obj.add_typeclass(dt)
        res = obj.process_types();
        assert res

        dtype = obj.dummytype.out.datatype()
        assert dtype.kind==1
        assert dtype.shape.size()==1
        assert dtype.shape[0]==size
Пример #23
0
def Points(array, *args, **kwargs):
    """Convert array/TH1/TH2 to Points"""

    if isinstance(array, R.TObject):
        if not hasattr(array, 'get_buffer'):
            raise Exception(
                'Only TH1D/TH2D/TH1F/TH2F/TMatrixD/TMatrixF may be converted to Points'
            )

        if isinstance(array, R.TH2):
            array = array.get_buffer().T
        else:
            array = array.get_buffer()

    array = np.ascontiguousarray(array,
                                 dtype=context.current_precision_short())
    if len(array.shape) > 2:
        raise Exception('Can convert only 1- and 2- dimensional arrays')
    s = array_to_stdvector_size_t(array.shape)
    return R.GNA.GNAObjectTemplates.PointsT(context.current_precision())(
        array.ravel(order='F'), s, *args, **kwargs)
Пример #24
0
def test_vararray_v02(function_name):
    ns = env.globalns(function_name)

    names = ['zero', 'one', 'two', 'three', 'four', 'five']
    values = N.arange(len(names), dtype=context.current_precision_short())
    variables = R.vector('variable<%s>' % context.current_precision())()
    for name, value in zip(names, values):
        par = ns.defparameter(name, central=value, relsigma=0.1)
        variables.push_back(par.getVariable())

    va = C.VarArray(variables)

    res = va.vararray.points.data()

    print('Python array:', values)
    print('Array:', res)

    assert N.allclose(values, res)

    for i, (val, name) in enumerate(enumerate(names, 2)):
        ns[name].set(val)
        values[i] = val
        res = va.vararray.points.data()
        assert N.allclose(values, res)
Пример #25
0
def OutputDescriptors(outputs):
    descriptors = []
    odescr = R.OutputDescriptorT(context.current_precision(),
                                 context.current_precision())
    ohandle = R.TransformationTypes.OutputHandleT(context.current_precision())
    singleoutput = R.SingleOutputT(context.current_precision())
    for output in outputs:
        if isinstance(output, odescr):
            append = output
        elif isinstance(output, ohandle):
            append = odescr(output)
        elif isinstance(output, singleoutput):
            append = odescr(output.single())
        else:
            raise Exception('Expect OutputHandle or SingleOutput object')
        descriptors.append(append)

    return stdvector(
        descriptors, 'OutputDescriptorT<%s,%s>' %
        (context.current_precision(), context.current_precision()))
Пример #26
0
def PolyRatio(nominator=[], denominator=[], *args, **kwargs):
    nominator = stdvector(nominator, 'string')
    denominator = stdvector(denominator, 'string')
    return R.GNA.GNAObjectTemplates.PolyRatioT(context.current_precision())(
        nominator, denominator, *args, **kwargs)
Пример #27
0
 def newfcn(*args, **kwargs):
     template = getattr(R, classname)
     return template(context.current_precision())(*args, **kwargs)
Пример #28
0
def VarArray(vars, *args, **kwargs):
    cls = R.GNA.GNAObjectTemplates.VarArrayT(context.current_precision())
    ret = cls(stdvector(vars), *args, **kwargs)
    ret.transformations.front().updateTypes()
    return ret
Пример #29
0
def VarArrayPreallocated(vars, *args, **kwargs):
    cls = R.GNA.GNAObjectTemplates.VarArrayPreallocatedT(
        context.current_precision())
    ret = cls(stdvector(vars), *args, **kwargs)
    return ret
Пример #30
0
def VarProduct(varnames, *args, **kwargs):
    return R.GNA.GNAObjectTemplates.VarProductT(context.current_precision())(
        stdvector(varnames), *args, **kwargs)