Skip to content
This repository was archived by the owner on Feb 18, 2020. It is now read-only.

Commit 27edac9

Browse files
count() and compare "==" capabilities for CArrays
1 parent f9f4e9a commit 27edac9

File tree

1 file changed

+103
-3
lines changed

1 file changed

+103
-3
lines changed

phpsci.c

Lines changed: 103 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1062,6 +1062,13 @@ PHP_METHOD(CArray, det)
10621062
RETURN_MEMORYPOINTER(return_value, &rtn_ptr);
10631063
}
10641064
}
1065+
PHP_METHOD(CArray, matrix_rank)
1066+
{
1067+
zval * a;
1068+
ZEND_PARSE_PARAMETERS_START(1, 1)
1069+
Z_PARAM_ZVAL(a)
1070+
ZEND_PARSE_PARAMETERS_END();
1071+
}
10651072
PHP_METHOD(CArray, vdot)
10661073
{
10671074
MemoryPointer a_ptr, b_ptr, rtn_ptr;
@@ -1088,6 +1095,34 @@ PHP_METHOD(CArray, vdot)
10881095

10891096
RETURN_MEMORYPOINTER(return_value, &rtn_ptr);
10901097
}
1098+
PHP_METHOD(CArray, inner)
1099+
{
1100+
zval * a;
1101+
ZEND_PARSE_PARAMETERS_START(1, 1)
1102+
Z_PARAM_ZVAL(a)
1103+
ZEND_PARSE_PARAMETERS_END();
1104+
}
1105+
PHP_METHOD(CArray, outer)
1106+
{
1107+
zval * a;
1108+
ZEND_PARSE_PARAMETERS_START(1, 1)
1109+
Z_PARAM_ZVAL(a)
1110+
ZEND_PARSE_PARAMETERS_END();
1111+
}
1112+
PHP_METHOD(CArray, eig)
1113+
{
1114+
zval * a;
1115+
ZEND_PARSE_PARAMETERS_START(1, 1)
1116+
Z_PARAM_ZVAL(a)
1117+
ZEND_PARSE_PARAMETERS_END();
1118+
}
1119+
PHP_METHOD(CArray, eigvals)
1120+
{
1121+
zval * a;
1122+
ZEND_PARSE_PARAMETERS_START(1, 1)
1123+
Z_PARAM_ZVAL(a)
1124+
ZEND_PARSE_PARAMETERS_END();
1125+
}
10911126
PHP_METHOD(CArray, svd)
10921127
{
10931128
int full_matrices_int = 1, compute_uv_int = 1, i = 0;
@@ -1137,6 +1172,23 @@ PHP_METHOD(CArray, svd)
11371172
efree(out_ptr);
11381173
efree(rtn);
11391174
}
1175+
PHP_METHOD(CArray, qr)
1176+
{
1177+
zval * a;
1178+
ZEND_PARSE_PARAMETERS_START(1, 1)
1179+
Z_PARAM_ZVAL(a)
1180+
ZEND_PARSE_PARAMETERS_END();
1181+
1182+
1183+
}
1184+
PHP_METHOD(CArray, cholesky)
1185+
{
1186+
zval * a;
1187+
ZEND_PARSE_PARAMETERS_START(1, 1)
1188+
Z_PARAM_ZVAL(a)
1189+
ZEND_PARSE_PARAMETERS_END();
1190+
1191+
}
11401192

11411193

11421194

@@ -2556,12 +2608,23 @@ static zend_function_entry carray_class_methods[] =
25562608
// LINEAR ALGEBRA
25572609
PHP_ME(CArray, matmul, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
25582610
PHP_ME(CArray, inv, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2611+
PHP_ME(CArray, vdot, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2612+
PHP_ME(CArray, inner, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2613+
PHP_ME(CArray, outer, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2614+
2615+
// EIGNVALUES
2616+
PHP_ME(CArray, eig, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2617+
PHP_ME(CArray, eigvals, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2618+
2619+
// NORMS
25592620
PHP_ME(CArray, norm, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
25602621
PHP_ME(CArray, det, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2561-
PHP_ME(CArray, vdot, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2622+
PHP_ME(CArray, matrix_rank, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
25622623

25632624
// DECOMPOSITIONS
25642625
PHP_ME(CArray, svd, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2626+
PHP_ME(CArray, cholesky, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
2627+
PHP_ME(CArray, qr, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
25652628

25662629
// ARITHMETIC
25672630
PHP_ME(CArray, add, NULL, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
@@ -2701,6 +2764,36 @@ static int carray_do_operation_ex(zend_uchar opcode, zval *result, zval *op1, zv
27012764
}
27022765
}
27032766

2767+
static int carray_compare(zval *object1, zval *object2 TSRMLS_DC) /* {{{ */
2768+
{
2769+
CArray *a, *b;
2770+
MemoryPointer ptr1, ptr2;
2771+
ZVAL_TO_MEMORYPOINTER(object1, &ptr1, NULL);
2772+
ZVAL_TO_MEMORYPOINTER(object2, &ptr2, NULL);
2773+
2774+
a = CArray_FromMemoryPointer(&ptr1);
2775+
b = CArray_FromMemoryPointer(&ptr2);
2776+
2777+
if (CArray_DATA(a) == CArray_DATA(b)) {
2778+
return SUCCESS;
2779+
}
2780+
return FAILURE;
2781+
}
2782+
2783+
int
2784+
carray_count(zval *object, long *count TSRMLS_DC) {
2785+
MemoryPointer ptr;
2786+
CArray * target;
2787+
ZVAL_TO_MEMORYPOINTER(object, &ptr, NULL);
2788+
target = CArray_FromMemoryPointer(&ptr);
2789+
if (CArray_NDIM(target) > 0) {
2790+
*count = (long)CArray_DIMS(target)[0];
2791+
} else {
2792+
*count = (long)1;
2793+
}
2794+
return SUCCESS;
2795+
}
2796+
27042797
static int carray_do_operation(zend_uchar opcode, zval *result, zval *op1, zval *op2) /* {{{ */
27052798
{
27062799
zval op1_copy;
@@ -2720,6 +2813,12 @@ static int carray_do_operation(zend_uchar opcode, zval *result, zval *op1, zval
27202813
return retval;
27212814
}
27222815

2816+
static int
2817+
carray_cast(zval *readobj, zval *retval, int type) {
2818+
throw_valueerror_exception("Use astype() for casting");
2819+
return FAILURE;
2820+
}
2821+
27232822
/**
27242823
* MINIT
27252824
*/
@@ -2730,10 +2829,11 @@ static PHP_MINIT_FUNCTION(carray)
27302829
carray_sc_entry = zend_register_internal_class(&ce);
27312830
carray_sc_entry->create_object = carray_create_object;
27322831

2733-
27342832
memcpy(&carray_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
27352833
carray_object_handlers.do_operation = carray_do_operation;
2736-
2834+
carray_object_handlers.compare_objects = carray_compare;
2835+
carray_object_handlers.cast_object = carray_cast;
2836+
carray_object_handlers.count_elements = carray_count;
27372837

27382838
zend_class_implements(carray_sc_entry, 1, zend_ce_arrayaccess);
27392839

0 commit comments

Comments
 (0)