Appending to a file using Python API

2010-07-08 Thread lavanya
Hello all,

How do you append to a file using Python os::file APIs. So that it
appends to the content of the file. Not adding the content to the new
line. But just appends next to the exiting content of the file.

Example : current content of file
A B C
if we append D to it, it should be
A B C D

Not like:
A B C
D

regards,
lavanya
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: C interpreter in Lisp/scheme/python

2010-07-08 Thread Nick Keighley
On 7 July, 17:38, Rivka Miller  wrote:

> Although C comes with a regex library,

C does not come with a regexp library


> Anyone know what the first initial of L. Peter Deutsch stand for ?

Laurence according to wikipedia (search time 2s)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: C interpreter in Lisp/scheme/python

2010-07-08 Thread Nick Keighley
On 8 July, 08:08, Nick Keighley 
wrote:
> On 7 July, 17:38, Rivka Miller  wrote:


> > Anyone know what the first initial of L. Peter Deutsch stand for ?
>
> Laurence according to wikipedia (search time 2s)

oops! He was born Laurence but changed it legally to "L." including
the dot
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Appending to a file using Python API

2010-07-08 Thread Steven D'Aprano
On Wed, 07 Jul 2010 23:55:46 -0700, lavanya wrote:

> Hello all,
> 
> How do you append to a file using Python os::file APIs. So that it
> appends to the content of the file. Not adding the content to the new
> line. But just appends next to the exiting content of the file.
> 
> Example : current content of file
> A B C
> if we append D to it, it should be
> A B C D
> 
> Not like:
> A B C
> D

f = open("myfile.txt", "a")
f.write("D")

will append to the end of myfile.txt, regardless of what is already in 
myfile.txt. If it ends with a newline:

"A B C\n"

then you will end up with:

"A B C\nD"

If there is no newline, you will end up with:

"A B CD"


If you need anything more complicated than that, the easiest solution is 
something like this:


# read the entire file
# modify the last line in memory
# write the lines back to the file
f = open("myfile.txt", "r")
lines = f.readlines()
f.close()
if not lines:
# file exists but is empty
lines.append('')
last_line = lines[-1]
last_line = last_line.rstrip()  # remove all trailing whitespace
if last_line:
last_line += " D\n"
else:
last_line = "D\n"
lines[-1] = last_line
f = open("myfile.txt", "w")
f.writelines(lines)
f.close()



-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How do I add method dynamically to module using C API?

2010-07-08 Thread Martin v. Loewis
> I tried (1) adding a __del__, but no dice, I guess
> because it wasn't really an object method but just a free function in a
> module; and (2) the m_free callback in the module definition structure,
> but it was not called.

m_free will be called if the module object gets deallocated. So if
m_free really isn't called, the module got never deallocated.

Regards,
Martin
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Steven D'Aprano
On Thu, 08 Jul 2010 06:04:33 +0200, David Cournapeau wrote:

> On Thu, Jul 8, 2010 at 5:41 AM, Zooko O'Whielacronx 
> wrote:
>> I'm starting to think that one should use Decimals by default and
>> reserve floats for special cases.
>>
>> This is somewhat analogous to the way that Python provides
>> arbitrarily-big integers by default and Python programmers only use
>> old-fashioned fixed-size integers for special cases, such as
>> interoperation with external systems or highly optimized pieces (in
>> numpy or in native extension modules, for example).
> 
> I don't think it is analogous at all. Arbitrary-bit integers have a
> simple tradeoff: you are willing to lose performance and memory for
> bigger integer. If you leave performance aside, there is no downside
> that I know of for using big int instead of "machine int".

Well, sure, but that's like saying that if you leave performance aside, 
there's no downside to Bubblesort instead of Quicksort.

However, I believe that in Python at least, the performance cost of 
arbitrary-sized longs is quite minimal compared to the benefit, at least 
for "reasonable" sized ints, and so the actual real-world cost of 
unifying the int and long types is minimal.

On the other hand, until Decimal is re-written in C, it will always be 
*significantly* slower than float.

$ python -m timeit "2.0/3.0"
100 loops, best of 3: 0.139 usec per loop
$ python -m timeit -s "from decimal import Decimal as D" "D(2)/D(3)"
1000 loops, best of 3: 549 usec per loop

That's three orders of magnitude difference in speed. That's HUGE, and 
*alone* is enough to disqualify changing to Decimal as the default 
floating point data type.

Perhaps in the future, if and when Decimal has a fast C implementation, 
this can be re-thought.


> Since you are
> using python, you already bought this kind of tradeoff anyway.
> 
> Decimal vs float is a different matter altogether: decimal has downsides
> compared to float. First, there is this irreconcilable fact that no
> matter how small your range is, it is impossible to represent exactly
> all (even most) numbers exactly with finite memory - float and decimal
> are two different solutions to this issue, with different tradeoffs.

Yes, but how is this a downside *compared* to float? In what way does 
Decimal have downsides that float doesn't? Neither can represent 
arbitrary real numbers exactly, but if anything float is *worse* compared 
to Decimal for two reasons:

* Python floats are fixed to a single number of bits, while the size of 
Decimals can be configured by the user;

* floats can represent sums of powers of two exactly, while Decimals can 
represent sums of powers of ten exactly. Not only does that mean that any 
number exactly representable as a float can also be exactly represented 
as a Decimal, but Decimals can *additionally* represent exactly many 
numbers of human interest that floats cannot.


> Decimal are more "intuitive" than float for numbers that can be
> represented as decimal - but most numbers cannot be represented as
> (finite) decimal.

True, but any number that can't be, also can't be exactly represented as 
a float either, so how does using float help?

[...] 
>> And most of the time (in my experience) the inputs and outputs to your
>> system and the literals in your code are actually decimal, so
>> converting them to float immediately introduces a lossy data conversion
>> before you've even done any computation. Decimal doesn't have that
>> problem.
> 
> That's not true anymore once you start doing any computation, if by
> decimal you mean finite decimal. And that will be never true once you
> start using non trivial computation (i.e. transcendental functions like
> log, exp, etc...).

But none of those complications are *inputs*, and, again, floats suffer 
from exactly the same problem.



-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The real problem with Python 3 - no business case for conversion

2010-07-08 Thread Ben Finney
"Martin v. Loewis"  writes:

> > The point, one more time with feeling, is that the incompatibilities
> > between 2.x and 3.x will *increase* over time.
>
> I think this is unfounded, and actually false.

Since many other people have responded with similar sentiments, I can
only think I must have been expressing myself very poorly today. I agree
with everything you say here, but it doesn't go against what I've been
saying.

If I cared about the issue more, I might have another crack at putting
my meaning into words; but those who want to support a broad stride of
Python versions are more motivated than I to figure it out, so instead I
depart the field.

