;ò
Ù®G@c        m   @   s¯  d  k  Z  d  k Z d  k Z e i d ƒ \ Z Z Z e i d e e e ƒ Z d Z	 d Z
 d Z d Z d Z d Z d Z h  d	 d	 f d
 <d	 d f d <d d	 f d <d d f d <Z d „  Z d „  Z e	 d Z d Z h  d d <d d <d d <d d <d d <d d <d d  <Z h  d d! <d d" <d d# <d d$ <d d% <d d& <d d' <Z e	 d( Z d) Z d* Z d+ Z d, Z e e e e Z d- Z d. Z d/ Z d0 Z  d1 Z! d2 Z" d3 Z# d4 Z$ d5 Z% d6 Z& d7 Z' e" e# e$ Z( e( e& e% Z) d8 Z* d9 Z+ d: Z, h  d; d< <d= d> <d? d@ <dA dB <dC dD <dE dF <Z- h  d; dG <d= dH <d? dI <dA dJ <dC dK <dE dL <Z. h  dM dN <Z/ h  d; dO <d= dP <d? dQ <dA dR <dC dS <dE dT <Z0 h  d= dU <d? dV <dA dW <dC dX <dE dY <Z1 h  d= dZ <d? d[ <dA d\ <dC d] <dE d^ <Z2 h  d= d_ <d? d` <dA da <dC db <dE dc <Z3 dd Z4 de Z5 df Z6 dg Z7 dh Z8 di Z9 dj Z: dk Z; h  d= dl dm dn f <d? dl do dn f <dA do dm dn f <dC dp dq dp f <dE dr dq dn f <Z< ds Z= dt „  Z> du „  Z? dv „  Z@ dw dx dy dz g d{ d| d} dz g d~ d d€ dz g d� d‚ dƒ dz g d„ d… d† dz g d‡ dˆ d‰ d g dŠ d‹ dŒ d‚ g d� dŽ d� dz g d� d‘ d’ dz g d“ d” d• dz g d– d” d— dz g g ZA eA iB d˜ d™ dš dz g ƒ e? ƒ  o eA iB d› dœ dš dz g ƒ n e@ ƒ  o6 eA iB d� dž dŸ dz g ƒ eA iB d  d” d¡ dz g ƒ n d¢ f  d£ „  ƒ  YZC d¤ d{ g d¥ d~ g d¦ d� g d§ d� g d¨ d– g g ZD d© f  dª „  ƒ  YZE eE d« d¬ ƒ ZF d­ f  d® „  ƒ  YZG eG d¯ d“ ƒ ZH eG d° d– ƒ ZI dw d{ f d{ d{ f d~ d~ f d� d� f d‡ d‡ f dŠ dŠ f d„ d„ f d� d� f d� d� f g	 ZJ dw d� f d{ d� f d~ d� f d� d� f d‡ d� f dŠ d� f d„ d� f d� d� f d� d� f g	 ZK dw dw f d{ dw f d~ dw f d� dw f d‡ dw f dŠ dw f d„ dw f d� dw f d� dw f g	 ZL dw dw f d{ d{ f d~ d~ f d� d� f d‡ d‡ f dŠ dŠ f d„ d„ f g ZM dw d� f d{ d� f d~ d� f d� d� f d‡ d� f dŠ d� f d„ d� f g ZN eJ iB d˜ d˜ f ƒ eK iB d˜ d� f ƒ eL iB d˜ dw f ƒ eM iB d˜ d˜ f ƒ eN iB d˜ d� f ƒ e? ƒ  oc eJ iB d› d› f ƒ eK iB d› d� f ƒ eL iB d› dw f ƒ eM iB d› d› f ƒ eN iB d› d� f ƒ n d� d� f d� d� f g ZO d“ d“ f d– d– f g ZP d“ d� f d– d� f g ZQ d“ dw f d– dw f g ZR d± ZS d² ZT d³ ZU d´ ZV e iW eX ƒ  ƒ e> d� d{ e4 ƒ ZY e> d� d‡ e5 ƒ ZZ e> d� d~ e6 ƒ Z[ e> d� dŠ e7 ƒ Z\ e> d� d„ e9 ƒ Z] e> d� d� e8 ƒ Z^ e> d˜ d˜ e: ƒ Z_ e> d› d› e; ƒ Z` dµ d¶ d¶ e0 d· f eJ dz g d¸ d¹ d¶ e0 dº f eJ dz g d» d¹ d¶ e0 d· f eJ dz g d¼ d¹ d¶ eY d½ f d{ d{ f g eS g d¼ d¹ d¶ eZ d½ f d‡ d‡ f g eS g d¼ d¹ d¶ e[ d½ f d~ d~ f g eS g d¼ d¹ d¶ e\ d½ f dŠ dŠ f g eS g d¼ d¹ d¶ e^ d½ f d� d� f g eT g d¼ d¹ d¶ e] d½ f d„ d„ f g eT g d¼ d¹ d¶ e_ d½ f d˜ d˜ f g eU g d¼ d¹ d¶ e` d½ f d› d› f g eU g d¼ d¹ d¶ e0 d½ f eO dz g d¾ d¹ d¶ e1 d¿ f eM dz g d¾ d¹ d¶ e0 d¿ f eO dz g dÀ d¹ d¶ e3 d¿ f eM dz g dÀ d¹ d¶ e- dÁ f eO dz g dÂ d¹ d¶ e2 d¿ f eN dz g dÂ d¹ d¶ e0 d¿ f eO dz g dÃ d¹ d¶ e1 dÄ f eM dz g dÃ d¹ d¶ e. dÅ f eO dz g dÆ d¹ d¶ e. dÇ f eJ dz g dÈ d¶ d¶ e. dÉ f eJ dz g dÊ d¶ d¶ e. dÊ f eK dz g dË d¶ d¶ e. dË f eK dz g dÌ d¶ d¶ e. dÌ f eK dz g dÍ d¶ d¶ e. dÎ f eK dz g dÏ d¶ d¶ e. dÐ f eK dz g dÑ d¶ d¶ e. dÒ f eK dz g dÓ d¹ d¶ e. dÔ f eK dz g dÕ d¶ d¶ e. dÖ f eK dz g d× d¶ d¶ e. dØ f eK dz g dÙ d¶ d¶ e. dÙ f eK dz g dÚ d¶ d¶ e. dÚ f eK dz g dÛ d¶ d¶ e. dÛ f eK dz g dÜ d¶ d¶ e. dÜ f eK dz g dÝ d¶ d¶ e. dÞ f eK dz g dß d¶ d¶ e. dà f eK dz g dá d¶ d¶ e. dâ f eK dz g dã d¹ d¶ e/ dä f d� d� dw f g dz e' då g g dã d¹ d¶ e/ dæ f d� d� dw f g dz e' då g g dç d¶ d¶ e. dç f eK dz g dè d¹ d¶ e0 dé f eL dz g dê d¹ d¶ e0 dë f eL dz g dì d¹ d¶ e0 dí f eL dz g dî d¹ d¶ e0 dï f eL dz g dð d¹ d¶ e0 dñ f eL dz g dò d¹ d¶ e0 dó f eL dz g dô d¹ d¶ e. dô f eL dz g dõ d¹ d¶ e. dõ f eL dz g dö d¹ d¶ e. dö f eL dz g d÷ d¶ d¶ e0 dø f eL dz g dù d¹ d¶ e0 dú f eM dz g dû d¹ d¶ e0 dü f eM dz g dý d¹ d¶ e0 dþ f eM dz g dÿ d¶ d¶ e0 d f eM dz g dd¹ d¶ e0 df eM dz g dd¹ d¶ e0 df eM dz g dd¶ d¶ e. dz f eM dz g dd¶ d¶ e. df eO dz g dd¶ d¶ e. dz f eM dz g dd¶ d¶ e. df eO dz g dd¹ d¶ e. df eJ eV g d	d¹ d¶ e. d
