static PyObject*
multinomial(PyObject* self, PyObject* args) {
  int n=-1, i;
  long num_trials, num_categories;
  char* out_ptr;
  PyArrayObject* priors_array;
  PyObject* priors_object;
  PyArrayObject* op;
  int out_dimensions[2];

  if( !PyArg_ParseTuple(args, "lO|i", &num_trials, &priors_object, &n) ) {
    return NULL;
  }
  priors_array = (PyArrayObject*) PyArray_ContiguousFromObject(priors_object, PyArray_FLOAT, 1, 1);
  if( priors_array == NULL ) {
    return NULL;
  }
  num_categories = priors_array->dimensions[0]+1;
  if( n==-1 ) {
    n = 1;
  }

  /* Create an n by num_categories array of long */
  out_dimensions[0] = n;
  out_dimensions[1] = num_categories;
  op = (PyArrayObject*) PyArray_FromDims(2, out_dimensions, PyArray_LONG);
  if( op == NULL ) {
    return NULL;
  }

  out_ptr = op->data;
  for(i=0; i<n; i++) {
    genmul(num_trials, (float*)(priors_array->data), num_categories, (long*) out_ptr);
    out_ptr += op->strides[0];
  }

  return PyArray_Return(op);
}
Exemple #2
0
int genbinop(int op, int p1, int p2)
{

    binopchk(op, p1, p2);

    switch (op)
    {

    case PLUS:
        return genadd(p1, p2, 1);

    case MINUS:
        return gensub(p1, p2, 1);

    case STAR:
        genmul();

        break;

    case SLASH:
        gendiv(1);

        break;

    case MOD:
        genmod(1);

        break;

    case LSHIFT:
        genshl(1);

        break;

    case RSHIFT:
        genshr(1);

        break;

    case AMPER:
        genand();

        break;

    case CARET:
        genxor();

        break;

    case PIPE:
        genior();

        break;

    case EQUAL:
        queue_cmp(equal);

        break;

    case NOTEQ:
        queue_cmp(not_equal);

        break;

    case LESS:
        queue_cmp(less);

        break;

    case GREATER:
        queue_cmp(greater);

        break;

    case LTEQ:
        queue_cmp(less_equal);

        break;

    case GTEQ:
        queue_cmp(greater_equal);

        break;

    }

    return PINT;

}
Exemple #3
0
void genasop(int op, int p1, int p2, int swapped)
{

    binopchk(op, p1, p2);

    switch (op)
    {

    case ASDIV:
        gendiv(swapped);

        break;

    case ASMUL:
        genmul();

        break;

    case ASMOD:
        genmod(swapped);

        break;

    case ASPLUS:
        genadd(p1, p2, swapped);

        break;

    case ASMINUS:
        gensub(p1, p2, swapped);

        break;

    case ASLSHIFT:
        genshl(swapped);

        break;

    case ASRSHIFT:
        genshr(swapped);

        break;

    case ASAND:
        genand();

        break;

    case ASXOR:
        genxor();

        break;

    case ASOR:
        genior();

        break;

    }

}