flask-split icon indicating copy to clipboard operation
flask-split copied to clipboard

ValueError: math domain error

Open arg0s opened this issue 12 years ago • 7 comments

Thanks for the excellent work on flask-split. At this point, the /split route is bailing out with this error. Let me know if you have any insights. I've got the latest version from pip.

2013-05-17T12:10:04.083015+00:00 app[web.1]: 2013-05-17T12:10:04.083146+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/jinja2/environment.py", line 372, in getattr 2013-05-17T12:10:04.083290+00:00 app[web.1]: return getattr(obj, attribute) 2013-05-17T12:10:04.083378+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/flask_split/models.py", line 110, in z_score 2013-05-17T12:10:04.083477+00:00 app[web.1]: return mean / sqrt(var_cr + var_crc) 2013-05-17T12:10:04.083572+00:00 app[web.1]: ValueError: math domain error

arg0s avatar May 17 '13 12:05 arg0s

It seems that var_cr + var_crc is negative in your case, which causes sqrt to raise ValueError. I don't know how this is possible since both var_cr and var_crc should always be positive. Can you check what are the values of cr, crc, n and nc variables in z_score property, when this error is raised?

jpvanhal avatar May 17 '13 12:05 jpvanhal

Here you go. Let me know if you need more details.

>>> cr = 0.0
>>> crc = 10.3333333333
>>> n = 3
>>> nc = 3
>>> 
>>> mean = cr-crc
>>> var_cr = cr * (1 - cr) / float(n)
>>> var_crc = crc * (1 - crc) / float(nc)
>>> var_cr
0.0
>>> var_crc
-32.14814814792963
>>> 

arg0s avatar May 17 '13 13:05 arg0s

The problem seems to be that your control alternative has more completions (31) than participations (3), which leads to crc not being between 0 and 1. I guess the reason for that is that finished() does not somehow mark the experiment as finished or the session is not saved after being modified.

I would appreciate if you could either debug finished() and check if the experiment is properly being saved to the 'split_finished' in session, or provide a minimal code that introduces this bug.

jpvanhal avatar May 18 '13 07:05 jpvanhal

Hmm OK. Does the module take care of ensuring repeat calls to finish don't inflate the counts or do these need to be managed so they match the ab calls? Users may be refreshing the finish page. On May 18, 2013 1:23 PM, "Janne Vanhala" [email protected] wrote:

The problem seems to be that your control alternative has more completions (31) than participations (3), which leads to crc not being between 0 and

  1. I guess the reason for that is that finished() does not somehow mark the experiment as finished or the session is not saved after being modified.

I would appreciate if you could either debug finished() and check if the experiment is properly being saved to the 'split_finished' in session, or provide a minimal code that introduces this bug.

— Reply to this email directly or view it on GitHubhttps://github.com/jpvanhal/flask-split/issues/2#issuecomment-18096807 .

arg0s avatar May 18 '13 08:05 arg0s

Yes, the module does take care that repeating calls to finish don't inflate the counts.

jpvanhal avatar May 18 '13 08:05 jpvanhal

Got it. If its fine can I have your IRC handle? I'll ping you when I'm home and we can figure this out.

Arvi On May 18, 2013 1:45 PM, "Janne Vanhala" [email protected] wrote:

Yes, the module does take care that repeating calls to finish don't inflate the counts.

— Reply to this email directly or view it on GitHubhttps://github.com/jpvanhal/flask-split/issues/2#issuecomment-18097049 .

arg0s avatar May 18 '13 08:05 arg0s

Still have this error in some circumstances. Appears the user conversion tracking may be screwing up the math. Did you solve previously?

NickWoodhams avatar Apr 28 '15 10:04 NickWoodhams