Пример #1
0
def get_approx_dp(S, name, approx_perc, approx_abs, approx_abs_S, max_value,
                  max_value_S):
    from mcdp_posets.types_universe import express_value_in_isomorphic_space

    approx_abs_ = express_value_in_isomorphic_space(S1=approx_abs_S,
                                                    s1=approx_abs,
                                                    S2=S)
    max_value_ = express_value_in_isomorphic_space(S1=max_value_S,
                                                   s1=max_value,
                                                   S2=S)

    if approx_perc > 0:  # pragma: no cover
        raise_desc(DPNotImplementedError, 'Approx_perc not implemented')

    dps = []

    if max_value > 0:
        dp_max = FuncNotMoreThan(S, max_value_)
        dps.append(dp_max)

    if approx_abs_ > 0:
        dps.append(makeLinearCeilDP(S, approx_abs_))

    dp = wrap_series(S, dps)

    ndp = dpwrap(dp, name, name)
    return ndp
Пример #2
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
Пример #3
0
def get(matches, used, Ps, get_P, Pa, ua):
    others = list(set(used) - set(matches))
    extra = PosetProduct(tuple(map(get_P, others)))
    print('extra for Pa: %s' % extra)
    Pa_comp = PosetProduct(Pa.subs + extra.subs)
    print('Pa_comp: %s' % Pa_comp)
    extra_minimals = extra.get_minimal_elements()
    m_matches = matches + others
    s = set()
    R = set()
    for m1, m2 in itertools.product(ua.minimals, extra_minimals):
        m = m1 + m2
        s.add(m)
        r = [None] * len(used)
        for i, a in enumerate(used):
            S1 = Pa_comp.subs[m_matches.index(a)]
            s1 = m[m_matches.index(a)]
            S2 = get_P(a)
            r[i] = express_value_in_isomorphic_space(S1, s1, S2)
        r = tuple(r)
        R.add(r)
    Pa_comp_lb = Pa_comp.Us(s)
    print('Pa_comp_lb: %s' % Pa_comp_lb)
    Ps_a = Ps.Us(R)
    return Ps_a
def get(matches, used, Ps, get_P, Pa, ua):
    others = list(set(used) - set(matches))
    extra = PosetProduct(tuple(map(get_P, others)))
    print('extra for Pa: %s' % extra)
    Pa_comp = PosetProduct(Pa.subs + extra.subs)
    print('Pa_comp: %s' % Pa_comp)
    extra_minimals = extra.get_minimal_elements()
    m_matches = matches + others
    s = set()
    R = set()
    for m1, m2 in itertools.product(ua.minimals, extra_minimals):
        m = m1 + m2
        s.add(m)
        r = [None] * len(used)
        for i, a in enumerate(used):
            S1 = Pa_comp.subs[m_matches.index(a)]
            s1 = m[m_matches.index(a)]
            S2 = get_P(a)
            r[i] = express_value_in_isomorphic_space(S1, s1, S2)
        r = tuple(r)
        R.add(r)
    Pa_comp_lb = Pa_comp.Us(s)
    print('Pa_comp_lb: %s' % Pa_comp_lb)
    Ps_a = Ps.Us(R)
    return Ps_a
