Пример #1
0
def get_samples(request, ndp):
    xaxis = str(request.params['xaxis'])
    # yaxis = str(request.params['yaxis'])
    xmin = request.params['xmin'].encode('utf-8')
    xmax = request.params['xmax'].encode('utf-8')
    nsamples = int(request.params['nsamples'])

    fnames = ndp.get_fnames()
    rnames = ndp.get_rnames()


    # must pass the other functions as parameters
    f = {}
    for fn in fnames:
        if fn == xaxis: continue
        if not fn in request.params:
            msg = 'You have to pass the value of function %r.' % fn
            raise_desc(ValueError, msg, rnames=rnames)

        s = request.params[fn]
        try:
            val = parse_constant(s)
        except DPSyntaxError as e:
            msg = 'Cannot parse value for %r.' % fn
            raise_wrapped(ValueError, e, msg, compact=True)

        F = ndp.get_ftype(fn)
        f[fn] = express_value_in_isomorphic_space(val.unit, val.value, F)

    F = ndp.get_ftype(xaxis)
    try:
        xmin = parse_constant(xmin)
        xmax = parse_constant(xmax)
    except DPSyntaxError as e:
        msg = 'Cannot parse value for xmax/xmin.'
        raise_wrapped(ValueError, e, msg, compact=True)

    xmin = express_value_in_isomorphic_space(xmin.unit, xmin.value, F)
    xmax = express_value_in_isomorphic_space(xmax.unit, xmax.value, F)


    import numpy as np
    xsamples = np.linspace(xmin, xmax, nsamples)
    samples = []
    for xsample in xsamples:
        t = []
        for fn in fnames:
            if fn == xaxis:
                t.append(xsample)
            else:
                t.append(f[fn])
        sample = tuple(t)
        if len(fnames) == 1:
            sample = sample[0]

        samples.append(sample)

    return samples
Пример #2
0
def units_pixels():
    # so 'pi' is forbidden as a keyword
    assert_raises(DPSyntaxError, parse_wrap, Keyword('pi'), 'pixels')
    parse_wrap(SyntaxIdentifiers.not_keyword + L('pixels'), 'pixels')
    parse_wrap(Syntax.pint_unit_simple, 'pixels')
    parse_wrap(Syntax.space_pint_unit, 'pixels')
    parse_wrap(Syntax.space_pint_unit, 'pixels/deg')
    parse_poset('pixels/deg')
    parse_poset('pixel/deg')
    parse_constant(' 1.0 pixels/deg')
Пример #3
0
def get_samples(request, ndp):
    xaxis = str(request.params['xaxis'])
    # yaxis = str(request.params['yaxis'])
    xmin = request.params['xmin'].encode('utf-8')
    xmax = request.params['xmax'].encode('utf-8')
    nsamples = int(request.params['nsamples'])

    fnames = ndp.get_fnames()
    rnames = ndp.get_rnames()

    # must pass the other functions as parameters
    f = {}
    for fn in fnames:
        if fn == xaxis: continue
        if not fn in request.params:
            msg = 'You have to pass the value of function %r.' % fn
            raise_desc(ValueError, msg, rnames=rnames)

        s = request.params[fn]
        try:
            val = parse_constant(s)
        except DPSyntaxError as e:
            msg = 'Cannot parse value for %r.' % fn
            raise_wrapped(ValueError, e, msg, compact=True)

        F = ndp.get_ftype(fn)
        f[fn] = express_value_in_isomorphic_space(val.unit, val.value, F)

    F = ndp.get_ftype(xaxis)
    try:
        xmin = parse_constant(xmin)
        xmax = parse_constant(xmax)
    except DPSyntaxError as e:
        msg = 'Cannot parse value for xmax/xmin.'
        raise_wrapped(ValueError, e, msg, compact=True)

    xmin = express_value_in_isomorphic_space(xmin.unit, xmin.value, F)
    xmax = express_value_in_isomorphic_space(xmax.unit, xmax.value, F)

    xsamples = np.linspace(xmin, xmax, nsamples)
    samples = []
    for xsample in xsamples:
        t = []
        for fn in fnames:
            if fn == xaxis:
                t.append(xsample)
            else:
                t.append(f[fn])
        sample = tuple(t)
        if len(fnames) == 1:
            sample = sample[0]

        samples.append(sample)

    return samples
Пример #4
0
def eval_constant_same_exactly(s1, s2):
    """ 
        Checks that the two strings evaluate to the same constant
        considering equivalent types to be different.
    """
    p1 = parse_constant(s1)
    p2 = parse_constant(s2)
    #     print('Checking that %s === %s' % (p1, p2))

    assert p1.unit == p2.unit, (p1, p2)
    p1.unit.check_equal(p1.value, p2.value)
Пример #5
0
def eval_constant_same_exactly(s1, s2):
    """ 
        Checks that the two strings evaluate to the same constant
        considering equivalent types to be different.
    """
    p1 = parse_constant(s1)
    p2 = parse_constant(s2)
