Opened 7 years ago
Closed 7 years ago
#19073 closed enhancement (fixed)
categorial constructions, pushout and coercions (extended) for asymptotic ring and growth groups
Reported by:  Daniel Krenn  Owned by:  

Priority:  major  Milestone:  sage6.10 
Component:  asymptotic expansions  Keywords:  asymptotics 
Cc:  Benjamin Hackl  Merged in:  
Authors:  Daniel Krenn  Reviewers:  Clemens Heuberger 
Report Upstream:  N/A  Work issues:  
Branch:  8a32f1f (Commits, GitHub, GitLab)  Commit:  8a32f1fa6d04cc3364430ece45895069ef7d5352 
Dependencies:  #17716, #18182, #19028, #18223  Stopgaps: 
Description (last modified by )
Extend coercions and deal with pushout constructions.
See also meta ticket #17601.
Change History (34)
comment:1 Changed 7 years ago by
Branch:  → u/dkrenn/asy/groupscoercion 

comment:2 Changed 7 years ago by
Commit:  → a23d36e27626c71270bc645aee281fa061fb5a65 

comment:3 Changed 7 years ago by
Commit:  a23d36e27626c71270bc645aee281fa061fb5a65 → a3b2cc6bf07c385460005aeca3acfc15b08ee82a 

comment:4 Changed 7 years ago by
Description:  modified (diff) 

comment:5 Changed 7 years ago by
Commit:  a3b2cc6bf07c385460005aeca3acfc15b08ee82a → e9acd0ea452a0b410fb9804e68fc6c3e7cda5233 

Branch pushed to git repo; I updated commit sha1. New commits:
19247a5  fix derived classes

dacbfcb  more replacements of __str__ by _repr_

d1356e5  Merge branch 'pushout/functorstr' into u/dakrenn/asy/ringscoercion

27601ba  fix missing docs

e1acc40  improve docs (seealso, links, etc)

98e8860  make doctest coverage 100% (asymptotic_ring)

e9acd0e  cleanup (remove a comment)

comment:6 Changed 7 years ago by
Cc:  Benjamin Hackl added 

comment:7 Changed 7 years ago by
Status:  new → needs_review 

comment:8 Changed 7 years ago by
Dependencies:  #17600, #18930, #18182, #19028, #18587, #18223, #18586 → #17600, #17716, #18930, #18182, #19028, #18587, #18223, #18586 

comment:9 Changed 7 years ago by
Commit:  e9acd0ea452a0b410fb9804e68fc6c3e7cda5233 → 963f9da12b9d8d5441d277556bcfdef94842eddb 

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
58f931d  add asymptotic_expansions index

39621ad  Merge branch 't/17600/asy/growthGroup' into t/19073/asy/groupscoercion

9d6f2da  Merge branch 't/17600/asy/growthGroup' into t/18930/asy/growthGroupfactory

6da5ade  Merge branch 't/18930/asy/growthGroupfactory' into t/17715/asy/asymptoticTerm

2c1c39d  Merge branch 't/17715/asy/asymptoticTerm' into t/17716/asy/asymptoticExpression

41a80a2  Merge branch 't/17716/asy/asymptoticExpression' into t/19073/asy/groupscoercion

ca5da4a  Merge branch 't/18930/asy/growthGroupfactory' into t/18587/asy/growthgroupcartesian

ac80aeb  add growth_group_cartesian to index

96f7101  Merge branch 't/18587/asy/growthgroupcartesian' into t/19028/asy/growthGroupexponential

963f9da  Merge branch 't/19028/asy/growthGroupexponential' into t/19073/asy/groupscoercion

comment:11 Changed 7 years ago by
Component:  symbolics → asymptotic expansions 

comment:12 Changed 7 years ago by
Commit:  963f9da12b9d8d5441d277556bcfdef94842eddb → 8d6de433b27f16c165ed1495e12e6293f147d59a 

Branch pushed to git repo; I updated commit sha1. New commits:
cd17673  Merge tag '6.9.beta6' into t/18182/18182on6.8

3eefe25  correct typo in AUTHORS

5fe52e4  fix doctests since name of cartesian product functor has changed

60b9375  revert changes in base_ring of category_object and adapt doctests

8d6de43  Merge remotetracking branch 'trac/u/dkrenn/18182/pushout' into t/19073/asy/groupscoercion

comment:14 Changed 7 years ago by
Commit:  8d6de433b27f16c165ed1495e12e6293f147d59a → 6180b439d45e4aac2278fc1300101f1aa6ba6800 

