Open ParticularlyPythonicBS opened 3 months ago
The error was fixed by specifying levy_area=dfx.SpaceTimeLevyArea
in the brownian noise function. Leaving this up in hopes for performance improvement suggestions and possible improvements to error message.
Definitely agreed that the error message could be improved. I'd be happy to take a PR on that!
As for performance, you appear to be including the compile time as well.
I would love to submit a PR for this! This is the error that is currently thrown: https://github.com/patrick-kidger/diffrax/blob/a37a2767b32990345f8120fd4534e068b8acb919/diffrax/_integrate.py#L1025-L1031
Should this be caught as a different error or is it better to augment this error message with a suggestion to check the levy area?
I think let's augment this error message. Tagging @lockwo as I think he may have some idea on this one.
Probably we should write out something quite verbose -- in particular, what structure we actually got! And if it's the vector field / control type that goes wrong, we should call that out explicitly. (Probably we don't need to mention Levy area anywhere, that will naturally come out of a message of the form f"expected control type {foo} but got control type {bar}"
That sounds like a great idea, it would make that error more useful even outside the scope of SDE solvers! I look forward to lockwo's input.
Augmenting the error message is definitely a good idea (related issues: https://github.com/patrick-kidger/diffrax/issues/461, https://github.com/patrick-kidger/diffrax/issues/446), the core issue currently is that the message isn't very informative about why the terms are failing. To that end, I think a straightforward augmentation would be to characterize the errors specifically inside the term checker (https://github.com/patrick-kidger/diffrax/blob/main/diffrax/_integrate.py#L119) and generate error messages based on that characterization, which would help people narrow down where the error is. Additionally, poorly formed shapes (preventing even drift.vf from running correctly) is a not uncommon error that results in this message (esp. for scalar/1D systems where you have some squeezing and unsqueezing), so raising specific errors based on if the eval_shape checks fail could be an option to.
For the levy area stuff, in general they are caught in the "expect but got format", but I think its worth making extra clear, since the default expected got would look not too dissimilar from the above where you have something like expected control term diffrax._term.AbstractTerm[typing.Any, diffrax._custom_types.AbstractSpaceTimeLevyArea]]] got diffrax._term.AbstractTerm[typing.Any, diffrax._custom_types.AbstractBrownianIncrement]]].
which is pretty clear but just adding a flag/specific text to say "This solver requires a levy area calculation, you need to add levy_area=diffrax.SpaceTimeLevyArea
to your Brownian process" since I think that will be like the second most common error here.
Tangentially, the Levy Area docs could also probably be improved, they are printing a bunch of default attributes that aren't important and also some explanation of what a Levy Area is (and why they are integrals of space time or space time and time) would probably be beneficial.
Happy to take a crack at the above to show what I mean, or if you want to @ParticularlyPythonicBS also works.
@lockwo you seem to have expertise with the library that will let you do this much faster than I could. So I would be happy to just follow along. If you are otherwise occupied, I am happy to take an attempt at it though.
My sort of idea: https://github.com/patrick-kidger/diffrax/pull/478
Hi, Can you help me debug why this SDE would throw errors for SRK solvers, but works and integrates fine with ERK and Milstein? Here is a simplified version of the code:
throws this error:
but I am already using the multiTerm(odeTerm, controlTerm) format unless I am misunderstanding something.
Also this same simulation runs much faster in Mathematica(KloedenPlatenSchurz method), any suggestions on how to speed this up would be very helpful
Thanks for this great library!