示例#1
0
文件: blas.c 项目: robwarm/gpaw-symm
PyObject* dotu(PyObject *self, PyObject *args)
{
  PyArrayObject* a;
  PyArrayObject* b;
  if (!PyArg_ParseTuple(args, "OO", &a, &b))
    return NULL;
  int n = PyArray_DIMS(a)[0];
  for (int i = 1; i < PyArray_NDIM(a); i++)
    n *= PyArray_DIMS(a)[i];
  int incx = 1;
  int incy = 1;
  if (PyArray_DESCR(a)->type_num == NPY_DOUBLE)
    {
      double result;
      result = ddot_(&n, (void*)DOUBLEP(a),
             &incx, (void*)DOUBLEP(b), &incy);
      return PyFloat_FromDouble(result);
    }
  else
    {
      double_complex* ap = COMPLEXP(a);
      double_complex* bp = COMPLEXP(b);
      double_complex z = 0.0;
      for (int i = 0; i < n; i++)
        z += ap[i] * bp[i];
      return PyComplex_FromDoubles(creal(z), cimag(z));
    }
}
示例#2
0
文件: JySync.c 项目: pombredanne/JyNI
/*
 * This function returns a NEW reference, i.e. caller must decref it in the end.
 */
PyObject* JySync_Init_PyComplex_From_JyComplex(jobject src, PyTypeObject* nonNativeSubtype)
{
	env(NULL);
	return PyComplex_FromDoubles(
			(double) (*env)->GetDoubleField(env, src, pyComplexRealField),
			(double) (*env)->GetDoubleField(env, src, pyComplexImagField));
}
示例#3
0
void makeComplexList(double2* array_in, int list_size, PyObject *list_out) {
  if (!PyList_Check(list_out)) fprintf(stderr,"makeComplexList must take "
                                              "a Python list\n");
  int q;
  for (q=0;q<list_size;q++) {
     PyList_Append(list_out, PyComplex_FromDoubles(array_in[q].x, array_in[q].y)); 
  }
}
示例#4
0
static PyObject *
nu_complex_float(const char *p, const formatdef *f)
{
    float re, im;
    memcpy((char *)&re, p, sizeof re);
    memcpy((char *)&im, p+sizeof re, sizeof im);
    return PyComplex_FromDoubles((double)re, (double) im);
}
示例#5
0
static PyObject *
nu_complex_double(const char *p, const formatdef *f)
{
    double re, im;
    memcpy((char *)&re, p, sizeof re);
    memcpy((char *)&im, p+sizeof re, sizeof im);
    return PyComplex_FromDoubles(re, im);
}
示例#6
0
inline PyObject* ComplexVector_to_python(ComplexVector* cpp) {
  PyObject* py = PyList_New(cpp->size());
  for (size_t i = 0; i < cpp->size(); ++i) {
    ComplexPixel& px = (*cpp)[i];
    PyObject* complex = PyComplex_FromDoubles(px.real(), px.imag());
    PyList_SET_ITEM(py, i, complex);
  }
  return py;
}
示例#7
0
static PyObject *
GMPy_PyComplex_From_MPC(PyObject *self, PyObject *other)
{
    CTXT_Object *context = NULL;
    double real, imag;

    CHECK_CONTEXT(context);

    real = mpfr_get_d(mpc_realref(MPC(self)), GET_REAL_ROUND(context));
    imag = mpfr_get_d(mpc_imagref(MPC(self)), GET_IMAG_ROUND(context));

    return PyComplex_FromDoubles(real, imag);
}
示例#8
0
文件: copyToList.c 项目: rrjudd/jvsip
PyObject *cvcopyToList_f(vsip_cvview_f *v){
    PyObject *cval;
    vsip_length N = vsip_cvgetlength_f(v);
    PyObject *retval = PyList_New(N);
    vsip_index i;
    for(i=0; i<N; i++){
       vsip_cscalar_f x = vsip_cvget_f(v,i);
       double re = (double)x.r;
       double im = (double)x.i;
       cval = PyComplex_FromDoubles(re,im);
       PyList_SetItem(retval,i,cval);
    }
    return retval;
}
static PyObject *
PyResponse_eval_response(PyResponse *self, PyObject *args)
{
    double omega, real, imag;
    PyObject *result;
    if (! PyArg_ParseTuple(args, "d", &omega))
        return NULL;
    if (eval_response(omega, self->response, &real, &imag) != 0)
        return NULL;
    result = PyComplex_FromDoubles(real, imag);
    if (result == NULL)
        return NULL;
    return result;
}
示例#10
0
/* hread supports reading of header items of all types using the various
 * hread_c calls.  Reads one item per call. */
