Пример #1
0
bool SchurRing2::initialize_SchurRing2()
{
  initialize_ring(coefficientRing->characteristic());

  zeroV = from_long(0);
  oneV = from_long(1);
  minus_oneV = from_long(-1);

  SMinitialize(nvars,0);
  return true;
}
Пример #2
0
bool RingZZ::initialize_ZZ(const PolynomialRing *deg_ring)
{
  initialize_ring(0);

  zeroV = from_long(0);
  oneV = from_long(1);
  minus_oneV = from_long(-1);

  degree_ring = deg_ring;
  coeffR = new M2::ARingZZGMP;
  return true;
}
Пример #3
0
ring_elem RingZZ::invert(const ring_elem f) const
{
  if (is_unit(f))
    return copy(f);
  else
    return from_long(0);
}
Пример #4
0
bool Z_mod::initialize_Z_mod(int p)
{

  initialize_ring(p);
  P = p;

  declare_field();
  int i,j,q,n;

  if (P==2)
    _minus_one = 0;
  else
    _minus_one = (P-1)/2;

  if (P==2)
    _prim_root = 1;
  else
    {
      j=1;
      for (i=2; (i<P && j<P-1); i++)
        for (q=i,j=1; (q!=1 && j<P); q=(q*i)%P,j++);
      _prim_root = i-1;
    }

  // cerr << "z_mod_p: creating table for P = " << P << endl;
  _log_table = newarray_atomic(int,P);
  _exp_table = newarray_atomic(int,P);
  for (i=0, n=1; i<P-1; i++, n=(n*_prim_root)%P)
    {
      _log_table[n] = i;  // i = log_(base _prim_root)(n)
      _exp_table[i] = n;  // n = (_prim_root)^i
    }
  _ZERO            = P-1;
  _exp_table[_ZERO] = 0;
  _log_table[0]    = _ZERO;

  _P1 = P-1;

  zeroV = from_long(0);
  oneV = from_long(1);
  minus_oneV = from_long(-1);

  coeffR = new CoefficientRingZZp(P,_log_table, _exp_table);
  aringZZp = new M2::ARingZZp(P); // WARNING: this uses that the primitive element is the SAME as computed above!!
    // Remove this warning once Z_mod is not in existence any longer.
  return true;
}
Пример #5
0
v8::Handle<v8::Value> Session::onData(const v8::Arguments& args) {

    fd_set fdset;
    struct timeval timeout;
    int block = 1;
    int numfds = 0;

    UNWRAP(Session, wrap, args.This());
    SwapScope scope(wrap, args);
    if(0 == wrap->session_) {
        return ThrowError("Session hasn't opened.");
    }

    if(2 != args.Length()) {
        return ThrowError("Must pass the msg and rinfo arguments to onData.");
    }

    FD_ZERO(&fdset);

    /**
    * block input:  set to 1 if input timeout value is undefined
    * set to 0 if input timeout value is defined
    * block output: set to 1 if output timeout value is undefined
    * set to 0 if output rimeout vlaue id defined
    */
    if(1 != snmp_sess_select_info(wrap->session_, &numfds, &fdset,
                                  &timeout, &block)) {
        return v8::Undefined();
    }


    if(-1 == snmp_sess_read(wrap->session_, &fdset)) {
        return ThrowError(snmp_api_errstring(wrap->arguments_.s_snmp_errno));
    }

    if(0 == block) {
        v8::Handle<v8::Object> ret = v8::Object::New();
        v8::Handle<v8::Object> timeout_v8 = v8::Object::New();
        timeout_v8->Set(tv_sec_symbol,  from_long(timeout.tv_sec));
        timeout_v8->Set(tv_usec_symbol, from_long(timeout.tv_usec));
        ret->Set(timeout_symbol, timeout_v8);
        return scope.Close(ret);
    } else {
        return v8::Undefined();
    }
}
Пример #6
0
bool GF::promote(const Ring *Rf, const ring_elem f, ring_elem &result) const
{
  // Rf = Z/p[x]/F(x) ---> GF(p,n)
  // promotion: need to be able to know the value of 'x'.
  // lift: need to compute (primite_element)^e

  if (Rf != _originalR) return false;

  result = from_long(0);
  int exp[1];
  for (Nterm *t = f; t != NULL; t = t->next)
    {
      std::pair<bool,long> b = _originalR->getCoefficients()->coerceToLongInteger(t->coeff);
      M2_ASSERT(b.first);
      ring_elem coef = from_long(b.second);
      _originalR->getMonoid()->to_expvector(t->monom, exp);
      // exp[0] is the variable we want.  Notice that since the ring is a quotient,
      // this degree is < n (where Q_ = P^n).
      ring_elem g = power(_x_exponent, exp[0]);
      g = mult(g, coef);
      internal_add_to(result, g);
    }
  return true;
}
Пример #7
0
bool GF::initialize_GF(const RingElement *prim)
{
  // set the GF ring tables.  Returns false if there is an error.
  _primitive_element = prim;
  _originalR = prim->get_ring()->cast_to_PolynomialRing();
  initialize_ring(_originalR->characteristic(),
                  PolyRing::get_trivial_poly_ring());

  declare_field();

  int i,j;

  if (_originalR->n_quotients() != 1)
    {
      ERROR("rawGaloisField expected an element of a quotient ring of the form ZZ/p[x]/(f)");
      return false;
    }
  ring_elem f = _originalR->quotient_element(0);
  Nterm *t = f;
  int n = _originalR->getMonoid()->primary_degree(t->monom);

  Q_ = static_cast<int>(characteristic());
  for (i=1; i<n; i++) Q_ *= static_cast<int>(characteristic());

  Qexp_ = n;
  Q1_ = Q_-1;
  _ZERO = 0;
  _ONE = Q1_;
  _MINUS_ONE = (characteristic() == 2 ? _ONE : Q1_/2);

  // Get ready to create the 'one_table'
  array<ring_elem> polys;
  polys.append(_originalR->from_long(0));
  ring_elem primelem = prim->get_value();
  polys.append(_originalR->copy(primelem));

  ring_elem oneR = _originalR->one();

  _x_exponent = -1;
  ring_elem x = _originalR->var(0);
  if (_originalR->is_equal(primelem, x))
    _x_exponent = 1;
  for (i=2; i<Q_; i++)
    {
      ring_elem g = _originalR->mult(polys[i-1], primelem);
      polys.append(g);
      if (_originalR->is_equal(g, oneR)) break;
      if (_originalR->is_equal(g, x))
        _x_exponent = i;
    }

  if (polys.length() != Q_)
    {
      ERROR("GF: primitive element expected");
      return false;
    }

  assert(_x_exponent >= 0);

  // Set 'one_table'.
  _one_table = newarray_atomic(int,Q_);
  _one_table[0] = Q_-1;
  for (i=1; i<=Q_-1; i++)
    {
      if (system_interrupted())
        return false;
      ring_elem f1 = _originalR->add(polys[i], oneR);
      for (j=1; j<=Q_-1; j++)
        if (_originalR->is_equal(f1, polys[j]))
          break;
      _one_table[i] = j;
    }

  // Create the Z/P ---> GF(Q) inclusion map
  _from_int_table = newarray_atomic(int,characteristic());
  int a = _ONE;
  _from_int_table[0] = _ZERO;
  for (i=1; i<characteristic(); i++)
    {
      _from_int_table[i] = a;
      a = _one_table[a];
    }

  zeroV = from_long(0);
  oneV = from_long(1);
  minus_oneV = from_long(-1);

  // M2::GaloisFieldTable G(*_originalR, primelem);
  //  G.display(std::cout);

  return true;
}
Пример #8
0
ring_elem RingZZ::preferred_associate(ring_elem f) const
{
  mpz_srcptr a = f.get_mpz();
  if (mpz_sgn(a) >= 0) return from_long(1);
  return from_long(-1);
}