def _single_variate(base_ring, name, sparse, implementation): import sage.rings.polynomial.polynomial_ring as m name = normalize_names(1, name) key = (base_ring, name, sparse, implementation if not sparse else None) R = _get_from_cache(key) if not R is None: return R if isinstance(base_ring, ring.CommutativeRing): if is_IntegerModRing(base_ring) and not sparse: n = base_ring.order() if n.is_prime(): R = m.PolynomialRing_dense_mod_p(base_ring, name, implementation=implementation) elif n > 1: R = m.PolynomialRing_dense_mod_n(base_ring, name, implementation=implementation) else: # n == 1! R = m.PolynomialRing_integral_domain( base_ring, name) # specialized code breaks in this case. elif is_FiniteField(base_ring) and not sparse: R = m.PolynomialRing_dense_finite_field( base_ring, name, implementation=implementation) elif isinstance(base_ring, padic_base_leaves.pAdicFieldCappedRelative): R = m.PolynomialRing_dense_padic_field_capped_relative( base_ring, name) elif isinstance(base_ring, padic_base_leaves.pAdicRingCappedRelative): R = m.PolynomialRing_dense_padic_ring_capped_relative( base_ring, name) elif isinstance(base_ring, padic_base_leaves.pAdicRingCappedAbsolute): R = m.PolynomialRing_dense_padic_ring_capped_absolute( base_ring, name) elif isinstance(base_ring, padic_base_leaves.pAdicRingFixedMod): R = m.PolynomialRing_dense_padic_ring_fixed_mod(base_ring, name) elif base_ring.is_field(proof=False): R = m.PolynomialRing_field(base_ring, name, sparse) elif base_ring.is_integral_domain(proof=False): R = m.PolynomialRing_integral_domain(base_ring, name, sparse, implementation) else: R = m.PolynomialRing_commutative(base_ring, name, sparse) else: R = m.PolynomialRing_general(base_ring, name, sparse) if hasattr(R, '_implementation_names'): for name in R._implementation_names: real_key = key[0:3] + (name, ) _save_in_cache(real_key, R) else: _save_in_cache(key, R) return R
def _single_variate(base_ring, name, sparse=None, implementation=None, order=None): # The "order" argument is unused, but we allow it (and ignore it) # for consistency with the multi-variate case. sparse = bool(sparse) if sparse: implementation = None key = (base_ring, name, sparse, implementation) R = _get_from_cache(key) if R is not None: return R import sage.rings.polynomial.polynomial_ring as m if isinstance(base_ring, ring.CommutativeRing): if is_IntegerModRing(base_ring) and not sparse: n = base_ring.order() if n.is_prime(): R = m.PolynomialRing_dense_mod_p(base_ring, name, implementation=implementation) elif n > 1: R = m.PolynomialRing_dense_mod_n(base_ring, name, implementation=implementation) else: # n == 1! R = m.PolynomialRing_integral_domain( base_ring, name) # specialized code breaks in this case. elif is_FiniteField(base_ring) and not sparse: R = m.PolynomialRing_dense_finite_field( base_ring, name, implementation=implementation) elif isinstance(base_ring, padic_base_leaves.pAdicFieldCappedRelative): R = m.PolynomialRing_dense_padic_field_capped_relative( base_ring, name) elif isinstance(base_ring, padic_base_leaves.pAdicRingCappedRelative): R = m.PolynomialRing_dense_padic_ring_capped_relative( base_ring, name) elif isinstance(base_ring, padic_base_leaves.pAdicRingCappedAbsolute): R = m.PolynomialRing_dense_padic_ring_capped_absolute( base_ring, name) elif isinstance(base_ring, padic_base_leaves.pAdicRingFixedMod): R = m.PolynomialRing_dense_padic_ring_fixed_mod(base_ring, name) elif base_ring in _CompleteDiscreteValuationRings: R = m.PolynomialRing_cdvr(base_ring, name, sparse) elif base_ring in _CompleteDiscreteValuationFields: R = m.PolynomialRing_cdvf(base_ring, name, sparse) elif base_ring.is_field(proof=False): R = m.PolynomialRing_field(base_ring, name, sparse) elif base_ring.is_integral_domain(proof=False): R = m.PolynomialRing_integral_domain(base_ring, name, sparse, implementation) else: R = m.PolynomialRing_commutative(base_ring, name, sparse) else: R = m.PolynomialRing_general(base_ring, name, sparse) if hasattr(R, '_implementation_names'): for name in R._implementation_names: real_key = key[0:3] + (name, ) _save_in_cache(real_key, R) else: _save_in_cache(key, R) return R