f eJ eV g dÉ d¶ d¶ e. dÉ f eK dz g dd¶ d¶ e. df eK dz g dd¹ d¶ e. df eK dz g dµ d¶ d¶ e- df eP dz g d¸ d¹ d¶ e- df eP dz g d» d¹ d¶ e- df eP dz g d¼ d¹ d¶ e- df eP dz g d¾ d¹ d¶ e- df eP dz g dÂ d¹ d¶ e- df eP dz g dÃ d¹ d¶ e- df eP dz g dÆ d¹ d¶ e- df eP dz g dÈ d¶ d¶ e. df eQ dz g dÊ d¶ d¶ e- df eP dz g dË d¶ d¶ e- df eP dz g dÌ d¶ d¶ e- df eP dz g dÍ d¶ d¶ e- df eP dz g dÏ d¶ d¶ e- df eP dz g dÑ d¶ d¶ e- df eP dz g dÝ d¶ d¶ e- df eP dz g dß d¶ d¶ e- df eP dz g dá d¶ d¶ e- df eP dz g dÕ d¶ d¶ e- df eP dz g d× d¶ d¶ e- d f eP dz g dÙ d¶ d¶ e- d!f eP dz g dÚ d¶ d¶ e- d"f eP dz g dÛ d¶ d¶ e- d#f eP dz g dÜ d¶ d¶ e- d$f eP dz g dç d¶ d¶ e- d%f eP dz g dè d¹ d¶ e. d# f eR dz g dê d¹ d¶ e. d&f eR dz g dô d¹ d¶ e. d'f eR dz g dõ d¹ d¶ e. d(f eR dz g dö d¹ d¶ e. d)f eR dz g d÷ d¶ d¶ e. d*f eR dz g dd¶ d¶ e- d+f eP dz g dd¶ d¶ e- d,f eP dz g dd¹ d¶ e. d-f eP dz g d	d¹ d¶ e. d.f eP dz g dÉ d¶ d¶ e- d/f eP dz g dd¶ d¶ e- d0f eP dz g dd¹ d¶ e- d1f eP dz g gh Za d2f  d3„  ƒ  YZb d4f  d5„  ƒ  YZc d6ec f d7„  ƒ  YZd d8ec f d9„  ƒ  YZe d:ec f d;„  ƒ  YZf d<ec f d=„  ƒ  YZg ed ƒ  Zh ee e ƒ Zi ef e ƒ Zj eg e  e d>ƒ Zk el d?„ Zm el d@„ Zn dA„  Zo eo Zp eq dBj o eo ƒ  n d  S(C  Ns   templates  
/*   W     W   AAA   RRRR   N   N  III  N   N   GGG   !!!
**   W     W  A   A  R   R  NN  N   I   NN  N  G   G  !!!
**   W  W  W  AAAAA  RRRR   N N N   I   N N N  G       !
**    W W W   A   A  R   R  N  NN   I   N  NN  G  GG
**     W W    A   A  R   R  N   N  III  N   N   GGG   !!!
**
** WARNING: This file is program generated by codegenerator.py.
**
** DO NOT EDIT THIS FILE! Any changes made to this file will be lost!
*/

#include <Python.h>
#include <stdio.h>
#include "libnumarray.h"
static PyObject *_Error;
s5   
/****************** <typename> *******************/
sÀ   
static PyObject *<typename>asPyValue(void *data) {
  return Py_BuildValue(<pybuildchar>, <pycast>*((<typename> *) data));
}

SELF_CHECKED_CFUNC_DESCR(<typename>asPyValue, CFUNC_AS_PY_VALUE);
sí   
static PyObject *<typename>asPyValue(void *data) {
  return PyComplex_FromDoubles(((<typename> *) data)->r, 
                               ((<typename> *) data)->i);
}

SELF_CHECKED_CFUNC_DESCR(<typename>asPyValue, CFUNC_AS_PY_VALUE);
s  
static int <typename>fromPyValue(PyObject *value, void *dataptr) {
    <typename> *data = (<typename> *) dataptr;
    if (!PyNumber_Check(value))
        return 0;
    else {
        if (PyLong_Check(value)) {
            *data = <typecast>(PyLong_AsLongLong(value));
        } else if (PyInt_Check(value)) {
            *data = <typecast>(PyInt_AsLong(value));
        } else if (PyFloat_Check(value)) {
            *data = <typecast>(PyFloat_AsDouble(value));
        } else if (PyComplex_Check(value)) {
           *data = <typecast>(PyComplex_RealAsDouble(value));
        } else {
            return 0;
        }
        if (PyErr_Occurred())
           return 0;
        else
           return 1;
    }
}

SELF_CHECKED_CFUNC_DESCR(<typename>fromPyValue, CFUNC_FROM_PY_VALUE);
sb  
static int <typename>fromPyValue(PyObject *value, void *dataptr) {
    <typename> *data = (<typename> *) dataptr;
    if (!PyNumber_Check(value))
        return 0;
    else {
        if (PyLong_Check(value)) {
            data->r = PyLong_AsLong(value);
            data->i = 0;
        } else if (PyInt_Check(value)) {
            data->r = PyInt_AsLong(value);
            data->i = 0;
        } else if (PyFloat_Check(value)) {
            data->r = PyFloat_AsDouble(value);
            data->i = 0;
        } else if (PyComplex_Check(value)) {
           data->r = PyComplex_RealAsDouble(value);
           data->i = PyComplex_ImagAsDouble(value);
        } else {
            return 0;
        }
        if (PyErr_Occurred())
           return 0;
        else
           return 1;
    }
}

SELF_CHECKED_CFUNC_DESCR(<typename>fromPyValue, CFUNC_FROM_PY_VALUE);
s©  
static int <typename>as<desttypename>(long niter, long ninargs, long noutargs, void **buffers, long *bsizes) {
    long i;
    <typename>     *tin  = (<typename> *)     buffers[0];
    <desttypename> *tout = (<desttypename> *) buffers[1];
    for (i=0; i<niter; i++, tout++, tin++) {
        <numarray_to_numarray>
    }
    return 0;
}

UFUNC_DESCR2(<typename>as<desttypename>, sizeof(<typename>), sizeof(<desttypename>));
s   Complexs#   tout->r = tin->r; tout->i = tin->i;s   defaults   *tout = <desttypecast>(tin->r);s   tout->r = *tin; tout->i = 0;s   *tout = <desttypecast>(*tin);c         C   s#   |  d d g j o d Sn d Sd  S(   Ns	   Complex32s	   Complex64s   Complexs   default(   s   t(   s   t(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   _complex_type—   s    c         C   s   t  t |  ƒ t | ƒ f Sd  S(   N(   s   _numarray_to_numarrays   _complex_types   t1s   t2(   s   t1s   t2(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   numarray_to_numarray�   s    s³   
#define swap(i, j)   { temp=v[i]; v[i]=v[j]; v[j]=temp; }

#define wswap(i, j)   { temp=v[i];  v[i]=v[j]; v[j]=temp;                        wtemp=w[i];  w[i]=w[j]; w[j]=wtemp; }
s>  
#define STDC_LT(a,b) ((a) < (b))
#define STDC_LE(a,b) ((a) <= (b))
#define STDC_EQ(a,b) ((a) == (b))

void sort0<typename>(<typename> *v, long left, long right)
{
  <typename> temp;
  long i, last, lastl, lastr, diff;

  diff = right - left;
  if (diff <= 0)
     return;

  /* choose the pivot randomly. */
  i = left + (int) (((right-left)*1.0*rand())/(RAND_MAX+1.0));

  /* Split array into values < pivot, and values > pivot. */
  swap(left, i);
  last = left;
  for(i=left+1; i<=right; i++)
    if (<lessthan>(v[i], v[left]))
    {
      ++ last;
      swap(last, i);
    }
  swap(left, last);
  
  lastl = last-1;
  lastr = last+1;

  /* Exclude values equal to pivot from recursion */
  while((left < lastl) && <equals>(v[last],v[lastl]))
     --lastl;
  while((lastr < right) && <equals>(v[last],v[lastr]))
     ++lastr;

  sort0<typename>(v, left, lastl);
  sort0<typename>(v, lastr, right);
}

static int sort<typename>(long niter, long ninargs, long noutargs,
           void **buffers, long *bsizes)
{
    sort0<typename>( (<typename> *) buffers[0], 0, niter-1);
    return 0;
}

UFUNC_DESCR1(sort<typename>, sizeof(<typename>));

void asort0<typename>(<typename> *v, long *w, long left, long right)
{
  <typename> temp;
  long  wtemp, i, last, lastl, lastr;

  if (left >= right)
    return;

  /* choose the pivot randomly. */
  i = left + (int) (((right-left)*1.0*rand())/(RAND_MAX+1.0));

  wswap(left, i);
  last = left;
  for(i=left+1; i<=right; i++)
    if (<lessthan>(v[i], v[left]))
    {
      ++ last;
      wswap(last, i);
    }
  wswap(left, last);

  lastl = last-1;
  lastr = last+1;

  /* Exclude values equal to pivot from recursion */
  while((left < lastl) && <equals>(v[last],v[lastl]))
     --lastl;
  while((lastr < right) && <equals>(v[last],v[lastr]))
     ++lastr;

  asort0<typename>(v, w, left, lastl);
  asort0<typename>(v, w, lastr, right);
}

static int asort<typename>(long niter, long ninargs, long noutargs,
           void **buffers, long *bsizes)
{
    asort0<typename>( (<typename> *) buffers[0], (long *) buffers[1],
       0, niter-1);
    return 0;
}

CFUNC_DESCR(asort<typename>, CFUNC_UFUNC, CHECK_ALIGN, 0, 2, sizeof(<typename>), sizeof(long), 0, 0, 0, 0);

static long search<typename>(long na, <typename> *a, <typename> v)
{
  long i = 0;
  <typename> *b;
  while(na > 10)
    {
      long mid = na>>1;
      if (<lessequal>(v, a[mid]))
        na = mid;
      else
        {
          i += mid + 1;
          a += mid + 1;
          na = mid - 1 + (na&1);
        }
    }
  b = a;
  while((<lessequal>(*b, v)) && na--)
    ++ b;
  return i+(b-a);
}

static int searchsorted<typename>(int niter, int ninargs, int noutargs,
          void **buffers, long *bsizes)
{
  maybelong   nbins;   
  <typename> *bins;
  <typename> *values;
  long       *indices;
  maybelong i;
  
  if (NA_checkOneCBuffer("searchsorted<typename>", 1,
       buffers[0], bsizes[0], sizeof(maybelong)))
       return -1;
  nbins    = *(maybelong *)  buffers[0];

  if (NA_checkOneCBuffer("searchsorted<typename>", nbins,
      buffers[1], bsizes[1], sizeof(<typename>)))
      return -1;
  bins    = (<typename> *) buffers[1];

  if (NA_checkOneCBuffer("searchsorted<typename>", niter,
      buffers[2], bsizes[2], sizeof(<typename>)))
      return -1;
  values  = (<typename> *) buffers[2];

  if (NA_checkOneCBuffer("searchsorted<typename>", niter,
      buffers[3], bsizes[3], sizeof(long)))
      return -1;
  indices = (long *)   buffers[3];

  if (NA_checkIo("searchsorted<typename>", 3, 1, ninargs, noutargs))
     return -1;

  for(i=0; i<niter; i++)
     indices[i] = search<typename>(nbins, bins, values[i]);

  return 0;
}

