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; }
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; }
ring_elem RingZZ::invert(const ring_elem f) const { if (is_unit(f)) return copy(f); else return from_long(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; }
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(); } }
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; }
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; }
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); }