void expr2linear_pol(expr * t, mpq_buffer & as, var_buffer & xs) {
     mpq c_mpq_val;
     if (m_util.is_add(t)) {
         rational c_val;
         unsigned num = to_app(t)->get_num_args();
         for (unsigned i = 0; i < num; i++) {
             expr * mon = to_app(t)->get_arg(i);
             expr * c, * x;
             if (m_util.is_mul(mon, c, x) && m_util.is_numeral(c, c_val)) {
                 nm.set(c_mpq_val, c_val.to_mpq());
                 as.push_back(c_mpq_val);
                 xs.push_back(mk_var(x));
             }
             else {
                 as.push_back(mpq(1));
                 xs.push_back(mk_var(mon));
             }
         }
     }
     else {
         as.push_back(mpq(1));
         xs.push_back(mk_var(t));
     }
     nm.del(c_mpq_val);
 }
mpq GingerCoinUnits::factor(int unit)
{
    switch(unit)
    {
    case uFRC: return mpq("100/1");
    case mFRC: return mpq("100000/1");
    default:
    case FRC:  return mpq("100000000/1");
    }
}
mpq applebycoinUnits::factor(int unit)
{
    switch(unit)
    {
    case uFRC: return mpq("100/1");
    case mFRC: return mpq("100000/1");
    default:
    case ACC:  return mpq("100000000/1");
    }
}
mpq DixiecoinUnits::factor(int unit)
{
    switch(unit)
    {
    case uDXC: return mpq("100/1");
    case mDXC: return mpq("100000/1");
    default:
    case DXC:  return mpq("100000000/1");
    }
}
mpq BitcoinUnits::factor(int unit)
{
    switch(unit)
    {
    case BTC:  return mpq("100000000/1");
    case mBTC: return mpq("100000/1");
    case uBTC: return mpq("100/1");
    default:   return mpq("100000000/1");
    }
}
Exemple #6
0
mpq to_mpq_ext(lua_State * L, int idx) {
    switch (lua_type(L, idx)) {
    case LUA_TNUMBER:       return mpq(lua_tonumber(L, idx));
    case LUA_TSTRING:       return mpq(lua_tostring(L, idx));
    case LUA_TUSERDATA:
        if (is_mpz(L, idx)) {
            return mpq(to_mpz(L, idx));
        } else {
            return *static_cast<mpq*>(luaL_checkudata(L, idx, mpq_mt));
        }
    default: throw exception(sstream() << "arg #" << idx << " must be a number, string, mpz or mpq");
    }
}
Exemple #7
0
static mpq const & to_mpq(lua_State * L) {
    static LEAN_THREAD_LOCAL mpq arg;
    switch (lua_type(L, idx)) {
    case LUA_TNUMBER:       arg = lua_tonumber(L, idx); return arg;
    case LUA_TSTRING:       arg = mpq(lua_tostring(L, idx)); return arg;
    case LUA_TUSERDATA:
        if (is_mpz(L, idx)) {
            arg = mpq(to_mpz(L, idx));
            return arg;
        } else {
            return *static_cast<mpq*>(luaL_checkudata(L, idx, mpq_mt));
        }
    default: throw exception(sstream() << "arg #" << idx << " must be a number, string, mpz or mpq");
    }
}
 a_var mk_linear_pol(expr * t) {
     a_var x;
     if (m_expr2var.find(t, x))
         return x;
     x = mk_var(t);
     if (m_util.is_add(t)) {
         m_num_buffer.reset();
         m_var_buffer.reset();
         expr2linear_pol(t, m_num_buffer, m_var_buffer);
         m_num_buffer.push_back(mpq(-1));
         m_var_buffer.push_back(x);
         bp.mk_eq(m_num_buffer.size(), m_num_buffer.c_ptr(), m_var_buffer.c_ptr());
     }
     return x;
 }
Exemple #9
0
mpq lar_solver::get_infeasibility_of_constraint(const lar_normalized_constraint & norm_constr, std::unordered_map<std::string, mpq> & solution) {
    auto kind = norm_constr.m_kind;
    mpq left_side_val = get_canonic_left_side_val(norm_constr.m_canonic_left_side, solution);

    switch (kind) {
    case LT:
    case LE: return std::max(left_side_val - norm_constr.m_right_side, numeric_traits<mpq>::zero());
    case GT:
    case GE: return std::max(- (left_side_val - norm_constr.m_right_side), numeric_traits<mpq>::zero());

    case EQ:
        return abs(left_side_val - norm_constr.m_right_side);

    default:
        lean_unreachable();
    }
    return mpq(0); // it is unreachable
}
 equation * mk_eq(unsigned num, mpz const * as, var const * xs, mpz const & c, unsigned num_js, mpq const * bs, justification const * js,
                  bool sort = true) {
     equation * new_eq = alloc(equation);
     for (unsigned i = 0; i < num; i++) {
         m().set(m_as_buffer[xs[i]], as[i]);
         new_eq->m_as.push_back(mpz());
         new_eq->m_xs.push_back(xs[i]);
     }
     sort_core(new_eq->m_as, new_eq->m_xs, m_as_buffer);
     m().set(new_eq->m_c, c);
     for (unsigned i = 0; i < num_js; i++) {
         m().set(m_bs_buffer[js[i]], bs[i]);
         new_eq->m_bs.push_back(mpq());
         new_eq->m_js.push_back(js[i]);
     }
     if (sort)
         sort_core(new_eq->m_bs, new_eq->m_js, m_bs_buffer);
     return new_eq;
 }
Exemple #11
0
mpq read_mpq(deserializer & d) {
    return mpq(d.read_string().c_str());
}