SELF_CHECKED_CFUNC_DESCR(searchsorted<typename>, CFUNC_UFUNC);

static int fillarray<typename> (long niter, long ninargs, long noutargs, 
			     void **buffers, long *bsizes) {
    long i;
    <typename> start, delta;
    <typename> *tin;
    <typename> *tparams;
    Int8 itemsizes[2] = { sizeof(<typename>), sizeof(<typename>) };
    Int8 iters[2] = { 0, 2 };

    if (NA_checkIo("fillarray<typename>", 1, 1, ninargs, noutargs) ||
	NA_checkNCBuffers("fillarray<typename>", 2,
			 niter, buffers, bsizes, itemsizes, iters))
	    return -1;

    tin = (<typename> *) buffers[0];
    tparams = (<typename> *) buffers[1];
    start = tparams[0];
    delta = tparams[1];

    for (i=0; i<niter; i++, tin++) {
        <fillstep>
    }
    return 0;
}

SELF_CHECKED_CFUNC_DESCR(fillarray<typename>, CFUNC_UFUNC);


static int mxmultiply<typename>( long niter, long ninargs, long noutargs,
			       void **buffers, long *bsizes)
{
  <typename> *a, *b;
  maybelong   maxi, maxj, maxk;
  <typename> *r;
  maybelong   i, j, k;

  if (NA_checkIo("mxmultiply<typename>", 3, 1, ninargs, noutargs))
	  return -1;

  if (NA_checkOneCBuffer("mxmultiply<typename>", 1,
		buffers[2], bsizes[2], sizeof(maybelong)))
	  return -1;
  else {
	  maxi = ((maybelong *)buffers[2])[0];
	  maxj = ((maybelong *)buffers[2])[1];
	  maxk = ((maybelong *)buffers[2])[2];
  }
	  
  if (NA_checkOneCBuffer("mxmultiply<typename>", maxi*maxk,
		buffers[0], bsizes[0], sizeof(<typename>)))
	  return -1;
  else
	  a   = (<typename> *) buffers[0];

  if (NA_checkOneCBuffer("mxmultiply<typename>", maxj*maxk,
		buffers[1], bsizes[1], sizeof(<typename>)))
	  return -1;
  else
	  b   = (<typename> *) buffers[1];

  if (NA_checkOneCBuffer("mxmultiply<typename>", maxi*maxj,
		buffers[3], bsizes[3], sizeof(<typename>)))
	  return -1;
  else
	  r   = (<typename> *) buffers[3];

  for(i=0; i<maxi; i++)
    for(j=0; j<maxj; j++, r++)
      {
	<typename> s;
	<typename> *ap = a + i*maxk;
	<typename> *bp = b + j*maxk;
        <clear>
	for(k=0; k<maxk; k++, ap++, bp++) {
          <dotstep>
        }
	*r = s;
      }
  return 0;
}

SELF_CHECKED_CFUNC_DESCR(mxmultiply<typename>, CFUNC_UFUNC);

static int nonzeroCoords<typename>(long niter, long ninargs, long noutargs,
                               void **buffers, long *bsizes)
{
	<typename>   *source;
	maybelong  *sstride;
	long  **output;
	long i, minbsize, next = 0;
	
	if (NA_checkIo("nonzeroCoords<typename>", 2, noutargs, ninargs, noutargs))
		return -1;

	if (NA_checkOneCBuffer("nonzeroCoords<typename>", niter,
		      buffers[0], bsizes[0], sizeof(<typename>)))
		return -1;
	    
	if (NA_checkOneCBuffer("nonzeroCoords<typename>", noutargs,
		      buffers[1], bsizes[1], sizeof(maybelong)))
		return -1;

	/* Check alignment only.  Storage optimization makes numarray
	 shorter than niter likely, possibly even 0! */
	for (i=0; i<noutargs; i++)
		if (NA_checkOneCBuffer("nonzeroCoords<typename>", 0,
			      buffers[2+i], bsizes[2+i], sizeof(long)))
			return -1;

	source     = (<typename> *)  buffers[0];
	sstride    = (maybelong  *)  buffers[1];
	output     = (long **) &buffers[2];

	minbsize = bsizes[0];
	for(i=0; i<noutargs; i++)
		if (sstride[i] <= 0) {
			PyErr_Format(_Error,
			     "nonzeroCoords<typename>: bad stride[%%ld].\n",
				     i);
			return -1;
		}
		else if (bsizes[i+2] < minbsize)
			minbsize = bsizes[i+2];
	
	next = 0;
	for(i=0; i<niter; i++)
	{
		if (<nonzero>)
		{
			long j, index = i;
			if (next >= minbsize) {
				PyErr_Format(_Error,
					     "nonzeroCoords<typename>: insufficient index space.\n");
				return -1;
			}
			for(j=0; j<noutargs; j++)
			{
				output[j][next] = index / sstride[j];
                                index %%= sstride[j];
			}
			++ next;
		}
	}
	return 0;
}

SELF_CHECKED_CFUNC_DESCR(nonzeroCoords<typename>, CFUNC_UFUNC);

s   lessthans   STDC_LTs	   lessequals   STDC_LEs   equalss   STDC_EQs   clears   s = 0;s   dotsteps   s += *ap * *bp;s   fillsteps   *tin = start;  start += delta;s   nonzeros   source[i] != 0s   NUM_CLTs   NUM_CLEs   NUM_CEQs   s.r = 0; s.i=0;s6   Complex64 t; NUM_CMUL(*ap, *bp, t); NUM_CADD(s, t, s);s5   NUM_CASS(*tin, start); NUM_CADD(start, delta, start);s)   ((source[i].r !=0) || (source[i].i != 0))s*  
#include <assert.h>

#define NA_ACOPYN(i, o) memcpy(o, i, N)

/* The following is used to copy nbytes of data for each element.   **
** As such it can be used to align any sort of data provided the    **
** output pointers used are aligned                                 */

static int copyNbytes(long dim, long nbytes, maybelong *niters,
            void *input,  long inboffset,  maybelong *inbstrides,
            void *output, long outboffset, maybelong *outbstrides) {
    long i, j;
    char *tin  = (char *) input  + inboffset;
    char *tout = (char *) output + outboffset;
    if (dim == 0) {
        for (i=0; i<niters[dim]; i++) {
            for (j=0; j<nbytes; j++) {
                *tout++ = *tin++;
            }
            tin = tin + inbstrides[dim] - nbytes;
            tout = tout + outbstrides[dim]- nbytes;
        }
    }
    else {
        for (i=0; i<niters[dim]; i++) {
            copyNbytes(dim-1, nbytes, niters,
                input,  inboffset  + i*inbstrides[dim],  inbstrides,
                output, outboffset + i*outbstrides[dim], outbstrides);
        }
    }
    return 0;
}

STRIDING_DESCR2(copyNbytes, !CHECK_ALIGN, -1, -1);

/* Copy a data buffer to a new string
**
** Arguments:
**
**   Tuple of iteration values for each dimension of input array.
**   Input buffer object.
**   Input byte offset.
**   Tuple of input byte strides.
**   Size of input data item in bytes.
**
** Returns Python string.
*/

static PyObject *copyToString(PyObject *self, PyObject *args) {
    PyObject *inbuffObj;
    PyObject *nitersObj, *inbstridesObj;
    PyObject *otemp, *outstring;
    long ltemp;

    int nniters, ninbstrides, nbytes, nargs;
    maybelong niters[MAXDIM], inbstrides[MAXDIM], outbstrides[MAXDIM];
    void *inbuffer, *outbuffer;
    long i, inbsize, outbsize, nelements=1, inboffset;
    
    nargs = PyObject_Length(args);
    if (!PyArg_ParseTuple(args, "OOlOl",
            &nitersObj, &inbuffObj,  &inboffset, &inbstridesObj, &nbytes))
        return NULL;
        
    if (!PySequence_Check(nitersObj))
        return PyErr_Format(_Error, "copyToString: invalid shape object");
    if (!PySequence_Check(inbstridesObj))
        return PyErr_Format(_Error, "copyToString: invalid strides object");
        
    nniters = PyObject_Length(nitersObj);
    ninbstrides = PyObject_Length(inbstridesObj);
    if (nniters != ninbstrides)
        return PyErr_Format(PyExc_ValueError,
        "copyToString: shape & strides don't match");
        
    for (i=nniters-1; i>=0; i--) {
        otemp = PySequence_GetItem(nitersObj, i);
        if (PyInt_Check(otemp))
           ltemp = PyInt_AsLong(otemp);
        else if (PyLong_Check(otemp))
           ltemp = PyLong_AsLong(otemp);
        else
           return PyErr_Format(_Error,
                 "copyToString: non-integer shape element");
        nelements *= ltemp;
        niters[nniters-i-1] = ltemp;
        Py_DECREF(otemp);
        otemp = PySequence_GetItem(inbstridesObj, i);
        if (PyInt_Check(otemp))
            inbstrides[nniters-i-1] = PyInt_AsLong(otemp);
        else if (PyLong_Check(otemp))
            inbstrides[nniters-i-1] = PyLong_AsLong(otemp);
        else
           return PyErr_Format(_Error,
                 "copyToString: non-integer stride element");
        Py_DECREF(otemp);
    }
    if (!nelements)
       return PyString_FromStringAndSize("", 0);
    outbstrides[0] = nbytes;
    for (i=1; i<nniters; i++) {
        outbstrides[i] = outbstrides[i-1]*niters[i-1];
    }
    outbsize = outbstrides[nniters-1]*niters[nniters-1];
    outstring = PyString_FromStringAndSize(NULL, outbsize);
    if (!outstring)
        return NULL;
    outbuffer = (void *) PyString_AsString(outstring);
    
    if ((inbsize = NA_getBufferPtrAndSize(inbuffObj, 1, &inbuffer)) < 0)
       return PyErr_Format(_Error,
           "copyToString: Problem with array buffer");

    if (NA_checkOneStriding("copyToString", nniters, niters,
			  inboffset, inbstrides, inbsize, nbytes, 0) ||
	NA_checkOneStriding("copyToString", nniters, niters,
			  0, outbstrides, outbsize, nbytes, 0))
                          return NULL;

    copyNbytes(nniters-1, nbytes, niters,
          inbuffer, inboffset, inbstrides, outbuffer, 0, outbstrides);

    return outstring;
}

