OS X install confusion

2007-06-14 Thread John Fisher
Hi Groupies,

I have an Intel Macbook running OS X 10.4.

It came installed with Python 2.3.5. I have since installed MacPython
with version 2.4.4, cool.

When I open a bash terminal session and type python, it brings up
version 2.3.5. If I type IDLE it brings up version 2.4.4. 

My question: what do I have to do to get it to bring up 2.4.4 with the
"python" command?

Thanks for bringing light to my ignorance.

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


Re: OS X install confusion

2007-06-14 Thread John Fisher
Ted <[EMAIL PROTECTED]> wrote:

> On Jun 14, 1:31 pm, Kevin Walzer <[EMAIL PROTECTED]> wrote:
> > John Fisher wrote:
> > > Hi Groupies,
> >
> > > I have an Intel Macbook running OS X 10.4.
> >
> > > It came installed with Python 2.3.5. I have since installed MacPython
> > > with version 2.4.4, cool.
> >
> > > When I open a bash terminal session and type python, it brings up
> > > version 2.3.5. If I type IDLE it brings up version 2.4.4.
> >
> > > My question: what do I have to do to get it to bring up 2.4.4 with the
> > > "python" command?
> >
> > > Thanks for bringing light to my ignorance.
> >
> > > JF
> >
> > Sounds like a path problem. Apple's system Python is installed in
> > /usr/bin. Your installation is probably in /usr/local/bin. Edit your
> > profile or use the full path.
> >
> > --
> > Kevin Walzer
> > Code by Kevinhttp://www.codebykevin.com
> 
> The default python on tiger (2.3.5) is sym-linked to /usr/bin/python
> and /usr/bin/pythonw.
> 
> I found it easier to relink to the new installation path. This also
> leaves /usr/bin/python23 and /usr/bin/pythonw23 still linked to the
> original version if you want to quickly check something.
> 
> Cheers,
> Ted

OK, please give a little more information how I can accomplish this
"re-link".

Thanks,

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


converting 64-bit fixed-point to float

2007-07-20 Thread John Fisher
Hi Group,

troubles with converting signed 32.32, little-endian, 2's complement
back to floating point. I have been trying to brew it myself. I am
running Python 2.5 on a Mac. Here is the C-code I have been trying to
leverage:

 double FPuint8ArrayToFPDouble(uint8 *buffer, int startIndex) 
{ 
  uint32 resultDec = 0;
  uint32 resultWh = 0;
  int i;

  for(i = 0; i < 4; i++)
  {
resultDec += (uint32)buffer[startIndex + i] * pow(2, (i*8));
resultWh += (uint32)buffer[startIndex + i + 4] * pow(2, (i*8));
  }

  return ( (double)((int)resultWh) + (double)(resultDec)/4294967296.0 );
}


Here is my version in Python, with some test code built in:

from ctypes import *

def conv64(input):
input1=[0]*8
input1[0]=c_ushort(input[0])
input1[1]=c_ushort(input[1])
input1[2]=c_ushort(input[2])
input1[3]=c_ushort(input[3])
input1[4]=c_ushort(input[4])
input1[5]=c_ushort(input[5])
input1[6]=c_ushort(input[6])
input1[7]=c_ushort(input[7])
#print input1[0].value,
input1[1].value,input1[2].value,input1[3].value
#print
input1[4].value,input1[5].value,input1[6].value,input1[7].value
#print 
resultDec=c_ulong(0)
resultWh=c_ulong(0)
for i in range(4):
dec_c=c_ulong(input1[i].value)
Wh_c=c_ulong(input1[i+4].value)
resultDec.value=resultDec.value+dec_c.value*2**(i*8)
resultWh.value=resultWh.value+Wh_c.value*2**(i*8)
   conval=float(int(resultWh.value))+float(resultDec.value)/4294967296.0
#print conval
return conval
#tabs got messed up bringing this into MacSoup