PyObject * WRAP_hread(PyObject *self, PyObject *args) {
    int item_hdl, offset, iostat;
    char *type;
    PyObject *val, *rv;
    int in; short sh; long lg; float fl; double db; float cx[2]; char st[2];
    if (!PyArg_ParseTuple(args, "iis", &item_hdl, &offset, &type))
        return NULL;
    try {
        switch (type[0]) {
            case 'a':
                hreadb_c(item_hdl, st, offset, H_BYTE_SIZE, &iostat);
                CHK_IO(iostat);
                return Py_BuildValue("si", st, H_BYTE_SIZE);
            case 'i':
                hreadi_c(item_hdl, &in, offset, H_INT_SIZE, &iostat);
                CHK_IO(iostat);
                return Py_BuildValue("ii", in, H_INT_SIZE);
            case 'j':
                hreadj_c(item_hdl, &sh, offset, H_INT2_SIZE, &iostat);
                CHK_IO(iostat);
                return Py_BuildValue("ii", sh, H_INT2_SIZE);
            case 'l':
                hreadl_c(item_hdl, &lg, offset, H_INT8_SIZE, &iostat);
                CHK_IO(iostat);
                return Py_BuildValue("li", lg, H_INT8_SIZE);
            case 'r':
                hreadr_c(item_hdl, &fl, offset, H_REAL_SIZE, &iostat);
                CHK_IO(iostat);
                return Py_BuildValue("fi", fl, H_REAL_SIZE);
            case 'd':
                hreadd_c(item_hdl, &db, offset, H_DBLE_SIZE, &iostat);
                CHK_IO(iostat);
                return Py_BuildValue("fi", db, H_DBLE_SIZE);
            case 'c':
                hreadc_c(item_hdl, cx, offset, H_CMPLX_SIZE, &iostat);
                CHK_IO(iostat);
                val = PyComplex_FromDoubles((double) cx[0], (double) cx[1]);
                rv = Py_BuildValue("Oi", val, H_CMPLX_SIZE);
                Py_DECREF(val);
                return rv;
            default:
                PyErr_Format(PyExc_ValueError, "unknown item type: %c",type[0]);
                return NULL;
        }
    } catch (MiriadError &e) {
        PyErr_Format(PyExc_RuntimeError, e.get_message());
        return NULL;
    }
}
示例#11
0
文件: Pythonika.c 项目: pc/pythonika
void PyComplex(char *name, double value, double value2)
{
    PyObject *obj;

    obj = PyComplex_FromDoubles(value, value2);
    
    if(list_level>=0 && List[list_level]) {
        PyList_Append(List[list_level], obj);
        Py_DECREF(obj);    
        return;
    }

    PyObject_SetAttrString(interpreter_state->main_module, name, obj);
    Py_DECREF(obj);
}
示例#12
0
/* rdvr is responsible for reading variables of all types.  It wraps the
 * output of uvgetvr_c into various python structures, and returns
 * arrays as numpy arrays. */