/* chooseXbytes functions are called as uFuncs... */

enum CLIP_MODE {
  CLIPPED,
  WRAPPED,
  RAISE
};

#define wrap(i, max)      while(i < 0)             i += max;        while(i >= max)          i -= max;

static int takeNbytes(long niter, long ninargs, long noutargs,
                         void **buffers, long *bsizes)
{
  maybelong  i, cMode, N;
  maybelong *scatteredstrides, *scatteredshape, **indices;
  char  *gathered, *scattered;
  maybelong nindices = ninargs-4, outi = ninargs+noutargs-1;

  if (NA_checkIo("takeNbytes", 4, 1, MIN(ninargs, 4), noutargs))
     return -1;

  if (nindices == 0)
     return 0;
  
  if (NA_checkOneCBuffer("takeNbytes", 2, buffers[0], bsizes[0], sizeof(maybelong)))
     return -1;
  else {
     cMode            =  ((maybelong *) buffers[0])[0];
     N                =  ((maybelong *) buffers[0])[1];
  }

  if (NA_checkOneCBuffer("takeNbytes", nindices, buffers[2], bsizes[2], sizeof(maybelong)))
     return -1;
  else {
     scatteredstrides =  (maybelong *)  buffers[2];
  }
  
  if (NA_checkOneCBuffer("takeNbytes", nindices, buffers[3], bsizes[3], sizeof(maybelong)))
     return -1;
  else {
     scatteredshape   =  (maybelong *)  buffers[3];
  }
  
  if (NA_checkOneStriding("takeNBytes", nindices, scatteredshape, 0, scatteredstrides, bsizes[1], N, 0))
     return -1;
  else
     scattered        =  (char *)   buffers[1];

  for(i=4; i<nindices; i++)
     if (NA_checkOneCBuffer("takeNbytes", niter, buffers[i], bsizes[i], sizeof(maybelong)))
        return -1;
  indices          =  (maybelong **) &buffers[4];

  if (NA_checkOneCBuffer("takeNbytes", niter*N, buffers[outi], bsizes[outi], 1))
     return -1;
  else 
     gathered         =  (char *)  buffers[ninargs+noutargs-1];

  switch( cMode )
    {
    case WRAPPED:
      for(i=0; i<niter; i++)
        {
          maybelong j, index;
          for(j=index=0; j<nindices; j++)
            {
              maybelong k = indices[j][i];
	      wrap(k, scatteredshape[j]);
              index += scatteredstrides[j]*k;
            }
          memcpy( &gathered[i*N], scattered+index, N);
        }
      break;
    case CLIPPED:
    default:
      for(i=0; i<niter; i++)
        {
          maybelong j, index;
          for(j=index=0; j<nindices; j++)
            {
              maybelong k = indices[j][i];
              if (k < 0)
                k = 0;
              else if (k >= scatteredshape[j])
                k = scatteredshape[j]-1;
              index += scatteredstrides[j]*k;
            }
          memcpy( &gathered[i*N], scattered+index, N);
        }
      break;
      case RAISE:
      for(i=0; i<niter; i++)
        {
          maybelong j, index;
          for(j=index=0; j<nindices; j++)
            {
              maybelong k = indices[j][i];
              if (k < 0)
                k += scatteredshape[j];
              if (k >= scatteredshape[j]) {
                 PyErr_Format(PyExc_IndexError,
                   "Index[" ML_DEC "," ML_DEC "]=" ML_DEC
                   " out of range[" ML_DEC "]",
                   i, j, k, scatteredshape[j]);
                   return -1;
              }
              index += scatteredstrides[j]*k;
            }
          memcpy( &gathered[i*N], scattered+index, N);
        }
      break;
    }
  return 0;
}

SELF_CHECKED_CFUNC_DESCR(takeNbytes, CFUNC_UFUNC);

static int putNbytes(long niter, long ninargs, long noutargs,
                         void **buffers, long *bsizes)
{
  maybelong  i, cMode, N;
  maybelong  *scatteredstrides, *scatteredshape, **indices;
  char   *gathered, *scattered;
  long nindices = ninargs-4, outi = ninargs+noutargs-1;

  if (nindices == 0)
     return 0;
  
  if (NA_checkIo("putNbytes", 4, 1, MIN(ninargs, 4), noutargs))
     return -1;

  if (NA_checkOneCBuffer("putNbytes", 2, buffers[0], bsizes[0], sizeof(maybelong)))
     return -1;
  else {
     cMode            =  ((maybelong *) buffers[0])[0];
     N                =  ((maybelong *) buffers[0])[1];
  }

  if (NA_checkOneCBuffer("putNbytes", niter*N, buffers[1], bsizes[1], 1))
     return -1;
  else 
     gathered  =  (char *)  buffers[1];

  if (NA_checkOneCBuffer("putNbytes", nindices, buffers[2], bsizes[2], sizeof(maybelong)))
     return -1;
  else {
     scatteredstrides =  (maybelong *)  buffers[2];
  }
  
  if (NA_checkOneCBuffer("putNbytes", nindices, buffers[3], bsizes[3], sizeof(maybelong)))
     return -1;
  else {
     scatteredshape   =  (maybelong *)  buffers[3];
  }

  for(i=4; i<nindices; i++)
     if (NA_checkOneCBuffer("putNbytes", niter, buffers[i], bsizes[i], sizeof(maybelong)))
        return -1;
  indices          =  (maybelong **) &buffers[4];

  if (NA_checkOneStriding("putNBytes", nindices, scatteredshape, 0, scatteredstrides, bsizes[outi], N, 0))
    return -1;
  else
    scattered        =  (char *)   buffers[outi];

  switch( cMode )
    {
    case WRAPPED:
      for(i=0; i<niter; i++)
        {
          maybelong j, index;
          for(j=index=0; j<nindices; j++)
            {
              maybelong k = indices[j][i];
	      wrap(k, scatteredshape[j]);
              index += scatteredstrides[j]*k;
            }
          memcpy( scattered+index, &gathered[i*N], N);
        }
      break;
    case CLIPPED:
    default:
      for(i=0; i<niter; i++)
        {
          maybelong j, index;
          for(j=index=0; j<nindices; j++)
            {
              maybelong k = indices[j][i];
              if (k < 0)
                k = 0;
              else if (k >= scatteredshape[j])
                k = scatteredshape[j]-1;
              index += scatteredstrides[j]*k;
            }
          memcpy( scattered+index, &gathered[i*N], N);
        }
      break;
    case RAISE:
      for(i=0; i<niter; i++)
        {
          maybelong j, index;
          for(j=index=0; j<nindices; j++)
            {
              maybelong k = indices[j][i];
              if (k < 0)
                k += scatteredshape[j];
              if (k >= scatteredshape[j]) {
                 PyErr_Format(PyExc_IndexError,
                   "Index[" ML_DEC "," ML_DEC "]=" ML_DEC
                   " out of range[" ML_DEC "]",
                   i, j, k, scatteredshape[j]);
                   return -1;              
              }
              index += scatteredstrides[j]*k;
            }
          memcpy( scattered+index, &gathered[i*N], N);
        }
      break;
    }
  return 0;
}

SELF_CHECKED_CFUNC_DESCR(putNbytes, CFUNC_UFUNC);
s„  
/*******************************************
*                                          *
* These copy data to a contiguous buffer.  *
* They do not handle non-aligned data.     *
* Offsets and Strides are in byte units    *
*                                          *
*******************************************/

static int copy<size>bytes(long dim, long dummy, maybelong *niters,
            void *input,  long inboffset,  maybelong *inbstrides,
            void *output, long outboffset, maybelong *outbstrides) {
    long i;
    char *tin     = (char *) input  + inboffset;
    char *tout    = (char *) output + outboffset;
    if (dim == 0) {
        for (i=0; i<niters[dim]; i++) {
            NA_ACOPY<size>(tin, tout);
            tin  += inbstrides[dim];
            tout += outbstrides[dim];
        }
    }
    else {
        for (i=0; i<niters[dim]; i++) {
            copy<size>bytes(dim-1, dummy, niters,
               input,  inboffset  + i*inbstrides[dim],  inbstrides,
               output, outboffset + i*outbstrides[dim], outbstrides);
        }
    }
    return 0;
}

STRIDING_DESCR2(copy<size>bytes, CHECK_ALIGN, <size>, <size>);
s€  
static int align<size>bytes(long dim, long dummy, maybelong *niters,
            void *input,  long inboffset,  maybelong *inbstrides,
            void *output, long outboffset, maybelong *outbstrides) {
	return copyNbytes(dim, <size>, niters, input, inboffset, inbstrides, 
			  output, outboffset, outbstrides);
}

STRIDING_DESCR2(align<size>bytes, !CHECK_ALIGN, <size>, <size>);

s§  
/******* byteswap *****/

static int byteswap<sizename>(long dim, long dummy, maybelong *niters,
            void *input,  long inboffset,  maybelong *inbstrides,
            void *output, long outboffset, maybelong *outbstrides) {

    long i;
    char *tin  = (char *) input  + inboffset;
    char *tout = (char *) output + outboffset;
    if (dim == 0) {
        for (i=0; i<niters[dim]; i++) {
            char t[<size>];
            NA_COPY<size>(tin, t);
            <swapkind><size>(t, tout);
            tin  += inbstrides[dim];
            tout += outbstrides[dim];
        }
    }
    else {
        for (i=0; i<niters[dim]; i++) {
            byteswap<sizename>(dim-1, dummy, niters,
               input,  inboffset  + i*inbstrides[dim],  inbstrides,
               output, outboffset + i*outbstrides[dim], outbstrides);
        }
    }
    return 0;
}

STRIDING_DESCR2(byteswap<sizename>, !CHECK_ALIGN, <size>, <size>);

sû  
static int choose<size>bytes(long niter, long ninargs, long noutargs,
                         void **buffers, long *bsizes)
{
  maybelong i, cMode, maxP, N, *selector;
  char **population, *output;
  int outi = ninargs + noutargs - 1;

  if (NA_checkIo("choose<size>bytes", 2, 1, MIN(ninargs,2), noutargs))
     return -1;

  if (NA_checkOneCBuffer("choose<size>bytes", 2, buffers[0], bsizes[0], sizeof(maybelong)))
     return -1;
  else {
     cMode        =  ((maybelong *) buffers[0])[0];
     N            =  ((maybelong *) buffers[0])[1];
  }

  if (NA_checkOneCBuffer("choose<size>bytes", niter, buffers[1], bsizes[1],
     sizeof(maybelong)))
        return -1;
  else
     selector     =  (maybelong *)  buffers[1];

  if (ninargs-2 == 0)
    return 0;
  else
    maxP = ninargs-2;
  for(i=2; i<ninargs; i++)
     if (NA_checkOneCBuffer("choose<size>bytes", niter,
        buffers[i], bsizes[i], <size>))
           return -1;
  population      =  (char **) &buffers[2];

  if (NA_checkOneCBuffer("choose<size>bytes", niter,
     buffers[outi], bsizes[outi], <size>))
        return -1;
  else
     output       =  (char *)   buffers[outi];

  if (maxP == 0) 
	  return 0;

  switch(cMode)
    {
    case WRAPPED:
      for(i=0; i<niter; i++)
        {
          maybelong j = selector[i];
	  wrap(j, maxP);
          NA_ACOPY<size>(&population[j][i*<size>], &output[i*<size>]);
        }
      break;
    default:
    case CLIPPED:
      for(i=0; i<niter; i++)
        {
          maybelong j = selector[i];
          if (j < 0)
            j = 0;
          else if (j >= maxP)
            j = maxP-1;
          NA_ACOPY<size>(&population[j][i*<size>], &output[i*<size>]);
        }
      break;
    }
  return 0;
}

SELF_CHECKED_CFUNC_DESCR(choose<size>bytes, CFUNC_UFUNC);
sh   
static PyMethodDef _<module>Methods[] = {
<module_methods>
	{NULL,      NULL}        /* Sentinel */
};
s   	{ "%s", %s, METH_VARARGS},
s“  
/* platform independent*/
#ifdef MS_WIN32
__declspec(dllexport)
#endif
void init_<module>(void) {
    PyObject *m, *d;
    m = Py_InitModule("_<module>", _<module>Methods);
    d = PyModule_GetDict(m);
    _Error = PyErr_NewException("_<module>.error", NULL, NULL);
    PyDict_SetItemString(d, "error", _Error);
    import_libnumarray();
    PyDict_SetItemString(d, "functionDict", init_funcDict());
}
sô  
#include <Python.h>
#include <stdio.h>
#include <math.h>
#include "libnumarray.h"

#ifdef MS_WIN32
#pragma warning(once : 4244)
#endif

#define logical_and(arg1, arg2) (arg1 != 0) & (arg2 != 0)
#define logical_or(arg1, arg2)  (arg1 != 0) | (arg2 != 0)
#define logical_xor(arg1, arg2) ((arg1 != 0) ^ (arg2 != 0)) & 1
#define ufmaximum(arg1, arg2) (((temp1=arg1) > (temp2=arg2)) ? temp1 : temp2)
#define ufminimum(arg1, arg2) (((temp1=arg1) < (temp2=arg2)) ? temp1 : temp2)

static PyObject *_Error;

s   
static int <pyname>_<intype0>_vector(long niter, long ninargs, long noutargs, void **buffers, long *bsizes) {
    long i;
    <intype0> *tin = (<intype0> *) buffers[0];
    <outtype0> *tout = (<outtype0> *) buffers[1];
    <optional_declarations>
    for (i=0; i<niter; i++, tin++, tout++) {
        <operator1>
    }
    return 0;
}

UFUNC_DESCR2(<pyname>_<intype0>_vector, sizeof(<intype0>), sizeof(<outtype0>));
s  
static int <pyname>_<intype0>_vector_vector(long niter, long ninargs, long noutargs, void **buffers, long *bsizes) {
    long i;
    <intype0>  *tin1  = (<intype0> *) buffers[0];
    <intype1>  *tin2  = (<intype1> *) buffers[1];
    <outtype0> *tout  = (<outtype0> *) buffers[2];
    <optional_declarations>
    for (i=0; i<niter; i++, tin1++, tin2++, tout++) {
        <operator_vv>
    }
    return 0;
}

UFUNC_DESCR3(<pyname>_<intype0>_vector_vector, sizeof(<intype0>), sizeof(<intype1>), sizeof(<outtype0>));

s  
static int <pyname>_<intype0>_vector_scalar(long niter, long ninargs, long noutargs, void **buffers, long *bsizes) {
    long i;
    <intype0> *tin1     = (<intype0> *) buffers[0];
    <intype1> tscalar   = *(<intype1> *) buffers[1];
    <outtype0> *tout    = (<outtype0> *) buffers[2];
    <optional_declarations>
    for (i=0; i<niter; i++, tin1++, tout++) {
        <operator_vs>
    }
    return 0;
}

UFUNC_DESCR3vs(<pyname>_<intype0>_vector_scalar, sizeof(<intype0>), sizeof(<intype1>), sizeof(<outtype0>));

sÿ  
static int <pyname>_<intype0>_scalar_vector(long niter, long ninargs, long noutargs, void **buffers, long *bsizes) {
    long i;
    <intype0> tscalar = *(<intype0> *) buffers[0];
    <intype1> *tin2   =  (<intype1> *) buffers[1];
    <outtype0> *tout  = (<outtype0> *) buffers[2];
    <optional_declarations>
    for (i=0; i<niter; i++, tin2++, tout++) {
        <operator_sv>
    }
    return 0;
}

UFUNC_DESCR3sv(<pyname>_<intype0>_scalar_vector, sizeof(<intype0>), sizeof(<intype1>), sizeof(<outtype0>));

sî  
static int <pyname>_<intype0>_reduce(long dim, long dummy, maybelong *niters,
            void *input,  long inboffset,  maybelong *inbstrides,
            void *output, long outboffset, maybelong *outbstrides) {
    long i;
    <intype0>  *tin   = (<intype0> *) ((char *) input  + inboffset);
    <outtype0> *tout  = (<outtype0> *) ((char *) output + outboffset);
    <outtype0> net;
    <optional_declarations>
    if (dim == 0) {
        net = *tout;
        for (i=1; i<niters[dim]; i++) {
            tin = (<intype0> *) ((char *) tin + inbstrides[dim]);
            <operator_reduce>
        }
        *tout = net;
    }
    else {
        for (i=0; i<niters[dim]; i++) {
            <pyname>_<intype0>_reduce(dim-1, dummy, niters,
               input,  inboffset  + i*inbstrides[dim],  inbstrides,
               output, outboffset + i*outbstrides[dim], outbstrides);
        }
    }
    return 0;
}