Пример #5
0
    def process(self, request, string, nl, nu):
        l = self.get_library(request)
        parsed = l.parse_constant(string)

        space = parsed.unit
        value = parsed.value

        model_name = self.get_model_name(request)
        library = self.get_current_library_name(request)
        ndp, dp = self._get_ndp_dp(library, model_name)

        F = dp.get_fun_space()
        UR = UpperSets(dp.get_res_space())

        tu = get_types_universe()
        tu.check_leq(parsed.unit, F)

        f = express_value_in_isomorphic_space(parsed.unit, parsed.value, F)

        print('query: %s ...' % F.format(f))

        from mocdp import logger
        tracer = Tracer(logger=logger)

        dpl, dpu = get_dp_bounds(dp, nl, nu)

        intervals = False
        max_steps = 10000
        result_l, _trace = solve_meat_solve(tracer, ndp, dpl, f,
                                         intervals, max_steps, False)

        result_u, trace = solve_meat_solve(tracer, ndp, dpu, f,
                                         intervals, max_steps, False)


        key = (string, nl, nu)

        res = dict(result_l=result_l, result_u=result_u, dpl=dpl, dpu=dpu)
        self.solutions[key] = res

        res = {}

        e = cgi.escape

        res['output_space'] = e(space.__repr__() + '\n' + str(type(space)))
        res['output_raw'] = e(value.__repr__() + '\n' + str(type(value)))
        res['output_formatted'] = e(space.format(value))

        res['output_result'] = 'Lower: %s\nUpper: %s' % (UR.format(result_l),
                                                         UR.format(result_u))
        res['output_trace'] = str(trace)

        encoded = "nl=%s&nu=%s&string=%s" % (nl, nu, string)
        res['output_image'] = 'display.png?' + encoded
        res['ok'] = True

        return res
Пример #6
0
def get_approx_dp(S, name, approx_perc, approx_abs, approx_abs_S, max_value, 
                  max_value_S):
    from mcdp_posets.types_universe import express_value_in_isomorphic_space

    approx_abs_ = express_value_in_isomorphic_space(S1=approx_abs_S, s1=approx_abs, S2=S)
    max_value_ = express_value_in_isomorphic_space(S1=max_value_S, s1=max_value, S2=S)

    if approx_perc > 0:
        raise_desc(DPNotImplementedError, 'Approx_perc not implemented')

    dps = []
    
    if max_value > 0:
        dp_max = FuncNotMoreThan(S, max_value_)
        dps.append(dp_max)

    if approx_abs_ > 0:
        dps.append(makeLinearCeilDP(S, approx_abs_))
    
    dp = wrap_series(S, dps)
    
    ndp = dpwrap(dp, name, name)
    return ndp
Пример #7
0
def opt_basic_7():
    libnames = ['actuation']
    library = get_test_library2(libnames)

    #     outdir = 'out/opt_basic_7'
    #     cache_dir = os.path.join(outdir, 'cache')
    library.use_tmp_cache()
    ndp = library.load_ndp('duckiebot_sol00')

    min_functions = {
        'motion': '< `RigidBodyID: rb1, 0.1 m/s, 10 minutes >',
    }
    _flabels, F0s, f0s = _parse_dict(min_functions, library)

    names = [name for name, _ndp in cndp_get_name_ndp_notfunres(ndp)]
    print('names: %s' % names)

    to_remove = list(names)
    to_remove.remove('dagu_chassis')
    # to_remove.remove('battery_ravpower')
    # to_remove.remove('USBMicroCharging')

    from mcdp_opt_tests.ndp_utils import cndp_remove_one_child
    for n in to_remove:
        ndp = cndp_remove_one_child(ndp, n)

    print ndp

    if len(F0s) > 1:
        F = PosetProduct(F0s)
        f0 = f0s
    else:
        F = F0s[0]
        f0 = f0s[0]

    dp = ndp.get_dp()
    F1 = dp.get_fun_space()

    f1 = express_value_in_isomorphic_space(F, f0, F1)

    _res = dp.solve(f1)
Пример #8
0
def express_vu_in_isomorphic_space(vb, va):
    """ Returns vb in va's units """
    from mcdp_posets.types_universe import express_value_in_isomorphic_space
    value = express_value_in_isomorphic_space(vb.unit, vb.value, va.unit)
    return ValueWithUnits(value=value, unit=va.unit)
Пример #9
0
def express_vu_in_isomorphic_space(vb, va):
    """ Returns vb in va's units """
    from mcdp_posets.types_universe import express_value_in_isomorphic_space
    value = express_value_in_isomorphic_space(vb.unit, vb.value, va.unit)
    return ValueWithUnits(value=value, unit=va.unit)
Пример #10
0
 def cast_value(self, P):
     """ Returns the value cast in the space P (larger than
         the current space). """ 
     return express_value_in_isomorphic_space(self.unit, self.value, P)