Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
b14aba0
Start of Origami
Pascalonyy Nov 6, 2023
b4e082e
Origami Object
Pascalonyy Nov 6, 2023
fea5c58
finished origami struct, added basic functionality
Pascalonyy Dec 11, 2023
3ab88a4
everything up to OrigamiEquivalent
Pascalonyy Dec 11, 2023
a64bb20
implemented some function in pure oscar
Pascalonyy Dec 14, 2023
3c2b52f
automorphisms
Pascalonyy Dec 14, 2023
9e44030
Merge branch 'oscar-system:master' into origami
Pascalony Dec 14, 2023
f8f6a3e
implemented deck_group
Pascalonyy Dec 14, 2023
3b03190
implemented sl2z action, and normal form for origamis
Pascalonyy Dec 15, 2023
b8d3d8a
some coding style fixes and special origamis
Pascalonyy Dec 15, 2023
4419eeb
Make cycle_length type stable
fingolfin Jan 3, 2024
f07b459
Ensure struct Origami contains concrete types
fingolfin Jan 3, 2024
1755e79
Store minimal_cycle_lengths as tuple
fingolfin Jan 3, 2024
a397ffe
Reuse a single parent in cperm calls
fingolfin Jan 3, 2024
8ec034e
Make struct Origami immutable
fingolfin Jan 3, 2024
b393e9f
normal_form: final performance touches
fingolfin Jan 3, 2024
41f39c7
Add GAP.GapObj HACK (temporary, should be removed eventually)
fingolfin Jan 5, 2024
60bba04
Optimize cycle_length
fingolfin Jan 7, 2024
81c8ec0
Avoid some more allocations
fingolfin Jan 7, 2024
bae15ad
Merge pull request #1 from fingolfin/mh/origami
Pascalony Mar 8, 2024
b1adc7f
generating origamis
Pascalonyy Mar 8, 2024
2d4a994
Merge remote-tracking branch 'upstream/master' into origami
Pascalonyy Mar 8, 2024
35d110f
finished special origamis
Pascalonyy Mar 24, 2024
bbf0952
working on homology action
Pascalonyy Mar 24, 2024
2971c2b
homologyaction
Pascalonyy Mar 24, 2024
885cbb0
added some more functionality
s-ertl-github Mar 25, 2024
ee975fd
normal origamis
s-ertl-github Apr 9, 2024
2ae6f1d
fixed types
Pascalonyy Jul 4, 2024
643e0be
Merge branch 'origami' of https://github.com/AG-Weitze-Schmithusen/Os…
Pascalonyy Jul 4, 2024
14e499a
Merge branch 'oscar-system:master' into origami
Pascalony Jul 4, 2024
8a590a6
generate origmis fast
Pascalonyy Sep 3, 2024
14a37af
First prototype origami generation
Pascalonyy Oct 10, 2024
f620d08
Merge branch 'master' into mh/origami-update
fingolfin Dec 5, 2024
5c73d5a
systole support
Pascalonyy Dec 13, 2024
f3434c0
Merge branch 'master' into mh/origami-update
fingolfin Sep 17, 2025
b2123e6
Merge pull request #2 from fingolfin/mh/origami-update
Sebas777-gif Sep 18, 2025
7291ac8
Don't use evalstr (#3)
fingolfin Sep 18, 2025
5264046
Fix another inefficient conversion (#4)
fingolfin Sep 18, 2025
acfd969
Fixed bug and let origami permutations actually live in S_d; rewrote …
Sebas777-gif Sep 18, 2025
8e1db83
First basic tests
Sebas777-gif Sep 18, 2025
619bb33
Removed TODO: checking for transitivity in Oscar instead of GAP is no…
Sebas777-gif Sep 18, 2025
161394a
Fix determinant check
Sebas777-gif Sep 18, 2025
c6d289b
origami code tweaks
fingolfin Dec 4, 2024
f5f81a4
Merge pull request #5 from fingolfin/mh/origami-updated-and-tweaks
Sebas777-gif Sep 19, 2025
6bbe64a
Started documentation
Sebas777-gif Sep 19, 2025
00f7518
Merge branch 'origami' of https://github.com/AG-Weitze-Schmithusen/Os…
Sebas777-gif Sep 19, 2025
3a21f5f
Fixed some bugs that were just introduced; sorry for this oversight
Sebas777-gif Sep 19, 2025
bfe32b8
Fixed exports; removed unnecessary wrapper; change automorphisms func…
Sebas777-gif Sep 19, 2025
58dbbeb
Better array initialization in systolic_ratio_bigger_one_over_pi_in_h11
Sebas777-gif Sep 25, 2025
ba23423
Added missing newline at end of exports.jl
Sebas777-gif Sep 25, 2025
a4c1b6c
Merge branch 'origami' of https://github.com/AG-Weitze-Schmithusen/Os…
Sebas777-gif Sep 25, 2025
59cacfe
replace gap_to_julia call with Float64 conversion
Sebas777-gif Nov 5, 2025
d147bfa
Remove unnecessary "export GapObj"
Sebas777-gif Nov 5, 2025
d160717
Remove unnecessary special case optimization for GapObj
Sebas777-gif Nov 6, 2025
8d497ab
Cleaner write-up of the genus formula
Sebas777-gif Nov 6, 2025
cc71cd4
Use inplace sort to avoid allocating
Sebas777-gif Nov 6, 2025
f874491
Fix formatting
Sebas777-gif Nov 9, 2025
2841ec7
Fix some more formatting
Sebas777-gif Nov 9, 2025
e7794e9
More efficient computation of translations via stabilizer
Sebas777-gif Nov 9, 2025
8e3f358
Remove clarified TODO
Sebas777-gif Nov 9, 2025
91d6129
Nicer code for is_hyperelliptic
Sebas777-gif Nov 9, 2025
ec712be
Made normalform_conjugators type stable
Sebas777-gif Nov 9, 2025
e3f5643
Nicer syntax in normalform_conjugators
Sebas777-gif Nov 9, 2025
ca41c8e
More elegant code for point_reflections
Sebas777-gif Nov 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions experimental/Origami/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# An example template for the experimental section
Copy link
Member

Choose a reason for hiding this comment

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

Clearly this file needs to be updated


## Aims

This is an example for a file structure to set up a new package
in the experimental section. All files you find here are part of the
minimum requirements. See also the official Oscar documentation.

## Status

We plan to also provide a function to automatically copy this template
for you to start your own package.

1 change: 1 addition & 0 deletions experimental/Origami/cylinder_diagrams/h11.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[(0,3,1,2)-(0,3,1,2), (0)-(1) (1,2,3)-(0,2,3), (0,3)-(1,3) (1,2)-(0,2), (0,1)-(2,3) (2)-(1) (3)-(0)]
1 change: 1 addition & 0 deletions experimental/Origami/cylinder_diagrams/h1111.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[(0,3,7,4,1,2,6,5)-(0,3,6,4,1,2,7,5), (0,7,2,1,6,4,5,3)-(0,6,7,5,2,1,4,3), (0,7,5,1,3,2,4,6)-(0,1,4,7,3,6,5,2), (0,7,5,2,3,4,6,1)-(0,2,4,7,6,5,3,1), (0,1,3,4,2)-(0,6,1,5,2,3,7) (5,7,6)-(4), (0,1,4,3,5)-(0,1,7,3,6) (2,7,6)-(2,4,5), (0,1,4,5,6,3,2)-(0,1,3,5,7,4,2) (7)-(6), (0,1,5,3,7,4)-(3,6) (2,6)-(0,1,7,2,5,4), (0,1,5,6,3,2)-(0,1,3,7,5,2) (4,7)-(4,6), (0,2,6)-(0,5,7,2,4,1) (1,5,3,7,4)-(3,6), (0,2,6,7,4)-(5) (1,3,5)-(0,2,7,1,3,6,4), (0,3,4,1,2,5)-(0,3,6,1,2,7) (6,7)-(4,5), (0,3,4,5,2,1)-(0,7,3,2,4,6,1) (6,7)-(5), (0,3,5,6)-(1,3,5,7) (1,2,4,7)-(0,2,4,6), (0,4,1,2,5,6,3)-(0,1,7,4,2,3,5) (7)-(6), (0,4,2,5,6,3,1)-(0,2,7,4,3,5,1) (7)-(6), (0,4,5,2,1)-(0,7,4,2,6,1) (3,7,6)-(3,5), (0,4,6,3,5)-(3,7,4) (1,2,7)-(0,1,6,2,5), (0,4,7,1)-(0,5,3,1,4,6,2) (2,5,3,6)-(7), (0,7)-(0,4,5,6) (1,5,3,6,2,4)-(1,7,3,2), (0,7,1,2)-(3,6,4,5) (3,6,4,5)-(0,7,1,2), (0,7,3,4)-(0,5,3,6) (1,5,2,6)-(1,7,2,4), (0,1,2)-(0,1,4,5,6,7) (3,4,7,5)-(2) (6)-(3), (0,1,3)-(0,1,6,7,4) (2,6,4)-(2,5) (5,7)-(3), (0,1,3,2,4)-(0,2,1,5,6,7) (5,7)-(4) (6)-(3), (0,1,3,4,2)-(0,1,5,7,6) (5,6)-(4) (7)-(2,3), (0,1,3,5)-(0,3,4,2,1,7) (2,6,4)-(5) (7)-(6), (0,1,3,5)-(1,3,4,2) (2,6,4)-(0,7,5) (7)-(6), (0,1,4)-(0,1,6,3,7) (2,3)-(2,5) (5,6,7)-(4), (0,1,4,2,3)-(0,6,2,1,7) (5,6)-(4) (7)-(3,5), (0,1,4,3,2)-(0,1,5,6,7) (5,7)-(2,4) (6)-(3), (0,1,6,5,2)-(7) (3,7)-(0,1,5,4,6,2) (4)-(3), (0,2,1)-(7) (3,4,5)-(6) (6,7)-(0,5,2,3,1,4), (0,2,4)-(0,2,6,3,1,7) (1,5,3)-(4) (6,7)-(5), (0,2,4)-(0,5,2,3,1) (1,6,3)-(4,7) (5,7)-(6), (0,2,4,3,5)-(0,6,3,2,7) (1,6)-(1,5) (7)-(4), (0,2,4,5)-(2,4,7) (1,3,6)-(0,1,3,5) (7)-(6), (0,2,6)-(0,5,2,7) (1,4,3,5)-(1,6,3) (7)-(4), (0,3)-(0,4,6,2) (1,4,5,2)-(1,7) (6,7)-(3,5), (0,3)-(0,2,6,4) (1,6,5,2)-(1,3,7) (4,7)-(5), (0,3)-(0,2,6,5,7) (1,7,6,4,2)-(1,3) (5)-(4), (0,3,1,2)-(5,7) (4,5)-(4,6) (6,7)-(0,3,1,2), (0,3,1,2)-(7) (4,5)-(6) (6,7)-(0,5,3,1,4,2), (0,3,1,2)-(6) (4,5,6)-(4,5,7) (7)-(0,3,1,2), (0,3,1,2)-(0,6,1,7) (4,6)-(3,5) (5,7)-(2,4), (0,3,1,2)-(4,7,5) (4,6,5)-(0,3,1,2) (7)-(6), (0,3,1,2)-(0,5,7,6,1) (4,6,5)-(3) (7)-(2,4), (0,3,4,1,2,5)-(0,2,6,1,3,7) (6)-(5) (7)-(4), (0,3,4,2,5,1)-(0,6,1,2,3,7) (6)-(4) (7)-(5), (0,3,4,2,5,1)-(0,6,1,2,3,7) (6)-(5) (7)-(4), (0,3,5,1)-(0,4,7,6) (2,6,4)-(5) (7)-(1,3,2), (0,4)-(0,6) (1,5)-(1,3,4,7) (2,7,6,3)-(2,5), (0,5)-(0,6,4) (1,3,2,4)-(1,7,5,2) (6,7)-(3), (0,5)-(0,4,6,7) (1,3,2,7,4)-(1,5,2) (6)-(3), (0,5)-(0,6,7) (1,6,3)-(1,4) (2,7,4)-(2,3,5), (0,5,2,3)-(7) (1,7,4)-(2,6,5) (6)-(0,4,1,3), (0,5,3)-(0,4,7) (1,4,2)-(1,5,6) (6,7)-(2,3), (0,7)-(0,5) (1,6)-(1,4) (2,4,3,5)-(2,7,3,6), (0,7,2)-(3,6) (1,3)-(0,5,1,4,2) (4,6,5)-(7), (0,7,3)-(0,2,5) (1,5,4,2)-(1,3,6,7) (6)-(4), (0,7,5)-(0,4) (1,3,2,4)-(1,5,6,7,2) (6)-(3), (0)-(4) (1,4,3,2,5)-(6,7) (6)-(5) (7)-(0,3,1,2), (0,1)-(0,2,5) (2,3)-(7) (4,5)-(6) (6,7)-(1,4,3), (0,1)-(5) (2,3,5,4)-(6,7) (6)-(0,2) (7)-(1,4,3), (0,1)-(0,4,5) (2,4,3,5)-(6,7) (6)-(2) (7)-(1,3), (0,1)-(0,2,5,6) (2,4,6)-(7) (3,7)-(1,4) (5)-(3), (0,1)-(0,2) (2,5,6)-(7) (3,7)-(1,6,4,5) (4)-(3), (0,1,2)-(0,1,5,6,7) (3,4)-(2) (5,7)-(4) (6)-(3), (0,1,2)-(0,5,1,6) (3,7)-(2,4) (4,5)-(7) (6)-(3), (0,1,4)-(0,1,7) (2,3)-(2,6) (5,6)-(4) (7)-(3,5), (0,2,1)-(7) (3)-(2) (4,5)-(6) (6,7)-(0,5,3,4,1), (0,2,1,3)-(4,5,7,6) (4)-(2) (5,6)-(3) (7)-(0,1), (0,2,3,1)-(0,6,1,2,7) (4,5)-(3) (6)-(4) (7)-(5), (0,2,4)-(0,2,3,1) (1,5,3)-(6,7) (6)-(5) (7)-(4), (0,2,4)-(0,2,7) (1,6,3)-(4) (5)-(6) (7)-(1,5,3), (0,3)-(0,5) (1,2)-(1,4) (4,6)-(3,7) (5,7)-(2,6), (0,3,1,2)-(4,6,5,7) (4)-(1) (5)-(0) (6,7)-(2,3), (0,3,1,2)-(6,7) (4,5)-(0,3,1,2) (6)-(5) (7)-(4), (0,3,1,2)-(7) (4,7)-(5,6) (5)-(4) (6)-(0,3,1,2), (0,3,5)-(0,3,7) (1,2,4)-(1,2,6) (6)-(5) (7)-(4), (0,4,2)-(3,7) (1,3)-(1,5) (5,7)-(0,6,2) (6)-(4), (0,4,2)-(6) (1,6,3)-(5,7) (5)-(4) (7)-(0,3,1,2), (0,5,1)-(6,7) (2,6)-(5) (3,7)-(0,4,1) (4)-(2,3), (0,5,2)-(1,7,3) (1,4,3)-(0,6,2) (6)-(4) (7)-(5), (0,5,2)-(1,7,3) (1,4,3)-(0,6,2) (6)-(5) (7)-(4), (0,6,1)-(7) (2,7)-(0,5,3,4,1) (3)-(2) (4,5)-(6), (0,7)-(5,6) (1,5)-(2,7) (2,4)-(1,3) (3,6)-(0,4), (0,7,2)-(1,6,3) (1,4,3)-(7) (5)-(4) (6)-(0,5,2), (0)-(3) (1)-(2) (2,4,3,5)-(6,7) (6)-(0,1) (7)-(4,5), (0)-(4) (1)-(2,3) (2,5,3,4)-(6,7) (6)-(5) (7)-(0,1), (0,1)-(0,3) (2,3)-(6) (4,6)-(5,7) (5)-(4) (7)-(1,2), (0,1)-(0,4) (2,3)-(1,7) (4,7)-(5,6) (5)-(3) (6)-(2), (0,1,2)-(0,1,7) (3)-(6) (4)-(5) (5,6)-(2) (7)-(3,4), (0,1,2)-(0,1,7) (3,4)-(5,6) (5)-(4) (6)-(2) (7)-(3), (0,2,1)-(6,7) (3,4)-(0,5,1) (5)-(2) (6)-(4) (7)-(3), (0,2,1)-(6,7) (3,4)-(0,5,1) (5)-(4) (6)-(2) (7)-(3), (0,3)-(7) (1,2)-(6) (4)-(2,3) (5)-(0,1) (6,7)-(4,5), (0,3,1)-(7) (2)-(3) (4,7)-(5,6) (5)-(4) (6)-(0,2,1), (0,3,1)-(7) (2)-(4) (4,7)-(5,6) (5)-(3) (6)-(0,2,1), (0,4)-(6) (1,6)-(4,7) (2,7)-(3,5) (3)-(1) (5)-(0,2), (0,4,1)-(7) (2)-(4) (3)-(5) (5,7)-(0,6,1) (6)-(2,3), (0,1)-(7) (2)-(0) (3)-(4) (4,7)-(5,6) (5)-(1) (6)-(2,3), (0,1)-(7) (2)-(1) (3)-(0) (4,7)-(5,6) (5)-(4) (6)-(2,3), (0,3)-(6,7) (1,2)-(4,5) (4)-(1) (5)-(3) (6)-(2) (7)-(0), (0,3)-(6,7) (1,2)-(4,5) (4)-(3) (5)-(0) (6)-(2) (7)-(1)]
1 change: 1 addition & 0 deletions experimental/Origami/cylinder_diagrams/h112.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[(0,2,1,6,4,5,3)-(0,6,5,2,1,4,3), (0,2,5,1,3,6,4)-(0,2,6,5,1,3,4), (0,2,5,3,1,6,4)-(0,2,6,3,1,5,4), (0,6,2,3,4,5,1)-(0,2,4,6,5,3,1), (0,6,4,1,2,3,5)-(0,1,3,6,5,4,2), (0,1,2,3,4)-(0,3,6,1,5,2) (5,6)-(4), (0,1,3,4)-(0,5,1,6,3) (2,6,5)-(2,4), (0,1,3,4,5,2)-(0,1,4,6,3,2) (6)-(5), (0,1,3,5)-(0,3,4,2,1,6) (2,6,4)-(5), (0,1,3,6,4)-(3,5) (2,5)-(0,1,6,2,4), (0,1,4,2,3)-(0,1,6,2,5) (5,6)-(3,4), (0,1,4,5,2)-(0,1,6,4,2) (3,6)-(3,5), (0,1,4,5,2,3)-(0,6,3,1,2,4) (6)-(5), (0,1,4,5,3,2)-(0,1,3,6,4,2) (6)-(5), (0,1,5,6,3)-(4) (2,4)-(0,1,6,2,5,3), (0,2,3,1)-(0,4,2,6,1,5) (4,6,5)-(3), (0,2,3,4,1)-(0,6,2,3,5,1) (5,6)-(4), (0,2,3,5)-(1,2,3,6) (1,4,6)-(0,4,5), (0,2,4)-(0,2,5,3,1,6) (1,5,6,3)-(4), (0,2,4,1)-(0,2,6,1,5) (3,6,5)-(3,4), (0,2,4,5)-(2,4,6) (1,3,6)-(0,1,3,5), (0,2,6)-(0,5,2,4) (1,4,3,5)-(1,6,3), (0,2,6)-(0,5,2,4,1) (1,5,3,4)-(3,6), (0,3,1,2)-(4,6,5) (4,6,5)-(0,3,1,2), (0,3,4,2,1)-(0,6,2,3,5,1) (5,6)-(4), (0,3,4,2,1)-(0,6,3,2,5,1) (5,6)-(4), (0,3,4,5,2,1)-(0,2,4,6,3,1) (6)-(5), (0,3,4,5,2,1)-(0,6,3,2,4,1) (6)-(5), (0,3,5,1)-(6) (2,4,6)-(0,3,2,4,5,1), (0,3,6)-(0,4,1,3,5,2) (1,5,2,4)-(6), (0,4,2,6,3)-(2,5) (1,5)-(0,6,1,4,3), (0,4,5,2,1)-(0,2,6,4,1) (3,6)-(3,5), (0,5)-(0,3,4,6) (1,4,2,6,3)-(1,5,2), (0,6,4)-(0,3,5) (1,3,2,5)-(1,6,2,4), (0,1)-(0,2,5,4) (2,3,4)-(6) (5,6)-(1,3), (0,1)-(0,3,4,5,6) (2,3,6,4)-(1) (5)-(2), (0,1,2)-(0,4,1,6) (3,4)-(5) (5,6)-(2,3), (0,1,2)-(0,1,4,5,6) (3,4,6)-(2) (5)-(3), (0,1,2)-(0,1,4,5,6) (3,5)-(2) (4,6)-(3), (0,1,2)-(0,1,4,5,6) (3,6,4)-(2) (5)-(3), (0,1,3)-(0,1,6,4) (2,4)-(2,5) (5,6)-(3), (0,1,3,2)-(0,1,4,5,6) (4,6)-(2) (5)-(3), (0,1,3,2,4)-(0,2,1,5,6) (5)-(3) (6)-(4), (0,1,3,2,4)-(0,2,1,5,6) (5)-(4) (6)-(3), (0,1,4,2)-(0,5,1,6) (3,5)-(2) (6)-(3,4), (0,1,4,2,3)-(0,5,2,1,6) (5)-(3) (6)-(4), (0,1,4,2,3)-(0,5,2,1,6) (5)-(4) (6)-(3), (0,2)-(0,5) (1,3)-(1,4,2,6) (4,6,5)-(3), (0,2,1)-(4,6) (3,4)-(3,5) (5,6)-(0,2,1), (0,2,1)-(5) (3,4,5)-(3,4,6) (6)-(0,2,1), (0,2,1)-(3,6,4) (3,5,4)-(0,2,1) (6)-(5), (0,2,1,3)-(0,4,6,5,1) (4,5)-(3) (6)-(2), (0,2,1,3)-(0,6,1,5) (4,5)-(3) (6)-(2,4), (0,2,3,1)-(0,4,6,5) (4,5)-(3) (6)-(1,2), (0,2,3,1)-(0,5,1,2,6) (4,5)-(3) (6)-(4), (0,2,3,1)-(6) (4,6)-(0,2,5,3,1) (5)-(4), (0,2,4)-(0,2,3,1) (1,5,3)-(4,6) (6)-(5), (0,2,4)-(0,2,6,3,1) (1,5,3)-(4) (6)-(5), (0,2,4)-(0,3,1,2,6) (1,5,3)-(4) (6)-(5), (0,2,4)-(0,6,2,3,1) (1,5,3)-(4) (6)-(5), (0,2,4)-(1,2,3) (1,5,3)-(0,6,4) (6)-(5), (0,2,5)-(0,2,6) (1,3,4)-(1,3,5) (6)-(4), (0,3)-(0,4,5) (1,4,2)-(1,3,6) (5,6)-(2), (0,3)-(0,4,5) (1,4,2)-(1,6) (5,6)-(2,3), (0,3)-(0,4,5,2) (1,4,2)-(1,6) (5,6)-(3), (0,3)-(0,2,5,6) (1,4,6,2)-(1,3) (5)-(4), (0,3)-(0,2,4) (1,5,2)-(1,3,6) (4,6)-(5), (0,3)-(0,2,5) (1,5,4,2)-(1,3,6) (6)-(4), (0,3)-(0,2,5,6) (1,6,4,2)-(1,3) (5)-(4), (0,3,1)-(0,4,6,5) (2,5,4)-(1) (6)-(2,3), (0,3,1,2)-(5) (4,5)-(4,6) (6)-(0,3,1,2), (0,3,1,2)-(0,4,6,5,1) (4,5)-(3) (6)-(2), (0,3,1,2)-(5,6) (4,6)-(0,3,1,2) (5)-(4), (0,3,2,1)-(0,4,5,6) (4,6)-(1,3) (5)-(2), (0,3,4)-(3,6) (1,2,5)-(0,1,2,4) (6)-(5), (0,4)-(0,3) (1,5)-(1,4,6) (2,6,3)-(2,5), (0,4)-(0,3) (1,5)-(1,6) (2,6,3)-(2,4,5), (0,4,1)-(6) (2,3)-(5) (5,6)-(0,3,4,2,1), (0,4,2)-(5) (1,5,3)-(4,6) (6)-(0,3,1,2), (0,5)-(0,4) (1,3,2,4)-(1,5,6,2) (6)-(3), (0,5)-(0,4,6) (1,3,2,4)-(1,5,2) (6)-(3), (0,5)-(0,4) (1,4,2,3)-(1,6,2,5) (6)-(3), (0,5,1)-(0,4,6) (2,6)-(1,3) (3,4)-(2,5), (0,5,2)-(3,6) (1,3)-(0,1,4,2) (4,6)-(5), (0,5,4,1)-(6) (2,6)-(0,4,3,5,1) (3)-(2), (0,6,2)-(3) (1,3)-(0,5,1,4,2) (4,5)-(6), (0,6,2)-(1,5,3) (1,4,3)-(6) (5)-(0,4,2), (0)-(3) (1,3,2,4)-(5,6) (5)-(4) (6)-(0,2,1), (0)-(1) (1,3,4,2)-(5,6) (5)-(0,4) (6)-(2,3), (0)-(3) (1,4,2,3)-(5,6) (5)-(4) (6)-(0,2,1), (0)-(1,2) (1,4,2,3)-(5,6) (5)-(4) (6)-(0,3), (0,1)-(0,2,5) (2)-(3) (3,6)-(1,4) (4,5)-(6), (0,1)-(0,2) (2,4)-(6) (3,6)-(1,5,4) (5)-(3), (0,1)-(0,3,5,6) (2,4)-(1) (3,6)-(4) (5)-(2), (0,1)-(0,3) (2,5)-(1,6) (3,6)-(4,5) (4)-(2), (0,1,2)-(0,1,6) (3)-(5) (4,5)-(2) (6)-(3,4), (0,1,2)-(3,6,4,5) (3,4)-(2) (5)-(0) (6)-(1), (0,1,2)-(0,1,5,6) (3,4)-(2) (5)-(4) (6)-(3), (0,1,2)-(0,5,1,6) (3,4)-(2) (5)-(3) (6)-(4), (0,1,2)-(0,1,6) (3,6)-(4,5) (4)-(3) (5)-(2), (0,1,4)-(0,1,6) (2,3)-(2,5) (5)-(4) (6)-(3), (0,2)-(5) (1,3)-(6) (4)-(0,1) (5,6)-(2,4,3), (0,2)-(0,5) (1,3)-(1,6) (4,5)-(3) (6)-(2,4), (0,2)-(6) (1,4)-(3,5) (3,6)-(2,4) (5)-(0,1), (0,2,1)-(5,6) (3,4)-(0,2,1) (5)-(4) (6)-(3), (0,2,1)-(6) (3,6)-(4,5) (4)-(3) (5)-(0,2,1), (0,2,1)-(5,6) (3,6)-(0,4,1) (4)-(2) (5)-(3), (0,2,1)-(5,6) (3,6)-(0,4,1) (4)-(3) (5)-(2), (0,2,1)-(6) (3,6)-(0,5,4,1) (4)-(3) (5)-(2), (0,3,1)-(6) (2)-(4) (4,6)-(0,5,1) (5)-(2,3), (0,3,1)-(6) (2)-(3) (4,6)-(0,5,1) (5)-(2,4), (0,4,1)-(6) (2)-(3) (3,6)-(4,5) (5)-(0,2,1), (0,4,2)-(5,6) (1,3)-(0,1,2) (5)-(4) (6)-(3), (0,5,2)-(3) (1,3)-(1,6) (4)-(5) (6)-(0,4,2), (0)-(2) (1)-(3) (2,4,3)-(5,6) (5)-(4) (6)-(0,1), (0,1)-(0,6) (2)-(5) (3)-(4) (4,5)-(1) (6)-(2,3), (0,1)-(0,2) (2)-(3) (3,4)-(5,6) (5)-(4) (6)-(1), (0,2)-(6) (1)-(0) (3,6)-(4,5) (4)-(3) (5)-(1,2), (0,2)-(6) (1)-(3) (3,6)-(4,5) (4)-(0) (5)-(1,2), (0,4)-(6) (1)-(0) (2)-(3) (3,6)-(4,5) (5)-(1,2), (0,6)-(4,5) (1,2)-(3,6) (3)-(0) (4)-(2) (5)-(1), (0,6)-(4,5) (1,2)-(3,6) (3)-(2) (4)-(1) (5)-(0)]
1 change: 1 addition & 0 deletions experimental/Origami/cylinder_diagrams/h2.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[(0,2,1)-(0,2,1), (0)-(1) (1,2)-(0,2)]
1 change: 1 addition & 0 deletions experimental/Origami/cylinder_diagrams/h22.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[(0,5,3,1,2,4)-(0,5,3,1,2,4), (0)-(1) (1,2,5,4,3)-(0,2,5,4,3), (0,3,5)-(1,3,5) (1,2,4)-(0,2,4), (0,3,5,4)-(1,3,5,4) (1,2)-(0,2), (0)-(3) (1)-(2) (2,4,3,5)-(0,5,1,4), (0,1)-(2,3) (2,4)-(1,4) (3,5)-(0,5), (0,2)-(1,3) (1)-(0) (3,4,5)-(2,4,5), (0,3,4,5)-(1,4,5,2) (1)-(3) (2)-(0), (0,3,5)-(1,2,5) (1)-(0) (2,4)-(3,4), (0,2,1)-(3,5,4) (3)-(1) (4)-(2) (5)-(0), (0,5)-(3,4) (1,4)-(2,5) (2)-(1) (3)-(0), (0,5,2,1,4,3)-(0,4,2,1,5,3), (0,5,2,3,1,4)-(0,3,1,5,2,4), (0,5,3,2,1,4)-(0,1,3,4,5,2), (0,1,2,3)-(0,4,1,5,2) (4,5)-(3), (0,1,3,4)-(3,5) (2,5)-(0,1,2,4), (0,2,3,4,1)-(0,5,2,3,1) (5)-(4), (0,2,4)-(0,3,1,2,5) (1,5,3)-(4), (0,3,1,2)-(0,4,1,5) (4,5)-(2,3), (0,3,4)-(1,3,5) (1,2,5)-(0,2,4), (0,3,4,2,1)-(0,2,5,3,1) (5)-(4), (0,4,5,2)-(3) (1,3)-(0,5,1,4,2), (0,5,1)-(2,4,3) (2,4,3)-(0,5,1), (0,1)-(0,3,4,5) (2,3,5)-(1) (4)-(2), (0,1)-(0,2,4,5) (2,5)-(3) (3,4)-(1), (0,1,2)-(0,4,1,5) (3,5)-(2) (4)-(3), (0,1,3,2)-(0,1,4,5) (4)-(2) (5)-(3), (0,2,1)-(4) (3,4)-(3,5) (5)-(0,2,1), (0,2,1)-(4,5) (3,5)-(0,2,1) (4)-(3), (0,2,3)-(2,5) (1,4)-(0,1,3) (5)-(4), (0,3)-(0,4,5) (1,4,2)-(1,3) (5)-(2), (0,3,1)-(0,4,5) (2,4)-(1) (5)-(2,3), (0,3,1)-(5) (2,5)-(3,4) (4)-(0,2,1), (0,3,1,2)-(0,4,1,5) (4)-(2) (5)-(3), (0,5)-(3,4) (1,4)-(0,2) (2,3)-(1,5), (0,5)-(0,4) (1,4)-(1,3) (2,3)-(2,5), (0,1)-(0,5) (2)-(4) (3,4)-(1) (5)-(2,3), (0,2,1)-(3,4,5) (3)-(1) (4)-(2) (5)-(0), (0,3)-(5) (1)-(0) (2,5)-(3,4) (4)-(1,2), (0,3)-(0,5) (1,2)-(1,4) (4)-(3) (5)-(2), (0,5)-(3,4) (1,4)-(2,5) (2)-(0) (3)-(1)]
1 change: 1 addition & 0 deletions experimental/Origami/cylinder_diagrams/h4.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[(0,4,2,1,3)-(0,4,2,1,3), (0)-(1) (1,2,4,3)-(0,2,4,3), (0,3,4)-(1,3,4) (1,2)-(0,2), (0,2)-(1,3) (1)-(0) (3,4)-(2,4), (0,3,4)-(1,4,2) (1)-(3) (2)-(0)]
8 changes: 8 additions & 0 deletions experimental/Origami/docs/doc.main
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# An example documentation

This is a sample text to outline the structure of the packages in the `Experimental` folder.
You can show docstrings like this:
```@docs
my_access_func(S::ExampleStruct)
```

309 changes: 309 additions & 0 deletions experimental/Origami/src/Origami.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,309 @@
# Add your new types, functions, and methods here.

module OrigamiHelper

using ..GAP

function __init__()
mod_p = "https://ag-weitze-schmithusen.github.io/ModularGroup/PackageInfo.g"
ori_p = "https://ag-weitze-schmithusen.github.io/Origami/PackageInfo.g"
GAP.Packages.install(mod_p)
GAP.Packages.install(ori_p)
GAP.Packages.load("Origami")
end

end

include("exports.jl")
include("types.jl")
include("canonical.jl")
include("deck_group.jl")
include("action.jl")
include("special_origami.jl")
include("generate.jl")
include("homology_action.jl")
include("cyclic_torus_covers.jl")
include("homology.jl")
include("normal_origami.jl")
include("systoles.jl")

@doc raw"""
origami(h::PermGroupElem, v::PermGroupElem)

This function constructs an Origami object from two given permutations h and v . A test is
performed to check whether the surface described by the given permutations is connected, i.e.
whether the group generated by the two permutations acts transitively.

# Examples
```jldoctest
julia> h = @perm (1,2)
(1,2)

julia> v = @perm (2,3)
(1,2)

julia> o = origami(h,v)
Origami ((1,2),(2,3), 3)
```
"""
function origami(h::PermGroupElem, v::PermGroupElem)
d = max(degree(h), degree(v))
G = symmetric_group(d)
obj = GAP.Globals.Origami(GapObj(h), GapObj(v))
return Origami(obj, G(h), G(v), d)
end

# ugly workaround
function from_GAP_origami(o::GapObj)
d = GAP.Globals.DegreeOrigami(o)::Int
G = symmetric_group(d)
h = PermGroupElem(G, GAP.Globals.HorizontalPerm(o))
v = PermGroupElem(G, GAP.Globals.VerticalPerm(o))
return origami(h, v)
end

function origami_disconnected(h::PermGroupElem, v::PermGroupElem, d::Integer)
return Origami(GAP.Globals.OrigamiNC(GapObj(h), GapObj(v), d), h, v, d)
end

function Base.:(==)(a::Origami, b::Origami)
# TODO rewrite this? for now use Gap equality
return (a.h == b.h) && (a.v == b.v)
end

function Base.hash(o::Origami, h::UInt=0x000000000)
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
function Base.hash(o::Origami, h::UInt=0x000000000)
function Base.hash(o::Origami, h::UInt)

this should not have a default value, as julia base already provides a one-argument hash method

return hash(o.h, hash(o.v, hash(o.d, h)))
end

function horizontal_perm(o::Origami)
return o.h
end

function vertical_perm(o::Origami)
return o.v
end

function degree(o::Origami)
return o.d
end

function Base.show(io::IO, o::Origami)
h = horizontal_perm(o)
v = vertical_perm(o)
d = degree(o)
print(io, "Origami ($(h),$(v), $(d))")
end

GapObj(O::Origami) = O.o

@doc raw"""
stratum(o::Origami)

This function calculates the stratum of an origami, i.e. the list of the (non-ascendingly
ordered) non-zero degrees of the singularities. For a singularity of cone angle 2kπ the
degree of the singularity is k-1.

# Examples
```jldoctest
julia> o = origami(cperm([1,2],[3,4]), cperm([2,5,3,6],[4,7]))
Origami ((1,2)(3,4),(2,5,3,6)(4,7), 7)

julia> stratum(o)
3-element Vector{Int64}:
2
1
1
```
"""
function stratum(o::Origami)
h = horizontal_perm(o)
v = vertical_perm(o)
commutator = comm(h, v)
cycs = cycles(commutator)
unsorted_stratum = [length(c) - 1 for c in cycs if length(c) > 1]
return sort!(unsorted_stratum; rev=true)
end

@doc raw"""
genus(o::Origami)

Calculates the genus of an origami.

# Examples
```jldoctest
julia> o = origami(cperm([1,2]), cperm([2,3]))
Origami ((1,2),(2,3), 3)

julia> genus(o)
2
```
"""
function genus(o::Origami)
return ZZ((sum(stratum(o)) + 2) / 2)
end

function veech_group(O::Origami)
# TODO use hashtables or not? Implement modular subgroup?
GAP.Globals.ComputeVeechGroupWithHashTables(GapObj(O))
Copy link
Member

Choose a reason for hiding this comment

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

this should have an explicit return. Furthermore, it would probably be good to wrap the return value in an Oscar group type

end

function index_monodromy_group(o::Origami)
return GAP.Globals.IndexOfMonodromyGroup(GapObj(o))::Int
end

function sum_of_lyapunov_exponents(o::Origami)
return QQFieldElem(GAP.Globals.SumOfLyapunovExponents(GapObj(o)))
end

function translations(o::Origami)
h = horizontal_perm(o)
v = vertical_perm(o)

function act_on_tuples_by_conj(tup::Vector{PermGroupElem}, g::PermGroupElem)
return [tup[1]^g, tup[2]^g]
end

S = stabilizer(symmetric_group(degree(o)), [h, v], act_on_tuples_by_conj)[1]
return elements(S)
end

function is_hyperelliptic(o::Origami)
# check whether -1 is in the veech group
if !veech_group_is_even(o)
return false
end

x = horizontal_perm(o)
y = vertical_perm(o)
g = genus(o)

L = point_reflections(o)
L = filter(i -> order(i) == 2, L)

isempty(L) && return false

degree_list = collect(1:degree(o))
for sigma in L
# fixpoints
b =
length(setdiff(degree_list, moved_points(sigma))) +
length(setdiff(degree_list, moved_points(sigma * x))) +
length(setdiff(degree_list, moved_points(sigma * y)))
Comment on lines +189 to +191
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
length(setdiff(degree_list, moved_points(sigma))) +
length(setdiff(degree_list, moved_points(sigma * x))) +
length(setdiff(degree_list, moved_points(sigma * y)))
number_of_fixed_points(sigma) +
number_of_fixed_points(sigma * x) +
number_of_fixed_points(sigma * y)


p1 = sigma * x^-1 * y^-1
p2 = y * x * (x * y)^-1
for i in degree_list
if i^p1 == i^p2
b += 1
end
end

if 2 * g + 2 - b == 0
return true
end
end

return false
end

function cylinder_structure(o::Origami)
gap_obj = GAP.Globals.CylinderStructure(GapObj(o))
cyl_lists = Vector{Vector{Int}}(gap_obj)
cyl_tuples = [(l[1], l[2]) for l in cyl_lists]
Comment on lines +211 to +212
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
cyl_lists = Vector{Vector{Int}}(gap_obj)
cyl_tuples = [(l[1], l[2]) for l in cyl_lists]
cyl_tuples = Vector{Tuple{Int, Int}}(gap_obj)

this could work as well (I haven't tested it)

return cyl_tuples
end

function veech_group_and_orbit(o::Origami)
return GAP.Globals.VeechGroupAndOrbit(GapObj(o))
end

function veech_group_is_even(o::Origami)
return GAP.Globals.VeechGroupIsEven(GapObj(o))::Bool
end

function are_equivalent(o1::Origami, o2::Origami)
return GAP.Globals.OrigamisEquivalent(GapObj(o1), GapObj(o2))::Bool
end

# TODO why is this not in canonical.jl?
function normalform_conjugators(o::Origami)
x = horizontal_perm(o)
y = vertical_perm(o)
n = degree(o)
G = PermGroupElem[]
sym = parent(x)

# Starting from each of the vertices found above, do a breadth-first search
# and list the vertices in the order they appear.
# This defines a permutation l with which we conjugate x and y.
# From the resulting list of pairs of permutations (all of which are by
# definition simultaneously conjugated to (x,y)) we choose the
# lexicographically smallest one as the canonical form.
for i in 1:n
L = fill(0, n)
seen = fill(false, n)
Q = [i]
seen[i] = true
numSeen = 1
L[i] = 1
while numSeen < n
v = popfirst!(Q)
wx = v^x
wy = v^y
if !seen[wx]
push!(Q, wx)
seen[wx] = true
numSeen += 1
L[wx] = numSeen
end
if !seen[wy]
push!(Q, wy)
seen[wy] = true
numSeen += 1
L[wy] = numSeen
end
end
push!(G, perm(sym, L))
end

return G
end

function point_reflections(o::Origami)
if !veech_group_is_even(o)
throw("VeechGroup must contain -1")
end

h = horizontal_perm(o)
v = vertical_perm(o)
o1 = origami(h^-1, v^-1)
h1 = horizontal_perm(o1)
v1 = vertical_perm(o1)
G = normalform_conjugators(o)
G1 = normalform_conjugators(o1)

f(i) = origami(h^i, v^i)
f1(i) = origami(h1^i, v1^i)

# origamis derived from the permutations above
O = f.(G)
# we need to calculate these to test find k s.t.
# sigma_i *origami *sigma_i^-1=delta_k(i)*origami_1*delta_k(i)^-1
O1 = f1.(G1)

# fitting the permuations together
result = PermGroupElem[]

l = length(O)
for i in 1:l
index = findfirst(item -> item == O[i], O1)
push!(result, G[i] * (G1[index])^-1)
end

return unique!(result)
end

function automorphisms(o::Origami)
# TODO is this structure useful?
return (translations(o), 1), (point_reflections(o), -1)
end
Loading
Loading