Opened 11 months ago

Last modified 11 months ago

#23813 needs_work enhancement

Implement matrix action on polynomial scheme morphisms

Reported by: atowsley Owned by:
Priority: major Milestone: sage-8.1
Component: algebraic geometry Keywords: matrix action, scheme morphism
Cc: bhutz, paulfili Merged in:
Authors: Adam Towsley Reviewers: Ben Hutz, Paul Fili
Report Upstream: N/A Work issues:
Branch: u/paulfili/matrix_action_23813 (Commits) Commit: 6d2c4522cefcf065fca8121355fba558cfe0954c
Dependencies: #23497 Stopgaps:

Description

Created a left and right action by matrices on affine and projective polynomial scheme morphisms. The following examples now works:

sage: P.<x,y> = ProjectiveSpace(ZZ, 1)
sage: H = Hom(P,P)
sage: f = H([x^2 + y^2, y^2])
sage: matrix([[1,2], [0,1]]) * f
sage: f* matrix([[1,2], [0,1]]) 

Additionally, added conjugation by a matrix for affine dynamical systems.

Change History (19)

comment:1 Changed 11 months ago by atowsley

  • Branch set to u/atowsley/matrix_action_23813
  • Commit set to 1d8a9b63c1b5671904ff9a92684980b9bdf511bd
  • Status changed from new to needs_review

Last 10 new commits:

79378c3Merge branch 8.1.beta3 into t/23497/arith_dyn
80ff2e623497: some fixes from review
fdf726523497: doc formatting INPUT/OUTPUT
cc5010823497: use __classcall_private__
4bbdcdeFixing things with __classcall_private__.
7408d79Cleaning up the doc and improving the code.
d00cea223497: a couple minor fixes
300a3b1Merge branch 8.1.beta4 into t/23497/arith_dyn-23497
bdbf658Fixing typo in doctest.
1d8a9b623813 Implemented matrix actions on scheme morphisms

comment:2 Changed 11 months ago by bhutz

  • Reviewers set to Ben Hutz
  • Status changed from needs_review to needs_work

Here are some comments for the code syntax

  • Examples:: -> EXAMPLES::
  • blank line after EXAMPELS in init
  • isinstance(, ) #space between args
  • all functions should have one line description before examples
  • def funct(, ) #space between parameters
  • blank line at end of action file

Now some issues from functionality testing

endomorphisms do not remain endomorphisms

P.<x, y> = ProjectiveSpace(QQ, 1)
H = Hom(P, P)
f = H([x^2 + y^2, y^2])
m = matrix([[1,1], [0,1]])
f.is_endomorphism(),(m*f).is_endomorphism(), (f*m).is_endomorphism()

Affine scheme morhisms don't have the action function

P.<x, y> = AffineSpace(QQ, 2)
H = Hom(P, P)
f = H([x^2 + y^2, y^2])
m = matrix([[1,1,1], [0,1,0],[1,0,0]])
f*m, m*f

I think it would helpful to separate the errors

P.<x, y> = ProjectiveSpace(QQ, 1)
H = Hom(P, P)
f = H([x^2 + y^2, y^2])
m = matrix([[1]])
f.as_dynamical_system().conjugate(m)

When the matrix ring is contained in the morphism base ring it can't work out the parent

P.<x, y> = ProjectiveSpace(CC, 1)
H = Hom(P, P)
f = H([x^2 + y^2, y^2])
m = matrix(QQ,[[1,1], [1,0]])
m*f

even more troubling

P.<x, y> = ProjectiveSpace(RR, 1)
H = Hom(P, P)
f = H([x^2 + RR(sqrt(2))*y^2, y^2])
m = matrix(QQ,[[1,1], [1,0]])
m*f

Acting on a dynamical system gives back a projective morphism instead of a dynamical system

P.<x, y> = ProjectiveSpace(QQ, 1)
H = Hom(P, P)
f = H([x^2 + y^2, y^2])
m = matrix([[1,1], [1,0]])
fd=f.as_dynamical_system()
m*fd

comment:3 Changed 11 months ago by git

  • Commit changed from 1d8a9b63c1b5671904ff9a92684980b9bdf511bd to 52c966ffaab05c800011763772f3a0675ed3e50e

Branch pushed to git repo; I updated commit sha1. New commits:

52c966f23813 Fixes from review by bhutz