STRIDING_DESCR2(<pyname>_<intype0>_reduce, CHECK_ALIGN, sizeof(<intype0>), sizeof(<outtype0>));
sF  
static int <pyname>_<intype0>_accumulate(
            long dim, long dummy, maybelong *niters,
            void *input,  long inboffset,  maybelong *inbstrides,
            void *output, long outboffset, maybelong *outbstrides) {
    long i;
    <intype0> *tin   = (<intype0> *) ((char *) input  + inboffset);
    <outtype0> *tout = (<outtype0> *) ((char *) output + outboffset);
    <outtype0> lastval;
    <optional_declarations>
    if (dim == 0) {
        for (i=1; i<niters[dim]; i++) {
            lastval = *tout;
            tin = (<intype0> *) ((char *) tin + inbstrides[dim]);
            tout = (<outtype0> *) ((char *) tout + outbstrides[dim]);
            <operator_accumulate>
        }
    }
    else {
        for (i=0; i<niters[dim]; i++) {
            <pyname>_<intype0>_accumulate(dim-1, dummy, niters,
               input,  inboffset  + i*inbstrides[dim],  inbstrides,
               output, outboffset + i*outbstrides[dim], outbstrides);
        }
    }
    return 0;
}

STRIDING_DESCR2(<pyname>_<intype0>_accumulate, CHECK_ALIGN, sizeof(<intype0>), sizeof(<outtype0>));
s  
static int <pyname>_<intype0>_vector_vector(long niter, long ninargs, long noutargs, void **buffers, long *bsizes) {
    long i;
    <intype0>  *tin1  = (<intype0> *) buffers[0];
    <intype1>  *tin2  = (<intype1> *) buffers[1];
    <outtype0> *tout  = (<outtype0> *) buffers[2];
    <optional_declarations>
    for (i=0; i<niter; i++, tin1++, tin2++, tout++) {
        <operator_pp>
    }
    return 0;
}

UFUNC_DESCR3(<pyname>_<intype0>_vector_vector, sizeof(<intype0>), sizeof(<intype1>), sizeof(<outtype0>));

