Opened 17 months ago
Closed 17 months ago
#32089 closed enhancement (fixed)
ConditionSet
Reported by:  Matthias Köppe  Owned by:  

Priority:  major  Milestone:  sage9.4 
Component:  symbolics  Keywords:  
Cc:  Travis Scrimshaw, Eric Gourgoulhon  Merged in:  
Authors:  Matthias Koeppe  Reviewers:  Travis Scrimshaw 
Report Upstream:  N/A  Work issues:  
Branch:  f135a05 (Commits, GitHub, GitLab)  Commit:  f135a05bd39d633e8ce5ed45cfe24d0eaf10bf5d 
Dependencies:  #32013, #32015  Stopgaps: 
Description (last modified by )
(from #24176).
We define a class ConditionSet
for subsets of elements given by a logical "and" of finitely many predicates.
If the given predicates (condition) are symbolic, a ConditionSet
can be converted to a SymPy ConditionSet
; the _sympy_
method falls back to creating a SageSet
wrapper otherwise.
As an application, we provide Chart
and RealChart
with a method codomain
.
Change History (48)
comment:1 Changed 17 months ago by
Authors:  → Matthias Koeppe 

Description:  modified (diff) 
Summary:  ConditionSet_callable_symbolic_expression → ConditionSet, ConditionSet_callable_symbolic_expression 
comment:2 Changed 17 months ago by
Branch:  → u/mkoeppe/conditionset__conditionset_callable_symbolic_expression 

comment:3 Changed 17 months ago by
Cc:  Travis Scrimshaw Eric Gourgoulhon added 

Commit:  → 2d5d4b9550eebe91aaa4f46a46a2e07a109c0e9a 
comment:4 Changed 17 months ago by
Commit:  2d5d4b9550eebe91aaa4f46a46a2e07a109c0e9a → 8c2cce8eb5aef51c981ef0bf116c3193603ab712 

Branch pushed to git repo; I updated commit sha1. New commits:
8c2cce8  ConditionSet: Complete basic implementation

comment:5 Changed 17 months ago by
Commit:  8c2cce8eb5aef51c981ef0bf116c3193603ab712 → 126773766f68934ef1f7f99836c837ca2284a63e 

Branch pushed to git repo; I updated commit sha1. New commits:
1267737  ConditionSet: Add example

comment:7 Changed 17 months ago by
Dependencies:  #32013 → #31931, #32013 

comment:8 Changed 17 months ago by
Commit:  126773766f68934ef1f7f99836c837ca2284a63e → 44f72930283a95afb6aa860fa905f57d28e4d513 

Branch pushed to git repo; I updated commit sha1. Last 10 new commits:
6e5cac6  sage.interfaces.sympy_wrapper, Sets.ParentMethods._sympy_: New

3cac256  sage.interfaces.sympy_wrapper: Add doctests

eef604e  SageSet: Finish docstrings; handle symbolic _contains

2baae58  Sets.ParentMethods._sympy_: Call sympy_init

153b3e5  Merge #31938

c06c965  sage.interfaces.sympy_wrapper.SageSet: Add another doctest

f535127  Merge #31938

32cdd5c  Merge #31877

36e742d  Merge #31931

44f7293  ConditionSet: Accept several predicates

comment:9 Changed 17 months ago by
Commit:  44f72930283a95afb6aa860fa905f57d28e4d513 → 720bed24066b1adf00935238edf14ab88c8d4e45 

comment:10 Changed 17 months ago by
Description:  modified (diff) 

comment:11 Changed 17 months ago by
Commit:  720bed24066b1adf00935238edf14ab88c8d4e45 → 1c13f2d16eb2afd3bd0ff6b722aca5035bf1d81b 

comment:12 Changed 17 months ago by
Commit:  1c13f2d16eb2afd3bd0ff6b722aca5035bf1d81b → b31b2c7a3116336b6cc9e2cd0744b7ddec4ec0ee 

Branch pushed to git repo; I updated commit sha1. New commits:
b31b2c7  ConditionSet: Support generator notation, add examples

comment:13 Changed 17 months ago by
Dependencies:  #31931, #32013 → #31931, #32013, #32015 

comment:14 Changed 17 months ago by
Commit:  b31b2c7a3116336b6cc9e2cd0744b7ddec4ec0ee → bb67e1139268b0b5cc69ad8af3959be798d48258 

comment:15 Changed 17 months ago by
Commit:  bb67e1139268b0b5cc69ad8af3959be798d48258 → eb975f37a99b8390a1fc7f042f47982d5a6704f5 

Branch pushed to git repo; I updated commit sha1. New commits:
eb975f3  ConditionSet: Remove unnecessary subclass, add examples

comment:16 Changed 17 months ago by
Commit:  eb975f37a99b8390a1fc7f042f47982d5a6704f5 → 468f621faec4ae084e70e3a4ae6fbe16275fe653 

comment:17 Changed 17 months ago by
Description:  modified (diff) 

Status:  new → needs_review 
Summary:  ConditionSet, ConditionSet_callable_symbolic_expression → ConditionSet 
comment:18 Changed 17 months ago by
Commit:  468f621faec4ae084e70e3a4ae6fbe16275fe653 → a745649024059791d35da56b1376fc0f0ef6e0c0 

Branch pushed to git repo; I updated commit sha1. New commits:
a745649  Chart.codomain, _restrict_set: Handle set/frozenset as ANDs in anticipation of #32102

comment:19 followups: 20 21 Changed 17 months ago by
Note that this is duplicating some of the framework in sage/combinat/combinat.py
with FilteredCombinatorialClass
.
What do we want the intersection of two condition sets to be? Mainly, do we want the generic intersection? It could be another condition set object naturally, which would be more direct for operations such as containment check or iteration.
comment:20 followup: 22 Changed 17 months ago by
Replying to tscrim:
Note that this is duplicating some of the framework in
sage/combinat/combinat.py
withFilteredCombinatorialClass
.
Thanks for the pointer! I was not aware of this. But it looks to me like this whole *CombinatorialClass
business is deprecated?
comment:21 followup: 23 Changed 17 months ago by
Replying to tscrim:
What do we want the intersection of two condition sets to be? Mainly, do we want the generic intersection? It could be another condition set object naturally, which would be more direct for operations such as containment check or iteration.
A specialized intersection
method is of course a natural candidate to be added in a followup ticket. If for nothing else, certainly for more succinct printing.
comment:22 Changed 17 months ago by
Replying to mkoeppe:
Replying to tscrim:
Note that this is duplicating some of the framework in
sage/combinat/combinat.py
withFilteredCombinatorialClass
.Thanks for the pointer! I was not aware of this. But it looks to me like this whole
*CombinatorialClass
business is deprecated?
Indeed, but some of it is still used without a true replacement ready IIRC.
comment:23 Changed 17 months ago by
Replying to mkoeppe:
Replying to tscrim:
What do we want the intersection of two condition sets to be? Mainly, do we want the generic intersection? It could be another condition set object naturally, which would be more direct for operations such as containment check or iteration.
A specialized
intersection
method is of course a natural candidate to be added in a followup ticket. If for nothing else, certainly for more succinct printing.
Why can't we do it on this ticket? It seems simple enough to check if other
is a ConditionSet
, and then just create a new such instance with the concatenation of the conditions.
comment:24 Changed 17 months ago by
Commit:  a745649024059791d35da56b1376fc0f0ef6e0c0 → 28a51bb362092bfd69b12b4761070e1a0f73ca15 

comment:26 Changed 17 months ago by
Commit:  28a51bb362092bfd69b12b4761070e1a0f73ca15 → ac561ae53e341043a75609f1f0ccec86b8983daa 

Branch pushed to git repo; I updated commit sha1. New commits:
ac561ae  Chart._restrict_set: Update doctest output

comment:27 Changed 17 months ago by
Reviewers:  → Travis Scrimshaw 

Status:  needs_review → positive_review 
Thank you. LGTM (modulo the doctest failure for the dependency).
comment:28 Changed 17 months ago by
Commit:  ac561ae53e341043a75609f1f0ccec86b8983daa → 4844cd6efb0763e340d4171a1660500d07851722 

Status:  positive_review → needs_review 
comment:29 Changed 17 months ago by
Dependencies:  #31931, #32013, #32015 → #32013, #32015 

comment:30 Changed 17 months ago by
Status:  needs_review → positive_review 

comment:32 Changed 17 months ago by
Commit:  4844cd6efb0763e340d4171a1660500d07851722 → 82f12e2420069109ff25311057516cc4d409e848 

Status:  positive_review → needs_review 
Branch pushed to git repo; I updated commit sha1 and set ticket back to needs_review. Last 10 new commits:
2a23cb5  Unicode symbol 2202 (partial) for the text display of coordinate frames

5d096f1  fstring for unicode_symbol in TensorProductFunctor and SignedTensorProductFunctor

76c2fd5  Use Unicode symbol for the Riemann sphere example

5167e6c  Use Unicode symbol for default text display of RealLine

332410b  Use unicode_otimes in TensorProductFunctor and SignedTensorProductFunctor

f5d15d2  Merge branch 'public/manifolds/unicode_art' of git://trac.sagemath.org/sage into Sage 9.4.beta4.

d87d09b  #30473: fix doctest error in DiffMap.pullback

f2ae50e  #30473: fix doctests outside sage/manifolds and sage/tensor/modules

55240bb  Merge #30473

82f12e2  Merge #32013

comment:34 Changed 17 months ago by
Status:  needs_review → needs_work 

Unfortunately the sort order of the symbolic conditions is not stable. I'll have to fix this
comment:35 Changed 17 months ago by
Commit:  82f12e2420069109ff25311057516cc4d409e848 → 69d045a4556bc20f6b3d6aaf65c0e1241ecfbdc2 

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

Also the doctests that tried to use (ZZ^2).rename("ZZ^2")
for cosmetic reasons were not stable. I have removed this complication.
comment:37 Changed 17 months ago by
Status:  needs_review → positive_review 

For future reference, you can simply call X.rename()
to revert back to the default name. This can be used to make the doctest stable.
comment:39 Changed 17 months ago by
Status:  positive_review → needs_work 

[docpdf] Underfull \hbox (badness 10000) in paragraph at lines 58895891 [docpdf] \T1/txtt/m/sl/10 set.Set_boolean_operators\T1/qtm/m/n/10 , \T1/txtt/m/sl/10 sag [docpdf] e.sets.set.Set_add_sub_operators\T1/qtm/m/n/10 , [][]\T1/txtt/m/n/10 sage.struc [docpdf] ture. [docpdf] ! Missing $ inserted. [docpdf] <inserted text> [docpdf] $ [docpdf] l.5923 ...us{}even at 0x...\PYGZgt{}(x) \PYGZcb{}} [docpdf] [docpdf] ? [docpdf] ! Emergency stop.
comment:40 Changed 17 months ago by
Commit:  69d045a4556bc20f6b3d6aaf65c0e1241ecfbdc2 → 1eb270a5e34e0ae634e73054d644499f10c16779 

