Skip to content

Commit 6d9b596

Browse files
committed
Merge pull request #39 from rajithv/complex
Complex class
2 parents 745b4e4 + 5802cf7 commit 6d9b596

19 files changed

+222
-49
lines changed

ext/symengine/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ set(RUBY_WRAPPER_SRC
22
ruby_basic.c
33
ruby_symbol.c
44
ruby_integer.c
5-
ruby_rational.c
5+
ruby_complex.c
66
ruby_constant.c
77
ruby_function.c
88
ruby_ntheory.c
9+
ruby_utils.c
910
symengine_utils.c
1011
symengine.c
1112
)

ext/symengine/ruby_complex.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#include "ruby_complex.h"
2+
3+
VALUE ccomplex_real_part(VALUE self) {
4+
return function_onearg(complex_real_part, self);
5+
}
6+
7+
VALUE ccomplex_imaginary_part(VALUE self) {
8+
return function_onearg(complex_imaginary_part, self);
9+
}

ext/symengine/ruby_complex.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#ifndef RUBY_COMPLEX_H_
2+
#define RUBY_COMPLEX_H_
3+
4+
#include <ruby.h>
5+
#include <symengine/cwrapper.h>
6+
7+
#include "symengine.h"
8+
#include "symengine_utils.h"
9+
10+
VALUE ccomplex_real_part(VALUE self);
11+
VALUE ccomplex_imaginary_part(VALUE self);
12+
13+
#endif //RUBY_COMPLEX_H_

ext/symengine/ruby_constant.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
#include "ruby_constant.h"
22

3-
VALUE cconstant_const(void (*cwfunc_ptr)(basic_struct*)) {
3+
VALUE cconstant_const(void (*cwfunc_ptr)(basic_struct*), VALUE klass) {
44
basic_struct *cresult;
55
VALUE result;
66

77
cresult = basic_new_heap();
88
cwfunc_ptr(cresult);
99

10-
result = Data_Wrap_Struct(c_constant, NULL, cbasic_free_heap, cresult);
10+
result = Data_Wrap_Struct(klass, NULL, cbasic_free_heap, cresult);
1111
return result;
1212
}
1313

1414
VALUE cconstant_pi() {
15-
return cconstant_const(basic_const_pi);
15+
return cconstant_const(basic_const_pi, c_constant);
1616
}
1717

1818
VALUE cconstant_e() {
19-
return cconstant_const(basic_const_E);
19+
return cconstant_const(basic_const_E, c_constant);
2020
}
2121

2222
VALUE cconstant_euler_gamma() {
23-
return cconstant_const(basic_const_EulerGamma);
23+
return cconstant_const(basic_const_EulerGamma, c_constant);
24+
}
25+
26+
VALUE cconstant_i() {
27+
return cconstant_const(basic_const_I, c_complex);
2428
}

ext/symengine/ruby_constant.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
#include "symengine.h"
88
#include "symengine_utils.h"
99

10-
VALUE cconstant_const(void (*cwfunc_ptr)(basic_struct*));
10+
VALUE cconstant_const(void (*cwfunc_ptr)(basic_struct*), VALUE klass);
1111

1212
VALUE cconstant_pi();
1313

1414
VALUE cconstant_e();
1515

1616
VALUE cconstant_euler_gamma();
1717

18+
VALUE cconstant_i();
19+
1820
#endif //RUBY_CONSTANTS_H_

ext/symengine/ruby_rational.c

Lines changed: 0 additions & 23 deletions
This file was deleted.

ext/symengine/ruby_rational.h

Lines changed: 0 additions & 8 deletions
This file was deleted.

ext/symengine/ruby_utils.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include "ruby_utils.h"
2+
3+
VALUE cutils_sympify(VALUE self, VALUE operand) {
4+
5+
VALUE result;
6+
7+
basic_struct *cbasic_operand;
8+
cbasic_operand = basic_new_heap();
9+
10+
sympify(operand, cbasic_operand);
11+
result = Data_Wrap_Struct(Klass_of_Basic(cbasic_operand), NULL , cbasic_free_heap, cbasic_operand);
12+
13+
return result;
14+
}
15+

ext/symengine/ruby_utils.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#ifndef RUBY_UTILS_H_
2+
#define RUBY_UTILS_H_
3+
4+
#include "symengine_utils.h"
5+
6+
//Returns the Ruby Value after going through sympify
7+
VALUE cutils_sympify(VALUE self, VALUE operand);
8+
9+
#endif //RUBY_UTILS_H_

ext/symengine/symengine.c

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
#include "ruby_basic.h"
33
#include "ruby_symbol.h"
44
#include "ruby_integer.h"
5-
#include "ruby_rational.h"
65
#include "ruby_constant.h"
6+
#include "ruby_complex.h"
77
#include "ruby_function.h"
88
#include "ruby_ntheory.h"
9+
#include "ruby_utils.h"
10+
#include "symengine_utils.h"
911
#include "symengine.h"
1012

1113
///////////////////
@@ -20,6 +22,7 @@ VALUE msymengine_ascii_art(VALUE self) {
2022
}
2123

2224
void Init_symengine() {
25+
2326
m_symengine = rb_define_module("SymEngine");
2427
rb_define_singleton_method(m_symengine, "ascii_art", msymengine_ascii_art, 0);
2528

@@ -44,6 +47,10 @@ void Init_symengine() {
4447
rb_define_method(c_basic, "subs", cbasic_subs, -1);
4548
rb_define_method(c_basic, "coerce", cbasic_coerce, 1);
4649

50+
//Sympify as a Module Level Function
51+
rb_define_module_function(m_symengine, "convert", cutils_sympify, 1);
52+
rb_define_global_function("SymEngine", cutils_sympify, 1);
53+
4754
//Symbol class
4855
c_symbol = rb_define_class_under(m_symengine, "Symbol", c_basic);
4956
rb_define_alloc_func(c_symbol, cbasic_alloc);
@@ -58,7 +65,16 @@ void Init_symengine() {
5865
//Rational class
5966
c_rational = rb_define_class_under(m_symengine, "Rational", c_basic);
6067
rb_define_alloc_func(c_rational, cbasic_alloc);
61-
rb_define_method(c_rational, "initialize", crational_init, 1);
68+
69+
//Complex class
70+
c_complex = rb_define_class_under(m_symengine, "Complex", c_basic);
71+
rb_define_alloc_func(c_complex, cbasic_alloc);
72+
rb_define_method(c_complex, "real", ccomplex_real_part, 0);
73+
rb_define_method(c_complex, "imaginary", ccomplex_imaginary_part, 0);
74+
75+
//ComplexDouble class
76+
c_complex_double = rb_define_class_under(m_symengine, "ComplexDouble", c_basic);
77+
rb_define_alloc_func(c_complex_double, cbasic_alloc);
6278

6379
//Constant class
6480
c_constant = rb_define_class_under(m_symengine, "Constant", c_basic);
@@ -67,6 +83,7 @@ void Init_symengine() {
6783
rb_define_const(m_symengine, "PI", cconstant_pi());
6884
rb_define_const(m_symengine, "E", cconstant_e());
6985
rb_define_const(m_symengine, "EULER_GAMMA", cconstant_euler_gamma());
86+
rb_define_const(m_symengine, "I", cconstant_i());
7087

7188
//Add class
7289
c_add = rb_define_class_under(m_symengine, "Add", c_basic);

0 commit comments

Comments
 (0)