Opened 4 years ago
Last modified 3 years ago
#26363 closed defect
Polyhedron_normaliz.save — at Version 6
Reported by: | Matthias Köppe | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | sage-9.1 |
Component: | geometry | Keywords: | |
Cc: | Jean-Philippe Labbé, Winfried Bruns, Travis Scrimshaw, gh-kliem | Merged in: | |
Authors: | Reviewers: | ||
Report Upstream: | N/A | Work issues: | |
Branch: | Commit: | ||
Dependencies: | #28639 | Stopgaps: |
Description (last modified by )
sage: P = polytopes.dodecahedron(backend='normaliz') sage: P A 3-dimensional polyhedron in (Number Field in sqrt5 with defining polynomial x^2 - 5)^3 defined as the convex hull of 20 vertices sage: P.save('dodecahedron.sobj') TypeError: can't pickle PyCapsule objects
We fix this by removing the cone with __getstate__
on pickling.
On unpickling we use __setstate__
and _cone_from_Vrepresentation_and_Hrepresentation
from #28639 to restore the cone.
Special care has to be taken in the following cases:
- no inequalities (the cone can only be initialized from Vrep),
- no vertices and rays (the cone can only be initialized from Hrep),
- multiple lines (they are being recomputed and there is no guarantee that they appear in the same order).
Change History (6)
comment:1 Changed 4 years ago by
Description: | modified (diff) |
---|
comment:2 Changed 3 years ago by
comment:3 Changed 3 years ago by
Cc: | gh-kliem added |
---|
comment:4 Changed 3 years ago by
I think I know what to do about it.
- As mentioned one can just remove the cone on pickling. Then the loaded object is just as good as changing backend back and forth (and changing backend to normaliz should also work and still give us a cone or a way to retrive the cone).
- Next step would be do allow initialization of a cone from
Vrepresentation
andHrepresentation
. This works by homogenization of the input and explicitly giving a dehomogenization (this is the only way that Normaliz accepts precomputed data).
Note: I'm not proposing to allow to give both representations to normaliz by the user, but when changing fields or loading a stored object I think we should trust them to be correct.
- Once this is done, one can set up normaliz cone to be a lazy attribute.
comment:5 Changed 3 years ago by
Dependencies: | → #28639 |
---|
In #28639 I will implement a method that generates the cone from both Vrep and Hrep (recomputing the lines, but thats ok I guess). I have tested this with a few polyhedra, but I have no idea, which examples can be tricky.
comment:6 Changed 3 years ago by
Description: | modified (diff) |
---|---|
Milestone: | sage-8.4 → sage-9.0 |
One could define in
Polyhedron_normaliz
:This constructs an object just as
(but saving computed results)
However, one would need a method to recover
_normaliz_cone
(this method is needed anyway, to make the second thing work).