-
-
Notifications
You must be signed in to change notification settings - Fork 480
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve face iterator for simple/simplicial polytopes #30040
Comments
New commits:
|
Branch: public/30040 |
Commit: |
comment:4
Needs rebase. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Changed branch from public/30040 to public/30040-reb |
New commits:
|
comment:11
Typo: Bikeshedding: Personally, I find I feel like #29676 and #29681 are more natural as dependencies of this ticket given their changes, but that is not a strong opinion. I am happy to do the review of those tickets as well. Also, beyond these to things above, this ticket LGTM. |
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:13
|
comment:14
Actually, there is a mistake. To use the coatom representation to a mark a face as visited will work for polyhedra, but does require the uniqueness of the coatom representation. So this will not work for simplicial complexes. |
comment:15
Never mind. I should have read closely and rethought. The atom-representation is not unique. This is the entire point of worrying about the coatom representation. It's not because it is shorter, but because this is the only thing that will work for simplicial complexes. |
comment:25
merge conflict |
Branch pushed to git repo; I updated commit sha1. New commits:
|
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:28
Tests still pass. It really appears to be a question in what order you merge. |
Branch pushed to git repo; I updated commit sha1 and set ticket back to needs_review. This was a forced push. Last 10 new commits:
|
comment:30
Rebased. |
Changed branch from public/30040-reb2 to |
So far the face iterator for polyhedra assumes the diamond property of the lattice only. The special case of simple/simplicial polytopes is not exploited. In this case all intervals not containing zero of the lattice are boolean (for simplicial polytopes we use the dual algorithm).
We alter the algorithm to work for lattices where every interval not containing zero is a boolean sublattice. We may even drop any further conditions on the lattice. So we may apply the algorithm to lattices, where some "edges" have only one atom.
Thus the algorithm can in principle be applied to simplicial complexes now in dual mode ("edges" with a single atom correspond to "ridges" only contained in one maximal face). The key observations are:
To check whether an intersection of faces is zero, we check whether the atom-representation is zero. Although not unique (in case the diamond property is relaxed), it works to distinguish from zero.
To intersect we now additionally unite the coatom representation. This gives the correct representation of the new face unless the intersection is zero.
An intersection of two facets has always codimension 1, if not empty (they contain a common atom and are thus contained in a common boolean sublattice).
To mark a face as visited, we save its coatom representation in
visited_all_coatom_rep
.To check whether we have seen a face already, we check containment of the coatom representation.
This algorithm performs much better and is also asymptotically better.
Before this ticket:
With this ticket:
Depends on #29676
Depends on #29681
Depends on #30428
Depends on #30429
Depends on #30458
CC: @jplab @LaisRast @tscrim
Component: geometry
Keywords: face iterator, simple, simplicial, polytopes
Author: Jonathan Kliem
Branch/Commit:
63b7bd6
Reviewer: Travis Scrimshaw
Issue created by migration from https://trac.sagemath.org/ticket/30040
The text was updated successfully, but these errors were encountered: