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