-- 
 \ “People's Front To Reunite Gondwanaland: Stop the Laurasian |
  `\  Separatist Movement!” —wiredog, http://kuro5hin.org/ |
_o__)  |
Ben Finney
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The real problem with Python 3 - no business case for conversion (was "I strongly dislike Python 3")

2010-07-08 Thread Steven D'Aprano
On Wed, 07 Jul 2010 14:10:57 -0700, Brendan Abel wrote:

> The entire fact that 3.x was *designed* to be incompatible should tell
> you that supporting 2.x and 3.x with a single code base is a bad idea,
> except for the very smallest of projects.

I don't see that follows at all. If the incompatibilities are designed to 
be mechanically translatable (e.g. "x.keys()" -> "list(x.keys())" then 
you can start with a single code-base and run the translator.

If only there were some sort of Python program that could be used to 
translate code from 2 to 3... 

*wink*



-- 
Steven
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python 2.7 released

2010-07-08 Thread Tim Golden

On 08/07/2010 03:17, imageguy wrote:



I, too, have multiple versions installed -- newer ones for running code
I haven't upgraded; older ones for compatibility testing where needed.
I just install to the default c:\pythonxy directories (although I like
the idea of a common root) and I put NTFS hardlinks into my general
c:\tools directory which is on the path. The out-of-context hardlinks
work because of the registry settings which pick up the correct context
for each version.


Sorry to be daft here, but what do you mean by a "hardlink" ?
A windows "Shortcut" ?

I have just installed 2.7 and want to start upgrading some code, but
alas still want to maintain some 2.5 code too.


Hardlinks have always been present on NTFS, just not very widely advertised.
They are a way of saying that *this* file and *that* file are actually the
*same* file. (They must be on the same volume as they underlying 
implementation

relies on pointing to the volume's master index -- the MFT).

They're not copies: if one changes, the other changes.
They're not shortcuts, which are a Shell (ie Desktop) mechanism, not a 
filesystem one


I have hardlinks called python26.exe, python31.exe, etc. which point to
c:\python26\python.exe, c:\python31\python.exe etc. and also
a python3.exe which is another link to c:\python31\python.exe but which will
move when python 3.2 is released.

However, this is simply a convenience I use. It's perfectly possible to have
and to use several versions of Python concurrently without this. How you do
it depends on your working practice: whether you use an IDE or 
double-click on

.py files or run from a cmd window, etc.

TJG
--
http://mail.python.org/mailman/listinfo/python-list


simple python deployment tool

2010-07-08 Thread King
Hi,

I am writing a python package deployment tool for linux based
platforms. I have tried various existing
tool sets but none of them is up to the mark and they have their own
issues. Initially I'll start with simple approach.

1. Find all the modules/packages and copy to "lib" directory.
2. Find python's *.so dependencies(system libs) and copy them to
"syslib"
3. Copy python(executable) and libpython2.6.so.1.0 into "dist"
directory.
4. Set up temp environment
5. Run main script using "python .py"

The idea is to produce a cleaner directory structure. Neither I am
creating a boot loader nor I am converting main script
file into executable. It's plain vanilla stuff.

Using above steps I have pulled down a package using wxPython's demo
example "pySketch.py". You can download the archive from here:
http://rapidshare.com/files/405255400/dist.zip
(Note : It's for linux users.)

After extracting the contents, run the executable file using "./run".
This file sets temporary environment variables and execute
"pySketch.py". I apologize for the archive size as all the systems
libs are also included.

This is eventually not working. I think I am not able to set up
temporary environment properly or may be missing some other
stuff. I would appreciate if some one can point out mistakes.

Here is the practical approach:
/lib  (all python libs, files and third party modules.)
/syslib (all the system libs. libX*.*, cairo, etc.)
python (executable)
pySketch.py
run.sh

Contents of "run.sh".
--
set LD_LIBRARY_PATH="syslib/"
set PYTHONPATH="/lib"
python pySketch.py

Cheers

Prashant
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The real problem with Python 3 - no business case for conversion (was "I strongly dislike Python 3")

2010-07-08 Thread Giampaolo Rodolà
2010/7/8 Michele Simionato :
> On Jul 7, 10:55 pm, Carl Banks  wrote:
>> On Jul 7, 1:31 am, Paul McGuire  wrote:
>> > I just
>> > couldn't get through on the python-dev list that I couldn't just
>> > upgrade my code to 2.6 and then use 2to3 to keep in step across the
>> > 2-3 chasm, as this would leave behind my faithful pre-2.6 users.
>
> This is a point I do not understand. My recent module plac is meant to
> work from Python 2.3 to Python 3.1 and to this goal I make use of 2to3
> at the *client* side.
> Users of Python 2.X get the original code with no magic whatsoever;
> users of Python 3.X
> get the same code, but at installation time 2to3 is run by the
> setup.py script. The mechanism requires distribute to be installed,
> but I would say that having distribute is a must for Python 3.X users;
> Python 2.X users do not need anything, so the approach is backward
> compatible. I thought this was the recommended way of using 2to3 and
> so far is working for me.
>
>            M. Simionato
> --
> http://mail.python.org/mailman/listinfo/python-list
>

I used the same approach (2.x default code base which gets translated
by 2to3 at installation time) and I managed to do this with distutils
alone by doing a little hack in setup.py.
Take a look at:
http://code.google.com/p/psutil/source/browse/tags/release-0.1.3/setup.py#11

Regards,

--- Giampaolo
http://code.google.com/p/pyftpdlib
http://code.google.com/p/psutil
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: C interpreter in Lisp/scheme/python

2010-07-08 Thread Pascal J. Bourguignon
Nick Keighley  writes:

> On 8 July, 08:08, Nick Keighley 
> wrote:
>> On 7 July, 17:38, Rivka Miller  wrote:
>
>
>> > Anyone know what the first initial of L. Peter Deutsch stand for ?
>>
>> Laurence according to wikipedia (search time 2s)
>
> oops! He was born Laurence but changed it legally to "L." including
> the dot

Too bad, "Laurence" is a nice name.

-- 
__Pascal Bourguignon__ http://www.informatimago.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How do I add method dynamically to module using C API?

2010-07-08 Thread Alf P. Steinbach /Usenet

* Martin v. Loewis, on 08.07.2010 09:13:

I tried (1) adding a __del__, but no dice, I guess
because it wasn't really an object method but just a free function in a
module; and (2) the m_free callback in the module definition structure,
but it was not called.


m_free will be called if the module object gets deallocated. So if
m_free really isn't called, the module got never deallocated.


Thanks again. I don't know what I did wrong. Now it's called. :-)

But I wasted much time googling to try to find out the /responsibilities/ of the 
m_free callback, and what its void* argument was. E.g., should it deallocate the 
module object, and if so, via what deallocation routine? I found some info, but 
even your PEP, otherwise clear, was silent about this fine point.


Finally I looked at the source code that invokes it and found that it has no 
responsibilities whatsoever, just a use-as-you-wish finalization callback. Nice!


But I think that could be more clear in the docs...

Code, for those who might be interested:



// progrock.cppy  --  "C++ plus Python"
// A simple C++ framework for writing Python 3.x extensions.
//
// Copyright (C) Alf P. Steinbach, 2010.

#ifndef CPPY_MODULE_H
#define CPPY_MODULE_H
#include 


//- Dependencies:

#include "Ptr.h"
#include 
#include 



//- Interface:

namespace progrock{ namespace cppy {

namespace detail {
struct InstanceData
{
std::list< PyMethodDef >methodDefs;
};

inline void* instanceMemoryOf( PyObject* pObject )
{
void* const result = PyModule_GetState( pObject );
assert( result != 0 );
return result;
}

inline InstanceData*& instanceDataPtrOf( PyObject* pObject )
{
return *reinterpret_cast< InstanceData** >(
instanceMemoryOf( pObject )
);
}

inline void on_freeModule( void* p )
{
PyObject* const pModule = reinterpret_cast< PyObject* >( p );
InstanceData* const pData   = instanceDataPtrOf( pModule );

delete pData;
printf( "Deallocated!\n" ); // TODO: Remove.
}

inline PyModuleDef* moduleDefPtr()
{
static PyMethodDef methodDefs[] = {
//...
//{ "system", &pyni_system, METH_VARARGS, "Execute a shell 
command." },

//{ "__del__", &onModuleDestroy, METH_NOARGS, "Destructor" },
//...
{ NULL, NULL, 0, NULL } // Sentinel
};

static PyModuleDef moduleDef = {
PyModuleDef_HEAD_INIT,
"cppy", // name of module
NULL,   // m_doc,   // module documentation in UTF-8
sizeof(void*), // size of per-interpreter state of the 
module,
//or -1 if the module keeps state in global 
variables.

methodDefs,
NULL,   // m_reload
NULL,   // m_traverse
NULL,   // m_clear
&on_freeModule  // m_free
};

return &moduleDef;
}
}

class Module
{
private:
Ptr p_;
detail::InstanceData*   data_;

detail::InstanceData*& instanceDataPtr() const
{
return detail::instanceDataPtrOf( p_.get() );
}

public:
Module()
: p_( ::PyModule_Create( detail::moduleDefPtr() ) )
, data_( 0 )
{
assert( detail::moduleDefPtr()->m_size == sizeof( void* ) );
(p_.get() != 0) || cppx::throwX( "Module::: failed" );
instanceDataPtr() = data_ = new detail::InstanceData();
}

PyObject* rawPtr() const{ return p_.get(); }
PyObject* release() { return p_.release(); }

void setDocString( wchar_t const s[] )
{
Ptr const v = ::PyUnicode_FromWideChar( s, -1 );
(v.get() != 0)
|| cppx::throwX( "Module::setDocString: PyUnicode_FromWideChar 
failed" );


::PyObject_SetAttrString( p_.get(), "__doc__", v.get() )
>> cppx::is( cppx::notMinusOne )
|| cppx::throwX( "Module::setDocString: PyObject_SetAttrString 
failed" );

}

void addRoutine( char const name[], PyCFunction f, char const doc[] = 
"" )
{
PyMethodDef const defData = { name, f, METH_VARARGS, doc };

data_->methodDefs.push_back( defData );
try
{
PyMethodDef* const  pDef= &data_->methodDefs.back();

Ptr const   pyName  = ::PyUnicode_FromString( name );
(pyName.get() != 0)
|| cppx::throwX( "Module::addRoutine: PyUnicode_FromString 
faile

Re: delegation pattern via descriptor

2010-07-08 Thread Bruno Desthuilliers

kedra marbun a écrit :

On Jul 7, 2:46 am, Bruno Desthuilliers
 wrote:

Gregory Ewing a écrit :


Bruno Desthuilliers wrote:

kedra marbun a écrit :

if we limit our discussion to py:
why __{get|set|delete}__ don't receive the 'name' & 'class' from
__{getattribute|{set|del}attr}__
'name' is the name that is searched

While it would have been technically possible, I fail to imagine any use
case for this.

I think he wants to have generic descriptors that are
shared between multiple attributes, but have them do
different things based on the attribute name.

I already understood this, but thanks !-)

What I dont understand is what problem it could solve that couldn't be
solved more simply using the either _getattr__ hook or hand-coded
delegation, since such a descriptor would be so tightly coupled to the
host class that it just doesn't make sense writing a descriptor for this.


yeah, i finally can agree descriptor isn't supposed to be used as
delegation in general, it should be the job of __getattr__

however i still think passing name would open up some other
possibilities of use


Nothing prevents you to pass a "name" to the descriptor instance when 
instanciating it, ie:


class Desc(object):
def __init__(self, name):
self.name = name
   def __get__(self, inst, cls):
   # ...
   def __set__(self, inst, value):
   # ...


class Foo(object):
bar = Desc("bar")
baaz = Desc("baaz")

Ok, this is not necessarily what you were looking for, but it's IMHO 
less brittle than relying on which attribute name was looked up (which 
is something the descriptor shouldn't have to care about).




btw, is there a common approach to let the interface of a class that
uses __getattr__, to include names that are delegated?


In Python 2.x, not that I know (but it may have passed under my radar). 
If what you want it to automate delegation of a set of methods without 
too much manual coding, you can use a custom metaclass that will add the 
relevant methods to the class, based on (ie) a list (or mapping) of 
methods names. But that might be a bit overkill.



class A:
def do_this(self): ...

class B:
a = A()


I don't see the point of using delegation on a class attribute. That's 
typically what inheritance is for.



def do_that(self): ...

def __getattr__(self, name):
try:
return types.MethodType(getattr(self.a, name), self)


Err... Did you try the simple way ?
return getattr(self.a, name)

--
http://mail.python.org/mailman/listinfo/python-list


Howto write XML file with comments?

2010-07-08 Thread Alexander Eisenhuth

Hello,

- I've to write a XML document including comments
- the document should be formatted that it could be viewed with a text editor

What is the fastest (time for realization) approach doing it in python 2.5?

Any help or hints are very welcome

Thanks
Alexander
--
http://mail.python.org/mailman/listinfo/python-list


Re: simple python deployment tool

2010-07-08 Thread Alexander Kapps

King wrote:

Hi,

I am writing a python package deployment tool for linux based
platforms. I have tried various existing
tool sets but none of them is up to the mark and they have their own
issues. Initially I'll start with simple approach.


I'm sorry, but your approach is not going to work. The Right Way(tm) 
is to not ship any external libraries, but let the user install the 
dependencies with the distro's package manager. And to not try to 
build custom packages, but to let the package maintainers  of the 
different distros package your application for you.



1. Find all the modules/packages and copy to "lib" directory.
2. Find python's *.so dependencies(system libs) and copy them to
"syslib"


That would include all the way down to libc, your archive is going 
to be huge, but the actual problem is, what if the libc isn't 
compatible with the kernel, what if the WX, GTK, X11, etc libraries 
aren't compatible with the running Xserver?


End of the story is, you would need to package a minimal (but almost 
complete) Linux system into your package, which of course is not 
want you want.



3. Copy python(executable) and libpython2.6.so.1.0 into "dist"
directory.
4. Set up temp environment
5. Run main script using "python .py"

The idea is to produce a cleaner directory structure. Neither I am
creating a boot loader nor I am converting main script
file into executable. It's plain vanilla stuff.


It's not vanilla stuff, but a very hard problem. In fact you are 
fighting against the whole system structure.


--
http://mail.python.org/mailman/listinfo/python-list


Re: Howto write XML file with comments?

2010-07-08 Thread Stefan Behnel

Alexander Eisenhuth, 08.07.2010 11:08:

- I've to write a XML document including comments


"write" in the sense of typing in a text editor? Or constructing one 
programmatically in memory? Or ... ?


And what kind of data from what kind of source do you want to put into the 
document?


All of that has an impact on the 'right' answer.



- the document should be formatted that it could be viewed with a text
editor

What is the fastest (time for realization) approach doing it in python 2.5?


If you mean to build an XML document programmatically, potentially using 
data that you get from somewhere, take a look at cElementTree. There's also 
a short recipe for pretty printing the tree before writing it out.


Stefan

--
http://mail.python.org/mailman/listinfo/python-list


Re: simple python deployment tool

2010-07-08 Thread King
On Jul 8, 2:21 pm, Alexander Kapps  wrote:
> King wrote:
> > Hi,
>
> > I am writing a python package deployment tool for linux based
> > platforms. I have tried various existing
> > tool sets but none of them is up to the mark and they have their own
> > issues. Initially I'll start with simple approach.
>
> I'm sorry, but your approach is not going to work. The Right Way(tm)
> is to not ship any external libraries, but let the user install the
> dependencies with the distro's package manager. And to not try to
> build custom packages, but to let the package maintainers  of the
> different distros package your application for you.

Yes, you an do this by creating a .deb package that will take care of
installing the required libraries.
It may possible that either required version is not available in the
distro's repository or the one available is
older one then required. So best deal would be to ship at least all
the python's libs along with your package.

> > 1. Find all the modules/packages and copy to "lib" directory.
> > 2. Find python's *.so dependencies(system libs) and copy them to
> > "syslib"
>
> That would include all the way down to libc, your archive is going
> to be huge, but the actual problem is, what if the libc isn't
> compatible with the kernel, what if the WX, GTK, X11, etc libraries
> aren't compatible with the running Xserver?

You are right here. It seems there is no standard definition of system
libraries on linux. To over come the problem of binary
compatibility, I am using ubuntu (hardy) which is on glibc 2.7. Every
other external python library including python is compiled on
hardy. This is would give you maximum chances that libs would be
compatible in case if you run on any other distro which is using glibc
>=2.7

> End of the story is, you would need to package a minimal (but almost
> complete) Linux system into your package, which of course is not
> want you want.
>
> > 3. Copy python(executable) and libpython2.6.so.1.0 into "dist"
> > directory.
> > 4. Set up temp environment
> > 5. Run main script using "python .py"
>
> > The idea is to produce a cleaner directory structure. Neither I am
> > creating a boot loader nor I am converting main script
> > file into executable. It's plain vanilla stuff.
>
> It's not vanilla stuff, but a very hard problem. In fact you are
> fighting against the whole system structure.

Ok, forget about system libs(libX*.* etc.), I don't know why it sounds
too complicated. I am hoping it should work and eventually it's easier
then tools that create an executable using bootloader. The problem is
in setting the correct python environment.

Prashant



-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Download Microsoft C/C++ compiler for use with Python 2.6/2.7 ASAP

2010-07-08 Thread Christian Heimes
> Really? I wasn't entirely aware of this effect of the "io" module.
> Somehow, without at all paying attention (because certain third party
> modules blocking me for awhile, I never looked close enough), I just
> sort of thought the "io" module was mostly thin wrappers around stdio
> primitives, into a more Pythonic API.

Yes, really. :)
The new io modules doesn't use stdio. It operates solely on file
descriptors and low level functions like open(2) instead of fopen(3).
All high level functions like buffering is implemented in Python (and
some C for speed).

Christian

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: delegation pattern via descriptor

2010-07-08 Thread Gregory Ewing

kedra marbun wrote:

i wonder what are the reasons for
not passing the class on which the descriptor is attached to, what
pattern is encouraged by this?


The same answer applies. It's assumed that you will be
writing a custom piece of code for each attribute of
each class, and giving each one its own descriptor.

By the time you get to the get or set method of a
descriptor, you've already dispatched on both the
class and attribute name. There is not usually any
point in funnelling things back into a single function
and then dispatching on the class or name again.
Passing the class or name would just add overhead that
was unnecessary in the majority of use cases.

--
Greg
--
http://mail.python.org/mailman/listinfo/python-list


Re: Howto write XML file with comments?

2010-07-08 Thread Alexander Eisenhuth

Stefan Behnel schrieb:

Alexander Eisenhuth, 08.07.2010 11:08:

- I've to write a XML document including comments


"write" in the sense of typing in a text editor? Or constructing one 
programmatically in memory? Or ... ?


write means write to a file



And what kind of data from what kind of source do you want to put into 
the document?


Data is present as tags and attributes



All of that has an impact on the 'right' answer.



- the document should be formatted that it could be viewed with a text
editor

What is the fastest (time for realization) approach doing it in python 
2.5?


If you mean to build an XML document programmatically, potentially using 
data that you get from somewhere, take a look at cElementTree. There's 
also a short recipe for pretty printing the tree before writing it out.


Is the API of cElementTree different from ElementTree in the python standard 
library?




Stefan


--
http://mail.python.org/mailman/listinfo/python-list


Re: Howto write XML file with comments?

2010-07-08 Thread Stefan Behnel

Alexander Eisenhuth, 08.07.2010 12:07:

Stefan Behnel schrieb:

Alexander Eisenhuth, 08.07.2010 11:08:

- I've to write a XML document including comments


"write" in the sense of typing in a text editor? Or constructing one
programmatically in memory? Or ... ?


write means write to a file


You seam to imply that it's obvious what you want to do. From the little 
information that you give us, it's not.




And what kind of data from what kind of source do you want to put into
the document?


Data is present as tags and attributes


Whatever that is supposed to mean in this context.



All of that has an impact on the 'right' answer.


... and it still does.



- the document should be formatted that it could be viewed with a text
editor

What is the fastest (time for realization) approach doing it in
python 2.5?


If you mean to build an XML document programmatically, potentially
using data that you get from somewhere, take a look at cElementTree.
There's also a short recipe for pretty printing the tree before
writing it out.


Is the API of cElementTree different from ElementTree in the python
standard library?


Same thing, different import.

Note that both were updated in Py2.7, BTW.

Stefan

--
http://mail.python.org/mailman/listinfo/python-list


Re: C interpreter in Lisp/scheme/python

2010-07-08 Thread Mark Tarver
On 14 June, 00:07, bolega  wrote:
> I am trying to compare LISP/Scheme/Python for their expressiveness.
>
> For this, I propose a vanilla C interpreter. I have seen a book which
> writes C interpreter in C.
>
> The criteria would be the small size and high readability of the code.
>
> Are there already answers anywhere ?
>
> How would a gury approach such a project ?
>
> Bolega

Probably you want to look at this thread

http://groups.google.co.uk/group/comp.lang.lisp/browse_frm/thread/7b1ab36f5d5cce0a/54afe11153025e27?hl=en&lnk=gst&q=minim#54afe11153025e27

where I specified a toy language Minim (much simpler than C) and the
goal was to construct an interpreter for it.  Similar problem.

Many solutions were given in different languages.  The thread is very
long.

One thing you might look at is whether some sort of lexer/parser is
supported in any of your targets.  Qi supports a compiler-compiler Qi-
YACC that allows you to write in BNF which makes this kind of project
much easier.

See

http://www.lambdassociates.org/Book/page404.htm

for an overview

Mark

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python Ireland's pre-PyCon drinks - Wed, 14th July @ Trinity Capital Hotel

2010-07-08 Thread Steve Holden
Vicky Twomey-Lee wrote:
> Hi All,
> 
> Join us for drinks and a chat (a warm-up session to PyCon Ireland ;-) ).
> 
> When: Wed 14th July, from 7pm
> Where: Trinity Capital Hotel
> 
> More details at:
> http://www.python.ie/meetup/2010/python_ireland_meetup_-_july_2010/
> 
Hope you all had a good piss-up! See you a week on Saturday.

regards
 Steve
-- 
Steve Holden   +1 571 484 6266   +1 800 494 3119
DjangoCon US September 7-9, 2010http://djangocon.us/
See Python Video!   http://python.mirocommunity.org/
Holden Web LLC http://www.holdenweb.com/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Howto write XML file with comments?

2010-07-08 Thread Alexander Eisenhuth

Sorry for my little riddle, but you solved it quite good with:

- http://effbot.org/zone/element-lib.htm#prettyprint

and comments are also in ElementTree (xml.etree.ElementTree.Comment)

Thanks

Stefan Behnel schrieb:

Alexander Eisenhuth, 08.07.2010 12:07:

Stefan Behnel schrieb:

Alexander Eisenhuth, 08.07.2010 11:08:

- I've to write a XML document including comments


"write" in the sense of typing in a text editor? Or constructing one
programmatically in memory? Or ... ?


write means write to a file


You seam to imply that it's obvious what you want to do. From the little 
information that you give us, it's not.




And what kind of data from what kind of source do you want to put into
the document?


Data is present as tags and attributes


Whatever that is supposed to mean in this context.



All of that has an impact on the 'right' answer.


... and it still does.



- the document should be formatted that it could be viewed with a text
editor

What is the fastest (time for realization) approach doing it in
python 2.5?


If you mean to build an XML document programmatically, potentially
using data that you get from somewhere, take a look at cElementTree.
There's also a short recipe for pretty printing the tree before
writing it out.


Is the API of cElementTree different from ElementTree in the python
standard library?


Same thing, different import.

Note that both were updated in Py2.7, BTW.

Stefan


--
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Adam Skutt
On Jul 8, 12:53 am, "Zooko O'Whielacronx"  wrote:
> I don't understand. I described two different problems: problem one is
> that the inputs, outputs and literals of your program might be in a
> different encoding (in my experience they have most commonly been in
> decimal). Problem two is that your computations may be lossy. If the
> inputs, outputs and literals of your program are decimal (as they have
> been for most of my programs) then using decimal is better than using
> float because of problem one. Neither has a strict advantage over the
> other in terms of problem two.

I can't think of any program I've ever written where the inputs are
actually intended to be decimal.  Consider a simple video editing
program, and the user specifies a frame rate 23.976 fps.  Is that what
they really wanted?  No, they wanted 24000/1001 but didn't feel like
typing that.  It should be instructive and telling that mplayer now
strongly prefers the rational expressions over the decimal ones.  Just
because you haven't rounded your input in parsing it doesn't change
the fact your input may have be rounded before it was presented to the
program, which is the reality of the matter more often than not.

Even in fields where the numbers are decimal, like finance, the rules
are considerably more complicated than what you were taught in the
"schoolbook".  This is one of the reasons IBM can still make a killing
selling mainframes, they got all of those rules right decades ago.

> > And that will be never true once you
> > start using non trivial computation (i.e. transcendental functions
> > like log, exp, etc...).
>
> I'm sorry, what will never be true? Are you saying that decimals have
> a disadvantage compared to floats? If so, what is their disadvantage?

He's saying that once you get past elementary operations, you quickly
run into irrational numbers, which you will not be representing
accurately.  Moreover, in general, it's impossible to even round
operations involving transcendental functions to an arbitrary fixed-
precision, you may need effectively infinite precision in order to the
computation.  In practice, this means the error induced by a lossy
input conversion (assuming you hadn't already lost information) is
entirely negligible compared to inherent inability to do the necessary
calculations.
-- 
http://mail.python.org/mailman/listinfo/python-list


Writing Out from 2 Lists

2010-07-08 Thread Dlanor Slegov
Hi,

I am trying to find a python solution for an informatics problem I have at 
work. Generalized equivalent of my problem is: 


I have an excel sheet with column 1 and column 2 having corresponding 
information (much like a dictionary, however with repeating "keys"). Its like 
if 
you read down column 1: a,b,a,a,b,c and if you read down column 2: 1,2,3,4,5,6. 
I would like to write "unique" files such as a.txt, b.txt and c.txt with 
matching information (from column 2) in a.txt in separate rows like: 1,3,4 and 
in b.txt like: 2,5, etc.

What I have been able to do until now is the following:

import sys
sys.path.append("C:/Downloads/Python/xlrd-0.6.1")
import xlrd

wb = xlrd.open_workbook("myexcelsheet.xls")
sheet = wb.sheet_by_index(0)

clmn1 = sheet.col_values(1,1)
clmn2 = sheet.col_values(2,1)

#NOW WHAT IS HAVE ARE TWO LISTS WITH CORRESPONDING INDICES

#My thought is now to write a counter and for each value in clmn1, write a text 
file with the name of the value and add data from clmn2 in this file. I want to 
start with index[0], i.e. value 1 of clmn1 and then go to 2nd value and compare 
(==) it with 1st value and if its equal then append to the same file 2nd value 
from clmn2...like this with 3rd value in clmn1, i want to compare it to 1st and 
2nd valuewrap this whole in to a nice loop.

#Don't know if this is the "easy" way, but this is what my mind came up with. 
Now I am stuck in colored line below, where I am unable to "create a new 
filename with string coming from a variable":

l = len(clmn1)
c = 0
while (c < l):
filename = clmn1[c]
fhdl1 = open('/mypythonfolder/%(filename)s_appendsomename.txt','w') 

fhdl1.write(clmn2(c)+'\n')
print filename
...
c = c + 1
...
...
...
I would appreciate comments and suggestions on how can I get through this 
problem and also would like to know if there are any methods for lists to solve 
this problem in a different way.

Many Thanks,
Ronald.


  -- 
http://mail.python.org/mailman/listinfo/python-list


Re: simple python deployment tool

2010-07-08 Thread Alexander Kapps

King wrote:

On Jul 8, 2:21 pm, Alexander Kapps  wrote:

King wrote:

Hi,
I am writing a python package deployment tool for linux based
platforms. I have tried various existing
tool sets but none of them is up to the mark and they have their own
issues. Initially I'll start with simple approach.

I'm sorry, but your approach is not going to work. The Right Way(tm)
is to not ship any external libraries, but let the user install the
dependencies with the distro's package manager. And to not try to
build custom packages, but to let the package maintainers  of the
different distros package your application for you.


Yes, you an do this by creating a .deb package that will take care of
installing the required libraries.
It may possible that either required version is not available in the
distro's repository or the one available is
older one then required.


Yes, that may happen.


So best deal would be to ship at least all
the python's libs along with your package.


No, IMHO, the best way to cope with this, is to be a little 
conservative on what library versions you use. Don't use the most 
cutting edge versions, but those who are most wildly available.


Even if you must use the most recent versions, you should leave the 
packaging to the distro maintainers. They know their distro a lot 
better and know how to maintain compatiblity with the rest of the 
system.




1. Find all the modules/packages and copy to "lib" directory.
2. Find python's *.so dependencies(system libs) and copy them to
"syslib"

That would include all the way down to libc, your archive is going
to be huge, but the actual problem is, what if the libc isn't
compatible with the kernel, what if the WX, GTK, X11, etc libraries
aren't compatible with the running Xserver?


You are right here. It seems there is no standard definition of system
libraries on linux. To over come the problem of binary
compatibility, I am using ubuntu (hardy) which is on glibc 2.7. Every
other external python library including python is compiled on
hardy. This is would give you maximum chances that libs would be
compatible in case if you run on any other distro which is using glibc

=2.7


Just because any other disto is based on glibc 2.7 doesn't ensure, 
that the other parts (like gtk libs vs. X11) are compatible.


Actually by doing so, you are limiting your package to Hardy only. 
Any compatiblity with other Ubuntu versions or other distros would 
be purely by accident.



End of the story is, you would need to package a minimal (but almost
complete) Linux system into your package, which of course is not
want you want.


3. Copy python(executable) and libpython2.6.so.1.0 into "dist"
directory.
4. Set up temp environment
5. Run main script using "python .py"
The idea is to produce a cleaner directory structure. Neither I am
creating a boot loader nor I am converting main script
file into executable. It's plain vanilla stuff.

It's not vanilla stuff, but a very hard problem. In fact you are
fighting against the whole system structure.


Ok, forget about system libs(libX*.* etc.), I don't know why it sounds
too complicated. I am hoping it should work and eventually it's easier
then tools that create an executable using bootloader. The problem is
in setting the correct python environment.


It sounds complicated, because it is complicated. :-)

Now, imagine, everybody would do this. There would be dozens, maybe 
hundreds of redundant copies of Python, libXYZ, etc.


I don't know what you mean by "create an executable using 
bootloader", but really, the correct way is to leave the dependency 
management to the distro and it's package manager.




--
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread David Mainzer
On 07/07/2010 08:08 PM, Raymond Hettinger wrote:
> On Jul 7, 5:55 am, Mark Dickinson  wrote:
>> On Jul 7, 1:05 pm, david mainzer  wrote:
>>
>>
>>
>>> Dear Python-User,
>>
>>> today i create some slides about floating point arithmetic. I used an
>>> example from
>>
>>> http://docs.python.org/tutorial/floatingpoint.html
>>
>>> so i start the python shell on my linux machine:
>>
>>> d...@maxwell $ python
>>> Python 2.6.5 (release26-maint, May 25 2010, 12:37:06)
>>> [GCC 4.3.4] on linux2
>>> Type "help", "copyright", "credits" or "license" for more information.>>> 
>>> >>> sum = 0.0
> for i in range(10):
>>
>>> ... sum += 0.1
>>> ...>>> >>> sum
>>> 0.99989
>>
>>> But thats looks a little bit wrong for me ... i must be a number greater
>>> then 1.0 because 0.1 = 
>>> 0.155511151231257827021181583404541015625000
>>> in python ... if i print it.
> 
> [Mark Dickinson]
>> So you've identified one source of error here, namely that 0.1 isn't
>> exactly representable (and you're correct that the value stored
>> internally is actually a little greater than 0.1).  But you're
>> forgetting about the other source of error in your example: when you
>> do 'sum += 0.1', the result typically isn't exactly representable, so
>> there's another rounding step going on.  That rounding step might
>> produce a number that's smaller than the actual exact sum, and if
>> enough of your 'sum += 0.1' results are rounded down instead of up,
>> that would easily explain why the total is still less than 1.0.
> 
> One key for understanding floating point mysteries is to look at the
> actual binary sums rather that their approximate representation as a
> decimal string.  The hex() method can make it easier to visualize
> Mark's explanation:
> 
 s = 0.0
 for i in range(10):
> ... s += 0.1
> ... print s.hex(), repr(s)
> 
> 
> 0x1.ap-4 0.10001
> 0x1.ap-3 0.20001
> 0x1.4p-2 0.30004
> 0x1.ap-2 0.40002
> 0x1.0p-1 0.5
> 0x1.3p-1 0.59998
> 0x1.6p-1 0.69996
> 0x1.9p-1 0.79993
> 0x1.cp-1 0.89991
> 0x1.fp-1 0.99989
> 
> Having used hex() to understand representation error (how the binary
> partial sums are displayed), you can use the Fractions module to gain
> a better understanding of rounding error introduced by each addition:
> 
 s = 0.0
 for i in range(10):
>   exact = Fraction.from_float(s) + Fraction.from_float(0.1)
>   s += 0.1
>   actual = Fraction.from_float(s)
>   error = actual - exact
>   print '%-35s%-35s\t%s' % (actual, exact, error)
> 
> 
> 3602879701896397/36028797018963968 3602879701896397/36028797018963968
> 0
> 3602879701896397/18014398509481984 3602879701896397/18014398509481984
> 0
> 1351079888211149/4503599627370496  10808639105689191/36028797018963968
> 1/36028797018963968
> 3602879701896397/9007199254740992
> 14411518807585589/36028797018963968   -1/36028797018963968
> 1/2
> 18014398509481985/36028797018963968   -1/36028797018963968
> 5404319552844595/9007199254740992
> 21617278211378381/36028797018963968   -1/36028797018963968
> 3152519739159347/4503599627370496
> 25220157913274777/36028797018963968   -1/36028797018963968
> 7205759403792793/9007199254740992
> 28823037615171173/36028797018963968   -1/36028797018963968
> 2026619832316723/2251799813685248
> 32425917317067569/36028797018963968   -1/36028797018963968
> 9007199254740991/9007199254740992
> 36028797018963965/36028797018963968   -1/36028797018963968
> 
> Hope this helps your slides,
> 
> 
> Raymond


Thanks to all for your help :)

All your comments helped me and now i know how it works in python !

Best
David
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Writing Out from 2 Lists

2010-07-08 Thread Chris Rebert
On Thu, Jul 8, 2010 at 4:30 AM, Dlanor Slegov
 wrote:
> Hi,
>
> I am trying to find a python solution for an informatics problem I have at
> work. Generalized equivalent of my problem is:
>
> I have an excel sheet with column 1 and column 2 having corresponding
> information (much like a dictionary, however with repeating "keys"). Its
> like if you read down column 1: a,b,a,a,b,c and if you read down column 2:
> 1,2,3,4,5,6. I would like to write "unique" files such as a.txt, b.txt and
> c.txt with matching information (from column 2) in a.txt in separate rows
> like: 1,3,4 and in b.txt like: 2,5, etc.
>
> What I have been able to do until now is the following:
>
> import sys
> sys.path.append("C:/Downloads/Python/xlrd-0.6.1")
> import xlrd
>
> wb = xlrd.open_workbook("myexcelsheet.xls")
> sheet = wb.sheet_by_index(0)
>
> clmn1 = sheet.col_values(1,1)
> clmn2 = sheet.col_values(2,1)
>
> #NOW WHAT IS HAVE ARE TWO LISTS WITH CORRESPONDING INDICES
>
> #My thought is now to write a counter and for each value in clmn1, write a
> text file with the name of the value and add data from clmn2 in this file. I
> want to start with index[0], i.e. value 1 of clmn1 and then go to 2nd value
> and compare (==) it with 1st value and if its equal then append to the same
> file 2nd value from clmn2...like this with 3rd value in clmn1, i want to
> compare it to 1st and 2nd valuewrap this whole in to a nice loop.
>
> #Don't know if this is the "easy" way, but this is what my mind came up
> with. Now I am stuck in colored line below, where I am unable to "create a
> new filename with string coming from a variable":
>
> l = len(clmn1)
> c = 0
> while (c < l):
> filename = clmn1[c]
> fhdl1 = open('/mypythonfolder/%(filename)s_appendsomename.txt','w')

fhdl1 = open('/mypythonfolder/%s_appendsomename.txt' % filename,'w')

> fhdl1.write(clmn2(c)+'\n')
> print filename
> ...
> c = c + 1

Personally, I'd rewrite the loop like this, using zip() and a for-loop:

for name, value in zip(clmn1, clmn2):
filepath = '/mypythonfolder/' + name + '_appendsomename.txt'
with open(filepath, 'a') as f:
f.write(str(value))
f.write('\n')

Cheers,
Chris
--
http://blog.rebertia.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Argh! Name collision!

2010-07-08 Thread rantingrick
On Jul 7, 6:47 pm, "Alf P. Steinbach /Usenet"  wrote:

> Hm, for pure shock value I think I'll use the acronym PYthon Native Interface
> Support.
>
> pynis! :-)

Well as long as you don't put your "pynis" *pointers* in "pynie" then
everything will be Ok! ;-)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Adam Skutt
On Jul 8, 7:23 am, Mark Dickinson  wrote:
> On Jul 8, 11:58 am, Adam Skutt  wrote:
>
> > accurately.  Moreover, in general, it's impossible to even round
> > operations involving transcendental functions to an arbitrary fixed-
> > precision, you may need effectively infinite precision in order to the
> > computation.
>
> Impossible?  Can you explain what you mean by this?  Doesn't the
> decimal module do exactly that, giving correctly-rounded exp() and
> log() results to arbitrary precision?
You run into the table-maker's dilemma: there's no way to know in
advance how many digits you need in order to have n bits of precision
in the result.  For some computations, the number of bits required to
get the desired precision can quickly overwhelm the finite limitations
of your machine (e.g., you run out of RAM first or the time to compute
the answer is simply unacceptable).

Adam
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Ethan Furman

Wolfram Hinderer wrote:

On 7 Jul., 19:32, Ethan Furman  wrote:


Nobody wrote:


On Wed, 07 Jul 2010 15:08:07 +0200, Thomas Jollans wrote:



you should never rely on a floating-point number to have exactly a
certain value.



"Never" is an overstatement. There are situations where you can rely
upon a floating-point number having exactly a certain value.


It's not much of an overstatement.  How many areas are there where you
need the number
0.155511151231257827021181583404541015625000?

If I'm looking for 0.1, I will *never* (except by accident ;) say

if var == 0.1:

it'll either be <= or >=.



The following is an implementation of a well-known algorithm.
Why would you want to replace the floating point comparisons? With
what?




Interesting.  I knew when I posted my above comment that I was ignoring 
such situations.  I cannot comment on the code itself as I am unaware of 
the algorithm, and haven't studied numbers extensively (although I do 
find them very interesting).


So while you've made your point, I believe mine still stands -- 
comparing floats using == to absolute numbers is almost always a mistake.


~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list


Re: Is This Open To SQL Injection?

2010-07-08 Thread Victor Subervi
On Wed, Jul 7, 2010 at 2:22 PM, Stephen Hansen wrote:

> First, its always best to be explicit with insert statements. Meaning,
> don't rely on the underlining structure of a table, as in:
>
> INSERT INTO YourRandomTable VALUES ("my", "value", "here");
>
> Instead, do:
>
> INSERT INTO YourRandomTable (field1, field2, field3) VALUES ("my",
> "value", "here");
>
> By following this advice, I realized I didn't need to do that fancy
multiplying out the '%s' which was screwing me up anyway, and then I didn't
need to create an sql using a '%', and then I didn't need to open the door
to injection attack!

However, I now have another error. Here is my current command:

cursor.execute("insert into personalDataKeys (Store, User, useFirstName,
useLastName, usePhone, useCell, useFax, useAddress, useShippingAddress,
useDOB, useEmail, usePW) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
%s)", ([store, user] + col_vals))

I get this error from MySQL which I am having a hard time understanding:

LATEST FOREIGN KEY ERROR

100708  6:15:01 Transaction:
TRANSACTION 0 9382, ACTIVE 0 sec, process no 5326, OS thread id 1169992000
inserting, thread declared inside InnoDB 500
mysql tables in use 1, locked 1
3 lock struct(s), heap size 368, undo log entries 1
MySQL thread id 1502, query id 23700 localhost beno update
insert into personalDataKeys (Store, User, useFirstName, useLastName,
usePhone, useCell, useFax, useAddress, useShippingAddress, useDOB, useEmail,
usePW) values ('specialty', 'patients', 1, 1, 1, 1, 1, 1, 0, 1, 1, 1)
Foreign key constraint fails for table `test/personalDataKeys`:
,
  CONSTRAINT `personalDataKeys_ibfk_1` FOREIGN KEY (`Store`) REFERENCES
`products` (`Store`)
Trying to add in child table, in index `Store` tuple:
DATA TUPLE: 2 fields;
 0: len 9; hex 7370656369616c7479; asc specialty;; 1: len 6; hex
03b7; asc   ;;

But in parent table `test/products`, in index `Store`,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 1; compact format; info bits 0
 0: len 8; hex 696e66696d756d00; asc infimum ;;

What is this tuple?
TIA,
beno
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Mark Dickinson
On Jul 8, 2:00 pm, Adam Skutt  wrote:
> On Jul 8, 7:23 am, Mark Dickinson  wrote:> On Jul 8, 
> 11:58 am, Adam Skutt  wrote:
>
> > > accurately.  Moreover, in general, it's impossible to even round
> > > operations involving transcendental functions to an arbitrary fixed-
> > > precision, you may need effectively infinite precision in order to the
> > > computation.
>
> > Impossible?  Can you explain what you mean by this?  Doesn't the
> > decimal module do exactly that, giving correctly-rounded exp() and
> > log() results to arbitrary precision?
>
> You run into the table-maker's dilemma: there's no way to know in
> advance how many digits you need in order to have n bits of precision
> in the result.

Sure.  But it's a bit of a stretch to go from not knowing what
resources you'll need in advance to calling something 'impossible'. :)

> For some computations, the number of bits required to
> get the desired precision can quickly overwhelm the finite limitations
> of your machine (e.g., you run out of RAM first or the time to compute
> the answer is simply unacceptable).

Perhaps in theory.  In practice, though, it's very rare to need to
increase precision more than once or twice beyond an initial first
guesstimate, and the amount of extra precision needed is small.  That
increase is unlikely to cause problems unless you were operating right
up against your machine's limits in the first place.

--
Mark
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: The real problem with Python 3 - no business case for conversion (was "I strongly dislike Python 3")

2010-07-08 Thread Philip Semanchuk


On Jul 7, 2010, at 11:26 PM, Terry Reedy wrote:


On 7/7/2010 5:29 AM, geremy condra wrote:

On Tue, Jul 6, 2010 at 1:37 AM, Terry Reedy  wrote:

On 7/5/2010 9:00 PM, Philip Semanchuk wrote:

On Jul 5, 2010, at 6:41 PM, Chris Rebert wrote:

On Mon, Jul 5, 2010 at 3:38 PM, Philip Semanchu


I ported two pure C extensions from 2 to 3 and was even able to  
keep a
single C codebase. I'd be willing to contribute my experiences  
to a

document
somewhere. (Is there a Wiki?)



Indeed there is: http://wiki.python.org/moin/



Thanks. I don't want to appear ungrateful, but I was hoping for
something specific to the 2-to-3 conversion. I guess someone has to
start somewhere...


There is an existing 2to3 and other pages for Python code  
conversion. I do
not know of any for CAPI conversion. The need for such has been  
acknowledged
among the devs but if there is nothing yet, we need someone with  
specialized
experience and a bit of time to make a first draft. If you start  
one, give
it an easy to remember name C2to3? 2to3Capi? You choose. And link  
to it from

the 2to3 pag
In his post on this thread, Martin Loewis volunteered to list what  
he knows

from psycopg2 if someone else will edit.



I'm not sure why I don't have this post, but I'm happy to help edit
etc if Martin
wants to put together a rough draft.


Since I wrote that, someone pointed out the the Python How-to  
collection includes Porting Extension Modules to 3.0
by Benjamim Peterson. So all Pyilip or Martin need to do is read  
that and suggest additions.


That document is here:
http://wiki.python.org/moin/PortingExtensionModulesToPy3k

It took me a while to find. It's a shame it's not better known; I  
looked for such a document before I started porting sysv_ipc and  
posix_ipc and didn't find this one.


Thanks for the pointer.

Cheers
Philip


--
http://mail.python.org/mailman/listinfo/python-list


Debugging a segmentation fault

2010-07-08 Thread dierkerdm...@mail.com
Hi,

my python project crashes in a non reproducible way. With gdb I got
the backtraces given below.
How can I possibly figure out the reason for the segfaults that occur
under Linux and Windows, using Python 2.6 in both cases.

Thanks
  Dierk


Program received signal SIGSEGV, Segmentation fault.
0x080902bf in dict_dealloc (mp=0xbfbf0b4) at ../Objects/dictobject.c:
911
911 ../Objects/dictobject.c: No such file or directory.
in ../Objects/dictobject.c
(gdb) bt
#0  0x080902bf in dict_dealloc (mp=0xbfbf0b4) at ../Objects/
dictobject.c:911
#1  0x08090304 in dict_dealloc (mp=0xa805d74) at ../Objects/
dictobject.c:911
#2  0x08090304 in dict_dealloc (mp=0xbc2768c) at ../Objects/
dictobject.c:911
#3  0x08090304 in dict_dealloc (mp=0xbc27c64) at ../Objects/
dictobject.c:911
#4  0x080ab611 in subtype_dealloc (self=
 to continue, or q  to quit---
Frame 0x969ddb4, for file analyse.py, line 398, in analyseall
(options=,
TIMEFMT='%d.%m.%Y', TIMESPAN_DAYS=365, projects=[('ant', 2002, 2008),
('apache', 1995, 2009), ('gcc', 2003, 2009), ('gimp', 2003, 2009),
('gnucash', 2001, 2009), ('gnumeric', 2000, 2009), ('gtk', 2000,
2009), ('kde', 2003, 2009), ('maemo', 2006, 2009), ('python', 1999,
2009), ('samba', 2004, 2009), ('tomcat', 2000, 2009), ('wine', 2003,
2009)],
ra=: {'grClusterCoeff': ,
'grDensity': , 'grNumberMails': 1593,
'mailsPerDay': , 'grMedianDegree':
, 'productivity': , 'grDistKSTest': ,
'grEdges': 269, 'grBetweenCentNetw': ,
'grNumberNodes': 122, 'grBetweenCentNodeMedian': , 'gr...(truncated), throwflag=0) at ../Python/
ceval.c:1010
#8  0x080e1bb0 in fast_function (f=
Frame 0x82eda8c, for file analyse.py, line 472, in  (),
throwflag=0) at ../Python/ceval.c:3836
#9  call_function (f=
Frame 0x82eda8c, for file analyse.py, line 472, in  (),
throwflag=0) at ../Python/ceval.c:3771
#10 PyEval_EvalFrameEx (f=
Frame 0x82eda8c, for file analyse.py, line 472, in  (),
throwflag=0) at ../Python/ceval.c:2412


Program received signal SIGSEGV, Segmentation fault.
visit_decref (op=, data=0x0) at ../Modules/
gcmodule.c:271
271 ../Modules/gcmodule.c: No such file or directory.
in ../Modules/gcmodule.c
(gdb) bt
#0  visit_decref (op=, data=0x0) at ../
Modules/gcmodule.c:271
#1  0x0809223d in dict_traverse (op=
{'_sa_adapter': , owner_state=, _strong_obj=None, callables={}, session_id=158970732,
modified=False,
class_=]), _validators={},
_inheriting_mappers=set([]), _with_polymorphic_selectable=<...>,
single=False, allow_partial_pks=True,
_dependency_processors=[,
direction=,
parent=]), _validators={}, _inheriting_mappers=set([]),
single=False, allow_partial_pks=True, _dependency_processors=[],
tables=[<...>], order_by=False,
primary_key=]),
index=None, server_onupdate=None, name='id', is_literal=False,
nullable=False, default=None, quote=None, autoincrement=True,
onupdate=None, foreign_keys=, _...(truncated), visit=0x810c460 , arg=0x0)
at ../Objects/dictobject.c:2003
#2  0x0810cebc in subtract_refs (generation=)
at ../Modules/gcmodule.c:296
#3  collect (generation=) at ../Modules/
gcmodule.c:817
#4  0x0810d8eb in collect_generations (basicsize=28) at ../Modules/
gcmodule.c:924
#5  _PyObject_GC_Malloc (basicsize=28) at ../Modules/gcmodule.c:1363
#6  0x080ab65b in PyType_GenericAlloc (type=0x8236be0, nitems=0) at ../
Objects/typeobject.c:758
#7  0x080bc9a7 in weakref___new__ (type=0x8236be0, args=
(, ), kwargs=0x0)
at ../Objects/weakrefobject.c:300
#8  0x080ad0dd in type_call (type=0x8236be0, args=
(, ), kwds=0x0)
at ../Objects/typeobject.c:726
#9  0x0806245a in PyObject_Call (func=, arg=
(, ), kw=0x0)
at ../Objects/abstract.c:2492
#10 0x080e0471 in do_call (f=
Frame 0x9aabb04, for file /usr/local/lib/python2.6/dist-packages/
SQLAlchemy-0.6.0-py2.6.egg/sqlalchemy/orm/state.py, line 29, in
__init__
(self=]), _validators={},
_inheriting_mappers=set([]), _with_polymorphic_selectable=<...>,
single=False, allow_partial_pks=True,
_dependency_processors=[,
direction=,
parent=<...>, post_update=False, passive_updates=True,
prop=,
<...>)], _compile_finished=True, lazy=True, uselist=False,
collection_class=None, back_populates=None, table=<...>,
innerjoin=False, order_by=False, join_depth=None,
strategy=, target=<...>, parent=<...>,
use_get=True, uselist=False,
_LazyLoader__lazywhere=<_BinaryExpression(negate=, modifiers={}, right=<...>, opera...(truncated), throwflag=0)
at ../Python/ceval.c:3968

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Storing a callback function as a class member

2010-07-08 Thread Nathan Huesken
Hey,

Sorry, I tried to sent only the relevant parts of the example, but the
part where the error was, was left out.

I defined the function, used as callback like this:
class SomeClass:
def callback(param):
...

So I forgot the "self" parameter, and therefor the callback had a
different number of parameters than I expected.

Thanks for the effort!
Nathan

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Stefan Krah
Adam Skutt  wrote:
> On Jul 8, 7:23 am, Mark Dickinson  wrote:
> > On Jul 8, 11:58 am, Adam Skutt  wrote:
> >
> > > accurately.  Moreover, in general, it's impossible to even round
> > > operations involving transcendental functions to an arbitrary fixed-
> > > precision, you may need effectively infinite precision in order to the
> > > computation.
> >
> > Impossible?  Can you explain what you mean by this?  Doesn't the
> > decimal module do exactly that, giving correctly-rounded exp() and
> > log() results to arbitrary precision?
>
> You run into the table-maker's dilemma: there's no way to know in
> advance how many digits you need in order to have n bits of precision
> in the result.  For some computations, the number of bits required to
> get the desired precision can quickly overwhelm the finite limitations
> of your machine (e.g., you run out of RAM first or the time to compute
> the answer is simply unacceptable).

Yes, this appears to be unsolved yet, see also:

http://www.cs.berkeley.edu/~wkahan/LOG10HAF.TXT

"Is it time to quit yet?  That's the  Table-Maker's Dilemma.  No general
 way exists to predict how many extra digits will have to be carried to
 compute a transcendental expression and round it  _correctly_  to some
 preassigned number of digits.  Even the fact  (if true)  that a finite
 number of extra digits will ultimately suffice may be a deep theorem."


However, in practice, mpfr rounds correctly and seems to be doing fine.

In addition to this, I've been running at least 6 months of continuous
tests comparing cdecimal and decimal, and neither log() nor exp() poses
a problem.

pow() is trickier. Exact results have to be weeded out before
attempting the correction loop for correct rounding, and this is
complicated.


For example, in decimal this expression takes a long time (in cdecimal
the power function is not correctly rounded):


Decimal('100.0') ** Decimal('-557.71e-74288')



Stefan Krah


-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Adam Skutt
On Jul 8, 9:22 am, Mark Dickinson  wrote:
> On Jul 8, 2:00 pm, Adam Skutt  wrote:
>
> > On Jul 8, 7:23 am, Mark Dickinson  wrote:> On Jul 8, 
> > 11:58 am, Adam Skutt  wrote:
>
> > > > accurately.  Moreover, in general, it's impossible to even round
> > > > operations involving transcendental functions to an arbitrary fixed-
> > > > precision, you may need effectively infinite precision in order to the
> > > > computation.
>
> > > Impossible?  Can you explain what you mean by this?  Doesn't the
> > > decimal module do exactly that, giving correctly-rounded exp() and
> > > log() results to arbitrary precision?
>
> > You run into the table-maker's dilemma: there's no way to know in
> > advance how many digits you need in order to have n bits of precision
> > in the result.
>
> Sure.  But it's a bit of a stretch to go from not knowing what
> resources you'll need in advance to calling something 'impossible'. :)
>
> > For some computations, the number of bits required to
> > get the desired precision can quickly overwhelm the finite limitations
> > of your machine (e.g., you run out of RAM first or the time to compute
> > the answer is simply unacceptable).
>
> Perhaps in theory.  In practice, though, it's very rare to need to
> increase precision more than once or twice beyond an initial first
> guesstimate, and the amount of extra precision needed is small.  That
> increase is unlikely to cause problems unless you were operating right
> up against your machine's limits in the first place.
I suspect your platitude isn't especially comforting for those who
need more computing capability than we can currently construct.
However, I wouldn't call the amount of extra needed precision "small"
for most transcendental functions, as it's frequently more than double
in the worse-case situations and increases non-linearly as the number
of desired digits increases.

Which almost brings us full circle to where I was originally pointing:
the "rounding" problem is inherent in the finite nature of a physical
computer, so you cannot make the rounding problem go away.  As such,
talking about differences in rounding between decimal and binary
representations is somewhat of a corner case.  Replacing "float" with
"decimal" won't get rid of the problems that floating-point brings to
the table in the first place.  The issues that come up all have to do
with lack of human understanding of what the computer is doing.  Take
even as something as innocent as equality between two floating-point
numbers: even exact rounding of all operations doesn't solve this
entirely common problem.  Accordingly, once we explain why this
doesn't work, we frequently don't need the enhanced functionality
decimal provides and hopefully can make the determination on our own.

If you want to make elementary arithmetic (add, subtract, multiple,
divide) behave intuitively then you (arguably) want an arbitrary-
precision fractional/rational number class.  After that, the right
solution is education.

Adam
-- 
http://mail.python.org/mailman/listinfo/python-list


Python script to install python

2010-07-08 Thread Vincent Davis
I would like to have a python script that would download the most
recent svn of python, configure, make, install and cleanup after
itself. I am not replacing the python version I would be using to run
the script.
I was struggling to get this to work and I assume someone else has
done it better.  Any pointers?

Thanks
Vincent
-- 
http://mail.python.org/mailman/listinfo/python-list


Issues compiling 2.6.5 on AIX 6.1

2010-07-08 Thread Stopp, Bryan
I've seen other threads on this issue, but the resolution still doesn't
seem to exist for me. 

 

I'm running the configure script with these parameters:

 

./configure --prefix=/build/tools \

--exec-prefix=/build/tools \

--enable-shared \

--enable-ipv6 \

--with-gcc \

--with-pth 

 

I also want to state that I already edited all of the configure &
config.guess scripts to comprehend AIX6.1 (they're not updated yet). And
as you can see, I'm running this using the "-with-gcc" option.

 

The configure seems to have no problems; so I run a:

 

make clean && make

 

This results in a completed compile. If I go back and look I see a lot
of this:

 

building '_struct' extension

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall
-Wstrict-prototypes -I. -I/build/tools/src/Python-2.6.5/./Include
-I/build/tools/include -I. -IInclude -I./Include -I/usr/local/include
-I/build/tools/src/Python-2.6.5/Include -I/build/tools/src/Python-2.6.5
-c /build/tools/src/Python-2.6.5/Modules/_struct.c -o
build/temp.aix-6.1-2.6/build/tools/src/Python-2.6.5/Modules/_struct.o

./Modules/ld_so_aix gcc -pthread -bI:Modules/python.exp
build/temp.aix-6.1-2.6/build/tools/src/Python-2.6.5/Modules/_struct.o
-L/build/tools/lib -L/usr/local/lib -lpython2.6 -o
build/lib.aix-6.1-2.6/_struct.so

collect2: library libpython2.6 not found

 

 

Notice that it can't find the Python lib.. well, it's not installed yet.
It's built and in the current directory I'm working out of, but that's
not in my LiBPATH. I'll come back to that.

 

If I don't do anything and try to "make install" it pushes the python &
libpython libraries to the appropriate locations, and then it appears it
tries to re-make the modules:

 

building '_struct' extension

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall
-Wstrict-prototypes -I. -I/build/tools/src/Python-2.6.5/./Include
-I/build/tools/include -I. -IInclude -I./Include -I/usr/local/include
-I/build/tools/src/Python-2.6.5/Include -I/build/tools/src/Python-2.6.5
-c /build/tools/src/Python-2.6.5/Modules/_struct.c -o
build/temp.aix-6.1-2.6/build/tools/src/Python-2.6.5/Modules/_struct.o

./Modules/ld_so_aix gcc -pthread -bI:Modules/python.exp
build/temp.aix-6.1-2.6/build/tools/src/Python-2.6.5/Modules/_struct.o
-L/build/tools/lib -L/usr/local/lib -lpython2.6 -o
build/lib.aix-6.1-2.6/_struct.so

 

However this time it results in a mass of:

 

ld: 0711-224 WARNING: Duplicate symbol: 

 

I mean I get like 1000+ of these warnings. But they all culminate in:

 

ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more
information.

Fatal Python error: Interpreter not initialized (version mismatch?)

make: The signal code from the last command is 6.

 

 

 

Now, I said I'd get back to the LIBPATH issue. I thought that if it was
looking for that libpython file to compile the modules, it just wasn't
finding it. So I executed a:

 

LIBPATH=.:$LIBPATH make

 

This resulted in:

 

building '_struct' extension

gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall
-Wstrict-prototypes -I. -I/build/tools/src/Python-2.6.5/./Include
-I/build/tools/include -I. -IInclude -I./Include -I/usr/local/include
-I/build/tools/src/Python-2.6.5/Include -I/build/tools/src/Python-2.6.5
-c /build/tools/src/Python-2.6.5/Modules/_struct.c -o
build/temp.aix-6.1-2.6/build/tools/src/Python-2.6.5/Modules/_struct.o

./Modules/ld_so_aix gcc -pthread -bI:Modules/python.exp
build/temp.aix-6.1-2.6/build/tools/src/Python-2.6.5/Modules/_struct.o
-L/build/tools/lib -L/usr/local/lib -lpython2.6 -o
build/lib.aix-6.1-2.6/_struct.so

ld: 0706-006 Cannot find or open library file: -l python2.6

ld:open(): No such file or directory

collect2: ld returned 255 exit status

 

Huh? Can't find the library now?

 

In any event, I can't get Python to compile and/or install on my
machine. Does anyone have any insight into what is happening to cause
this problem?

 

-B 




PRIVILEGED AND CONFIDENTIAL
This email transmission contains privileged and confidential information 
intended only for the use of the individual or entity named above.  If the 
reader of the email is not the intended recipient or the employee or agent 
responsible for delivering it to the intended recipient, you are hereby 
notified that any use, dissemination or copying of this email transmission is 
strictly prohibited by the sender.  If you have received this transmission in 
error, please delete the email and immediately notify the sender via the email 
return address or mailto:postmas...@argushealth.com.  Thank you.



-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is This Open To SQL Injection?

2010-07-08 Thread Duncan Booth
Ian  wrote:

> On 07/07/2010 19:38, Victor Subervi wrote:
>> Hi;
>> I have this code:
>>
>> sql = 'insert into personalDataKeys values (%s, %s, %s)' %
>> (store, 
>> user, ', %s'.join('%s' * len(col_vals))
>> cursor.execute(sql, col_vals)
>>
>> Is this open to injection attacks? If so, how correct?
>> TIA,
>> beno
> Yes, it is trivially open to injection attacks.
> 
> What would happen if someone enters the next line into one of your
> col_vals 
> 
> x,y);DROP DATABASE personalDataKeys; ha ha
> 
> Your sql statement would be closed early by the semicolon, and the
> DROP TABLE personalDataKeys is then executed and would cause some
> unexpected data loss.
> 
> Things could be more serious - DROP DATABASE mysql;  for a mysql 
> installation for example.
> 
> You must always always every time and without any exceptions 
> what-so-ever, put all and every piece of data that comes from outside 
> the program through the appropriate routine to make whatever has been 
> entered into storable data and not part of the sql statement.
> 
> In php this is mysql_real_escape_string().  In your favourite language
> there will be an equivalent.
> 
> If you miss just one occurrence its like leaving the side window 
> unlocked! Someone will get in one day.
> 

Try reading the code more carefully. You don't need to escape the 
strings so long as you use cursor.execute properly. In this case it is 
being used properly: there is no danger of injection attacks from 
col_vals.

If `store` or `user` come from user input there is a danger as they are 
being inserted into the generated sql.

As has already been pointed out the code to generate the sql is broken, 
but the principle behind it is sound. In this case the correct thing to 
do would appear to be:

  sql = 'insert into personalDataKeys values (%%s, %%s, %s)' % (','.join
(['%s'] * len(col_vals)))
  cursor.execute(sql, (store, user) + col_vals)

which safely sanitises all of the data passed to the database.

-- 
Duncan Booth http://kupuguy.blogspot.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to test/troubshoot an extension (pylibconfig)?

2010-07-08 Thread Grant Edwards
On 2010-07-07, Grant Edwards  wrote:

> Oops.  Those Python bindings are for version 1.3.2 of libconfig (which
> does work).  They don't work with the current version of libconfig.

I've stripped the python bindings down to a minimal point, and I've
decided there may be a memory corruption problem in the 1.4.5 version
of the library.  Here's the current boost binding:

   -pylibconfig.cc--
   #include 
   #include 
   
   using namespace boost::python;
   using namespace libconfig;
   
   class pyConfig
   {
   public:
 pyConfig()
 {
   config = new Config();
 }
 
 ~pyConfig ()
 {
   delete config;
 }
 
   private:
 Config *config;
   };
   
   BOOST_PYTHON_MODULE(pylibconfig)
   {
 class_("Config");
   }
   -pylibconfig.cc--


That builds without warnings and installs fine, but attempting to
actually create an instance of the class in Python causes a glibc
memory corruption message:

   Python 2.6.5 (release26-maint, Jun 22 2010, 12:58:11) 
   [GCC 4.3.4] on linux2
   Type "help", "copyright", "credits" or "license" for more information.
   >>> import pylibconfig
   >>> conf = pylibconfig.Config()
   *** glibc detected *** /usr/bin/python2.6: corrupted double-linked list: 
0x08065c48 ***

Am I correct in concluding it has to be a memory corruption problem in
the library itself?  

-- 
Grant Edwards   grant.b.edwardsYow! I want the presidency
  at   so bad I can already taste
  gmail.comthe hors d'oeuvres.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python 2.7 released

2010-07-08 Thread Aahz
In article <1450078b-d5ee-437f-bd8b-8da26900f...@x27g2000yqb.googlegroups.com>,
imageguy   wrote:
>
>Sorry to be daft here, but what do you mean by a "hardlink" ?
>A windows "Shortcut" ?

Just to be clear, a hardlink on NTFS functions almost exactly the same as
a hardlink on a Unix filesystem -- it's a pointer to the same underlying
file.
-- 
Aahz (a...@pythoncraft.com)   <*> http://www.pythoncraft.com/

"Normal is what cuts off your sixth finger and your tail..."  --Siobhan
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python 2.7 released

2010-07-08 Thread Grant Edwards
On 2010-07-08, Aahz  wrote:
> In article 
> <1450078b-d5ee-437f-bd8b-8da26900f...@x27g2000yqb.googlegroups.com>,
> imageguy   wrote:
>>
>>Sorry to be daft here, but what do you mean by a "hardlink" ?
>>A windows "Shortcut" ?
>
> Just to be clear, a hardlink on NTFS functions almost exactly the same as
> a hardlink on a Unix filesystem -- it's a pointer to the same underlying
> file.

A windows shortcut is more like a Unix symlink (symbolic link), where
the real destination path is a string contained in the link/shortcut
file.  That destination path is then evaluated and "dereferenced" when
the link/shortcut is accessed.

-- 
Grant Edwards   grant.b.edwardsYow! Of course, you
  at   UNDERSTAND about the PLAIDS
  gmail.comin the SPIN CYCLE --
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python script to install python

2010-07-08 Thread Daniel Fetchinson
> I would like to have a python script that would download the most
> recent svn of python, configure, make, install and cleanup after
> itself. I am not replacing the python version I would be using to run
> the script.
> I was struggling to get this to work and I assume someone else has
> done it better.  Any pointers?

Assuming you are on linux I recommend not using a python script for
this but rather a shell script. From a python script you would most of
the time be calling shell commands anyway. In a shell script you would
do something like this:


#!/bin/bash

svn checkout 
cd whatever
./configure --whatever-options-you-like
make
# you probably want to run this as root
make install
# you probably don't want to be root anymore
cd ..
rm -rf whatever



If you are on windows I assume a similar strategy is best.

Cheers,
Daniel



-- 
Psss, psss, put it down! - http://www.cafepress.com/putitdown
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is This Open To SQL Injection?

2010-07-08 Thread Stephen Hansen
On 7/8/10 6:20 AM, Victor Subervi wrote:
> However, I now have another error. Here is my current command:
> 
> cursor.execute("insert into personalDataKeys (Store, User,
> useFirstName, useLastName, usePhone, useCell, useFax, useAddress,
> useShippingAddress, useDOB, useEmail, usePW) values (%s, %s, %s, %s, %s,
> %s, %s, %s, %s, %s, %s, %s)", ([store, user] + col_vals))

Quick point: why the parens around [store, user] + col_vars? They're
redundant.

> 
> I get this error from MySQL which I am having a hard time understanding:
> 
> LATEST FOREIGN KEY ERROR
> 
> 100708  6:15:01 Transaction:
> TRANSACTION 0 9382, ACTIVE 0 sec, process no 5326, OS thread id
> 1169992000 inserting, thread declared inside InnoDB 500
> mysql tables in use 1, locked 1
> 3 lock struct(s), heap size 368, undo log entries 1
> MySQL thread id 1502, query id 23700 localhost beno update
> insert into personalDataKeys (Store, User, useFirstName, useLastName,
> usePhone, useCell, useFax, useAddress, useShippingAddress, useDOB,
> useEmail, usePW) values ('specialty', 'patients', 1, 1, 1, 1, 1, 1, 0,
> 1, 1, 1)
> Foreign key constraint fails for table `test/personalDataKeys`:
> ,
>   CONSTRAINT `personalDataKeys_ibfk_1` FOREIGN KEY (`Store`) REFERENCES
> `products` (`Store`)

A foreign key is a constraint, a restriction, which says that rows in
TableA ("personalDataKeys") depend on certain *matching* rows to already
exist and always be valid in TableB ("products"); the exact match is a
column they have in common ("Store").

The purpose of foreign keys is to keep data consistent. Here, it appears
as if you have established a key such that the 'store' column in your
personalDataKeys table must point to a certain row in the products table
which has a 'store' column of the exact same value.

This error message is indicating that when you do this INSERT, there is
no corresponding row in the products table.

-- 

   Stephen Hansen
   ... Also: Ixokai
   ... Mail: me+list/python (AT) ixokai (DOT) io
   ... Blog: http://meh.ixokai.io/



signature.asc
Description: OpenPGP digital signature
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Victor Eijkhout
Zooko O'Whielacronx  wrote:

> I'm starting to think that one should use Decimals by default and
> reserve floats for special cases.

Only if one has  Power6 (or 7) which has hardware support for BCD.
Otherwise you will have slow applications.

Victor.
-- 
Victor Eijkhout -- eijkhout at tacc utexas edu
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python 2.7 released

2010-07-08 Thread Stephen Hansen
On 7/8/10 8:07 AM, Grant Edwards wrote:
> On 2010-07-08, Aahz  wrote:
>> In article 
>> <1450078b-d5ee-437f-bd8b-8da26900f...@x27g2000yqb.googlegroups.com>,
>> imageguy   wrote:
>>>
>>> Sorry to be daft here, but what do you mean by a "hardlink" ?
>>> A windows "Shortcut" ?
>>
>> Just to be clear, a hardlink on NTFS functions almost exactly the same as
>> a hardlink on a Unix filesystem -- it's a pointer to the same underlying
>> file.
> 
> A windows shortcut is more like a Unix symlink (symbolic link), where
> the real destination path is a string contained in the link/shortcut
> file.  That destination path is then evaluated and "dereferenced" when
> the link/shortcut is accessed.

This is true, but a windows shortcut is more limited: its a feature of
higher level code in the UI (I don't want to say just Explorer, as the
standard dialogs deal with it too), and not the filesystem. So it only
really works if there's a user specifically clicking through it -- or if
you have code made to look for the .lnk files, parse them (they're
really simple INI files) and deference it manually. At least, IIUC.

-- 

   Stephen Hansen
   ... Also: Ixokai
   ... Mail: me+list/python (AT) ixokai (DOT) io
   ... Blog: http://meh.ixokai.io/



signature.asc
Description: OpenPGP digital signature
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python 2.7 released

2010-07-08 Thread Tim Golden

On 08/07/2010 16:07, Grant Edwards wrote:

On 2010-07-08, Aahz  wrote:

In article<1450078b-d5ee-437f-bd8b-8da26900f...@x27g2000yqb.googlegroups.com>,
imageguy  wrote:


Sorry to be daft here, but what do you mean by a "hardlink" ?
A windows "Shortcut" ?


Just to be clear, a hardlink on NTFS functions almost exactly the same as
a hardlink on a Unix filesystem -- it's a pointer to the same underlying
file.


A windows shortcut is more like a Unix symlink (symbolic link), where
the real destination path is a string contained in the link/shortcut
file.  That destination path is then evaluated and "dereferenced" when
the link/shortcut is accessed.


Goodness knows I'm probably teaching my grandmother etc. etc. but I
would clarify that a Windows shortcut is a *shell* concept: from the
NTFS point of view, it's just a something.lnk with some opaque contents.

A (>= Vista) NTFS smbolic link is documented as designed "to function just
like Unix links".

TJG
--
http://mail.python.org/mailman/listinfo/python-list


Issue with logging.config

2010-07-08 Thread Joe Hughes
Hi Python Help:

I'm doing some work with logging.config and I'm running into an 
interesting situation.  I've run this by python-help, but that didn't help so I 
thought I would send to the list.  Here is the config file

[loggers]
keys=root,log,syslog

[handlers]
keys=console,log,syslog

[formatters]
keys=rootFormat,logFormat,syslogFormat

[logger_root]
level=DEBUG
handlers=console

[logger_log]
level=DEBUG
handlers=log
qualname=log

[logger_syslog]
level=DEBUG
handlers=syslog
qualname=syslog

[handler_console]
class=StreamHandler
level=DEBUG
formatter=rootFormat
args=(sys.stdout,)

[handler_log]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=logFormat
args=('E:\local\Logs\syslog_interface.txt', 'a', 1000, 10)
propagate=0

[handler_syslog]
class=handlers.SysLogHandler
level=DEBUG
formatter=syslogFormat
host=141.232.41.205
port=handlers.SYSLOG_UDP_PORT
facility=LOG_LOCAL0
args=(('141.232.41.205',handlers.SYSLOG_UDP_PORT),handlers.SysLogHandler.LOG_LOCAL0)

[formatter_rootFormat]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

[formatter_logFormat]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

[formatter_syslogFormat]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

and the python code


# Imports

import logging
import logging.config
import os
import re
from threading import Thread


# Constants

CONFIG_FILENAME = 'E:\local\Config\syslog_interface.conf'
MCU_LIST_FILENAME = 'E:\local\Scada_Devices\mcu.txt'


# Classes



# PingIt

class PingIt(Thread):
def __init__(self, mcuIP):
Thread.__init__(self)
self.ip = mcuIP
self.status = -1

def run(self):
pinging = os.popen("ping -n 2 " + self.ip, 'r')

while 1:
line = pinging.readline()

if not line:
break

gotResponse = re.findall(PingIt.lifeline, line)

if gotResponse:
self.status = int(gotResponse[0])


# Main Routine

#
# Get the logger configuration information
#
logging.config.fileConfig(CONFIG_FILENAME)

#
# Check if running from command line and create logger
#
if os.environ.get('PROMPT'):
#
# create logger for output to stdout
#
logger = logging.getLogger('root')
else:
#
# create logger for output to logfile
#
logger = logging.getLogger('log')

#
# Create logger for syslog output
#
syslog = logging.getLogger('syslog')

#
# Declare variables
#
PingIt.lifeline = re.compile(r"Received = (\d)")
mcu_dict = {}
ping_list = []
status = ("Not responding", "Responded to only 1 ping of 2", "Alive")

#
# Open the MCU file
#
mcu_file = open(MCU_LIST_FILENAME, 'r')

#
# Loop through the contents of the MCU file and ping the IPs
#
for mcu in mcu_file:
#
# mcu file contents example
# 192.168.97.227 MCU_HMSTD
#
# mcu_info[0] = MCU IP Address
# mcu_info[1] = MCU Name
#
mcu_info = mcu.split()
mcu_dict[mcu_info[0]] = mcu_info[1]
current = PingIt(mcu_info[0])
logger.info("Pinging " + mcu_info[1])
ping_list.append(current)
current.start()

#
# Loop through ping list and print the response
#
for pinged in ping_list:
pinged.join()
logger.info("Status - " + mcu_dict[pinged.ip] + " is " + 
status[pinged.status])
syslog.info("Status - " + mcu_dict[pinged.ip] + " is " + 
status[pinged.status])

This is the output from the code

2010-07-06 14:43:58,280 - log - INFO - Status - netboss2 is Not responding
msg =  <134>2010-07-06 14:43:58,312 - syslog - INFO - Status - netboss2 is Not 
responding
address =  ('141.232.41.205', 514)
Traceback (most recent call last):
  File "C:\Python31\lib\logging\handlers.py", line 786, in emit
self.socket.sendto(msg, self.address)
TypeError: sendto() takes exactly 3 arguments (2 given)
2010-07-06 14:43:58,312 - syslog - INFO - Status - netboss2 is Not responding

This is the handlers.py code from the library.  I added the print statement to 
figure out why it is asking for three args but only getting two.

Line 777 of handlers.py

try:
if self.unixsocket:
try:
self.socket.send(msg)
except socket.error:
self._connect_unixsocket(self.address)
self.socket.send(msg)
else:
print('msg = ', msg, '\naddress = ', self.address)
self.socket.send

Re: Python -- floating point arithmetic

2010-07-08 Thread Mark Dickinson
On Jul 8, 3:29 pm, Adam Skutt  wrote:
> On Jul 8, 9:22 am, Mark Dickinson  wrote:
> > On Jul 8, 2:00 pm, Adam Skutt  wrote:
> > > For some computations, the number of bits required to
> > > get the desired precision can quickly overwhelm the finite limitations
> > > of your machine (e.g., you run out of RAM first or the time to compute
> > > the answer is simply unacceptable).
>
> > Perhaps in theory.  In practice, though, it's very rare to need to
> > increase precision more than once or twice beyond an initial first
> > guesstimate, and the amount of extra precision needed is small.  That
> > increase is unlikely to cause problems unless you were operating right
> > up against your machine's limits in the first place.
>
> I suspect your platitude isn't especially comforting for those who
> need more computing capability than we can currently construct.
> However, I wouldn't call the amount of extra needed precision "small"

I think that's because we're talking at cross-purposes.

To clarify, suppose you want to compute some value (pi;  log(2);
AGM(1, sqrt(2)); whatever...) to 1000 significant decimal places.
Then typically the algorithm (sometimes known as Ziv's onion-peeling
method) looks like:

(1) Compute an initial approximation to 1002 digits (say), with known
absolute error (given by a suitable error analysis); for the sake of
argument, let's say that you use enough intermediate precision to
guarantee an absolute error of < 0.6 ulps.

(2) Check to see whether that approximation unambiguously gives you
the correctly-rounded 1000 digits that you need.

(3) If not, increase the target precision (say by 3 digits) and try
again.

It's the precision increase in (3) that I was calling small, and
similarly it's step (3) that isn't usually needed more than once or
twice.  (In general, for most functions and input values;  I dare say
there are exceptions.)

Step (1) will often involve using significantly more than the target
precision for intermediate computations, depending very much on what
you happen to be trying to compute.  IIUC, it's the extra precision in
step (1) that you don't want to call 'small', and I agree.

IOW, I'm saying that the extra precision required *due to the table-
maker's dilemma* generally isn't a concern.

I actually agree with much of what you've said.  It was just the
"impossible" claim that went over the top (IMO).  The MPFR library
amply demonstrates that computing many transcendental functions to
arbitrary precision, with correctly rounded results, is indeed
possible.

--
Mark
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python script to install python

2010-07-08 Thread Vincent Davis
On Thu, Jul 8, 2010 at 9:11 AM, Daniel Fetchinson
 wrote:
>> I would like to have a python script that would download the most
>> recent svn of python, configure, make, install and cleanup after
>> itself. I am not replacing the python version I would be using to run
>> the script.
>> I was struggling to get this to work and I assume someone else has
>> done it better.  Any pointers?
>
> Assuming you are on linux I recommend not using a python script for
> this but rather a shell script. From a python script you would most of
> the time be calling shell commands anyway. In a shell script you would
> do something like this:
>
> 
> #!/bin/bash
>
> svn checkout 
> cd whatever
> ./configure --whatever-options-you-like
> make
> # you probably want to run this as root
> make install
> # you probably don't want to be root anymore
> cd ..
> rm -rf whatever
>
> 

Ok I'll take your advice and just use a shell script. I am on osx by the way.

Thanks
Vincent
>
> If you are on windows I assume a similar strategy is best.
>
> Cheers,
> Daniel
>
>
>
> --
> Psss, psss, put it down! - http://www.cafepress.com/putitdown
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Giacomo Boffi
"Zooko O'Whielacronx"  writes:

> I'm starting to think that one should use Decimals by default and
> reserve floats for special cases.

would you kindly lend me your Decimals ruler? i need to measure the
sides of the triangle whose area i have to compute
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is This Open To SQL Injection?

2010-07-08 Thread Victor Subervi
On Thu, Jul 8, 2010 at 10:45 AM, Stephen Hansen wrote:

> On 7/8/10 6:20 AM, Victor Subervi wrote:
> > However, I now have another error. Here is my current command:
> >
> > cursor.execute("insert into personalDataKeys (Store, User,
> > useFirstName, useLastName, usePhone, useCell, useFax, useAddress,
> > useShippingAddress, useDOB, useEmail, usePW) values (%s, %s, %s, %s, %s,
> > %s, %s, %s, %s, %s, %s, %s)", ([store, user] + col_vals))
>
> Quick point: why the parens around [store, user] + col_vars? They're
> redundant.
>
> >
> > I get this error from MySQL which I am having a hard time understanding:
> >
> > LATEST FOREIGN KEY ERROR
> > 
> > 100708  6:15:01 Transaction:
> > TRANSACTION 0 9382, ACTIVE 0 sec, process no 5326, OS thread id
> > 1169992000 inserting, thread declared inside InnoDB 500
> > mysql tables in use 1, locked 1
> > 3 lock struct(s), heap size 368, undo log entries 1
> > MySQL thread id 1502, query id 23700 localhost beno update
> > insert into personalDataKeys (Store, User, useFirstName, useLastName,
> > usePhone, useCell, useFax, useAddress, useShippingAddress, useDOB,
> > useEmail, usePW) values ('specialty', 'patients', 1, 1, 1, 1, 1, 1, 0,
> > 1, 1, 1)
> > Foreign key constraint fails for table `test/personalDataKeys`:
> > ,
> >   CONSTRAINT `personalDataKeys_ibfk_1` FOREIGN KEY (`Store`) REFERENCES
> > `products` (`Store`)
>
> A foreign key is a constraint, a restriction, which says that rows in
> TableA ("personalDataKeys") depend on certain *matching* rows to already
> exist and always be valid in TableB ("products"); the exact match is a
> column they have in common ("Store").
>
> The purpose of foreign keys is to keep data consistent. Here, it appears
> as if you have established a key such that the 'store' column in your
> personalDataKeys table must point to a certain row in the products table
> which has a 'store' column of the exact same value.
>
> This error message is indicating that when you do this INSERT, there is
> no corresponding row in the products table.
>

mysql> describe products Store;
+---+-+--+-+-+---+
| Field | Type| Null | Key | Default | Extra |
+---+-+--+-+-+---+
| Store | varchar(40) | NO   | MUL | NULL|   |
+---+-+--+-+-+---+
1 row in set (0.00 sec)

mysql> describe personalDataKeys Store;
+---+-+--+-+-+---+
| Field | Type| Null | Key | Default | Extra |
+---+-+--+-+-+---+
| Store | varchar(40) | NO   | MUL | NULL|   |
+---+-+--+-+-+---+
1 row in set (0.00 sec)

They both use innodb. They're both indexed. I was thinking after getting
your email that maybe I'd set the varchars to different lengths, but no.
However...

mysql> select * from products;
Empty set (0.00 sec)

Is it that I can't insert into personalDataKeys until I've first done so in
products? After rethinking this, it occurred to me that I probably made a
mistake in copying my create table command from personalData to
personalDataKeys, both of which had the foreign key of Store referenced to
table products. That wasn't necessary, since personalDataKeys only needs to
be associated with personalData, so I dropped and recreated the table,
updating personalDataKeys foreign key to reference personalData; however,
once again:

mysql> select * from personalData;
Empty set (0.00 sec)

Here's the deal:

mysql> describe personalData;
+---+--+--+-+++
| Field | Type | Null | Key | Default|
Extra  |
+---+--+--+-+++
| ID| int(10) unsigned | NO   | PRI | NULL   |
auto_increment |
| Store | varchar(40)  | NO   | MUL | NULL
||
| User  | varchar(50)  | NO   | MUL | NULL
||
| FirstName | varchar(100) | NO   | | NULL
||
| LastName  | varchar(100) | NO   | | NULL
||
| Phone | varchar(13)  | YES  | | NULL
||
| Cell  | varchar(13)  | YES  | | NULL
||
| Fax   | varchar(13)  | YES  | | NULL
||
| AddressID | int(11)  | NO   | MUL | NULL
||
| ShippingAddressID | int(11)  | NO   | MUL | NULL
||
| DOB   | date | YES  | | 2000-01-01
||
| Email | varchar(100) | NO   | | NULL
||
| PW| varchar(12)  | NO   | | NULL
||
+---+--+--+-+++
13 rows in set (0.00 sec)

mysql> describe personalDataKeys;

Re: Python -- floating point arithmetic

2010-07-08 Thread Chris Rebert
On Thu, Jul 8, 2010 at 8:52 AM, Giacomo Boffi  wrote:
> "Zooko O'Whielacronx"  writes:
>> I'm starting to think that one should use Decimals by default and
>> reserve floats for special cases.
>
> would you kindly lend me your Decimals ruler? i need to measure the
> sides of the triangle whose area i have to compute

If your ruler doesn't have a [second] set of marks for centimeters and
millimeters, that's really one cheap/cruddy ruler you're using.

Cheers,
Chris
--
Metrication!
http://blog.rebertia.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Zooko O'Whielacronx
On Thu, Jul 8, 2010 at 4:58 AM, Adam Skutt  wrote:
>
> I can't think of any program I've ever written where the inputs are
> actually intended to be decimal.  Consider a simple video editing
> program, and the user specifies a frame rate 23.976 fps.  Is that what
> they really wanted?  No, they wanted 24000/1001 but didn't feel like
> typing that.

Okay, so there was a lossy conversion from the user's intention
(24000/1001) to what they typed in (23.976).

>>> instr = '23.976'

Now as a programmer you have two choices:

1. accept what they typed in and losslessly store it in a decimal:

>>> from decimal import Decimal as D
>>> x = D(instr)
>>> print x
23.976

2. accept what they typed in and lossily convert it to a float:

>>> x = float(instr)
>>> print "%.60f" % (x,)
23.97509050529822707176208496093750

option 2 introduces further "error" between what you have stored in
your program and what the user originally wanted and offers no
advantages except for speed, right?

>> I'm sorry, what will never be true? Are you saying that decimals have
>> a disadvantage compared to floats? If so, what is their disadvantage?
>
> He's saying that once you get past elementary operations, you quickly
> run into irrational numbers, which you will not be representing
> accurately.  Moreover, in general, it's impossible to even round
> operations involving transcendental functions to an arbitrary fixed-
> precision, you may need effectively infinite precision in order to the
> computation.  In practice, this means the error induced by a lossy
> input conversion (assuming you hadn't already lost information) is
> entirely negligible compared to inherent inability to do the necessary
> calculations.

But this is not a disadvantage of decimal compared to float is it?
These problems affect both representations. Although perhaps they
affect them differently, I'm not sure.

I think sometimes people conflate the fact that decimals can easily
have higher and more variable precision than floats with the fact that
decimals are capable of losslessly storing decimal values but floats
aren't.

Regards,

Zooko
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is This Open To SQL Injection?

2010-07-08 Thread John Nagle

On 7/7/2010 11:52 AM, Stephen Hansen wrote:

On 7/7/10 11:38 AM, Victor Subervi wrote:

Hi;
I have this code:

 sql = 'insert into personalDataKeys values (%s, %s, %s)' % (store,
user, ', %s'.join('%s' * len(col_vals))
 cursor.execute(sql, col_vals)


  Bad approach. Don't put actual data into an SQL statement using
string parameter substitution.  Try this:

values = (store, user) + tuple(col_vals) # all values to be inserted
valuesql = ",".join(["%s"]*len(values)) # '%s,%s,%s,%s,%s,%s'
sql = "INSERT INTO personaldatakeys VALUES (" + valuesql + ")"
cursor.execute(sql, values) # execute INSERT

"valuefields" is always some number of repeats of comma-separated "%s"
Anything in "values" will be escaped properly.  No SQL injection
vulnerability.

John Nagle



--
http://mail.python.org/mailman/listinfo/python-list


How is Unladen Swallow coming along?

2010-07-08 Thread John Nagle

   How is Unladen Swallow coming along?  Looking at the site, code is
being checked in and issues are being reported, but the last quarterly
release was 2009 Q3.  They missed their January 2010 release date
for "2009 Q4", so they're now about 6 months behind their project
plan.

("http://code.google.com/p/unladen-swallow/wiki/ProjectPlan";)

John Nagle
--
http://mail.python.org/mailman/listinfo/python-list


Re: Is This Open To SQL Injection?

2010-07-08 Thread Stephen Hansen
On 7/8/10 9:03 AM, Victor Subervi wrote:
> mysql> describe products Store;
> +---+-+--+-+-+---+
> | Field | Type| Null | Key | Default | Extra |
> +---+-+--+-+-+---+
> | Store | varchar(40) | NO   | MUL | NULL|   |
> +---+-+--+-+-+---+
> 1 row in set (0.00 sec)
> 
> mysql> describe personalDataKeys Store;
> +---+-+--+-+-+---+
> | Field | Type| Null | Key | Default | Extra |
> +---+-+--+-+-+---+
> | Store | varchar(40) | NO   | MUL | NULL|   |
> +---+-+--+-+-+---+
> 1 row in set (0.00 sec)
> 
> They both use innodb. They're both indexed. I was thinking after getting
> your email that maybe I'd set the varchars to different lengths, but no.

A foreign key isn't about the schema, per se; its not about the
varchar's being different lengths (as they discard trailing padding)--
its about *data*. True, if you had varchar(20) and varchar(40), then if
any string longer then 20 wouldn't ever pass -- but that's really
secondary. (That's not saying a database may refuse to accept a FK if
data types are mismatched)

If "personalDataKeys" has a foreign key connecting it to "products",
then you can't add something to personalDataKeys with store =
"specialty" unless something already exists in "products" with store =
"speciality";

> However...
> 
> mysql> select * from products;
> Empty set (0.00 sec)
> 
> Is it that I can't insert into personalDataKeys until I've first done so
> in products? 

Yes, that's precisely what foreign keys do.

> That wasn't necessary, since personalDataKeys only
> needs to be associated with personalData, so I dropped and recreated the
> table, updating personalDataKeys foreign key to reference personalData;
> however, once again:

Are you certain this is what you want? It sounds like you may be using
foreign keys without fully understanding what they are.

Think of them like a big arrow.

If you define a foreign key in personalDataKeys, referencing
personalData, you should picture a large arrow pointing from
personalDataKeys to personalData.

It's pointing because the "constraint" created by the foreign key means,
"Every record in this table, personalDataKeys, has a column which *must*
exist in its referenced table, personalData, before that record is
allowed to be added."

A foreign key isn't just a description of a relationship: its a strict
rule, declaring that a certain field in one table *actually* refers
directly to a *specific* row in *another* table: therefore, this field
can't be allowed to be any value which doesn't exist already in that
other table.

A "primary key" lets you uniquely identify a certain row in one table. A
"foreign key" lets you identify a certain row in *another table*, that
this table ultimately depends on.

> In personalDataKeys I store which fields will be required for a given
> store as it relates to personal data. For example, if there is a
> pharmacy with users 'doctors' and 'patients', certain fields in
> personalData will be required for one but not the other, and this needs
> to be inserted into personalDataKeys. 

My concern here is that you're making *columns* which are
"store-dependent", such as sometimes in one store, personalData will
have a column/field named "foo", but another store it won't use "foo"
but instead use "bar", depending on how the store itself is configured.

I'd refer you back to my previous email which described two schemes to
record "store-dependant" data: one using a separate table for each store
type, another using a generic key/value table. Having one big table with
a big mix of columns that various store configurations pick and choose
seems like a very inflexible design.

Additionally (if you do keep this design), these two tables you
described seem to make the columns that are used tied to *users*, not
*stores*. The key for personalDataKeys is (Store, User): but isn't it
the case that for a certain kind of store (i.e., a pharmacy), /all/
users in that store will have the same fields in personalData be
relevant? So shouldn't "personalDataKeys" really be "storeDataKeys"?
I.e., a configuration of the store itself of what data keys it considers
relevant.

> All of this, however, obviously
> happens before any data is actually entered into either personalData or
> products. 

Yeah, the constraints and such happen before data is entered. But once
they are created, you have to actual enter data in the correct order.
The constraints enforce consistency so programmer-error can't introduce
data into the tables which is out of whack with the data layout.

-- 

   Stephen Hansen
   ... Also: Ixokai
   ... Mail: me+list/python (AT) ixokai (DOT) io
   ... Blog: http://meh.ixokai.io/



signature.asc
Description: OpenPGP digital signature
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Issues compiling 2.6.5 on AIX 6.1

2010-07-08 Thread Thomas Jollans
On 07/08/2010 04:36 PM, Stopp, Bryan wrote:
> I’ve seen other threads on this issue, but the resolution still doesn’t
> seem to exist for me.
> 
>  
> 
> I’m running the configure script with these parameters:
> 
>  
> 
> ./configure --prefix=/build/tools \
> 
> --exec-prefix=/build/tools \
> 
> --enable-shared \
> 
> --enable-ipv6 \
> 
> --with-gcc \
> 
> --with-pth
> 
>  
> 
> I also want to state that I already edited all of the configure &
> config.guess scripts to comprehend AIX6.1 (they’re not updated yet).

This smells horribly like rather risky business. I don't know what you
changed or how experienced you are when it comes to editing these
auto-generated, system-specific files.

Have you tried with Python 2.7, or do you need 2.6? Python 2.7 might
work here?

Since configure and config.guess are auto-generated, maybe you can
regenerate them with a newer/updated version of autoconf that supports
your system.

Quite frankly, it surprises me that changes to configure would be
necessary. Is the system that unusual?

What happens if you --disable-shared ? I expect you want the shared
library, but - does it work?

Just some random thoughts -- I know nothing about AIX and little about
cross-UNIX portability beyond, to an extent, GNU vs BSD.

Cheers,

Thomas

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is This Open To SQL Injection?

2010-07-08 Thread Stephen Hansen
On 7/7/10 11:52 AM, Stephen Hansen wrote:
> On 7/7/10 11:38 AM, Victor Subervi wrote:
>> Hi;
>> I have this code:
>>
>> sql = 'insert into personalDataKeys values (%s, %s, %s)' % (store,
>> user, ', %s'.join('%s' * len(col_vals))
>> cursor.execute(sql, col_vals)
> 
> First, its always best to be explicit with insert statements. Meaning,
> don't rely on the underlining structure of a table, as in:
> 
> INSERT INTO YourRandomTable VALUES ("my", "value", "here");
> 
> Instead, do:
> 
> INSERT INTO YourRandomTable (field1, field2, field3) VALUES ("my",
> "value", "here");

I suddenly feel a need to come back and explain *why* I make the claim
to 'best' above: the explicit naming of the fields in the INSERT,
specifically, since others have shown how to do the INSERT safely while
keeping the essentially variable number of items in the values clause.

I still would advise against that approach even if it is safe from a SQL
Injection standpoint: but for a different reason entirely, that of
long-term maintainability.

No design is perfect; no customer specification (no matter how vetted,
analyzed, and approved by stakeholders) survives implementation and
real-life usage.

If you always select specific columns in a specific order (i.e., always
SELECT this, that, other; and never SELECT *), and always insert with
your columns specified (i.e., always INSERT INTO blah (this, that,
other) and never INSERT INTO blah VALUES (..)), then it lets you adapt
your application in the future when something comes up.

Specifically, it lets you add new columns without breaking everything :)
Now, those new columns would need to either allow NULL's or have a
default value of course.

But some day down the road you can go and do an ALTER TABLE to add say,
"my_whatever" to the above, and you don't suddenly have to vet every
single piece of code which accesses that table. All the existing code
will still work: its getting the pieces of data it knows how to use. As
you need to, you can adjust that code to take into account this new
piece of data. But by making any new additions "optional" in your SQL,
and making all your other accesses explicit, it just eases migration and
maintenance in future updates.

Some may disagree, I dunno. I just find in my experience that following
that practice has saved a lot of time and effort down the road.
(Especially during migrations from old versions to new versions, and
running versions concurrently during some test-phase, etc, or rolling
back a new version if a critical bug is found: the changes made to the
database to support the new versions can safely persist without you
having to do a much more expensive / time-consuming restoration of the
database from a backup).

-- 

   Stephen Hansen
   ... Also: Ixokai
   ... Mail: me+list/python (AT) ixokai (DOT) io
   ... Blog: http://meh.ixokai.io/



signature.asc
Description: OpenPGP digital signature
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Debugging a segmentation fault

2010-07-08 Thread Paul Rubin
"dierkerdm...@mail.com"  writes:
> my python project crashes in a non reproducible way. With gdb I got
> the backtraces given below.
> How can I possibly figure out the reason for the segfaults that occur
> under Linux and Windows, using Python 2.6 in both cases.

It's a big C program and you have to debug it as one.  Well, first of
all try upgrading to the newest versions and see if there is already a
fix.  Be especially suspicious of any C extension modules you're using.
There are also some compile time options that let you rebuild Python
with extra consistency checks for reference counts.  Turn those on and
see what happens.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Adam Skutt
On Jul 8, 11:36 am, Mark Dickinson  wrote:
> I think that's because we're talking at cross-purposes.
>
> To clarify, suppose you want to compute some value (pi;  log(2);
> AGM(1, sqrt(2)); whatever...) to 1000 significant decimal places.
> Then typically the algorithm (sometimes known as Ziv's onion-peeling
> method) looks like:
>
> (1) Compute an initial approximation to 1002 digits (say), with known
> absolute error (given by a suitable error analysis); for the sake of
> argument, let's say that you use enough intermediate precision to
> guarantee an absolute error of < 0.6 ulps.
>
> (2) Check to see whether that approximation unambiguously gives you
> the correctly-rounded 1000 digits that you need.
>
> (3) If not, increase the target precision (say by 3 digits) and try
> again.
>
> It's the precision increase in (3) that I was calling small, and
> similarly it's step (3) that isn't usually needed more than once or
> twice.  (In general, for most functions and input values;  I dare say
> there are exceptions.)
>
> Step (1) will often involve using significantly more than the target
> precision for intermediate computations, depending very much on what
> you happen to be trying to compute.  IIUC, it's the extra precision in
> step (1) that you don't want to call 'small', and I agree.
>
> IOW, I'm saying that the extra precision required *due to the table-
> maker's dilemma* generally isn't a concern.
Yes, though I think attributing only the precision added in step 3 to
the table-maker's dilemma isn't entirely correct.  While it'd be
certainly less of a dilemma if we could precompute the necessary
precision, it doesn't' help us if the precision is generally
unbounded.  As such, I think it's really two dilemmas for the price of
one.

> > I actually agree with much of what you've said.  It was just the
> "impossible" claim that went over the top (IMO).  The MPFR library
> amply demonstrates that computing many transcendental functions to
> arbitrary precision, with correctly rounded results, is indeed
> possible.
That's because you're latching onto that word instead of the whole
sentence in context and making a much bigger deal out of than is
appropriate.  The fact that I may not be able to complete a given
calculation for an arbitrary precision is not something that can be
ignored.  It's the same notional problem with arbitrary-precision
integers: is it better to run out of memory or overflow the
calculation?  The answer, of course, is a trick question.

Adam

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Mark Dickinson
On Jul 8, 2:59 pm, Stefan Krah  wrote:
> pow() is trickier. Exact results have to be weeded out before
> attempting the correction loop for correct rounding, and this is
> complicated.
>
> For example, in decimal this expression takes a long time (in cdecimal
> the power function is not correctly rounded):
>
> Decimal('100.0') ** Decimal('-557.71e-74288')

Hmm.  So it does.  Luckily, this particular problem is easy to deal
with.  Though I dare say that you have more up your sleeve. :)?

--
Mark
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Adam Skutt
On Jul 8, 12:38 pm, "Zooko O'Whielacronx"  wrote:
> On Thu, Jul 8, 2010 at 4:58 AM, Adam Skutt  wrote:
>
> > I can't think of any program I've ever written where the inputs are
> > actually intended to be decimal.  Consider a simple video editing
> > program, and the user specifies a frame rate 23.976 fps.  Is that what
> > they really wanted?  No, they wanted 24000/1001 but didn't feel like
> > typing that.
>
> Okay, so there was a lossy conversion from the user's intention
> (24000/1001) to what they typed in (23.976).
>
> >>> instr = '23.976'
>
> Now as a programmer you have two choices:
>
> 1. accept what they typed in and losslessly store it in a decimal:
>
> >>> from decimal import Decimal as D
> >>> x = D(instr)
> >>> print x
>
> 23.976
>
> 2. accept what they typed in and lossily convert it to a float:
>
> >>> x = float(instr)
> >>> print "%.60f" % (x,)
>
> 23.97509050529822707176208496093750
>
> option 2 introduces further "error" between what you have stored in
> your program and what the user originally wanted and offers no
> advantages except for speed, right?

No, you have a third choice, and it's the only right choice:
3. Convert the input to user's desired behavior and behave
accordingly.  Anything else, here, will result in A/V sync issues.
Which is really my point, just because we write '23.976' on the
command-line doesn't necessarily mean that's what we meant.  Humans
are pretty lazy, and we write rational numbers as incomplete decimals
all of the time.

> But this is not a disadvantage of decimal compared to float is it?
> These problems affect both representations. Although perhaps they
> affect them differently, I'm not sure.
>
> I think sometimes people conflate the fact that decimals can easily
> have higher and more variable precision than floats with the fact that
> decimals are capable of losslessly storing decimal values but floats
> aren't.
>
No, it's not a specific disadvantage of decimal compared to float.
I'm not sure why David C. choose to phrase it in those specific terms,
though I'm not sure it matters all that much.  What I believe is one
must understand that the underlying issues are fundamental, and the
only way to solve the issues is to educate programmers so they can
write code that behaves correctly in the face of rounding.  And I do
believe you're correct that programmers frequently see one desirable
behavior of decimal FP over binary FP and therefore assume all the
badness must have gone away.

Adam

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to test/troubshoot an extension (pylibconfig)?

2010-07-08 Thread Grant Edwards
On 2010-07-08, Grant Edwards  wrote:
> On 2010-07-07, Grant Edwards  wrote:
>
>> Oops.  Those Python bindings are for version 1.3.2 of libconfig (which
>> does work).  They don't work with the current version of libconfig.

>Python 2.6.5 (release26-maint, Jun 22 2010, 12:58:11) 
>[GCC 4.3.4] on linux2
>Type "help", "copyright", "credits" or "license" for more information.
>>>> import pylibconfig
>>>> conf = pylibconfig.Config()
>*** glibc detected *** /usr/bin/python2.6: corrupted double-linked list: 
> 0x08065c48 ***
>
> Am I correct in concluding it has to be a memory corruption problem in
> the library itself?  

Nope.  That problem was cause by having two versions of the library
installed -- one under /usr and the other under /usr/local.

-- 
Grant Edwards   grant.b.edwardsYow! Gee, I feel kind of
  at   LIGHT in the head now,
  gmail.comknowing I can't make my
   satellite dish PAYMENTS!
-- 
http://mail.python.org/mailman/listinfo/python-list


ANN: ActivePython 2.6.5.14 is now available

2010-07-08 Thread Sridhar Ratnakumar
We are pleased to announce the availability of ActivePython 2.6.5.14.

http://www.activestate.com/activepython

This is a minor release with several bug fixes. As usual, it includes an 
updated Python Package Manager (PyPM) with updates to essential packages such 
as Distribute (a compatible fork of setuptools), virtualenv, pip and 
SQLAlchemy. See the release notes for full details:

http://docs.activestate.com/activepython/2.6/relnotes.html#changes


What is ActivePython?
-

ActivePython is ActiveState's binary distribution of Python. Builds for 
Windows, Mac OS X, Linux are made freely available. Solaris, HP-UX and AIX 
builds, and access to older versions are available in ActivePython Business, 
Enterprise and OEM editions:

http://www.activestate.com/python

ActivePython includes the Python core and the many core extensions: zlib and 
bzip2 for data compression, the Berkeley DB (bsddb) and SQLite (sqlite3) 
database libraries, OpenSSL bindings for HTTPS support, the Tix GUI widgets for 
Tkinter, ElementTree for XML processing, ctypes (on supported platforms) for 
low-level library access, and others. The Windows distribution ships with 
PyWin32 -- a suite of Windows tools developed by Mark Hammond, including 
bindings to the Win32 API and Windows COM.

ActivePython 2.6 and 2.7 also include a binary package manager for Python 
(PyPM) that can be used to install packages much easily. For example:

  C:\>pypm install mysql-python
  [...]

  C:\>python
  >>> import MySQLdb
  >>>

See this page for full details:

http://docs.activestate.com/activepython/2.6/whatsincluded.html

As well, ActivePython ships with a wealth of documentation for both new and 
experienced Python programmers. In addition to the core Python docs, 
ActivePython includes the "What's New in Python" series, "Dive into Python", 
the Python FAQs & HOWTOs, and the Python Enhancement Proposals (PEPs).

An online version of the docs can be found here:

http://docs.activestate.com/activepython/2.6/

We would welcome any and all feedback to:

activepython-feedb...@activestate.com

Please file bugs against ActivePython at:

http://bugs.activestate.com/enter_bug.cgi?product=ActivePython

On what platforms does ActivePython run?


ActivePython includes installers for the following platforms:

- Windows/x86
- Windows/x64 (aka "AMD64")
- Mac OS X
- Linux/x86
- Linux/x86_64 (aka "AMD64")
- Solaris/SPARC (Business, Enterprise or OEM edition only)
- Solaris/x86 (Business, Enterprise or OEM edition only)
- HP-UX/PA-RISC (Business, Enterprise or OEM edition only)
- HP-UX/IA-64 (Enterprise or OEM edition only)
- AIX/PowerPC (Business, Enterprise or OEM edition only)
- AIX/PowerPC 64-bit (Business, Enterprise or OEM edition only)

Custom builds are available in Enterprise Edition:

http://www.activestate.com/enterprise-edition

Thanks, and enjoy!

The Python Team

--
Sridhar Ratnakumar
sridharr at activestate.com
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Debugging a segmentation fault

2010-07-08 Thread Christian Heimes
> my python project crashes in a non reproducible way. With gdb I got
> the backtraces given below.
> How can I possibly figure out the reason for the segfaults that occur
> under Linux and Windows, using Python 2.6 in both cases.

One of your third party C extension has a reference count bug. It looks
like it has an Py_INCREF() to little or a Py_DECREF() too much. The
first segfaults occurs in a decref macro:

  Objects/dictobject.c:911
  Py_XDECREF(ep->me_value);

, the second is a bit more obscure and hidden in the cyclic GC. The
error is either introduced by the same reference counting bug or in
error in the type definition and initialization.

Which third party products with C extensions do you use? Have you
updated your database adapter and NumPy yet?

Christian

-- 
http://mail.python.org/mailman/listinfo/python-list


Call for Applications - PSF Sponsored Sprints

2010-07-08 Thread Jesse Noller
The PSF is happy to open our first call for applications for sprint funding!

Have you ever had a group of people together to hack towards a common goal?
You've hosted a sprint!

Have you ever wanted to get a group of like minded Pythonistas together to hack
for a day? You're going to want to hold a sprint!

Whether you call them Sprints, Hackfests, Hack-a-thons, or any other name,
they're a great way to hang out with like-minded developers and work on common
code. Sprints are an unbeatable way to build friendships and contacts that will
last for years to come, and they're a great way to learn about something new if
you're just starting out.

The Python Software Foundation has set aside funds to be distributed to
world-wide sprint efforts. We're anticipating 2-3 events per month focused on
covering topics to help the entire community:

 - Python Core bug triage and patch submission (on-boarding new contributors)
 - Python Core documentation (including process documentation) improvements
 - Porting libraries/applications to Python 3
 - Python website/wiki content improvements
 - PyPI packaging hosting site improvements
 - Contribution to other "core" projects, such as packaging related issues.

If you are interested in holding a sprint on any of the topics above and you're
looking for some money to help out with sprint costs, we can help (up to a max
of $250 USD). Prepare an application including the following information:

 - Date and Location: Where will the event be? What day and time?
 - Organizers: Who are the event organizers and sprint coach? Is the sprint
   being run by a Python user group?
 - Attendees: How many participants do you expect?
 - Goal: What is the focus and goal of the sprint?
 - Budget: How much funding you are requesting, and what will you use it for?
 - Applications should be sent to: spri...@python.org with the subject "Sprint
   Funding Application - "

We encourage anyone - even those who have never held, or been to a sprint - to
consider holding one. We will help you as much as we can with welcome packets,
advertising, and hooking you up with required resources - anything to make it
possible.

As part of being approved, the you will need to agree to deliver a report
(hopefully, with pictures!) of the sprint to the Sprint Committee, so we can
post it on the sprint blog and site:

http://www.pythonsprints.com

If you have any questions or need more information, contact us by email at
spri...@python.org.

More information is up on our blog:
http://pythonsprints.com/2010/07/8/call-applications-now-open/
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is This Open To SQL Injection?

2010-07-08 Thread Victor Subervi
I've come to the realization that I don't need FKs at all here. Essentially,
what I need to do is consult personalDataKeys simply to determine what data
should be loaded into and retrieved from personalData. I was mistaken
because the data are not interdependent, it only appeared that way
superficially.

No, the data aren't loaded into one big table. There are about 10 fields
each in these tables.

Yes, I should rename it to storeUserDataKeys.

Thanks again, Stephen.
beno
-- 
http://mail.python.org/mailman/listinfo/python-list


pySimpleSessions - PHP sessions implemented in Python

2010-07-08 Thread christian schulze
Hey,

since there is no standalone sessions module for python (at least a
properly working one), I created one and thought i'd share it with
you.

This is the project:
http://code.google.com/p/pysimplesessions/

This is the introduction: 
http://code.google.com/p/pysimplesessions/wiki/Introduction

And finally the module source:
http://code.google.com/p/pysimplesessions/source/browse/trunk/sessions.py

If you need, there are some examples (partly working *g*):
http://code.google.com/p/pysimplesessions/source/browse/trunk/#trunk/examples

It would be great if I could get some feedback from you. ;)

cheers,
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Stefan Krah
Adam Skutt  wrote:
> > > I actually agree with much of what you've said.  It was just the
> > "impossible" claim that went over the top (IMO).  The MPFR library
> > amply demonstrates that computing many transcendental functions to
> > arbitrary precision, with correctly rounded results, is indeed
> > possible.
> That's because you're latching onto that word instead of the whole
> sentence in context and making a much bigger deal out of than is
> appropriate.  The fact that I may not be able to complete a given
> calculation for an arbitrary precision is not something that can be
> ignored.  It's the same notional problem with arbitrary-precision
> integers: is it better to run out of memory or overflow the
> calculation?  The answer, of course, is a trick question.

In the paper describing his strategy for correct rounding Ziv gives an
estimate for abnormal cases, which is very low.

This whole argument is a misunderstanding. Mark and I argue that correct
rounding is quite feasible in practice, you argue that you want guaranteed
execution times and memory usage. This is clear now, but was not so apparent
in the "impossible" paragraph that Mark responded to.


I think asking for strictly bounded resource usage is reasonable. In cdecimal
there is a switch to turn off correct rounding for exp() and log().



Stefan Krah



-- 
http://mail.python.org/mailman/listinfo/python-list


RE: Issues compiling 2.6.5 on AIX 6.1

2010-07-08 Thread Stopp, Bryan
These are good points, but I've fixed the configure & config.guess on
about 10 other OSS projects that I needed to compile on this machine. So
I know that my changes are correct. The changes boil down to:

There are a number of lines in the files that reference AIX versions for
configuring details about the system. Specifically, it'll be "if" or
"case" statements that look like:

*-ibm-aix5*)

*aix4*|*aix5*)

I just add the aix6 clause:

*-ibm-aix5* | *-ibm-aix6*)

*aix4*|*aix5*|*aix6*)

As Aix6 is binary compatible with 5, but the configure defaults it to an
unknown AIX version and completely mis-configures the compiler.

As for using the autoconf tool for my system, I'm not really sure if
it's even installed or if the latest autoconf supports this version.
Oddly enough I'm not the sys admin, but I do play one on TV.

I do want to stick with Python 2.6 if I can, but I will give compiling
2.7 a shot to see what, if anything, changes/is fixed.

Thanks for the feedback!

-B 


-Original Message-
From: python-list-bounces+cbds=argushealth@python.org
[mailto:python-list-bounces+cbds=argushealth@python.org] On Behalf
Of Thomas Jollans
Sent: Thursday, July 08, 2010 11:51 AM
To: python-list@python.org
Subject: Re: Issues compiling 2.6.5 on AIX 6.1

On 07/08/2010 04:36 PM, Stopp, Bryan wrote:
> I've seen other threads on this issue, but the resolution still
doesn't
> seem to exist for me.
> 
>  
> 
> I'm running the configure script with these parameters:
> 
>  
> 
> ./configure --prefix=/build/tools \
> 
> --exec-prefix=/build/tools \
> 
> --enable-shared \
> 
> --enable-ipv6 \
> 
> --with-gcc \
> 
> --with-pth
> 
>  
> 
> I also want to state that I already edited all of the configure &
> config.guess scripts to comprehend AIX6.1 (they're not updated yet).

This smells horribly like rather risky business. I don't know what you
changed or how experienced you are when it comes to editing these
auto-generated, system-specific files.

Have you tried with Python 2.7, or do you need 2.6? Python 2.7 might
work here?

Since configure and config.guess are auto-generated, maybe you can
regenerate them with a newer/updated version of autoconf that supports
your system.

Quite frankly, it surprises me that changes to configure would be
necessary. Is the system that unusual?

What happens if you --disable-shared ? I expect you want the shared
library, but - does it work?

Just some random thoughts -- I know nothing about AIX and little about
cross-UNIX portability beyond, to an extent, GNU vs BSD.

Cheers,

Thomas

-- 
http://mail.python.org/mailman/listinfo/python-list

PRIVILEGED AND CONFIDENTIAL
This email transmission contains privileged and confidential information 
intended only for the use of the individual or entity named above.  If the 
reader of the email is not the intended recipient or the employee or agent 
responsible for delivering it to the intended recipient, you are hereby 
notified that any use, dissemination or copying of this email transmission is 
strictly prohibited by the sender.  If you have received this transmission in 
error, please delete the email and immediately notify the sender via the email 
return address or mailto:postmas...@argushealth.com.  Thank you.




-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Stefan Krah
Mark Dickinson  wrote:
> On Jul 8, 2:59 pm, Stefan Krah  wrote:
> > pow() is trickier. Exact results have to be weeded out before
> > attempting the correction loop for correct rounding, and this is
> > complicated.
> >
> > For example, in decimal this expression takes a long time (in cdecimal
> > the power function is not correctly rounded):
> >
> > Decimal('100.0') ** Decimal('-557.71e-74288')
> 
> Hmm.  So it does.  Luckily, this particular problem is easy to deal
> with.  Though I dare say that you have more up your sleeve. :)?

Not at the moment, but I'll keep trying. :)


Stefan Krah


-- 
http://mail.python.org/mailman/listinfo/python-list


RE: Issues compiling 2.6.5 on AIX 6.1

2010-07-08 Thread Stopp, Bryan
I just wanted to follow up my previous email: I tried compiling 2.7
(without editing any config.guess or configure files as they are up to
date for AIX6) and it failed with the exact same errors.

So I'm still stuck and not sure what I should to do get this to compile.
Any other ideas out there?

-B 

-Original Message-
From: python-list-bounces+cbds=argushealth@python.org
[mailto:python-list-bounces+cbds=argushealth@python.org] On Behalf
Of Thomas Jollans
Sent: Thursday, July 08, 2010 11:51 AM
To: python-list@python.org
Subject: Re: Issues compiling 2.6.5 on AIX 6.1

On 07/08/2010 04:36 PM, Stopp, Bryan wrote:
> I've seen other threads on this issue, but the resolution still
doesn't
> seem to exist for me.
> 
>  
> 
> I'm running the configure script with these parameters:
> 
>  
> 
> ./configure --prefix=/build/tools \
> 
> --exec-prefix=/build/tools \
> 
> --enable-shared \
> 
> --enable-ipv6 \
> 
> --with-gcc \
> 
> --with-pth
> 
>  
> 
> I also want to state that I already edited all of the configure &
> config.guess scripts to comprehend AIX6.1 (they're not updated yet).

This smells horribly like rather risky business. I don't know what you
changed or how experienced you are when it comes to editing these
auto-generated, system-specific files.

Have you tried with Python 2.7, or do you need 2.6? Python 2.7 might
work here?

Since configure and config.guess are auto-generated, maybe you can
regenerate them with a newer/updated version of autoconf that supports
your system.

Quite frankly, it surprises me that changes to configure would be
necessary. Is the system that unusual?

What happens if you --disable-shared ? I expect you want the shared
library, but - does it work?

Just some random thoughts -- I know nothing about AIX and little about
cross-UNIX portability beyond, to an extent, GNU vs BSD.

Cheers,

Thomas

-- 
http://mail.python.org/mailman/listinfo/python-list

PRIVILEGED AND CONFIDENTIAL
This email transmission contains privileged and confidential information 
intended only for the use of the individual or entity named above.  If the 
reader of the email is not the intended recipient or the employee or agent 
responsible for delivering it to the intended recipient, you are hereby 
notified that any use, dissemination or copying of this email transmission is 
strictly prohibited by the sender.  If you have received this transmission in 
error, please delete the email and immediately notify the sender via the email 
return address or mailto:postmas...@argushealth.com.  Thank you.




-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Lua is faster than Fortran???

2010-07-08 Thread Luis M . González
On Jul 4, 5:58 pm, John Nagle  wrote:

>     TheUnladenSwallowpeople should in theory be able to reach
> that level of performance.  (Both groups are employed at Google.
> So their effectiveness will be compared.)
>
>                                 John Nagle

No. Collin Winter said that they will never be as fast as Chrome's V8
or similar JS engines,
since they were created from scratch to be super fast above all else.
On the other hand, US is a project to enhance an existing interpreter,
carrying a lot of the burden of early design decisions.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Zooko O'Whielacronx
On Thu, Jul 8, 2010 at 11:22 AM, Adam Skutt  wrote:
> On Jul 8, 12:38 pm, "Zooko O'Whielacronx"  wrote:
>> Now as a programmer you have two choices:
…
>> 1. accept what they typed in and losslessly store it in a decimal:
…
>> 2. accept what they typed in and lossily convert it to a float:

> No, you have a third choice, and it's the only right choice:
> 3. Convert the input to user's desired behavior and behave
> accordingly.  Anything else, here, will result in A/V sync issues.

Okay, please tell me about how this is done. I've never dealt with
this sort of issue directly.

As far as I can imagine, any way to implement option 3 will involve
accepting the user's input and storing it in memory somehow and then
computing on it. As far as I can tell, doing so with a decimal instead
of a float will never be worse for your outcome and will often be
better. But, please explain in more detail how this works.

Thanks!

Regards,

Zooko
-- 
http://mail.python.org/mailman/listinfo/python-list


Python Multi-Channel Audio

2010-07-08 Thread Alex Karpinski
I'm looking for some module or system of modules that can help me do a few 
things with audio

1. Playback of files (at least .wavs, other codecs would be nice but, hey, 
converting to a wav is easy)
2. Seek within the file
3. Control volume
3. Do all of these things by channel, e.g. play sound effect 1 on channels 1&2 
at equal volume and play effect #2 on only channel 2

I've got a setup with gstreamer and alsa right now, but I don't have any way of 
getting control of individual channels at the gstreamer level. I can easily do 
it at the alsa level and just manipulate the master left/right output, but 
that's not very helpful if it modifies all currently playing effects. I'm not 
even sure if this is possible to do with python, butsome pointers would really 
be great. 

(For the curious: This is part of the audio system for a larger immersive 
theater project, )
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How is Unladen Swallow coming along?

2010-07-08 Thread Luis M . González
On Jul 8, 1:42 pm, John Nagle  wrote:
>     How is Unladen Swallow coming along?  Looking at the site, code is
> being checked in and issues are being reported, but the last quarterly
> release was 2009 Q3.  They missed their January 2010 release date
> for "2009 Q4", so they're now about 6 months behind their project
> plan.
>
> ("http://code.google.com/p/unladen-swallow/wiki/ProjectPlan";)
>
>                                         John Nagle

Don't be shy.
Ask this question in Unladen Swallow's google group. They don't bite!

Luis
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Adam Skutt
On Jul 8, 2:00 pm, Stefan Krah  wrote:
>
> This whole argument is a misunderstanding. Mark and I argue that correct
> rounding is quite feasible in practice, you argue that you want guaranteed
> execution times and memory usage. This is clear now, but was not so apparent
> in the "impossible" paragraph that Mark responded to.
No, that's what I'm arguing for, though such a feature is important.
I'm pointing out that the feasibility of correct rounding is entirely
dependent on what you're doing.  For IEEE-754 double, it's feasible
for the elementary functions if you can tolerate intermediate
calculations that are more than twice as large as your double in the
corner cases.  Certainly, for a single calculation, this is
acceptable, but at how many calculations is it no longer acceptable?

Adam
-- 
http://mail.python.org/mailman/listinfo/python-list


Question about odd code in libconfig bindings

2010-07-08 Thread Grant Edwards

I'm playign with Python bindings for libconfig, and one of the methods
does something that seems very odd to me.  The purpose of the method
is to fetch the value found a a particular path within the
configuration namespace.

If the path exists and has a scalar value the method returns the tuple
(,True).  Otherwise it returns ('',False).  AFAICT, the latter
happens in either of two cases: the path doesn't exist at all, or the
path exists but doesn't have a scalar value (it's an aggretate object
such as a list, group, or array).

This seems distinctly un-pythonic.

I would think that the right thing to do would be to either return the
requested value or raise an exception.  The libconfig C++ API defines
a "SettingNotFound" exception and "SettingTypeException" that seem
appropriate in the two failure cases.

Is there something about implementing bindings using Boost that makes
this sort of (,) return tuple a desirable way to do
things?

FWIW, here's the method I find puzzling:

  tuple value ( const char * path )
  {
std::string v_string;
if ( config->lookupValue ( path, v_string ) )
  return make_tuple ( v_string.c_str(), true );

unsigned int v_uint;
if ( config->lookupValue ( path, v_uint ) )
  return make_tuple ( v_uint, true );

int v_int;
if ( config->lookupValue ( path, v_int ) )
  return make_tuple ( v_int, true );

bool v_bool;
if ( config->lookupValue ( path, v_bool ) )
  return make_tuple ( v_bool, true );

unsigned long long v_ulonglong;
if ( config->lookupValue ( path, v_ulonglong ) )
  return make_tuple ( v_ulonglong, true );

long long v_longlong;
if ( config->lookupValue ( path, v_longlong ) )
  return make_tuple ( v_longlong, true );

float v_float;
if ( config->lookupValue ( path, v_float ) )
  return make_tuple ( v_float, true );

double v_double;
if ( config->lookupValue ( path, v_double ) )
  return make_tuple ( v_double, true );

return make_tuple ( "", false );
  }


  


-- 
Grant Edwards   grant.b.edwardsYow! Don't SANFORIZE me!!
  at   
  gmail.com
-- 
http://mail.python.org/mailman/listinfo/python-list


"is not" operator?

2010-07-08 Thread sturlamolden
What happens here? Does Python (2.6.5) have an "is not" operator?

>>> a = 5
>>> print (a is not False)
True
>>> print (a is (not False))
False
>>> print (not (a is False))
True

It seems "y is not x" fits well with spoken English, but it is also a
bit surprising that "y is not x" does not mean "y is (not x)" but "not
(y is x)". Why does Python reorder is and not operators, and what are
the formal rules for this behavior?














-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Lua is faster than Fortran???

2010-07-08 Thread sturlamolden
On 4 Jul, 21:59, Stefan Behnel  wrote:

> > I have already said I don't care about unladen swallow.
>
> What I meant, was: which of these benchmarks would have to be better to
> make you care? Because your decision not to care seems to be based on
> exactly these benchmarks.

Those are the only one I've seen.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: "is not" operator?

2010-07-08 Thread Robert Kern

On 7/8/10 4:10 PM, sturlamolden wrote:

What happens here? Does Python (2.6.5) have an "is not" operator?


Yes. From Grammar/Grammar:

comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco

--
http://mail.python.org/mailman/listinfo/python-list


Re: "is not" operator?

2010-07-08 Thread John Krukoff
On Thu, 2010-07-08 at 13:10 -0700, sturlamolden wrote:
> What happens here? Does Python (2.6.5) have an "is not" operator?
> 
> >>> a = 5
> >>> print (a is not False)
> True
> >>> print (a is (not False))
> False
> >>> print (not (a is False))
> True
> 
> It seems "y is not x" fits well with spoken English, but it is also a
> bit surprising that "y is not x" does not mean "y is (not x)" but "not
> (y is x)". Why does Python reorder is and not operators, and what are
> the formal rules for this behavior?

Don't forget about the similar "not in", as in:

>>> 'a' not in 'abc'
False

This is probably the section of documentation you want:
http://docs.python.org/reference/expressions.html#notin

-- 
John Krukoff 
Land Title Guarantee Company

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: "is not" operator?

2010-07-08 Thread sturlamolden
On 8 Jul, 22:32, Robert Kern  wrote:

> > What happens here? Does Python (2.6.5) have an "is not" operator?
>
> Yes. From Grammar/Grammar:
>
> comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'

Thanks :)

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How is Unladen Swallow coming along?

2010-07-08 Thread John Nagle

On 7/8/2010 12:19 PM, Luis M. González wrote:

On Jul 8, 1:42 pm, John Nagle  wrote:

 How is Unladen Swallow coming along?  Looking at the site, code is
being checked in and issues are being reported, but the last quarterly
release was 2009 Q3.  They missed their January 2010 release date
for "2009 Q4", so they're now about 6 months behind their project
plan.

("http://code.google.com/p/unladen-swallow/wiki/ProjectPlan";)

 John Nagle


Don't be shy.
Ask this question in Unladen Swallow's google group. They don't bite!


   Found this:

"http://www.python.org/dev/peps/pep-3146/#performance-retrospective";

   It's starting to work, but the performance improvement is tiny,
well under 2x faster than CPython.  Only 1.08x on "html5lib".
That's far less than they expected.  They were going for 5x,
which is far less than Shed Skin (which restricts Python)
already achieves.

John Nagle
--
http://mail.python.org/mailman/listinfo/python-list


Re: "is not" operator?

2010-07-08 Thread sturlamolden
On 8 Jul, 22:29, John Krukoff  wrote:

> Don't forget about the similar "not in", as in:

I noticed that in the grammar Robert posted. It never occurred to me
as being a special operator too, but it is.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Wolfram Hinderer
On 8 Jul., 15:10, Ethan Furman  wrote:

> Interesting.  I knew when I posted my above comment that I was ignoring
> such situations.  I cannot comment on the code itself as I am unaware of
> the algorithm, and haven't studied numbers extensively (although I do
> find them very interesting).
>
> So while you've made your point, I believe mine still stands --
> comparing floats using == to absolute numbers is almost always a mistake.

JFTR, it works because a+b == a+b (while I don't think that a+b == b+a
holds for all a and b).

In general, I totally agree with you.
-- 
http://mail.python.org/mailman/listinfo/python-list


object exported through manager from multiprocess module

2010-07-08 Thread Tomas Pelka

Hi all,

have troubles with exporting objects through managers from multiprocess 
module, see example:


Worker.py:
###
from multiprocessing import Process
from multiprocessing.managers import BaseManager
import pcapy
from impacket.ImpactDecoder import EthDecoder

__all__ = ['Worker']

class Worker(Process):
'''
Class for sniffing packets, runnig as root
'''

public = ['go', 'terminate']

def __init__(self):
super(Worker, self).__init__()
self.iface = ''
self.expr = ''
self.pcap = ''
# define packet decoder
self.decoder = EthDecoder()
# key for queue daemon, remotely on localhost:5000
self._keyQ = '10b222970537b97919db36ec757370d2'
class QueueManager(BaseManager): pass
QueueManager.register('get_dataQueue')
self._m = QueueManager(address=('127.0.0.1', 5000), 
authkey=self._keyQ)

self._m.connect()
self.dataQueue = self._m.get_dataQueue()
def go(self, iface, expr):
'''
start sniffer
'''
print "Starting sniffer"
self.iface = iface
self.expr = expr
super(Worker, self).start()
def terminate(self):
'''
terminate sniffer
'''
super(Worker, self).terminate()
def run(self):
print "sniffing ..."
print self.iface
print self.expr
self.pcap = pcapy.open_live(self.iface, 1500, 1, 0)
self.pcap.setfilter(self.expr)
self.pcap.loop(0, self.__packetHandler)
print "... done"
def __packetHandler(self, hdr, data):
'''
handles packets and put them in to the queue
'''
print "Handling packets"
#print data
print "Queue size: %i" % self.dataQueue.qsize()
print self.decoder.decode(data)
self.dataQueue.put(data)

Export object (Worker):
###
from Worker import Worker

class SniffManager(BaseManager): pass
SniffManager.register('Worker', callable=Worker)
Sm = SniffManager(address=('127.0.0.1', 5001), 
authkey='f1f16683f3e0208131b46d37a79c8921')

Ss = Sm.get_server()
Ss.serve_forever()


Call object methods remotely:
###
# get remote object
class WorkerManager(BaseManager): pass
WorkerManager.register('Worker')
w = WorkerManager(address=('127.0.0.1', 5001), 
authkey='f1f16683f3e0208131b46d37a79c8921')

w.connect()
worker = w.Worker()

worker.go(iface="ethx", expr="whatever") # WORKS FINE

but

worker.terminate()

File "/home/tom/web2py/applications/init/controllers/sniffer.py", line 
143, in index

worker.terminate()
File "", line 2, in terminate
File "/usr/lib/python2.6/multiprocessing/managers.py", line 740, in 
_callmethod

raise convert_to_error(kind, result)
AttributeError: 'NoneType' object has no attribute 'terminate'

Which is strange from my point of view, don't you think?
Thanks for advices,
cheers

--
Tomas Pelka

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python Multi-Channel Audio

2010-07-08 Thread Thomas Jollans
On 07/08/2010 09:17 PM, Alex Karpinski wrote:
> I'm looking for some module or system of modules that can help me do a few 
> things with audio
> 
> 1. Playback of files (at least .wavs, other codecs would be nice but, hey, 
> converting to a wav is easy)
> 2. Seek within the file
> 3. Control volume
> 3. Do all of these things by channel, e.g. play sound effect 1 on channels 
> 1&2 at equal volume and play effect #2 on only channel 2
> 
> I've got a setup with gstreamer and alsa right now, but I don't have any way 
> of getting control of individual channels at the gstreamer level. I can 
> easily do it at the alsa level and just manipulate the master left/right 
> output, but that's not very helpful if it modifies all currently playing 
> effects. I'm not even sure if this is possible to do with python, butsome 
> pointers would really be great. 

First of all, allow me to point to a something I hacked together
(mostly) a few weeks ago:
http://bitbucket.org/jollybox/pyaudiogen/wiki/Home

It's something of a library, VERY minimal/skeletal at the moment, for
audio generation (and/or processing) in Python. No idea if this is of
any help to you. Python 3 only. Multiple channel support is there,
though to be useful it'd still need a bit of glue. Not much to see there
yet all in all.

> 
> (For the curious: This is part of the audio system for a larger immersive 
> theater project, )

Though really, what I think you want is jack. It basically allows you to
plug things together in any way, and I'm sure you can control the volume
of individual "plugs".
I expect there is a Python API, but I haven't checked.
-- 
http://mail.python.org/mailman/listinfo/python-list


ANN: winreg_unicode 0.5.0

2010-07-08 Thread Daniel Stutzbach
I'm pleased to announce the release of winreg_unicode 0.5.0, the first
release of winreg_unicode.

The winreg_unicode package aims to be a drop-in replacement for Python
2's _winreg module. However, it returns unicode values where possible,
similar to Python 3's winreg module.

To illustrate the need for the winreg_unicode package, suppose an
application must query the registry to discover a filename and the registry
contains the string "međuresorna.txt". Python 2's _winreg module will return
"meduresorna.txt" instead, which is not the actual name of the file.

The winreg_unicode package does not yet contain all of _winreg's functions.
In particular, functions that write to the registry are not yet included.
Code contributions are welcome.

PyPi: http://pypi.python.org/pypi/winreg_unicode
Bug tracker: http://github.com/DanielStutzbach/winreg_unicode/issues
Source code: http://github.com/DanielStutzbach/winreg_unicode
--
Daniel Stutzbach, Ph.D.
President, Stutzbach Enterprises, LLC 
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: C interpreter in Lisp/scheme/python

2010-07-08 Thread George Neuner
On Thu, 08 Jul 2010 10:39:45 +0200, p...@informatimago.com (Pascal J.
Bourguignon) wrote:

>Nick Keighley  writes:
>> Nick Keighley  wrote:
>>> Rivka Miller  wrote:
>>
 Anyone know what the first initial of L. Peter Deutsch stand for ?
>>>
>>> Laurence according to wikipedia (search time 2s)
>>
>> oops! He was born Laurence but changed it legally to "L." including
>> the dot
>
>Too bad, "Laurence" is a nice name.

He probably hates the nickname "Larry".
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python Multi-Channel Audio

2010-07-08 Thread geremy condra
On Thu, Jul 8, 2010 at 2:11 PM, Thomas Jollans  wrote:
> On 07/08/2010 09:17 PM, Alex Karpinski wrote:
>> I'm looking for some module or system of modules that can help me do a few 
>> things with audio
>>
>> 1. Playback of files (at least .wavs, other codecs would be nice but, hey, 
>> converting to a wav is easy)
>> 2. Seek within the file
>> 3. Control volume
>> 3. Do all of these things by channel, e.g. play sound effect 1 on channels 
>> 1&2 at equal volume and play effect #2 on only channel 2
>>
>> I've got a setup with gstreamer and alsa right now, but I don't have any way 
>> of getting control of individual channels at the gstreamer level. I can 
>> easily do it at the alsa level and just manipulate the master left/right 
>> output, but that's not very helpful if it modifies all currently playing 
>> effects. I'm not even sure if this is possible to do with python, butsome 
>> pointers would really be great.
>
> First of all, allow me to point to a something I hacked together
> (mostly) a few weeks ago:
> http://bitbucket.org/jollybox/pyaudiogen/wiki/Home
>
> It's something of a library, VERY minimal/skeletal at the moment, for
> audio generation (and/or processing) in Python. No idea if this is of
> any help to you. Python 3 only. Multiple channel support is there,
> though to be useful it'd still need a bit of glue. Not much to see there
> yet all in all.
>
>>
>> (For the curious: This is part of the audio system for a larger immersive 
>> theater project, )
>
> Though really, what I think you want is jack. It basically allows you to
> plug things together in any way, and I'm sure you can control the volume
> of individual "plugs".
> I expect there is a Python API, but I haven't checked.

Untried: http://sourceforge.net/projects/py-jack/

Geremy Condra
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Paul Rubin
Wolfram Hinderer  writes:
> JFTR, it works because a+b == a+b (while I don't think that a+b == b+a
> holds for all a and b).

I'm pretty sure IEEE 754 addition is always commutative (except maybe in
the presence of infinity or NaN and maybe not even then).  It differs from 
rational or real-number arithmetic in that it is not always associative.
You can have (a+b)+c != a+(b+c).  
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How is Unladen Swallow coming along?

2010-07-08 Thread Luis M . González
On Jul 8, 5:44 pm, John Nagle  wrote:
> On 7/8/2010 12:19 PM, Luis M. González wrote:
>
> > On Jul 8, 1:42 pm, John Nagle  wrote:
> >>      How is Unladen Swallow coming along?  Looking at the site, code is
> >> being checked in and issues are being reported, but the last quarterly
> >> release was 2009 Q3.  They missed their January 2010 release date
> >> for "2009 Q4", so they're now about 6 months behind their project
> >> plan.
>
> >> ("http://code.google.com/p/unladen-swallow/wiki/ProjectPlan";)
>
> >>                                          John Nagle
>
> > Don't be shy.
> > Ask this question in Unladen Swallow's google group. They don't bite!
>
>     Found this:
>
> "http://www.python.org/dev/peps/pep-3146/#performance-retrospective";
>
>     It's starting to work, but the performance improvement is tiny,
> well under 2x faster than CPython.  Only 1.08x on "html5lib".
> That's far less than they expected.  They were going for 5x,
> which is far less than Shed Skin (which restricts Python)
> already achieves.
>
>                                 John Nagle


Shedskin is an heroic effort by Mark Dufour, but comparing it to
Cpython is like comparing oranges to apples.
Shedskin is not an interpreter, it's just a way to compile implicitly
statically typed python code to c++.
So the project is more along the lines of Pyrex/Cython in its goals.
I believe it's a great way to compile extension modules written in
restricted python, although it could compile entire programs provided
they don't rely on non supported libraries or modules. Only a few are
supported to different degrees of completeness.

At this moment, it seems that Pypy is the project holding more
promises.
Although I guess Guido has strong reasons to support Unladen Swallow.
Lets see what happens...

Luis
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python -- floating point arithmetic

2010-07-08 Thread Mark Dickinson
On Jul 8, 9:52 pm, Wolfram Hinderer 
wrote:
> JFTR, it works because a+b == a+b (while I don't think that a+b == b+a
> holds for all a and b).

Actually, that's one of the few identities that's safe.  Well, for non-
NaN IEEE 754 floating-point, at any rate.  And assuming that there's
no use of extended precision to compute intermediate results (in which
case one side could conceivably be computed with different precision
from the other;  but that applies to a+b == a+b, too).  And assuming
that no FPE signals occur and halt the program... (e.g., for overflow,
or from doing -inf + inf).  Okay, maybe not that safe, then.  :)

For NaNs, there are two problems:  first, if exactly one of a and b is
a NaN then a+b and b+a will both be NaNs, so a + b == b + a will be
false, even though they're identical.  Second, if a and b are *both*
NaNs, and you're feeling really fussy and care about signs and
payloads, then a + b and b + a won't even necessarily be bitwise
identical:  a + b will have the sign and payload of a, while b + a has
the sign and payload of b.  You can see something similar with the
Decimal module:

>>> Decimal('NaN123') + Decimal('-NaN456')
Decimal('NaN123')
>>> Decimal('-NaN456') + Decimal('NaN123')
Decimal('-NaN456')

Or more directly (just for fun), using the struct module to create
particular nans:

>>> import struct
>>> x = struct.unpack('>> y = struct.unpack('>> x
nan
>>> y
nan
>>> struct.pack('>> struct.pack('http://mail.python.org/mailman/listinfo/python-list


Re: 500 tracker orphans; we need more reviewers

2010-07-08 Thread Mark Lawrence

On 19-6-2010 23:45, Shashwat Anand wrote:

Terry: Thanks for bringing this to notice.
Mark: Kudos for your effort in cleaning up bugs.python.org



Like I've said elsewhere, flattery will get you everywhere. :)

FYI there are now 480 orphans and I've managed to get 8 issues closed. 
After one week I even got promoted to the triage team, although I found 
the pay increase rather disappointing. :)


Kindest regards.

Mark Lawrence.




--
http://mail.python.org/mailman/listinfo/python-list


  1   2   >