-
Notifications
You must be signed in to change notification settings - Fork 2
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
(Special) Orthogonal / Unitary / Euclidean groups #17
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #17 +/- ##
==========================================
- Coverage 99.20% 98.53% -0.67%
==========================================
Files 13 19 +6
Lines 756 1095 +339
==========================================
+ Hits 750 1079 +329
- Misses 6 16 +10 ☔ View full report in Codecov by Sentry. |
Status update 1: In theory SE(n) is defined, in practice I am not able to dispatch on the new const. Hence the constructor still falls back to calling the general show (of semidirect product) @mateuszbaran can you maybe take a look? After an hour of trying I am a bit out of ideas what is wrong with my constant |
I've fixed the issue with SpecialEuclideanGroup alias 🙂 |
Nice. I would not have noticed the tuple necessary during the rest of the year. You changed one . to a map. Should I do that for the rest as well? |
Oh and sorry for the capitalisation foo – Mac OS does not distinguish that on files when loading them … super annoying. |
I generally prefer
No problem, that was an easy fix 🙂 |
…eGroups.jl into kellertuer/SOn-and-SEn
The main work today was a bit of structure, since now one of my main worries already works – So I am confident that this should not be too complicated – and am quite happy with how semidirect turned out. |
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…eGroups.jl into kellertuer/SOn-and-SEn
All dummies are there, now the rest is mainly getting all functions from the test suite implemented and tested. |
…ally needed. Starts transferring xp/log from Manifolds.jl for these.
I think I understand the problem of the last 3 tests failing: the Should we maybe experiment first here in edit: For the commit below this comment I did a proof-of-concept “misusing” the |
I think your |
Then we should maybe aim to get that consistent to a Besides that I then just have to figure out where the |
What's actually inconsistent? Which methods behave differently? |
If I just “pass on” to Feel free to experiment with the definitions in the extension yourself – some of them seem to not yet “write back”, so they might have to still return views I think. |
If you pass on to
|
I see, then until now it did not matter whether |
The failing tests are for the |
Sure, the two methods called (exp/log without a point) they allocate and call the mutating ones. For me it looks like they are because the numbers are the same as for the case where AbstractMatrix did not “write back” the application of the action. (for exp/log which internally use 2 x compose and 1 x apply). The tests afterwards that directly call the mutating functions just check that these give the same results as the allocating ones, to they produce the same (wrong) results currently) |
If the output wasn't mutable, you'd get a runtime error or uninitialized memory, not a somewhat reasonably looking answer like I see. I'm 99% sure it's an unrelated logic error. |
So for AbstractMatrix the problem was that there was a That does not result in an error just that the in-place computation is done “in the wrong place” and hence never written back. Maybe something like that is also currently happen, at least the numbers are the same wrong ones as in the one that I fixed before. |
julia> using Manifolds, RecursiveArrayTools
julia> M = ProductManifold(Sphere(2), Sphere(3))
ProductManifold with 2 submanifolds:
Sphere(2, ℝ)
Sphere(3, ℝ)
julia> p = rand(M)
([-0.893222710741945, -0.008594280645648567, -0.4495323429465287], [0.6752061658308836, 0.005200949448816773, -0.2518961443382168, 0.6932661222188261])
julia> scp_a, scp_b = submanifold_components(M, p)
([-0.893222710741945, -0.008594280645648567, -0.4495323429465287], [0.6752061658308836, 0.005200949448816773, -0.2518961443382168, 0.6932661222188261])
julia> scp_a .= 0
3-element Vector{Float64}:
0.0
0.0
0.0
julia> scp_b .= 0
4-element Vector{Float64}:
0.0
0.0
0.0
0.0
julia> p
([0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]) |
Then I have zero idea where even to start to pin down that error. For the abstract matrix case it took me 3-4 hours to dive into the code, so I will do that then Wednesday probably again for ArrayPartition. From outside it looks like the same error because it is the same numbers as if apply was not applied. If it is not – then that is for some other reason that is looks like that. But I can not dive into that today. |
Step (1) I found a problem in Now Left on Partition works |
…get ManifoldsBase finished.
Found it. I was not clever enough to provide a correct Lie algebra tangent vector 🙄 But now finally tests run fine, so only reading the docs, and improving test coverage (once ManifoldsBase.jl 1.0 is available and Manifolds.jl has been adapted to that) are left to do. This PR is finally feature complete. |
…sation for SE(n) obsolete and reduces code duplication.
Nice, it's great that you've managed to figure it out 👍 |
This PR only misses the code coverage check. For that we need both
|
This PR aims to provide the special orthogonal group and the first concrete semidirect product: Special Euclidean, since the complex case is similar, this will also cover the special unitary case.
🛣️🗺️
OrthogonalGroup
SpecialOrthogonalGroup
SpecialEuclideanGroup
UnitrayGroup
SpecialUnitaryGroup
exp(G, Id, X)
toexp(G,X)
and similarlylog(G, Ig, g)
tolog(G, g)