comment:15 Changed 7 years ago by
Commit:  6180b439d45e4aac2278fc1300101f1aa6ba6800 → 36e16a307cb5f4e5751d7f3c529539f4b5daa096 

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
538e1e4  doctest for simplifykeyword

e98964b  remove superfluous doctest

5cf2a31  doctests for AsymptoticRing.__init__

dc00f95  improve documentation of _element_constructor_

abb08ff  improve _element_constructor_

78b9e96  Trac #17716: additional doctest

055e35b  Trac #17716: Fix ReSt error

e8e2501  make entry in reference/index

e86db32  Merge branch 'u/dkrenn/asy/asymptoticExpression' of trac.sagemath.org:sage into t/19073/asy/groupscoercion

36e16a3  fix doctests after merge

comment:17 Changed 7 years ago by
Commit:  36e16a307cb5f4e5751d7f3c529539f4b5daa096 → dd82094ee12535fe218a6a1d0d96a8c60b6b3f2d 

Branch pushed to git repo; I updated commit sha1. New commits:
dd82094  fix duplicated docstringparts

comment:18 Changed 7 years ago by
Branch:  u/dkrenn/asy/groupscoercion → u/cheuberg/asy/groupscoercion 

comment:19 Changed 7 years ago by
Commit:  dd82094ee12535fe218a6a1d0d96a8c60b6b3f2d → e2070b1eade3c10b528757d362d63db499d7e5e6 

comment:20 followup: 22 Changed 7 years ago by
Description:  modified (diff) 

Reviewers:  → Clemens Heuberger 
Status:  needs_review → needs_work 
I reviewed this ticket without reviewing its dependency #18182. I have added a few reviewer commits.
Here are some further comments.
growth_group.combine_exceptions
: missing INPUT and OUTPUT blocks Why is the default category now a monoid instead of a group?
GenericGrowthGroup._pushout_
: explain why there is no common canonical parent for objects with parents:
Growth Group QQ^x
andGrowth Group x^QQ
(commutativity of pushouts vs. noncommutativity of cartesian products of growth groups with the same generator?)  What is the role of the lines
if isinstance(other, GenericGrowthGroup): pass
 explain why there is no common canonical parent for objects with parents:
growth_group_cartesian.merge_overlapping
: add more information to docstring: missing INPUT: and OUTPUT: blocks
find_mergedoverlapping_index
:key
is evaluated frequently
_convert_factors_
: removelist
in penultimate line of code.TermWithCoefficientMonoid._element_constructor_
: what is the point of catching and immediately reraising an exception intry: return self.element_class(self, data, coefficient) except: raise
AsymptoticRing.__init__
: why is anAsymptoticring
now a poset?
comment:21 Changed 7 years ago by
Branch:  u/cheuberg/asy/groupscoercion → u/dkrenn/asy/groupscoercion 

comment:22 followup: 28 Changed 7 years ago by
Commit:  e2070b1eade3c10b528757d362d63db499d7e5e6 → b3066794998b177bccbba2e4e50cf2f235a39ad9 

Status:  needs_work → needs_review 
Replying to cheuberg:
I reviewed this ticket without reviewing its dependency #18182. I have added a few reviewer commits.
Crossreview...ok.
growth_group.combine_exceptions
: missing INPUT and OUTPUT blocks
Added.
 Why is the default category now a monoid instead of a group?
A monoid is all what is needed to make the asymptotic ring a ring. Of course usually this will be a group to allow inversions in the ring, but as a minimal requirement, we have Monoids()
GenericGrowthGroup._pushout_
:
 explain why there is no common canonical parent for objects with parents:
Growth Group QQ^x
andGrowth Group x^QQ
(commutativity of pushouts vs. noncommutativity of cartesian products of growth groups with the same generator?)
Documented.
 What is the role of the lines
if isinstance(other, GenericGrowthGroup): pass
elif
forgotten in the line following this. Rewritten completely.
growth_group_cartesian.merge_overlapping
:
 add more information to docstring: missing INPUT: and OUTPUT: blocks
