Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Aug 10 2021 05:06
    siddhartha-gadgil opened #99
  • Aug 10 2021 04:50
    siddhartha-gadgil closed #94
  • Aug 10 2021 04:49
    siddhartha-gadgil closed #96
  • Aug 07 2021 03:43

    siddhartha-gadgil on master

    helpers for timing (compare)

  • Aug 06 2021 05:19

    siddhartha-gadgil on master

    "require" correction slight refactoring (compare)

  • Aug 05 2021 05:22

    siddhartha-gadgil on master

    helpers for curves being pants … (compare)

  • Aug 05 2021 02:47

    siddhartha-gadgil on master

    figures for pants length 2 (compare)

  • Aug 04 2021 10:33

    siddhartha-gadgil on master

    reduced laziness to run in REPL (compare)

  • Aug 04 2021 09:50

    siddhartha-gadgil on master

    segment lengths 1 and 2 bound (compare)

  • Aug 04 2021 05:26

    siddhartha-gadgil on master

    parallel normal path enumeration (compare)

  • Aug 03 2021 10:41

    siddhartha-gadgil on master

    margulis constant corrected (compare)

  • Jul 16 2021 06:40

    siddhartha-gadgil on master

    Updates to function shortPathsD… Merge pull request #98 from sha… (compare)

  • Jul 16 2021 06:40
    siddhartha-gadgil closed #98
  • Jul 16 2021 06:38
    shabarishch opened #98
  • Jul 16 2021 05:21
    siddhartha-gadgil closed #97
  • Jul 16 2021 05:21

    siddhartha-gadgil on master

    introducing compact types More compact types Merge pull request #97 from sha… (compare)

  • Jul 16 2021 05:16
    shabarishch opened #97
  • Jul 05 2021 10:55
    siddhartha-gadgil commented #96
  • Jul 05 2021 10:52

    siddhartha-gadgil on master

    speedup by memoizing hash (compare)

  • Jul 05 2021 10:16
    siddhartha-gadgil commented #94
Arka Ghosh
@anotherArka

Compiler warnings is an issue but I was curious in general.

Anything about this?

Siddhartha Gadgil
@siddhartha-gadgil
The compiler is reasonably smart about this, but can only work with type information. If the missed case is based on object level, there is no way you can tell the compiler.
The practice I follow is have a match for the missed case and throw an exception with information of why that match should never have been reached (helps in debugging, but also serves as documentation)
Chinmaya Kausik
@Chinmaya-Kausik
Okay, to get to examples - would writing out the ones you mentioned in the email the first time we worked on GIN be good, Prof. Gadgil?
Arka Ghosh
@anotherArka
Do note that I have only written the code for primitive curves.
Siddhartha Gadgil
@siddhartha-gadgil

I do not remember what I wote. But some things to try are:

  • Various pairs of intersections of generators $\alpha_i$ and $\beta_j$ and also their slef-intersections.
  • Self-intersections of $\alpha_1\alpha_2$ and $\alpha_1\bar{\alpha_2}$ to check one is 0 and the other is not.
  • Generate families such as $\alpha_1\beta_1^n$ and look for intersection numbers of pairs in these.
  • Intersection number of the commutator $[alpha_1, \beta_1]$ with $\alpha_1\alpha_2$.

By the way, @Chinmaya-Kausik please address me here by my Gitter handle to maximize the chance I am alerted.

Copying the above with double dollars.
I do not remember what I wote. But some things to try are:

  • Various pairs of intersections of generators αi\alpha_i and βj\beta_j and also their slef-intersections.
  • Self-intersections of α1α2\alpha_1\alpha_2 and α1α2ˉ\alpha_1\bar{\alpha_2} to check one is 0 and the other is not.
  • Generate families such as α1β1n\alpha_1\beta_1^n and look for intersection numbers of pairs in these.
  • Intersection number of the commutator [alpha1,β1][alpha_1, \beta_1] with α1α2\alpha_1\alpha_2.

By the way, @Chinmaya-Kausik please address me here by my Gitter handle to maximize the chance I am alerted.

Chinmaya Kausik
@Chinmaya-Kausik
In that case @anotherArka will you have the time to implement the code for non-primitive loops too? I'll write some examples but the tests obviously won't compile without that.
I'll do some primitive ones right now, of course.
Arka Ghosh
@anotherArka
I will try to do it. But I have a presentation tomorrow so I can't gurantee.
Chinmaya Kausik
@Chinmaya-Kausik
Oh definitely, no problem. I'll do the primitive ones for now.
Arka Ghosh
@anotherArka
I have uploaded a code to break a loop into primitive loops. I think the logic is correct but the code can be optimized slightly.
Unfortunately my laptop is out of charge and it's stormy outside so I can't charge it.
Chinmaya Kausik
@Chinmaya-Kausik

I have uploaded a code to break a loop into primitive loops. I think the logic is correct but the code can be optimized slightly.

Ah thanks a lot!

