Skip to content
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

Power, Product, and semidirect product manifolds #14

Merged
merged 44 commits into from
Nov 30, 2024

Conversation

kellertuer
Copy link
Member

@kellertuer kellertuer commented Nov 4, 2024

⛳️

Work out the three meta Lie groups: power, product, semi-direct product

Note

The generalises are there, implementing all interface functions and tests for all three cases is still missing.

🛣️🗺️

  • implement the product Lie group – maybe as own struct?
  • check whether it is more reasonable for dispatch to indeed store a tuple of Lie groups in the Productmanifold. The outer operator should still be a tuple of operators or a properly typed product operation
  • implement the power Lie group, here the op is the actual (element wise) op, since we can dispatcher manifold. Maybe still as own structure?
  • also for power it might be better to store the Lie group inside for easier call to the subfiunctions – still the constructor should stay as the current ones are.
  • Implement a default_|left|right]_action(G1, G2) which is used in the semidirect product generation short notation.
  • implement functions for power manifold
  • implement functions for product manifold
  • find a general way to store a semi-direct product – maybe again as well based on two internally stored Lie groups.
  • implement functions for semidirect product manifold
  • 📈test coverage

Copy link

codecov bot commented Nov 5, 2024

Codecov Report

Attention: Patch coverage is 98.15951% with 6 lines in your changes missing coverage. Please review.

Project coverage is 99.12%. Comparing base (4233975) to head (c02a480).
Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
src/groups/semidirect_product_group.jl 81.81% 4 Missing ⚠️
src/interface.jl 84.61% 2 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##              main      #14      +/-   ##
===========================================
- Coverage   100.00%   99.12%   -0.88%     
===========================================
  Files            9       12       +3     
  Lines          397      683     +286     
===========================================
+ Hits           397      677     +280     
- Misses           0        6       +6     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@kellertuer
Copy link
Member Author

kellertuer commented Nov 6, 2024

I turned runtests.jl into a bash script so that you can run test/runtest.jl now from command line as well. It runs even julia -O0 which on my machine reduces test time from 55 sec to 21 sec.

@kellertuer
Copy link
Member Author

Status: The main part of designing these three is done.

The remainder is to implement all functions form the interface for these.

@kellertuer kellertuer added the preview docs Add this label if you want to see a PR-preview of the documentation label Nov 20, 2024
@kellertuer
Copy link
Member Author

I think for all three the scheme and modelling is done. The only thing left is to implement (and test) all interface functions for these three generic cases.

@kellertuer
Copy link
Member Author

@Affie since we discussed this in the last meeting: I now updated the transition page already.

Notably, the “new ways” to construct Lie groups – Given two Lie groups G and H are

  • G^n for the power Lie group (or PowerLieGroup(G, args; kwargs...), where all arguments and keywords are the same as for PowerManifold) – also no need to twiddle around with the operation.
  • G×H for the ProductLieGroup(G,H) – again no need to twiddle around with operations or building a product manifold before
  • G⋉H for the semidirect one, at least as long as the action has a reasonable default default_left_action(G,H) is defined, otherwise LeftSemidirectProductLieGroup(G, H, a) for your action a is the thing to use.

I hope this is more unified and nicer now :)

For this PR I am mainly missing implementing a few product and semidirect product function defaults.

@kellertuer kellertuer marked this pull request as ready for review November 28, 2024 10:50
@kellertuer
Copy link
Member Author

Tests are not yet fully running but all functions are in principle there for Power and Product Lie groups

the semidirect product is easier to finish on a next PR doing semidirect, SO(n) and SE(n), since then we have a concrete test case.

@kellertuer kellertuer added the Ready-for-Review A label for pull requests that are feature-ready label Nov 28, 2024
@kellertuer
Copy link
Member Author

This PR should be finished now. There is one fallback on the interface not covered I think, but I do not know how to test it, maybe that fallback for inv and the identity is not necessary since for resolving an ambiguity it is implemented for every group separately anyways.

@kellertuer
Copy link
Member Author

For the last 6 missing lines: the 4 in semidirect will be easy with a concrete example, the 2 in interface I am not sure how to it.
But this is the coverage I was aiming for and the next PR would do the first concrete semidirect one.

Copy link
Member

@mateuszbaran mateuszbaran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@kellertuer
Copy link
Member Author

Nice!

@kellertuer kellertuer merged commit 932a647 into main Nov 30, 2024
11 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
preview docs Add this label if you want to see a PR-preview of the documentation Ready-for-Review A label for pull requests that are feature-ready
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants