## page was renamed from bug01 ## page was renamed from bug1 = SAGE Bug Day 1 = Sage Bug Day 1 took place from 10 am PST August 18th until 2 am August 19th 2007. Remember the "Twisted Rule" -- Don't work on '''anything''' unless there is a trac ticket for it. * [[bug1/status| STATUS]] * [[bug1/irc| IRC log]] * [[bug1/Results| Results]] * The base version of SAGE we'll start with is here: http://sage.math.washington.edu/bug/ * The trac server with all the bugs is here: http://www.sagemath.org:9002/sage_trac/report/1 * We will focus on the bugs listed here: http://www.sagemath.org:9002/sage_trac/milestone/sage-2.8.2 However, people with other interests can of course help out with fixing anything they want. * Write to wstein@gmail.com for an account on the bug tracker. * We'll all be on #sage-devel at irc.freenode.net. {{{ From Linux you can chat via a text console by installing "irssi", running it, and typing /SERVER add irc.freenode.net /SERVER irc.freenode.net /join #sage-devel }}} = IRC = SAGE Bug squash IRC LOG [Thu Aug 16 2007] [02:11:25] <william> It'll be fixed in sage-2.8.1 [Thu Aug 16 2007] [02:11:38] <malb> sounds difficult to track down [Thu Aug 16 2007] [02:12:00] <william> I looked through all the code in our src/ versus the one in GMP's generic install, and it didn't look like anything nefarious. [Thu Aug 16 2007] [02:12:07] <william> it just looks like a patch was preapplied. [Thu Aug 16 2007] [02:12:15] <william> anyway, fixed. [Thu Aug 16 2007] [02:12:27] <william> it was hard to track. i got lucky. [Thu Aug 16 2007] [02:27:48] |Quit| malb has left this server ("Konversation terminated!"). [Thu Aug 16 2007] [02:27:55] |Join| malb has joined this channel (n=malb@p5B105CBC.dip.t-dialin.net). [Thu Aug 16 2007] [04:09:46] |Quit| malb has left this server (Remote closed the connection). [Thu Aug 16 2007] [04:28:45] <mabshoff> Hey william [08:53] --> You have joined the channel #sage-devel (n=was@206.135.48.98). [08:53] *** Channel modes: secret, no messages from outside [08:53] *** This channel was created on 08/17/2007 01:03:33 PM. [08:54] <burcin> hello? [08:55] <was_> hi. [08:55] <burcin> is there a reason why the channel is secret? [08:55] <was_> no [08:56] <was_> i hardly know anything about irc [08:56] <burcin> it's been a while since I used irc.. I was surprised when I couldn't find this channel in the list [08:56] <was_> bug :-) [08:57] <burcin> if we're going to be using this often.. and it seems we will be.. [08:57] <burcin> we should also register the group with freenode... [08:58] <was_> when we made @sage-dev a while ago, bobby moretti and i tried several times [08:58] <was_> to officially register the group, but got ignored. [08:58] <was_> it was weird. [08:59] <was_> We just changed from using #sage-dev to #sage-devel a few days ago for [08:59] <was_> consistency with the mailing list name. [08:59] <was_> Maybe we were registering incorrectly. [09:00] --> pdenapo has joined this channel (i=pablo@201.255.49.80). [09:00] <burcin> this seems to be the first step: [09:00] <burcin> http://freenode.net/group_registration.shtml [09:00] <burcin> or maybe it's overkill... [09:01] <burcin> anyway.. I'm just making remarks about nonsense.. as I won't be able to join in the bug squash.. [09:02] <burcin> unfortunately, this weekend the dorms don't have internet access.. and I'll be leaving the institute in 30 minutes.. [09:02] <burcin> so proper questions.. [09:02] <was_> where do you live? [09:02] <burcin> is there anything I need to do, to get cython to build code with debug symbols? [09:03] <was_> cython always builds such code by default. [09:03] <burcin> I live in linz, austria.. the institute, RISC, is in Hagenberg, about 25 km's away.. long distance for this place.. [09:04] <burcin> so how does one go about attacking bug #274 [09:05] <was_> first confirm that it is still a bug. [09:05] <burcin> it is.. [09:06] <was_> yep. [09:06] <burcin> the number increases much more significantly, if one adds a couple of zeroes to the parameter of range... [09:06] <was_> i would try to simplify the loop -- take the random stuff out. [09:07] <was_> yep. [09:07] <was_> without the random stuff the leak is still there. [09:07] <was_> that's good because it is much simpler. [09:07] <was_> Is both the + and * needed? [09:08] <was_> nope. [09:08] <was_> just doing t*X exhibits a leak [09:08] <burcin> yes.. you're much faster :) [09:10] <-- pdenapo has left this server ("Leaving"). [09:10] <was_> the problem is also *only* over GF(10007^2) [09:10] <was_> not over GF(10007) [09:10] <was_> so it's givaro, probably. [09:11] <was_> wait -- it's pari at that size! [09:11] <was_> it's not givaro. [09:11] <was_> so now I would try to narrow it down as much as possible in this class sage.rings.finite_field.FiniteField_ext_pari [09:13] <burcin> thanks.. but I need to leave now.. [09:13] <burcin> I'll try to read the logs... [09:13] <burcin> and definitely be here for next time.. [09:13] <was_> excellent. [09:13] <was_> cu [09:14] <-- burcin has left this server ("Leaving"). [09:42] --> d has joined this channel (n=dorian@adsl-75-11-167-13.dsl.sndg02.sbcglobal.net). [09:43] --> dropdrive has joined this channel (n=user@c-24-128-50-102.hsd1.ma.comcast.net). [09:56] --> robert457965 has joined this channel (n=rlmill@c-71-197-245-35.hsd1.or.comcast.net). [09:57] <robert457965> any intel mac binaries? [09:58] <william> somebody somehow messed up my office computer where [09:58] <william> the intel mac binary is. [09:58] <william> I can't connect to it. [09:58] <william> either it crashed, or tom changed something or ?? [09:58] <william> I don't know. [09:59] <william> so, no intel mac binaries. [09:59] <william> there is one -- it's just no accessible. [09:59] <robert457965> ok, well my intel mac is building now [09:59] <robert457965> we could make binaries from that? [09:59] <william> please post when you are done, if you have a fast connection. [09:59] <william> yes. [09:59] <william> just do sage -bdist 2.8.1 [09:59] <robert457965> ok cool [10:01] <dmharvey> good morning/afternoon/evening [10:01] <was_> hi. [10:01] <was_> welcome. [10:01] <was_> it's 10am, so I official declare this bug squash started. [10:01] <was_> Did everybody get my email? [10:01] <was_> (from last night) [10:02] <was_> this is the key thing: http://www.sagemath.org:9001/bug1 [10:02] <dmharvey> yes [10:02] <dmharvey> so how is this going to work? [10:03] <robert457965> i'm starting on ticket 206, once my build finishes [10:03] <william> could everbody who is here maybe write where they are physically or something? [10:03] <mabshoff|away> hi [10:03] <robert457965> reporting from my gf's apartment, capitol hill seattle [10:03] <william> I'm in San Diego [10:03] *** mabshoff|away is now known as mabshoff. [10:03] <william> So you're Robert Miller? [10:03] <dmharvey> boston, in my apartment, with a somewhat flaky internet connection [10:03] <robert457965> yeah [10:03] <william> ok. [10:03] <robert457965> surprisingly the nickname "robert" was taken [10:04] <dmharvey> "william" == "was_"? [10:04] <william> i am logged in twice. [10:04] <william> I have two different irc clients. [10:04] <william> anyway, i made this page: [10:04] <dmharvey> lemme guess... one is on your iphone? [10:04] <mabshoff> I am near Dortmund, Germany with a DSL connection locally, but fat pipes at work. [10:04] <william> http://www.sagemath.org:9002/sage_trac/milestone/sage-2.8.2 [10:05] <william> what about dropdrive and d? [10:06] <robert457965> was- how is that delete script doing? [10:06] <william> 79% done. [10:06] <william> :-) [10:06] <robert457965> oy [10:07] <robert457965> lesson learned [10:07] <william> how about if somebody chooses a specific bug and we all think about it for a few minutes? [10:08] <william> optimally, somebody will have an idea, convince everybody else it is a good way to go, and [10:08] <william> write up a patch, which everybody else could try. [10:08] <dropdrive> william: I'm just an interested observer :) [10:08] <dmharvey> i'm going to see if #319 still exists after all the changes to the coercion code [10:08] <william> ok. [10:08] <william> ok, i'm looking at it too. [10:08] <dmharvey> unfortunately i'm still building 2.8.1 on two machines.... [10:08] <william> just try in 2.8 [10:09] <william> Or do hg_sage.pull() [10:09] <dmharvey> yep it's fixed in 2.8 :-) [10:09] <dmharvey> ha ha [10:09] <william> The underlying SAGE library code is almost the same in 2.8.1. [10:09] <dmharvey> one bug squashed [10:09] <william> Most packages build better. [10:09] <william> In particular ** GMP **. [10:09] <william> We found a major issue this week in how GMP was being built. [10:09] <robert457965> here's something warranting discussion [10:09] <william> The gmp-*/src directory had some patches for specific architectures already applied, [10:09] <robert457965> what is the best way to handle factoring poly [10:10] <robert457965> 's over RDF? [10:10] <william> instead of it being the generic upstream code. [10:10] <william> wait -- let's finish #319. [10:10] <robert457965> k [10:10] <william> did anybody else verify that it is fixed? [10:10] <dmharvey> sage: Matrix(QQ, 2, 2, [1, 1, 1, 1]) / 2 [10:10] <dmharvey> [10:10] <dmharvey> [1/2 1/2] [10:10] <dmharvey> [1/2 1/2] [10:11] <robert457965> same here [10:11] <william> somebody volunteer to make that a doctest and attach the patch to the bug report? [10:11] <william> then we'll close it. [10:11] <william> (same here) [10:11] <william> i volunteer. [10:12] <dmharvey> wow you are too fast for me [10:12] <william> :-) [10:12] <robert457965> something just occurred to me [10:12] <william> question -- is this behavior generic? we should test more base rings. [10:12] <robert457965> anyone claiming to have lives outside of sage might say something... we can just say we were playing video games all day [10:12] <william> let's do it!! [10:12] <william> online gaming. [10:12] <william> or whatever it is called these days. [10:13] <robert457965> Matrix(ZZ, 2, 2, [1, 1, 1, 1]) / 2 works [10:13] <robert457965> m.m.o.r.p.g.? [10:13] <william> not so massive [10:13] <mabshoff> not yet, who knows who else will show up. [10:14] <william> i just found a bug. [10:14] <william> in sage-2.8.1 [10:14] <william> i tried to start a secure server on sage.math, and it fails. [10:15] <robert457965> RDF and RR work with the same example [10:15] <mabshoff> @william: Do you have a changelog with the changes in between 2.8 and the "bug" release? [10:15] <william> excellent. [10:15] <mabshoff> The one in sage:/bug/ is empty excpet the date. [10:15] <william> can somebody make sure nobody is in sage-dev. [10:15] <william> I think malb is there. [10:16] <william> it sage:lj/bug [10:16] <robert457965> only people who are checking... [10:17] <robert457965> so is that it for 319? [10:18] <mabshoff> That Changelog.txt starts with [10:18] <mabshoff> Sun Aug 12 14:24:58 2007 [10:18] <mabshoff> ------------------------ [10:18] <mabshoff> Sun Aug 12 14:10:37 2007 [10:18] <mabshoff> ------------------------ [10:18] <dmharvey> I think #319 is okay, as long as william carries through on his promise to writ a doctest [10:18] <mabshoff> And then the changes for 2.8 [10:18] <dmharvey> I am going to take a look at #350 [10:18] <william> I update the changelog on my laptop, but couldn't use my laptop all week. [10:18] <william> so no change log. [10:18] <william> yep. [10:19] <mabshoff> Ok [10:19] <william> mabshoff -- would you consider making a build change log? [10:19] <william> you know about as much as I do about it. [10:20] <mabshoff> Well, I am not exactly sure what happened in the details except: Most stuff now compiles better :) [10:20] <mabshoff> And I wonder about the details, i.e. die the Solaris lcalc compile fixes go in? [10:20] <william> maybe that's the entry. [10:20] <william> no. [10:21] <william> send me a new lcalc spkg :-) [10:21] <mabshoff> Will do in a while. [10:21] <mabshoff> I had planned to work mostly on neron to see how things go with ""out of the box" sage. [10:22] <mabshoff> #389 (bug in mpfi C library) is still present. [10:22] <dmharvey> Question regarding #350. Originally you could do something like "f = x^8 + x^4" and then call f.change_ring(some ring). That no longer works since f is now a SymbolicArithmetic object rather than a polynomial. Does anyone think it would be good for SymbolicArithmetic objects to have a change_ring() method? My preferred answer is no, but I wanted to raise it since the example code in that bug report doesn't currently work. [10:22] <william> no. [10:22] <william> it doesn't make any sense. [10:22] <dmharvey> ok good [10:22] <william> Have to add x = polygen(QQ) at the beginning of the log. [10:22] <mabshoff> re changelog: There is always was/lj/todo.txt [10:23] <william> yes, great idea mabshoff. [10:23] <william> summarize something from that. [10:24] <dmharvey> look at that! #350 is already fixed too! I am jinxed! [10:24] <mabshoff> :) [10:24] <robert457965> question for #430: Would it be better to use GSL or numpy to find roots of a polynomial? [10:24] <dmharvey> I don't suppose anyone has any other bugs that they want fixed just by my magical gaze?.... [10:25] <robert457965> sorry, a polynomial of doubles [10:25] <william> doing hg_sage.pull() gets you the doctests for #319 [10:26] <william> oh yeah, somebody fixed #350. [10:26] <william> 2 down :-) [10:26] <william> mabshoff -- want to fix #389? [10:27] <william> robert457965 -- use numpy. [10:27] <william> it will be way easier to code. [10:27] <william> however, it might be worth doing some benchmarking. [10:28] <william> what do people think aabout #190? [10:28] <william> The issue is that detecting fractional matrix indices will slow matrix indexing down. [10:28] <dmharvey> that's pretty funny [10:28] <mabshoff> Not sure yet. [10:29] <william> Maybe a[0.5] could be the average of rows 0 and 1 ?? :-) [10:29] <mabshoff> I am checking if the patch for #226 still applies. [10:29] <robert457965> well, if it were a 0 by 0 matrix, you could just call iszero() [10:29] <dmharvey> where is the code for that indexing method? [10:29] <william> matrix/matrix0.pyx [10:29] <william> around line 538 [10:30] <william> by the way, when people fix things, if you give them to me somehow, I can post them so [10:30] <william> everybody else can get them with hg_sage.pull(). [10:30] <mabshoff> re #226 (with slight editing to account for pyrex->Cython: [10:30] <mabshoff> patching file Cython/Compiler/ExprNodes.py [10:30] <mabshoff> Hunk #1 succeeded at 2823 with fuzz 1 (offset 229 lines). [10:31] <mabshoff> I will rebuild cython and then sage-2.8 [10:31] <william> does the bug still happen? [10:32] <william> are you sure the patch is needed? [10:32] <mabshoff> you mean: is it fixed without applying the patch? [10:32] <william> yes [10:32] <mabshoff> Not yet, but I will test with the original cython. [10:32] <william> what's your test input? [10:32] <william> i'll just wait.. [10:33] <mabshoff> There is a regression.pyx attached to the ticket. Give me a minute to sort it all out. [10:34] <william> ok. [10:34] <william> dmharvey -- are you looking at #190? [10:34] <dmharvey> #190: do matrix subclasses generally override the getitem/setitme methods? [10:34] <william> one bad thing is: return self.row(int(key)) [10:35] <mabshoff> [mabshoff@m940 sage-2.8.1]$ cython regression.pyx [10:35] <mabshoff> [mabshoff@m940 sage-2.8.1]$ [10:35] <william> no, they enver do. [10:35] <mabshoff> That is without the patch. [10:35] <dmharvey> ok [10:35] <william> (regarding #190) [10:35] <mabshoff> So #226 can be closed then. [10:35] <william> not until i have the patch and have tested it too :-) [10:36] <mabshoff> It was the original cython without the patch applied. [10:36] <dmharvey> #190: so I guess the real question is: if someone tries to index on something like a Rational, which happens to be an integer, should that be allowed? [10:36] <william> it's a simple patch. [10:36] <william> ok. [10:36] <william> #226 - oh -- it already works -- no patch needed? [10:36] <mabshoff> Yes. [10:36] <william> #190: yes. [10:37] <william> #226: where is regression.pyx [10:37] <mabshoff> The report for #226 was for pyrex 0.9.4.1, roughly 7 months old. [10:37] <william> ok. mabshoff - you can have the honors of closing the bug. [10:37] <mabshoff> attached to the ticket. [10:38] <dmharvey> #190: well then it's tricky.... at some point you need to just trying to coerce to an integer index. But floats get rounded when you do that. [10:38] <mabshoff> Mmh, I have to remember my trac password. [10:38] <william> #190: what does magma do? [10:39] <mabshoff> re #226: Reported by: was [10:39] <dmharvey> #190: actually there are two separate issues. One is speed; we could make the pathway faster by adding special code to test for Integer/int index. Second is sanity; are fractional indices allowed. [10:39] <dmharvey> #190: let me check on magma; never done matrices before so gimme a few minutes [10:39] <william> you are convincing me that we should just give an error if the input isn't int,long,Integer. [10:39] <william> wait -- can't we have a fast version, and if that doesn't work, have a slow version? [10:40] <mabshoff> william: How should we handle fixed bugs? [10:40] <mabshoff> Add some text (in this case) stating: Was fixed in a previous release of cython. [10:40] <william> for the sage library, make them available to me in any way, and I'll (1) put them in the official [10:40] <mabshoff> cython regressioin.pyx works. [10:40] <william> hg repository; for other things, I'll put them in /home/was/bug/ [10:41] <william> oh -- and post verbosely to trac! [10:41] --> ncalexan has joined this channel (n=user@d207-216-25-207.bchsia.telus.net). [10:41] <william> hi nick. [10:41] <william> where you at? [10:41] <ncalexan> Hi folks... I can't stay long, relaxing with the family, but thought I'd see how things were. [10:41] <ncalexan> Victoria, BC. [10:41] <dmharvey> #190: magma raises an error "Runtime error in '[]': Bad argument types" [10:41] <ncalexan> You? [10:41] <william> i wonder what nick things. [10:41] <william> nick thinks. [10:42] <william> nick, if a is a matrix, and n = QQ(5), should a[n,n] be an error or not? [10:42] <dmharvey> #190: my preference is to allow only int/long/Integer [10:42] <dmharvey> hi nick [10:42] --> paulolivier_sage has joined this channel (i=8143024e@gateway/web/cgi-irc/ircatwork.com/x-f7a7e0b894111559). [10:42] <william> wait! [10:42] <-- paulolivier_sage has left this server (Client Quit). [10:42] <william> we should do whatever python lists do, shouldn't we? [10:42] <ncalexan> Yes. That's a reasonable answer. [10:43] <william> also, we should look at what numpy arrays and matrices do. [10:43] <dmharvey> sure [10:43] <ncalexan> That probably means calling __int__ or something similar, no? [10:43] <william> python lists have an __index__ protocol as of python 2.5. [10:43] --> pauloliviersage has joined this channel (i=8143024e@gateway/web/cgi-irc/ircatwork.com/x-539b7d4cf887a650). [10:43] <william> NO. [10:43] <ncalexan> Yeah, I think we best stick with that then. [10:43] <ncalexan> ? [10:43] <william> #190: A python list will call __index__ and if that works, use it. otherwise fail. [10:44] <william> So anybody can make their own new class that can index into lists, etc., if they want. [10:44] <dmharvey> #190: ah that explains why you can index on an Integer [10:44] <william> I used to have to do this crap in the preparser: v = [1,2,3] [10:44] <william> v[Integer(2)] [10:44] <william> it totally sucked. [10:44] <william> We don't want to make SAGE users who make new classes suffer that way. [10:44] <william> #190 -- where? [10:45] <dmharvey> #190: sorry, I mean for a python list [10:45] <william> there must be a python/c api call to get foo.__index__() [10:45] <dmharvey> #190, i.e. v[Integer(2)] works, but v[2.5] doesn't [10:45] <ncalexan> Why was it bad? [10:45] <william> #190: yep, that's good. [10:45] <william> but if somebody wanted to make their own "2.5" and define an index method on it, then it would work. [10:45] <william> That's the best way to go. [10:45] <mabshoff> Ok, I close #226 [10:45] <mabshoff> +d [10:46] <william> thanks! [10:46] <william> 3 down. [10:46] <ncalexan> Ah, so it was too slow? [10:46] <mabshoff> But I think I found a bug in cython. [10:46] <william> 33 to go. [10:46] <william> report the cython bug to track [10:46] <mabshoff> cython -v doesn't work as expected. [10:46] <dmharvey> #190: so conclusion is that Matrix.__getitem__ should use call __index__? instead of coercing to int? [10:46] <william> #190: no -- the problem was that it wasn't meaningful [10:46] <mabshoff> It just prints the standard help text. [10:46] <william> #190 http://www.sagemath.org:9002/sage_trac/ticket/190 [10:47] <william> mabshoff -- agreed. report it. [10:47] <william> #190: use. [10:47] <william> #190: dmharvey -- yes. [10:47] <dmharvey> #190: ok I will try to code thisup [10:48] <william> thanks!! [10:48] <william> i'm pasting this part of the transcript from irc into trac, since it explains the decision well. [10:48] <mabshoff> Which component in trac is cython? [10:49] <william> packages. [10:49] <mabshoff> ok [10:49] <william> it actually has its own bug tracker in berliOS too. see cython.org [10:49] <william> maybe that is a better place to post the bug. [10:49] <mabshoff> Too late, I gues. [10:49] <william> ? [10:49] <mabshoff> It is in now. [10:49] <william> no prob. [10:50] * pauloliviersage says hi [10:50] <mabshoff> It is #438 [10:50] <william> hi paul [10:50] <mabshoff> hello [10:50] <william> where are you at physically? [10:50] <pauloliviersage> oxford [10:50] <pauloliviersage> btw, william, if you have a chance at sage days bristol you should come around here and give a talk [10:50] <william> cool. [10:51] <pauloliviersage> let me know if you think you would have time, i am sure you will be busy [10:51] <mabshoff> the milestone pages updates itself in real time, pretty cool. [10:54] <william> i'm tracking status of what people ware working on here: http://sage.math.washington.edu/bug/status.html [10:54] <william> robert miller -- how is #430 going? [10:55] <william> I just looked at #248. it works fine now. can somebody else confirm this? [10:55] <pauloliviersage> i am working on the remote stuff [10:55] <william> I'm going to add a doctest and close it. [10:55] <william> what is "the remote stuff"? [10:55] <william> which trac number? [10:55] <dmharvey> #190: unfortunately this solution will slow down indexing, basically because I reckon the Integer.__index__() method is currently not all that optimised (it always goes via a python long!). Luckily Python has a special slot and fast calling convention for __index__, which pyrex knows about, so if we make Integer.__index__ faster, then this shouldn't be a serious problem. Should I add an enhancement ticket to test and improve performa [10:56] <william> yes. [10:56] <william> thanks. [10:56] <pauloliviersage> doesn t have a trac number, it s the feature i had asked about: remote login to expect process (not implemented to use files right now), allowing for ssh tunneling through as many hops [10:56] <william> this is definitely the right solution, so we have to do it, despite any pain it causes. [10:56] <william> do you have a trac account? [10:57] <pauloliviersage> i have one [10:57] <pauloliviersage> pdehaye [10:57] <william> please create a trac ticket. [10:57] <pauloliviersage> ok [10:57] <william> with the twisted project they have a rule that *anything* you work on has a trac ticket. [10:57] <william> we don't, but it's perhaps a very good idea. [10:58] <dmharvey> #190: ok [10:59] <william> #190 -- did you right the code already? [10:59] <william> that was fast. [10:59] <dmharvey> #190: no, I'm just scoping out related issues still [10:59] <ncalexan> The last few patches I submitted, I created a trac -- I'm hoping that they'll live longer than my attention span that way. [10:59] <william> great idea. [11:00] <mabshoff> Yeah, a lot of the patches Didier did for the Nexenta port were lost and later recreated by William and me. [11:00] <william> (and by didier...) [11:01] <william> ok, i'm closing #248 -- it works fine now. [11:01] <mabshoff> Well, true - he must have forgotten about them by the porting sprint. [11:02] <pauloliviersage> #439 (should i add to milestone 2.8.2 so it figures in this sprint?) [11:02] <pauloliviersage> (i have added but am not sure) [11:02] <william> sure. [11:03] <william> though you make the game harder (since I hoped we would deal with everything in the list :-) [11:03] <william> but if you can do it, then so much the better. [11:03] <dmharvey> #190: hmmmmm.... M = Matrix(3, 3, range(9)); M[1.5, 1.5]. This succeeds but for a different reason. I suppose I'll try to fix this too. [11:04] <pauloliviersage> (it s a bonus round) [11:04] <william> #190 -- yep, it must involve the implicit coercion to Py_ssize_t in the tuple extract in matrix0.pyx [11:04] <william> #254 -- dmharvey -- you reported this. [11:04] <william> #254 -- it now works fine :-) i think david roe fixed it. it's p-adic precision loss in poly eval. [11:04] <william> I'm closing it. [11:05] <dmharvey> #254: ok thanks [11:05] <william> though one thing -- maybe it is still weird. [11:05] <william> Look: [11:05] <william> h = u + (1 + O(5^8))*u^2 + (1 + O(5^4))*u^3 [11:05] <william> sage: h(u) [11:05] <william> (1 + O(5^4))*u^3 + (1 + O(5^8))*u^2 + (1 + O(5^20))*u [11:05] <william> what about that coefficient of u? [11:06] <william> never mind -- it's padic capped, so [11:07] <william> sage: h = u*(1+O(5^30)) + (1 + O(5^8))*u^2 + (1 + O(5^4))*u^3 [11:07] <william> is [11:07] <william> [11:07] <william> (1 + O(5^4))*u^3 + (1 + O(5^8))*u^2 + (1 + O(5^20))*u [11:07] <william> #254: i'm closing it. [11:08] <william> #268 -- another dmharvey bug -- is also now fixed :-) [11:09] <mabshoff> Is that 5 down? [11:09] <william> yep. [11:09] <william> 6 down. [11:09] <william> ohh. #274 looks really hard. [11:09] <dmharvey> not all bugs are created equal though [11:09] <william> it's a memory leak. [11:10] <mabshoff> Yes, the quick ones will be gone first. [11:10] <william> i looked at this one with somebody from Austria 2 hours ago... [11:10] <william> #274: i'm going to work on this now; mabshoff and his valgrind might end up being helpful. we'll see. [11:12] <mabshoff> valgrinding python is rather tricky. [11:12] <william> yep. [11:12] <mabshoff> One needs to deallocate --py-malloc when python is build. [11:12] <mabshoff> And even then because python doesn't properly free many things upon exit it is very hard to interpret. [11:13] <mabshoff> deallocate -> deactivate [11:13] <william> i'm tracking status of people working here: [11:13] <william> http://sage.math.washington.edu/bug/status.html [11:14] <dmharvey> #190: So I've fixed M[1.5], but M.row(1.5) still works, because the prototype of row() is def row(self, Py_ssize_t i, from_list=False). [11:14] <william> actually, a wiki would be better. [11:14] <mabshoff> Ohh, a corner case in spkg-install: Call it with relative path from within the package. [11:14] <mabshoff> [mabshoff@m940 src]$ ../spkg-install > /dev/null [11:14] <mabshoff> ../spkg-install: line 6: cd: src: No such file or directory [11:14] <mabshoff> [mabshoff@m940 src]$ cd .. [11:14] <mabshoff> [mabshoff@m940 cython-20070728]$ ./spkg-install > /dev/null [11:14] <mabshoff> [mabshoff@m940 cython-20070728]$ [11:14] <william> it's not supposed to work. [11:14] <william> spkg-install must be called from the same directory in all cases. [11:14] <dmharvey> #190: william you know about matrices.... will it break things to change that prototype to pass i as a python object? [11:14] <mabshoff> ok [11:15] <ncalexan> brb [11:15] <-- ncalexan has left this server (Remote closed the connection). [11:16] <william> status is now here. [11:16] <william> http://www.sagemath.org:9001/bug1/status [11:17] <william> #190: i don't understand the question. [11:17] <mabshoff> I am looking into that cython bug right now, #438 [11:18] --> robertwb has joined this channel (n=robert@c-67-171-19-168.hsd1.wa.comcast.net). [11:18] <william> hi robertwb! where you at? [11:18] <robertwb> hi, just sitting at home [11:18] <william> see http://www.sagemath.org:9001/bug1 [11:18] <william> you're probably most interested in #438 and #190. [11:19] <dmharvey> hi robertwb [11:19] <robertwb> hey there [11:20] <robert457965> hi robert [11:20] <robertwb> 457965 = miller? [11:21] <robert457965> yup [11:22] <william> I'm posting an irc log here -- robertwb might want to skim it: http://www.sagemath.org:9001/bug1/irc [11:22] <mabshoff> Re #274: I am building a valgrindable python right now. So if william has a testcase which leaks a lot of memory let me know. [11:22] <robertwb> ok, I'm off to attack #190 [11:22] <william> ok. [11:22] <william> talk to dmharvey first -- and see our big discussion. [11:23] <robertwb> yeah, I'm reading the discussion [11:23] <william> notice that http://www.sagemath.org:9001/bug1/status lists dmharvey as working on it. [11:23] <robertwb> oh [11:23] <william> you two should be able to devestate it. [11:23] <dmharvey> robertwb: also vaguely relevant to this is trac #440 that I just added [11:23] <robertwb> I didn't see that page [11:24] <william> it would be good to post some benchmark code and timings to #440. and a link from #190 to #440. [11:24] <robertwb> so, is there a quick way to pull the current bug-fixing version of sage? [11:24] <william> yes. [11:24] <william> do hg_sage.pull() [11:24] <robert457965> i am finishing a binary too [11:25] <william> there's a sage-2.8.1, in which essentially every package has changed, so upgrading is pointless. [11:25] <william> but we have binaries for everything but your laptop :-) [11:26] --> mhansen has joined this channel (n=mike@216.230.34.44). [11:26] <dmharvey> robertwb: if M is a matrix, one problem is that M.row(1.5) succeeds, because the prototype for row() uses Py_ssize_t for the index. [11:26] <robertwb> yeah... [11:26] <dmharvey> robertwb: and I'm wondering whether it would work for that prototype to be changed [11:27] <mabshoff> william: I got clisp_cvs to build on neron by adding the missing "--without-dynamic-ffi" to makemake [11:27] <mabshoff> make check still dies with an exception, [11:27] <william> mabshoff -- which gcc? [11:27] <mabshoff> 3.4.6 [11:27] <william> cool. [11:27] <mabshoff> maxima starts building, but dies with a floating point exception at some point. [11:28] <robertwb> dmharvey: perhaps there should be a fast macro that creates ints but dissallows rounding. [11:29] <mabshoff> Didier had the same problem on Nexenta: clisp + gcc 4.x is broken on Sunish systems [11:29] <mabshoff> But we should add the missing "--without-dynamic-ffi" to the spkg-install of clisp. [11:30] <william> definitel. (and poor lisp...) [11:30] <mabshoff> That cause the really odd "#define uint64_to_I(val) uint64_to_I(val) " [11:30] <dmharvey> robertwb: well there's some tradeoff here between speed and generality [11:30] <robertwb> dmharvey: yeah [11:30] <dmharvey> robertwb: even if you made such a macro, you still have to allow any python object to passed in, right? [11:30] <mabshoff> I haven't heard back from the clisp folks yet. [11:31] <robertwb> dmharvey: yes, but that is already the case (you're talking a def method, right?) [11:32] <dmharvey> robertwb: yes it's a def method. But currently the prototype is def row(self, Py_ssize_t i, from_list=False), so already it gets rounded before we even get to see it [11:33] <william> #190 -- by the way it was Chuck's Russian student Andrei Novoseltsov who reported #190... [11:33] <robertwb> dmharvey: I propose that we change cython so that Py_ssize_t calls __index__ rather than __int__ [11:33] <william> robertwb -- very good idea. [11:33] <william> do that. [11:33] <william> Since Py_ssize_t is supposed to be "the data type for doing indexing". [11:33] <robertwb> ok, that'll solve this issue all over the place [11:34] <dmharvey> #190: yes I think that sounds good [11:34] <william> #190: yeah bug squashing day [11:34] <robertwb> btw, I added (and fixed) the special method patch from Nick and it works great now [11:34] <robertwb> so I've got other cython changes to put upstream [11:35] <mabshoff> william - valgrind --trace-children=yes --tool=memcheck ./sage doesn't work with 2.8.1 [11:35] <william> oh. [11:35] <mabshoff> It dies with [11:35] <mabshoff> /tmp/Work2/sage-2.8.1/sage-2.8.1/local/bin/sage-ipython: line 6: [11:35] <mabshoff> SAGE IPython startup script. [11:35] <mabshoff> : command not found [11:35] <mabshoff> Should I rebuild IPython against the new python compiled with --without-pymalloc? [11:36] <william> See "sage -gdb". [11:36] <william> maybe have to run valgrind on the binary like that. [11:36] <william> Basically modify SAGE_ROOT/local/bin/sage-gdb to make a sage-valgrind. [11:36] <mabshoff> Okay, that might be worth a try. [11:39] <mabshoff> So while I am at it should I add a sage-valgrind? [11:40] <mabshoff> That would be called when you start sage with a new -valgrind option? [11:40] <william> yep. [11:40] <mabshoff> In that case we should also introduce a test for SAGE_DEBUG or something alike that conditionally builds sage's python with --without-pymalloc. [11:41] <william> yep. [11:41] <william> great ideas. [11:41] <robert457965> hooray for sage-valgrind! [11:41] <william> make a trac ticket for it. [11:41] <mabshoff> Okay, give me a while. [11:41] <mabshoff> okay. [11:41] <william> many many people would appreciate having an easy to way to create their own valgrindable sage. [11:41] <william> what a great tool for bug fixing. [11:42] <mabshoff> Well, it is still pretty hard to deciver, especially when you have leaks because of deferred deallocation. [11:42] <robert457965> better than ORDINARY bread [11:42] <-- was_ has left this server ("leaving"). [11:42] <dmharvey> #190: sage: M = Matrix(3, 3, range(9)); M[6/3] still works though, since Rational has an __index__ method. This fails in magma, which is apparently stricter with index types. What do people think of that? [11:43] <william> i like our behavior better. [11:43] <william> magma is way too annoying that way. [11:43] <william> there are now only 995838 files left in robert's tmp directory :-) [11:46] <mabshoff> What category for the sage-valgrind option? [11:46] <william> packages. [11:46] <robert457965> bad news about polynomial factoring in numpy [11:46] <mabshoff> ok. [11:47] <robert457965> sage: x = polygen(RDF) [11:47] <robert457965> sage: f = (x-1)^3 [11:47] <robert457965> sage: f.factor() [11:47] <robert457965> (1.0*x - 1.00000859959) * (1.0*x^2 - 1.99999140041*x + 0.999991400484) [11:47] <william> frickin' numbers. [11:48] <mabshoff> Do you want to factor univariate or multivariate polynomials? [11:48] <robert457965> univariate [11:48] <william> univariate double precision polys. [11:48] <mabshoff> Ok, so the NTL is out. [11:49] <mhansen> Has anyone done #342? It looks pretty straightforward to fix? [11:49] <william> mhansen: #342 -- go for it! [11:50] <william> nobody has looked it yet. [11:50] <dmharvey> #190: I have attached a partial fix, so now M[1.5] goes via PyNumber_index. [11:50] <william> i added you here: http://www.sagemath.org:9001/bug1/status [11:50] <dmharvey> #190: robertwb's proposal will fix a lot of other issues in #190 [11:51] <dmharvey> #190: i'm planning to look at #440 now, I want to find out if I can speed up the Integer.__index__() method much [11:51] <robertwb> ok [11:51] <dmharvey> #190: since that actually affects a *lot* of things [11:51] <william> I'll apply your code and post so others get it with hg_sage.pull() [11:51] <william> great. [11:51] <robertwb> 190 isn't as straightforward as I had hoped, 'cause it might have to mess with PyArg_ParseTupleAndKeywords [11:52] <william> #190 -- if you can do what you suggest, though, it will be very very nice. [11:52] <robertwb> yes, I'm still looking into it [11:54] <william> ok, i've pushed out dmharvey's patch. hg_sage.pull() to get it if you wnat. [11:59] <mabshoff> Hehe: [11:59] <mabshoff> [mabshoff@m940 sage-2.8.1]$ ./sage --valgrind [11:59] <mabshoff> ---------------------------------------------------------------------- [11:59] <mabshoff> | SAGE Version 2.8.1, Release Date: 2007-08-18 | [11:59] <mabshoff> | Type notebook() for the GUI, and license() for information. | [11:59] <mabshoff> ---------------------------------------------------------------------- [11:59] <mabshoff> /tmp/Work2/sage-2.8.1/sage-2.8.1/local/bin/sage-gdb-pythonstartup [11:59] <mabshoff> ==964== Memcheck, a memory error detector. [11:59] <mabshoff> ==964== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al. [11:59] <mabshoff> ==964== Using LibVEX rev 1658, a library for dynamic binary translation. [12:00] <mabshoff> ==964== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP. [12:00] <mabshoff> ==964== Using valgrind-3.2.1, a dynamic binary instrumentation framework. [12:00] <mabshoff> ==964== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al. [12:00] <mabshoff> ==964== For more details, rerun with: -v [12:00] <mabshoff> ==964== [12:00] <mabshoff> Python 2.5.1 (r251:54863, Aug 18 2007, 20:37:45) [12:00] <mabshoff> [GCC 4.1.1 20070105 (Red Hat 4.1.1-52)] on linux2 [12:00] <mabshoff> Type "help", "copyright", "credits" or "license" for more information. [12:00] <mabshoff> --964-- DWARF2 CFI reader: unhandled CFI instruction 0:10 [12:00] <mabshoff> --964-- DWARF2 CFI reader: unhandled CFI instruction 0:10 [12:00] <mabshoff> ==964== Source and destination overlap in strcpy(0x7FEFEE210, 0x7FEFEE210) [12:00] <mabshoff> ==964== at 0x4A06E47: strcpy (mc_replace_strmem.c:106) [12:00] <mabshoff> ==964== by 0x1C4ACEAF: feCleanUpPath(char*) (in /tmp/Work2/sage-2.8.1/sage-2.8.1/local/lib/libsingular.so) [12:01] <mabshoff> ==964== by 0x1C4AD8CB: feInitResource(feResourceConfig_s*, int) (in /tmp/Work2/sage-2.8.1/sage-2.8.1/local/lib/libsingular.so) [12:01] <mabshoff> ==964== by 0x1C4AE021: feInitResources(char*) (in /tmp/Work2/sage-2.8.1/sage-2.8.1/local/lib/libsingular.so) [12:01] <mabshoff> ==964== by 0x1C421768: siInit(char*) (in /tmp/Work2/sage-2.8.1/sage-2.8.1/local/lib/libsingular.so) [12:01] <mabshoff> ==964== by 0x1C122AAF: initmulti_polynomial_libsingular (multi_polynomial_libsingular.cpp:1103) [12:01] <mabshoff> ==964== by 0x49F3F2: _PyImport_LoadDynamicModule (importdl.c:53) [12:01] <mabshoff> ==964== by 0x49D2CE: import_submodule (import.c:2394) [12:01] <mabshoff> ==964== by 0x49D7A1: load_next (import.c:2214) [12:01] <mabshoff> ==964== by 0x49D9C3: import_module_level (import.c:1995) [12:01] <mabshoff> ==964== by 0x49DE34: PyImport_ImportModuleLevel (import.c:2066) [12:01] <mabshoff> ==964== by 0x47D268: builtin___import__ (bltinmodule.c:47) [12:01] <mabshoff> Didn't you chase a bug in libSingular? [12:01] <mabshoff> Anybody still alive? [12:01] <william> i am [12:01] <william> i think we're all just working on bugs :-) [12:02] <mabshoff> okay. [12:02] <mabshoff> But the -valgrind option works, [12:02] <william> frickin awesome!!!! [12:02] <mabshoff> and doesn't crash valgrind. [12:02] <mabshoff> And " ==964== Source and destination overlap in strcpy(0x7FEFEE210, 0x7FEFEE210)" [12:03] <mabshoff> might be a problem that Martin and I saw with libSingular on Opteron's in 64 bit mode. [12:03] <william> cool. [12:04] <robert457965> #430 -- fixed [12:04] <william> how? [12:04] <robert457965> at least, now factoring is implemented [12:04] <robert457965> but the roots function for RDF needs to be improved [12:04] <william> ok. [12:04] <william> post a patch. [12:07] <mabshoff> mmmh, just starting and quitting sage gives me the following: [12:07] <mabshoff> =1024== LEAK SUMMARY: [12:07] <mabshoff> ==1024== definitely lost: 2,500 bytes in 1 blocks. [12:07] <mabshoff> ==1024== possibly lost: 276,902 bytes in 769 blocks. [12:07] <mabshoff> ==1024== still reachable: 130,181,755 bytes in 159,788 blocks. [12:07] <mabshoff> ==1024== suppressed: 0 bytes in 0 blocks. [12:07] <mabshoff> ==1024== Use --leak-check=full to see details of leaked memory. [12:07] <mabshoff> That's 130MB in limbo. [12:07] <robert457965> #430 -- http://sage.math.washington.edu/home/rlmill/RDF_factor.patch [12:10] <robert457965> funny for 53 bits of precision returning answers true up to about 5 bits [12:11] <dmharvey> does anyone know the official definition of the range of the python int type? Is it the same as a C int or long? [12:11] <dmharvey> it's just a C long right? [12:12] <william> better look it up. [12:12] <dmharvey> yeah I tried and couldn't find it [12:12] <dmharvey> the best I can do is note that the C api seems to use "long" everywhere [12:13] <william> robert457965 -- try directly using numpy's roots and try to track down where the precision loss is. [12:13] <-- robertwb has left this server (Read error: 104 (Connection reset by peer)). [12:13] <william> i pushed out robert457965's changes. [12:14] <robert457965> closing ticket #430, creating a new one [12:14] <william> good. [12:14] <william> add it to the roadmap for today :-) [12:14] <robert457965> #442 [12:15] <mabshoff> william - I set PYTHONSTARTUP=$SAGE_ROOT/local/bin/sage-valgrind-pythonstartup - now I don't get a sage prompt any more, but ">>>" [12:16] <mabshoff> With sage-gdb-pythonstartup it works, [12:16] <mabshoff> where should I look? [12:16] --> robertwb has joined this channel (n=robert@c-67-171-19-168.hsd1.wa.comcast.net). [12:16] <william> ? [12:16] <william> >>> is Python's prompt. [12:16] <william> the SAGE: prompt comes from using ipython. [12:16] <mabshoff> Ok. [12:16] <mabshoff> I copied sage-gdb and renamed it sage-valgrind. [12:16] <mabshoff> Added a -valgrind option in sage-sage. [12:17] <mabshoff> When PYTHONSTARTUP is set to *gdb* (as with the old sage-gdb script) everthing works as expected. [12:17] --> ncalexan has joined this channel (n=user@d207-216-25-207.bchsia.telus.net). [12:17] <mabshoff> But if I set it to *-valgrind* I loose the sage prompt and get the python one. [12:18] <william> oh - you have to create correctly the file sage-valgrind-pythonstartup? [12:18] <mabshoff> No, I just figured that out, too. [12:18] <mabshoff> Should I just reused the *gdb* one? [12:19] <william> i guess so. [12:19] <mabshoff> ok. [12:20] <ncalexan> 265: would it be enough to do return float(str(self.numer()).replace(' ', '')) [12:20] <mabshoff> I will put a comment about that in sage-valgrind [12:20] <robert457965> #211 is related to this root finding stuff, i've added that to the milestone too [12:20] <ncalexan> In maxima.py:__float__? [12:20] <william> ncalexan: please elaborate? [12:21] <william> ahh. i missed your earlier remark. [12:21] <robert457965> ncalexan -- you're on ticket #211 [12:21] <william> #265, i think. [12:22] <william> n#265 -- it just works already. [12:22] <william> weird. [12:22] <william> for me at least. [12:22] <ncalexan> 265: I will try it here. [12:23] <william> yeah, for #265, it works for me already. [12:23] <robert457965> #265 -- works here too [12:24] <william> ok, closed. [12:24] <ncalexan> Works here, Mac OS X 10.4, Intel Core2. [12:24] <ncalexan> The maxima output is "better", but we still need a doctest for that behaviour. [12:25] <william> i'm adding some right now. [12:25] <ncalexan> Great! [12:25] <william> hg_sage.pull() to get it. [12:25] <mabshoff> Ok, for the valgrind option: [12:25] <mabshoff> http://fsmath.mathematik.uni-dortmund.de/~mabshoff/patches/sage-valgrind [12:26] <mabshoff> (the script itself) [12:26] <mabshoff> http://fsmath.mathematik.uni-dortmund.de/~mabshoff/patches/sage-2.8.1-add_sage_-valgrind_option.patch [12:26] <mabshoff> The patch for sage-sage. [12:26] <william> ok. [12:26] <ncalexan> william: I sent you a patch for sage-sage, -version etc, did it arrive? [12:26] <mabshoff> lightly tested, still need to work on adding the --without-pymalloc option to the python spkg-install [12:27] <william> ncalexan -- hold on. [12:30] <william> mabshoff. [12:30] <mabshoff> Yes [12:30] <william> I applied your patch to hg_scripts and pushed it out. [12:30] <ncalexan> Great! [12:31] <mabshoff> Okay. [12:31] <william> i made some changes and had to apply it manually. [12:31] <mabshoff> really? [12:31] <william> see http://www.sagemath.org/hg/scripts-main [12:31] <mabshoff> I thought I used the current packages. [12:31] <william> I moved the valgrind help message to the advanced section of the help, is all. [12:32] <mabshoff> ok [12:32] <william> ncalexan -- where is your patch. [12:32] --> dmharvey_ has joined this channel (n=david@c-24-61-47-91.hsd1.ma.comcast.net). [12:32] <ncalexan> My email must be broken, something is weird here. [12:32] <mabshoff> I just created ticket #443: libSingular: Source and destination overlap in strcpy and assigned it to malb :-) [12:33] <william> :-) [12:33] <william> i hope he shows up later... [12:33] <mabshoff> That should teach him not to show up in a bug fix session. [12:33] <william> ncalexan: can you just post a link here or post something to trac? [12:34] <mabshoff> The last time I didn't show up for a CoCoA meeting I got truly horrible tasks assigned. [12:35] <william> nick -- got it. [12:37] <ncalexan> william: yes, try http://www.sagemath.org:9002/sage_trac/ticket/433 [12:38] <william> nick -- got the patch, applied it, slightly changed it, and pushed it out. [12:38] <william> do hg_scripts.pull() [12:39] <william> I *can't* believe sage didn't have "sage -v" or "sage -root" until now. Stupid. [12:39] <william> thanks! [12:40] <ncalexan> n/p. [12:40] <robertwb> ok, update on the Py_ssize_t indexing stuff [12:40] <robert457965> william - all numpy does to compute roots is compute eigenvalues of the companion matrix! [12:41] <william> robert457965 -- yep. [12:41] <robert457965> it makes a bad choice of casting at some point [12:41] <robertwb> if you do "cdef Py_ssize_t k = o" it will call o.__index__ [12:41] <william> wow! [12:41] <robert457965> actually, if you look at ticket 442, this is where [12:42] <robertwb> but if Py_ssize_t is in the method signature, it calls __int__ deep in the python library due to PyArg_ParseTupleAndKeywords [12:42] <robertwb> any thoughts? [12:42] <william> it's an acceptable compromise for now. [12:42] <william> but you should write up a trac entry about this and/or something for the cython page. [12:43] <robertwb> ok [12:43] <mhansen> william: I just sent a bundle fixing #342. [12:44] <robertwb> it should be fairly easy to throw an error when parsing the tuple, but messing with the keywords it a bit worse [12:45] <william> ok, i'm looking at #342 now. [12:45] <dmharvey_> robertwb: I'm confused... I didn't think you could use type signatures like Py_size_t for keyword arguments [12:46] <dmharvey_> robertwb: sorry, no you're right, one can do that [12:47] <dmharvey_> robertwb: no, I'm still confused. Can you give me an example. [12:48] <robertwb> dmharvey_: ok, for the row example [12:48] <-- dmharvey has left this server (Read error: 110 (Connection timed out)). [12:48] <robertwb> dmharvey_: def row(self, Py_ssize_t k) [12:48] <william> mhansen: #342 -- great work. [12:48] <robertwb> dmharvey_: suppose I call M.row(3.5) [12:48] <william> i'm changing s_imag == None to "s_imag is None", which is slightly faster. [12:48] <robertwb> dmharvey_: that would be an error, but M.row(k=3.5) would not... [12:49] <dmharvey_> oh [12:49] <robertwb> would this be a good thing? [12:49] <mhansen> william: #342 -- sounds good. [12:49] <william> mhansen #342 -- there's something screwey with base. [12:49] <dmharvey_> no of course not; the behaviour at the user's end should be identical [12:49] <william> you harcoded something for debugging and never put it in the inputs correctly. [12:51] <william> mhansen -- only base 10 is supported, I think. [12:51] <mhansen> william: That's what I thought since I didn't see base referenced anywhere in the ComplexField code. [12:51] <william> yep. [12:51] <mhansen> It could easily be added though. [12:51] <william> hold on. [12:51] <william> how? [12:52] <robertwb> dmharvey_: of course, this would only be when int(x) != index(x) [12:52] <william> mhansen -- ok, via mpfr. [12:52] <dmharvey_> robertwb: well, this can happen, but it's a pretty borderline case [12:53] <mhansen> william: Is that something that should be added? [12:53] <william> definitely, if you want. [12:53] <william> by the way I just made some minor changes. Do hg_sage.pull() to get them. [12:53] <william> Also, it would be good to add some doctests that illustrate what pad and min_prec do. [12:53] <william> There aren't any now. [12:53] <william> Could you do that and post another patch? [12:54] <william> You can close #342 as fixed though :-). [12:54] <dmharvey_> robertwb: so can the keyword thing be fixed? Like, is it a Cython issue or a Python issue? I don't totally understand the control flow when th keyword argument is passed like that. [12:55] <mhansen> william: Sure thing. [12:55] <robertwb> dmharvey_: Cython calls PyArg_ParseTupleAndKeywords... I actually think the keyword thing might have a hope of being fixed after all (looking into it now) [12:55] <william> I'm going to work on #275 now -- i need something easy, since #274 is *really* nasty. [12:56] <mabshoff> Can I invoke the analog of sage -testall from a running sage session. [12:56] <mabshoff> The problem is that -testall and -valgrind don't mix. [12:56] <william> sage -testall does a lot of stuff. At the end of the day for each file it creaes [12:56] <william> ... [12:57] <william> see "sage -t -gdb filename.py" for what will probably get you what you want. [12:57] <mabshoff> Okay. I will have a look. [12:57] <william> i.e., sage -t filename.py creates .doctest_filename.py, and then does "python .doctest_filename.py". [12:57] <william> YOu can run valgrind on that python. [12:57] <mabshoff> i looked into sage-testall. [12:58] <mabshoff> And I switched "sage -t "$@" *" to "sage "$@" -t *" [12:58] <mabshoff> But it doesn't work is $@=="-valgrind" :( [12:59] <william> look in sage-doctest! [13:00] <mabshoff> Okay. [13:00] <william> (not meant as a shout if it sounded that way, btw) [13:00] <dmharvey_> ok, I've got a reasonable solution for #440, I'll post the patch as soon as the doctests finish. Meanwhile has anyone got suggestions of what to look at next, or should I just pick something.....? [13:01] <mabshoff> Well, I can always leave if I feel bullied :) [13:01] <william> there is a massive memory leak in polynomial creation over the pari finite field. [13:01] <william> #274. [13:01] <mabshoff> I can see if I get some data on that. [13:01] <dmharvey_> ok i'll have a look [13:02] <william> I just posted another good example to http://www.sagemath.org:9002/sage_trac/ticket/274 [13:02] <william> I shamefully suspect [13:02] <william> maybe something really dumb in gen.pyx. [13:02] <william> I really really really hope to resolve #274 today, since this is a hugely embarassing bug, whatever it is. [13:04] <mabshoff> Okay, valgrind is running with that example. [13:04] <mabshoff> It will probably take a while. [13:04] <william> excellent. [13:05] <william> you can change the 10000 to 1000 [13:05] <william> it leaks 20-30mb with 10000 on my machine. :-( [13:05] <mabshoff> Then I will just run start & quit under valgrind and diff the two logs. [13:05] <mabshoff> Maybe something interesting will stand out. [13:05] <mabshoff> I am running it on a webserver, so let's hope I don't OOM anything. [13:09] <-- ncalexan has left this server (Read error: 110 (Connection timed out)). [13:17] <dmharvey_> #440: posted patch for this, and some profiling data. [13:17] <william> ok. i'll look in a minute. [13:19] <robert457965> #442 -- precision is an issue for the eigen functions too [13:19] <robert457965> sage: g = Matrix(RDF, [[0, -9],[1,6]]); g [13:19] <william> looks like we have to try gsl then :-( [13:19] <robert457965> [ 0.0 -9.0] [13:19] <robert457965> [ 1.0 6.0] [13:19] <robert457965> sage: g.eigen_left() [13:19] <robert457965> ([3.00000003183, 2.99999996817]... [13:19] <robert457965> where 0.0 == zero.zero [13:20] <william> maybe the gsl real root finder is significantly better. [13:21] <william> to use that, we'd add it maybe as a method for for ector over rdf (an underscored method) [13:22] <william> ok, trac #275 is fixed (just a matter of doing a little better exception handling) [13:23] <mabshoff> re #274: [13:23] <mabshoff> A "plain" sage session: [13:23] <mabshoff> ==2609== LEAK SUMMARY: [13:23] <mabshoff> ==2609== definitely lost: 2,500 bytes in 1 blocks. [13:23] <mabshoff> ==2609== possibly lost: 276,902 bytes in 769 blocks. [13:23] <mabshoff> ==2609== still reachable: 130,182,544 bytes in 159,833 blocks. [13:23] <mabshoff> ==2609== suppressed: 0 bytes in 0 blocks. [13:23] <mabshoff> With William's example script: [13:23] <mabshoff> ==2660== LEAK SUMMARY: [13:23] <william> dmharvey -- what's trac-440.hg' a patch against? i get unknown parent. [13:23] <mabshoff> ==2660== definitely lost: 2,767 bytes in 16 blocks. [13:23] <mabshoff> ==2660== possibly lost: 337,014 bytes in 893 blocks. [13:23] <mabshoff> ==2660== still reachable: 156,394,179 bytes in 203,126 blocks. [13:23] <mabshoff> ==2660== suppressed: 0 bytes in 0 blocks. [13:23] <william> cna you send a text version? [13:24] <mabshoff> The logs are roughly 5.5MB and 5.7MB respectively. [13:24] <william> dmharvey_ -- #440 -- i can't apply your patch. [13:24] <dmharvey_> oh [13:25] <william> wait -- it's because I got it out of track. [13:25] <william> maybe. [13:25] <william> binary patches and track don't mix well. [13:25] <dmharvey_> it's probably on top of the previous patch, sorry [13:25] <william> that possible too. [13:25] <dmharvey_> sorry I'll stick to text patches [13:26] <dmharvey_> (I was concerned that my log message wasn't coming through on the text patch, but I might be wrong about that) [13:26] <william> if you do hg_sage.send('...') its cumulative. [13:26] <william> or you could email it to me. [13:26] <william> that can happen with text patches. [13:26] <dmharvey_> ok hang on [13:26] <william> Do hg_sage.send('...') and email the bundle to me. [13:26] <dmharvey_> ummm I've already switched branches and am in the middle of debugging something else, i'll send it by text [13:27] <william> sure. [13:28] <mabshoff> There are some intersting issues with pari for exmape: [13:28] <mabshoff> For example we do not allocate 0.5 mb when instanciating libpari: [13:29] <mabshoff> ==2609== 524,288 bytes in 1 blocks are still reachable in loss record 6,975 of 6,989 [13:29] <mabshoff> ==2609== at 0x4A05809: malloc (vg_replace_malloc.c:149) [13:29] <mabshoff> ==2609== by 0xF990B2A: gpmalloc (in /tmp/Work2/sage-2.8.1/sage-2.8.1/local/lib/libpari-gmp.so.2) [13:29] <mabshoff> ==2609== by 0xF991BCE: pari_init_opts (in /tmp/Work2/sage-2.8.1/sage-2.8.1/local/lib/libpari-gmp.so.2) [13:29] <mabshoff> ==2609== by 0xFF07371: __pyx_f_3gen_12PariInstance___init__ (gen.c:20988) [13:29] <mabshoff> ==2609== by 0x459FB1: type_call (typeobject.c:436) [13:29] <mabshoff> ==2609== by 0x4156B2: PyObject_Call (abstract.c:1860) [13:29] <mabshoff> ==2609== by 0x47D801: PyEval_CallObjectWithKeywords (ceval.c:3433) [13:29] <mabshoff> ==2609== by 0xFF096E8: initgen (gen.c:27669) [13:29] <mabshoff> ==2609== by 0x49F3F2: _PyImport_LoadDynamicModule (importdl.c:53) [13:29] <mabshoff> ==2609== by 0x49D2CE: import_submodule (import.c:2394) [13:29] <mabshoff> ==2609== by 0x49D7A1: load_next (import.c:2214) [13:29] <mabshoff> ==2609== by 0x49D9FE: import_module_level (import.c:2002) [13:30] <mabshoff> Mhh, we actually do that one *twice* [13:30] <dmharvey_> ok, the text patch is at /home/dmharvey/patches/trac-440.patch; the log message should be approximately "add new mpz_get_pyintlong() function which returns either python int (fast!) or python long if it doesn't fit; change some Integer methods to use this new function" [13:31] <william> how are you making patches by the way? [13:31] <william> hg_sage.export(...) makes them and they contain the comments, etc. [13:32] <robert457965> #442 -- i'm closing this ticket, since it is part of #211. [13:32] <robert457965> The example on GSL's page is much more accurate than numpy's output. [13:33] <william> ok. [13:33] <william> #440 -- david I'm applying your patch now. [13:33] <dmharvey_> usually I make them from the command line, using "hg bundle" or "hg export" or sometimes just "hg diff" to a file [13:34] <dmharvey_> I don't usually use hg_sage.export() since I'm not usually in a sage session [13:34] <william> hg_sage.export is the same as "hg export". [13:34] <william> it is better than "hg diff", since it includes the comments. [13:34] <dmharvey_> ok [13:34] <mabshoff> Ok, here is an allocation for 100MB for the stack of a pari instance: [13:34] <mabshoff> ==2660== 100,000,000 bytes in 1 blocks are still reachable in loss record 7,200 of 7,200 [13:34] <mabshoff> ==2660== at 0x4A05809: malloc (vg_replace_malloc.c:149) [13:34] <mabshoff> ==2660== by 0xFEE00BA: __pyx_f_3gen_init_stack (gen.c:25497) [13:34] <mabshoff> ==2660== by 0xFF0744D: __pyx_f_3gen_12PariInstance___init__ (gen.c:21006) [13:34] <mabshoff> ==2660== by 0x459FB1: type_call (typeobject.c:436) [13:34] <mabshoff> ==2660== by 0x4156B2: PyObject_Call (abstract.c:1860) [13:35] <mabshoff> ==2660== by 0x47D801: PyEval_CallObjectWithKeywords (ceval.c:3433) [13:35] <william> #440 is closed -- and i've applied and pushed your patch out david. [13:35] <mabshoff> ==2660== by 0xFF096E8: initgen (gen.c:27669) [13:35] <mabshoff> ==2660== by 0x49F3F2: _PyImport_LoadDynamicModule (importdl.c:53) [13:35] <mabshoff> ==2660== by 0x49D2CE: import_submodule (import.c:2394) [13:35] <mabshoff> ==2660== by 0x49D7A1: load_next (import.c:2214) [13:35] <mabshoff> ==2660== by 0x49D9FE: import_module_level (import.c:2002) [13:35] <mabshoff> ==2660== by 0x49DE34: PyImport_ImportModuleLevel (import.c:2066) [13:35] <mabshoff> Does __pyx_f_3gen_init_stack have a matching deallocation? [13:35] <william> mabshoff -- yes, on initialization we allocate 100MB for the stack. [13:35] <mabshoff> Could we dealloc that upon exiting sage? [13:35] <william> It doesn't. [13:36] <william> I'll put in code to do that now. [13:36] <william> It goes in sage/sage/libs/pari/gen.pyx, probably right below the first __init__ in that file. [13:36] <mabshoff> This is just like valgrinding LinBox: In the beginning the was so much noise I couldn't find the bugs I was hunting. [13:36] --> agc has joined this channel (n=agc@0-90-4b-99-db-6a.dynamic.ucsd.edu). [13:36] <william> hi agc! [13:36] <william> where are you at? [13:36] <mabshoff> So this might be a somewhat longer process, but in the end it should pay off. [13:36] <robert457965> i'm working on #206 now [13:37] <agc> hi, im at the ucsd library [13:37] <william> there's an irc log for today here: http://www.sagemath.org:9001/bug1/irc [13:37] <william> how was the surfing this morning :-) [13:37] <william> i almost went to the beach [13:37] <agc> actually i seen most of it because dorian logged on earlier ... [13:38] <william> ok, good. [13:38] <william> you might like this bug: http://www.sagemath.org:9002/sage_trac/ticket/206 [13:38] <william> it's in your code, I think. [13:38] <mabshoff> Ooh, the log is life, pretty cool. [13:38] <william> David harvey reported it. [13:39] <william> I just updated the log by hand. [13:39] <mabshoff> Okay, would have been cool, though. [13:39] <william> indeed. [13:39] <mabshoff> Re the leak with the 10.000 repeats: [13:39] <mabshoff> ==2660== 23,450,392 bytes in 20,008 blocks are still reachable in loss record 7,199 of 7,200 [13:39] <mabshoff> ==2660== at 0x4A05809: malloc (vg_replace_malloc.c:149) [13:39] <mabshoff> ==2660== by 0xFF04187: __pyx_f_3gen__new_gen (gen.c:25711) [13:39] <mabshoff> ==2660== by 0xFF043FD: __pyx_f_3gen_12PariInstance_new_gen (gen.c:21826) [13:40] <mabshoff> ==2660== by 0xFEFD4D2: __pyx_f_3gen_3gen__mul_c_impl (gen.c:1527) [13:40] <mabshoff> ==2660== by 0xE1DEFAD: __pyx_f_7element_11RingElement__mul_c (element.c:8801) [13:40] <mabshoff> ==2660== by 0xE1CF814: __pyx_f_7element_11RingElement___mul__ (element.c:8383) [13:40] <mabshoff> ==2660== by 0x41597C: binary_op1 (abstract.c:398) [13:40] <mabshoff> ==2660== by 0x419107: PyNumber_Multiply (abstract.c:669) [13:40] <mabshoff> ==2660== by 0x481113: PyEval_EvalFrameEx (ceval.c:1072) [13:40] <mabshoff> ==2660== by 0x48627F: PyEval_EvalCodeEx (ceval.c:2831) [13:40] <mabshoff> ==2660== by 0x4CFAA7: function_call (funcobject.c:517) [13:40] <mabshoff> ==2660== by 0x4156B2: PyObject_Call (abstract.c:1860) [13:40] <mabshoff> looks interesting. [13:41] <william> yep. [13:41] <mabshoff> Valgrind rocks. Don't leave home without it :) [13:42] <dmharvey_> #274: just noting that if A = K(1), then you can get the leak by just repeating R(A), not necessary to do R([1]), so it's probably not in the field coercion code itself, it really has something to do with the polynomials [13:42] <robert457965> #206 - closed. patch at http://sage.math.washington.edu/home/rlmill/xmin.patch [13:42] <william> yep. [13:43] --> dmharvey has joined this channel (n=david@c-24-61-47-91.hsd1.ma.comcast.net). [13:46] <william> agc -- never mind about 206 -- it just got fixed. [13:47] <agc> oh, i was messing with it ... what exactly changed? [13:47] <william> it's the patch tahar robert just posted 5 minutes ago above. [13:48] <william> HOWEVER -- robert457965 didn't post any doctests that illustrate the bugfix. [13:48] <william> do hg_sage.pull() to get all the fixes so far, including Robert's. [13:49] <robert457965> my original thinking was that the plot will show either way, but now i realize you can still get xmin etc. [13:50] <agc> my 2.8.1 build just finish any second now ... ill pull then [13:51] <agc> where 'second' <= oo [13:54] [CTCP] Received Version request from freenode-connect. [13:54] [Notice] -NickServ- This nickname is owned by someone else [13:54] [Notice] -NickServ- If this is your nickname, type /msg NickServ IDENTIFY <password> [13:54] --> You have joined the channel #sage-devel (n=was@206.135.48.98). [13:54] [Error] sage-dev: No such channel. [13:54] <william> robertwb -- with your cython patch is trac #190 now fixed. [13:54] <robert457965> yeah, those are all my fault [13:54] *** Channel modes: secret, no messages from outside [13:54] *** This channel was created on 08/17/2007 01:03:33 PM. [13:54] <robertwb> yep [13:55] <william> excellent. i'll close it. [13:56] <william> status report time! [13:56] <william> everybody write a sentence about what they're doing right now. i'll paste it into the wiki. [13:56] <-- d has left this server (Read error: 110 (Connection timed out)). [13:56] <william> william -- scanning the bug list looking for something to do before I face #274 again. [13:56] <mabshoff> Looking at #201 [13:56] --> d has joined this channel (n=dorian@0-19-7e-b-85-6c.dynamic.ucsd.edu). [13:56] <robert457965> agc - GraphicPrimitives don't have xmin xmax ymin ymax? [13:56] <mhansen> william: I'm looking at 337, but it seems to be fixed already. [13:57] <william> william -- ok, i'll look at #201 with mabshoff. [13:57] <robert457965> still working on 206 [13:58] <william> mhansen -- I'll close that one. [13:58] <mabshoff> I hope that valgrind will turn something up on valgrind. [13:58] <mabshoff> I also found another alloc/dealloc problem relevant to #274 [13:59] <dmharvey> i'm currently trying to understand the code flow for #274 [13:59] <agc> yeah ... the xmax, ymin, ... only are for the axes [13:59] <mabshoff> I could upload the logs to sage.math/mabshoff if you want to have a look curself. [13:59] <william> sure. [13:59] <-- dmharvey_ has left this server (Read error: 110 (Connection timed out)). [13:59] <robert457965> agc - now i see the subtlety [14:00] <robertwb> fixing the Py_ssize_t issue for keywords in cython [14:00] <robert457965> append doesn't add a graphics object to another, it adds a primitive to the graphics object's list [14:00] * pauloliviersage still working on #439 [14:00] <mabshoff> ==2660== 1,760,704 bytes in 20,008 blocks are still reachable in loss record 7,196 of 7,200 [14:00] <mabshoff> ==2660== at 0x4A05809: malloc (vg_replace_malloc.c:149) [14:00] <mabshoff> ==2660== by 0x4B1489: _PyObject_GC_Malloc (gcmodule.c:1321) [14:01] <mabshoff> ==2660== by 0x455D09: PyType_GenericAlloc (typeobject.c:454) [14:01] <mabshoff> ==2660== by 0xE1BF810: __pyx_tp_new_7element_Element (element.c:17242) [14:01] <mabshoff> ==2660== by 0xE1BF940: __pyx_tp_new_7element_ModuleElement (element.c:17417) [14:01] <mabshoff> ==2660== by 0xE1BF9C0: __pyx_tp_new_7element_RingElement (element.c:17570) [14:01] <mabshoff> ==2660== by 0xFEDAC50: __pyx_tp_new_3gen_gen (gen.c:26726) [14:01] <mabshoff> ==2660== by 0xFF041E9: __pyx_f_3gen__new_gen (gen.c:25823) [14:01] <mabshoff> ==2660== by 0xFF043FD: __pyx_f_3gen_12PariInstance_new_gen (gen.c:21826) [14:01] <mabshoff> ==2660== by 0xFEFD4D2: __pyx_f_3gen_3gen__mul_c_impl (gen.c:1527) [14:01] <mabshoff> ==2660== by 0xE1DEFAD: __pyx_f_7element_11RingElement__mul_c (element.c:8801) [14:01] <mabshoff> ==2660== by 0xE1CF814: __pyx_f_7element_11RingElement___mul__ (element.c:8383) [14:01] <mabshoff> is the other interesting one. [14:02] <robert457965> william - can you roll back changeset 5784? [14:03] <mhansen> william: 316 works for me as well. [14:03] <mabshoff> http://sage.math.washington.edu/home/mabshoff/sage.2609 is the valgrind log of sage just starting and quitting [14:03] <mabshoff> (5.5MB!) [14:04] <mabshoff> http://sage.math.washington.edu/home/mabshoff/sage.2660 is the valgrind log with the last example from #274 (5.6MB!) [14:05] <william> robert457965 -- rollback complete. [14:05] <robert457965> sorry bout that [14:07] <agc> robert457965, so is #206 actually a bug? what do you think [14:07] <robert457965> agc - there's definitely something to do [14:07] <robert457965> i see three ways to go [14:07] <mabshoff> william - how do I enter the curve fom #201 directly into mwrank? [14:07] <robert457965> the original intent was for the user never to see primitives, right? [14:08] <robert457965> so theoretically every primitive should have a Graphics object for a wrapper, and those keep track of the xmin xmax ymin ymax sutff [14:08] <dmharvey> #274: aah. If I create a poly by a = K(1) or a = K.gen() and then repeatedly R([a], check=False), I don't get any leaks [14:08] <mabshoff> :) [14:09] <agc> yeah ... that sound right [14:09] <william> mabshoff: echo "[0,0,0,3,-15675]" | mwrank [14:09] <robert457965> the actual bug is the fact that you can create two primitives by hand, append them to a graphics object, plot, and see nothing [14:09] <mabshoff> ok [14:09] <william> dmharvey -- very very interesting! [14:09] <mabshoff> I am clueless about algebraic geometry. [14:10] <william> i spent a year doing almost nothing but exercises in algebraic geometry... (at Berkeley) [14:10] <robert457965> option 1 - be adamant about using factories, and do nothing ( i don't think this is a good idea ) [14:10] <william> but i still often feel clueless about it. [14:10] <robert457965> option 2 - give every primitive an xmax etc function to be called by append [14:10] <mabshoff> Found a bug in mwrank: [14:10] <mhansen> william: #316 works for me. [14:10] <mabshoff> Mismatched free() / delete / delete [] [14:11] <robert457965> option 3 - in append, somehow produce the graphics object instead of the primitive, then simply add them [14:11] <robert457965> what do you think? [14:11] <william> mhansen -- cool I'll try it. i'm glad it's fixed! [14:11] <william> mabshoff -- awesome. report it to john cremona (and put it in trac -- he uses our trac now and has an account) [14:12] <william> mhansen -- yep that can be closed. I'll add a doctest though. [14:13] <agc> ok ... im looking at the source ... trying to figure out whats best [14:13] <william> wait -- actually that is a doctest already. so #316 is done. [14:13] <robert457965> i'm in favor of option 2 [14:13] <mabshoff> I can probably make a patch and try to fix the problem. [14:14] <william> even better. [14:14] <mabshoff> It is pretty primitive - I have seen plenty of those before. [14:16] <-- d has left this server (Read error: 104 (Connection reset by peer)). [14:16] --> d has joined this channel (n=dorian@0-19-7e-b-85-6c.dynamic.ucsd.edu). [14:20] <mhansen> william: 291 looks like it has been fixed [14:22] <william> mhansen -- it's not really fixed. [14:23] <william> The thing that caused that problem was generic. [14:23] <william> polys over QQ use libsingular now, so have custom printing, which doesn't have that problem. [14:23] <william> The GENERIC code still has the problem -- I give an example in the trac now. [14:23] <william> That said, the output isn't wrong, just not as pretty, so I changed it from bug to enhancement request. [14:23] <william> ok? [14:24] <william> hi. Please everybody look at http://www.sagemath.org:9002/sage_trac/roadmap [14:24] <william> I went through and linked every trac issue to this milestone. [14:24] <william> The top green bar gives our "current score". [14:24] <mhansen> william: sounds good [14:24] <william> You can also click on the little numbers below it to see the open and closed issues. [14:25] <william> e.g., this is what's left: [14:25] <william> http://www.sagemath.org:9002/sage_trac/query?status=new&status=assigned&status=reopened&milestone=sage-2.8.2 [14:25] --> yi has joined this channel (n=yi@pool-71-112-16-218.sttlwa.dsl-w.verizon.net). [14:25] <robert457965> yi - wassup!? [14:25] <yi> hey [14:25] <william> hey yi! [14:26] <yi> afternoon guys [14:26] <mabshoff> hello [14:26] <yi> robert457965: want to work on that dsage thing you were telling me about? [14:26] <william> yi -- there is an irc log here http://www.sagemath.org:9001/bug1/irc [14:26] <robert457965> definitely [14:26] <robert457965> i was hoping you would be on today [14:27] <yi> robert457965: what's the trac ticket again? [14:27] <robert457965> 431 [14:27] <robert457965> there's not much info there yet [14:28] <robert457965> agc - i think the best thing to do is implement an xmin(), xmax(), etc. function for each primitive, so that Graphic.append() can call that function no matter what [14:28] <robert457965> i'm going to start working on this dsage bug [14:28] <robert457965> yi- so when it was hanging before, i had the server and client on sage.math, and the workers on Tom's computer [14:29] <dmharvey> #274: If I remove the call to __normalize() in Polynomial_generic_dense.__init__(), then the memory leak goes away. [14:29] <dmharvey> #274: must be getting very close now. [14:29] <yi> robert457965: ok cool, can we get the same set up? [14:29] <william> ok, i'm getting back to #274 then. that is getting exciting. [14:30] <dmharvey> :-) [14:30] <william> hg_sage.pull() gets you up to date with us, I think. [14:30] <robert457965> everything is still up to date [14:30] <dmharvey> is Py_ssize_t a signed type? [14:30] <robert457965> that is, i left things where they were on each computer when it stopped [14:30] <william> yes. [14:31] <dmharvey> well that doesn't help does it!!! :-) [14:31] <william> ? [14:31] <william> oh shit. [14:31] <william> (excuse language) [14:31] <yi> it's ok, it's IRC :) [14:31] <mabshoff> damn you [14:32] <yi> robert457965: i msg'ed you, we can talk there, less noise [14:32] <mabshoff> Yes, people seem to be capable of spelling words correctly and nobody speaks l33t [14:32] <yi> robert457965: if you're using irssi just do /query yi and it should open a new window [14:33] <william> dmharvey: confirmed that the memory leak goes away -- so its in __normalize. [14:33] <mhansen> william: 393 is simply due to the rational 1/2 not being preparsed [14:34] <william> you're right -- that's just lack of understanding the unfortunate subtleties of sage vs python. [14:34] <william> could you make a remark and close the bug. [14:35] <mhansen> Will do. [14:35] <william> (*and* email jon hanke.) [14:36] <robert457965> yi - i'm waiting there [14:37] <yi> i messaged you, are you getting the messages? [14:38] <robert457965> i'm getting everything [14:38] <robert457965> here, other room, gmail chat [14:38] <robert457965> pick a venue [14:39] <william> ?? [14:39] <dmharvey> #274: I think it's in is_zero() [14:39] <william> #274: that's what I think too [14:41] <agc> robert457965, i starting to think that all we want append to to what __add__ does? thoughts [14:41] <robert457965> the problem with that is that a graphics primitive doesn't have __xmin [14:42] <robert457965> that's ultimately what we want, but we need the primitive to be able to report its xmin etc [14:42] <william> #274 -- dmharvey: [14:42] <william> n = pari('x') [14:42] <william> s = get_memory_usage() [14:42] <william> for i in range(10^5): [14:42] <william> _ = n.is_zero() [14:42] <william> print get_memory_usage() - s [14:42] <william> 4.55859375 [14:42] <dmharvey> :-) [14:42] <william> but with n = pari(1) that doesn't happen. [14:43] <agc> i guess that is the thing, you never 'show' or 'save' a primitive, so the __xmin, etc shouldn't come into to play? [14:43] <dmharvey> well the implementation of is_zero for the finite field element seems to be "return not x" [14:43] <agc> i could be off my rocker though [14:43] <dmharvey> which is calling __nonzero__() [14:43] <william> [14:43] <dmharvey> and that seems to leak too [14:43] <william> let's focus on pari -- that's the core of the problem. [14:43] <william> there's an stoi in there that looks dangerous. [14:44] <william> line 897 of sage/libs/pari/gen.pyx [14:44] <mabshoff> Re mwrank with [0,0,0,3,-15675]: [14:44] <mabshoff> found points of rank 2 [14:44] <mabshoff> and regulator 16.9955132982626 [14:44] <mabshoff> Processing points found during 2-descent...done: [14:44] <mabshoff> now regulator = 16.9955132982626 [14:44] <mabshoff> Saturating (bound = 100)...RR: division by zero [14:44] <william> yep bool(n) leaks memory for n in pari. [14:45] <william> mabshoff -- did you see that cremona attached two files that are supposed to fix the error in that example? [14:45] <william> it's near the bottom. [14:45] <mabshoff> So I get little further, but there are issues qsieve::search() [14:45] <mabshoff> Nope, not yet. [14:45] <mabshoff> I will have a look. [14:45] <william> ut oh. [14:45] <william> let me forward you an email from him. [14:45] <dmharvey> #274: what is stoi()? [14:46] <william> time for mabshoff to laugh at us (=me). [14:46] <mhansen> dmharvey: usually string to integer [14:46] <william> mabshoff -- i just emailed cremona's email to you -- it has a fix I think for that mwrank bug, maybe. [14:46] <william> yep. [14:46] <mabshoff> Ok, there is a new options.h and a realroot.cc [14:47] <mabshoff> I will check, there was a problem in vec.cc [14:47] <dmharvey> #274: well this expression "bool(self.g != stoi(0))" makes absolutely no sense to me [14:47] <william> yep. [14:47] <dmharvey> it makes a negative amount of sense [14:47] <dmharvey> an imaginary amount [14:47] <mabshoff> Ok, but the code still needs the fixes for the leaks in vec.cc. [14:47] <william> i can't imagine what idiot could have written that (me) [14:47] <dmharvey> :-) [14:47] --> pdenapo has joined this channel (n=pdenapo@201.255.43.149). [14:48] <dmharvey> well, I guess that's where the bug is, but I don't know how to fix it, since I don't know much about PARI programming [14:48] <william> self.g is a PARI Gen object. [14:49] <william> stoi(0) is god only knows. [14:49] <dmharvey> and C doesn't have any operator overloading, so I don't see how comparing self.g to anything makes sense [14:49] <william> we should probably look in the pari source code or something. [14:49] <william> or the library reference manual. [14:49] <dmharvey> I actually better get going, but if you like I can note down these findings on the trac page? [14:49] <william> or just have bool compare to 0. [14:49] <william> which makes sense, right? [14:50] <william> pari has gcmp [14:50] <dmharvey> yeah it has to be a function call somehow [14:50] <dmharvey> this should also be made very fast [14:50] <dmharvey> if possible [14:51] <william> the function names are in decl.pxi [14:52] <william> gcmp0 looks good [14:53] <agc> robert457965, actually maybe append shouldn't exist, what is the benefit why the __add__ method does everthing you would want when combining graphics ... the primitives are lower level and probably should be private [14:53] <dmharvey> william: I bet you were trying to compare the string representation of the PARI object to "0", and it must have been very very late at night [14:54] <dmharvey> #274: I've noted down progress on the #274 trac page [14:54] <dmharvey> but I really should call it a day [14:54] <william> weirdness. using gcmp0 still leaks. [14:54] <william> ok -- thanks for all your help dmharvey. cu [14:54] <agc> yi and robert457965 are you guys off talking about twisted somewhere??? i want in ;) [14:54] <dmharvey> ok bye [14:54] <-- dmharvey has left this channel. [14:55] <-- d has left this server (Read error: 104 (Connection reset by peer)). [14:55] --> d has joined this channel (n=dorian@0-19-7e-b-85-6c.dynamic.ucsd.edu). [14:56] <yi> agc: hey man [14:56] <agc> yi: yo [14:56] <robert457965> agc - you'll have to rewrite each of the Factory functions [14:57] <yi> agc: we're not doing anything twisted related right now, just dsage debugging [14:57] <mabshoff> Ok, mwrank no longer crashes with the example from #201 [14:57] <agc> ok, im a twisted nerd ... its the bestest [14:58] <mabshoff> That is with the fixes in trac, plus a patch by me that fixes some delete vs. delete[] issues. [14:58] <mabshoff> There is still work to be done: [14:58] <mabshoff> ==7030== LEAK SUMMARY: [14:58] <mabshoff> ==7030== definitely lost: 4,536 bytes in 162 blocks. [14:58] <mabshoff> ==7030== possibly lost: 192 bytes in 3 blocks. [14:58] <mabshoff> ==7030== still reachable: 119,257 bytes in 195 blocks. [14:58] <mabshoff> ==7030== suppressed: 0 bytes in 0 blocks. [14:58] <mabshoff> ==7030== Use --leak-check=full to see details of leaked memory. [15:01] <william> hi -- #274 -- regarding my stupid stoi thing in __bool__; it wasn't [15:01] <william> the problem, since Python doesn't even have a __bool__ -- that code [15:01] <william> never got run. [15:01] <william> Python has __nonzero__ instead. [15:01] <mabshoff> :( [15:01] <mhansen> william: I sent a bundle for #392. [15:05] <william> mhansen -- got it. [15:08] <mabshoff> william - I am making an updated mwrank.spkg so that we can close 201. [15:08] <william> nice. thanks!! [15:09] <william> mhansen -- looking at your patch [15:09] <mhansen> william: the only thing I was iffy about was the ndigits thing. [15:10] <agc> i just realized the root of the problem, each Graphics type changes the axes in different ways ... so to keep plots looking nice we ajust the axes on a case by case basis [15:14] <william> mhansen - what if the object has a round method that could take ndigits? [15:14] <mhansen> william: I didn't see any objects with methods like that. [15:14] <william> no but your new code won't even call it. [15:15] <william> by the way, if a is a real_mpfr element then a.round says it rounds "to the nearest real". [15:15] <robert457965> agc - what should be done as a solution? [15:15] <robert457965> i'm wondering why david h was appending graphic primitives in the first place [15:15] <william> mhansen -- then there are four examples that have nothing to do with the round method! [15:17] <agc> the __add__ method does everything one would want ... maybe lets just remove the append method ... [15:18] <william> mhansen -- ok, overall i'm ok with the new round. [15:18] <william> i'm going to fix the docs in the round mpfr method though. [15:18] <mhansen> Sounds good. [15:19] <william> actually, could you fix the example in real_mpfry.py? [15:20] <william> in each, give an actual rounding example calling round. [15:20] <robert457965> agc - since it only does one thing anyway... [15:20] <william> mhansen -- do hg_sage.pull() first. [15:20] <mabshoff> I build a new mwrank.spkg - see http://sage.math.washington.edu/home/mabshoff/mwrank-20070818.spkg [15:20] <mabshoff> This fixes #201 for me. [15:20] <mhansen> william: sure [15:20] <william> thanks! I want to integrate some more patches and get back to that memory leak. [15:21] <william> mabshoff -- i'm trying it now. [15:21] <mabshoff> I did put in John's fixes plus the deleted patch I wrote. [15:21] <mabshoff> I put my patch in trac, too, and I will write an Email to John. [15:21] <william> make sure you send him the deleted patch you wrote. he'll greatly appreciate it. [15:21] <william> thanks. [15:22] <mabshoff> The following is the changelog: [15:22] <mabshoff> *20070818: [15:22] <mabshoff> * added corrected options.h and realroots.cc by (John Cremona) [15:22] <mabshoff> * corrected delete operators in vec.cc (by Michael Abshoff) [15:23] <william> mhansen -- i made that documentation thing you're doing now http://www.sagemath.org:9002/sage_trac/ticket/447 [15:23] <mabshoff> There might be some timestamp problem as usual, I should really set the correct time on that box. [15:24] <william> from pari-dev just now for a new cvs release: " [15:24] <william> The memory model was preserved so we essentially get the same set of [15:24] <william> bugs as with GP 2.3. [15:24] <william> " [15:26] <william> yep, #201 is closed! [15:26] <mabshoff> boojjay [15:27] <mabshoff> 16 closed, 22 tickets to go. [15:27] <mabshoff> Mmmh. What should I do next. [15:27] <mabshoff> ? [15:28] <william> do the other 22 :-) [15:28] --> alfredo has joined this channel (n=alfredo@ool-43578299.dyn.optonline.net). [15:29] <-- alfredo has left this server (Client Quit). [15:30] <mabshoff> Maybe, I will have a look which one is to my linking and expertise. [15:31] <william> exactly. [15:31] <mabshoff> Next time you talk why Sage is better than the closed competition post some part of the log demonstrating collaboration from people all over the place. [15:32] <william> :-) [15:32] <william> it's really neat. [15:32] <william> by the way, agc -- alex -- do you have dinner plans? [15:32] <mabshoff> Yeah, this is even more fun than just with 2 or 3 people. [15:33] <agc> no [15:33] <agc> any ideas? [15:33] <william> want to meet for dinner in 3 or 4 hours? [15:33] <william> say 7pm -- wired cafe? [15:34] <agc> sure, where is the wired cafe? [15:34] <william> renaissance shopping center. [15:34] <william> near walgreen's, a japanese rest, etc., [15:34] <agc> is that by UTC? [15:35] <william> yes. [15:35] <william> down the hill. [15:35] <william> http://outside.in/places/wired-cafe-le-bistro-san-diego [15:36] <agc> ok, yeah [15:39] <pdenapo> exiexit [15:39] <-- pdenapo has left this server ("Leaving"). [15:39] <agc> so william, robert457965 can we just remove the append method, or make it do exactly what __add__ does for ticket#206? [15:39] <william> I like making it do exactly what __add__ does. [15:40] <robert457965> second option doesn't work, since each primitive has it's own way of doing stuff [15:40] <robert457965> rather, in order to do that, each primitive needs an xmin() function [15:40] <william> mmaybe each primitive should have an xmin function? [15:40] <william> with some sort of default. [15:41] <william> (in the base class). [15:41] <robert457965> -1, 1, -1, 1? [15:41] <william> basically for the primitives defined by a collection of points (which is a lot of them), this [15:41] <william> is easy. [15:41] <william> for others, e.g., a circle, maybe you have to do a little math. [15:41] <robert457965> networkx primitives have _xmin [15:41] <robert457965> arrow primitives have them too for some reason [15:41] <william> but a default of -1 might be ok in the base class. [15:41] <william> for text xmin could be hard.. [15:44] <robert457965> how does the graphics object for a text primitive get xmin and xmax? [15:46] <agc> it take the (x, y) position of the text and then gets added some padding [15:48] <-- d has left this server (Read error: 104 (Connection reset by peer)). [16:04] <mhansen> william: sent a bundle for #447 [16:05] <william> thanks. I'll try it momentaril. [16:05] <mabshoff> I just looked at #160 [16:06] <william> i'm hard at work on #303. [16:06] <william> I know how to fix it now... [16:06] <william> (i mean #304) [16:06] <mabshoff> 303 or 160? [16:06] <mabshoff> sage: n = 15 [16:06] <mabshoff> > sage: time P = partitions_set(range(n),3) [16:06] <william> 160 -- that looks venerable. [16:06] <mabshoff> Well, the problem is that the result seems to be huge. [16:06] <mabshoff> gap uses ~800 mb, [16:06] <william> yep. [16:07] <mabshoff> sage killed itself around 4.5GB because Swap ran out. [16:07] <william> we should add a protocol to the gap interface so we can get the value [16:07] <william> of a variable back out via a file. [16:07] <william> that would be a fix. [16:07] <william> so, e.g., if a = gap('2^10000'), then one should have the option to do: [16:07] <william> b = a.str_via_file() [16:08] <william> it would then do gap.eval('commadn to write a.name() to file') [16:08] <mhansen> I have new set partitions code that doesn't use GAP. [16:08] <william> read the file [16:08] <william> mhansen -- but of course mhansen's new package would kick the but of that ... [16:08] <william> :-) [16:08] <mabshoff> The box I ran the code on has been swapping back in for a while now. [16:08] <william> maybe you shoudl submit that code all as a bugfix for #160. [16:09] <william> :-) [16:10] <mabshoff> But there might be a leak in there somewhere: [16:10] <mabshoff> Virtual memory is 4191m while residential is 878m [16:11] <mabshoff> That is in the Sage part of the computation. [16:12] <william> very interesting. [16:16] <william> mhansen -- nice docs for round! [16:17] <robert457965> is anyone else having problems looking at the active tickets? [16:17] <william> wait -- mhansen -- why do you define R? [16:17] <mabshoff> Hehe, the box came back with a loadd of 30 :) [16:17] <mabshoff> I won't to that on production systems again . [16:18] <william> mhansend -- i deleted a spurious " cdef RealField R = self.parent()" [16:19] <mhansen> Oops -- sorry about that. That was from when I was thinking about it using the parent's rounding mode. [16:21] <-- yi has left this server (Read error: 110 (Connection timed out)). [16:21] <william> ok, i've applied your patch, modified it some and pushed it out. and updated trac. [16:22] <william> robertwb -- are you around? [16:22] <robertwb> yeah [16:22] <william> If so, could you just decide this cython-related issue is not worth our trouble? [16:22] <william> http://www.sagemath.org:9002/sage_trac/ticket/227 [16:23] <william> i want to mark it off the list, but you're the cython man. [16:23] <william> what do you think? [16:24] <william> mabshoff -- are you still looking at #160? [16:25] <william> if so, if you can figure out how to write a variable to a file in gap, I could probably write some [16:25] <william> code to do what I suggested above. [16:25] <robertwb> I think using NULL rather than 0 in the code shouldn't be too hard [16:25] <william> should we do it though? [16:25] <robertwb> but it certainly isn't a "major" bug [16:25] <robertwb> I think so [16:25] <william> i'll change it to an enhancement. [16:25] <robertwb> ok [16:25] <mabshoff> I am just surprised that sage eats a mutliple of the memory gap uses. [16:26] <mabshoff> Probably because of string vs. binary representation of the result. [16:26] <william> the comm between sage and gap is via a pseudo-tty. so there's lots of text, buffers, etc. [16:26] <mabshoff> It is still telling that there is a big difference between vir and res memory. [16:27] <mabshoff> I will ran 2.8.1 on another box with 24 GB and with smaller input n=5 for starters and see what happens. [16:27] <william> i added #160 to the list for today :-) [16:27] <mabshoff> Oh no, more pressure. [16:27] <mabshoff> I just went though the open tickets and looked at everything with segfault. [16:28] <mabshoff> #402 might also be interestig. [16:28] <mabshoff> +n [16:28] <mhansen> Regarding the set partitions code, it depends on a bunch of other combinatorics code. All the new combinatorics stuff uses a new interface based on "combinatorial classes". It's based on MuPAD-combinat's notion of combinatorial classes. It makes it easy to do things like define algebras whose basis elements are indexed by elements of a combinatorial class. [16:29] <william> #402 works fine now. [16:29] <william> we used to include dvipng in SAGe, I think, and maybe it was broken. [16:29] <william> (for me at least) [16:29] <william> mhansen -- cool; when do you plan to make this part of SAGE? [16:30] <mabshoff> Yep, dvipng is the systems, so that might have been a fluke with an outdated/broken local copy. [16:30] <mabshoff> Should be close it then? [16:30] <william> yep. [16:30] <mabshoff> #402 that is. [16:30] <mabshoff> will do [16:30] <william> but let me attach it today's [16:31] <mabshoff> Ok, you can do it all then. [16:31] <mabshoff> a good bug triage cuts down on the number of bugs to fix :) [16:31] <william> first notebook bug crossed off. [16:32] <william> there sure are a lot listed there! [16:32] <william> #293 looks scare. [16:32] <mhansen> Probably in the next major release. The last major bit to do is asymptotically fast generation of derangements. It has a ton of the stuff that Sara Billey mention in her talk. For example, it includes a symmetric functions package which passes all of MAGMA's tests and more. It also has Schubert polynomials. [16:32] <mabshoff> Does Axiom depend on gcl or does it also work woth clisp? [16:32] <william> axiom works with clisp. [16:32] <william> it is easy to install. [16:32] <mabshoff> Because: [16:32] <mabshoff> Ticket #420 (new defect) [16:32] <mabshoff> Opened 1 week ago [16:32] <mabshoff> Last modified 6 days ago [16:32] <mabshoff> SAGE's optional axiom package doesn't build on os x [16:33] <william> close that. [16:33] <mabshoff> Ok [16:33] <william> I fixed that myself on the plane ride to San Diego! [16:33] <mabshoff> ok [16:33] <william> ok, i'm closing it. [16:33] <mabshoff> have fun. [16:34] <william> just out of curiosity can you reproduce #423? [16:34] <william> i just did :-) [16:34] <mabshoff> I think that clisp alone is enough of a pain in the ass. [16:34] <william> requiring gcl... gees. [16:34] <mabshoff> Especially compated to gcl. [16:35] <william> axiom on gcl is faster. [16:35] <mabshoff> Ok. [16:35] <william> but i have the impression it's all rather slow compared to good c code. [16:35] <william> just type in SAGE: [16:35] <william> help() [16:35] <william> modules [16:35] <mabshoff> waiting on output. [16:36] <mabshoff> Some idiot on that box swapped out most of the current processes :) [16:36] <william> you. [16:36] <mabshoff> it goes boom. [16:36] <mabshoff> yes. [16:36] <william> --> 150 la = linear_algebra [16:37] <william> ajc and robert -- how's the graphics going? [16:37] <mabshoff> /tmp/Work2/sage-2.8.1/sage-2.8.1/local/lib/python2.5/site-packages/matplotlib/numerix/__init__.py in <module>() [16:37] <mabshoff> 147 __import__('random_array', g, l) [16:37] <mabshoff> 148 __import__('mlab', g, l) [16:37] <mabshoff> 149 [16:37] <mabshoff> --> 150 la = linear_algebra [16:37] <mabshoff> 151 ra = random_array [16:37] <mabshoff> ok [16:37] <mabshoff> Isn't that in matplotlib? [16:37] <william> yep. but "comment it out" and other things break in other places. [16:37] <william> I think the right thing to do this time is patch python itself so it's module lister [16:37] <william> is more robust. [16:38] <william> if you go up the tree to the first thing that is in python2.5 itself, in pkgutil.py it [16:38] <william> doesn't catch enough exceptions. [16:38] <mabshoff> ok [16:41] <william> yep. [16:41] <william> if you edit sage-2.8.1/local/lib/python2.5/pkgutil.py [16:42] <william> and comment out lines 117 and 118 ("else: raise") does help() and modules work for you???? [16:42] <mabshoff> second [16:42] <william> this bug has been reported on the list about 5 or 6 times now. [16:42] <robert457965> william - I'm working on dsage with yi at the moment [16:42] <william> cool. [16:43] <robert457965> agc - still around? [16:43] <william> wow, that help() system is really really nice. [16:43] <agc> yeah [16:43] <william> i've never used it since it is always broken. [16:43] <robert457965> how's graphics? [16:43] <william> we need to "port" help() to the notebook... [16:44] <mabshoff> Yeah, with those two lines commented out it works for me. [16:44] <william> thanks. [16:44] <william> i'm going to patch python*.spkg and close that bug. [16:44] <mabshoff> one more down. [16:45] <mabshoff> have you looked at #172 - that is rather old and might be fixed by now. [16:46] <agc> im not sure about the append method ... it has to do with the axes (i.e. good-looking-ness) and i think it needs to be handle on a case by case basis like __add__ does. [16:47] <robert457965> i agree [16:47] <robert457965> if each primitive has an xmin() function, then append can work just like __add__ [16:47] <robert457965> something like self.__xmin = min(self.__xmin, primitive.xmin()) [16:48] <robert457965> right now, every time the append method gets called, it's by a factory, which then sets the xmin xmax itself, right? [16:50] <agc> no, its just a method of Graphics ... it kinda just doesn't make sense to have it ... [16:51] <mabshoff> #352 is no longer a problem, [16:51] <mabshoff> I just tested it and it works, so I closed it. [16:52] <agc> i say just remove it. [16:52] <william> i just assigned it to sage-2.8.2, so we "get credit". [16:52] <william> agc -- fine with me. [16:52] <mabshoff> Hehe [16:54] <agc> if you are making plots, then you a least want them to look semi-pretty, and appending a bunch of graphic primitives together will not produce anything visually decent. [16:54] <robert457965> go for it [17:06] [CTCP] Received Version request from freenode-connect. [17:06] [Notice] -NickServ- This nickname is owned by someone else [17:06] [Notice] -NickServ- If this is your nickname, type /msg NickServ IDENTIFY <password> [17:06] --> You have joined the channel #sage-devel (n=was@206.135.48.98). [17:07] *** Channel modes: secret, no messages from outside [17:07] *** This channel was created on 08/17/2007 01:03:33 PM. [17:07] --> mabshoff_ has joined this channel (n=mabshoff@p5090F241.dip.t-dialin.net). [17:07] <robert457965> right, but not the primitive underneath it [17:07] <robert457965> c is a Graphics object, not a primitive [17:07] <agc> that is, when you do show(c), it look pretty good, but you can always fine tune the axes in the show command [17:08] <robert457965> you're missing my point [17:08] <robert457965> people want to use primitives outside of plot.py [17:08] <robert457965> the reason 206 is a ticket is exactly that [17:08] <agc> my point is that at the end of the day, the only reason you can about min and max values is so the plot looks decent [17:09] <robert457965> right [17:09] <robert457965> if i make a primitive and a graphics object, and append the primitive to the graphics object, it looks like crap [17:09] <robert457965> all we need to fix that is for the primitive to know its own size [17:13] <agc> they do, behind the scenes the primitives know their size because of the __call__ method requires parameters for each Graphic type [17:14] <robert457965> you mean because the Factories create a Graphics object that is only a Primitive and xmin, xmax etc, right>? [17:15] <robert457965> so why aren't the latter simply part of the primitive? [17:15] <mabshoff_> william - are you at dinner or still around? [17:15] <william> i'm around for at least another 1.5 hours. [17:15] <william> i'm working on the modular forms bug. [17:15] <william> i know what to do but have to write some code. [17:15] <william> how's it going? [17:15] <mhansen> Regarding 160, there are 2375101 set partitions so they'll take a fair amount of time / memory to generate. [17:16] <mabshoff_> I am looking at #160 [17:16] <mabshoff_> sage: n=5 [17:16] <mabshoff_> sage: time P=partitions_set(range(n),2) [17:16] <agc> "behind the scenes" (so to speak) we have: class CircleFactory(GraphicPrimitiveFactory_circle) [17:16] <mabshoff_> End Of File (EOF) in read_nonblocking(). Exception style platform. [17:16] <mabshoff_> <pexpect.spawn instance at 0x243d7518> [17:16] <mabshoff_> version: 2.0 ($Revision: 1.151 $) [17:16] <mabshoff_> command: /tmp/Work2/sage-2.8.1/sage-2.8.1/local/bin/gap [17:16] <mabshoff_> args: ['/tmp/Work2/sage-2.8.1/sage-2.8.1/local/bin/gap', '-b', '-p', '-T', '-o', '9999G', '/tmp/Work2/sage-2.8.1/sage-2.8.1/data//extcode/gap/sage.g'] [17:16] <agc> and then we have the "public function": circle = CircleFactory() [17:16] <mabshoff_> patterns: [17:16] <mabshoff_> gap> [17:16] <mabshoff_> buffer (last 100 chars): [17:16] <mabshoff_> before (last 100 chars): @p1.gap: cannot extend the workspace any more [17:16] <mabshoff_> So even for very small partition_sets things go haywire. [17:17] <mabshoff_> It all ends with [17:17] <mabshoff_> /tmp/Work2/sage-2.8.1/sage-2.8.1/local/lib/python2.5/site-packages/sage/interfaces/gap.py in _start(self) [17:17] <mabshoff_> 246 self._session_number = n [17:17] <mabshoff_> 247 return [17:17] <mabshoff_> --> 248 raise RuntimeError, msg [17:17] <mabshoff_> 249 [17:17] <mabshoff_> 250 if self.__use_workspace_cache and self.__make_workspace: [17:17] <mabshoff_> <type 'exceptions.RuntimeError'>: Unable to start gap [17:17] <robert457965> agc - i get how it works, i just don't understand why we need like six classes to do three things [17:18] <robert457965> if you make an arrow, there's two separate classes just for the function that returns the Graphics object [17:19] <agc> you are right there! we definitely could minimize the code, it we be more readable for sure :) [17:19] <robert457965> hmm [17:19] <robert457965> i mean, ultimately, how should it be set up? [17:21] <robert457965> each primitive has a function that tells matplotlib how to draw the primitive, right? [17:23] <agc> notice how every GraphicPrimitiveFactor_* only has a call method ... with end up using a method the eventually inherits from it ... it is pretty akward but it the beginning, we the code was first written we were going for maximum generality [17:24] <agc> god it make a lot of typing mistakes ... sorry [17:24] <agc> geez, i meant I not it ... ahhh!!!! [17:25] <-- mabshoff has left this server (Read error: 110 (Connection timed out)). [17:26] <robert457965> so maybe plot.py just needs a major makeover? [17:27] <robert457965> anyway, all i'm saying about that particular ticket is this- [17:27] <robert457965> a primitive contains instructions on how to draw itself on a figure [17:27] *** mabshoff_ is now known as mabshoff. [17:28] <agc> a makeover would be nice ... but its not that bad ;) [17:28] <robert457965> doesn't it also make sense for it to know what the bounds of that are? [17:30] <robert457965> it's an impressive piece of work, for sure [17:34] <william> i remember when agc and i came up with the design. [17:34] <mhansen> william: I have some changes to make sure that things such as unions, intersections, etc. of Set_object_enumerated return hashable objects. Do you want it now? [17:34] <william> i always knew a conversation like we're having now would happen. [17:35] <robert457965> we've had this conversation before, too [17:35] <william> no. but you can make a trac ticket that explains the issues, and then I might want it now. [17:36] <agc> the 'public' functions inherently know their bounds by how they are used (e.g. circle((2, 2), 1) ), and bounds are really just for the end result hard-copy plot. It you want several different Graphics in one hard-copy, then add all the seperate graphic together and the code will do its best to make it look nice. I can't think of much more to say. [17:36] <robert457965> all a primitive is, is a patch of a bigger plot. that patch has a range, and a set of instructions on how to draw it. [17:37] <robert457965> the way things are written, every time you see a primitive it is inside a bigger Graphics object [17:37] <robert457965> it *makes more sense* to factor that information down to the primitive [17:37] <robert457965> that way, there is less complication, less confusion, less bugs to trac [17:38] <robert457965> anyway, i'm signing off for the day [17:38] <robert457965> RDF poly's now factor, but badly [17:38] <mabshoff> cu [17:38] <robert457965> i'll look into finding roots via GSL soon [17:38] <agc> my 'Mathematica' does work in that direction ... I kind of just followed how Mathematica does its plotting [17:38] <robert457965> yi knows of the bug i've found in dsage, and we'll work on it more, but it won't get fixed today :-( [17:39] <william> is it a trac ticket? [17:39] <william> if not, why not? [17:39] <william> yi convinced me that anything we work on should be a track ticket. [17:39] <robert457965> #431 [17:39] <mabshoff> I agree, that way it is just very easy to keep track of things. [17:40] <robert457965> anyway, see you all at sage days X [17:40] <william> and progress is easier. [17:40] <-- robert457965 has left this channel. [17:40] <william> easier to measure. [17:40] <agc> see you robert457965 [17:40] <william> cu [17:40] <mabshoff> re #160: time P = partitions_set(range(13),3) already consumes more than 4GB on the side of sage. [17:40] <mabshoff> GAP doesn't leak memory (only 1kb) [17:41] <mabshoff> But it seems that the parser on the sage side just goes insane with memory consumption. [17:43] <mabshoff> wiliam, #433 can be closed, too. The patch has been applied by you. [17:43] <-- pauloliviersage has left this server ("CGI:IRC (Ping timeout)"). [17:44] <william> done. [17:44] <william> we're at 50% now :-) [17:45] <mabshoff> Mmmh, roughly 7 hours in, [17:45] <mabshoff> not too shabby. [17:45] <robertwb> btw, I finished fixing cython [17:45] <robertwb> (the __index__ thing) [17:45] <agc> william, here is the patch for #206 [17:45] <agc> http://sage.math.washington.edu/home/agc/remove_append_from_Graphics_class.hg [17:46] <william> got it. [17:53] <william> mabshoff -- is it just python evaling something big, or is it the pexpect interface? [17:53] <william> again, making a file-based transfer back easy to use might be fine if the problem is pexect [17:53] <mabshoff> I can't tell. [17:53] <william> instead of eval. [17:53] <mabshoff> Gap returns one very long list of lists. [17:53] <william> if use figure out how to write the output from gap to a file, you could load it into python and eval it. [17:53] <william> eval(open('foo').read()) in python. [17:53] <mabshoff> Okay. [17:54] <mabshoff> For some cython experts out there: #172 might be low hanging fruit. [17:54] <william> it's hard i think. [17:55] <mabshoff> And for people who know RR and corecsion: #429 might be interesting. [17:55] <mabshoff> I did cython the example, but I am not sure how it looked before. [17:55] <william> #172 -- but everything i think is really hard with cython, robertwb just does. [17:56] <william> #429 is *definitely* easy to fix. i'm sure of that. [17:56] --> pauloliviersage has joined this channel (i=8143024e@gateway/web/cgi-irc/ircatwork.com/x-bdd571a346a18dc4). [17:56] <william> RR matrices are generic whereas GF(127) isn't, so the problem probably has nothing to do with RR [17:56] <mabshoff> Ok, we just cannot convert "none" at the moment? [17:56] <william> i added #429 to the list for today. [17:57] <william> (on trac) [17:58] <mabshoff> Gap to file: [17:58] <mabshoff> The simplest, but less flexible is to use 'LogTo("filename");' [17:58] <mabshoff> and it will just copy the output from the screen to the file. [17:58] <mabshoff> In this case you may use the command 'SizeScreen([256,]);' to [17:58] <mabshoff> reach the maximum possible length of the line, but no more than 256 [17:58] <mabshoff> symbols. [17:58] <william> i just finally fixed #304, which was really a very bad bug. [17:58] <william> that's useless. [17:58] <mabshoff> We only want to write the list? [17:58] <william> we don't want the output to *ever* go to the screen. [17:58] <william> We want straight to the file. [17:58] <william> Maybe there is a command like "Write". [17:58] <william> Yes, we only want to write the list. [17:59] <william> We change the partitions thhing so it saves the answer in a gap temp variable, [17:59] <william> we then write that variable to a file. [17:59] <william> then from python we read the file. [17:59] <william> then we clear the temp variable. [17:59] <mabshoff> you may enter the next command from this example in the [17:59] <mabshoff> form [17:59] <mabshoff> output := OutputTextFile( "filename", true );; [17:59] <mabshoff> and it will create the file "filename" just in your current directory. [18:00] <mabshoff> Or is that the same conundrum re output [18:00] <mabshoff> ? [18:00] <william> PrintTo [18:01] <william> Type "gap.WriteLine?" in SAGE and look at what is there. [18:01] <william> I think PrintTo looks useful. [18:01] <mabshoff> Yeah, there is a tutorial for PrintTo [18:02] <william> agc -- i applied your patch. it works :-) [18:02] <mabshoff> PrintTo( <filename>, <obj>); [18:02] <mabshoff> Seems kind of obvious. [18:04] <mabshoff> So the code for partition_set is "just": [18:04] <mabshoff> if k==None: [18:04] <mabshoff> ans=gap.eval("PartitionsSet(%s)") [18:04] <mabshoff> else: [18:04] <mabshoff> ans=gap.eval("PartitionsSet(%s,%s)"%(S,k)) [18:04] <mabshoff> return eval(ans) [18:05] <william> yes. [18:05] <william> note that the right place to put the PrintTo code is [18:05] <william> in sage/interfaces/gap.py [18:05] <william> since there will be lots of times it is needed in sage. [18:05] <mabshoff> So instead of eval(ans) we write PrintTo(tempfile,"PartitionsSet(%s)"); [18:06] <william> my fix for #304 automatically fixed #303 :-) [18:06] <william> yep. [18:06] <william> but make it something like [18:06] <mabshoff> and we eval(open(tempfile).read()) [18:06] <william> yeah. [18:06] <william> precisely, we should do: [18:06] <william> a = gap('PartitionsSet(%s)') [18:07] <william> so now we have a gap temp variable named a.name(). [18:07] <mabshoff> ok [18:07] <william> Then do something like say a.str(use_file = True) [18:07] <william> ans = a.str(use_file=True) [18:08] <william> When a goes out of scope, the corr. gap data structure should be automatically garbage collected. [18:08] <mabshoff> hmm, I will have a look. [18:08] <william> So all you have to do is change the two gap.eval lines slightly (just delete the .eval part) [18:08] <william> and modify the str method in gap.py (or just add a method of your choosing) [18:09] <william> Then *that* method will have to get a temp file, and do [18:09] <william> gap.eval('PrintTo(tmpfilename, obj)') [18:09] <william> read the temp file. [18:09] <william> delete the temp file. [18:09] <william> ok? [18:09] <mabshoff> Sounds reasonable. [18:09] <mabshoff> I will give it a try, it is time for me to play with the Sage code itself. [18:09] <mabshoff> Learning by doind. [18:10] <mabshoff> -d+g [18:10] --> ncalexan has joined this channel (n=user@d207-216-25-207.bchsia.telus.net). [18:10] <william> actually, if you can do what I wrote above, it will be very useful, because you'll have to understand how [18:11] <william> sage interface work. [18:11] <william> (under the hood). [18:11] <mabshoff> ok [18:11] <william> then you can think of a way to do it all better :-) [18:11] <mabshoff> :) [18:14] <william> wow, i fixed #429 in 1 minute. :-) [18:14] <mabshoff> cudos. [18:14] <william> it's just that low lieing fruit with sparse matrices you mentioned. [18:14] <mabshoff> I remember. [18:15] <mabshoff> If one is familiar with the code that kind of fix ought to be trivial. I am just not there yet. [18:15] <ncalexan> Could someone check 340? It's fine for me, fine in the notebook, etc, so I'm going to close it unless someone can make it break again. [18:17] *** ncalexan is now known as ncalexan-dinner. [18:17] <mabshoff> ode_solver? should just show you the help or what exactly is the issue? [18:17] <mabshoff> It works for me then. [18:17] <ncalexan-dinner> It wasn't showing the help. It does now, I'm going to close it. [18:17] <mabshoff> ok [18:18] <william> it works fine for me. close it. [18:18] <ncalexan-dinner> 340: closed. [18:18] <william> i think josh actually submited a patch to fix that a long time ago which i applied. [18:18] <william> wow, we're doing well. [18:19] <ncalexan-dinner> Oh, great. Anyway, I'll try to contribute a bit later, dinner with the parents. I wish I could have been a part of this *super cool idea*. [18:20] <william> probably i'll be off to dinner for a while in about 45 minutes, depending on what agc thinks. [18:20] <william> but i'll be back in a couple hours. [18:20] <mabshoff> ok [18:20] <william> indeed this bug squash idea of malb's was *excellent*. [18:20] <william> SAGE has really improved substantially today. [18:20] <mabshoff> I will probably be around for 3 or 4 more hours. [18:20] <william> ok. [18:20] <william> i'm working on ticket #292. [18:21] <mabshoff> But I will take a break for half an hours, too. [18:21] <william> the bug has nothing to do with all the complicated coerce looking stuff. [18:21] <agc> alright, it met you at wired cafe william [18:21] <mabshoff> Any chance for a #274 revisit? [18:21] <william> it's just the list method on polynomial quotient elements gives an infinite list. [18:21] <william> i really want #274 to be revisited too. [18:21] <william> agc -- how hungry are you? [18:21] <mabshoff> ok [18:21] <william> i'm ok working for another hour... [18:21] *** mabshoff is now known as mabshoff|on_a_br. [18:21] <william> it's still light out for a while. [18:22] *** mabshoff|on_a_br is now known as mabshoff|resting. [18:22] <william> agc? [18:22] <agc> sure [18:22] <william> ok. [18:22] <william> cool. [18:23] <agc> see you there in ~30 minutes [18:23] <william> actually i ws just saying *not* 30 minutes but longer. what do you think? [18:23] <william> i.e., not meet until 7:30. [18:24] <agc> thats fine too, im not busy [18:24] <william> cool. [18:24] <william> what are you working on now? [18:24] <william> i'm trying to remember why list(f) works when f is a polynomial... [18:24] <agc> actually just looking at the new stuff that has been putting in sage [18:24] <william> ah __iter__ [18:24] <william> cool. [18:24] <william> i can't keep up with it all. [18:25] <william> agc -- check out cvxopt; it's pretty cool [18:25] <william> it's your kind of thing, probably. [18:27] <william> ok, trac #292 is fixed. :-) [18:28] <william> I'm looking at #293 now -- that Python/C api memory leak thing. [18:28] <william> robertwb -- actually i bet you could easily fix #293 if you're around. [18:28] <william> thoughts? [18:28] <robertwb> hmm... I'll take a look [18:28] <william> thanks! [18:29] <robertwb> (I actually just added a comment to that) [18:29] <william> oh, let's just delete the macro. [18:30] <william> i wrote it a long time ago when I was trying to do fast list indexing before you did it right. [18:30] <william> i'll take care of this then. [18:30] <william> wow, we use it 11 times. [18:31] <william> deleting it isn't a good idea. [18:31] <william> does it really leak memory? [18:31] <robertwb> I'm not sure... [18:32] <william> if it did, then calling hash on any generic dense matrix would make that matrix never garbage collect. [18:32] <william> since it's used in hash. [18:32] <william> that could explain some linear algebra memory leaks :-) [18:32] <robertwb> that would be bad... [18:32] <robertwb> it's defined in stdsage? [18:33] <william> do search_src('FAST_SEQ_UNSAFE') and you'll see where it is defined. [18:34] <robertwb> it's defined in sage_c_lib (not searched by search_src) [18:35] <william> indeed! [18:35] <william> david harvey is totally right about that memory leak! [18:35] <william> Try the following two distinct blocks of code, where m = get_memory_usage [18:35] <william> print m() [18:35] <william> n = random_matrix(RR, 200) [18:35] <william> n.set_immutable() [18:35] <william> hash(n) [18:35] <william> del n [18:35] <william> m() [18:35] <william> -- and -- [18:35] <william> print m() [18:35] <william> n = random_matrix(RR, 200) [18:35] <william> n.set_immutable() [18:35] <william> del n [18:35] <william> m() [18:36] <william> The first leaks about 3MB every time. The second doesn't leak at all. [18:36] <robertwb> ouch [18:36] <robertwb> yes, it's a new reference (though it may or may not be a new object) [18:36] <-- ncalexan-dinner has left this server (Read error: 110 (Connection timed out)). [18:37] <robertwb> not seeing an easy way to fix it either [18:38] <agc> william, the library im in is closing, see you around 7:30 [18:38] <william> agc -- see you at 7:30 at wired cafe for dinner. [18:38] <robertwb> you loose the reference returned from PySequence_Fast by passing it into PySequence_Fast_ITEMS, so you can never decref it [18:38] <-- agc has left this server ("Leaving"). [18:39] <robertwb> I'll go ahead and remove the macro and fix the 11 or so spots it's used [18:40] <william> thanks. [18:40] <william> I wish I had never created that macro. [18:40] <robertwb> (I guess we named it right, "unsafe" :) ) [18:40] <william> :-) [18:41] <william> robertwb -- [18:41] <robertwb> yeah? [18:41] <william> why don't we leave the macro but decref it's input each time. [18:41] <william> e.g., in _hash, we just put decref(v) after we're done using w. [18:41] <william> ???? [18:42] <william> that should be easy. [18:42] <robertwb> that won't work if it has to create a list/tuple [18:42] <william> Then we add that to the docs for FAST_SEQ_UNSAFE [18:42] <william> I don't understand. [18:42] <robertwb> the problem is PySequence_Fast(v) may return v, or may construct a tuple out of v and return that. [18:42] <william> How about if we change the input to the macro to be a PyObject* [18:43] <william> ? [18:43] <robertwb> wouldn't help [18:43] <william> why not? [18:44] <william> oh, PySequence_Fast can actually make a new sequence? [18:44] <robertwb> FAST_SEQ_UNSAFE(v) may create a _new_ object which you never get a handle to [18:44] <robertwb> yes [18:44] <william> OK. you're right. [18:44] <william> I've assigned #293 to you :-) [18:44] <robertwb> ok [18:56] <william> hi! [18:56] <william> can anybody replicate bug #349? [18:56] <william> it works fine for me now? [18:56] <william> Just do "s = Sage()", then "s.[tab]" [18:59] <mhansen> Works for me. [18:59] <william> ok. i've closed that one. [19:01] <william> #321 is easy. [19:01] <william> done. [19:07] <william> ok, i'm going to dinner with agc right now. [19:07] <william> are you'all around for a quick wrap up? [19:07] <william> is anybody around? [19:08] <william> anyway -- i updated http://www.sagemath.org:9002/sage_trac/milestone/sage-2.8.2 a lot [19:08] --> dmharvey has joined this channel (n=david@c-24-61-47-91.hsd1.ma.comcast.net). [19:08] <william> I think we fixed all but FOUR serious issues. [19:09] <william> anyway -- i updated http://www.sagemath.org:9002/sage_trac/milestone/sage-2.8.2 a lot [19:09] <william> thus we were extremely productive; more than i expected [19:09] <dmharvey> you guys finished already? [19:09] <william> essentially everything (except two spkg's) is available by doing hg_sage.pull() [19:09] <william> I'm about to go to dinner and I'm trying to do a wrap-up, though I don't know if anybody is listening... [19:10] <william> I'll probably be back in 2 hours, maybe. [19:10] <william> anyway, the main bugs remaining are: [19:10] <dmharvey> did 274 get fixed? [19:10] <william> (1) #293, which robertwb is fixing. [19:10] <william> (2) #274, which dmharvey is about to fix :-) [19:10] <robertwb> I'm off to dinner too [19:10] <dmharvey> :-) [19:10] <william> (3) #160, which mabshoff is working on. [19:11] <william> and (4) #446, which I'll fix later tonight (some weird notebook thing). [19:11] <william> everything else listed of consequence got dealt with, I think. [19:11] <william> very nice. [19:11] <william> so from my point of view i'd like to declare the bug squashing a success. [19:11] <william> cu :-) [19:11] <dmharvey> ok [19:12] <william> I'll paste the whole transcript to the wiki as usual. = Results = Sage Bug 1 took place from 10 am PST August 18th until 2 am August 19th. ==Participants== In order of apperance, handle in brackets William Stein (william, _was) Robert Miller (robert457965) D. Harvey (dmharvey) Michael Abshoff (mabshoff) Nick Alexander (ncalexan) Paul-Oliver Dehaye (paulolivier_sage) Robert Bradshaw (robertwb) Mike Hansen (mhansen) Alex Clemesha (agc) Yi Qiang (yi) == Bugs worked on == There we various observers present, but those have been omitted here. They can be found in the IRC log. Bugs squashed: (see also http://www.sagemath.org:9002/sage_trac/milestone/sage-2.8.2). Please complain if there are mistakes, especially regarding credit for fixes: #160: partitions -- sage dies (fixed by w stein, m hansen has code that doesn't use GAP and should be much faster.) #190 (and #440): fractional matrix indices are allowed ? (fixed by d harvey) #201: mwrank crashing (fixed via patches by j cremona, small memleak fixed by m abshoff) #206: Graphic.append() does not update xmin_ xmax etc. (fixed by r miller and agc) #226: sagex enum issue and solution (closed by m. abshoff - already fixed) #240: in notebook when refresh browser or first get page cell update list isn't sent out with running cells #248: elliptic curve constructor in funny case -- coercion issues (closed by w. stein - already fixed) #254: p-adic precision drop in evaluating a polynomial (closed by w. stein - already fixed, probably fixed by d roe) #265: Coercion of maxima float with positive exponent to python float (closed by w. stein - already fixed) #268: IntegerMod sqrt() doesn't work for non-prime moduli (closed by w. stein - already fixed) #274: memory leak --- Polynomial arithmetic over finite field (fixed by w stein, d harvey) #275: Maxtrix groups over RR don't get pushed off to GAP properly (fixed by w stein) #292: Problems with stacked polynomial rings and vector (fixed by w stein) #293: nasty memory leak in FAST_SEQ_UNSAFE macro (fixed by r bradshaw) #303: modular forms bug (fixed by w stein) #304: another modular forms bug (fixed by w stein) #312: LaTex notation in documentation does not show up in notebook doc browser #316: bug in modular symbols projection (probably really in linear algebra) (closed by m hansen - already fixed) #319: can't divide matrix over QQ by a rational (closed by d harvey - already fixed, doctest added by w stein) #321: execute button broken in some worksheets (closed by w stein - the execute button no longer exists after the notebook rewrite) #337: broken (?) discriminant of quaternion algebra (closed by m hansen - already fixed) #340: error in sageinspect: ode_solver? (already fixed, closed by n alexander) #342: ComplexNumber constructor seg faults (m hansen) #349: Tab completion on Sage() object does not work (already fixed, closed by w stein) #350: bug in rational_points on hyperelliptic curve (closed by d harvey - already fixed) #352: error in matrix creation options (already fixed, closed by m abshoff) #371: implement sage -t -gdb foo.py (patch by w stein) #374: Bug in factorization of polynomial over number field (fixed by w stein, initial patch by j mohler) #392: round() ignores the innate precision of a real number (fixed by m hansen) #393: Very strange behavior of QQ -> RealField() conversion (resolved by m hansen, report was invalid) #402: %slide directive produces segfault in dvipng (already fixed, closed by m abshoff. dvipng is a system binary and not part of Sage) #420: SAGE's optional axiom package doesn't build on os x (closed by w. stein - axiom works fine on clisp) #423: command line help() --> modules fails for *some* people (fixed by w stein) #429: cannot create empty sparse matrix over reals (fixed by w stein) #430: RDF poly's don't factor (w. stein: The factoring now works, but it depends on root finding, which currently sucks. A new ticket will be made for the root problem.) #433: Add -version, -root, and -branch for printing version, SAGE_ROOT, and branch information. () #440: Integer.index() currently goes via a python long (fixed by d harvey) #441: add sage-valgrind command line option analog to sage-gdb (patch by m. abshoff) #442: RDF roots() function gives imprecise results (duplicate) #446: in latest version of the notebook interactive documenation doesn't "interact" at all. (fixed by w stein) #447: documentation for mpfr round in SAGE sucks (fixed my m hansen with help from w stein) #456: TypeError: unable to coerce to a ComplexNumber (fixed my h. hansen) #457: gp interface: TypeError: an integer is required (fixed by w stein) #458: plot.py: NameError: name 'p1' is not defined (fixed by r miller) #459: TypeError: unsupported operand parent(s) for '*': 'Polynomial Ring in u_ v over Integer Ring' () #460: AttributeError: 'Graphics' object has no attribute 'append' (fixed by r miller) == To Do == add Details to bugs, give proper credit for each bug resolved a summary of what was good, what was bad and maybe suggestions on how things could be improved. (potentially new) sage development guide lines: see http://www.divmod.org/trac/wiki/UltimateQualityDevelopmentSystem - this maybe should go into a more general section of the wiki