Opened 20 months ago
Closed 16 months ago
#31994 closed enhancement (fixed)
Sigma invariants for P^N, N > 1
Reported by:  ghEnderWannabe  Owned by:  

Priority:  minor  Milestone:  sage9.5 
Component:  dynamics  Keywords:  gsoc2021 
Cc:  bhutz  Merged in:  
Authors:  Alexander Galarraga  Reviewers:  Ben Hutz 
Report Upstream:  N/A  Work issues:  
Branch:  aa63aaa (Commits, GitHub, GitLab)  Commit:  aa63aaa62e6dc457ac0db7616592d7d0ca15f64d 
Dependencies:  #31944, #32322  Stopgaps: 
Description
Currently, the sigma invariants method for dynamical systems on projective space is not implemented when the projective space has dimension greater than 1. Using the algorithm described in https://arxiv.org/pdf/1908.03184.pdf, this ticket implements that functionality.
Change History (40)
comment:1 Changed 20 months ago by
Branch:  → u/ghEnderWannabe/sigma_invariants 

comment:2 Changed 20 months ago by
Commit:  → 8b3ea6a41e12b82eff6d2f1c6c5c5b5124c581bf 

comment:3 Changed 20 months ago by
Dependencies:  → 31944 

comment:4 Changed 20 months ago by
Dependencies:  31944 → #31944 

comment:5 Changed 20 months ago by
Commit:  8b3ea6a41e12b82eff6d2f1c6c5c5b5124c581bf → abedd5944595c822e30fe946ddbab35c182a9eaf 

comment:6 Changed 19 months ago by
Commit:  abedd5944595c822e30fe946ddbab35c182a9eaf → bd287f0b53b1d50c02eac8392d8418db172fcf33 

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
d1476d8  31954: added sanity check with error message

27dea94  31954: added examples for finite fields and polynomial rings

312b538  Merge branch 'u/ghEnderWannabe/hyperplane_transform' of trac.sagemath.org:sage into hyperplane_transform

b31b634  Merge branch 'hyperplane_transform' into periodic_points_improvement

50179a3  31944: cleaned up code, added example

aaecd46  31944: cleaned up code added comments

a6656ca  31944: fix for subschemes, added function field error message

b4ec7c1  31944: minor fixes

6b810a2  31944: fixed periodic typo and added test

bd287f0  Merge branch 'periodic_points_improvement' into sigma_invariants

comment:7 Changed 19 months ago by
Status:  new → needs_review 

comment:8 Changed 19 months ago by
Branch:  u/ghEnderWannabe/sigma_invariants → u/bhutz/sigma_invariants 

comment:9 followup: 11 Changed 19 months ago by
Branch:  u/bhutz/sigma_invariants → u/ghEnderWannabe/sigma_invariants 

Reviewers:  → Ben Hutz 
Status:  needs_review → needs_work 
I pushed a branch with a few comments in the main algorithm. Feel free to add some more.
Here are the issues I've found:
 I don't think putting the degrees as the first two coordinates is appropriate since unless you understand the full form of the sigma invariant polynomials it's not that helpful. If you do know the full form, then then information is not needed.
 need examples for
 formal=True
 finite fields
 polynomial rings
 cycle is ignored for dimension > 1, but seems like a not implemented error should be thrown instead of simply ignoring the parameter. Also, should mention in the INPUT documentation that it is only for dim=1.
 You need to fix the signs as you pull off the coefficients in
sigmas.append(sigma_dictionary.pop(w**i*t**j, 0))
 Formal doesn't seem to work as these both give the same result
P.<x,y,z>=ProjectiveSpace(QQ,2) f=DynamicalSystem([x^2z^2,y^2,z^2]) f.sigma_invariants(2,return_polynomial=True,formal = False) f.sigma_invariants(2,return_polynomial=True,formal = True)
 random error
P.<x,y,z>=ProjectiveSpace(QQbar,2) f=DynamicalSystem([x^2z^2,y^2,z^2]) f.sigma_invariants(2,return_polynomial=True,formal = False)
 shouldn't these work?
R.<c>=QQ[] P.<x,y>=ProjectiveSpace(R,1) f=DynamicalSystem([x^2+c*y^2,y^2]) f.sigma_invariants(1,return_polynomial=True) R.<c,d>=QQ[] P.<x,y,z>=ProjectiveSpace(R,2) f=DynamicalSystem([x^2+c*z^2,y^2+d*z^2,z^2]) f.sigma_invariants(1,return_polynomial=True) R.<c,d>=QQ[] P.<x,y,z>=ProjectiveSpace(FractionField(R),2) f=DynamicalSystem([x^2+c*z^2,y^2+d*z^2,z^2]) f.sigma_invariants(1,return_polynomial=True)
 This is wrong
