Skip to content

Instantly share code, notes, and snippets.

@HarlanH
Created June 3, 2010 02:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HarlanH/423333 to your computer and use it in GitHub Desktop.
Save HarlanH/423333 to your computer and use it in GitHub Desktop.
Code for the NYC R Meetup on debugging R
If you see the bug, keep your damn mouth shut!
Example #1
Show data.
I've written pointless code.
traceback() shows where the problem lies, but not when or why
Explain "call stack" made of "frames", noting that many things that don't
syntactically look like function calls in R actually are.
Error doesn't seem to happen all the time, so adding browser() calls
might not be very helpful.
Use options(error=recover) to invoke recover, which is basically
a wrapper around browser, only when the error happens.
Don't know why frames are in opposite order in recover vs traceback!
Unlike browser, "c" or "n" or Enter drop you back to the stack trace.
Look at frame 1 first. Use ls() to see variables. head(df), head(df2),
tail(df2).
Lookat frame 2 now. See that i = 60. Use body() to see the body of the current
function. df[i, "wacky.sum"] looks ok. df[i, "rx"] looks ok. df[i, 'axyzoz.XS']
gives NULL! That's odd. Look at whole row with df[i, ]. Row name is wrong?
unique(df$rx), names(df). Yes.
Quit out, fire the intern, edit that CSV file, rerun, no problemo.
Turn off with options(error=NULL)
Example #2
head(cats.test), head(rxs.test)
Walk through code. Merge rx effectiveness into pets df. Create a vector based
on the loss vector. Copy the df, add the new column, and return. (Yes, silly in
this case!)
Try it: uh oh
traceback() says the problem is in the assignment to exp.profit field, toward the end.
debug(do.tricky.thing)
debug is like browser, except you can walk through statements in the current block
with "n" or Enter. "c" drops you out of the debugger and return to normal execution.
"Q" quits entirely.
sim.result numbers look reasonable, but there are 7, and pets has only 6 rows!
merged.test has 7 rows two! baby is duplicated! something must be wrong with merge.
table(meds$rx) shows a dupe. That'll do it.
Assert that there are no dupes! That puts the error in the right place.
stopifnot(all(table(meds$rx) == 1))
(or, if (...) stop ("error msg"))
Confirm that that is the case.
Solve the problem by going back to the data source and correcting it.
Example #3
Show two data frames.
Walk quickly through code. Run it.
There's no error, do the numbers make sense?
Well, the reported numbers should be roughly the mean of the Ns for each medicine.
The one for Prlylife is too small! WTF?
If we had temporary variables in scope, we could print those, but everything's buried in a
ddply in a function!
We might want to debug within the anonymous ddply function, but we don't want to
edit the code source, and we don't want to have to walk through what might be thousands
of calls to that function just to get to the error!
Trick is called "conditional breakpoints". They're not that easy to set in R, sadly,
although I suspect they're easier with Revo R's GUI.
To use conditional breakpoints in R, use trace() function. Let's walk through it...
?trace
Most useful parameters are what, tracer, and at.
The tracer parameter is an expression. By default, it's a function that prints the call.
So, trace(sample) shows each call to the sample function. Demo.
You can also use other expressions, like the browser function. trace(sample, browser).
Demo.
browser shows the original code
body() shows that the call to browser was added into the version of the function in memory!
Woah, super useful!
But this function's not immediately very useful to us, at least not right now.
What we really want is to invoke browser from within the anonymous function that's the
argument to ddply! But it has no name, so we can't! The at argument to trace is the
solution. It's difficult to use, though.
untrace(sample)
as.list(body(do.trickier.thing))
as.list(body(do.trickier.thing)[[3]])
as.list(body(do.trickier.thing)[[3]][[3]][[4]])
as.list(body(do.trickier.thing))
trace(do.trickier.thing, browser, at=list(c(3,3,4,3)))
do.trickier.thing(rxs.test, exps.test)
body()
Now in the right place, but we don't actually want to stop now, since this one seems
to work! Make this conditional:
trace(do.trickier.thing, quote(if (df$rx[[1]]=='prlylyfe') browser()), at=list(c(3,3,4,3)))
body() shows the new conditional code
df shows the data
Now let's try evaluating something, and finally fixing this bug.
Confirm call to data.frame gives answer about half of what's expected, which is a bit more than
16.
Debug from the inside out, start with sample(df$Ns, 10, replace=TRUE). Wait, what? This should
give me 10 16s, but it doesn't!
?sample
This is what you get when people try to be clever. Software library design is no time to be
clever!
Many solutions. Might just use if(length(df$Ns) == 1) rep() or something...
options(stringsAsFactors=FALSE)
library(plyr)
# Example #1: Complex processing, don't want to modify code. traceback(),
# error=recover().
all.dat <- read.csv('piratical_dat.csv')
dat.test <- head(all.dat)
process.complexiously <- function(df, arg1 = .12, arg2 = function(x, q=arg1) ifelse(x<q, x, q+2),
stuff=0) {
do <- sum(stuff)
other <- rep(arg1, 44)
do <- sum(other, stuff)
df2 <- ddply(df, .(rx), transform, wacky.sum=dzyhapi + qwexinox + 7)
more.wackiness(df2)
}
more.wackiness <- function(df) {
for (i in 1:(nrow(df) * .95))
{
df[i, 'wacky.sum'] <- df[i, 'wacky.sum'] + sum(df[, df[i, 'rx']])
}
df
}
process.complexiously(dat.test)
process.complexiously(all.dat)
# Example #2: Error doesn't tell you where the problem is. Debug and walk through. Asssert
# invariants.
cats.test <- data.frame(cat = c('fluffy', 'spot', 'tiger', 'baby', 'garth', 'felix'),
height = c(15, 9, 22, 11, 12, 9),
weight = c(6, 5, 14, 9, 4, 5),
rx = c('dzyhapi', 'qqrvibe AB', 'xyxyslim', 'ytrwow', 'prlylyfe', 'dzyhapi'))
rxs.test <- data.frame(rx = c('dzyhapi', 'qqrvibe AB', 'aarvbyol', 'prlylyfe', 'ytrwow', 'zorncat',
'qwexinox', 'ytrwow', 'xyxyslim', 'axyzoz XL', 'poyqwr'),
loss = c(.04, .13, .02, .04, .06, .10, .09, .04, .01, .05, .05))
do.tricky.thing <- function(pets, meds, sd=.03)
{
merged.test <- merge(pets, meds, by='rx')
# complicated Monte Carlo simulation
sim.result <- with(merged.test, loss + rnorm(length(loss), mean=0, sd=sd))
# put it back together and return
ret <- pets
ret$exp.profit <- sim.result
ret
}
res.test <- do.tricky.thing(cats.test, rxs.test)
# Example #3: Debugging when there's no error. Conditional breakpoints.
rxs.test <- data.frame(rx = c('dzyhapi', 'qqrvibe AB', 'aarvbyol', 'prlylyfe', 'ytrwow', 'zorncat',
'qwexinox', 'xyxyslim', 'axyzoz XL', 'poyqwr'),
loss = c(.04, .13, .02, .04, .06, .10, .09, .01, .05, .05))
exps.test <- data.frame(rx = c('dzyhapi', 'dzyhapi', 'dzyhapi', 'prlylyfe',
'qqrvibe AB', 'qqrvibe AB', 'qqrvibe AB',
'xyxyslim', 'xyxyslim', 'xyxyslim', 'xyxyslim',
'ytrwow', 'ytrwow'),
Ns = c(15, 30, 36, 16, 26, 36, 42, 44, 20, 24, 19, 32, 29))
do.trickier.thing <- function(meds, exps, resample.n = 1000)
{
# This does some sort of sampling-based metaanalytical computation. For each medicine,
# there's several experiments, each with a different number of subjects. Do some
# sort of silly computation that's a mean of those sample sizes plus the largest loss
# from some other data. Lord knows why.
# want those loss values
merged <- merge(exps, meds, by='rx')
# use resampling to get something probably meaningless
meaning.less <- ddply(merged, .(rx), function(df) {
data.frame(asdf = mean(sample(df$Ns, resample.n, replace=TRUE)) + max(df$loss))
})
meaning.less
}
do.trickier.thing(rxs.test, exps.test)
#
rx dzyhapi qqrvibe.AB aarvbyol prlylyfe ytrwow zorncat qwexinox xyxyslim axyzoz.XL poyqwr
dzyhapi 0.66 0.58 0.53 0.09 0.99 0.45 0.49 0.06 0.92 0.15
qqrvibe.AB 0.14 0.32 0.21 0.16 0.12 0.18 0.63 0.59 0.5 0.84
aarvbyol 0.92 0.78 0.98 0.36 0.95 0.53 0.53 0.37 0.69 0.77
prlylyfe 0.35 0.82 0.14 0.37 0.57 0.5 0.92 0.1 0.59 0.62
ytrwow 0.6 0.16 0.51 0.25 0.49 0.5 0.41 0.91 0.04 0.22
zorncat 0.13 0.09 0.44 0.35 0.2 0.89 0.72 0.31 0.52 0.73
qwexinox 0.81 0.19 0.57 0.28 0.88 0.43 0.63 0.42 0.57 0.79
xyxyslim 0.9 0.55 0.2 0.29 0.91 0.97 0.73 0.99 0.13 0.66
axyzoz.XL 0.5 0.36 0.19 0.27 0.55 0.02 0.62 0.47 0.5 0.58
poyqwr 0.52 0.6 0.85 0.52 0.08 0.8 0.68 0.64 0.27 0.43
dzyhapi 0.48 0.16 0.76 0.07 0.33 0.96 0.3 0.89 0.91 0.94
qqrvibe.AB 0.64 0.61 0.71 0.22 0.25 0.9 0.92 0.99 0.82 0.52
aarvbyol 0.27 0.61 0.97 0.85 0.43 0.13 0.99 0.27 0.09 0.56
prlylyfe 0.08 0.99 0.48 0.01 0.04 0.8 0.37 0.27 0.63 0.36
ytrwow 0.3 0.8 0.81 0.36 0.1 0.7 0.91 0.42 0.51 0.63
zorncat 0.97 0.87 0.81 0.32 0.38 0.28 0.45 0.58 0.96 0.99
qwexinox 0.47 0.41 0.69 0.49 0.66 0.27 0.15 0.77 0.5 0.96
xyxyslim 0.92 0.6 0.44 0.18 0.06 0.92 0.93 0.32 0.82 0.17
axyzoz.XL 0.56 0.48 0.72 0.75 0.69 0.29 0.25 0.56 0.11 0.53
poyqwr 0.16 0.68 0.94 0.04 0.75 0.23 0.41 0.06 0.04 0.41
dzyhapi 0.65 0.45 0.21 0.75 0.16 0.86 0.34 0.7 0.21 0.27
qqrvibe.AB 0.64 0.38 0.61 0.2 0.29 0.8 0.23 0.75 0.15 0.28
aarvbyol 0.86 0.84 0.32 0.44 0.41 0.97 0.95 0.39 0.39 0.62
prlylyfe 0.16 0.56 0.55 0.79 0.55 0.87 0.58 0.75 0.12 0.52
ytrwow 0.74 0.42 0.08 0.21 0.44 0.65 0.41 0.05 0.57 0.59
zorncat 0.65 0.96 0.46 0.52 0.67 0.8 0.58 0.4 0.99 0.08
qwexinox 0.54 0.39 0.53 0.47 0.73 0.71 0.06 0.9 0.07 0.93
xyxyslim 0.42 0.59 0.1 0.27 0.86 0.7 0.15 0.81 0.35 0.96
axyzoz.XL 0.6 0.36 0.38 0.99 0.95 0.71 0.99 0.68 0.91 0.14
poyqwr 0.64 0.31 0.09 0.92 0.68 0.78 0.47 0.56 0.85 0.7
dzyhapi 0.31 0.65 0.77 0.54 0.65 0.97 0.75 0.83 0.11 0.84
qqrvibe.AB 0.91 0.39 0.01 0.25 0.97 0.7 0.62 0.74 0.57 0.41
aarvbyol 0.66 0.69 0.66 0.99 0.55 0.96 0.66 0.57 0.85 0.39
prlylyfe 0.1 0.04 0.25 0.29 0.24 0.42 0.55 0.34 0.54 0.45
ytrwow 0.96 0.04 0.41 0.59 0.25 0.12 0.1 0.28 0.08 0.07
zorncat 0.28 0.74 0.86 0.2 0.86 0.94 0.7 0.38 0.08 0.29
qwexinox 0.71 0.88 0.99 0.6 0.13 0.41 0.45 0.67 0.7 0.87
xyxyslim 0.06 0.35 0.62 0.88 0.72 0.23 0.58 0.5 0.49 0.89
axyzoz.XL 0.2 0.33 0.46 0.8 0.33 0.47 0.1 0.88 0.62 0.22
poyqwr 0.06 0.81 0.7 0.36 0.74 0.94 0.47 0.7 0.52 0.12
dzyhapi 0.82 0.68 0.16 0.19 0.32 0.97 0.22 0.39 0.02 0.54
qqrvibe.AB 0.87 0.53 0.13 0.31 0.01 0.15 0.67 0.96 0.23 0.46
aarvbyol 0.66 0.69 0.26 0.42 0.23 0.85 0.62 0.56 0.05 0.04
prlylyfe 0.11 0.04 0.4 0.57 0.73 0.58 0.54 0.1 0.85 0.55
ytrwow 0.38 0.07 0.01 0.16 0.32 0.95 0.38 0.74 0.24 0.78
zorncat 0.16 0.21 0.44 0.14 0.87 0.79 0.5 0.99 0.91 0.85
qwexinox 0.95 0.43 0.43 0.09 0.71 0.96 0.7 0.99 0.05 0.18
xyxyslim 0.05 0.6 0.25 0.58 0.71 0.62 0.47 0.33 0.52 0.94
axyzoz.XL 0.23 0.71 0.84 0.58 0.89 0.07 0.6 0.02 0.5 0.09
poyqwr 0.92 0.09 0.54 0.06 0.2 0.33 0.79 0.97 0.01 0.83
dzyhapi 0.91 0.32 0.81 0.83 0.99 0.21 0.81 0.65 0.59 0.72
qqrvibe.AB 0.93 0.53 0.55 0.17 0.22 0.91 0.19 0.16 0.7 0.61
aarvbyol 0.97 0.13 0.01 0.51 0.45 0.25 0.68 0.23 0.47 0.34
prlylyfe 0.64 0.41 0.46 0.75 0.65 0.93 0.77 0.74 0.17 0.91
ytrwow 0.96 0.52 0.62 0.66 0.94 0.25 0.3 0.47 0.82 0.22
zorncat 0.97 0.45 0.47 0.72 0.56 0.2 0.6 0.49 0.67 0.68
qwexinox 0.38 0.5 0.61 0.93 0.3 0.87 0.61 0.02 0.51 0.64
xyxyslim 0.69 0.97 0.14 0.3 0.16 0.93 0.9 0.69 0.1 0.42
axyzoz.XL 0.54 0.24 0.72 0.85 0.32 0.14 0.97 0.18 0.21 0.43
poyqwr 0.47 0.96 0.9 0.51 0.96 0.52 0.35 0.25 0.28 0.61
dzyhapi 0.93 0.01 0.29 0.29 0.97 0.78 0.63 0.33 0.71 0.89
qqrvibe.AB 0.7 0.83 0.38 0.35 0.78 0.53 0.62 0.34 0.69 0.38
aarvbyol 0.74 0.85 0.95 0.76 0.21 0.09 0.77 0.19 0.76 0.6
prlylyfe 0.77 0.6 0.52 0.62 0.94 0.26 0.58 0.83 0.66 0.25
ytrwow 0.44 0.89 0.18 0.68 0.68 0.84 0.53 0.62 0.25 0.89
zorncat 0.19 0.62 0.97 0.72 0.5 0.18 0.26 0.63 0.14 0.87
qwexinox 0.02 0.78 0.71 0.34 0.56 0.87 0.61 0.14 0.38 0.49
xyxyslim 0.38 0.49 0.94 0.41 0.67 0.85 0.02 0.15 0.89 0.63
axyzoz.XL 0.9 0.06 0.99 0.63 0.94 0.15 0.01 0.73 0.79 0.17
poyqwr 0.21 0.41 0.86 0.82 0.28 0.55 0.11 0.86 0.34 0.14
dzyhapi 0.04 0.94 0.49 0.25 0.83 0.82 0.3 0.13 0.29 0.9
qqrvibe.AB 0.29 0.51 1 0.74 0.6 0.07 0.98 0.41 0.95 0.31
aarvbyol 0.33 0.39 0.15 0.54 0.29 0.9 0.19 0.37 1 0.31
prlylyfe 0.18 0.33 0.55 0.54 0.19 0.16 0.52 0.13 0.29 0.22
ytrwow 0.65 0.84 0.71 0.58 0.78 0.49 0.62 0.46 0.69 0.92
zorncat 0.29 0.24 0.16 0.65 0.17 0.92 0.63 0.37 0.67 0.33
qwexinox 0.86 0.61 0.2 0.73 0.14 0.79 0.23 0.23 0.21 0.02
xyxyslim 0.82 0.71 0.55 0.89 0.63 0.61 0.25 0.54 0.62 0.28
axyzoz.XL 0.98 0.25 0.53 0.24 0.38 0.95 0.48 0.09 0.46 0.71
poyqwr 0.48 0.39 0.09 0.81 0.53 0.24 0.34 0.34 0.88 0.89
dzyhapi 0.86 0.83 0.17 0.12 0.72 0.12 0.1 0.74 0.22 0.76
qqrvibe.AB 0.24 0.87 0 0.16 0.73 0.45 0.85 0.95 0.36 0.53
aarvbyol 0.65 0.57 0.94 0.91 0.87 0.61 0.3 0.68 0.98 0.01
prlylyfe 0.95 0.96 0.23 0.55 0.59 0.86 0.15 0.76 0.68 0.53
ytrwow 0.24 0.67 0.15 0.51 0.22 0.52 0.44 0.39 0.2 0.98
zorncat 0.1 0.59 0.34 0.77 0.85 0.65 0.16 0.37 0.7 0.75
qwexinox 0.14 0.77 0.77 0.7 0.85 0.83 0.41 0.25 0.15 0.2
xyxyslim 0.46 0.94 0.68 0.46 0.03 0.37 0.35 0.4 0.78 0.02
axyzoz.XL 0.86 0.01 0.02 0.55 0.96 0.26 0.59 0.77 0.71 0.09
poyqwr 0.94 0.09 0.2 0.75 0.22 0.74 0.05 0.96 0.97 0.51
dzyhapi 0.27 0.97 0.07 0.35 0.67 0.97 0.61 0.51 0.43 0.98
qqrvibe.AB 0.38 0.67 0.04 0.67 0.49 0.59 0.23 0.17 0.05 0.85
aarvbyol 0.06 0.46 0.24 0.23 0.81 0.22 0.69 0.13 0.91 0.9
prlylyfe 0.63 0.79 0.37 0.77 0.67 0.53 0.13 0.71 0.65 0.94
ytrwow 0.75 0.65 0.39 0.1 0.74 0.25 0.88 0.8 0.14 0.77
zorncat 0.65 0.87 0.49 0.79 0.89 0.6 0.91 0.64 0.12 0.34
qwexinox 0.31 0.28 0.8 0.11 0.58 0.46 0.95 0.67 0.75 0.82
xyxyslim 0.93 0.54 0.87 0.91 0.53 0.48 0.7 0.69 0.62 0.16
axyzoz.XL 0.95 0.5 0.35 0.22 0.12 0.07 0.19 0.56 0.72 0.6
poyqwr 0.96 0.22 0.92 0.37 0.92 0.43 0.32 0.05 0.12 0.36
dzyhapi 0.03 0.12 0.26 0.1 0.67 0.43 0.01 0.37 0.5 0.58
qqrvibe.AB 0.17 0.59 0.22 0.93 0.62 0.69 0.79 0.94 0.47 0.34
aarvbyol 0.73 0.84 0.21 0.04 0.17 0.08 0.44 0.6 0.27 0.7
prlylyfe 0.94 0.6 0.21 0.07 0.51 0.34 0.28 0.06 0.6 0.74
ytrwow 0.45 0.2 0.99 0.88 0.79 0.82 0.49 0.47 0.17 0.69
zorncat 0.08 0.12 0.73 0.28 0.39 0.49 0.29 0.01 0.88 0.37
qwexinox 0.42 0.74 0.68 0.78 0.34 0.8 0.54 0.85 0.13 0.77
xyxyslim 0.58 0.97 0.67 0.44 0.61 0.74 0.77 0.06 0.51 0.19
axyzoz.XL 0.69 0.28 0.44 0.94 0.78 0.98 0.57 0.63 0.27 0.4
poyqwr 0.75 0.41 0.02 0.64 0.18 0.72 0.24 0.08 0.27 0.16
dzyhapi 0.9 0.7 0.78 0.84 0.06 0.89 0.56 0.79 0.57 0.72
qqrvibe.AB 0.75 0.84 0.57 0.31 0.97 0.78 0.22 0.17 0.32 0.97
aarvbyol 0.91 0.14 0.62 0.3 0.62 0.05 0.76 0.62 0.52 0.36
prlylyfe 0.64 0.69 0.6 0.17 0.56 0.56 0.28 0.75 0.43 0.56
ytrwow 0.85 0 0.82 0.85 0.79 0.05 0.12 0.51 0.68 0.21
zorncat 0.77 0.4 0.77 0.79 0.08 0.49 0.02 0.74 0.3 0.12
qwexinox 0.57 0.73 0.62 0.76 0.48 0.61 0.78 0.71 0.8 0.92
xyxyslim 0.82 0.47 0.58 0.28 0.88 0.03 0.14 0.41 0.38 0.92
axyzoz.XL 0.06 0.65 0.56 0.21 0.2 0.55 0.74 0.39 0.33 0.67
poyqwr 0.22 0.24 0.54 0.92 0.23 0.61 0.09 0.65 0.88 0.3
dzyhapi 0.85 0.93 0.37 0.86 0.01 0.08 0.58 0.63 0.17 0.98
qqrvibe.AB 0.28 0.69 0.54 0.17 0.88 0.12 0.32 0.3 0.27 0.28
aarvbyol 0.94 0.95 0.45 0.42 0.4 0.36 0.5 0.39 0.26 0.05
prlylyfe 0.79 0.74 0.46 0.98 0.74 0.98 0.65 0.09 0.14 0.28
ytrwow 0.22 0.98 0.36 0.42 0.61 0.62 0.44 0.24 0.04 0.54
zorncat 0.35 0.35 0.5 0.82 0.46 0.49 0.87 0.09 0.49 0.13
qwexinox 0.09 0.74 0.99 0.85 0.41 0.91 0.64 0.97 0.3 0.13
xyxyslim 0.29 0.02 0.42 0.31 0.22 0.61 1 1 0.48 0.08
axyzoz.XL 0.06 0.47 0.7 0.71 0.96 0.72 0.25 0.69 0.45 0.84
poyqwr 0.3 0.8 0.98 0.79 0.5 0.85 0.3 0.23 0.8 0.88
dzyhapi 0.07 0.21 0.29 0.3 0.66 0.51 0.46 0.66 0.74 0.47
qqrvibe.AB 0.78 0.58 0.85 0.91 0.05 0.36 0.55 0.21 0.35 0.69
aarvbyol 0.45 0.97 0.06 0.25 0.6 0.45 0.85 0.37 0.48 0.1
prlylyfe 0.98 0.69 0.3 0.47 0.95 0.97 0.62 0.78 0.73 0.88
ytrwow 0.16 0.34 0.64 0.07 0.65 0.36 0.2 0.22 0.77 0.01
zorncat 0.84 0.55 0.94 0.52 0.95 0.24 0.9 0.1 0.12 0.44
qwexinox 0.11 0.35 0.98 0.25 0.65 0.23 0.6 0.3 0.78 0.98
xyxyslim 0.71 0.51 0.83 0.09 0.9 0.27 0.51 0.96 0.94 0.11
axyzoz.XL 0.42 0.03 0.29 0.72 0.77 0.18 0.13 0.46 0.11 0.29
poyqwr 0.9 0.51 0.09 0.44 0.62 0.34 0.04 0.94 0.08 0.96
dzyhapi 0.38 0.62 0.1 0.65 0.64 0.34 0.93 0.35 0.24 0.51
qqrvibe.AB 0.13 0.76 0.55 0.28 0.85 0.07 0.57 0.29 0.85 0.47
aarvbyol 0.74 0.73 0.33 0.42 0.15 0.51 0.76 0.64 0.69 0.23
prlylyfe 0.81 0.02 0.43 0.87 0.65 0.34 0.74 0.88 0.62 0.85
ytrwow 0.44 0.48 0.63 0.79 0.53 0.99 0.16 0.89 0.77 0.83
zorncat 0.36 0.77 0.6 0.29 0.09 0.43 0.77 0.34 0.29 0.73
qwexinox 0.09 0.87 0.7 0.97 0.76 0.56 0.12 0.53 0.57 0.65
xyxyslim 0.42 0.73 0.48 0.98 0.35 0.76 0.98 0.48 0.42 0.87
axyzoz.XL 0.56 0.48 0.94 0.74 0.77 0.97 0.35 0.21 0.21 0.39
poyqwr 0.12 0.11 0.01 0.8 0.2 0.68 0.95 0.18 0.33 0.04
dzyhapi 0.84 0.73 0.27 0.35 0.52 0.78 0.22 0.1 0.82 0.29
qqrvibe.AB 0.35 0.08 0.92 0.54 0.91 0.68 0.59 0.96 0.86 0.8
aarvbyol 0.53 0.74 0.21 0.18 0.51 0.09 0.3 0.45 0.36 0.85
prlylyfe 0.09 0.65 0.56 0.39 0.68 0.48 0.51 0.31 0.21 0.16
ytrwow 0.25 0.07 0.19 0.03 0.62 0.97 0.62 0.8 0.71 0.58
zorncat 0.86 0.7 0.56 0.16 0.54 0.24 0.92 1 0.51 0.99
qwexinox 0.16 0.38 0.28 0.99 0 0.03 0.67 0.3 0.17 0.66
xyxyslim 0.32 0.21 0.73 0.65 0.73 0.61 0.19 0.4 0.45 0.2
axyzoz.XL 0.05 0.32 0.16 0.77 0.91 0.05 0.11 0.51 0.85 0.92
poyqwr 0.89 0.39 0.28 0.22 0.79 0.64 0.73 0.22 0.79 0.38
dzyhapi 1 0.55 0.56 0.4 0.03 1 0.28 0.14 0.97 0.11
qqrvibe.AB 0.81 0.9 0.82 0.82 0.07 0.31 0.97 0.49 0.99 0.09
aarvbyol 0.21 0.42 0.02 0.17 0.42 0.48 0.55 0.06 0.6 0.68
prlylyfe 0.14 0.73 0.28 0.4 0.02 0.82 0.18 0.26 0.69 0.34
ytrwow 0.04 0.04 0.15 0.82 0.49 0.89 0.44 1 0.92 0.2
zorncat 0.23 0.02 0.17 0.21 1 0.25 0.09 0.91 0.51 0.62
qwexinox 0.71 0.28 0.32 0.73 0.08 0.25 0.76 0.43 0.5 0.72
xyxyslim 0.34 0.32 0.31 0.77 0.93 0.79 0.84 0.47 0.66 0.94
axyzoz.XL 0.72 0.56 0.95 0.22 0.19 0.15 0.47 0.95 0.56 0.95
poyqwr 0.67 0.62 0.49 0.06 0.5 0.18 0.25 0.82 0.93 0.11
dzyhapi 0.6 0.83 0.13 0.61 0.43 0.56 0.66 0.54 0.9 0.68
qqrvibe.AB 0.65 0.64 0.1 0.61 0.28 0.53 0.02 0.27 0.62 1
aarvbyol 0.88 0.66 0.05 0.23 0.61 0.2 0.34 0.29 0.41 0.47
prlylyfe 0.66 0.67 0.35 0.2 0.49 0.14 0.86 0.31 0.89 0.72
ytrwow 0.01 0.79 0.85 0 0.59 0.04 0.4 0.69 0.68 0.75
zorncat 0.14 0.54 0.91 0.77 0.7 0.55 0.05 0.06 0.07 0.68
qwexinox 0.98 0.21 0.15 0.79 0.92 0.57 0.41 0.26 0.82 0.58
xyxyslim 0.17 0.88 0.78 0.22 0.23 0.35 0.48 0.21 0.5 0.36
axyzoz.XL 0.46 0.94 0.27 0.11 0.25 0.69 0.7 0.59 0.05 0.14
poyqwr 0.43 0.36 0.14 0.73 0.61 0.08 0.76 0.88 0.38 0.72
dzyhapi 0.33 0.59 0.1 0.45 0.08 0.55 0.31 0.41 0.85 0.11
qqrvibe.AB 0.82 0.08 0.97 0.32 0.77 0.67 0.32 0.45 0.17 0.24
aarvbyol 0.14 0.1 0.69 0.76 0.88 0.37 0.29 0.03 0.58 0.18
prlylyfe 0.44 0.65 0.18 0.21 0.32 0.82 0.11 0.52 0.13 0.3
ytrwow 0.57 0.41 0.62 0.31 0.06 0.54 0.96 0.56 0.28 0.75
zorncat 0.24 0.32 0.14 0.74 0.65 0.72 0.93 0.11 0.47 0.08
qwexinox 0.41 0.72 0.14 0.63 0.94 0.97 0.49 0.24 0.3 0.01
xyxyslim 0.26 0.57 0.27 0.44 0.19 0.44 0.87 0.42 0.64 0.56
axyzoz.XL 0.11 0.95 0.11 0.55 0.14 0.04 0.66 0.46 0.83 0.6
poyqwr 0.46 0.54 0.52 0.87 0.58 0.62 0.97 0.06 0.3 0.88
dzyhapi 0.39 0.09 0.8 0.14 0.39 0.15 0.87 0.72 0.85 0.92
qqrvibe.AB 0.19 0.82 0.56 0.07 0.98 0.56 0.52 0.13 0.58 0.64
aarvbyol 0.91 0.14 0.59 0.62 0.48 0.18 0.4 0.99 0.4 0.31
prlylyfe 0.47 0.82 0.4 0.95 0.39 0.38 0.14 0.2 0.99 0.34
ytrwow 0.7 0.15 0.49 0.92 0.14 0.77 0.08 0.87 0.92 0.29
zorncat 0.81 0.31 0.26 0.69 0.25 0.48 0.15 0.34 0.74 0.51
qwexinox 0.15 0.23 0.76 0.05 0.62 0.96 0.19 0.03 0.49 0.85
xyxyslim 0.96 0.38 0.41 0.39 0.98 0.85 0.17 0.39 0.69 0.93
axyzoz.XL 0.29 0.96 0.29 0.92 0.75 0.87 0.82 0.15 0.65 0.21
poyqwr 0.29 0.38 0.92 0.98 0.95 0.46 0.63 0.63 0.9 0.26
dzyhapi 0.22 0.06 0.2 0.84 0.25 0.08 0.6 0.99 0.74 0.9
qqrvibe.AB 0.11 0.07 0.84 0.74 0.47 0.35 0.04 0.95 0.76 0.56
aarvbyol 0.41 0.79 0.28 0.17 0.19 0.35 0.87 0.84 0.29 0.64
prlylyfe 0.74 0.63 0.88 0.43 0.14 0.61 0.79 0.79 0.83 0.13
ytrwow 0.71 0.94 0.68 0.55 0.08 0.38 0.35 0.84 0.58 0.86
zorncat 0.52 0.59 0.12 0.27 0.46 0.89 0.22 0.83 0.36 0.9
qwexinox 0.73 0.82 0.48 0.11 0.8 0.21 0.28 0.51 0.84 0.29
xyxyslim 0.71 0.47 0.74 0.82 0.75 0.53 0.78 0.78 0.45 0.1
axyzoz.XL 0.59 0.18 0.61 0.97 0.74 0.94 0.1 0.95 0.05 0.52
poyqwr 0.3 0.24 0.39 0.15 0.4 0.09 0.09 0.32 0.13 0.24
dzyhapi 0.54 0.45 0.77 0.62 0.26 0.47 0.72 0.06 0 0.02
qqrvibe.AB 0.83 0.18 0.07 0.15 0.55 0.38 0.54 0.3 0.03 0.14
aarvbyol 0.5 0.22 0.6 0.39 0.96 0.79 0.33 0.35 0.64 0.31
prlylyfe 0.23 0.41 0.27 0.36 0.09 0.59 0.49 0.51 0.03 0.12
ytrwow 0.1 0.31 0.08 0.6 0.81 0.67 0.89 0.39 0.06 0.99
zorncat 0.59 0.68 0.18 0.36 0.21 0.77 0.42 0.02 0.61 0.08
qwexinox 0.14 0.43 0.16 0.56 0.72 0.2 0.28 0.81 0.41 0.2
xyxyslim 0.12 0.59 0.68 0.03 0.32 0.23 0.36 0.29 0.24 0.48
axyzoz.XL 0.12 0.78 0.65 0.2 0.48 0.03 0.1 0.7 0.04 0.3
poyqwr 0.14 0.88 0.03 0.55 0.52 0.12 0.85 0.37 0.5 0.08
dzyhapi 0.81 0.47 0.5 0.23 0.67 0.71 0.19 0.38 0.09 0.22
qqrvibe.AB 0.22 0.02 0.81 0.63 0.62 0.73 0.56 0.97 0.28 0.42
aarvbyol 0.37 0.24 0.33 0.75 0.55 0.2 0.96 0.41 0.89 0.37
prlylyfe 0.4 0.65 0.25 0.88 0.67 0.75 0.24 0.05 0.87 0.76
ytrwow 0.11 0.33 0.47 0.31 0.53 0.65 0.44 0.69 0.38 0.6
zorncat 0.77 0.07 0.23 0.62 0.13 0.1 0.73 0.58 0.14 0.68
qwexinox 0.38 0.9 0.19 0.15 0.06 0.68 0.19 0.73 0.86 0.89
xyxyslim 0.08 0.48 0.33 0.14 0.68 0.54 0.92 0.08 0.58 0.92
axyzoz.XL 0.65 0.97 0.65 0.69 0.74 0.35 0 0.75 0.36 0.54
poyqwr 0.75 0.08 0.11 0.79 0.61 0.62 0.36 0.74 0.65 0.67
dzyhapi 0.28 0.22 0.07 0.06 0.45 0.82 0.57 0.81 0.95 0.36
qqrvibe.AB 0.04 0.68 0.9 0.8 0.02 0.25 0.28 0.52 0.97 0.93
aarvbyol 0.03 0.59 0.54 0.67 0.17 0.03 0.93 0.51 0.06 0.62
prlylyfe 0.65 0.99 0.54 0.22 0.59 0.43 0.94 0.21 0.89 0.14
ytrwow 0.82 0.05 0.35 0.62 0.41 0.47 0.01 0.59 0.52 0.36
zorncat 0.58 0.26 0.09 0.89 0.27 0.4 0.92 0.78 0.95 0.69
qwexinox 0.84 0.52 0.85 0.99 0.94 0.19 0.97 0.91 0.05 0.8
xyxyslim 0.41 0.43 0.06 0.88 0.59 0.78 0.25 1 0.78 0.49
axyzoz.XL 0.42 0.27 0.88 0.78 0.7 0.25 0.73 0.15 0.02 0.35
poyqwr 0.99 0.41 0.16 0.29 0.92 0.89 0.08 0.61 0.04 0.26
dzyhapi 0.82 0.74 0.95 0.52 0.44 0.73 0.33 0.65 0.3 0.08
qqrvibe.AB 0.52 0.62 0.2 0.79 0.49 0.92 0.77 0.15 0.74 0.68
aarvbyol 0.4 0.19 0.91 0.33 0.27 0.45 0.57 0.82 0.83 0.1
prlylyfe 0.17 0.61 0.06 0.83 0.34 0.11 0.05 0.65 0.71 0.09
ytrwow 0.17 0.04 0.45 0.55 0.4 0.64 0.55 0.55 0.01 0.73
zorncat 0.17 0.69 0.26 0.92 0.1 0.54 0.19 0.17 0.54 0.82
qwexinox 0.35 0.45 0.25 0.51 0.37 0.53 0.46 0.85 0.22 0.83
xyxyslim 0.39 0.38 0.28 0.9 0.84 0.77 0.79 0.66 0.7 0.9
axyzoz.XL 0.91 0.77 0.9 0.74 0.09 0.33 0.5 0.52 0.74 0.27
poyqwr 0.6 0.81 0.07 0.59 0.72 0.92 0.12 0.96 0.21 0.28
dzyhapi 0.59 0.63 0.56 0.2 0.84 0.31 0.96 0.68 0.46 0.88
qqrvibe.AB 0.16 0.65 0.74 0.71 0.84 0.34 0.67 0.34 0.55 0.14
aarvbyol 0.49 0.24 0.55 0.64 0.72 0.62 0.54 0.2 0.48 0.88
prlylyfe 0.53 0.84 0.08 0.56 0.93 0.64 0.82 0.56 0.14 0.56
ytrwow 0.77 0.48 0.66 0.85 0.55 0.66 0.96 0.88 0.05 0.04
zorncat 0.24 0.71 0.83 0.21 0.23 0.06 0.28 0.8 0.21 0.13
qwexinox 0.38 0.73 0.38 0.88 0.87 0.29 0.75 0.2 0.99 0.64
xyxyslim 0.72 0.63 0.35 0.78 0.44 0.99 0.17 0.37 0.23 0.68
axyzoz.XL 0.57 0.68 0.08 0.93 0.9 0.99 0.5 0.74 0.05 0.53
poyqwr 0.74 0.88 0.55 0.59 0.76 0.67 0.46 0.63 0.81 0.78
dzyhapi 0.89 0.17 0.08 0.99 0.13 0.27 0.29 0.93 0.21 0.25
qqrvibe.AB 0.66 0.93 0.84 0.66 0.13 0.89 0.64 0.02 0.25 0.22
aarvbyol 0.58 0.38 0.69 0.03 0.5 0.19 0.7 0.36 0.58 0.56
prlylyfe 0.43 0.7 0.84 0.42 0.64 0.65 0.31 0.59 0.56 0.97
ytrwow 0.07 0.37 0.31 0.77 0.76 0.52 0.96 0.12 0.76 0.41
zorncat 0.41 0.98 0.72 0.07 0.16 0.57 0.5 0.94 0.25 0.03
qwexinox 0.28 0.23 0.44 0.65 0.94 0.33 0.84 0.54 0.37 0.55
xyxyslim 0.07 0.8 0.92 0.45 0.23 0.2 0.51 1 0.68 0.52
axyzoz.XS 0.76 0.92 0.95 0.4 0.59 0.47 0.76 0.9 0.62 0.89
poyqwr 0.52 0.65 0.88 0.91 0.22 0.78 0.08 0.49 0.15 0.5
dzyhapi 0.09 0.09 0.22 0.52 0.72 0.88 0.55 0.17 0.55 0.95
qqrvibe.AB 0.94 0.43 0.9 0.98 0.85 0.76 0.6 0.62 0.63 0.82
aarvbyol 0.72 0.75 0.61 0.11 0.99 0.07 0.69 0.6 0.94 0.15
prlylyfe 0.07 0.24 0.49 0.33 0.93 0.62 0.2 0.7 0.4 0.5
ytrwow 0.62 0.4 0.91 0.58 0.26 0.66 0.12 0.24 0.43 0.71
zorncat 0.47 0.53 0.4 0.89 0.69 0.19 0.47 0.3 0.28 0.04
qwexinox 0.95 0.22 0.15 0.42 0.92 0.54 0.63 0.03 0.88 0.59
xyxyslim 0.95 0.94 0.75 0.53 0.29 0.1 0.67 0.7 0.83 0.94
axyzoz.XL 0.05 0.08 0.47 0.64 0.1 0.32 0.94 0.59 0.5 0.36
poyqwr 0.95 0.46 0.34 0.26 0.95 0.58 0.99 0.14 0.31 0.05
dzyhapi 0.07 0.92 0.39 0.15 0.23 0.69 0.32 0.53 0.74 0.48
qqrvibe.AB 0.06 0.86 0.71 0.24 0.4 0.18 0.99 0.72 0.58 0.92
aarvbyol 0.53 0.17 0.22 0.58 0.14 0.47 0.07 0.17 0.57 0.71
prlylyfe 0.48 0.41 0.85 0.67 0.97 0.66 0.66 0.36 0.77 0.83
ytrwow 0.89 0.04 0.91 0.9 0.94 0.84 0.51 0.58 0.05 0.43
zorncat 0.84 0.68 0.26 0.8 0.1 0.58 0.12 0.75 0.14 0.56
qwexinox 0.84 0.99 0.18 0.23 0.07 0.52 0.93 0.96 0.9 0.19
xyxyslim 0.93 0.35 0.29 0.09 0.55 0.88 0.55 0.71 0.62 0.66
axyzoz.XL 0.03 0.44 0.02 0.28 0.73 0.48 0.18 0 0.87 0.61
poyqwr 0.82 0 0.26 0.87 0.97 0.07 0.38 0.79 0.59 0.39
dzyhapi 0.1 0.01 0.63 0.85 0.92 1 0.13 0.52 0.64 0.8
qqrvibe.AB 0.06 0.67 0.47 0.39 0.42 0.05 0.2 0.6 0.54 0.81
aarvbyol 0.74 0.24 0.8 0.68 0.55 0.4 0.97 0.84 0.21 0.44
prlylyfe 0.26 0.24 0.68 0.75 0.24 0.5 0.5 0.76 0.88 0.44
ytrwow 0.58 0.26 0.7 0.24 0.68 0.6 0.39 0.22 0.26 0.7
zorncat 0.8 0.39 0.86 0.49 0.81 0.67 0.74 0.79 0.8 0.92
qwexinox 0.77 0.12 0.3 0.69 0.36 0.56 0.64 0.88 0.57 0.05
xyxyslim 0.03 0.18 0.03 0.35 0.95 0.44 0.76 0.01 0.29 0.91
axyzoz.XL 0.74 0.47 0.13 0.5 0.15 0.85 0.6 0.95 0.12 0.39
poyqwr 0.63 0.04 0.03 0.1 0.09 0.81 0.12 0.69 0.26 0.97
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment