diff --git a/src/sage/algebras/lie_algebras/lie_algebra.py b/src/sage/algebras/lie_algebras/lie_algebra.py index 11ebbeec026..1aa4e6e1782 100644 --- a/src/sage/algebras/lie_algebras/lie_algebra.py +++ b/src/sage/algebras/lie_algebras/lie_algebra.py @@ -835,12 +835,12 @@ def gens(self) -> tuple: (x, y) """ G = self.lie_algebra_generators() + if not self.variable_names(): + return tuple(G) try: return tuple(G[i] for i in self.variable_names()) except (KeyError, IndexError): return tuple(G[i] for i in self.indices()) - except ValueError: - return tuple(G) def gen(self, i): """ diff --git a/src/sage/algebras/lie_algebras/quotient.py b/src/sage/algebras/lie_algebras/quotient.py index 4fec104335d..d0b83fbca88 100644 --- a/src/sage/algebras/lie_algebras/quotient.py +++ b/src/sage/algebras/lie_algebras/quotient.py @@ -227,13 +227,17 @@ def __classcall_private__(cls, ambient, I, names=None, index_set=None, index_set = [i[0] for i in index_set_mapping if i[0] not in I_supp] if names is None: - try: - amb_names = dict(zip([i[1] for i in index_set_mapping], ambient.variable_names())) - names = [amb_names[i] for i in index_set] - except (ValueError, KeyError): - # ambient has not assigned variable names - # or the names are for the generators rather than the basis - names = 'e' + names = 'e' + if ambient.variable_names(): + # ambient has not assigned variable names... + try: + amb_names = dict(zip([i[1] for i in index_set_mapping], + ambient.variable_names())) + names = [amb_names[i] for i in index_set] + except KeyError: + # or the names are for the generators rather than + # the basis. + pass if isinstance(names, str): if len(index_set) == 1: names = [names] diff --git a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py index 27796941d2b..7fb1b373c13 100644 --- a/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py +++ b/src/sage/algebras/lie_conformal_algebras/lie_conformal_algebra_element.py @@ -217,10 +217,7 @@ def _latex_(self): if self.is_zero(): return "0" p = self.parent() - try: - names = p.latex_variable_names() - except ValueError: - names = None + names = p.latex_variable_names() if names: terms = [("T^{{({})}}{}".format(k1, names[p._index_to_pos[k0]]), v) if k1 > 1 else ("T{}".format(names[p._index_to_pos[k0]]), v) if k1 == 1 diff --git a/src/sage/groups/finitely_presented.py b/src/sage/groups/finitely_presented.py index b65566ebeb4..1a4245692f0 100644 --- a/src/sage/groups/finitely_presented.py +++ b/src/sage/groups/finitely_presented.py @@ -751,10 +751,6 @@ def __init__(self, free_group, relations, category=None, libgap_fpgroup=None): sage: A5sage = A5gapfp.sage(); A5sage; Finitely presented group < A_5.1, A_5.2 | A_5.1^5*A_5.2^-5, A_5.1^5*(A_5.2^-1*A_5.1^-1)^2, (A_5.1^-2*A_5.2^2)^2 > - sage: A5sage.inject_variables() - Traceback (most recent call last): - ... - ValueError: variable names have not yet been set using self._assign_names(...) Check that pickling works:: @@ -772,10 +768,8 @@ def __init__(self, free_group, relations, category=None, libgap_fpgroup=None): assert isinstance(relations, tuple) self._free_group = free_group self._relations = relations - try: + if free_group.variable_names(): self._assign_names(free_group.variable_names()) - except ValueError: - pass if libgap_fpgroup is None: libgap_fpgroup = free_group.gap() / libgap([rel.gap() for rel in relations]) ParentLibGAP.__init__(self, libgap_fpgroup) diff --git a/src/sage/modules/free_module_element.pyx b/src/sage/modules/free_module_element.pyx index 5826668750a..88a9ab045dc 100644 --- a/src/sage/modules/free_module_element.pyx +++ b/src/sage/modules/free_module_element.pyx @@ -3034,9 +3034,8 @@ cdef class FreeModuleElement(Vector): # abstract base class [(x, y, z) |--> x, (x, y, z) |--> y, (x, y, z) |--> z] """ R = self._parent.base_ring() - try: - var_names = R.variable_names() - except ValueError: + var_names = R.variable_names() + if not var_names: if hasattr(R, 'arguments'): var_names = R.arguments() else: diff --git a/src/sage/rings/asymptotic/misc.py b/src/sage/rings/asymptotic/misc.py index 740529a374e..6c3b5e7795c 100644 --- a/src/sage/rings/asymptotic/misc.py +++ b/src/sage/rings/asymptotic/misc.py @@ -176,10 +176,13 @@ def abbreviate(P): op, cl = ('[', ']') else: op, cl = ('[[', ']]') - try: - s = abbreviate(P.base_ring()) + op + ', '.join(P.variable_names()) + cl - except ValueError: - s = str(P) + s = str(P) + if P.variable_names(): + try: + s = abbreviate(P.base_ring()) + op + ', '.join(P.variable_names()) + cl + except ValueError: + pass + else: try: s = abbreviate(P) diff --git a/src/sage/rings/integer_ring.pyx b/src/sage/rings/integer_ring.pyx index d5ca26fce5b..4a951464d4e 100644 --- a/src/sage/rings/integer_ring.pyx +++ b/src/sage/rings/integer_ring.pyx @@ -319,10 +319,14 @@ cdef class IntegerRing_class(CommutativeRing): sage: A in InfiniteEnumeratedSets() True + + sage: ZZ.variable_names() + () + """ cat = (EuclideanDomains(), DedekindDomains(), InfiniteEnumeratedSets().Metric(), NoetherianRings()) - Parent.__init__(self, base=self, names=('x',), normalize=False, + Parent.__init__(self, base=self, normalize=False, category=cat) self._populate_coercion_lists_(init_no_parent=True, convert_method_name='_integer_') diff --git a/src/sage/rings/qqbar.py b/src/sage/rings/qqbar.py index df010d70b84..0e4fa647f49 100644 --- a/src/sage/rings/qqbar.py +++ b/src/sage/rings/qqbar.py @@ -1075,40 +1075,6 @@ class AlgebraicRealField(Singleton, AlgebraicField_common, sage.rings.abc.Algebr True """ - def __new__(cls): - r""" - This method is there to ensure that pickles created before this class - was made a :class:`~sage.misc.fast_methods.Singleton` still load. - - TESTS:: - - sage: s = loads(b'x\x9cmQ\xcbR\x141\x14\xad\x11A\x083\xe2\x03T|' - ....: b'\x82l`\xd3\xff\xe0\x86\x8de/\xba*\xcb\xa9[\xe9\xf4' - ....: b'\xa5;e:=\'I+,\xa6J\x17B\xf9\xd7f\x08\xe2s\x95\xa4\xee9\xf7<' - ....: b'\xf2\xe5\x8e\x0e\xaa\xe5"D?\xea8z.\x9a\x0b\xa7z\xa3I[\x15' - ....: b'\x82\xf8\xf3\x85\xc9\xb1\x9b' - ....: b'\xd8\x91V\x91\xdb\xc1_\xe0f\xa57\xae\r\x05P+/\xfe\xe5\x08' - ....: b'\xaci\xa2z46\x1aG$Z\x8e*F/p\xf7oC\xa33\x18\x99 = InfinitePolynomialRing(ZZ) sage: T.variable_names() ('x',) + + :: + + sage: NN.variable_names() + () + """ if self._names is not None: return self._names - raise ValueError("variable names have not yet been set using self._assign_names(...)") + return () def variable_name(self): """ @@ -525,13 +533,11 @@ cdef class CategoryObject(SageObject): # We cannot assume that self *has* _latex_variable_names. # But there is a method that returns them and sets # the attribute at the same time, if needed. - # Simon King: It is not necessarily the case that variable - # names are assigned. In that case, self._names is None, - # and self.variable_names() raises a ValueError - try: + + old = None, None + if self.variable_names(): old = self.variable_names(), self.latex_variable_names() - except ValueError: - old = None, None + self._names, self._latex_names = names, latex_names return old