P.<x,y>=ProjectiveSpace(QQ,1) f=DynamicalSystem([x^2+3*y^2,x*y]) f.sigma_invariants(1,return_polynomial=True, chow=True)
comment:10 Changed 19 months ago by
Commit:  bd287f0b53b1d50c02eac8392d8418db172fcf33 → a410756fc54563375e4b641ad1e90ccda70a1a74 

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
e49e34c  Merge branch 'point_transformation_improvement' into periodic_points_improvement

3a04a8d  31944: fixed bug with formal=True over ring

4a62742  Merge branch 'develop' into periodic_points_improvement

af1b86b  Merge branch 'periodic_points_improvement' into sigma_invariants

89a417d  31994  added some comments to code

9212723  Merge branch 'u/bhutz/sigma_invariants' of trac.sagemath.org:sage into sigma_invariants

2be2b66  31994: added flattening

e3693f0  31944: added error message for fraction fields of m polynomial rings

33c6b68  Merge branch 'periodic_points_improvement' into sigma_invariants

a410756  31994: added support for fraction fields of polynomial rings

comment:11 Changed 19 months ago by
Pushed a change fixing the random QQbar issue, and fixing the signs.
I also added flattening and unflattening for the families with a parameter  those should work now.
There does seem to be a big bug in the code. This one is correct:
R.<c>=QQ[] P.<x,y>=ProjectiveSpace(R,1) f=DynamicalSystem([x^2+c*y^2,y^2]) f.sigma_invariants(1,return_polynomial=True,chow=True) w^3 + (3)*w^2*t + 2*w^2 + 3*w*t^2 + (4)*w*t + 4*c*w  t^3 + 2*t^2 + (4*c)*t
But this fails:
R.<c>=QQ[] P.<x,y>=ProjectiveSpace(FractionField(R),1) f=DynamicalSystem([x^2+c*y^2,y^2]) f.sigma_invariants(1,return_polynomial=True, chow=True) w  t
Not sure what is going on there.
As for putting the degrees in the first two coordinates, I did that so that the full form of the polynomial could be specified. I think the two degrees plus the list of coefficients with 0's is enough to fully specify the polynomial, so that doing a check of
f.sigma_invariants(1) == g.sigma_invariants(1)
actually tells us if f and g are not conjugate.
comment:12 Changed 19 months ago by
Commit:  a410756fc54563375e4b641ad1e90ccda70a1a74 → d220330d79ea8b1a7e206e31e49989f1b189f03f 

comment:13 Changed 19 months ago by
Latest push should address all the comments except for the last.
I've been looking for the bug in
P.<x,y>=ProjectiveSpace(QQ,1) f=DynamicalSystem([x^2+3*y^2,x*y]) f.sigma_invariants(1,return_polynomial=True, chow=True)
This map has a fixed point at infinity with multiplicity 3, which we try to account for in the second affine chart. However, it only shows up with multiplicity 1 in that affine chart. Not sure how to fix that.
comment:14 followup: 16 Changed 19 months ago by
I think this needs to be deformed as was done in the formal periodic points.
I see four cases
 all periodic points and multipliers are distinct (typical case): runs as normal
 all periodic points distinct, but multipliers not all distinct: chow method works
 periodic points not all distinct, all other multipliers distinct: deform and use normal method
 periodic points not all distinct and multipliers not all distinct: deform + chow method
comment:15 Changed 19 months ago by
Commit:  d220330d79ea8b1a7e206e31e49989f1b189f03f → fc12a328b8853299227173c7e5de4801ae1ebeae 

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
b4246d2  32166: fixed identity matrix return

eaebd33  32166: added test for identity

57a4b39  Merge branch 'affine_preperiodic' into periodic_points_improvement

81d7c97  32166: fixed documentation

a63927e  Merge branch 'affine_preperiodic' into periodic_points_improvement

77660f1  Merge branch 'periodic_points_improvement' into sigma_invariants

008d6db  31994: added deformation

9b5e74f  31944: fixed calls to affine preperiodic model

14c58d3  Merge branch 'periodic_points_improvement' into sigma_invariants

fc12a32  31994: fixed tests

comment:16 Changed 19 months ago by
Replying to bhutz:
I think this needs to be deformed as was done in the formal periodic points.
Deformation added, that example works now.
comment:17 followup: 20 Changed 19 months ago by
I know this is not marked as ready for review yet, but a quick comment.
The valueerror for degree counting only seems to occur for Formal=False.
Also the error should probably read '...and/or deform=True.'
comment:18 Changed 19 months ago by
Commit:  fc12a328b8853299227173c7e5de4801ae1ebeae → 76249f2c8e34852ae1a4a44f7cd301816063826e 

Branch pushed to git repo; I updated commit sha1. New commits:
76249f2  31994: doc fix

comment:19 Changed 19 months ago by
Commit:  76249f2c8e34852ae1a4a44f7cd301816063826e → f7f22a8865b94ea499c33c198bc13edc432622d6 

