static PyObject * get_symmetry(PyObject *self, PyObject *args) { int i, j, k; double symprec, angle_tolerance; PyArrayObject* lattice; PyArrayObject* position; PyArrayObject* rotation; PyArrayObject* translation; PyArrayObject* atom_type; if (!PyArg_ParseTuple(args, "OOOOOdd", &rotation, &translation, &lattice, &position, &atom_type, &symprec, &angle_tolerance)) { return NULL; } SPGCONST double (*lat)[3] = (double(*)[3])lattice->data; SPGCONST double (*pos)[3] = (double(*)[3])position->data; const long* types_long = (long*)atom_type->data; const int num_atom = position->dimensions[0]; long *rot_long = (long*)rotation->data; double (*trans)[3] = (double(*)[3])translation->data; const int num_sym_from_array_size = rotation->dimensions[0]; int rot[num_sym_from_array_size][3][3]; int types[num_atom]; for (i = 0; i < num_atom; i++) { types[i] = (int)types_long[i]; } /* num_sym has to be larger than num_sym_from_array_size. */ const int num_sym = spgat_get_symmetry(rot, trans, num_sym_from_array_size, lat, pos, types, num_atom, symprec, angle_tolerance); for (i = 0; i < num_sym; i++) { for (j = 0; j < 3; j++) { for (k = 0; k < 3; k++) { rot_long[i*9+j*3+k] = (long)rot[i][j][k]; } } } return PyInt_FromLong((long) num_sym); }
static PyObject * get_symmetry(PyObject *self, PyObject *args) { double symprec, angle_tolerance; PyArrayObject* lattice; PyArrayObject* position; PyArrayObject* rotation; PyArrayObject* translation; PyArrayObject* atom_type; if (!PyArg_ParseTuple(args, "OOOOOdd", &rotation, &translation, &lattice, &position, &atom_type, &symprec, &angle_tolerance)) { return NULL; } SPGCONST double (*lat)[3] = (double(*)[3])PyArray_DATA(lattice); SPGCONST double (*pos)[3] = (double(*)[3])PyArray_DATA(position); const int* types = (int*)PyArray_DATA(atom_type); const int num_atom = PyArray_DIMS(position)[0]; int (*rot)[3][3] = (int(*)[3][3])PyArray_DATA(rotation); double (*trans)[3] = (double(*)[3])PyArray_DATA(translation); const int num_sym_from_array_size = PyArray_DIMS(rotation)[0]; /* num_sym has to be larger than num_sym_from_array_size. */ const int num_sym = spgat_get_symmetry(rot, trans, num_sym_from_array_size, lat, pos, types, num_atom, symprec, angle_tolerance); return PyLong_FromLong((long) num_sym); }