Re: Help me understand why PyPy is so slow in my benchmark

CF Bolz-Tereick via pypy-dev <[email protected]> Fri, 20 Sep 2024 11:26:04 +0200
Newsgroups gmane.comp.python.pypy
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------H2DwlWqw8fznHSJE520nycYM
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable

Hello Jeremy,

ouch. it turns out the problem is neither your code, nor PyPy, but
timeit. The timeit module is just not a safe benchmarking tool unless
you use it in *exactly* the right way. The way that timeit runs code is
using an exec'ed string, eg f"recurse({i})" in your case. This
bytecode-compiles some code for every time you call timeit.repeat. This
means that the JIT has to compile that bytecode to machine code for
every call to repeat. That is the overhead that you were measuring.

So your code:

	for i in range(1, 4000):
		times["iter"][i] =3D repeat(
			stmt =3D f"iterate({i})",
			...

simply never warms up.

To fix this, you could write your own timing helper. I did that (I'm
attaching my version of the script).

My results (timing all the 4000 numbers together, per implementation)
are like this:

CPython 3.11.6:
iter 1.976924208
rcsv 2.300890293

PyPy3 7.3.17:
iter 0.265697421 (7.4x faster)
rcsv 0.643804392 (3.6x faster)

I also tried to use a list and "".join, a bytearray, and a pypy-specific
stringbuilder, all were slower. Yes, your string additions are
quadratic. But the longest string that is being built is 15, and doing
1+2+3+...+15=3D107 characters copies is still very cheap.

My main takeaway would be that micro-benchmarking is very hard :-(.

Would it be ok if I use your code in a small PSA blog post about timeit?

Cheers,

CF



On 2024-09-20 04:16, Jeremy Brown wrote:
> Manuel,
>
>> Your code is more similar to the code example that shows a case where
>> the optimization doesn=E2=80=99t work.
>>
>> Does that explain the behavior you=E2=80=99re seeing? Feel free to make
>> suggestions on how to clarify the wording.
>
> I think I just interpreted that statement incorrectly, I thought the
> linear code section explained how the JIT optimized the code, not the
> preconditions needed for the JIT to function correctly.
>
> CF,
>
>> Hi Jeremy,
>>
>> Can you share how you are running this function? I tried a few variants=
, and pypy is often faster than CPython on my attempts, so the rest of you=
r code is necessary to find out what's wrong.
>
> Sure, here's a link to a copy of the benchmark: https://pastebin.com/fR0=
C6qcB.
>
> I also know the JIT definitely can't optimize the iterative version,
> but even if this is a problem specific to PyPy I wouldn't expect runs
> to take twice as long compared to CPython.
>
> -Jeremy
> _______________________________________________
> pypy-dev mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
> https://mail.python.org/mailman3/lists/pypy-dev.python.org/
> Member address: [email protected]

--------------H2DwlWqw8fznHSJE520nycYM
Content-Type: text/x-python; charset=UTF-8; name="bench.py"
Content-Disposition: attachment; filename="bench.py"
Content-Transfer-Encoding: base64

IyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQoNCmZyb20gY3N2IGltcG9ydCBEaWN0V3JpdGVyDQpm
cm9tIGRpcyBpbXBvcnQgZGlzDQpmcm9tIGpzb24gaW1wb3J0IGR1bXANCmZyb20gcGF0aGxp
YiBpbXBvcnQgUGF0aA0KZnJvbSBwbGF0Zm9ybSBpbXBvcnQgcHl0aG9uX2ltcGxlbWVudGF0
aW9uDQpmcm9tIHN5cyBpbXBvcnQgdmVyc2lvbl9pbmZvDQpmcm9tIHRpbWVpdCBpbXBvcnQg
VGltZXIsIHJlcGVhdA0KZnJvbSB0aW1lIGltcG9ydCBwcm9jZXNzX3RpbWVfbnMNCg0KDQpk
ZWYgcmVjdXJzZShudW0pOg0KICAgIGlmIG51bSA+PSAxMDAwOg0KICAgICAgICByZXR1cm4g
Ik0iICsgcmVjdXJzZShudW0gLSAxMDAwKQ0KDQogICAgZWxpZiBudW0gPj0gOTAwOg0KICAg
ICAgICByZXR1cm4gIkNNIiArIHJlY3Vyc2UobnVtIC0gOTAwKQ0KDQogICAgZWxpZiBudW0g
Pj0gNTAwOg0KICAgICAgICByZXR1cm4gIkQiICsgcmVjdXJzZShudW0gLSA1MDApDQoNCiAg
ICBlbGlmIG51bSA+PSA0MDA6DQogICAgICAgIHJldHVybiAiQ0QiICsgcmVjdXJzZShudW0g
LSA0MDApDQoNCiAgICBlbGlmIG51bSA+PSAxMDA6DQogICAgICAgIHJldHVybiAiQyIgKyBy
ZWN1cnNlKG51bSAtIDEwMCkNCg0KICAgIGVsaWYgbnVtID49IDkwOg0KICAgICAgICByZXR1
cm4gIlhDIiArIHJlY3Vyc2UobnVtIC0gOTApDQoNCiAgICBlbGlmIG51bSA+PSA1MDoNCiAg
ICAgICAgcmV0dXJuICJMIiArIHJlY3Vyc2UobnVtIC0gNTApDQoNCiAgICBlbGlmIG51bSA+
PSA0MDoNCiAgICAgICAgcmV0dXJuICJYTCIgKyByZWN1cnNlKG51bSAtIDQwKQ0KDQogICAg
ZWxpZiBudW0gPj0gMTA6DQogICAgICAgIHJldHVybiAiWCIgKyByZWN1cnNlKG51bSAtIDEw
KQ0KDQogICAgZWxpZiBudW0gPj0gOToNCiAgICAgICAgcmV0dXJuICJJWCIgKyByZWN1cnNl
KG51bSAtIDkpDQoNCiAgICBlbGlmIG51bSA+PSA1Og0KICAgICAgICByZXR1cm4gIlYiICsg
cmVjdXJzZShudW0gLSA1KQ0KDQogICAgZWxpZiBudW0gPj0gNDoNCiAgICAgICAgcmV0dXJu
ICJJViIgKyByZWN1cnNlKG51bSAtIDQpDQoNCiAgICBlbGlmIG51bSA+PSAxOg0KICAgICAg
ICByZXR1cm4gIkkiICsgcmVjdXJzZShudW0gLSAxKQ0KDQogICAgZWxzZToNCiAgICAgICAg
cmV0dXJuICIiDQoNCg0KZGVmIGl0ZXJhdGUobnVtKToNCiAgICByZXN1bHQgPSAiIg0KDQog
ICAgd2hpbGUgVHJ1ZToNCiAgICAgICAgaWYgbnVtID49IDEwMDA6DQogICAgICAgICAgICBy
ZXN1bHQgKz0gIk0iDQogICAgICAgICAgICBudW0gLT0gMTAwMA0KICAgICAgICAgICAgY29u
dGludWUNCg0KICAgICAgICBpZiBudW0gPj0gOTAwOg0KICAgICAgICAgICAgcmVzdWx0ICs9
ICJDTSINCiAgICAgICAgICAgIG51bSAtPSA5MDANCiAgICAgICAgICAgIGNvbnRpbnVlDQoN
CiAgICAgICAgaWYgbnVtID49IDUwMDoNCiAgICAgICAgICAgIHJlc3VsdCArPSAiRCINCiAg
ICAgICAgICAgIG51bSAtPSA1MDANCiAgICAgICAgICAgIGNvbnRpbnVlDQoNCiAgICAgICAg
aWYgbnVtID49IDQwMDoNCiAgICAgICAgICAgIHJlc3VsdCArPSAiQ0QiDQogICAgICAgICAg
ICBudW0gLT0gNDAwDQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51bSA+
PSAxMDA6DQogICAgICAgICAgICByZXN1bHQgKz0gIkMiDQogICAgICAgICAgICBudW0gLT0g
MTAwDQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51bSA+PSA5MDoNCiAg
ICAgICAgICAgIHJlc3VsdCArPSAiWEMiDQogICAgICAgICAgICBudW0gLT0gOTANCiAgICAg
ICAgICAgIGNvbnRpbnVlDQoNCiAgICAgICAgaWYgbnVtID49IDUwOg0KICAgICAgICAgICAg
cmVzdWx0ICs9ICJMIg0KICAgICAgICAgICAgbnVtIC09IDUwDQogICAgICAgICAgICBjb250
aW51ZQ0KDQogICAgICAgIGlmIG51bSA+PSA0MDoNCiAgICAgICAgICAgIHJlc3VsdCArPSAi
WEwiDQogICAgICAgICAgICBudW0gLT0gNDANCiAgICAgICAgICAgIGNvbnRpbnVlDQoNCiAg
ICAgICAgaWYgbnVtID49IDEwOg0KICAgICAgICAgICAgcmVzdWx0ICs9ICJYIg0KICAgICAg
ICAgICAgbnVtIC09IDEwDQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51
bSA+PSA5Og0KICAgICAgICAgICAgcmVzdWx0ICs9ICJJWCINCiAgICAgICAgICAgIG51bSAt
PSA5DQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51bSA+PSA1Og0KICAg
ICAgICAgICAgcmVzdWx0ICs9ICJWIg0KICAgICAgICAgICAgbnVtIC09IDUNCiAgICAgICAg
ICAgIGNvbnRpbnVlDQoNCiAgICAgICAgaWYgbnVtID49IDQ6DQogICAgICAgICAgICByZXN1
bHQgKz0gIklWIg0KICAgICAgICAgICAgbnVtIC09IDQNCiAgICAgICAgICAgIGNvbnRpbnVl
DQoNCiAgICAgICAgaWYgbnVtID49IDE6DQogICAgICAgICAgICByZXN1bHQgKz0gIkkiDQog
ICAgICAgICAgICBudW0gLT0gMQ0KICAgICAgICAgICAgY29udGludWUNCg0KICAgICAgICBl
bHNlOg0KICAgICAgICAgICAgYnJlYWsNCg0KICAgIHJldHVybiByZXN1bHQNCg0KZGVmIGl0
ZXJhdGVfYXBwZW5kKG51bSk6DQogICAgcmVzdWx0ID0gW10NCg0KICAgIHdoaWxlIFRydWU6
DQogICAgICAgIGlmIG51bSA+PSAxMDAwOg0KICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgi
TSIpDQogICAgICAgICAgICBudW0gLT0gMTAwMA0KICAgICAgICAgICAgY29udGludWUNCg0K
ICAgICAgICBpZiBudW0gPj0gOTAwOg0KICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiQ00i
KQ0KICAgICAgICAgICAgbnVtIC09IDkwMA0KICAgICAgICAgICAgY29udGludWUNCg0KICAg
ICAgICBpZiBudW0gPj0gNTAwOg0KICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiRCIpDQog
ICAgICAgICAgICBudW0gLT0gNTAwDQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAg
IGlmIG51bSA+PSA0MDA6DQogICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJDRCIpDQogICAg
ICAgICAgICBudW0gLT0gNDAwDQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlm
IG51bSA+PSAxMDA6DQogICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJDIikNCiAgICAgICAg
ICAgIG51bSAtPSAxMDANCiAgICAgICAgICAgIGNvbnRpbnVlDQoNCiAgICAgICAgaWYgbnVt
ID49IDkwOg0KICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiWEMiKQ0KICAgICAgICAgICAg
bnVtIC09IDkwDQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51bSA+PSA1
MDoNCiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIkwiKQ0KICAgICAgICAgICAgbnVtIC09
IDUwDQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51bSA+PSA0MDoNCiAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlhMIikNCiAgICAgICAgICAgIG51bSAtPSA0MA0K
ICAgICAgICAgICAgY29udGludWUNCg0KICAgICAgICBpZiBudW0gPj0gMTA6DQogICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCJYIikNCiAgICAgICAgICAgIG51bSAtPSAxMA0KICAgICAg
ICAgICAgY29udGludWUNCg0KICAgICAgICBpZiBudW0gPj0gOToNCiAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoIklYIikNCiAgICAgICAgICAgIG51bSAtPSA5DQogICAgICAgICAgICBj
b250aW51ZQ0KDQogICAgICAgIGlmIG51bSA+PSA1Og0KICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgiViIpDQogICAgICAgICAgICBudW0gLT0gNQ0KICAgICAgICAgICAgY29udGludWUN
Cg0KICAgICAgICBpZiBudW0gPj0gNDoNCiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIklW
IikNCiAgICAgICAgICAgIG51bSAtPSA0DQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAg
ICAgIGlmIG51bSA+PSAxOg0KICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiSSIpDQogICAg
ICAgICAgICBudW0gLT0gMQ0KICAgICAgICAgICAgY29udGludWUNCg0KICAgICAgICBlbHNl
Og0KICAgICAgICAgICAgYnJlYWsNCg0KICAgIHJldHVybiAiXG4iLmpvaW4ocmVzdWx0KQ0K
DQpkZWYgaXRlcmF0ZV9zdHJpbmdidWlsZGVyKG51bSk6DQogICAgZnJvbSBfX3B5cHlfXy5i
dWlsZGVycyBpbXBvcnQgU3RyaW5nQnVpbGRlcg0KICAgIHJlc3VsdCA9IFN0cmluZ0J1aWxk
ZXIoKQ0KDQogICAgd2hpbGUgVHJ1ZToNCiAgICAgICAgaWYgbnVtID49IDEwMDA6DQogICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCJNIikNCiAgICAgICAgICAgIG51bSAtPSAxMDAwDQog
ICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51bSA+PSA5MDA6DQogICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCJDTSIpDQogICAgICAgICAgICBudW0gLT0gOTAwDQogICAg
ICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51bSA+PSA1MDA6DQogICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCJEIikNCiAgICAgICAgICAgIG51bSAtPSA1MDANCiAgICAgICAg
ICAgIGNvbnRpbnVlDQoNCiAgICAgICAgaWYgbnVtID49IDQwMDoNCiAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoIkNEIikNCiAgICAgICAgICAgIG51bSAtPSA0MDANCiAgICAgICAgICAg
IGNvbnRpbnVlDQoNCiAgICAgICAgaWYgbnVtID49IDEwMDoNCiAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIkMiKQ0KICAgICAgICAgICAgbnVtIC09IDEwMA0KICAgICAgICAgICAgY29u
dGludWUNCg0KICAgICAgICBpZiBudW0gPj0gOTA6DQogICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCJYQyIpDQogICAgICAgICAgICBudW0gLT0gOTANCiAgICAgICAgICAgIGNvbnRpbnVl
DQoNCiAgICAgICAgaWYgbnVtID49IDUwOg0KICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgi
TCIpDQogICAgICAgICAgICBudW0gLT0gNTANCiAgICAgICAgICAgIGNvbnRpbnVlDQoNCiAg
ICAgICAgaWYgbnVtID49IDQwOg0KICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiWEwiKQ0K
ICAgICAgICAgICAgbnVtIC09IDQwDQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAg
IGlmIG51bSA+PSAxMDoNCiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlgiKQ0KICAgICAg
ICAgICAgbnVtIC09IDEwDQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51
bSA+PSA5Og0KICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiSVgiKQ0KICAgICAgICAgICAg
bnVtIC09IDkNCiAgICAgICAgICAgIGNvbnRpbnVlDQoNCiAgICAgICAgaWYgbnVtID49IDU6
DQogICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJWIikNCiAgICAgICAgICAgIG51bSAtPSA1
DQogICAgICAgICAgICBjb250aW51ZQ0KDQogICAgICAgIGlmIG51bSA+PSA0Og0KICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiSVYiKQ0KICAgICAgICAgICAgbnVtIC09IDQNCiAgICAg
ICAgICAgIGNvbnRpbnVlDQoNCiAgICAgICAgaWYgbnVtID49IDE6DQogICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJJIikNCiAgICAgICAgICAgIG51bSAtPSAxDQogICAgICAgICAgICBj
b250aW51ZQ0KDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBicmVhaw0KDQogICAgcmV0
dXJuIHJlc3VsdC5idWlsZCgpDQoNCg0KZGVmIHJlcGVhdChmdW5jLCByZXBlYXQsIG51bWJl
ciwgdGltZXIpOg0KICAgIHJlcyA9IFtdDQogICAgZm9yIG51bSBpbiByYW5nZShudW1iZXIp
Og0KICAgICAgICB0MSA9IHRpbWVyKCkNCiAgICAgICAgZm9yIF8gaW4gcmFuZ2UocmVwZWF0
KToNCiAgICAgICAgICAgIGZ1bmMoKQ0KICAgICAgICB0MiA9IHRpbWVyKCkNCiAgICAgICAg
cmVzLmFwcGVuZCh0MiAtIHQxKQ0KICAgIHJldHVybiByZXMNCg0KZGVmIG1haW4oKToNCiAg
ICBiZW5jaCA9IFBhdGgoX19maWxlX18pLnN0ZW0NCiAgICBpbXBsID0gZiJ7cHl0aG9uX2lt
cGxlbWVudGF0aW9uKCkubG93ZXIoKX0iDQogICAgdmVyc2lvbiA9IGYie3ZlcnNpb25faW5m
by5tYWpvcn0te3ZlcnNpb25faW5mby5taW5vcn0te3ZlcnNpb25faW5mby5taWNyb30iDQog
ICAgYmFzZSA9IGYie2JlbmNofV97aW1wbH1fe3ZlcnNpb259Ig0KDQogICAgZGF0YV9kaXIg
PSBQYXRoKF9fZmlsZV9fKS5wYXJlbnRzWzFdLmpvaW5wYXRoKCJkYXRhIikNCiAgICBieXRl
Y29kZV9kaXIgPSBQYXRoKF9fZmlsZV9fKS5wYXJlbnRzWzFdLmpvaW5wYXRoKCJieXRlY29k
ZSIpDQoNCiAgICB0aW1lcyA9IHsiaXRlciI6IHt9LCAicmNzdiI6IHt9LCAiaXRlcmF0ZV9h
cHBlbmQiOiB7fSwgIml0ZXJhdGVfc3RyaW5nYnVpbGRlciI6IHt9fQ0KDQogICAgdDEgPSBw
cm9jZXNzX3RpbWVfbnMoKQ0KICAgIGZvciBpIGluIHJhbmdlKDEsIDQwMDApOg0KICAgICAg
ICB0aW1lc1siaXRlciJdW2ldID0gcmVwZWF0KA0KICAgICAgICAgICAgZnVuYyA9IGxhbWJk
YTogaXRlcmF0ZShpKSwNCiAgICAgICAgICAgIHJlcGVhdCA9IDExMDAsDQogICAgICAgICAg
ICBudW1iZXIgPSAxLA0KICAgICAgICAgICAgdGltZXIgPSBwcm9jZXNzX3RpbWVfbnMpDQog
ICAgdDIgPSBwcm9jZXNzX3RpbWVfbnMoKQ0KICAgIHByaW50KCJpdGVyIiwgKHQyIC0gdDEp
IC8gMWU5KQ0KDQogICAgdDEgPSBwcm9jZXNzX3RpbWVfbnMoKQ0KICAgIGZvciBpIGluIHJh
bmdlKDEsIDQwMDApOg0KICAgICAgICB0aW1lc1sicmNzdiJdW2ldID0gcmVwZWF0KA0KICAg
ICAgICAgICAgZnVuYyA9IGxhbWJkYTogcmVjdXJzZShpKSwNCiAgICAgICAgICAgIHJlcGVh
dCA9IDExMDAsDQogICAgICAgICAgICBudW1iZXIgPSAxLA0KICAgICAgICAgICAgdGltZXIg
PSBwcm9jZXNzX3RpbWVfbnMpDQogICAgdDIgPSBwcm9jZXNzX3RpbWVfbnMoKQ0KICAgIHBy
aW50KCJyY3N2IiwgKHQyIC0gdDEpIC8gMWU5KQ0KDQogICAgdDEgPSBwcm9jZXNzX3RpbWVf
bnMoKQ0KICAgIGZvciBpIGluIHJhbmdlKDEsIDQwMDApOg0KICAgICAgICB0aW1lc1siaXRl
cmF0ZV9hcHBlbmQiXVtpXSA9IHJlcGVhdCgNCiAgICAgICAgICAgIGZ1bmMgPSBsYW1iZGE6
IGl0ZXJhdGVfYXBwZW5kKGkpLA0KICAgICAgICAgICAgcmVwZWF0ID0gMTEwMCwNCiAgICAg
ICAgICAgIG51bWJlciA9IDEsDQogICAgICAgICAgICB0aW1lciA9IHByb2Nlc3NfdGltZV9u
cykNCiAgICB0MiA9IHByb2Nlc3NfdGltZV9ucygpDQogICAgcHJpbnQoIml0ZXJhdGVfYXBw
ZW5kIiwgKHQyIC0gdDEpIC8gMWU5KQ0KDQogICAgdHJ5Og0KICAgICAgICBmcm9tIF9fcHlw
eV9fLmJ1aWxkZXJzIGltcG9ydCBTdHJpbmdCdWlsZGVyDQogICAgZXhjZXB0IEltcG9ydEVy
cm9yOg0KICAgICAgICBwYXNzDQogICAgZWxzZToNCiAgICAgICAgdDEgPSBwcm9jZXNzX3Rp
bWVfbnMoKQ0KICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCA0MDAwKToNCiAgICAgICAgICAg
IHRpbWVzWyJpdGVyYXRlX3N0cmluZ2J1aWxkZXIiXVtpXSA9IHJlcGVhdCgNCiAgICAgICAg
ICAgICAgICBmdW5jID0gbGFtYmRhOiBpdGVyYXRlX3N0cmluZ2J1aWxkZXIoaSksDQogICAg
ICAgICAgICAgICAgcmVwZWF0ID0gMTEwMCwNCiAgICAgICAgICAgICAgICBudW1iZXIgPSAx
LA0KICAgICAgICAgICAgICAgIHRpbWVyID0gcHJvY2Vzc190aW1lX25zKQ0KICAgICAgICB0
MiA9IHByb2Nlc3NfdGltZV9ucygpDQogICAgICAgIHByaW50KCJpdGVyYXRlX3N0cmluZ2J1
aWxkZXIiLCAodDIgLSB0MSkgLyAxZTkpDQoNCiAgICB3aXRoIG9wZW4oZGF0YV9kaXIuam9p
bnBhdGgoZiJ7YmFzZX1faXRlcl90aW1lcy5jc3YiKS5yZXNvbHZlKCksICJ3IikgYXMgdGlt
ZWZpbGU6DQogICAgICAgIGl0ZXJ3cml0ZXIgPSBEaWN0V3JpdGVyKHRpbWVmaWxlLCBmaWVs
ZG5hbWVzPXRpbWVzWyJpdGVyIl0ua2V5cygpKQ0KICAgICAgICBpdGVyd3JpdGVyLndyaXRl
aGVhZGVyKCkNCiAgICAgICAgaXRlcndyaXRlci53cml0ZXJvd3Moew0KICAgICAgICAgICAg
ICAgIG51bTogdGltZXNbIml0ZXIiXVtudW1dW3J1bl0NCiAgICAgICAgICAgICAgICBmb3Ig
bnVtIGluIHRpbWVzWyJpdGVyIl0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICBm
b3IgcnVuIGluIHJhbmdlKGxlbihuZXh0KGl0ZXIodGltZXNbIml0ZXIiXS52YWx1ZXMoKSkp
KSkpDQoNCiAgICB3aXRoIG9wZW4oZGF0YV9kaXIuam9pbnBhdGgoZiJ7YmFzZX1fcmNzdl90
aW1lcy5jc3YiKS5yZXNvbHZlKCksICJ3IikgYXMgdGltZWZpbGU6DQogICAgICAgIGl0ZXJ3
cml0ZXIgPSBEaWN0V3JpdGVyKHRpbWVmaWxlLCBmaWVsZG5hbWVzPXRpbWVzWyJyY3N2Il0u
a2V5cygpKQ0KICAgICAgICBpdGVyd3JpdGVyLndyaXRlaGVhZGVyKCkNCiAgICAgICAgaXRl
cndyaXRlci53cml0ZXJvd3Moew0KICAgICAgICAgICAgICAgIG51bTogdGltZXNbInJjc3Yi
XVtudW1dW3J1bl0NCiAgICAgICAgICAgICAgICBmb3IgbnVtIGluIHRpbWVzWyJyY3N2Il0N
CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICBmb3IgcnVuIGluIHJhbmdlKGxlbihu
ZXh0KGl0ZXIodGltZXNbInJjc3YiXS52YWx1ZXMoKSkpKSkpDQoNCiAgICB3aXRoIG9wZW4o
Ynl0ZWNvZGVfZGlyLmpvaW5wYXRoKGYie2Jhc2V9X2Rpc19pdGVyLnR4dCIpLnJlc29sdmUo
KSwgInciKSBhcyBkaXNmaWxlOg0KICAgICAgICBkaXMoaXRlcmF0ZSwgZmlsZT1kaXNmaWxl
KQ0KDQogICAgd2l0aCBvcGVuKGJ5dGVjb2RlX2Rpci5qb2lucGF0aChmIntiYXNlfV9kaXNf
cmNzdi50eHQiKS5yZXNvbHZlKCksICJ3IikgYXMgZGlzZmlsZToNCiAgICAgICAgZGlzKHJl
Y3Vyc2UsIGZpbGU9ZGlzZmlsZSkNCg0KaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoNCiAg
ICBtYWluKCkNCg==

--------------H2DwlWqw8fznHSJE520nycYM
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
pypy-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/pypy-dev.python.org/
Member address: [email protected]

--------------H2DwlWqw8fznHSJE520nycYM--