Skip to content

Commit bc6c130

Browse files
committed
equal and not equal operators for DenseMatrix
1 parent 7f4c24d commit bc6c130

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

ext/symengine/ruby_matrix.c

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,55 @@ VALUE cmatrix_dense_mul(VALUE self, VALUE operand)
404404
return result;
405405
}
406406

407+
VALUE cmatrix_dense_eq(VALUE self, VALUE operand)
408+
{
409+
CDenseMatrix *this;
410+
Data_Get_Struct(self, CDenseMatrix, this);
411+
412+
CDenseMatrix *cresult;
413+
VALUE result;
414+
415+
cresult = dense_matrix_new();
416+
417+
char *s = rb_obj_classname(operand);
418+
419+
if(strcmp(s, "SymEngine::DenseMatrix") == 0) {
420+
CDenseMatrix *coperand;
421+
Data_Get_Struct(operand, CDenseMatrix, coperand);
422+
423+
result = dense_matrix_eq(this, coperand) == 1 ? Qtrue : Qfalse;
424+
425+
dense_matrix_free(coperand);
426+
} else {
427+
result = Qfalse;
428+
}
429+
return result;
430+
}
431+
432+
VALUE cmatrix_dense_neq(VALUE self, VALUE operand)
433+
{
434+
CDenseMatrix *this;
435+
Data_Get_Struct(self, CDenseMatrix, this);
436+
437+
CDenseMatrix *cresult;
438+
VALUE result;
439+
440+
cresult = dense_matrix_new();
441+
442+
char *s = rb_obj_classname(operand);
443+
444+
if(strcmp(s, "SymEngine::DenseMatrix") == 0) {
445+
CDenseMatrix *coperand;
446+
Data_Get_Struct(operand, CDenseMatrix, coperand);
447+
448+
result = dense_matrix_eq(this, coperand) == 1 ? Qfalse : Qtrue;
449+
450+
dense_matrix_free(coperand);
451+
} else {
452+
result = Qtrue;
453+
}
454+
return result;
455+
}
407456

408457
VALUE cmatrix_dense_LU(VALUE self)
409458
{

ext/symengine/ruby_matrix.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ VALUE cmatrix_dense_rows(VALUE self);
2222
VALUE cmatrix_dense_cols(VALUE self);
2323
VALUE cmatrix_dense_add(VALUE self, VALUE operand);
2424
VALUE cmatrix_dense_mul(VALUE self, VALUE operand);
25+
VALUE cmatrix_dense_eq(VALUE self, VALUE operand);
26+
VALUE cmatrix_dense_neq(VALUE self, VALUE operand);
2527
VALUE cmatrix_dense_LU(VALUE self);
2628
VALUE cmatrix_dense_LDL(VALUE self);
2729
VALUE cmatrix_dense_LU_solve(VALUE self, VALUE b);

ext/symengine/symengine.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@ void Init_symengine()
247247
rb_define_method(c_dense_matrix, "cols", cmatrix_dense_cols, 0);
248248
rb_define_method(c_dense_matrix, "+", cmatrix_dense_add, 1);
249249
rb_define_method(c_dense_matrix, "*", cmatrix_dense_mul, 1);
250+
rb_define_method(c_dense_matrix, "==", cmatrix_dense_eq, 1);
251+
rb_define_method(c_dense_matrix, "eql?", cmatrix_dense_eq, 1);
252+
rb_define_method(c_dense_matrix, "!=", cmatrix_dense_neq, 1);
250253
rb_define_method(c_dense_matrix, "LU", cmatrix_dense_LU, 0);
251254
rb_define_method(c_dense_matrix, "LDL", cmatrix_dense_LDL, 0);
252255
rb_define_method(c_dense_matrix, "LU_solve", cmatrix_dense_LU_solve, 1);

0 commit comments

Comments
 (0)