comment:41 Changed 17 months ago by
Status:  needs_work → needs_review 

comment:44 Changed 17 months ago by
Commit:  1eb270a5e34e0ae634e73054d644499f10c16779 → 141ecde3a8382635148f88aa8f5a736fd2f29a95 

Status:  positive_review → needs_review 
Branch pushed to git repo; I updated commit sha1 and set ticket back to needs_review. New commits:
2682469  src/sage/interfaces/sympy_wrapper.py: Use Family, not Set, in doctests to make sure that the SageSet wrapper is actually used

753babb  Set_object_enumerated._sympy_: Translate empty sets to EmptySet

141ecde  Merge #32015

comment:45 Changed 17 months ago by
Status:  needs_review → positive_review 

comment:46 Changed 17 months ago by
Commit:  141ecde3a8382635148f88aa8f5a736fd2f29a95 → f135a05bd39d633e8ce5ed45cfe24d0eaf10bf5d 

Status:  positive_review → needs_review 
Branch pushed to git repo; I updated commit sha1 and set ticket back to needs_review. Last 10 new commits:
f85e710  Chart: in the description of the argument coord_restrictions, replace all instances of 'restrictions' by 'coord_restrictions'

80f6195  Chart, RealChart: In class docstring, order arguments as they appear in __classcall__/__init__