comment:4 Changed 11 months ago by atowsley

  • Status changed from needs_work to needs_review

comment:5 Changed 11 months ago by git

  • Commit changed from 52c966ffaab05c800011763772f3a0675ed3e50e to 4eefffc45543cec5625c8063b78110dc50ba6d21

Branch pushed to git repo; I updated commit sha1. New commits:

4eefffc23813 Added matrix actions for affine morphisms

comment:6 Changed 11 months ago by bhutz

Most everything seems fixed, except here is another issue with affines. I think the issue may actually be in dehomogenize().

P.<x, y> = AffineSpace(QQ, 2)
P2.<u,v,w> = AffineSpace(QQ,3)
H = Hom(P2, P)
f = H([u^2 + v^2, w^2])
m = matrix([[1,1,1], [1,0,1],[0,0,1]])
m*f

comment:7 Changed 11 months ago by git

  • Commit changed from 4eefffc45543cec5625c8063b78110dc50ba6d21 to 86ab06aeee2ad614da02d28e8ba7f49c5b7e2fe7

Branch pushed to git repo; I updated commit sha1. New commits:

86ab06a23813 fixed dehomogenize

comment:8 Changed 11 months ago by paulfili

  • Reviewers changed from Ben Hutz to Ben Hutz, Paul Fili

comment:9 Changed 11 months ago by git

  • Commit changed from 86ab06aeee2ad614da02d28e8ba7f49c5b7e2fe7 to 3ebecc9f11cca4837f69839f43b5d9d2fd8c342e

Branch pushed to git repo; I updated commit sha1. New commits:

3ebecc923813 Added examples, fixed dehomogenize again.

comment:10 Changed 11 months ago by paulfili

  • Status changed from needs_review to positive_review

comment:11 Changed 11 months ago by bhutz

  • Status changed from positive_review to needs_work

merge conflict

comment:12 Changed 11 months ago by bhutz

  • Branch changed from u/atowsley/matrix_action_23813 to u/bhutz/matrix_action_23813

comment:13 Changed 11 months ago by bhutz

  • Commit changed from 3ebecc9f11cca4837f69839f43b5d9d2fd8c342e to a4ee1486ddd5d50356b28296eb4132134cb1cbb1
  • Status changed from needs_work to needs_review

fixed. please check that i didn't break anything.


New commits:

2eecc68Merge branch 8.1.beta5 into t/23497/arith_dyn-23497
a4ee148Merge branch 't/23497/arith_dyn-23497' into t/23813/matrix_action_23813

comment:14 Changed 11 months ago by paulfili

  • Branch changed from u/bhutz/matrix_action_23813 to u/paulfili/matrix_action_23813

comment:15 Changed 11 months ago by paulfili

  • Commit changed from a4ee1486ddd5d50356b28296eb4132134cb1cbb1 to 6d2c4522cefcf065fca8121355fba558cfe0954c
  • Status changed from needs_review to needs_work

I added a "minimal" option that finds the minimal field of definition. I haven't had a chance to test it much yet, or add a doctest illustrating the functionality. Can you guys check it out and see if it works as desired?


New commits:

6d2c452Added minimal field functionality

comment:16 Changed 11 months ago by bhutz

merge conflict

comment:17 Changed 11 months ago by bhutz

I didn't see a new commit, but the conflict seems to be worked out. However, the code doesn't work

sage: K.<w>=QuadraticField(5)
sage: P.<x, y> = ProjectiveSpace(K, 1)
sage: f = DynamicalSystem([x^2 + 2*y^2, y^2])
sage: m = matrix(QQ,[[1,1], [1,0]])
sage: f.conjugate(m,minimal=True)
NameError: global name 'number_field_elements_from_algebraics' is not defined

I think this is probably better as a separate function as I can see more uses for this. Then conjugate can call that function based on the minimal parameter.

I'm also tempted to separate that out from matrix actions and make it its own ticket. What do you think?

comment:18 Changed 11 months ago by paulfili

Sure, we can make a new ticket with this functionality. I'll check what's going wrong as soon as I can, the examples I ran worked somehow.

comment:19 Changed 11 months ago by atowsley

I agree that this should probably be a new ticket since it can be used in other situations as well. I'll let Paul separate out the code and then I'll rerun the tests on this ticket.

Note: See TracTickets for help on using tickets.