#these are 64-bit fixed point format (signed 32.32, little-endian, 2's
complement)
#should be -1
conv64_0=[0, 0, 0, 255, 255, 255, 255, 255]
#should be 0
conv64_1=[0, 0, 0, 0, 0, 0, 0, 0]
#should be 0.2
conv64_1_2=[51, 51, 51, 51, 0, 0, 0, 0]
#should be 1
conv64_2=[0, 0, 0, 0, 1, 0, 0, 0]
#should be 2
conv64_3=[0, 0, 0, 0, 2, 0, 0, 0]
#should be 298.15
conv64_4=[102, 102, 102, 38, 42, 1, 0, 0]
#should be -0.2
conv64_5=[205,204,204,204,255,255,255,255]
output0=conv64(conv64_0)
print "output should be -1 is "+str(output0)
output1=conv64(conv64_1)
print "output should be 0 is "+str(output1)
output1_2=conv64(conv64_1_2)
print "output should be 0.2 is "+str(output1_2)
output2=conv64(conv64_2)
print "output should be 1 is "+str(output2)
output3=conv64(conv64_3)
print "output should be 2 is "+str(output3)
output4=conv64(conv64_4)
print "output should be 298.15 is "+str(output4)
output5=conv64(conv64_5)
print "output should be -0.2 is "+str(output5)



Finally, here is the output I get from my code:

>>> 
output should be -1 is 4294967296.0
output should be 0 is 0.0
output should be 0.2 is 0.1953
output should be 1 is 1.0
output should be 2 is 2.0
output should be 298.15 is 298.15
output should be -0.2 is 4294967295.8

Thanks for any light you can shed on my ignorance.

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


Re: converting 64-bit fixed-point to float