a39e6fc  DiffChart, RealDiffChart: In class docstring, order arguments as they appear in __classcall__/__init__; add description of argument coord_restrictions

cdf20b0  TopologicalManifold.chart: Add description of argument coord_restrictions

741fd2e  TopologicalManifold.chart: Add an example of using coord_restrictions

bf62543  Merge branch 't/32089/conditionset__conditionset_callable_symbolic_expression' into t/32009/eliminate_direct_use_of_the_chart__domain_attribute

141ccb5  Merge #32009

c89c697  Merge #32102

451f5cf  Sets.ParentMethods: Update doctest

f135a05  Merge #32015

comment:47 Changed 17 months ago by
Status:  needs_review → positive_review 

comment:48 Changed 17 months ago by
Branch:  u/mkoeppe/conditionset__conditionset_callable_symbolic_expression → f135a05bd39d633e8ce5ed45cfe24d0eaf10bf5d 

Resolution:  → fixed 
Status:  positive_review → closed 
Last 10 new commits:
InternalRealInterval, RealSet: Remove extra whitespace in latex, add documentation
PiecewiseFunction: Adjust doctests for changed RealSet repr
src/sage/functions/piecewise.py: Add coding header
Merge #31880
Merge #31877
RealSet: Inherit from Set_base, Set_boolean_operators, Set_add_sub_operators
RealSet.symmetric_difference: New
Set_base._test_as_set_object: Skip _test_pickling
Merge #32013
sage.sets.condition_set: New