Skip to content

Commit aeb7cc3

Browse files
reduced fields and field references, changed equals method
1 parent 0035ba9 commit aeb7cc3

File tree

1 file changed

+49
-23
lines changed

1 file changed

+49
-23
lines changed

src/sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,6 @@ def __init__(self, systems):
289289
(x^2 : y^2)
290290
"""
291291

292-
self._domain = systems[0].domain()
293-
self._codomain = systems[0].codomain()
294292
self._dynamical_systems = systems
295293
Parent.__init__(self, category=Semigroups().FinitelyGeneratedAsMagma())
296294

@@ -329,7 +327,7 @@ def __call__(self, input):
329327
TypeError: unable to convert (2 : 1) to an element of Rational Field
330328
"""
331329
result = []
332-
for ds in self._dynamical_systems:
330+
for ds in self.defining_systems():
333331
result.append(ds(self.domain()(input)))
334332
return tuple(result)
335333

@@ -347,7 +345,7 @@ def base_ring(self):
347345
sage: f.base_ring()
348346
Rational Field
349347
"""
350-
return self._dynamical_systems[0].base_ring()
348+
return self.defining_systems()[0].base_ring()
351349

352350
def change_ring(self, new_ring):
353351
r"""
@@ -377,7 +375,7 @@ def change_ring(self, new_ring):
377375
(x^2 : y^2)
378376
"""
379377
new_systems = []
380-
for ds in self._dynamical_systems:
378+
for ds in self.defining_systems():
381379
new_systems.append(ds.change_ring(new_ring))
382380
return DynamicalSemigroup_projective(new_systems)
383381

@@ -394,7 +392,7 @@ def domain(self):
394392
sage: f.domain()
395393
Projective Space of dimension 1 over Rational Field
396394
"""
397-
return self._domain
395+
return self.defining_systems()[0].domain()
398396

399397
def codomain(self):
400398
r"""
@@ -409,7 +407,7 @@ def codomain(self):
409407
sage: f.codomain()
410408
Projective Space of dimension 1 over Rational Field
411409
"""
412-
return self._codomain
410+
return self.defining_systems()[0].codomain()
413411

414412
def defining_polynomials(self):
415413
r"""
@@ -425,7 +423,7 @@ def defining_polynomials(self):
425423
((x, y), (x^2, y^2))
426424
"""
427425
result = []
428-
for ds in self._dynamical_systems:
426+
for ds in self.defining_systems():
429427
result.append(ds.defining_polynomials())
430428
return tuple(result)
431429

@@ -468,12 +466,12 @@ def _repr_(self):
468466
(x^2 : y^2)
469467
"""
470468
header = "Dynamical semigroup over %s defined by %d dynamical system"
471-
if (len(self._dynamical_systems) > 1):
469+
if (len(self.defining_systems()) > 1):
472470
header += "s"
473471
header += ":"
474-
header = header % (str(self.domain()), len(self._dynamical_systems))
472+
header = header % (str(self.domain()), len(self.defining_systems()))
475473
systems = []
476-
for ds in self._dynamical_systems:
474+
for ds in self.defining_systems():
477475
systems.append(str(ds))
478476
systems = '\n'.join(systems)
479477
return header + "\n" + systems
@@ -484,36 +482,64 @@ def __eq__(self, other):
484482
485483
OUTPUT:
486484
487-
A boolean that is True if and only if the two dynamical semigroups contain
488-
the same dynamical systems in the same order.
485+
A boolean that is True if and only if the generators of the two
486+
dynamical semigroups are equal as sets and no generator is of degree 1.
489487
490488
EXAMPLES::
491489
492490
sage: P.<x,y> = ProjectiveSpace(QQ, 1)
493-
sage: f = DynamicalSemigroup(([x, y], [x^2, y^2]))
494-
sage: g = DynamicalSemigroup(([x, y], [x^2, y^2]))
491+
sage: f = DynamicalSemigroup(([x^2, y^2], [x^3, y^3]))
492+
sage: g = DynamicalSemigroup(([x^2, y^2], [x^3, y^3]))
495493
sage: f == g
496494
True
497495
498496
::
499497
500498
sage: P.<x,y> = ProjectiveSpace(QQ, 1)
501-
sage: f = DynamicalSemigroup(([x, y], [x^2, y^2]))
502-
sage: g = DynamicalSemigroup(([x^2, y^2], [x, y]))
499+
sage: f = DynamicalSemigroup(([x^2, y^2], [x^2, y^2]))
500+
sage: g = DynamicalSemigroup(([x^2, y^2], [x^2, y^2], [x^2, y^2]))
503501
sage: f == g
504502
True
505503
506504
::
507505
508506
sage: P.<x,y> = ProjectiveSpace(QQ, 1)
509-
sage: f = DynamicalSemigroup(([x, y], [x^2, y^2]))
510-
sage: g = DynamicalSemigroup(([x^2, y^2], [y, x]))
507+
sage: f = DynamicalSemigroup(([x^3, y^3], [x^2, y^2]))
508+
sage: g = DynamicalSemigroup(([x^2, y^2], [x^3, y^3]))
511509
sage: f == g
510+
True
511+
512+
::
513+
514+
sage: P.<x,y> = ProjectiveSpace(QQ, 1)
515+
sage: f = DynamicalSemigroup(([x^3, y^3], [x^2, y^2]))
516+
sage: g = DynamicalSemigroup(([x^2, y^2], [y^3, x^3]))
517+
sage: f == g
518+
False
519+
520+
TESTS::
521+
522+
sage: P.<x,y> = ProjectiveSpace(QQ, 1)
523+
sage: f = DynamicalSemigroup(([x, y], [x^2, y^2]))
524+
sage: f == 1
512525
False
526+
527+
::
528+
529+
sage: P.<x,y> = ProjectiveSpace(QQ, 1)
530+
sage: f = DynamicalSemigroup(([x, y], [x^2, y^2]))
531+
sage: g = DynamicalSemigroup(([x^2, y^2], [x^3, y^3]))
532+
sage: f == g
533+
Traceback (most recent call last):
534+
...
535+
ValueError: cannot compare dynamical semigroups with at least one generator of degree 1
513536
"""
514537
if isinstance(other, DynamicalSemigroup):
515-
return len(self._dynamical_systems) == len(other._dynamical_systems) and \
516-
all(systems in other._dynamical_systems for systems in self._dynamical_systems)
538+
if any(ds.degree() == 1 for ds in self.defining_systems()) or \
539+
any(ds.degree() == 1 for ds in other.defining_systems()):
540+
raise ValueError("cannot compare dynamical semigroups with at least one generator of degree 1")
541+
return all(ds in other.defining_systems() for ds in self.defining_systems()) and \
542+
all(ds in self.defining_systems() for ds in other.defining_systems())
517543
return False
518544

519545
class DynamicalSemigroup_projective(DynamicalSemigroup):
@@ -702,8 +728,8 @@ def _standardize_domains_of_(systems):
702728
elif biggest_ring.has_coerce_map_from(ds.base_ring()):
703729
pass
704730
else:
705-
raise ValueError("given dynamical systems are not automorphic"
706-
" under global composition")
731+
raise ValueError("given dynamical systems are not automorphic \
732+
under global composition")
707733

708734
for i in range(len(systems)):
709735
if systems[i].base_ring() != biggest_ring:

0 commit comments

Comments
 (0)