sU   
static PyObject *init_funcDict(void) {
    PyObject *dict;
    dict = PyDict_New();
s2       NA_add_cfunc(dict, "%s", (void *) &%s_descr);
s       return dict;
}
s	   operator1s   <operator>(*tin, *tout);s   operator_vvs    <operator>(*tin1, *tin2, *tout);s   operator_vss"   <operator>(*tin1, tscalar, *tout);s   operator_svs"   <operator>(tscalar, *tin2, *tout);s   operator_reduces   <operator>(net, *tin, net);s   operator_accumulates!   <operator>(lastval ,*tin, *tout);s   *tout = <operator>(*tin);s!   *tout = <operator>(*tin1, *tin2);s#   *tout = <operator>(*tin1, tscalar);s#   *tout = <operator>(tscalar, *tin2);s   net = <operator>(net, *tin);s"   *tout = <operator>(lastval ,*tin);s   operator_pps   *tout = <operator>(tin1, tin2);s   *tout = <operator>*tin;s   *tout = *tin1 <operator> *tin2;s!   *tout = *tin1 <operator> tscalar;s!   *tout = tscalar <operator> *tin2;s   net = net <operator> *tin;s    *tout = lastval <operator> *tin;sU   *tout = ((*tin2==0) ? int_dividebyzero_error(*tin2, *tin1) : *tin1 <operator> *tin2);s[   *tout = ((tscalar==0) ? int_dividebyzero_error(tscalar, *tin1) : *tin1 <operator> tscalar);sS   *tout = ((*tin2==0) ? int_dividebyzero_error(*tin2, 0) : tscalar <operator> *tin2);sJ   net = ((*tin==0) ? int_dividebyzero_error(*tin, 0) : net <operator> *tin);sP   *tout = ((*tin==0) ? int_dividebyzero_error(*tin, 0) : lastval <operator> *tin);s^   *tout = ((*tin2==0) ? int_dividebyzero_error(*tin2, *tin1) : *tin1 <operator> (double) *tin2);sd   *tout = ((tscalar==0) ? int_dividebyzero_error(tscalar, *tin1) : *tin1 <operator> (double) tscalar);s\   *tout = ((*tin2==0) ? int_dividebyzero_error(*tin2, 0) : tscalar <operator> (double) *tin2);sS   net = ((*tin==0) ? int_dividebyzero_error(*tin, 0) : net <operator> (double) *tin);sY   *tout = ((*tin==0) ? int_dividebyzero_error(*tin, 0) : lastval <operator> (double) *tin);se   *tout = ((*tin2==0) ? int_dividebyzero_error(*tin2, *tin1) : floor(*tin1 <operator> (double) *tin2));sk   *tout = ((tscalar==0) ? int_dividebyzero_error(tscalar, *tin1) : floor(*tin1 <operator> (double) tscalar));sc   *tout = ((*tin2==0) ? int_dividebyzero_error(*tin2, 0) : floor(tscalar <operator> (double) *tin2));sZ   net = ((*tin==0) ? int_dividebyzero_error(*tin, 0) : floor(net <operator> (double) *tin));s`   *tout = ((*tin==0) ? int_dividebyzero_error(*tin, 0) : floor(lastval <operator> (double) *tin));sc   if (temp > 127) temp = int_overflow_error(127.);
if (temp < -128) temp = int_overflow_error(-128.);s0   if (temp > 255) temp = int_overflow_error(255.);sj   if (temp > 32767) temp = int_overflow_error(32767.);
if (temp < -32768) temp = int_overflow_error(-32768);s4   if (temp > 65535) temp = int_overflow_error(65535.);s–   if (temp > 2147483647) temp = (Float64) int_overflow_error(2147483647.);
if (temp < (-2147483648.)) temp = (Float64) int_overflow_error(-2147483648.);sI   if (temp > 4294967295U) temp = (Float64) int_overflow_error(4294967295.);s\   if (smult64_overflow(<p1>, <p2>)) temp = (Float64) int_overflow_error(4611686018427387903.);s\   if (umult64_overflow(<p1>, <p2>)) temp = (Float64) int_overflow_error(9223372036854775807.);s   *tin1s   *tin2s   *touts   tscalars   nets   *tins   lastvals`   temp = ((<uptype>) <p1>) %<operator> ((<uptype>) <p2>);
    <checkstr>
    <p3> = (<type>) temp;c         C   s§   h  } x– t i ƒ  D]ˆ } t h  d | <d | h  d t | d <d t | d <<d |  <d t | d <d t | d <d t | d	 <| | <q W| Sd  S(
   Ns   types   checkstrs   p1i    s   p2i   s   uptypes   p3i   (   s   tds   intX_tds   keyss   keys   intX_mult_templates   sizestrs   checkstrs   uptype(   s   uptypes   sizestrs   checkstrs   keys   td(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   make_int_template_dictF  s
     †	c           C   s   d t  i j Sd  S(   Ns   --hasUInt64(   s   syss   argv(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys	   hasUInt64^  s    c           C   s   d t  i j Sd  S(   Ns   --hasFloat128(   s   syss   argv(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   hasFloat128a  s    s   Bools   (Bool) isNonZEROs   PY_BOOL_CHARs    s   Int8s   (Int8)s   PY_INT8_CHARs   Int16s   (Int16)s   PY_INT16_CHARs   Int32s   (Int32)s   PY_INT32_CHARs   UInt32s   (UInt32)s   PY_UINT32_CHARs   UInt8s   (UInt8)s   PY_UINT8_CHARs   UInt16s   (UInt16)s   PY_UINT16_CHARs   Float32s	   (Float32)s   PY_FLOAT32_CHARs   Float64s	   (Float64)s   PY_FLOAT64_CHARs	   Complex32s   NUM_TO_COMPLEXs   PY_COMPLEX32_CHARs	   Complex64s   PY_COMPLEX64_CHARs   Int64s   (Int64)s   PY_LONG_CHARs   UInt64s   (UInt64)s   Float128s
   (Float128)s   PY_FLOAT128_CHARs
   Complex128s   PY_COMPLEX128_CHARs
   ConvParamsc           B   s   t  Z d „  Z RS(   Nc         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   s   typenames   selfs   typecasts   pybuildchars   pycast(   s   selfs   typenames   typecasts   pybuildchars   pycast(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __init__{  s    			(   s   __name__s
   __module__s   __init__(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys
   ConvParamsz  s   s   1s   2s   4s   8s   16s   BytesParamsc           B   s   t  Z d „  Z RS(   Nc         C   s2   | |  _  t | ƒ d |  _ | |  _ d |  _ d  S(   Ns   bytess   NA_SWAP(   s   sizes   selfs   strs   sizenames   types   typenames   swapkind(   s   selfs   sizes   type(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __init__Š  s    		(   s   __name__s
   __module__s   __init__(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   BytesParams‰  s   s   Ns   AnyTypes   ComplexBytesParamsc           B   s   t  Z d „  Z RS(   Nc         C   s(   | |  _  | |  _ | |  _ d |  _ d  S(   Ns   NA_COMPLEX_SWAP(   s   sizes   selfs   types   sizenames   typenames   swapkind(   s   selfs   sizes   type(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __init__“  s    			(   s   __name__s
   __module__s   __init__(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   ComplexBytesParams’  s   i   i   s   Int32 temp;s   Float64 temp;s   Int64 temp;s   <intype0> temp1, temp2;s   minusi   s   -s   addi   s   +s   subtracts   multiplys   *s   divides   /s   floor_divides   NUM_FLOORDIVIDEs   true_divides	   remainders    % s   fmods   powers   num_pows   abss   fabss   sins   coss   tans   arcsins   asins   arccoss   acoss   arctans   atans   arctan2s   atan2s   logs   num_logs   log10s	   num_log10s   exps   sinhs   coshs   tanhs   arcsinhs	   num_asinhs   arccoshs	   num_acoshs   arctanhs	   num_atanhs   ieeemasks   NA_IeeeSpecial32s   vector_vectors   NA_IeeeSpecial64s   sqrts   equals   ==s	   not_equals   !=s   greaters   >s   greater_equals   >=s   lesss   <s
   less_equals   <=s   logical_ands
   logical_ors   logical_xors   logical_nots   !s   bitwise_ands   &s
   bitwise_ors   |s   bitwise_xors   ^s   bitwise_nots   ~s   rshifts   >>s   lshifts   <<s   floors   ceils   maximums	   ufmaximums   minimums	   ufminimums   _rounds	   num_rounds   hypots
   NUM_CMINUSs   NUM_CADDs   NUM_CSUBs   NUM_CMULs   NUM_CDIVs   NUM_CREMs   NUM_CPOWs   NUM_CABSs   NUM_CSINs   NUM_CCOSs   NUM_CTANs	   NUM_CASINs	   NUM_CACOSs	   NUM_CATANs
   NUM_CASINHs
   NUM_CACOSHs
   NUM_CATANHs   NUM_CLOGs
   NUM_CLOG10s   NUM_CEXPs	   NUM_CSINHs	   NUM_CCOSHs	   NUM_CTANHs	   NUM_CSQRTs   NUM_CNEs	   NUM_CLANDs   NUM_CLORs	   NUM_CLXORs	   NUM_CLNOTs
   NUM_CFLOORs	   NUM_CCEILs   NUM_CMAXs   NUM_CMINs	   NUM_CFABSs
   NUM_CROUNDs
   NUM_CHYPOTs   UFuncParamsc           B   s   t  Z e e d „ Z RS(   Nc	   
      C   s™   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _	 |  i d |  _
 x: |  i d i ƒ  D]% }	 |  i d |	 |  i |  i |	 <ql Wd  S(   Ni   i    (   s   pynames   selfs   ninputss   noutputss   forms   sigss   opt_declarationss	   opt_declss   templates   vslists   operators   keyss   keys   __dict__(
   s   selfs   pynames   ninputss   noutputss   forms   sigss   opt_declarationss   templates   vslists   key(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __init__¬  s    								 (   s   __name__s
   __module__s   Nones   __init__(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   UFuncParams«  s   s   CodeGeneratorc           B   sG   t  Z d  Z e e e d „ Z e e d „ Z e d „ Z	 e d „ Z
 RS(   sA   Generates source code using supplied functions and code templatesc         C   s(   | |  _  | |  _ | |  _ d |  _ d  S(   Ns    (   s   headers   selfs   tails	   separators   module_methods(   s   selfs   headers   tails	   separator(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __init__ú  s    			c         C   sé   |  i |  i g |  _ t g |  _ | t j o |  i ƒ  n |  i | ƒ |  i i	 t
 ƒ |  i i	 t |  i ƒ |  i i |  i ƒ |  i i	 |  i |  i ƒ d i |  i ƒ } | o* t | d ƒ } | i | ƒ | i ƒ  n | Sd  S(   Ns    s   w(   s   selfs   headers   __dict__s   codelists   _CFUNCDICT_HEADERs   funclists   Types   Nones   bodygenerators   appends   _CFUNCDICT_TAILs   _METHODS_DEFs   extends   tails   joins
   sourcecodes   files   opens   fs   writes   close(   s   selfs   files   Types   fs
   sourcecode(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __call__   s    c         C   s5   | t j o
 | } n |  i i t | | f ƒ d  S(   N(   s   keys   Nones   names   selfs   funclists   appends   _ADDCFUNC_TEMPLATE(   s   selfs   names   key(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   addcfunc  s    
c         C   s4   | t j o
 | } n |  i t | | f 7_ d  S(   N(   s   keys   Nones   names   selfs   module_methodss   ADDMETHOD_TEMPLATE(   s   selfs   names   key(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys	   addmethod  s    
(   s   __name__s
   __module__s   __doc__s   _HEADERs   _TAILs   _TYPE_SEPARATORs   __init__s   Nones   __call__s   addcfuncs	   addmethod(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   CodeGeneratorø  s
    s   ConvCodeGeneratorc           B   s#   t  Z d „  Z d „  Z d „  Z RS(   Nc         G   s   t  i |  | Œ d |  _ d  S(   Ns   conv(   s   CodeGenerators   __init__s   selfs
   componentss   module(   s   selfs
   components(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __init__  s    c         C   s*   t  i |  | | d t | | f ƒ ƒd  S(   Ns   key(   s   CodeGenerators   addcfuncs   selfs   types   names   repr(   s   selfs   types   name(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   addcfunc"  s    c   	      C   sf  x_t  D]W} t t | ƒ } | i d d g j o t } t } n t
 } t } |  i i |  i | | | i ƒ |  i | i d ƒ |  i | i d ƒ xÅ t  D]½ } t t | ƒ } | | j o q� n | i | _ | i | _ t | i | i ƒ | i | _ |  i i t | i ƒ t | i | i f ƒ } | i d | i } |  i i t | | f ƒ q� Wq Wd S(   s9   Generates the repetitive sections of code for conversionss	   Complex32s	   Complex64s	   asPyValues   fromPyValues   asN(   s
   typeconfigs   cfg1s   applys
   ConvParamss   t1s   typenames   COMPLEX_FROM_PyVALUE_TEMPLATEs   frompys   COMPLEX_AS_PyVALUE_TEMPLATEs   aspys   FROM_PyVALUE_TEMPLATEs   AS_PyVALUE_TEMPLATEs   selfs   codelists   appends	   separators   __dict__s   addcfuncs   cfg2s   t2s   desttypenames   typecasts   desttypecasts   numarray_to_numarrays   CONVERSION_TEMPLATEs   reprs   typetups   names   funclists   _ADDCFUNC_TEMPLATE(	   s   selfs   names   cfg1s   t2s   t1s   cfg2s   typetups   frompys   aspy(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   bodygenerator%  s0      
" (   s   __name__s
   __module__s   __init__s   addcfuncs   bodygenerator(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   ConvCodeGenerator  s   		s   SortCodeGeneratorc           B   s#   t  Z d „  Z d „  Z d „  Z RS(   Nc         G   s   t  i |  | Œ d |  _ d  S(   Ns   sort(   s   CodeGenerators   __init__s   selfs
   componentss   module(   s   selfs
   components(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __init__E  s    c         C   s*   t  i |  | | d t | | f ƒ ƒd  S(   Ns   key(   s   CodeGenerators   addcfuncs   selfs   names   types   repr(   s   selfs   types   name(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   addcfuncI  s    c         C   sî   xç t  D]ß } t t | ƒ } | i d d g j o | i i t ƒ n | i i t	 ƒ |  i i |  i t | i ƒ |  i | i d ƒ |  i | i d ƒ |  i | i d ƒ |  i | i d ƒ |  i | i d ƒ |  i | i d ƒ q Wd  S(	   Ns	   Complex32s	   Complex64s   sorts   asorts   searchsorteds	   fillarrays
   mxmultiplys   nonzeroCoords(   s
   typeconfigs   cfgs   applys
   ConvParamss   ts   typenames   __dict__s   updates   sort_complex_tds   sort_operator_tds   selfs   codelists   appends	   separators   SORT_TEMPLATEs   addcfunc(   s   selfs   cfgs   t(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   bodygeneratorL  s     (   s   __name__s
   __module__s   __init__s   addcfuncs   bodygenerator(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   SortCodeGeneratorD  s   		s   BytesCodeGeneratorc           B   s   t  Z d „  Z d „  Z RS(   Nc         G   s   t  i |  | Œ d |  _ d  S(   Ns   bytes(   s   CodeGenerators   __init__s   selfs
   componentss   module(   s   selfs
   components(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __init__\  s    c         C   sG  x‹ t  D]ƒ } t t | ƒ } |  i i |  i t	 | i
 ƒ |  i d | i ƒ |  i d | i ƒ |  i d | i ƒ |  i d | i ƒ q W|  i i |  i t t i
 ƒ |  i d ƒ |  i d ƒ |  i d ƒ |  i d ƒ |  i i |  i t t i
 ƒ |  i d	 ƒ |  i i |  i t t i
 ƒ |  i d
 ƒ |  i d ƒ d  S(   Ns   copys   byteswaps   aligns   chooses   chooseNbytess
   copyNbytess	   putNbytess
   takeNbytess   byteswapComplex32s   byteswapComplex64s   copyToString(   s   bytesconfigs   cfgs   applys   BytesParamss   ts   selfs   codelists   appends	   separators   BYTES_TEMPLATEs   __dict__s   addcfuncs   sizenames   CHOOSE_TEMPLATEs   NBytesParamss   BYTESWAP_TEMPLATEs   Complex32BytesCfgs   Complex64BytesCfgs	   addmethod(   s   selfs   cfgs   t(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   bodygenerator`  s$     (   s   __name__s
   __module__s   __init__s   bodygenerator(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   BytesCodeGenerator[  s   	s   UFuncCodeGeneratorc           B   s   t  Z d „  Z d „  Z RS(   Nc         G   s   t  i |  | Œ d  S(   N(   s   CodeGenerators   __init__s   selfs
   components(   s   selfs
   components(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   __init__}  s    c         C   s¥  d | |  _ x‘t D]‰} t t | ƒ } |  i i	 |  i
 | i ƒ xW| i D]L} | i | i t | ƒ j o* | d f | i | d f | i } n x/ t | i ƒ D] } t | d | | | ƒ qª Wx6 t | i ƒ D]% } t | d | | | | i ƒ qÜ W| i | j o qM n | i t j o¢ | i d j o t | _ d g | _ qÎ| i d j oY | d | d j o% t | _ d	 d
 d d d g | _ qÊt | _ d	 d
 d g | _ qÎt d ƒ ‚ n | i | i | _ |  i i	 | i | i ƒ x› | i D]� } | d d g j o | d f | d f f } n | | i  | | i f } |  i! d | i d | i d | d t" | i | | f ƒ ƒ qWqM Wq Wd S(   s*   Generates the repetitive sections of code.s   ufunci    i   s   intype%ds	   outtype%ds   vectori   iÿÿÿÿs   vector_vectors   vector_scalars   scalar_vectors   reduces
   accumulates#   Can't handle ufuncs with > 2 inputss   names   _s   keyN(#   s   Types   selfs   modules   ufuncconfigss   cfgs   applys   UFuncParamss   ufos   codelists   appends	   separators   pynames   sigss   sigs   ninputss   noutputss   lens   ranges   is   setattrs   intype0s   templates   Nones   UFUNC_UNARY_TEMPLATEs   vslists   UFUNC_BINARY_TEMPLATEs   UFUNC_COMPARE_TEMPLATEs
   ValueErrors	   opt_declss   __dict__s   optional_declarationss   forms   sig2s   addcfuncs   repr(   s   selfs   Types   forms   ufos   is   cfgs   sig2s   sig(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   bodygenerator€  sL      
 *  #			
 "(   s   __name__s
   __module__s   __init__s   bodygenerator(    (    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   UFuncCodeGenerator|  s   	s3   /*********************  %s  *********************/
c         C   sF   | t j o d |  |  f } n d |  |  | | f } t | ƒ d  S(   Ns#   generate_%s_code('Src/_%smodule.c')s)   generate_%s_code('Src/_%smodule.c', '%s')(   s   Types   Nones   Names   ss   eval(   s   Names   Types   s(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   generate»  s    c         C   s¥   | t j o d |  } n d |  | } t i i d ƒ } t i i | ƒ o t i i | ƒ } n d } | | j p d t
 i j o d G| GHt |  | ƒ n d  S(   Ns   Src/_%smodule.cs   Lib/codegenerator.pyiÿÿÿÿs   --check-datess   generating new version of(   s   Types   Nones   Names   Sources   oss   paths   getmtimes
   timemodgens   existss   timemods   syss   argvs   generate(   s   Names   Types   Sources   timemods
   timemodgen(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys
   PseudoMakeÌ  s    	c          C   s�   t  d ƒ t  d ƒ t  d ƒ d d d d d d	 d
 d d d d g } | i d ƒ t ƒ  o | i d ƒ n x | D] }  t  d |  ƒ qt Wd  S(   Ns   convs   sorts   bytess   Bools   Int8s   UInt8s   Int16s   UInt16s   Int32s   UInt32s   Float32s   Float64s	   Complex32s	   Complex64s   Int64s   UInt64s   ufunc(   s
   PseudoMakes   typess   appends	   hasUInt64s   T(   s   Ts   types(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   GenAllÛ  s    


'
 s   __main__(r   s   syss   oss   imps   find_modules   files   paths   descrs   load_modules   templates   _HEADERs   _TYPE_SEPARATORs   AS_PyVALUE_TEMPLATEs   COMPLEX_AS_PyVALUE_TEMPLATEs   FROM_PyVALUE_TEMPLATEs   COMPLEX_FROM_PyVALUE_TEMPLATEs   CONVERSION_TEMPLATEs   _numarray_to_numarrays   _complex_types   numarray_to_numarrays   SORT_HEADERs   SORT_TEMPLATEs   sort_operator_tds   sort_complex_tds   BYTES_HEADERs   COPY_TEMPLATEs   ALIGN_TEMPLATEs   BYTESWAP_TEMPLATEs   CHOOSE_TEMPLATEs   BYTES_TEMPLATEs   _METHODS_DEFs   ADDMETHOD_TEMPLATEs   _TAILs   UFUNC_HEADERs   UFUNC_UNARY_TEMPLATEs   UFUNC_VECTOR_VECTORs   UFUNC_VECTOR_SCALARs   UFUNC_SCALAR_VECTORs   UFUNC_REDUCEs   UFUNC_ACCUMULATEs   UFUNC_PVECTOR_PVECTORs   UFUNC_COMPARE_TEMPLATEs   UFUNC_BINARY_TEMPLATEs   _CFUNCDICT_HEADERs   _ADDCFUNC_TEMPLATEs   _CFUNCDICT_TAILs   macro_tds   function_tds   mask_tds   operator_tds   int_divide_tds   int_truedivide_tds   int_floordivide_tds
   int8_checks   uint8_checks   int16_checks   uint16_checks   int32_checks   uint32_checks   int64_checks   uint64_checks   intX_tds   intX_mult_templates   make_int_template_dicts	   hasUInt64s   hasFloat128s
   typeconfigs   appends
   ConvParamss   bytesconfigs   BytesParamss   NBytesParamss   ComplexBytesParamss   Complex32BytesCfgs   Complex64BytesCfgs   generic_operator_sigss   generic_mathfunction_sigss   generic_comparisonfunction_sigss   generic_int_sigss   truedivide_int_sigss   generic_float_sigss   complex_complex_sigss   complex_real_sigss   complex_bool_sigss   opt_mult_decls   opt_mult32_decls   opt_mult64_decls   opt_minmax_decls
   sugar_dicts   globalss   multiply_int8_tds   multiply_uint8_tds   multiply_int16_tds   multiply_uint16_tds   multiply_uint32_tds   multiply_int32_tds   multiply_int64_tds   multiply_uint64_tds   ufuncconfigss   UFuncParamss   CodeGenerators   ConvCodeGenerators   SortCodeGenerators   BytesCodeGenerators   UFuncCodeGenerators   generate_conv_codes   generate_sort_codes   generate_bytes_codes   generate_ufunc_codes   Nones   generates
   PseudoMakes   GenAlls   mains   __name__(k   s   complex_real_sigss   uint32_checks   ConvCodeGenerators   generic_operator_sigss   SortCodeGenerators   generate_sort_codes   _TYPE_SEPARATORs   multiply_int16_tds   sort_operator_tds   generic_float_sigss
   typeconfigs   UFUNC_ACCUMULATEs
   ConvParamss   UFUNC_HEADERs   multiply_uint32_tds   mains   _complex_types   UFUNC_BINARY_TEMPLATEs   ADDMETHOD_TEMPLATEs   truedivide_int_sigss   hasFloat128s   generic_mathfunction_sigss   AS_PyVALUE_TEMPLATEs   CONVERSION_TEMPLATEs   BYTES_TEMPLATEs   multiply_uint64_tds   function_tds   BytesParamss   ufuncconfigss   COMPLEX_AS_PyVALUE_TEMPLATEs   _METHODS_DEFs   BYTESWAP_TEMPLATEs   templates   multiply_uint16_tds   Complex64BytesCfgs   SORT_TEMPLATEs   UFUNC_VECTOR_SCALARs   UFUNC_VECTOR_VECTORs   _HEADERs   int32_checks   COPY_TEMPLATEs   uint8_checks   paths   generates   UFUNC_PVECTOR_PVECTORs   numarray_to_numarrays   generic_comparisonfunction_sigss   _CFUNCDICT_TAILs	   hasUInt64s   oss   _CFUNCDICT_HEADERs   generic_int_sigss   multiply_int8_tds   UFuncCodeGenerators   generate_ufunc_codes   _TAILs   mask_tds   generate_bytes_codes   ALIGN_TEMPLATEs   imps   multiply_int32_tds   generate_conv_codes   GenAlls   SORT_HEADERs
   int8_checks   Complex32BytesCfgs   UFuncParamss   UFUNC_SCALAR_VECTORs   make_int_template_dicts   intX_tds   int64_checks   multiply_int64_tds   NBytesParamss   CodeGenerators   uint64_checks   opt_minmax_decls   ComplexBytesParamss   macro_tds   int16_checks   opt_mult_decls   uint16_checks   files   sort_complex_tds   int_truedivide_tds   CHOOSE_TEMPLATEs   descrs   opt_mult32_decls   UFUNC_UNARY_TEMPLATEs   UFUNC_COMPARE_TEMPLATEs   complex_bool_sigss   _ADDCFUNC_TEMPLATEs   FROM_PyVALUE_TEMPLATEs   int_floordivide_tds   operator_tds
   PseudoMakes   bytesconfigs   _numarray_to_numarrays   int_divide_tds   BYTES_HEADERs   syss   COMPLEX_FROM_PyVALUE_TEMPLATEs   opt_mult64_decls   UFUNC_REDUCEs   multiply_uint8_tds   BytesCodeGenerators   intX_mult_templates   complex_complex_sigs(    (    sO   /mit/python/arch/i386_rh9/lib/python2.3/site-packages/numarray/codegenerator.pys   ?   s   		 B		
ÿ 4E
E
ÿ e$"I <	<	<	333`			«

3WWWE
E

ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ {„K %'!9				