2007-07-21 Thread John Fisher
[EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:

> On Jul 20, 5:59 pm, [EMAIL PROTECTED] (John Fisher) wrote:
> > Hi Group,
> >
> > troubles with converting signed 32.32, little-endian, 2's complement
> > back to floating point. I have been trying to brew it myself. I am
> > running Python 2.5 on a Mac. Here is the C-code I have been trying to
> > leverage:
> >
> >  double FPuint8ArrayToFPDouble(uint8 *buffer, int startIndex)
> > {
> >   uint32 resultDec = 0;
> >   uint32 resultWh = 0;
> >   int i;
> >
> >   for(i = 0; i < 4; i++)
> >   {
> > resultDec += (uint32)buffer[startIndex + i] * pow(2, (i*8));
> > resultWh += (uint32)buffer[startIndex + i + 4] * pow(2, (i*8));
> >   }
> >
> >   return ( (double)((int)resultWh) + (double)(resultDec)/4294967296.0 );
> >
> > }
> 
> 
> There are a few problem spots in that C code.  I tend to
> think that it "works" because you're on a system that has
> 4-byte int and CHAR_BIT == 8.  When the most-significant-bit (MSB)
> of resultWh is 1, then casting to int makes that a negative
> value (i.e., MSB == the sign bit).
> 
> I presume that somewhere you include  (from C99)
> and that uint32 is really uint32_t, etc.  For that to be
> portable, you should probably cast to int32_t?
> 
> #include 
> #include 
> #include 
> 
> double arr2dbl (uint8_t *buffer, int startIndex)
> {
> uint32_t decimal = 0;
> uint32_t whole = 0;
> size_t i;
> for (i = 0; i < 4; ++i)
> {
> decimal += (buffer[startIndex + i] << (i*8));
> whole += (buffer[startIndex + i + 4] << (i*8));
> }
> return (int32_t)whole + (decimal/(UINT32_MAX+1.0));
> }
> 
> int main (void)
> {
> uint8_t arr[7][8] = {
> {0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff},
> {0, 0, 0, 0, 0, 0, 0, 0},
> {51, 51, 51, 51, 0, 0, 0, 0},
> {0, 0, 0, 0, 1, 0, 0, 0},
> {0, 0, 0, 0, 2, 0, 0, 0},
> {102, 102, 102, 38, 42, 1, 0, 0 },
> {205, 204, 204, 204, 0xff, 0xff, 0xff, 0xff}};
> size_t i;
> double result;
> for (i = 0; i < sizeof arr/sizeof arr[0]; ++i)
> {
> result = arr2dbl(arr[i], 0);
> printf("%f\n", result);
> }
> return 0;
> }
> 
> 
> 
> 
> 
> 
> 
> > Here is my version in Python, with some test code built in:
> >
> > from ctypes import *
> >
> > def conv64(input):
> > input1=[0]*8
> > input1[0]=c_ushort(input[0])
> > input1[1]=c_ushort(input[1])
> > input1[2]=c_ushort(input[2])
> > input1[3]=c_ushort(input[3])
> > input1[4]=c_ushort(input[4])
> > input1[5]=c_ushort(input[5])
> > input1[6]=c_ushort(input[6])
> > input1[7]=c_ushort(input[7])
> > #print input1[0].value,
> > input1[1].value,input1[2].value,input1[3].value
> > #print
> > input1[4].value,input1[5].value,input1[6].value,input1[7].value
> > #print
> > resultDec=c_ulong(0)
> > resultWh=c_ulong(0)
> > for i in range(4):
> > dec_c=c_ulong(input1[i].value)
> > Wh_c=c_ulong(input1[i+4].value)
> > resultDec.value=resultDec.value+dec_c.value*2**(i*8)
> > resultWh.value=resultWh.value+Wh_c.value*2**(i*8)
> >conval=float(int(resultWh.value))+float(resultDec.value)/4294967296.0
> > #print conval
> > return conval
> > #tabs got messed up bringing this into MacSoup
> 
> 
> (snipped)
> 
> 
> >
> > Finally, here is the output I get from my code:
> >
> >
> >
> > output should be -1 is 4294967296.0
> > output should be 0 is 0.0
> > output should be 0.2 is 0.1953
> > output should be 1 is 1.0
> > output should be 2 is 2.0
> > output should be 298.15 is 298.15
> > output should be -0.2 is 4294967295.8
> >
> > Thanks for any light you can shed on my ignorance.
> >
> > wave_man
> 
> 
> This is my translation:
> 
> from ctypes import *
> 
> def conv64(input):
> input1 = [c_uint8(item) for item in input]
> dec = c_uint32(0)
> whl = c_uint32(0)
> for i in xrange(4):
> dec.value += (input1[i].value << (i*8))
> whl.value += (input1[i+4].value << (i*8))
> cast_whl_to_int = c_int32(whl.value)
> return float(cast_whl_to_int.value + dec.value/4294967296.0)
> 
> 
> for arr in [[0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff],
> [0, 0, 0, 0, 0, 0, 0, 0],
> [51, 51, 51, 51, 0, 0, 0, 0],
> [0, 0, 0, 0, 1, 0, 0, 0],
> [0, 0, 0, 0, 2, 0, 0, 0],
> [102, 102, 102, 38, 42, 1, 0, 0],
> [205,204,204,204,255,255,255,255]]:
> print "%f" % conv64(arr)
> 
> 
> 
> However, I've not looked deeply into ctypes so I
> don't know if c_int32 is really C's int, or int32_t, or ???
> 
> --
> Hope this helps,
> Steven

Actually this was very helpful, thanks. 

Rgds,

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


(sort of) deterministic timing in Python

2007-08-13 Thread John Fisher
I am working on a framework for data acquisition in Python 2.5, am
trying to get a structure going more like this:


mark start time
start event
event finishes
count time until next interval
start second event…

rather than this:

start event
event finishes
sleep for interval
start second event

Do you see the difference? I get a true fixed interval from the first,
including the time to accomplish the event task(s). In the second case,
the sleep just gets tacked on at the end of the events, not very
deterministic (timing-wise).

So how do I accomplish this in Python with a minimum of labour?

Thanks for any light you can shed on my darkness...

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

keyboard "interrupt"

2008-03-18 Thread John Fisher
Hi Group,

I have been absent a while, mainly because I have been getting better at
figuring out my own Python problems. But not this one...

I have a timed loop performing certain tasks until a total period of
time has elapsed. I would like to be able to interrupt the loop or set
various flags during execution via keyboard input. raw_input seems to
just stop everything cold. I want the ability to just sacn the keyboard
buffer and see if something is there, then proceed normally in the loop
if there is no input in the buffer. Make sense? Totally easy? Let me
know...

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


Re: keyboard "interrupt"

2008-03-27 Thread John Fisher
Arnaud Delobelle <[EMAIL PROTECTED]> wrote:

> John Fisher wrote:
> > Hi Group,
> 
> Hi John
> 
> > I have been absent a while, mainly because I have been getting better at
> > figuring out my own Python problems. But not this one...
> >
> > I have a timed loop performing certain tasks until a total period of
> > time has elapsed. I would like to be able to interrupt the loop or set
> > various flags during execution via keyboard input. raw_input seems to
> > just stop everything cold. I want the ability to just sacn the keyboard
> > buffer and see if something is there, then proceed normally in the loop
> > if there is no input in the buffer. Make sense? Totally easy? Let me
> > know...
> 
> If you are on a UNIX platform, you can use the curses module.
> 
> http://docs.python.org/lib/module-curses.html
> 
> There is a link there to a tutorial, but it seems to be broken.  A
> quick search finds it there:
> 
> http://www.amk.ca/python/howto/curses/
> 
> HTH
> 
> --
> Arnaud
Thanks for your reply Arnaud. I am using an Intel mac, running Leopard
10.5.2, so that's Posix I warrant. I will check this out.

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