<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jun 9, 2021 at 12:16 PM Tirth Patel <<a href="mailto:tirthasheshpatel@gmail.com">tirthasheshpatel@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"></div><div><div style="font-family:verdana,sans-serif;font-size:small">Hi Ralf,</div><br></div><div>On Tue, Jun 8, 2021 at 11:14 PM Ralf Gommers <<a href="mailto:ralf.gommers@gmail.com" target="_blank">ralf.gommers@gmail.com</a>> wrote:</div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 8, 2021 at 6:53 PM Tirth Patel <<a href="mailto:tirthasheshpatel@gmail.com" target="_blank">tirthasheshpatel@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><div style="font-family:verdana,sans-serif;font-size:small"><div style="font-family:verdana,sans-serif;font-size:small">Other Notes</div><div style="font-family:verdana,sans-serif;font-size:small">-----------<br></div><div style="font-family:verdana,sans-serif;font-size:small"><br></div><div style="font-family:verdana,sans-serif;font-size:small">I think NumPy 1.19 introduced a stable interface for its Generator API. Before that the RandomState API was stable. But RandomState doesn't have a Cython Interface and its Python interface is very slow to be practically useful. For instance, it takes around 7ms to sample 100,000 samples from the normal distribution using the TDR method on NumPy >= 1.19 while it takes around 911ms on NumPy == 1.18 which is around 130 times slower! Is there a plan to drop 1.16 soon and can we use the unstable Generator API from 1.17 onwards or would it too unsafe? Maybe this discussion isn't suited here but I just thought to put it out as a note.</div></div></div></blockquote><div><br></div><div>We can drop NumPy 1.16 right now. I'm not sure if the 1.17 C API for numpy.random is usable - it was either missing some features or not present at all.</div></div></div></blockquote><div><br></div><div><div style="font-family:verdana,sans-serif;font-size:small">Nice to hear that we don't need to support 1.16 now! With that, I think there is a possibility of using the Cython API of NumPy BitGenerator to speed things up. I checked out a few releases on NumPy and found out BitGenerator was added in 1.17 with a Cython API. All we need is the `next_double` and `state` member of the `bitgen_t` object which are present from 1.17 onwards. The only difference is that 1.17 contains the `bitgen_t` in `numpy.random.common` module while it was shifted to `numpy.random` from 1.18 onwards. I don't know if there are any known bugs in 1.17 and 1.18 before becoming stable in 1.19. If not, we might be able to use the unstable NumPy Generator in 1.17 and 1.18 for our purpose. What do you think?<br></div></div></div></div></blockquote><div><br></div><div>I think this is fine - if it helps that much, let's just try it. If it passes all tests with the latest bugfix releases of 1.17.x and 1.18.x then it should be okay.</div><div><br></div><div>Cheers,<br></div><div>Ralf</div><div><br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div><div style="font-family:verdana,sans-serif;font-size:small"></div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div> What the recently added biasedurn does is a conditional compile - only use that C API for NumPy >= 1.19. If the performance on <1.19 isn't completely unusable, that may be a good option?<br></div></div></div></blockquote><div><br></div><div><div style="font-family:verdana,sans-serif;font-size:small">Yes, that's what I do right now. But I am just worried if the performance on <1.19 is too slow to practically rely on. Anyways, thanks for looking into this!<br></div></div></div></div></blockquote></div></div>