-
Notifications
You must be signed in to change notification settings - Fork 19
Enable ImmediateVerification and make it useable #280
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
Conversation
Codecov Report
@@ Coverage Diff @@
## master #280 +/- ##
==========================================
- Coverage 77.95% 77.94% -0.01%
==========================================
Files 43 43
Lines 18401 18427 +26
==========================================
+ Hits 14344 14363 +19
- Misses 4057 4064 +7
|
|
Ok, so I added setting immediate verification in the This somewhat fixes the first example in #37: I ran this on my machine thrice until it stopped. Without setting immediate verification in With setting the number of random elements immediate verification uses to 10, I have three processes which ran 3000 successfull recognitions and which are still at it. I'll have to check whether this slows down the test-suite by a lot, but that would surprise me. Update: all three failed after roughly 5000 runs. I also tested this once without the "fix immediate verification" commit which also worked fine. Maybe we don't even need that? I have to sleep over that. Also I'm sure this will take care of #35 and the other example in #37. |
|
This also fixes #16 in that I could do 1500 and 7000 successfull recognitions once I added immediate verification to the method |
|
It might also make sense to always do an immediate verification when the kernel generators are created randomly. |
This comment has been minimized.
This comment has been minimized.
|
I also got a fix for #11, but I need to think about that a little more. I'm pushing my WIP, that needs to be cleaned up though. |
54870c2 to
f3782d1
Compare
|
I've converted this into a draft again since I also rewrote the |
b573e6f to
99c4771
Compare
|
The newest commits are due to me trying to find the reason behind an error I'm trying to fix. I've moved the test case producing the error into |
9b60344 to
632f2d9
Compare
|
This is now ready for review. On my machine I have the feeling, that the test suite got so big, that we start hitting random errors regularly.. |
|
Rebased onto master. |
|
I do not understand yet how this removes the the need for mandarins, but we can discuss this via Jitsi on Wednesday |
3f54eeb to
1a7f8d9
Compare
|
Tests now pass. Do you think this can be merged as it is @fingolfin ? |
|
I'd like to know how this affects performance. Do the tests get noticeably slower / faster? Even if they are slower, we may want to merge it, but whatever happens should be tested and documented here. As I explained on a conference call 1-2 weeks ago, I am unconvinced this is a proper replacement for Mandarins -- I am in particular concerned that getting to a confidence level similar to what e.g. 100 mandarins provide, one would have to create soooo many random elements with this method (growing rapidly with the number of branch points) that it would get very slow. But I might be wrong! But that's why I am also asking about performance |
During immediate verification, if we encounter a kernel which is marked as trivial, we need to verify that the computed SLP indeed yields the unit of the group. Add a hack for nodes recognised by BlocksModScalars, since then we can't use ri!.isone.
It errored when its second argument was an empty list.
2df019a to
b61be0b
Compare
Add standard argument for FindKernelFastNormalClosure.
Rewrite FindKernelRandom & immediate verification Enable immediate verification for: - GoProjective - NonTransitive - BlockDiagonal Use more random elements in immediate verification Add a helper function `GenerateRandomKernelElementsAndOptionallyVerifyThem`, which is used both when computing random generators of a kernel and when doing immediate verification of a kernel. Add the function `ImmediateVerification`. Slightly change the return values of FindKernelRandom and FindKernelFastNormalClosure: previously `true` denoted success and `false` denoted that something went wrong while computing an SLP in the image node. Now in the latter situation `fail` is returned. This is to bring them in line with the return values of the new function `ImmediateVerification`, which returns `true` upon successfull verification, `false` upon finding new kernel generators, and `fail` upon failure to compute an SLP in the image node. Add a function handling the situation where immediate verification should be performed, but only trivial kernel generators were found. Also remove the `InfoRecog` progress indicator during immediate verification. Reenable and add tests in tst/bugfix.tst and tst/working/veryslow/ClassicalNatural.tst for: Fixes gap-packages#11, fixes gap-packages#16, fixes gap-packages#35, fixes gap-packages#37. squash
b61be0b to
c59a538
Compare
|
Hrmpf, I cleaned up the handling of the case where the kernel was recognized as being trivial, but now |
|
So, I've compared how often recog incorrectly recognizes the groups in |
With this PR General performance doesn't seem to be affected too much by this PR.
Test runsWith PRAllQuickMasterAllQuick |
|
And what exactly in bugfix.tst became so slow, and why? |
|
If I remove the tests for the above issues, then the test file again runs in 220ms. So everything is fine there. |
|
I added a test for GL(3,27). Maybe then we don't hit the spurious random error anymore. |
|
So because you added some slow tests to |
I think previously there only were two tests in there. I can split the file up, but I'll do that now in a separate PR. I have been fighting with the test suite for so long that I just want to have this in now. |
Enables immediate verification and fixes the following issues:
Fixes #11, fixes #16, fixes #35, fixes #37.
To make the immediate verification work a few fixes to other functions are needed. The main commit is f45c7e0.
Previously this PR also did some other things. I've put these other things into separate PRs such that this one now only contains the commits related to immediate verification.
If we merge this, I think we won't need mandarins anymore. If we want to have the "generate a hundred random elements and send them through the recognition tree" we could do the following: we could add a "thorough verification" option which does what immediate verification does for the root of a recog tree, but with more random elements. If that fails maybe restart the whole computation and if that also doesn't do the trick, tell the user.