Skip to content

Commit 423259b

Browse files
committed
* operator for DenseMatrix
1 parent ad72687 commit 423259b

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

ext/symengine/ruby_matrix.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,3 +360,40 @@ VALUE cmatrix_dense_add(VALUE self, VALUE operand)
360360

361361
return result;
362362
}
363+
364+
VALUE cmatrix_dense_mul(VALUE self, VALUE operand)
365+
{
366+
CDenseMatrix *this;
367+
Data_Get_Struct(self, CDenseMatrix, this);
368+
369+
CDenseMatrix *cresult;
370+
VALUE result;
371+
372+
cresult = dense_matrix_new();
373+
374+
char *s = rb_obj_classname(operand);
375+
376+
if(strcmp(s, "SymEngine::DenseMatrix") == 0) {
377+
// Matrix Multiplication
378+
CDenseMatrix *coperand;
379+
Data_Get_Struct(operand, CDenseMatrix, coperand);
380+
381+
dense_matrix_mul_matrix(cresult, this, coperand);
382+
383+
result = Data_Wrap_Struct(c_dense_matrix, NULL, dense_matrix_free,
384+
cresult);
385+
386+
dense_matrix_free(coperand);
387+
} else {
388+
// Scalar Multiplication
389+
basic_struct *coperand = basic_new_heap();
390+
sympify(operand, coperand);
391+
392+
dense_matrix_mul_scalar(cresult, this, coperand);
393+
result = Data_Wrap_Struct(c_dense_matrix, NULL, dense_matrix_free,
394+
cresult);
395+
basic_free_heap(coperand);
396+
}
397+
398+
return result;
399+
}

ext/symengine/symengine.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ void Init_symengine()
246246
rb_define_method(c_dense_matrix, "rows", cmatrix_dense_rows, 0);
247247
rb_define_method(c_dense_matrix, "cols", cmatrix_dense_cols, 0);
248248
rb_define_method(c_dense_matrix, "+", cmatrix_dense_add, 1);
249-
//rb_define_method(c_dense_matrix, "*", cmatrix_dense_mul, 1);
249+
rb_define_method(c_dense_matrix, "*", cmatrix_dense_mul, 1);
250250

251251

252252
// SparseMatrix Methods

0 commit comments

Comments
 (0)