Chinmaya Kausik
@Chinmaya-Kausik
Running the tests I wrote, it seems like there's a flaw in the canonicization code, and it's very souped up and I can't quite figure out what it is.
Had anyone independently checked the general reasoning behind the code (the use of turn indices and rightward shifts)?
Chinmaya Kausik
@Chinmaya-Kausik
I do remember explaining my method (since there was no explicit algorithm in the paper and the algorithm in the paper referenced seemed a bit involved), but I'm not sure if its correctness was discussed at all.
Chinmaya Kausik
@Chinmaya-Kausik
I have made a pull request with the code I added for tests so far, which has been commented out though since the tests crashed due to some problem with canonicization.

I do remember explaining my method (since there was no explicit algorithm in the paper and the algorithm in the paper referenced seemed a bit involved), but I'm not sure if its correctness was discussed at all.

the algorithm in the other paper referenced*

Chinmaya Kausik
@Chinmaya-Kausik

Had anyone independently checked the general reasoning behind the code (the use of turn indices and rightward shifts)?

Though I guess it's mostly what Prof. Gadgil told us to do, so it should ideally be correct.

Siddhartha Gadgil
@siddhartha-gadgil
@Chinmaya-Kausik can you clarify and narrow the error - do you mean the problem is hanging, presumably an infinite loop, or giving the wrong answer, and what minimal triggers this, and make an issue with this.
Chinmaya Kausik
@Chinmaya-Kausik
Oh okay, yes I can specify what is going wrong. The "why" is what I'm having trouble with.
So the loop "a1!" in genus2 does not canonicize correctly.
I'm trying to trace the algorithm by hand right now.
Siddhartha Gadgil
@siddhartha-gadgil
Make an issue first. That way we can all work on it.
Siddhartha Gadgil
@siddhartha-gadgil
Thanks. But can you add another comment for "does not canonicalize correctly" clarifying this - e.g. when we canonicalize we obtain ... which is incorrect (we expect ...).
Chinmaya Kausik
@Chinmaya-Kausik
Added it.
What we expect, I will work out and add soon.
Chinmaya Kausik
@Chinmaya-Kausik
Oh this seems to be a theoretical issue. That doubt I once had about how canonicising at one basepoint make it non-canonical at the other seems to follow.
Chinmaya Kausik
@Chinmaya-Kausik
I'm not entirely sure yet (haven't double checked so far), but this is my current guess.
Chinmaya Kausik
@Chinmaya-Kausik

What we expect, I will work out and add soon.

Okay, I think I've double checked and the issue seems to hold, so we should not expect any answer from this algorithm. There is a much more involved algorithm in a paper by Lazarus and Rivaud, but I never tried to read it.

Mentioning Prof. Gadgil ( @siddhartha-gadgil )
Chinmaya Kausik
@Chinmaya-Kausik
The error raised is still odd ("can't shift rightwards"), but if this loop is a counterexample to the algorithm's correctness at a theoretical level, it's probably not worth exploring.
Siddhartha Gadgil
@siddhartha-gadgil
@Chinmaya-Kausik Are you saying that we get into an infinite loop when we try to make things canonical?
If so, we should explore further by creating a LazyList of iterations.
However, you seem to suggest that the wrong answer is returned, which will not happen in an infinite loop unless @anotherArka put a safeguard for this situation which halts and gives an error or wrong answer.
If I remember correctly, "can't shift rightwards" is an error that occurs as we wind around a vertex, and should not occur on a closed surface.
Chinmaya Kausik
@Chinmaya-Kausik

However, you seem to suggest that the wrong answer is returned, which will not happen in an infinite loop unless @anotherArka put a safeguard for this situation which halts and gives an error or wrong answer.

It turns out that I coded in this algorithm and I actually just make it terminate after loopLength + 2 iterations.

@Chinmaya-Kausik Are you saying that we get into an infinite loop when we try to make things canonical?

When attempting to do this by hand, that is what seems to happen, yes.

Siddhartha Gadgil
@siddhartha-gadgil
I take it the issue is for canonical fixing basepoints.
That is, when we make stuff canonical as paths, it fails to be canonical at the basepoint
And making it canonical at basepoint causes the whole process to loop.
If this is the case, we should check the paper if canonical as paths is enough.
At least if that is what they claim.
Chinmaya Kausik
@Chinmaya-Kausik

And making it canonical at basepoint causes the whole process to loop.

Yes, that's exactly what seems to happen here.

If this is the case, we should check the paper if canonical as paths is enough.

I'll take a look

And making it canonical at basepoint causes the whole process to loop.

Yes, that's exactly what seems to happen here.

To clarify - there are only two (adjacent) edges and two vertices and a right turn on the basepoint is a left turn on the other vertex and a left on the basepoint is a right on the other vertex.

Siddhartha Gadgil
@siddhartha-gadgil
That is a good example - simple enough that one can see what is happening. The only question is whether intersection numbers are correct when we take canonical as paths
Arka Ghosh
@anotherArka
What if in the cases where canonicising does not end, we create a list of loops it generates and stop when it generates one loop twice. Then take the intersection number between all such possible pairs of loops then take the minimum of them. Will it be same as the GIN?
Chinmaya Kausik
@Chinmaya-Kausik

That is a good example - simple enough that one can see what is happening. The only question is whether intersection numbers are correct when we take canonical as paths

I checked Erickson and Whittlesey's definition of canonical forms - they seem to require that the cyclic sequence of turns is canonical, so that the curve is canonical as a loop.