Added and extended.
find_mergedoverlapping_index
:key
is evaluated frequently
Now cached.
_convert_factors_
: removelist
in penultimate line of code.
Done.
TermWithCoefficientMonoid._element_constructor_
: what is the point of catching and immediately reraising an exception intry: return self.element_class(self, data, coefficient) except: raise
No point; changed. (I think this changed at some point and was forgotten)
AsymptoticRing.__init__
: why is anAsymptoticring
now a poset?
Removed (this was planned to be done on #19083).
New commits:
56990b0  Trac #19073, comment 20, 1: add missing INPUT/OUTPUT block of combine_exceptions

f2e0d84  Trac #19073, comment 20, 4: missing INPUT/OUTPUT block of merge_overlapping and extend description

247ab54  Trac #19073, comment 20, 4: cache keys

753f252  Trac #19073, comment 20, 5: remove unnecessary list

2473d02  Trac #19073, comment 20, 6: simplify try/except

2aebbc8  Trac #19073, comment 20, 7: remove Poset category from AsymptoticRing

5c94f32  Trac #19073, comment 20, 3: rewrite first few lines of _pushout_

b306679  Trac #19073, comment 20, 3: document a test in pushout

comment:23 Changed 7 years ago by
Commit:  b3066794998b177bccbba2e4e50cf2f235a39ad9 → 311fc97974e60bd4a96629fd8edef00d026fa19b 

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
bc70cb9  Trac #18182, comment 20, 7: rename CartesianProductPolys > CartesianProductPoly

592a551  Merge branch 'u/dkrenn/coercion/pushout' of trac.sagemath.org:sage into t/19073/asy/groupscoercion

70aa9c4  rename CartesianProductPosets to CartesianProductPoset

f21990d  codesimplify CartesianProduct assignment

8f9a619  add a doctest dealing with coercion while comparing

3b923b7  Merge branch 'u/dkrenn/cat/cartesianproductposets' of trac.sagemath.org:sage into t/18587/asy/growthgroupcartesian

74547e6  fix code after changes by previous merge

23c9a49  Merge branch 't/18587/asy/growthgroupcartesian' into t/19028/asy/growthGroupexponential

09221f0  fixup due to changes in #18587 (coming from #18223)

311fc97  Merge branch 'u/dkrenn/asy/growthGroupexponential' of trac.sagemath.org:sage into t/19073/asy/groupscoercion

comment:25 Changed 7 years ago by
Dependencies:  #17600, #17716, #18930, #18182, #19028, #18587, #18223, #18586 → #17716, #18182, #19028, #18223, #18586 

comment:26 Changed 7 years ago by
Branch:  u/dkrenn/asy/groupscoercion → u/cheuberg/asy/groupscoercion 

comment:27 Changed 7 years ago by
Commit:  311fc97974e60bd4a96629fd8edef00d026fa19b → 1583ffcaa805fe5021fa014dbe1ab99636466e5f 

comment:28 followup: 30 Changed 7 years ago by
Replying to dkrenn:
Replying to cheuberg:
 Why is the default category now a monoid instead of a group?
A monoid is all what is needed to make the asymptotic ring a ring. Of course usually this will be a group to allow inversions in the ring, but as a minimal requirement, we have Monoids()
Ok, this explains why a GenericGrowthGroup
is only a monoid.
The derived classes MonomialGrowthGroup
and ExponentialGrowthGroup
, however, will be groups in many cases.
Perhaps this can be resolved in or after #19083.
GenericGrowthGroup._pushout_
:
 explain why there is no common canonical parent for objects with parents:
Growth Group QQ^x
andGrowth Group x^QQ
(commutativity of pushouts vs. noncommutativity of cartesian products of growth groups with the same generator?)Documented.
I reworded that and added further doctests.
find_mergedoverlapping_index
:key
is evaluated frequentlyNow cached.
However, the helper functions only need the keys, I added a commit to do so.
Please crossreview my changes and add item 2. to the TODO list of #19083 or, alternatively, open a ticket for that.
After that, consider this to be a conditional positive_review
from my side, conditional on #18182.
comment:29 Changed 7 years ago by
Branch:  u/cheuberg/asy/groupscoercion → u/dkrenn/asy/groupscoercion 

comment:30 Changed 7 years ago by
Commit:  1583ffcaa805fe5021fa014dbe1ab99636466e5f → 8a32f1fa6d04cc3364430ece45895069ef7d5352 

Status:  needs_review → positive_review 
Replying to cheuberg:
Replying to dkrenn:
Replying to cheuberg:
 Why is the default category now a monoid instead of a group?
A monoid is all what is needed to make the asymptotic ring a ring. Of course usually this will be a group to allow inversions in the ring, but as a minimal requirement, we have Monoids()
Ok, this explains why a
GenericGrowthGroup
is only a monoid.The derived classes
MonomialGrowthGroup
andExponentialGrowthGroup
, however, will be groups in many cases. Perhaps this can be resolved in or after #19083.
Ok. Added it as a work issue on #19083.
GenericGrowthGroup._pushout_
:
 explain why there is no common canonical parent for objects with parents:
Growth Group QQ^x
andGrowth Group x^QQ
(commutativity of pushouts vs. noncommutativity of cartesian products of growth groups with the same generator?)Documented.
I reworded that and added further doctests.
Corrected PEP8.
find_mergedoverlapping_index
:key
is evaluated frequentlyNow cached.
However, the helper functions only need the keys, I added a commit to do so.
Thanks.
Please crossreview my changes and add item 2. to the TODO list of #19083 or, alternatively, open a ticket for that. After that, consider this to be a conditional
positive_review
from my side, conditional on #18182.
Everything done.
New commits:
8a32f1f  correct PEP8spacings in doctest

comment:31 Changed 7 years ago by
Dependencies:  #17716, #18182, #19028, #18223, #18586 → #17716, #18182, #19028, #18223 

Milestone:  sage6.9 → sage6.10 
Removed dependency on "duplicate" ticket #18586.
comment:32 Changed 7 years ago by
Status:  positive_review → needs_work 

This is probably due to one of the tickets in beta2, probably best to wait for the next release and then fix:
sage t long src/sage/combinat/rigged_configurations/kr_tableaux.py ********************************************************************** File "src/sage/combinat/rigged_configurations/kr_tableaux.py", line 1671, in sage.combinat.rigged_configurations.kr_tableaux.KRTableauxTypeDTri2Element.e Failed example: KRT.module_generators[0].e(0) Exception raised: Traceback (most recent call last): File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/doctest/forker.py", line 496, in _run self.compile_and_execute(example, compiler, test.globs) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/doctest/forker.py", line 858, in compile_and_execute exec(compiled, globs) File "<doctest sage.combinat.rigged_configurations.kr_tableaux.KRTableauxTypeDTri2Element.e[1]>", line 1, in <module> KRT.module_generators[Integer(0)].e(Integer(0)) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/rigged_configurations/kr_tableaux.py", line 1680, in e ret = ret.to_virtual_configuration().e(0) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/rigged_configurations/rigged_configuration_element.py", line 1327, in e ret = self.to_tensor_product_of_kirillov_reshetikhin_tableaux().e(a) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/crystals/tensor_product.py", line 1258, in e position = self.positions_of_unmatched_plus(i) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/crystals/tensor_product.py", line 1400, in positions_of_unmatched_plus l = self.positions_of_unmatched_minus(i, dual=True, reverse=True) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/crystals/tensor_product.py", line 1380, in positions_of_unmatched_minus plus = self[j].epsilon(i) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/rigged_configurations/kr_tableaux.py", line 1532, in epsilon return KirillovReshetikhinTableauxElement.epsilon(self, i) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/rigged_configurations/kr_tableaux.py", line 1373, in epsilon return self.to_kirillov_reshetikhin_crystal().epsilon0() File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/rigged_configurations/kr_tableaux.py", line 1160, in to_kirillov_reshetikhin_crystal return self.parent().kirillov_reshetikhin_crystal()(self) File "sage/structure/parent.pyx", line 1098, in sage.structure.parent.Parent.__call__ (/mnt/disk/home/buildslavesage/slave/sage_git/build/src/build/cythonized/sage/structure/parent.c:9821) return mor._call_(x) File "sage/structure/coerce_maps.pyx", line 109, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (/mnt/disk/home/buildslavesage/slave/sage_git/build/src/build/cythonized/sage/structure/coerce_maps.c:4543) raise File "sage/structure/coerce_maps.pyx", line 104, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_ (/mnt/disk/home/buildslavesage/slave/sage_git/build/src/build/cythonized/sage/structure/coerce_maps.c:4436) return C._element_constructor(x) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/crystals/kirillov_reshetikhin.py", line 3024, in _element_constructor_ return self.module_generator().f_string(f_str) File "/mnt/disk/home/buildslavesage/slave/sage_git/build/local/lib/python2.7/sitepackages/sage/combinat/crystals/kirillov_reshetikhin.py", line 543, in module_generator return [ b for b in self.module_generators if b.weight() == weight][0] IndexError: list index out of range **********************************************************************
comment:33 Changed 7 years ago by
Status:  needs_work → positive_review 

Nevermind was casued by something else
comment:34 Changed 7 years ago by
Branch:  u/dkrenn/asy/groupscoercion → 8a32f1fa6d04cc3364430ece45895069ef7d5352 

Resolution:  → fixed 
Status:  positive_review → closed 
Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
new element constructor for cartesian products
combine_exceptions function
fix a bug in element_constructor and rewrite it
rewrite repr of term
correct a bug in term constructor
extend has coercion
make asymptotic ring a poset (Part I)
variable_names
more cleanup and using generalizing methods for cartesian product
construction and functor and doctests