Branch pushed to git repo; I updated commit sha1. New commits:
f7f22a8  31994: added degree check when formal=True

comment:20 Changed 19 months ago by
comment:21 Changed 19 months ago by
Status:  needs_work → needs_review 

comment:22 Changed 19 months ago by
Status:  needs_review → needs_work 

The functionality is working correctly, but the documentation needs to be updated. The description is still the dimension 1 description.
comment:23 Changed 19 months ago by
Commit:  f7f22a8865b94ea499c33c198bc13edc432622d6 → 063f159f6c1fa82966a3173da2a0558333758fe7 

Branch pushed to git repo; I updated commit sha1. New commits:
f1e1958  31944: fix for subscheme issue

d3ea2be  31944: added check for morphisms

268bc83  31944: fixed if statement

6f2857f  31944: added example for formal preperiodic

f385385  Merge branch 'periodic_points_improvement' into sigma_invariants

063f159  31994: added more documentation

comment:24 Changed 19 months ago by
Status:  needs_work → needs_review 

comment:25 Changed 19 months ago by
Branch:  u/ghEnderWannabe/sigma_invariants → u/bhutz/sigma_invariants 

comment:26 Changed 19 months ago by
Commit:  063f159f6c1fa82966a3173da2a0558333758fe7 → 6186c586af31171f64a1d1c8fb372280a1319ecf 

Please look over my doc changes. Otherwise I think we ready to mark this positive.
New commits:
6186c58  31994: updated docs

comment:28 Changed 19 months ago by
Branch:  u/bhutz/sigma_invariants → 6186c586af31171f64a1d1c8fb372280a1319ecf 

Resolution:  → fixed 
Status:  positive_review → closed 
comment:29 Changed 19 months ago by
Branch:  6186c586af31171f64a1d1c8fb372280a1319ecf → u/bhutz/sigma_invariants 

Resolution:  fixed 
Status:  closed → new 
Random failure:
********************************************************************** File "src/sage/dynamics/arithmetic_dynamics/projective_ds.py", line 4021, in sage.dynamics.arithmetic_dynamics.projective_ds.?.preperiodic_points Failed example: f.preperiodic_points(2, 1, R=K) Expected: [(v : 1), (v : 1)] Got: [(v : 1), (v : 1)] ********************************************************************** 1 item had failures: 1 of 68 in sage.dynamics.arithmetic_dynamics.projective_ds.?.preperiodic_points [1406 tests, 1 failure, 49.93 s]  sage t long randomseed=0 src/sage/dynamics/arithmetic_dynamics/projective_ds.py # 1 doctest failed 
comment:30 Changed 19 months ago by
Branch:  u/bhutz/sigma_invariants → u/ghEnderWannabe/sigma_invariants 

comment:31 Changed 19 months ago by
Commit:  6186c586af31171f64a1d1c8fb372280a1319ecf → abdade36276e7c5c51fc2a818f599c667f0f1627 

Status:  new → needs_review 
comment:32 Changed 19 months ago by
Status:  needs_review → positive_review 

comment:33 Changed 18 months ago by
Status:  positive_review → needs_work 

need to merge in fix for doctest failure in #32322
comment:34 Changed 18 months ago by
Dependencies:  #31944 → #31944, #32322 

comment:35 Changed 18 months ago by
Commit:  abdade36276e7c5c51fc2a818f599c667f0f1627 → 18f87f5d5e36635e6eb4dc50285e1382f17c94c8 

Branch pushed to git repo; I updated commit sha1. New commits:
18f87f5  Merge branch 'u/ghEnderWannabe/sigma_invariants' of git://trac.sagemath.org/sage into sigma_invariants

comment:36 Changed 18 months ago by
Status:  needs_work → needs_review 

comment:37 Changed 18 months ago by
Milestone:  sage9.4 → sage9.5 

comment:38 Changed 18 months ago by
Branch:  u/ghEnderWannabe/sigma_invariants → u/bhutz/sigma_invariants 

comment:39 Changed 18 months ago by
Commit:  18f87f5d5e36635e6eb4dc50285e1382f17c94c8 → aa63aaa62e6dc457ac0db7616592d7d0ca15f64d 

Status:  needs_review → positive_review 
comment:40 Changed 16 months ago by
Branch:  u/bhutz/sigma_invariants → aa63aaa62e6dc457ac0db7616592d7d0ca15f64d 

Resolution:  → fixed 
Status:  positive_review → closed 
Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
31944: added flatenning for periodic, began work on preperiodic
31944: working minimal periodic and preperiodic
31954: initial commit with working code and examples
Merge branch 'hyperplane_transform' into periodic_points_improvement
31944: added computation for formal periodic points
31944: removed changes in tickets 31906 and 31896 from this ticket
31944: initial formal preperiodic points
31944: examples for formal preperiodic points, fixed return scheme for formal preperiodic points
Merge branch 'periodic_points_improvement' into sigma_invariants
31994: added formal parameter