#     print('Checking that %s === %s' % (p1, p2))

    assert p1.unit == p2.unit, (p1, p2)
    p1.unit.check_equal(p1.value, p2.value)
Пример #6
0
def convert_string_query(ndp, query, context):
    """
        Converts a string query to a value that can be passed to the DP.
        
        Example:
            f = bind(ndp, dict(power='100mW'))
            f == 0.1
            dp.solve(f)
    
    """
    # first: make sure the names are the same

    fnames = ndp.get_fnames()
    fnames2 = set(query)
    if set(fnames) != fnames2:
        msg = 'Missing values in query or too many values.'
        raise_desc(ValueError, msg, fnames=fnames, query=query)

    fds = []
    Fds = []

    tu = get_types_universe()

    for fname in fnames:
        q = query[fname]
        vu = parse_constant(q, context)

        fds.append(vu.value)
        Fds.append(vu.unit)

        F0 = ndp.get_ftype(fname)
        if not tu.leq(vu.unit, F0):
            msg = 'Invalid value for %r: %s does not cast to %s.' % (fname, vu,
                                                                     F0)
            raise_desc(ValueError, msg)

    Fd = PosetProduct(tuple(Fds))
    fd = tuple(fds)

    if len(fnames) == 1:
        Fd = Fd[0]
        fd = fd[0]
    else:
        Fd = Fd
        fd = fd

    F = ndp.get_ftypes(fnames)
    if len(fnames) == 1:
        F = F[0]

    tu.check_leq(Fd, F)
    A_to_B, _ = tu.get_embedding(Fd, F)
    fg = A_to_B(fd)

    #print('Fd: %s' % Fd.format(fd))
    #print('F: %s' % F.format(fg))
    return fg
Пример #7
0
def convert_string_query(ndp, query, context):
    """
        Converts a string query to a value that can be passed to the DP.
        
        Example:
            f = bind(ndp, dict(power='100mW'))
            f == 0.1
            dp.solve(f)
    
    """
    # first: make sure the names are the same

    fnames = ndp.get_fnames()
    fnames2 = set(query)
    if set(fnames) != fnames2:
        msg = 'Missing values in query or too many values.'
        raise_desc(ValueError, msg, fnames=fnames, query=query)

    fds = []
    Fds = []

    tu = get_types_universe()

    for fname in fnames:
        q = query[fname]
        vu = parse_constant(q, context)

        fds.append(vu.value)
        Fds.append(vu.unit)

        F0 = ndp.get_ftype(fname)
        if not tu.leq(vu.unit, F0):
            msg = 'Invalid value for %r: %s does not cast to %s.' % (fname, vu, F0)
            raise_desc(ValueError, msg)

    Fd = PosetProduct(tuple(Fds))
    fd = tuple(fds)

    if len(fnames) == 1:
        Fd = Fd[0]
        fd = fd[0]
    else:
        Fd = Fd
        fd = fd

    F = ndp.get_ftypes(fnames)
    if len(fnames) == 1:
        F = F[0]

    tu.check_leq(Fd, F)
    A_to_B, _ = tu.get_embedding(Fd, F)
    fg = A_to_B(fd)

    #print('Fd: %s' % Fd.format(fd))
    #print('F: %s' % F.format(fg))
    return fg
Пример #8
0
def check_maximals1():  # TODO: rename
    p = parse_constant('Maximals V')
    print p
Пример #9
0
def check_minimals1():  # TODO: rename
    p = parse_constant('Minimals V')
    print p
    p = parse_constant('Minimals poset{a b}')
    print p
Пример #10
0
def math_constants4():
    parse_constant('pi^2')
Пример #11
0
def math_constants3():
    parse_constant('pi^2')
    pow(3.14, 2)
Пример #12
0
def constant_inverse():
    s = """ 1 / 2 """
    val = parse_constant(s)
    print(val)
Пример #13
0
def constant_inverse_ok():
    s = """ 1 / 2 m """
    val = parse_constant(s)
    print val
Пример #14
0
def math_constants9():
    parse_constant('e^2')
Пример #15
0
def math_constants1():
    parse_constant('pi')
Пример #16
0
def math_constants5():
    parse_constant('π^2')
Пример #17
0
def check_maximals1():  # TODO: rename
    p = parse_constant('Maximals V')
    print p
Пример #18
0
def math_constants11():
    parse_constant('e + π')
Пример #19
0
def math_constants7():
    parse_constant('e')
Пример #20
0
def math_constants10():
    parse_constant('pow(e, 2)')
Пример #21
0
def math_constants3():
    parse_constant('3^2')
Пример #22
0
def math_constants12():
    parse_constant('e * π')
Пример #23
0
def math_constants6():
    parse_constant('pow(π, 2)')
Пример #24
0
def check_minimals1():  # TODO: rename
    p = parse_constant('Minimals V')
    print p
    p = parse_constant('Minimals finite_poset{ a b}')
    print p
Пример #25
0
def math_constants2():
    parse_constant('π')