antocuni changed the topic of #pypy to: PyPy, the flexible snake (IRC logs: https://botbot.me/freenode/pypy/ ) | use cffi for calling C | "PyPy: the Gradual Reduction of Magic (tm)"
marky1991 has joined #pypy
marky1991_2 has joined #pypy
marky1991 has quit [Ping timeout: 248 seconds]
asmeurer__ has joined #pypy
asmeurer_____ has joined #pypy
asmeurer__ has quit [Ping timeout: 255 seconds]
asmeurer_____ has quit [Quit: asmeurer_____]
antocuni has quit [Ping timeout: 250 seconds]
marky1991_2 has quit [Read error: Connection reset by peer]
asmeurer_ has joined #pypy
jcea has quit [Ping timeout: 268 seconds]
yuyichao has quit [Ping timeout: 248 seconds]
dw has quit [Read error: Connection reset by peer]
tbodt has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
asmeurer_ has quit [Quit: asmeurer_]
__main__ has quit [*.net *.split]
Garen has quit [*.net *.split]
jiffe has quit [*.net *.split]
kushal has quit [*.net *.split]
kanaka has quit [*.net *.split]
marmoute_ has quit [*.net *.split]
plan_rich_ has quit [*.net *.split]
iko has quit [*.net *.split]
dw has joined #pypy
traverseda has quit [Ping timeout: 268 seconds]
jcea has joined #pypy
tbodt has joined #pypy
__main__ has joined #pypy
kushal has joined #pypy
jiffe has joined #pypy
plan_rich_ has joined #pypy
Garen has joined #pypy
iko has joined #pypy
kanaka has joined #pypy
marmoute_ has joined #pypy
jiffe has quit [Max SendQ exceeded]
jiffe has joined #pypy
yuyichao has joined #pypy
traverseda has joined #pypy
yuyichao_ has joined #pypy
asmeurer__ has joined #pypy
tbodt has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
yuyichao has quit [Ping timeout: 240 seconds]
adamholmberg has joined #pypy
tbodt has joined #pypy
adamholmberg has quit [Ping timeout: 240 seconds]
tbodt has quit [Client Quit]
jcea1 has joined #pypy
jcea has quit [Ping timeout: 268 seconds]
jcea1 is now known as jcea
asmeurer__ has quit [Quit: asmeurer__]
marr has quit [Ping timeout: 255 seconds]
asmeurer_ has joined #pypy
asmeurer_ has quit [Quit: asmeurer_]
ceridwen has quit [Quit: Ex-Chat]
ceridwen has joined #pypy
ceridwen has quit [Remote host closed the connection]
ceridwen has joined #pypy
asmeurer__ has joined #pypy
ceridwen has quit [Client Quit]
ceridwen has joined #pypy
songww has joined #pypy
raynold has quit [Quit: Connection closed for inactivity]
songww_ has joined #pypy
songww has quit [Ping timeout: 248 seconds]
jcea has quit [Quit: jcea]
ArneBab has joined #pypy
ArneBab_ has quit [Ping timeout: 250 seconds]
marky1991 has joined #pypy
pilne has quit [Quit: Quitting!]
lritter_ has joined #pypy
raynold has joined #pypy
<kenaan_> rlamy default 5e549a04ab94 /rpython/annotator/dictdef.py: Simplify code
<kenaan_> rlamy default 203414415a39 /rpython/annotator/: Kill confusing function callback case in emulate_pbc_call()
<kenaan_> rlamy default 08eace48ed36 /rpython/annotator/annrpython.py: small cleanup
<kenaan_> rlamy default 4c883891e3d7 /rpython/rlib/rerased.py: Clean up rerased: split interp-level ErasingPairIdentity from translator-level IdentityDesc
songww_ has quit [Read error: Connection reset by peer]
songww has joined #pypy
songww_ has joined #pypy
songww has quit [Ping timeout: 248 seconds]
songww_ is now known as songww
<fijal> anyone wants to try at some stage?
papanik has quit [Ping timeout: 260 seconds]
songww has quit [Remote host closed the connection]
songww has joined #pypy
marr has joined #pypy
antocuni has joined #pypy
fryguybob has quit [Remote host closed the connection]
lesshaste has quit [Remote host closed the connection]
<fijal> ronan: eh, do you have any clue about the errorhandlers in codecs on py3k?
<fijal> arigato: so I think I can find a way without touching __eq__
<fijal> I'm half worried existing mechanisms are not enough, but let's start there
<kenaan_> antocuni default 1cac28ee833b /pypy/module/_continuation/test/test_stacklet.py: cherry-pick a small part of the continulet-no-frame-loop branch and make stack() available to all tests; fix tes...
zmt00 has quit [Ping timeout: 248 seconds]
<arigato> antocuni: continulet-no-frame-loop: you should review and minimize a bit the diff, but other than that:
<arigato> bottomframe.f_backref is jit.vref_None
<arigato> might be a little bit dangerous
<antocuni> why?
<arigato> because you don't know if there is really always a frame below the bottom frame when running
<antocuni> how can it happen?
<arigato> it takes a contrieved example, but it could happen
<arigato> maybe thread.start_new_thread(greenlet, ())?
<antocuni> I think that in that case you have _greenlet_start or something like that
<antocuni> but yes, I see the general problem
<antocuni> what do you suggest? To keep an explicit "is_running" flag?
zmt00 has joined #pypy
<arigato> hum, there is already something like that
<antocuni> if there is, I couldn't/cannot find it
* arigato still looking
<arigato> a bit confused, because I would expect post_switch() to always run with 'origin' being stopped and 'self' being started (which might occasionally be the same object)
<arigato> "py.test -x" gives me Invalid call to virtual_ref_finish, anyway...
<antocuni> did you put DEBUG=True, by chance?
<arigato> no
<arigato> no diff
<antocuni> ah yes
<antocuni> it's test_permute
<antocuni> I didn't fix it yet
<antocuni> but, pytest -k not permute should pass
<arigato> it doesn't, test_zpickle fails
<antocuni> true :(
<antocuni> yes, I tested only test_stacklet
<antocuni> but well, my point is that before fixing all the remaining things, I wanted to check whether the approach was reasonable
<arigato> ok
<antocuni> sorry for the confusion
<arigato> I would look if you need the two different cases in post_switch(), if f_backend is vref_None or not
<arigato> because this looks like logic that might work only in simple cases
<antocuni> I tried hard to find a way to write it without the if, but I couldn't find it
<antocuni> it would be easy to do if you swap two continulets
<antocuni> in that case, you swap their bottomframe.f_back: one becomes the existing stack, the other becomes vref_None
<antocuni> but this is not the case, because we have only ONE continulet, and we "swap" it with the "current" stack
<antocuni> arigato: also, about your remark "bottomframe.f_back could be None even if it's running": I claim that if it is the case, it means that on default you can construct a case in which sys._getframe(0).f_back.f_back... results in a cycle
<arigato> hum... why?
<arigato> there is no "is vref_None" kind of comparison on default
<antocuni> yes, but I think that "is vref_None" happens in the same cases in which on default you have a frame cycle
<antocuni> in other words: if you remove the if, you end up with a thing which always does "origin.bottomframe.f_backref = current"
asmeurer__ has quit [Quit: asmeurer__]
<antocuni> so, in some cases instead of setting vref_None, it builds a cycle
<antocuni> if THIS ends up running, you get a cycle which is visible through sys._getframe
<arigato> (someone should really kill _continuation and write greenlet directly in RPython...)
<arigato> every time we need to change 3 lines it takes half a day
<antocuni> eh
<antocuni> arigato: note also the collections of diagrams which I had to do to understand what was going on :)
<arigato> :-/
<antocuni> why did we choose to write greenlets this way? Just because it was theoretically nicer, or we had some concrete ideas about other ways to use continulets?
<arigato> just because it's theoretically nicer
* antocuni wonders who to blame :-P
<arigato> so, I *think* that both self and origin must be non-running continulets in post_switch(), but I may be wrong
<arigato> so both have (in default) a loop
<antocuni> so, I should break both loops?
<arigato> there are probably still two cases, but that depends on 'origin is self' or not
<antocuni> also, this origin vs self thing is very confusing to me (actually, its the most confusing part). It seems it's needed only to implement switch(to=...), isn't it?
<arigato> yes
<antocuni> and this feature is never used by anybody
<arigato> uh
<arigato> no
<arigato> greenlet.py uses "to=target"
<antocuni> aaah
<antocuni> I couldn't find it because it's not calling "switch" directly, of course
<arigato> obviously
<arigato> so, in the three lines that are now in "if ORIGINAL:"
<arigato> there is the currently running stack frame in sthread.ec.topframeref, and two continulets 'self' and 'origin' that should both be non-running and a loop of frames
<arigato> or I'm very confused
<antocuni> ok, but then it means that on my branch, they will be both non-running and with "f_backref is vref_None"
<arigato> I might be very confused
<antocuni> I wonder whether we should just add an "is_running" attribute a puts asserts here and there
<antocuni> s/a puts/and put
<arigato> yes, looks like a plan
<antocuni> on the branch or on default?
<arigato> ah wait
<arigato> ah, maybe the new attribute W_Continulet.topframeref can play this role nicely
<arigato> it should be vref_None when running
<arigato> I am still very confused
<antocuni> ah indeed
<arigato> I think we can end up with more complicated situations in default
<arigato> e.g. two non-running continulets, but they form a single bigger loop of frames
<antocuni> how? If they are non-running, their bottomframe.f_back should be None
<arigato> I mean, in default
<antocuni> ah, so you mean that it's a situation which works in default but would be broken in the branch?
<arigato> yes (maybe)
<antocuni> I'm having a really hard time to visualize this stuff
<arigato> yes, it's all very simple but somehow impossible to visualize
<antocuni> arigato: if two non-running continulets form a cycle, it means that a.bottomframe.f_back ==> b.topframeref
<arigato> yes, and vice-versa
* antocuni wonders how to build such a case
<arigato> then the problem is that "running" or "paused" cannot be easily known
<arigato> because a continulet might be part of a large cycle,
<arigato> and somewhere else we tweak the bottomframe.f_back to explode this cycle into the running frame stack, or back
<antocuni> I **THINK** that if this case happens on the branch, we just break the last link of the cycle
<antocuni> i.e., the "top" continulet will be link the the ones below it, but then at some point you hit f_back is None
<arigato> right
<antocuni> I really need to go because they are waiting for me; if you are there after lunch, we can continue later
<arigato> it seems there is no good solution at all
<arigato> I wonder what would break if we simply never changed bottomframe.f_backref, which would stay None all the time (and used a new attribute W_Continulet.backref)
<arigato> all tracebacks would stop after one greenlet
<arigato> W_Continulet.bottomframe might be killed, too
<arigato> it definitely simplifies things, although not the "horribly simple" code in default's post_switch()
jcea has joined #pypy
<kenaan_> arigo cffi/cffi d5661822dee4 /testing/cffi1/test_recompiler.py: Issue #343 [patch by david naylor] Fix test_recompiler for libc++
<kenaan_> arigo default 34aff140932c /pypy/module/test_lib_pypy/cffi_tests/cffi1/test_recompiler.py: CFFI Issue #343 [patch by david naylor] Fix test_recompiler for libc++
oberstet has joined #pypy
songww has quit [Quit: songww]
nimaje has quit [Quit: WeeChat 1.9]
nimaje has joined #pypy
kolko has joined #pypy
kolko has quit [Ping timeout: 250 seconds]
kolko has joined #pypy
raynold has quit [Quit: Connection closed for inactivity]
Rhy0lite has joined #pypy
adamholmberg has joined #pypy
<antocuni> arigato: back
<antocuni> well, but then if we have an exception inside a greenlet we will have a different traceback than CPython
<antocuni> which might not be too bad, for all I know
<antocuni> arigato: ah no
<antocuni> on CPython, greenlets seems NOT to set their f_back
<arigato> ah
<arigato> ah, ok
<arigato> post-mortem exception tracebacks are still complete, of course
<antocuni> uh
<antocuni> how does it work?
<arigato> can you try a try:except: capturing an exception that bubbled up across several greenlets?
<antocuni> arigato: it's enough to put 0/0 instead of print_stack()
<arigato> Python has traceback objects that have 'tb_next', which is used for post-mortem
<arigato> (I think)
<antocuni> yes but I thought they were constructed by using f_back
<arigato> no, they are constructed as the exception bubbles out, step by step
<arigato> so it means that on CPython, with greenlets, we get exceptions that print normally but that contain some frames with f_back == None, right?
<antocuni> yes, probably
<antocuni> let me try
<arigato> (can you check? I don't have greenlets on this machine and it's Windows)
<arigato> thanks
<antocuni> yes, seems so
<arigato> and on pypy right now, it prints "main" instead of "None" there
<arigato> ?
<antocuni> uh no
* antocuni confused
<antocuni> how is it possible that _greenlet_start.f_back is None?
<arigato> ah, it's probably None because the greenlet is finished when the traceback is printed
<arigato> traceback.print_exc() from inside the greenlet should behave differently
<arigato> or not traceback.print_exc()
<arigato> but something that walks the f_back
<antocuni> well, the "something that walks f_back" is traceback.print_stack() which I did in the first example, I think
<arigato> right, but you onl implied it prints something different on CPython and on PyPy
<arigato> is that the case?
<antocuni> yes
<arigato> ok
<arigato> then yes, it seems we should not set f_back at all
<antocuni> so basically: we don't even save bottomframe and we just use topframeref?
<arigato> yes, but not called "topframeref"
<arigato> but "backframe" or something (also, I'm not sure it should be a vref at all)
<arigato> (no, it should be a vref)
<arigato> (otherwise creating a greenlet forces the current frame in a bad way)
<antocuni> why backframe?
<arigato> something to replace ".bottomframe.f_backref"
<antocuni> well, but it's something which later will be used to set ec.topframeref, isn't it?
<arigato> it's the topframe of some other greenlet, usually, but as an attribute of 'self', it is below self's bottommost frame
<arigato> yes, but
<arigato> "topframeref" seems to mean "here's the topmost of my frames"
<antocuni> yes, exactly: isn't this the case?
<arigato> no
<arigato> it is ".bottomframe.f_backref", which may often point back in a loop to the topmost of my own frames, but not always
<arigato> e.g. not if there are several continulets in a loop
<antocuni> I am again very confused
<arigato> it's .bottomframe.f_backref in its regular role as "the next frame below .bottomframe"
<antocuni> yes, but we just concluded that we don't want ANY frame below bottomframe
<antocuni> ah, maybe I see
<arigato> no, we concluded that we don't want to *show* that in the app-level f_back
<antocuni> you mean, the python frame which happens to be below bottomframe in the *C* stack
<arigato> but we don't want any change in the internal structure
<arigato> I don't think we can say anything about the C stack here
<arigato> I just mean that we should do a very minimal change from default, which is to store ".bottomframe.f_backref" into ".backframeref" instead
<arigato> and thus make the f_back at app-level return None
<antocuni> yes, but I claim that "backframeref" is a bad name, at least in my understanding of things
<antocuni> when I tried to understand how it works, at some point I had the eureka moment, in which I said: "I know, we abuse bottomframe.f_back to store a reference to the top"
<arigato> it's a name chosen to match the internal implementation (given that the attribute is not visible at app-level anyway)
<arigato> it's not an abuse
<arigato> it's because of this nice (and theoretical and useless) model
<antocuni> then it means that my mental model is wrong
<antocuni> one thing that I don't understand is:
<antocuni> if we have a BOTTOM frame, how is it possible that there is a frame below it?
<arigato> so, as I said, the basic model is that all frames in the current thread (including bottomframe and others) have f_back, and the property is that: there is one top-level frame that is not the f_back of anyone else, and that is running; and there is a single f_back=None, which is the bottommost
<arigato> if you take this as a definition, you see it includes the case of a regular stack, but also a regular stack + any number of loops
<arigato> of any size
<antocuni> ok
<arigato> to answer your question more precisely, ".bottomframe" is the bottommost frame that belongs to the current continulet
<antocuni> but then "bottomframe" is a bad name, because it's not bottom at all
<antocuni> ah ok
<arigato> right, so I suggest ".backframeref" or something, that points to the next frame immediately below the ones that belong to the current continulet
<antocuni> ok, I think that now I get one source of my confusion: is that the top->bottom relationship is not totally ordered at all
<arigato> no, it's loops
<antocuni> right
<arigato> in theory you can have a loop of several continulets, each with .backframeref pointing to the topmost frame in the next one
<arigato> and from there the user can ask to resume any of the continulets
<arigato> ...which is admittedly very hard to understand
<antocuni> and then they all run in order, but from a different starting point depending on which precise continulet you resume
<arigato> yes
<antocuni> ok, it makes some kind of sense
<arigato> "some kind of sense", indeed
<antocuni> aah, now I also understand why it's called "permute"
<arigato> yes, it exchanges two ".backframeref"
<arigato> in theory switch() can be implemented with permute(): you create a continulet and run it, and inside, it permute() its own backframeref, and returns
<antocuni> oh, I see
infinite has quit [Ping timeout: 268 seconds]
<antocuni> ok, I think I got it now
<antocuni> thanks to some other diagrams which I just drawn
<antocuni> so basically, in a given thread: we have a single "top->to->bottom" acyclic sequence of frames, which is the currently running stack
<antocuni> and N loops of frames, each of which composed by one or more continulets
infinite has joined #pypy
<arigato> yes
<antocuni> cool, now I understand 99% of it and I only miss the remaining 99%
<antocuni> thanks :)
<antocuni> anyway, back to the fix: ok, we use .backframeref instead of .bottomframe.f_backref; but then what happens to the current bottomframe? Do we still need it?
<arigato> mostly not
<arigato> we only need the two lines inside the pure-Python code that call continulet.switch()
<arigato> but we can move them to RPython code inside new_stacklet()
<antocuni> so, inside new_stacklet() we call self.switch() instead of self.bottomframe.execute_frame()?
<arigato> not instead of
<arigato> we call switch(), and then we need to really run w_callable from W_Continulet.__init__
<arigato> so we store w_callable and __args__ on the W_Continulet I guess
<arigato> and use space.call_args()
<antocuni> ah, I see
<antocuni> basically, I call switch() immediately so that I give back the execution to the caller of continulet.__new__
<antocuni> and then whey they switch() back to me, I call the actual function
<arigato> yes
<antocuni> ok
Garen has quit [Read error: Connection reset by peer]
Garen has joined #pypy
<kenaan_> mattip refactor-PyFloat_FromString 57019e77c377 /pypy/: refactor possible recursion in PyFloat_FromString
rubdos_ is now known as rubdos
<bbot2> Started: http://buildbot.pypy.org/builders/pypy-c-jit-linux-x86-64/builds/5077 [mattip: refactor-PyFloat_FromString]
yuyichao_ has quit [Ping timeout: 258 seconds]
_whitelogger has joined #pypy
<antocuni> arigato: eh, obviously it's not so easy as we described
<antocuni> I keep getting "Invalid call to virtual_ref_finish"
yuyichao_ has joined #pypy
<arigato> maybe you need to work closely around new_stacklet()
<arigato> to make sure the f_backref is correctly set to None
<arigato> if you don't care, then new_stacklet() calls space.call_args() which will make a frame with f_backref=topframeref
dcrosta has joined #pypy
<antocuni> no, I think it happens earlier
<antocuni> I get the exception even when running test_new_empty, where w_callable is not called at all
<arigato> "ah"
<antocuni> in particular, ec.leave receives the frame of test_new_empty, but its frame_vref is vref_None
<antocuni> this is the diff, FWIW: http://paste.openstack.org/show/626530/
<antocuni> as you can see, it's a quite mechanical replacement of ".bottomframe.f_backref" with ".backframeref"
<arigato> ah, no
<arigato> __init__
<arigato> previous version sets bottomframe.f_backref initially to be the global topframeref, I think
<antocuni> where?
<arigato> inside space.create_frame() I think
<arigato> probably in PyFrame.__init__?
<arigato> no, maybe I'm wrong
<antocuni> no, I checked and self.bottomframe.f_backref is vref_None after the space.createframe
<arigato> ok
<arigato> sorry
<antocuni> it's the first thing I tought as well :)\
<arigato> self.descr_switch(self) looks suspicious
<arigato> I think it means "c.switch(to=c)"
<antocuni> ah, maybe I parsed it wrongly
<antocuni> inside the applevel "def start()" there is continulet.switch(c)
<arigato> right, that's an unbound method call to the same; no "to=" argument
<antocuni> so it's self.descr_switch()
<arigato> I guess
<antocuni> nope, still the same
<antocuni> I suppose I can debug it but putting many prints here and there and see where they start to differ
<arigato> :-/
<arigato> ah
<arigato> I see
<arigato> new_stacklet_callback() in default calls execute_frame(), and the first thing it does is set f_backref to ec.topframeref
<arigato> so bottomframe.f_backref is really set to ec.topframeref, very soon after it is created
<antocuni> well, but in this particular test it doesn't even arrive at calling execute_frame()
<antocuni> aaaah no
<arigato> no, in "default" it does
<antocuni> I see
<arigato> yes .-)
<antocuni> because the switch is done inside
<antocuni> pff
<arigato> "of course"
<antocuni> yes indeed, now it works
<arigato> ok
<antocuni> thanks, you saved me at least 1 hour of debugging :)
<arigato> and in new_stacklet_callback you should set ec.topframeref to None
<arigato> for all other tests
mattip has joined #pypy
<arigato> otherwise it would capture a non-null f_backref in space.call_args()
<antocuni> right
<mattip> hi
<arigato> the 2nd "ec.topframeref = None" in the same function is also needed
<antocuni> so, if there is an exception inside space.call_args, the traceback will show w_callable at the top
<fijal> mattip: hi
<antocuni> s/top/bottom
<arigato> antocuni: yes, like CPython, with no extra frame
<antocuni> yes, which is what we want
<antocuni> cool
* mattip working out new numpy failures due to cpython quirks
<antocuni> arigato: re "the 2nd ec.topframeref = None": do you mean the one immediately before global_state.origin = self?
<arigato> yes, the one after "try: except Exception:"
<antocuni> ok
<arigato> if you also set it before, then afterwards it should be None too
<arigato> but better safe than sorry, maybe in some exceptional cases it won't be
<antocuni> I'm not sure to follow
<antocuni> currently, frame.execute_frame sets f_backref = ec.topframeref, then calls the switch
<arigato> I mean that if you set ec.topframeref = vref_None before, then afterwards, it should be the same value: all calls to frames change and then restore it when they return
<antocuni> ah ok
<arigato> but better safe than sorry, you can keep the line afterward unmodifed too
<antocuni> something like this, I suppose? http://paste.openstack.org/show/626532/
<fijal> arigato: do you remember from which version cffi supports only the build-first mode?
<arigato> antocuni: yes
<arigato> fijal: if you mean "which version introduced support for ffi.set_source()" then it was 1.0
<kenaan_> antocuni continulet-no-frame-loop-2 5dfc7af8c0ff /: a branch where to try to fix issue 2683 in a different (and simpler) way than continulet-no-f...
<kenaan_> antocuni continulet-no-frame-loop-2 37701890010b /pypy/module/_continuation/test/test_stacklet.py: cherry pick two failing tests from the branch continulet-no-frame-loop
<kenaan_> antocuni continulet-no-frame-loop-2 55154dad821a /pypy/module/_continuation/interp_continuation.py: WIP: (antocuni, arigato): refactor things so that we no longer need a bottomframe, and that t...
<fijal> arigato: but ffi.verify still works right?
<antocuni> arigato: ^^^ r55154dad821a
<arigato> fijal: yes
<fijal> ok
<fijal> is it possible to package wheel in a way where verify() builds the thing?
<fijal> if so, is there documentation how to do this?
<arigato> no, that's the point of using set_source() instead
<arigato> with verify(), you can hack around, but there is no clean solution
<fijal> found the article I was looking for: https://caremad.io/posts/2014/11/distributing-a-cffi-project/
<fijal> maybe we should link to it from the docs
<fijal> arigato: the problem here is that package uses verify() (because it's old) and my dad is trying to package it
<arigato> doesn't change any answer, I fear
<arigato> I changed verify() to set_source() precisely because of that
<fijal> yes, I know
<fijal> but does that stop us from linking to that article from documentation?
<fijal> "There is no clean solution and you should use set_source, however here is a link"
slackyy has joined #pypy
drolando has quit [Remote host closed the connection]
drolando has joined #pypy
<bbot2> Failure: http://buildbot.pypy.org/builders/pypy-c-jit-linux-x86-64/builds/5077 [mattip: refactor-PyFloat_FromString]
lritter_ has quit [Quit: Leaving]
ceridwen has quit [Ping timeout: 240 seconds]
tormoz has quit [Remote host closed the connection]
tormoz has joined #pypy
ceridwen has joined #pypy
<bbot2> Started: http://buildbot.pypy.org/builders/pypy-c-jit-linux-x86-64/builds/5078 [mattip: force build, refactor-PyFloat_FromString]
<kenaan_> mattip default 107848cb5acc /lib-python/2.7/test/test_urllib2net.py: graft oneliner from stdlib from 2.7.14 to fix tests
oberstet has quit [Ping timeout: 240 seconds]
asmeurer_ has joined #pypy
<mattip> anyone on macosX, feel like taking a look at a nightly 2.7 build and pypy.module.posix.test.test_posix2 failures?
<nanonyme> mattip, isn't it just macOS these days?
<mattip> you already are demonstrating a knowlege much beyond mine
<nanonyme> Seems like they're trying to put non-fans off scent by changing name all the time
<nanonyme> Doesn't mean I actually run Apple hardware
<nanonyme> (nor operating systems)
asmeurer_ has quit [Quit: asmeurer_]
<nanonyme> Sorry :(
marky1991 has quit [Read error: Connection reset by peer]
<antocuni> arigato: I fear that bottomframe is needed to implement pickling
<kenaan_> antocuni continulet-no-frame-loop-2 e8f933d33b7e /pypy/module/_continuation/test/test_stacklet.py: fix and simplify test_f_back_*: now that we hide the frames below bottomframe, a part of the ...
<kenaan_> antocuni continulet-no-frame-loop-2 8c14e037eea6 /pypy/module/_continuation/: fix permute, and rewrite the corresponding test since we can no longer check what is the 'bac...
drolando has quit [Read error: Connection reset by peer]
drolando has joined #pypy
antocuni has quit [Ping timeout: 260 seconds]
<bbot2> Failure: http://buildbot.pypy.org/builders/pypy-c-jit-linux-x86-64/builds/5078 [mattip: force build, refactor-PyFloat_FromString]
drolando has quit [Remote host closed the connection]
drolando has joined #pypy
raynold has joined #pypy
<kenaan_> mattip refactor-PyFloat_FromString 2bf28f126b37 /pypy/doc/whatsnew-head.rst: document and close branch to merge
<mattip> with this branch ^^^ and these two numpy pull requests, we now only fail the doctest tests in numpy
<LarstiQ> woo!
<cfbolz> mattip: awesome, well done!
<mattip> IMO if these land, we are finally ready to push for an official pypy numpy wheel package
<mattip> the issue with docsctrings is that they write the docstrings at import time, after PyType_Ready, IFF not run with python -OO
<mattip> we need to think how to re-engineer that
<nanonyme> mattip, isn't it great that while you guys are trying to support numpy, they're planning to drop Python2 support in 2019?
Rhy0lite has quit [Quit: Leaving]
<ronan> nanonyme: it works on pypy3 too
<nanonyme> (well, to be fair it just means PyPy2 users will get to stick with the old version so probably just easier to maintain)
<kenaan_> rlamy py3.5 12061ebde67d /pypy/: Let SyntaxError tracebacks show the bad code line (hard to test)
tormoz has quit [Remote host closed the connection]
tormoz has joined #pypy
<nanonyme> Do they in CPython?
<kenaan_> rlamy py3.5 44b2fd82cbfa /lib-python/3/test/test_cprofile.py: Skip CPython-specific test
<ronan> nanonyme: yes, in 3.n+ with n <= 5
<nanonyme> Right
<nanonyme> ronan, is the line number also exposed in some attribute?
<ronan> yes
dcrosta has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
dcrosta has joined #pypy
marky1991 has joined #pypy
<tos9> ./23
asmeurer__ has joined #pypy
pilne has joined #pypy
<fijal> mattip: do you still need a hand
<fijal> ?
* ronan is giving up on fighting vicious descriptor nonsense for now
<ronan> that test fails randomly:
<ronan> I guess I'll end up just skipping it
dcrosta has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
dcrosta has joined #pypy
asmeurer__ has quit [Quit: asmeurer__]
<fijal> is it bad?
asmeurer_ has joined #pypy
<ronan> fijal: It's probably fine
<ronan> that's extremely weird code and we're not doing anything completely unexpected
<fijal> no, the point is not to segfault right?
<fijal> so I think it's fine to raise AttributeError
<ronan> yeah, we're not segfaulting
<ronan> the most annoying part is the randomness, IMHO
<fijal> why is it random?
<ronan> I don't know
<fijal> it probably relies on addresses?
<fijal> but how?
<ronan> dict lookup order, I guess
<fijal> our dicts are ordered....
<ronan> yes, but what about lookup?
<ronan> 'attr' and Evil() have the same hash
<fijal> yes, so they should call __eq__ no?
<fijal> maybe it's some infinite recursion thing?
<ronan> I don't think it should recurse
<ronan> Evil.__eq__ only touches the class dict
<fijal> put some prints?
<fijal> why is it different?
<fijal> I think it might be important to understand why is it random, not anything else
<ronan> maybe it's about maps
<fijal> easy to check - disable the map and then run the test
tbodt has joined #pypy
<ronan> not so easy: AFAICT it only fails after translation...
* ronan off
asmeurer_ has quit [Quit: asmeurer_]
asmeurer has joined #pypy
zmt00 has quit [Ping timeout: 248 seconds]
zmt00 has joined #pypy
asmeurer has quit [Quit: asmeurer]
asmeurer__ has joined #pypy
<mattip> fijal: if you mean help with macosx, yes, there are many failing tests
asmeurer__ has quit [Quit: asmeurer__]
asmeurer_ has joined #pypy
mattip has left #pypy ["bye"]
asmeurer_ has quit [Client Quit]
asmeurer_ has joined #pypy
oberstet has joined #pypy
<njs> "so it means that on CPython, with greenlets, we get exceptions that print normally but that contain some frames with f_back == None, right?" <-- note that this isn't so weird -- you can also see this with simple generators.
adamholmberg has quit [Remote host closed the connection]
adamholmberg has joined #pypy
adamholmberg has quit [Ping timeout: 248 seconds]
oberstet has quit [Ping timeout: 255 seconds]