Re: math module for Decimals
Since the interest is more in extended precision than in decimal representation, there is another module that may be of interest. http://calcrpnpy.sourceforge.net/clnum.html It interfaces to the Class Library for Numbers (CLN) library to provide both arbitrary precision floating point and complex floating point numbers and the usual math functions. While I am the author of this module, I agree with Mark that a module based on MPFR would be better since you have better control over precision and rounding. I have looked at Sage (which uses MPFR) but it is a huge integrated package so you can't just import what you need into one of your usual Python scripts. I wrote the clnum module mainly to support arbitrary precision in an RPN calculator available from the same SourceForge project. However, it also works nicely as a stand-alone module. At this time, there is no Windows installer available for Python 2.6 because I don't use Windows at home and the person who normally builds the installer for me is no longer interested. If someone wants to follow the published instructions and send me the resulting installer, I will put it up on SourceForge. Ray Jerry Carl wrote: >> 1. mpmath? > 2. sympy? > 3. Sage? Haven't tried those, i guess i have some studying to do. > > x=Decimal.__mod__(x,Decimal('2')*pi()) > > Works fine for what i need, but i am sure it's not the right way to do > > it. > I don't know of any better way to deal with large arguments. > The main problem is that the reduction step can introduce fairly > large errors: for example, if you're using a value of pi > that's accurate to 10**-20, say, then reducing something of > magnitude 10**5*pi will give a result with error of around > 10**-15. As far as I know, this problem is essentially > unavoidable, and it's the reason why implementing sin for inputs > like 10**9 isn't feasible. Good point. No tool will work in all parts of the universe (which is especially true for the universal ski wax). Let me check the 3 modules you listed above! -- http://mail.python.org/mailman/listinfo/python-list
Re: Using fractions instead of floats
Neil Cerutti wrote: >> Another guess could be that real numbers being closed under the >> four arithmetic operations, there is no danger to accidentally >> step into complex numbers. OTOH floats and rationals are two >> (conflicting) ways of extending integers. > > You would have to adopt a few simple conversion rules, a la > Scheme. Inexact numbers are contagious, for example. It was > pretty shocking for a Scheme programmer to see the gmpy package > break that rule. ;) There is another package that supports rationals. http://pypi.python.org/pypi/clnum/1.2 One of the reasons I created this package is that I didn't like implicit conversion of inexact numbers to exact numbers. Instead clnum either raises an exception (with Python floats and complex) or converts the rational to a compatible inexact type (with mpf and cmpf). Other reasons for creating this package are gmpy doesn't support complex numbers or the functions in the math and cmath modules. However, gmpy does have many capabilities that are not in clnum so you need to choose based on the type of problem you want to solve. Ray Buvel -- http://mail.python.org/mailman/listinfo/python-list
[ANN] rpncalc-2.5 RPN Calculator for Python
The rpncalc package adds an interactive Reverse Polish Notation (RPN) interpreter to Python. This interpreter allows the use of Python as an RPN calculator. You can easily switch between the RPN interpreter and the standard Python interpreter. Home page: http://calcrpnpy.sourceforge.net/ Changes in 2.5 * Update the included clnum package. * Added ratapx and unique_roots commands. -- http://mail.python.org/mailman/listinfo/python-list
[ANN] ratfun-2.4 Polynomials and Rational Functions
The ratfun module provides classes for defining polynomial and rational function (ratio of two polynomials) objects. These objects can be used in arithmetic expressions and evaluated at a particular point. Home page: http://calcrpnpy.sourceforge.net/ratfun.html Note: If you are using rpncalc-1.2 or later, this module is already included. This release is for folks who don't want rpncalc. Changes in 2.4 * Updated the included clnum package. * Added uniqueRoots to handle polynomials with multiple roots. -- http://mail.python.org/mailman/listinfo/python-list
[ANN] clnum-1.4 Class Library For Numbers Python Binding
The clnum package adds rational numbers and arbitrary precision floating point numbers in real and complex form to Python. Also provides arbitrary precision floating point replacements for the functions in the math and cmath standard library modules. Home page: http://calcrpnpy.sourceforge.net/clnum.html Changes in 1.4 * Fixed anomaly where an exact zero was converted using default precision in multiply and divide routines. * Added function to approximate a number as a rational with the size of the numerator and denominator constrained. -- http://mail.python.org/mailman/listinfo/python-list
Re: ratfun-2.3 Polynomials and Rational Functions
Bas wrote: > Are there any differences between this module and the one already > present in numpy? > > http://www.scipy.org/doc/numpy_api_docs/numpy.lib.polynomial.html > > Cheers, > Bas > Yes, there are quite a few. This module uses a multi-precision library (clnum) to make the calculations more precise. This makes the root finder significantly more precise. There is an example in the user manual that shows the difference in performance between Numeric (essentially the same code as in numpy) and the ratfun root finder on an ill-conditioned polynomial. If you choose to use exact coefficients (integers and rationals) then all calculations except for root finding are exact. Unlike the numpy implementation, arithmetic (+-*/**) uses the standard Python operators instead of requiring you to call functions. Ray -- http://mail.python.org/mailman/listinfo/python-list
[ANN] rpncalc-2.4 RPN Calculator for Python
The rpncalc package adds an interactive Reverse Polish Notation (RPN) interpreter to Python. This interpreter allows the use of Python as an RPN calculator. You can easily switch between the RPN interpreter and the standard Python interpreter. Home page: http://calcrpnpy.sourceforge.net/ Changes in 2.4 * Update the included clnum package. * Added combinatorial functions. -- http://mail.python.org/mailman/listinfo/python-list
[ANN] ratfun-2.3 Polynomials and Rational Functions
The ratfun module provides classes for defining polynomial and rational function (ratio of two polynomials) objects. These objects can be used in arithmetic expressions and evaluated at a particular point. Home page: http://calcrpnpy.sourceforge.net/ratfun.html Note: If you are using rpncalc-1.2 or later, this module is already included. This release is for folks who don't want rpncalc. Changes in 2.3 * Update the included clnum package. * Improved the formatting of the string representation of a polynomial. * Polynomial and rational function evaluation now works with array inputs. -- http://mail.python.org/mailman/listinfo/python-list
[ANN] clnum-1.3 Class Library For Numbers Python Binding
The clnum package adds rational numbers and arbitrary precision floating point numbers in real and complex form to Python. Also provides arbitrary precision floating point replacements for the functions in the math and cmath standard library modules. Home page: http://calcrpnpy.sourceforge.net/clnum.html Changes in 1.3 * Added combinatorial functions. * Improved the performance of converting very large Python longs. -- http://mail.python.org/mailman/listinfo/python-list
Re: math.pow(x,y)
K.S.Sreeram wrote: > Raymond L. Buvel wrote: >> I just tried this and it is taking an extremely long time even on a fast >> machine with 4 Gb of RAM. Killed it after a couple of minutes. > > Thats odd. > 34564323**456356 completed on my laptop in 28 seconds. > [Python 2.4.3, Celeron-M 1.3GHz, WinXP], and max memory consumption > during the whole process was about 11megs. > > What python version are you using? > > Regards > Sreeram > Sorry, I tripped over the display problem that Tim Peters has repeatedly explained on this news group (decimal algorithm is quadratic in the number of digits) :-( On a 64-bit 2.2 GHz Opteron running Debian stable, Python 2.3 took 26 seconds and Python 2.4 took 11 seconds. -- http://mail.python.org/mailman/listinfo/python-list
Re: math.pow(x,y)
Felipe Almeida Lessa wrote: > Em Dom, 2006-06-11 às 11:19 -0700, fl1p-fl0p escreveu: >> import math >> math.pow(34564323, 456356) >> >> will give math range error. >> >> how can i force python to process huge integers without math range >> error? Any modules i can use possibly? > > 34564323**456356 ? > I just tried this and it is taking an extremely long time even on a fast machine with 4 Gb of RAM. Killed it after a couple of minutes. This sort of calculation can be done with extended precision floating point (as long as you don't need an exact answer). For example (using defaults on a 64-bit machine), >>> from clnum import mpf >>> mpf(34564323)**456356 mpf('1.39518106833639480699862472257296396643e3440298',36) compute time is about 160 microseconds. For more information see http://calcrpnpy.sourceforge.net/clnumManual.html For calculations involving large powers, you may still be better off using logarithms. -- http://mail.python.org/mailman/listinfo/python-list
[ANN] clnum-1.2.1 Class Library For Numbers Python Binding
The clnum package adds rational numbers and arbitrary precision floating point numbers in real and complex form to Python. Also provides arbitrary precision floating point replacements for the functions in the math and cmath standard library modules. Home page: http://calcrpnpy.sourceforge.net/clnum.html Changes in 1.2.1 Updated the unit test so it works on both 32 and 64 bit platforms. Only the source package was updated since there are no other changes. -- http://mail.python.org/mailman/listinfo/python-list
Re: Decimal and Exponentiation
Tim Peters wrote: > [Raymond L. Buvel, on >http://calcrpnpy.sourceforge.net/clnumManual.html > ] > >> The clnum module handles this calculation very quickly: >> >> >>> from clnum import mpf >> >>> mpf("1e1") ** mpf("3.01") >> mpf('9.99932861e30099',26) > > > That's probably good enough for the OP's needs -- thanks! > > OTOH, it's not good enough for the decimal module: > >(10**1)**3.01 = >10**(1*3.01) = >10**30100 > > exactly, and the proposed IBM standard for decimal arithmetic requires > error < 1 ULP (which implies that if the mathematical ("infinite > precision") result is exactly representable, then that's the result > you have to get). It would take some analysis to figure out how much > of clnum's error is due to using binary floats instead of decimal, and > how much due to its pow implementation. Indeed, it is not clear where the error is comming from especially since you can increase the precision of the intermediate calculation and get the exact result. >>> mpf(mpf("1e1",30) ** mpf("3.01",30), 20) mpf('1.0e30100',26) Is this the kind of thing you will need to do in the Decimal module to meet the specification? -- http://mail.python.org/mailman/listinfo/python-list
Re: Decimal and Exponentiation
Tim Peters wrote: > The GNU GMP library (for which Python bindings are available) also > supports "big floats", but their power operation is also restricted to > integer powers and/or exact roots. This can be painful even to try; > e.g., > >>>> from gmpy import mpf >>>> mpf("1e1") ** mpf("3.01") > > consumed well over a minute of CPU time (on a 3.4 GHz box) before dying > with > >ValueError: mpq.pow fractional exponent, inexact-root > The clnum module handles this calculation very quickly: >>> from clnum import mpf >>> mpf("1e1") ** mpf("3.01") mpf('9.99932861e30099',26) >>> x=_ >>> x ** (1/mpf("3.01")) mpf('9.99953924e',26) See http://calcrpnpy.sourceforge.net/clnumManual.html -- http://mail.python.org/mailman/listinfo/python-list
Re: Decimal and Exponentiation
elventear wrote: > Hi, > > I am the in the need to do some numerical calculations that involve > real numbers that are larger than what the native float can handle. > > I've tried to use Decimal, but I've found one main obstacle that I > don't know how to sort. I need to do exponentiation with real > exponents, but it seems that Decimal does not support non integer > exponents. > > I would appreciate if anyone could recommend a solution for this > problem. > > Thank you. > The clnum module has arbitrary precision floating point and complex numbers with all of the standard math functions. For example, the cube root of 2 can be computed to 40 decimal places with the following. >>> from clnum import mpf,mpq >>> mpf(2,40)**mpq(1,3) mpf('1.259921049894873164767210607278228350570251464701',46) For more information see http://calcrpnpy.sourceforge.net/clnumManual.html -- http://mail.python.org/mailman/listinfo/python-list
Re: installing numpy
Gary Wessle wrote: > Robert Kern <[EMAIL PROTECTED]> writes: > > >>Raymond L. Buvel wrote: >> >> >>>Since you are a new Linux user, you should definitely follow Robert's >>>advice about building as an ordinary user separately from the install. >>>I sometimes take a shortcut and just do the install as user root. >>>However, I then wind up cleaning out the build directory as user root >>>(not a very safe thing to do). >> >>For small, pure Python packages, that may be fine. numpy's build is >>complicated >>enough that you really, *really* want to build as a regular user. >> >>-- >>Robert Kern > > > I have read as much as I can form the python installation manual. > as a regular user, I created a personal configuration file here > > > :~$ cat .pydistutils.cfg > [install] > prefix=/usr/local > > > now to build as a regular user, I am getting some errors > > > $ cd numpy-0.9.6 > $ python setup.py build > Running from numpy source directory. > Warning: not existing path in numpy/distutils: site.cfg > F2PY Version 2_2236 > Traceback (most recent call last): > File "setup.py", line 76, in ? > setup_package() > File "setup.py", line 63, in setup_package > config.add_subpackage('numpy') > File "/home/fred/numpy-0.9.6/numpy/distutils/misc_util.py", line 592, in > add_s ubpackage > config_list = self.get_subpackage(subpackage_name,subpackage_path) > File "/home/fred/numpy-0.9.6/numpy/distutils/misc_util.py", line 582, in > get_s ubpackage > subpackage_path) > File "/home/fred/numpy-0.9.6/numpy/distutils/misc_util.py", line 539, in > _get_ > configuration_from_setup_py > config = setup_module.configuration(*args) > File "/home/fred/numpy-0.9.6/numpy/setup.py", line 10, in configuration > config.add_subpackage('core') > File "/home/fred/numpy-0.9.6/numpy/distutils/misc_util.py", line 592, in > add_s ubpackage > config_list = self.get_subpackage(subpackage_name,subpackage_path) > File "/home/fred/numpy-0.9.6/numpy/distutils/misc_util.py", line 582, in > get_s ubpackage > subpackage_path) > File "/home/fred/numpy-0.9.6/numpy/distutils/misc_util.py", line 539, in > _get_ > configuration_from_setup_py > config = setup_module.configuration(*args) > File "numpy/core/setup.py", line 11, in configuration > from numpy.distutils.system_info import get_info, default_lib_dirs > File "/home/fred/numpy-0.9.6/numpy/distutils/system_info.py", line 151, in ? > so_ext = get_config_vars('SO')[0] or '' > File "/usr/lib/python2.4/distutils/sysconfig.py", line 488, in > get_config_vars > func() > File "/usr/lib/python2.4/distutils/sysconfig.py", line 358, in _init_posix > raise DistutilsPlatformError(my_msg) > distutils.errors.DistutilsPlatformError: invalid Python installation: unable > toopen > /usr/lib/python2.4/config/Makefile (No such file or directory) I think this is another example where you don't have the -dev package you need installed on your system. In order to build just about anything that requires header files on a Debian system, you need to install the -dev packages. Debian usually packages things into a package for regular users and another package of the same name with a -dev suffix for developers. In this case, it looks like distutils is complaining about a missing Makefile. But this is just the start of the problems. Checking on my system, it looks like you need to install the python2.4-dev package. Note that installing python-dev won't work in your case since that is for the default Python which is still Python2.3 in Debian testing. Using NumPy as your first introduction to building Python extension modules is a real challenge. Good luck! Ray Buvel -- http://mail.python.org/mailman/listinfo/python-list
Re: installing numpy
Robert Kern wrote: > Gary Wessle wrote: > >>"Raymond L. Buvel" <[EMAIL PROTECTED]> writes: > > >>>When installing from source on a Debian system, you want the installed >>>package to wind up in /usr/local/lib/python2.x/site-packages (where x >>>represents the version of Python you are running the installer from). >>>This allows you to keep it separate from the apt managed directories and >>>allows for easy removal/upgrade. So the command you want to execute >> >>>from root is >> >>>python setup.py install --prefix=/usr/local >> >>sorry if this is boring since I am not a seasoned Linux user. >> >>setup.py isn't located at the root, do you mean, execute the command above >>from root, as to do this >>:~$ cd / >>:/$ python setup.py install --prefix=/usr/local >>or >>:/$ python home/fred/numpy-0.9.6/setup.py install --pref... >>or AS root >>:/# python setup.py install --prefix=/usr/local >>or >>:/# python home/fred/numpy-0.9.6/setup.py install --pref... > > > I think he meant "as the root user". You will probably want to build numpy as > a > regular user and then only install as the root user. You will probably want to > use sudo(1) to gain root privileges. You can read the sudo man-page for more > information on how to do that. > > ~$ cd numpy-0.9.6 > ~/numpy-0.9.6$ python setup.py build > ~/numpy-0.9.6$ sudo python setup.py install --prefix=/usr/local > > However, instead of setting --prefix every time you execute setup.py for every > Python package, it will be easier for you to create the file > ~/.pydistutils.cfg > with the contents > > [install] > prefix=/usr/local > > See http://docs.python.org/inst/config-syntax.html for more information. > > Then, you can just do > > ~$ cd numpy-0.9.6 > ~/numpy-0.9.6$ python setup.py build > ~/numpy-0.9.6$ sudo python setup.py install > > >>>By the way, to get NymPy to use the high-performance libraries, you must >>>install these libraries and the associated -dev packages before running >>>the Python install. >> >>I wish to know the debian names for those packages, my first guess >>would be refblas3 under testing since blas is not available for >>debian/testing, there is also >>refblas3-dev Basic Linear Algebra Subroutines 3, static library >>which I don't have installed. >> >>would refblas3 be all what NymPy need to the high-performance? > > > No. refblas3 provides the reference (unoptimized) implementation of the BLAS. > In > Ubuntu (a Debian-based distribution) the package that you would want is > atlas3-base-dev. It should have a similar name in your version of Debian > (possibly atlas-dev or atlas3-dev or some other variant). > > If you need more help, you will probably get more focused help on the > numpy-discussion mailing list. > > http://lists.sourceforge.net/lists/listinfo/numpy-discussion > Since you are a new Linux user, you should definitely follow Robert's advice about building as an ordinary user separately from the install. I sometimes take a shortcut and just do the install as user root. However, I then wind up cleaning out the build directory as user root (not a very safe thing to do). The Debian/testing package you want to install is indeed atlas3-base-dev. This package contains the header files needed to build against the optimized blas library. Note that the dependancies listed in this package will cause the library package to be installed as well. There are packages that are optimized for the extended instruction sets available on some processors. If you want to try and install one of these instead of atlas3-base, just search the package list for anything with atlas3 in the name. Then carefully read the package descriptions to find one that is optimized for your hardware. Make sure you install the -dev package or you will wind up using the unoptimized default in NumPy. -- http://mail.python.org/mailman/listinfo/python-list
Re: installing numpy
Gary Wessle wrote: > Hi > > I am trying to install NumPy in my debian/testing linux > 2.6.15-1-686. > When installing from source on a Debian system, you want the installed package to wind up in /usr/local/lib/python2.x/site-packages (where x represents the version of Python you are running the installer from). This allows you to keep it separate from the apt managed directories and allows for easy removal/upgrade. So the command you want to execute from root is python setup.py install --prefix=/usr/local By the way, to get NymPy to use the high-performance libraries, you must install these libraries and the associated -dev packages before running the Python install. -- http://mail.python.org/mailman/listinfo/python-list
Re: printing list
compboy wrote: > How do you print elements of the list in one line? > > alist = [1, 2, 5, 10, 15] > > so it will be like this: > 1, 2, 5, 10, 15 > > because if I use this code > > for i in alist: > print i > > the result would be like this > > 1 > 2 > 5 > 10 > 15 > > Thanks. > There are a number of ways to do it but if you want a one-liner: print repr(alist)[1:-1] will meet your spec. -- http://mail.python.org/mailman/listinfo/python-list
Re: python rounding problem.
Gary Wessle wrote: > Erik Max Francis <[EMAIL PROTECTED]> writes: > > >>chun ping wang wrote: >> >> >>>Hey i have a stupid question. >>>How do i get python to print the result in only three decimal >>>place... >>>Example>>> round (2.9954254, 3) >>>2.9951 >>>but i want to get rid of all trailing 0's..how would i do that? >> >>Floating point arithmetic is inherently imprecise. This is not a >>Python problem. > > > does python support true rations, which means that 1/3 is a true > one-third and not 0.3 rounded off at some arbitrary precision? > Python doesn't directly support rationals but there are at least two third party modules that add this capability to Python. http://calcrpnpy.sourceforge.net/clnumManual.html http://gmpy.sourceforge.net/ -- http://mail.python.org/mailman/listinfo/python-list
Class Library for Numbers now available for Windows
Due to the contribution of Frank Palazzolo, a Windows binary installer and build instructions are available for the clnum package. This also makes ratfun and rpncalc usable on the Windows platform. The clnum package adds rational numbers and arbitrary precision floating point numbers in real and complex form to Python. It also provides arbitrary precision floating point replacements for the functions in the math and cmath standard library modules. For more information, see Home page: http://calcrpnpy.sourceforge.net/clnum.html -- http://mail.python.org/mailman/listinfo/python-list
[ANN] clnum-1.2 Class Library For Numbers Python Binding
The clnum package adds rational numbers and arbitrary precision floating point numbers in real and complex form to Python. Also provides arbitrary precision floating point replacements for the functions in the math and cmath standard library modules. Home page: http://calcrpnpy.sourceforge.net/clnum.html Changes in 1.2 * Make compatible with Python 2.5 on 64-bit platforms. * Windows installer now available. * Include documentation for building clnum on Windows. -- http://mail.python.org/mailman/listinfo/python-list
Re: CRC calculation
[EMAIL PROTECTED] wrote: > Does anyone know where I can get python code to perform a CRC > calculation on an IP packet? > Check out http://crcmod.sourceforge.net/ -- http://mail.python.org/mailman/listinfo/python-list
[ANN] crcmod-1.3 CRC Generator
Crcmod is a Python package for creating functions computing the Cyclic Redundancy Check (CRC). Any generating polynomial producing 8, 16, 32, or 64 bit CRCs is allowed. Generated functions can be used in Python or C/C++ source code can be generated. Home page: http://crcmod.sourceforge.net/ Changes in 1.3 * Make compatible with Python 2.5 on 64-bit platforms. * Improve the install procedure. -- http://mail.python.org/mailman/listinfo/python-list
Re: Python C/API - *arg,**kwds variable argumnents
[EMAIL PROTECTED] wrote: > I am writing a C extension with python 2.3.5 and need constructs > similar to python >func(*args, **kwds) > What's a neat way to do that? > I found pyrex has a __Pyx_GetStarArgs - > is there something I'm missing from the regular C/API maybe using one > of the PyArg_Parse.. calls ? > > Thanks, > M. > It looks like the PyArg_ParseTupleAndKeywords API call is what you are looking for. Documentation is http://python.org/doc/2.4.2/ext/parseTupleAndKeywords.html -- http://mail.python.org/mailman/listinfo/python-list
Re: binascii.crc32 results not matching
Larry Bates wrote: Looking over the code, it seems very inefficient and hard to understand. You really should check out the following. http://sourceforge.net/projects/crcmod/ It will allow you to generate efficient CRC functions for use in Python and in C or C++. The only thing you need to input is the polynomial, the bit ordering, and the starting value. The unit test gives a number of polynomials including the one you are using which is: polynomial: 0x104C11DB7, bit reverse algorithm If you are just looking for a utility on Linux to do nightly checking of files, I strongly recommend md5sum. My timing tests indicate that the MD5 algorithm is comparable or slightly faster than a 32-bit CRC and certainly faster than the code you are trying to port. It also has the advantage of being a standard Linux command so you don't need to code anything. Ray -- http://mail.python.org/mailman/listinfo/python-list
Re: binascii.crc32 results not matching
Tim Peters wrote: > [Raymond L. Buvel] > >>Check out the unit test in the following. >> >>http://sourceforge.net/projects/crcmod/ > > > Cool! > > >>I went to a lot of trouble to get the results to match the results of >>binascii.crc32. As you will see, there are a couple of extra operations >>even after you get the polynomial and bit ordering correct. > > > Nevertheless, the purpose of binascii.crc32 is to compute exactly the > same result as most zip programs give. All the details (including > what look to you like "extra operations" ;-)) were specified by RFC > 1952 (the GZIP file format specification). As a result, > binascii.crc32 matches, e.g., the CRCs reported by WinZip on Windows, > and gives the same results as zlib.crc32 (as implemented by the zlib > developers). Since there are probably others following this thread, it should be pointed out that the specification of those "extra operations" is to avoid some pathalogical conditions that you can get with a simplistic CRC operation. For example, using 0 as the starting value will give a value of zero for an arbitrary string of zeros. Consequently, a file starting with a string of zeros will have the same CRC as one with the zeros stripped off. While starting with 0x will give a non-zero value. -- http://mail.python.org/mailman/listinfo/python-list
Re: binascii.crc32 results not matching
Peter Hansen wrote: > Larry Bates wrote: > >> I'm trying to get the results of binascii.crc32 >> to match the results of another utility that produces >> 32 bit unsigned CRCs. > > > What other utility? As Tim says, there are many CRC32s... the > background notes on this one happen to stumble out at the top of the > list in response to googling for "zip file crc32 checksum polynomial", > though I'm sure there are easier ways. The binascii docs say its CRC32 > is compatible with the Zip file checksum, but they don't describe it > further. > > Generally CRCs are described in terms of their "polynomial", though just > quoting that isn't sufficient to describe their behaviour, but if you > happen to know the polynomial for your utility, someone else can > probably point you to a more appropriate routine, or perhaps explain > what you were doing wrong if the binascii one is actually the right one.. > > -Peter > Check out the unit test in the following. http://sourceforge.net/projects/crcmod/ I went to a lot of trouble to get the results to match the results of binascii.crc32. As you will see, there are a couple of extra operations even after you get the polynomial and bit ordering correct. Ray -- http://mail.python.org/mailman/listinfo/python-list
[ANN] rpncalc-2.2 RPN Calculator for Python
The rpncalc package adds an interactive Reverse Polish Notation (RPN) interpreter to Python. This interpreter allows the use of Python as an RPN calculator. You can easily switch between the RPN interpreter and the standard Python interpreter. Home page: http://calcrpnpy.sourceforge.net/ Changes in 2.2 * Display only 12 digits of a mpf or cmpf value. * Added stats function. * Added chebyshev module. * Added solve command. * Simplified installing user functions into the calculator. * Added on-line help. -- http://mail.python.org/mailman/listinfo/python-list
Re: gmpy/decimal interoperation
Alex Martelli wrote: > As things stand now (gmpy 1.01), an instance d of decimal.Decimal cannot > transparently become an instance of any of gmpy.{mpz, mpq, mpf}, nor > vice versa (the conversions are all possible, but a bit laborious, e.g. > by explicitly going through string-forms). > > I'm thinking about possible ways to fix this, in whole or in part, but, > before I spend more time on this, I was wondering if there's anybody > else who'd be interested -- if so, maybe we can discuss which > conversions should happen implicitly (e.g., if you try to sum a Decimal > and an mpz, maybe the latter should implicitly become a Decimal, just > like an int would, so that the result is a Decimal) and which ones > should only happen on explicit request (e.g., gmpy.mpf(d) should produce > an mpf instance, just as calling gmpy.mpf on an int instance would). > > > Alex This is a bit off topic but I would like to know how you would go about doing an implicit operation with an mpz and Decimal becoming a Decimal. I would like to use something like this to make the float and complex types more interoperable with mpq and cmpq in my clnum module (http://calcrpnpy.sourceforge.net/clnumManual.html). In those cases, I would like the mpq to degrade to float and the cmpq to degrade to complex (right now they just raise exceptions). Seems like you need to either modify the target type to recognize the new one or the code has to get very complex to handle all the combinations. Ray -- http://mail.python.org/mailman/listinfo/python-list
Re: any python module to calculate sin, cos, arctan?
Shi Mu wrote: > any python module to calculate sin, cos, arctan? The other answers in this thread point you to the standard modules. If you need arbitrary precision floating point versions of these functions check out: http://calcrpnpy.sourceforge.net/clnumManual.html -- http://mail.python.org/mailman/listinfo/python-list
Re: CRC16
Tuvas wrote: > Anyone know a module that does CRC16 for Python? I have an aplication > that I need to run it, and am not having alot of sucess. I have a > program in C that uses a CRC16 according to CCITT standards, but need > to get a program that tests it with python as well. Thanks! > Try this one http://crcmod.sourceforge.net/ It will do what you want as long as you know what polynomial to use and what type of algorithm. I think you want the CCITT polynomial with a bit-reverse algorithm. If that is the case, the following will generate the Python function you want (assumes you want to seed the CRC calculation with the starting value of 0x). import crcmod crc16 = crcmod.mkCrcFun(0x11021, 0x, True) Now compute the crc of a data string as crc = crc16(data) -- http://mail.python.org/mailman/listinfo/python-list
Re: 2.3 -> 2.4: long int too large to convert to int
Grant Edwards wrote: > I give up, how do I make this not fail under 2.4? > > fcntl.ioctl(self.dev.fileno(),0xc0047a80,struct.pack("HBB",0x1c,0x00,0x00)) > > I get an OverflowError: long int too large to convert to int > > ioctl() is expecting a 32-bit integer value, and 0xc0047a80 has > the high-order bit set. I'm assuming Python thinks it's a > signed value. How do I tell Python that 0xc0047a80 is an > unsigned 32-bit value? > Everyone seems to be suggesting that the fix for the problem is to somehow cobble together some way of forcing an unsigned integer into a signed integer (what you would do with a cast in C). However, if I understand the long<->int consolidation this is not consistent with that effort. As far as I can tell, the underlying problem is that the C routine fcntl.ioctl is expecting a signed integer. These are the kinds of problems that need to be fixed. The function should be asking for an unsigned integer. This is possible with the C API at least since Python 2.3. Without these fixes, the long<->int consolidation is going to continue to produce frustration. There are many functions in the standard library that you would expect to take unsigned integers but actually specify signed integers. -- http://mail.python.org/mailman/listinfo/python-list
Find roots of ill-conditioned polynomials
If you are using the root finder in Numeric, and are having problems, check out the root finder in the ratfun module. My testing indicates that it will give the exact roots of a Wilkinson polynomial of degree 100. For more information see http://calcrpnpy.sourceforge.net/ratfun.html -- http://mail.python.org/mailman/listinfo/python-list
Re: Lossless Number Conversion
Chris Spencer wrote: > Is there any library for Python that implements a kind of universal > number object. Something that, if you divide two integers, generates a > ratio instead of a float, or if you take the square root of a negative, > generates a complex number instead of raising an exception? Lisp has > something like this, and it makes number crunching much more convenient. > > Chris If you are on any Unix-like platform, you might want to check out clnum. It works like the gmpy package but has complex versions of rationals and arbitrary precision floats. http://calcrpnpy.sourceforge.net/clnum.html -- http://mail.python.org/mailman/listinfo/python-list
Class Library for Numbers
I have just released a new module that interfaces the Class Library for Numbers (CLN) to Python. The CLN library is a C++ library that provides rational and arbitrary precision floating point numbers in real and complex form. The clnum module exposes these types to Python and also provides arbitrary precision replacements for the standard math functions in real and complex forms. For more information see http://calcrpnpy.sourceforge.net/clnum.html Ray Buvel -- http://mail.python.org/mailman/listinfo/python-list
Windows Porting Help Requested
I am preparing to release an extension module that interfaces Python to the Class Library for Numbers (http://www.ginac.de/CLN/). This module will provide Python types for arbitrary precision floating point numbers, rational numbers, and their complex counterparts. The module also includes most of the functions found in the Python math and cmath libraries. This module will be useful in applications where gmpy (http://gmpy.sourceforge.net/) doesn't have enough capability (e.g. extended precision trig, complex numbers, etc.). I would like to make this module available to Windows users but have neither the development environment nor the interest to get the module to build for the standard Python distribution. I am requesting the help of a developer who is familiar with building extension modules and understands C++ porting issues. I don't think my code is the issue, since it builds with distutils. However, it depends on two libraries (CLN and GMP) that look like they have porting issues to a Windows platform. I suspect they can be made to work with some of the GNU tools on Windows. The challenge is making an extension module that contains all the required parts for the standard Python distribution. If you are a developer with the required skills and the time, I would appreciate your help. -- http://mail.python.org/mailman/listinfo/python-list
Re: python -i (interactive environment)
I posted the following a while back. I think this is what you are looking for. This can be done fairly easily by creating a module (lets call it interactive) with the following code in it. --- import sys,os def debug_exception(type, value, traceback): # Restore redirected standard I/O sys.stdin = sys.__stdin__ sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ # Kick the interpreter into interactive mode and call the original # exception handler. os.environ['PYTHONINSPECT'] = '1' sys.__excepthook__(type, value, traceback) sys.excepthook = debug_exception --- Now if you import this module and raise an unhandled exception, you will be in interactive mode. In other words, I think the following script does what you are asking for. --- import interactive raise RuntimeError('Interactive Mode') --- This also has the advantage that if there are no unhandled exceptions in your script, the script runs and terminates normally. Enjoy, Ray Buvel Joe wrote: Hi Pierre, Thanks for the reply, but I am not on Unix and it even if I was that solution it does not achieve the desired results. I want the script to decide whether to fall back to the interactive prompt. You solution makes it ALWAYS fall back to the interactive prompt. I want to do something like: try: # execute code except MyExceptionOccurred, except_msg: # fall to interactive prompt. In other words I want to have my program to determine whether the interactive prompt to be displayed or not. Thanks! "Pierre Barbier de Reuille" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] Very simple is you're on UNIX ... You juste have to put at the beginnin of your file : #!/usr/bin/python -i And it juste does what you want :) Pierre Joe a écrit : When you run "python -i scriptname.py" after the script completes you left at the interactive command prompt. Is there a way to have this occur from a running program? In other words can I just run scriptname.py (NOT python -i scriptname.py) and inside of scriptname.py I decide that I want to fall back to the interactive prompt? I've searched and so far the only thing I've come up with is to use pdb, but that is not exactly the same as the interactive prompt. Is there any way to do it that I have missed? Thanks. -- http://mail.python.org/mailman/listinfo/python-list
Re: any Python equivalent of Math::Polynomial::Solve?
Alex Renelt wrote: Alex Renelt wrote: in addition: I'm writing a class for polynomial manipulation. The generalization of the above code is: definitions: 1.) p = array([a_0, a_i, ..., a_n]) represents your polynomial P(x) = \sum _{i=0} ^n a_i x^i 2.) deg(p) is its degree 3.) monic(p) makes P monic, i.e. monic(p) = p / p[:-1] then you get: from numarray import * import numarray.linear_algebra as la def roots(p): p = monic(p); n = deg(p) M = asarray(zeros((n,n)), typecode = 'f8') # or 'c16' if you need complex coefficients M[:-1,1:] = identity(n-1) M[-1,:] = -p[:-1] return la.eigenvalues(M) Alex uhh, I made a mistake: under definitions, 3.) its "monic(p) = p / p[-1]" of course Alex Alex, If you want a class for polynomial manipulation, you should check out my ratfun module. http://calcrpnpy.sourceforge.net/ratfun.html Ray -- http://mail.python.org/mailman/listinfo/python-list
Re: any Python equivalent of Math::Polynomial::Solve?
Just wrote: SciPy indeed appear to contain a solver, but I'm currently stuck in trying to _get_ it for my platform (OSX). I'm definitely not going to install a Fortran compiler just to evaluate it (even though my name is not "Ilias" ;-). Also, SciPy is _huge_, so maybe a Python translation of that Fortran code or your Perl code will turn out to be more attractive after all... Just The GNU Scientific Library has a nice root finder for polynomials with real coefficients. I have wrapped this with Pyrex to work with my ratfun module see: http://calcrpnpy.sourceforge.net/ratfun.html If this will suit your needs, I can send you an alpha release of the package with the root finder. It is not pure Python. I requires Pyrex and a C compiler to install. My guess is that it will work on OSX as well as it does on Linux. This functionality will be included in the next release of the ratfun package but I still have to unit test a number of components and update the documentation. Consequently, an official release will not happen soon. Ray -- http://mail.python.org/mailman/listinfo/python-list
Re: newbie question on python 2.4 and tkinter
David Joyner wrote: Hi: I'm trying to compile python 2.4 with tkinter. (I'm trying to write a gui interface which calls a program called GAP - I'm hoping to use subprocess, a python 2.4 module, since I was getting deadlocks using popen). The instructions at the python web site said basically to edit the /Modules/Setup file and recompile. The edits consist of determining with location of various Tcl/Tk libraries, header files, etc. I was wondering if anyone could help out with how to determine these. I have a suse 9.1 box and a new debian laptop, both of which I would like to configure with python 2.4 and tkinter. - David Joyner The problem is most likely missing header files for the Tcl/Tk libraries. Most Linux distributions (including SuSE) package the required files separately from the libraries. In Yast, look for packages with the same name and a -dev suffix. Once you have installed these, tkinter will be automatically built without any need to edit /Modules/Setup. If you are running Debian testing or unstable, you just need to install the python2.4 and python2.4-tk modules. If you need to compile extension modules, you will also need python2.4-dev. Hope this helps. Ray Buvel -- http://mail.python.org/mailman/listinfo/python-list
Re: DOS problem (simple fix??)
Robert Brewer wrote: Gavin Bauer wrote: My DOS window (running in windows ME) closes the second it finishes running my programs. As you can imagine, this makes it hard to see the results. I've gotten in the habit of putting raw_input("Press enter to exit") at the end of every program, and in addition to being pain in the butt, it often fails to work. Being new to programming in general, I make more mistakes than most people. My programs often have errors before they get to my raw_input command. They then display the error and immediately close. It is naturally a lot easier to fix an error when you know what the error is. This makes debugging even more annoying than it ordinarily would be, if you can imagine that. I've heard that it should be a simple preference fix, but I've asked around and no one seems to know how. Thank you, and please make all answers simple enough to be understood by a highschool student and his father :) . For another solution try: http://www.24help.info/showthread.php?t=149725 -- http://mail.python.org/mailman/listinfo/python-list
[ANN] ratfun-1.0 Polynomials And Rational Functions
The ratfun module provides classes for defining polynomial and rational function (ratio of two polynomials) objects. These objects can be used in arithmetic expressions and evaluated at a particular point. Home page: http://calcrpnpy.sourceforge.net/ratfun.html Note: If you are using rpncalc-1.2 or later, this module is already included. This release is for folks who don't want rpncalc. -- http://mail.python.org/mailman/listinfo/python-list
[ANN] rpncalc-1.2 RPN Calculator For Python
The rpncalc package adds an interactive Reverse Polish Notation (RPN) interpreter to Python. This interpreter allows the use of Python as an RPN calculator. You can easily switch between the RPN interpreter and the standard Python interpreter. Home page: http://calcrpnpy.sourceforge.net/ Changes in 1.2 * Added ratfun module that provides polynomial and rational function classes. These classes support mixed arithmetic where numbers, polynomials, and rational functions can be combined in a Python expression. * Incorporate a syntax that allows entering polynomials and rational functions from the RPN interpreter. -- http://mail.python.org/mailman/listinfo/python-list
Re: exposing C array to python namespace: NumPy and array module.
Bo Peng wrote: Dear list, I am writing a Python extension module that needs a way to expose pieces of a big C array to python. Currently, I am using NumPy like the following: PyObject* res = PyArray_FromDimsAndData(1, int*dim, PyArray_DOUBLE, char*buf); Users will get a Numeric Array object and can change its values (and actually change the underlying C array). This works fine. However, when I deliver my module, I find NumPy is unnecessarily large for this simple task. As a matter of fact, I had to build from source NumPy, ATLAS etc on Solaris, Linux, Mac and if a user would like to use my module, he has to do the same thing! Python's array module is built-in, easy to use, but *without* a FromLenAndData function! Even the buffer interface provides only 'get buffer' but no 'set buffer' functions. Could anyone tell me how I can create an array object from existing data? Some vague ideas might be used: 1. PyCObject (I do not really understand the manual), 2. copy and modify arraymodule.c to my project (doable at all? License issue?) 3. Create an array object and hack it. (no api to do this.) I would strongly suggest an arraymodule.h with Array_FromLenAndData. Many thanks in advance. Bo I don't know how much this will help but when I am faced with a problem like this, I use Pyrex and look at the generated code. All you need to do in Pyrex is import the array module and create your array like you would in Python. To get the data into the array you will need to use the buffer interface and fill it in from your C code. -- http://mail.python.org/mailman/listinfo/python-list
[ANN] rpncalc-1.1 RPN Calculator For Python
The rpncalc package adds an interactive Reverse Polish Notation (RPN) interpreter to Python. This interpreter allows the use of Python as an RPN calculator. You can easily switch between the RPN interpreter and the standard Python interpreter. Home page: http://calcrpnpy.sourceforge.net/ Changes in 1.1 * Stack checking gives an appropriate error message instead of aborting to the Python interpreter. * Exceptions are handled within the RPN interpreter instead of aborting to the Python interpreter. This makes recovery much simpler since there are very few situations that actually require the Python interpreter for recovery. * Vocabularies are now ordered by priority. A complete list of all the currently defined vocabularies is available from within the interpreter. * User can select degrees or radians mode for trig functions. * Added extended precision floating point using the gmpy module. * Added a const module that provides some physical constants in SI (MKS) units. * Converted to a Python package to simplify future expansion. -- http://mail.python.org/mailman/listinfo/python-list
Re: A rational proposal
Alex Martelli wrote: Raymond L. Buvel <[EMAIL PROTECTED]> wrote: Mike Meyer wrote: PEP: XXX Title: A rational number module for Python I think it is a good idea to have rationals as part of the standard distribution but why not base this on the gmpy module (https://sourceforge.net/projects/gmpy)? That module already provides gmpy wraps GMP, which is covered by LGPL; therefore, gmpy itself is LGPL, and thus, sadly, cannot be included with python (otherwise, speaking as gmpy's author, I'd be glad to fix its design to meet your objections). Alex Since the LGPL was designed to allow propritary software to link to a LGPL module, I don't see why any software under a free license like Python cannot link to the GMP library. The PSF may want you to release gmpy under a dual license if it is incorporated into the Python standard library but I don't see why that cannot be done. Ray -- http://mail.python.org/mailman/listinfo/python-list
Re: A rational proposal
Mike Meyer wrote: PEP: XXX Title: A rational number module for Python I think it is a good idea to have rationals as part of the standard distribution but why not base this on the gmpy module (https://sourceforge.net/projects/gmpy)? That module already provides good performance. However, it does a few things that may not be good ideas. 1. Floats are converted to rationals. I think your proposal of rational to float is better. 2. Fails with a TypeError when used with a complex. Again Your proposal provides a better solution. 3. Fractional powers fail with a ValueError if the root is not exact. You do not address this in your proposal. Could silently convert to float in this case but is it better to force the user to be explicit and use the float() operation? Ray Buvel -- http://mail.python.org/mailman/listinfo/python-list