From: Carlos Q. <jy...@cq...> - 2006-06-27 05:21:13
|
Hi Thanks for the explanation, they makes a lot of sense and so I'll redo the constructor (__new__) to process complex arguments I think I'm going to checkout PyPy and take a look at how is it done there as well Carlos Samuele Pedroni wrote: > Carlos Quiroz wrote: > >> Hi >> >> Sorry if this question is too basic but I'd like to clarify how to >> proceed: >> >> I fixed PyComplex and __builtin__ to pass the 2.3 tests but now with >> the latest updates to PyComplex in SVN [2826] another test broke. >> >> The guilty change is this >> >> public PyComplex __complex__() { >> - return this; >> + return new PyComplex(real, imag); >> } >> >> and that breaks this assertion: >> >> complex(c) is c >> > > in CPython complex has no complex. > > __new__ which is then responsible should do something like this: > > def __new__(subtyp, real=0.0, imag=None): > if type(real) is complex and imag is None and subtyp is complex: > return real > ... > > > > >> Also this happens for other types like Float >> > > for float __float__ should do something like (pseudo-code): > > def __float__(x): > if type(x) is float: > return x > return float(x.getValue()) > > >> Any tips on how this should be fixed? >> >> Regards >> Carlos >> >> >> Frank Wierzbicki wrote: >> >>> On 6/15/06, Carlos Quiroz <jy...@cq...> wrote: >>> >>> >>>> Hi all >>>> >>>> I decided to tackle complex in the 2.3 branch since some tests were >>>> failing and it seems easy enough for starters. >>>> I have solved most of the failing tests but I have a few things I >>>> haven't been able to solve so I'd rather ask. >>>> I'm using gexpose to generate the exposed methods for PyComplex and I >>>> >>>> 1. Right now I can expose a __pow__ method through the file below >>>> but it >>>> generates only a version with 2 parameters while I need a version >>>> with 3 >>>> params. >>>> I have the feeling that "expose_vanilla_pow" should solve it but it >>>> doesn't. Any tips?` >>> >>> >>> Are you sure you need 3 params? The pow in __builtin__ that takes 3 >>> params (the only way to invoke pow with an extra arg AFAIK) does >>> essentially this: >>> >>> __builtin__.pow(x,y,z) --> x.__pow__(y,z) >>> >>> >>>> 2. One of failing test is related to the conversion of a large >>>> string of >>>> the form unicode("1"*500) to complex. The test says that it should fail >>>> with a ValueError but I'm not sure if the failing should happen at the >>>> conversion of complex, or at the conversion to float. I believe the >>>> second will break other tests but it may be more correct. >>> >>> >>> >>> Not sure about this one... I know that both float and complex >>> conversions should fail, at least that's what I get when I try it on >>> CPython, but you probably already knew that. >>> >>> >>>> 3. You may notice that in the exposed file I needed to remove the line >>>> breaks, otherwise the script would fail usin python 2.4 in Windows and >>>> cygwin. Any tips? >>> >>> >>> >>> I'll try it on my windows/cygwin machine (really my wife's machine, >>> not a big user of windows myself) and see if I have any luck. >>> >>> >>>> Regards >>>> Carlos >> >> >> >> >> Using Tomcat but need to do more? Need to support web services, security? >> Get stuff done quickly with pre-integrated technology to make your job >> easier >> Download IBM WebSphere Application Server v.1.0.1 based on Apache >> Geronimo >> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 >> _______________________________________________ >> Jython-dev mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-dev > > |