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
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')
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
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)
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
def check_maximals1(): # TODO: rename p = parse_constant('Maximals V') print p
def check_minimals1(): # TODO: rename p = parse_constant('Minimals V') print p p = parse_constant('Minimals poset{a b}') print p
def math_constants4(): parse_constant('pi^2')
def math_constants3(): parse_constant('pi^2') pow(3.14, 2)
def constant_inverse(): s = """ 1 / 2 """ val = parse_constant(s) print(val)
def constant_inverse_ok(): s = """ 1 / 2 m """ val = parse_constant(s) print val
def math_constants9(): parse_constant('e^2')
def math_constants1(): parse_constant('pi')
def math_constants5(): parse_constant('π^2')
def math_constants11(): parse_constant('e + π')
def math_constants7(): parse_constant('e')
def math_constants10(): parse_constant('pow(e, 2)')
def math_constants3(): parse_constant('3^2')
def math_constants12(): parse_constant('e * π')
def math_constants6(): parse_constant('pow(π, 2)')
def check_minimals1(): # TODO: rename p = parse_constant('Minimals V') print p p = parse_constant('Minimals finite_poset{ a b}') print p
def math_constants2(): parse_constant('π')