PyObject * UVObject_rdvr(UVObject *self, PyObject *args) {
    char *name, *type, value[MAXVAR];
    int length, updated;
    npy_intp dims[1];
    PyArrayObject *rv;
    if (!PyArg_ParseTuple(args, "ss", &name, &type)) return NULL;
    uvprobvr_c(self->tno, name, value, &length, &updated);
    dims[0] = length;
    try {
        switch (type[0]) {
            case 'a':
                uvgetvr_c(self->tno,H_BYTE,name,value,length+1);
                return PyString_FromStringAndSize(value, length);
            case 'j':
                uvgetvr_c(self->tno,H_INT2,name,value,length);
                if (length == 1)
                    return PyInt_FromLong((long) ((short *)value)[0]);
                rv = (PyArrayObject *) PyArray_SimpleNew(1, dims, PyArray_INT);
                CHK_NULL(rv);
                for (int i=0; i < length; i++)
                    IND1(rv,i,int) = ((short *)value)[i];
                return PyArray_Return(rv);
            case 'i':
                RET_IA(H_INT,PyInt_FromLong,long,int,PyArray_INT);
            case 'r':
                RET_IA(H_REAL,PyFloat_FromDouble,double,float,PyArray_FLOAT);
            case 'd':
                RET_IA(H_DBLE,PyFloat_FromDouble,double,double,PyArray_DOUBLE);
            case 'c':
                if (length == 1) {
                    uvgetvr_c(self->tno,H_CMPLX,name,value,length);
                    return PyComplex_FromDoubles(((double *)value)[0], 
                                                 ((double *)value)[1]);
                }
                rv = (PyArrayObject *) PyArray_SimpleNew(1,dims,PyArray_CDOUBLE);
                CHK_NULL(rv);
                uvgetvr_c(self->tno,H_CMPLX,name,(char *)rv->data,length);
                return PyArray_Return(rv);
            default:
                PyErr_Format(PyExc_ValueError,"unknown var type: %c",type[0]);
                return NULL;
        }
    } catch (MiriadError &e) {
        PyErr_Format(PyExc_RuntimeError, e.get_message());
        return NULL;
    }
}
示例#13
0
文件: copyToList.c 项目: rrjudd/jvsip
PyObject *cmcopyToListByCol_d(vsip_cmview_d *v){
    PyObject *cval;
    vsip_length M = vsip_cmgetcollength_d(v);
    vsip_length N = vsip_cmgetrowlength_d(v);
    PyObject *retval = PyList_New(M);
    vsip_index i,j;
    for(j=0; j<N; j++){
        PyObject *col = PyList_New(M);
        for(i=0; i<M; i++){
           vsip_cscalar_d x = vsip_cmget_d(v,i,j);
           double re = (double)x.r;
           double im = (double)x.i;
           cval = PyComplex_FromDoubles(re,im);
           PyList_SetItem(col,i,cval);
        }
        PyList_SetItem(retval,j,col);
    }
    return retval;
}
示例#14
0
inline PyObject* pixel_to_python(ComplexPixel px) {
  return PyComplex_FromDoubles(px.real(), px.imag());
}
示例#15
0
//---------------------------------------------------------------------------
PyObject* ToPyObject(const Func32::TComplex &Value)
{
	return Value.imag() ? PyComplex_FromDoubles(Value.real(), Value.imag()) : PyFloat_FromDouble(Value.real());
}
示例#16
0
static int int2_coerce(PyObject **pv, PyObject **pw)
{
	if (PgInt2_Check(*pv))
	{
		if (PyInt_Check(*pw))
		{
			*pv = Py_BuildValue("h", PgInt2_AS_INT2(*pv));
			Py_INCREF(*pw);
		}
#if defined(HAVE_LONG_LONG_SUPPORT)
		else if (PgInt8_Check(*pw))
		{
			*pv = (PyObject *)PgInt8_FromLong((long)PgInt2_AS_INT2(*pv));
			Py_INCREF(*pw);
		}
#endif
		else if (PyLong_Check(*pw))
		{
			*pv = (PyObject *)PyLong_FromLong((long)PgInt2_AS_INT2(*pv));
			Py_INCREF(*pw);
		}
		else if (PyFloat_Check(*pw))
		{
		  *pv = Py_BuildValue("d", (double)PgInt2_AS_INT2(*pv));
			Py_INCREF(*pw);
		}
		else if (PyComplex_Check(*pw))
		{
			*pv = (PyObject *)PyComplex_FromDoubles(
									(double)PgInt2_AS_INT2(*pv), (double)0);
			Py_INCREF(*pw);
		}
		else
			return 1;

		return 0;
	}
	else if (PgInt2_Check(*pw)) {
		if (PyInt_Check(*pv))
		{
			*pw = Py_BuildValue("h", PgInt2_AS_INT2(*pw));
			Py_INCREF(*pv);
		}
#if defined(HAVE_LONG_LONG_SUPPORT)
		else if (PgInt8_Check(*pv))
		{
			*pw = (PyObject *)PgInt8_FromLong((long)PgInt2_AS_INT2(*pw));
			Py_INCREF(*pv);
		}
#endif
		else if (PyLong_Check(*pv))
		{
			*pw = (PyObject *)PyLong_FromLong((long)PgInt2_AS_INT2(*pw));
			Py_INCREF(*pw);
		}
		else if (PyFloat_Check(*pv))
		{
		  *pw = Py_BuildValue("d", (double)PgInt2_AS_INT2(*pw));
			Py_INCREF(*pw);
		}
		else if (PyComplex_Check(*pv))
		{
			*pw = (PyObject *)PyComplex_FromDoubles(
									(double)PgInt2_AS_INT2(*pw), (double)0);
			Py_INCREF(*pv);
		}
		else
			return 1;

		return 0;
	}

	return 1; /* Can't do it */
}
示例#17
0
/* NOTE: R vectors of length 1 will yield a python list of length 1*/
int
to_Pyobj_vector(SEXP robj, PyObject **obj, int mode)
{
  PyObject *it, *tmp;
  SEXP names, dim;
  int len, *integers, i, type;
  const char *strings, *thislevel;
  double *reals;
  Rcomplex *complexes;
#ifdef WITH_NUMERIC
  PyObject *array;
#endif

  if (!robj)
    {
    // return -1;                  /* error */
    // if(my_callback){
        // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "robj does not exist"));
        // PyObject_CallObject(my_callback, argslist);
    // }
    return 1;
    }
  if (robj == R_NilValue) {
    Py_INCREF(Py_None);
    *obj = Py_None;
    return 1;                   /* succeed */
  }

  len = GET_LENGTH(robj);
  tmp = PyList_New(len);
  type = TYPEOF(robj);

    // if(my_callback){
        // argslist = Py_BuildValue("(O)", Py_BuildValue("(si)", "robj length is ", len));
        // PyObject_CallObject(my_callback, argslist);
    // }
    
  /// break for checking the R length and other aspects
  for (i=0; i<len; i++) {
    switch (type)
      {
      case LGLSXP:
            // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "In LGLSXP"));
                // PyObject_CallObject(my_callback, argslist);
            // }
         integers = INTEGER(robj);
         if(integers[i]==NA_INTEGER) /* watch out for NA's */
           {
             if (!(it = PyInt_FromLong(integers[i])))
             //return -1;
             tmp = Py_BuildValue("s", "failed in the PyInt_FromLong");  // we are at least getting an robj
             *obj = tmp;
             return 1;
             //it = Py_None;
           }
         else if (!(it = PyBool_FromLong(integers[i])))
            {
            tmp = Py_BuildValue("s", "failed in the PyBool_FromLong");  // we are at least getting an robj
             *obj = tmp;
             return 1;
           //return -1;
           }
         break;
      case INTSXP:
            // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "In INTSXP"));
                // PyObject_CallObject(my_callback, argslist);
            // }
        integers = INTEGER(robj);
        if(isFactor(robj)) {
          /* Watch for NA's! */
          if(integers[i]==NA_INTEGER)
            it = PyString_FromString(CHAR(NA_STRING));
          else
            {
              thislevel = CHAR(STRING_ELT(GET_LEVELS(robj), integers[i]-1));
              if (!(it = PyString_FromString(thislevel)))
                {
                tmp = Py_BuildValue("s", "failed in the PyString_FromString");  // we are at least getting an robj
                *obj = tmp;
                return 1;
                }
                //return -1;
            }
        }
        else {
          if (!(it = PyInt_FromLong(integers[i])))
            {
            tmp = Py_BuildValue("s", "failed in the PyInt_FromLong");  // we are at least getting an robj
                *obj = tmp;
                return 1;
            //return -1;
            }
        }
        break;
      case REALSXP:
            // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "In REALSXP"));
                // PyObject_CallObject(my_callback, argslist);
            // }
        reals = REAL(robj);
        if (!(it = PyFloat_FromDouble(reals[i])))
        {
        // tmp = Py_BuildValue("s", "failed in the PyFloat_FromDouble");  // we are at least getting an robj
                // *obj = tmp;
                // return 1;
         return -1;
        }
        break;
      case CPLXSXP:
            // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "In CPLXSXP"));
                // PyObject_CallObject(my_callback, argslist);
            // }
        complexes = COMPLEX(robj);
        if (!(it = PyComplex_FromDoubles(complexes[i].r,
                                         complexes[i].i)))
          {
            
            // tmp = Py_BuildValue("s", "failed in PyComplex_FromDoubles!!!");  // we are at least getting an robj
            // *obj = tmp;
            // return 1;
            return -1;
            }
        break;
      case STRSXP:
            // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "In STRSXP"));
                // PyObject_CallObject(my_callback, argslist);
            // }
        if(STRING_ELT(robj, i)==R_NaString)
          it = PyString_FromString(CHAR(NA_STRING));
        else
          {
            strings = CHAR(STRING_ELT(robj, i));
            if (!(it = PyString_FromString(strings)))
              {
            
                // tmp = Py_BuildValue("s", "failed in PyString_FromString!!!");  // we are at least getting an robj
                // *obj = tmp;
                // return 1;
                return -1;
                }
          }
        break;
      case LISTSXP:
            // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "In LISTSXP"));
                // PyObject_CallObject(my_callback, argslist);
            // }
        if (!(it = to_Pyobj_with_mode(elt(robj, i), mode)))
            {
            
            // tmp = Py_BuildValue("s", "failed in to_Pyobj_with_mode LISTSXP!!!");  // we are at least getting an robj
            // *obj = tmp;
            // return 1;
            return -1;
            }
        break;
      case VECSXP:
            // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "In VECSXP"));
                // PyObject_CallObject(my_callback, argslist);
            // }
        if (!(it = to_Pyobj_with_mode(VECTOR_ELT(robj, i), mode)))
            {
            return -1;
            }
        break;
      default:
        Py_DECREF(tmp);
        return 0;                 /* failed */
    }
    
    if (PyList_SetItem(tmp, i, it) < 0) // there was a failure in setting the item
            {
            
            // tmp = Py_BuildValue("s", "failed in PyList_SetItem!!!");  // we are at least getting an robj
            // *obj = tmp;
            // return 1;
            return -1;
            }
  }

  dim = GET_DIM(robj);
  if (dim != R_NilValue) {
// #ifdef WITH_NUMERIC
    // if(use_numeric)
      // {
        // array = to_PyNumericArray(tmp, dim);
        // if (array) {                /* If the conversion to Numeric succeed.. */
          // *obj = array;             /* we are done */
          // Py_DECREF(tmp);
          // return 1;
        // }
        // PyErr_Clear();
      // }
// #endif
    len = GET_LENGTH(dim);
    *obj = to_PyArray(tmp, INTEGER(dim), len);
    Py_DECREF(tmp);
    return 1;
  }
    // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(O)", tmp));
                // PyObject_CallObject(my_callback, argslist);
            // }
  names = GET_NAMES(robj);
  if (names == R_NilValue)
    {
    *obj = tmp;
        // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "returning as list (of lists)"));
                // PyObject_CallObject(my_callback, argslist);
            // }
    }
  else {
    *obj = to_PyDict(tmp, names);
        // if(my_callback){
                // argslist = Py_BuildValue("(O)", Py_BuildValue("(s)", "returning as dict"));
                // PyObject_CallObject(my_callback, argslist);
            // }
    Py_DECREF(tmp);
  }
  return 1;
}
示例#18
0
 static PyObject *c2py(std::complex<double> x) { return PyComplex_FromDoubles(x.real(), x.imag()); }
示例#19
0
template<> PyObject *__to_py(complex c) {
    return PyComplex_FromDoubles(c.real, c.imag);
}