ruby-mpfi 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +62 -0
  3. data/PostInstall.txt +7 -0
  4. data/README.rdoc +48 -0
  5. data/Rakefile +26 -0
  6. data/ext/mpfi/extconf.rb +10 -0
  7. data/ext/mpfi/func_mpfi_extention.c +52 -0
  8. data/ext/mpfi/func_mpfi_extention.h +2 -0
  9. data/ext/mpfi/make_c_source.rb +115 -0
  10. data/ext/mpfi/ruby_mpfi.c +1452 -0
  11. data/ext/mpfi/ruby_mpfi.h +39 -0
  12. data/ext/mpfi/ruby_mpfr.h +38 -0
  13. data/ext/mpfi/yasnippet_mpfi.el +44 -0
  14. data/ext/mpfi_complex/mpfi/extconf.rb +10 -0
  15. data/ext/mpfi_complex/mpfi/func_mpfi_extention.h +2 -0
  16. data/ext/mpfi_complex/mpfi/func_ruby_mpfi_complex.c +130 -0
  17. data/ext/mpfi_complex/mpfi/func_ruby_mpfi_complex.h +35 -0
  18. data/ext/mpfi_complex/mpfi/ruby_mpfi.h +39 -0
  19. data/ext/mpfi_complex/mpfi/ruby_mpfi_complex.c +217 -0
  20. data/ext/mpfi_complex/mpfi/ruby_mpfi_complex.h +15 -0
  21. data/ext/mpfi_complex/mpfi/ruby_mpfr.h +38 -0
  22. data/ext/mpfi_matrix/mpfi/extconf.rb +9 -0
  23. data/ext/mpfi_matrix/mpfi/func_mpfi_extention.h +2 -0
  24. data/ext/mpfi_matrix/mpfi/func_mpfi_matrix.c +795 -0
  25. data/ext/mpfi_matrix/mpfi/func_mpfi_matrix.h +103 -0
  26. data/ext/mpfi_matrix/mpfi/func_mpfr_matrix.h +72 -0
  27. data/ext/mpfi_matrix/mpfi/func_ruby_mpfi_complex.h +35 -0
  28. data/ext/mpfi_matrix/mpfi/ruby_mpfi.h +39 -0
  29. data/ext/mpfi_matrix/mpfi/ruby_mpfi_complex.h +15 -0
  30. data/ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.c +1200 -0
  31. data/ext/mpfi_matrix/mpfi/ruby_mpfi_matrix.h +13 -0
  32. data/ext/mpfi_matrix/mpfi/ruby_mpfr.h +38 -0
  33. data/ext/mpfi_matrix/mpfi/ruby_mpfr_matrix.h +13 -0
  34. data/lib/mpfi/matrix.rb +188 -0
  35. data/lib/mpfi/version.rb +3 -0
  36. data/ruby-mpfi.gemspec +35 -0
  37. data/script/console +10 -0
  38. data/script/destroy +14 -0
  39. data/script/generate +14 -0
  40. data/spec/mpfi/generate_number_module.rb +48 -0
  41. data/spec/mpfi/mpfi_alloc_spec.rb +55 -0
  42. data/spec/mpfi/mpfi_diam_arithmetic_spec.rb +25 -0
  43. data/spec/mpfi/mpfi_interval_arithmetic_spec.rb +105 -0
  44. data/spec/mpfi/mpfi_interval_functions_spec.rb +95 -0
  45. data/spec/mpfi/mpfi_math_functions_spec.rb +16 -0
  46. data/spec/mpfi/mpfi_set_operation_spec.rb +102 -0
  47. data/spec/mpfi/ruby-mpfi_spec.rb +11 -0
  48. data/spec/mpfi/spec_helper.rb +10 -0
  49. data/spec/mpfi_complex/spec_helper.rb +10 -0
  50. data/spec/mpfi_matrix/generate_matrix_arguments.rb +65 -0
  51. data/spec/mpfi_matrix/mpfi_matrix_alloc_spec.rb +134 -0
  52. data/spec/mpfi_matrix/mpfi_matrix_arithmetic_spec.rb +156 -0
  53. data/spec/mpfi_matrix/mpfi_matrix_interval_func_spec.rb +30 -0
  54. data/spec/mpfi_matrix/mpfi_matrix_set_element_spec.rb +55 -0
  55. data/spec/mpfi_matrix/mpfi_matrix_set_operation_spec.rb +71 -0
  56. data/spec/mpfi_matrix/mpfi_matrix_string_spec.rb +32 -0
  57. data/spec/mpfi_matrix/mpfi_matrix_subdivision_spec.rb +14 -0
  58. data/spec/mpfi_matrix/mpfi_square_matrix_spec.rb +37 -0
  59. data/spec/mpfi_matrix/mpfi_vector_spec.rb +15 -0
  60. data/spec/mpfi_matrix/spec_helper.rb +19 -0
  61. data/spec/spec.opts +1 -0
  62. data/tasks/extconf.rake +36 -0
  63. metadata +132 -0
@@ -0,0 +1,103 @@
1
+ #include <stdio.h>
2
+ #include <ruby.h>
3
+ #include <mpfr.h>
4
+ #include <mpfi.h>
5
+ #include <mpfi_io.h>
6
+ #include "ruby_mpfr_matrix.h"
7
+ #include "ruby_mpfi.h"
8
+ #include "ruby_mpfi_complex.h"
9
+
10
+ typedef struct __MPFIMatrix{
11
+ int row, column, size;
12
+ MPFI *data;
13
+ } MPFIMatrix;
14
+
15
+ /*
16
+ 1 2 3
17
+ 4 5 6
18
+
19
+ row = 2
20
+ column = 3
21
+ size = 6
22
+ MPFI *data 1 4 2 5 3 6
23
+
24
+ (i, j) element => data + i + row * j
25
+ 0 <= i < 2, 0 <= j < 3
26
+ */
27
+
28
+ #define r_mpfi_make_matrix_struct(ruby_var, mpfi_var) { ruby_var = Data_Make_Struct(r_mpfi_matrix, MPFIMatrix, 0, r_mpfi_matrix_free, mpfi_var); }
29
+ #define r_mpfi_get_matrix_struct(mpfi_var, ruby_var) { Data_Get_Struct(ruby_var, MPFIMatrix, mpfi_var); }
30
+
31
+ #define r_mpfi_make_square_matrix_struct(ruby_var, mpfi_var) { ruby_var = Data_Make_Struct(r_mpfi_square_matrix, MPFIMatrix, 0, r_mpfi_matrix_free, mpfi_var); }
32
+ #define r_mpfi_make_col_vector_struct(ruby_var, mpfi_var) { ruby_var = Data_Make_Struct(r_mpfi_col_vector, MPFIMatrix, 0, r_mpfi_matrix_free, mpfi_var); }
33
+ #define r_mpfi_make_row_vector_struct(ruby_var, mpfi_var) { ruby_var = Data_Make_Struct(r_mpfi_row_vector, MPFIMatrix, 0, r_mpfi_matrix_free, mpfi_var); }
34
+
35
+ #define r_mpfi_matrix_temp_alloc_init(mpfi_var, i, j) { mpfi_var = ALLOC_N(MPFIMatrix, 1); mpfi_matrix_init(mpfi_var, i, j); }
36
+ #define r_mpfi_matrix_temp_free(mpfi_var) { mpfi_matrix_clear(mpfi_var); free(mpfi_var); }
37
+
38
+ #define mpfi_matrix_get_ptr(matrix, i) (matrix->data + i)
39
+ #define mpfi_matrix_get_element(matrix, i, j) (matrix->data + i + matrix->row * j)
40
+
41
+
42
+ /* Returned value may be same pointer as an argument which has always same size. */
43
+ /* But if returned value may have different size from that of an argument */
44
+ /* (for example, mpfi_matrix_transpose), */
45
+ /* you must use differnt pointer for returned value from that of an argument. */
46
+
47
+ void mpfi_matrix_clear(MPFIMatrix *mat);
48
+ void mpfi_matrix_init(MPFIMatrix *mat, int row, int column);
49
+ void mpfi_matrix_set_zeros(MPFIMatrix *mat);
50
+ void mpfi_matrix_set_element(MPFIMatrix *mat, int row, int col, MPFI *a);
51
+ void mpfi_matrix_set(MPFIMatrix *new, MPFIMatrix *x);
52
+ void mpfi_matrix_swap(MPFIMatrix *x, MPFIMatrix *y);
53
+
54
+ void mpfi_matrix_row(MPFIMatrix *new, MPFIMatrix *x, int row);
55
+ void mpfi_matrix_column(MPFIMatrix *new, MPFIMatrix *x, int column);
56
+ void mpfi_matrix_transpose(MPFIMatrix *new, MPFIMatrix *x);
57
+ void mpfi_matrix_neg(MPFIMatrix *new, MPFIMatrix *x);
58
+
59
+ int mpfi_matrix_equal_p(MPFIMatrix *x, MPFIMatrix *y);
60
+ void mpfi_matrix_add(MPFIMatrix *new, MPFIMatrix *x, MPFIMatrix *y);
61
+ void mpfi_matrix_add_fr(MPFIMatrix *new, MPFIMatrix *x, MPFRMatrix *y);
62
+ void mpfi_matrix_sub(MPFIMatrix *new, MPFIMatrix *x, MPFIMatrix *y);
63
+ void mpfi_matrix_sub_fr(MPFIMatrix *new, MPFIMatrix *x, MPFRMatrix *y);
64
+ void mpfi_matrix_mul(MPFIMatrix *new, MPFIMatrix *x, MPFIMatrix *y);
65
+ void mpfi_matrix_mul_fr(MPFIMatrix *new, MPFIMatrix *x, MPFRMatrix *y);
66
+ void mpfi_matrix_mul_scalar(MPFIMatrix *new, MPFIMatrix *x, MPFI *scalar);
67
+ void mpfi_matrix_div_scalar(MPFIMatrix *new, MPFIMatrix *x, MPFI *scalar);
68
+
69
+ int mpfi_matrix_include_p(MPFIMatrix *x, MPFIMatrix *y);
70
+ int mpfi_matrix_include_fr_p(MPFIMatrix *x, MPFRMatrix *y);
71
+ int mpfi_matrix_strictly_include_p(MPFIMatrix *x, MPFIMatrix *y);
72
+ int mpfi_matrix_bounded_p(MPFIMatrix *x);
73
+ void mpfi_matrix_mid(MPFRMatrix *ret, MPFIMatrix *x);
74
+ void mpfi_matrix_mid_interval(MPFIMatrix *ret, MPFIMatrix *x);
75
+ void mpfi_matrix_from_mpfr_matrix(MPFIMatrix *ret, MPFRMatrix *x);
76
+ int mpfi_matrix_intersect(MPFIMatrix *ret, MPFIMatrix *x, MPFIMatrix *y);
77
+ int mpfi_matrix_union(MPFIMatrix *z, MPFIMatrix *x, MPFIMatrix *y);
78
+
79
+ void mpfi_matrix_inner_product(MPFI *pr, MPFIMatrix *x, MPFIMatrix *y);
80
+ void mpfi_matrix_vector_distance(MPFI *distance, MPFIMatrix *x, MPFIMatrix *y);
81
+ void mpfi_matrix_vector_distance_center_pts(MPFR *distance, MPFIMatrix *x, MPFIMatrix *y);
82
+ void mpfi_matrix_vector_norm(MPFI *norm, MPFIMatrix *x);
83
+ void mpfi_matrix_max_norm(MPFI *norm, MPFIMatrix *x);
84
+ void mpfi_matrix_max_diam_abs(MPFR *diam, MPFIMatrix *x);
85
+
86
+ /* ----------------- vector ---------------- */
87
+ void mpfi_col_vector_init(MPFIMatrix *mat, int row);
88
+ void mpfi_row_vector_init(MPFIMatrix *mat, int column);
89
+ int mpfi_vector_normalize(MPFIMatrix *new, MPFIMatrix *x);
90
+ void mpfi_vector_midpoint(MPFIMatrix *new, MPFIMatrix *x, MPFIMatrix *y);
91
+ int mpfi_vector_set_length(MPFIMatrix *new, MPFIMatrix *x, MPFR *l);
92
+
93
+ /* ----------------- square matrix ----------------- */
94
+ int mpfi_square_matrix_lu_decomp (MPFIMatrix *ret, int *indx, MPFIMatrix *x);
95
+ void mpfi_2d_square_matrix_determinant(MPFI *det, MPFIMatrix *x);
96
+ void mpfi_3d_square_matrix_determinant(MPFI *det, MPFIMatrix *x);
97
+ void mpfi_square_matrix_determinant(MPFI *det, MPFIMatrix *x);
98
+ void mpfi_square_matrix_qr_decomp(MPFIMatrix *q, MPFIMatrix *r, MPFIMatrix *x);
99
+ int mpfi_2d_square_matrix_inverse_matrix(MPFIMatrix *inv, MPFIMatrix *x);
100
+ int mpfi_2d_square_matrix_eigenvalue(MPFI *val1, MPFI *val2, MPFIMatrix *x);
101
+ void mpfi_2d_square_matrix_real_eigenvector(MPFIMatrix *vec, MPFIMatrix *x, MPFI *eigenval);
102
+ void mpfi_square_matrix_identity(MPFIMatrix *id);
103
+
@@ -0,0 +1,72 @@
1
+ #include <stdio.h>
2
+ #include <ruby.h>
3
+ #include <mpfr.h>
4
+ #include "ruby_mpfr.h"
5
+
6
+ typedef struct __MPFRMatrix{
7
+ int row, column, size;
8
+ MPFR *data;
9
+ } MPFRMatrix;
10
+
11
+ /*
12
+ 1 2 3
13
+ 4 5 6
14
+
15
+ row = 2
16
+ column = 3
17
+ size = 6
18
+ MPFR *data 1 4 2 5 3 6
19
+
20
+ (i, j) element => data + i + row * j
21
+ 0 <= i < 2, 0 <= j < 3
22
+ */
23
+
24
+ #define r_mpfr_make_matrix_struct(ruby_var, c_var) { ruby_var = Data_Make_Struct(r_mpfr_matrix, MPFRMatrix, 0, r_mpfr_matrix_free, c_var); }
25
+ #define r_mpfr_get_matrix_struct(c_var, ruby_var) { Data_Get_Struct(ruby_var, MPFRMatrix, c_var); }
26
+
27
+ #define r_mpfr_make_square_matrix_struct(ruby_var, c_var) { ruby_var = Data_Make_Struct(r_mpfr_square_matrix, MPFRMatrix, 0, r_mpfr_matrix_free, c_var); }
28
+ #define r_mpfr_make_col_vector_struct(ruby_var, c_var) { ruby_var = Data_Make_Struct(r_mpfr_col_vector, MPFRMatrix, 0, r_mpfr_matrix_free, c_var); }
29
+ #define r_mpfr_make_row_vector_struct(ruby_var, c_var) { ruby_var = Data_Make_Struct(r_mpfr_row_vector, MPFRMatrix, 0, r_mpfr_matrix_free, c_var); }
30
+
31
+ #define r_mpfr_matrix_temp_alloc_init(c_var, i, j) { c_var = ALLOC_N(MPFRMatrix, 1); mpfr_matrix_init(c_var, i, j); }
32
+ #define r_mpfr_matrix_temp_free(c_var) { mpfr_matrix_clear(c_var); free(c_var); }
33
+
34
+ #define mpfr_matrix_get_ptr(matrix, i) (matrix->data + i)
35
+ #define mpfr_matrix_get_element(matrix, i, j) (matrix->data + i + matrix->row * j)
36
+
37
+ void mpfr_matrix_clear(MPFRMatrix *mat);
38
+ void mpfr_matrix_init(MPFRMatrix *mat, int row, int column);
39
+ void mpfr_matrix_set_zeros(MPFRMatrix *mat);
40
+ void mpfr_matrix_set_element(MPFRMatrix *mat, int row, int col, MPFR *a);
41
+ void mpfr_matrix_set(MPFRMatrix *new, MPFRMatrix *x);
42
+ void mpfr_matrix_swap(MPFRMatrix *x, MPFRMatrix *y);
43
+
44
+ void mpfr_matrix_row(MPFRMatrix *new, MPFRMatrix *x, int row);
45
+ void mpfr_matrix_column(MPFRMatrix *new, MPFRMatrix *x, int column);
46
+ void mpfr_matrix_transpose(MPFRMatrix *new, MPFRMatrix *x);
47
+ void mpfr_matrix_neg(MPFRMatrix *new, MPFRMatrix *x);
48
+
49
+ int mpfr_matrix_equal_p(MPFRMatrix *x, MPFRMatrix *y);
50
+ void mpfr_matrix_add(MPFRMatrix *new, MPFRMatrix *x, MPFRMatrix *y);
51
+ void mpfr_matrix_sub(MPFRMatrix *new, MPFRMatrix *x, MPFRMatrix *y);
52
+ void mpfr_matrix_mul(MPFRMatrix *new, MPFRMatrix *x, MPFRMatrix *y);
53
+ void mpfr_matrix_mul_scalar(MPFRMatrix *new, MPFRMatrix *x, MPFR *scalar);
54
+ void mpfr_matrix_div_scalar(MPFRMatrix *new, MPFRMatrix *x, MPFR *scalar);
55
+ void mpfr_matrix_inner_product(MPFR *pr, MPFRMatrix *x, MPFRMatrix *y);
56
+ void mpfr_matrix_vector_distance(MPFR *distance, MPFRMatrix *x, MPFRMatrix *y);
57
+ void mpfr_matrix_vector_norm(MPFR *norm, MPFRMatrix *x);
58
+ void mpfr_matrix_max_norm(MPFR *norm, MPFRMatrix *x);
59
+
60
+ void mpfr_col_vector_init(MPFRMatrix *mat, int row);
61
+ void mpfr_row_vector_init(MPFRMatrix *mat, int column);
62
+ int mpfr_vector_normalize(MPFRMatrix *new, MPFRMatrix *x);
63
+ int mpfr_vector_set_length(MPFRMatrix *new, MPFRMatrix *x, MPFR *l);
64
+ void mpfr_vector_midpoint(MPFRMatrix *new, MPFRMatrix *x, MPFRMatrix *y);
65
+ void mpfr_vector_dividing_point(MPFRMatrix *new, MPFRMatrix *x, MPFRMatrix *y, MPFR *div);
66
+
67
+ int mpfr_square_matrix_lu_decomp (MPFRMatrix *ret, int *indx, MPFRMatrix *x);
68
+ void mpfr_square_matrix_determinant(MPFR *det, MPFRMatrix *x);
69
+ void mpfr_square_matrix_qr_decomp(MPFRMatrix *q, MPFRMatrix *r, MPFRMatrix *x);
70
+ void mpfr_square_matrix_identity(MPFRMatrix *id);
71
+
72
+
@@ -0,0 +1,35 @@
1
+ #include <stdio.h>
2
+ #include <ruby.h>
3
+ #include <mpfr.h>
4
+ #include <mpfi.h>
5
+ #include <mpfi_io.h>
6
+ #include "ruby_mpfi.h"
7
+
8
+ VALUE r_mpfi_complex;
9
+
10
+ typedef struct __MPFIComplex{
11
+ MPFI *re;
12
+ MPFI *im;
13
+ } MPFIComplex;
14
+
15
+ /* Although x->re and x->im can have different precision from each other for MPFIComplex x, */
16
+ /* we implement mpfi_complex_get_prec assuming that they have same presition. */
17
+ #define mpfi_complex_get_prec(x) mpfi_get_prec(x->re)
18
+
19
+ void mpfi_complex_init(MPFIComplex *x);
20
+ void mpfi_complex_clear(MPFIComplex *x);
21
+ void mpfi_complex_set_zeros(MPFIComplex *x);
22
+ void mpfi_complex_set_real_part(MPFIComplex *x, MPFI *a);
23
+ void mpfi_complex_set_imaginary_part(MPFIComplex *x, MPFI *a);
24
+ void mpfi_complex_set(MPFIComplex *new, MPFIComplex *x);
25
+ void mpfi_complex_conjugate(MPFIComplex *new, MPFIComplex *x);
26
+ void mpfi_complex_add(MPFIComplex *new, MPFIComplex *x, MPFIComplex *y);
27
+ void mpfi_complex_sub(MPFIComplex *new, MPFIComplex *x, MPFIComplex *y);
28
+ void mpfi_complex_mul(MPFIComplex *new, MPFIComplex *x, MPFIComplex *y);
29
+ void mpfi_complex_div(MPFIComplex *new, MPFIComplex *x, MPFIComplex *y);
30
+
31
+ /* void mpfi_complex_mul_real(MPFIComplex *new, MPFIComplex *x, MPFI *y); */
32
+ /* void mpfi_complex_mul_pure_imaginary(MPFIComplex *new, MPFIComplex *x, MPFI *y); */
33
+ /* void mpfi_complex_div_real(MPFIComplex *new, MPFIComplex *x, MPFI *y); */
34
+ /* void mpfi_complex_div_pure_imaginary(MPFIComplex *new, MPFIComplex *x, MPFI *y); */
35
+ /* void mpfi_complex_abs(MPFI *new, MPFIComplex *x); */
@@ -0,0 +1,39 @@
1
+ #ifndef _RUBY_MPFI_H_
2
+ #define _RUBY_MPFI_H_
3
+
4
+ #include <stdio.h>
5
+ #include <ruby.h>
6
+ #include <mpfr.h>
7
+ #include <mpfi.h>
8
+ #include <mpfi_io.h>
9
+ #include "func_mpfi_extention.h"
10
+ #include "ruby_mpfr.h"
11
+
12
+ typedef __mpfi_struct MPFI;
13
+
14
+ VALUE r_mpfi_class, r_mpfi_math;;
15
+
16
+ #define r_mpfi_make_struct(ruby_var, c_var) { ruby_var = Data_Make_Struct(r_mpfi_class, MPFI, 0, r_mpfi_free, c_var); }
17
+ #define r_mpfi_make_struct_init(ruby_var, c_var) { r_mpfi_make_struct(ruby_var, c_var); mpfi_init(c_var); }
18
+ #define r_mpfi_make_struct_init2(ruby_var, c_var, prec) { r_mpfi_make_struct(ruby_var, c_var); mpfi_init2(c_var, prec); }
19
+ #define r_mpfi_get_struct(c_var, ruby_var) { Data_Get_Struct(ruby_var, MPFI, c_var); }
20
+
21
+ #define r_mpfi_temp_alloc(c_var) { c_var=ALLOC_N(MPFI, 1); }
22
+ #define r_mpfi_temp_alloc_init(c_var) { r_mpfi_temp_alloc(c_var); mpfi_init(c_var); }
23
+ #define r_mpfi_temp_alloc_init2(c_var, prec) { r_mpfi_temp_alloc(c_var); mpfi_init2(c_var, prec); }
24
+ #define r_mpfi_temp_free(c_var) { mpfi_clear(c_var); free(c_var); }
25
+
26
+ #define r_mpfi_left_ptr(c_var) (&((c_var)->left))
27
+ #define r_mpfi_right_ptr(c_var) (&((c_var)->right))
28
+
29
+ void r_mpfi_free(void *ptr);
30
+ VALUE r_mpfi_make_new_fi_obj(MPFI *ptr);
31
+ VALUE r_mpfi_new_fi_obj(VALUE obj);
32
+ void r_mpfi_set_robj(MPFI *ptr, VALUE obj);
33
+
34
+ int r_mpfi_subdivision2(int num, MPFI *ret, mpfi_t x);
35
+
36
+ void r_mpfi_set_function_state(int num);
37
+ VALUE r_mpfr_get_function_state(VALUE self);
38
+
39
+ #endif /* _RUBY_MPFI_H_ */
@@ -0,0 +1,15 @@
1
+ #ifndef __RUBY_MPFI_COMPLEX__
2
+ #define __RUBY_MPFI_COMPLEX__
3
+
4
+ #include "func_ruby_mpfi_complex.h"
5
+
6
+ #define r_mpfi_make_complex_struct(ruby_var, mpfi_complex_var) { ruby_var = Data_Make_Struct(r_mpfi_complex, MPFIComplex, 0, r_mpfi_complex_free, mpfi_complex_var); }
7
+ #define r_mpfi_make_complex_struct_init(ruby_var, mpfi_complex_var) { ruby_var = Data_Make_Struct(r_mpfi_complex, MPFIComplex, 0, r_mpfi_complex_free, mpfi_complex_var); mpfi_complex_init(mpfi_complex_var);}
8
+ #define r_mpfi_get_complex_struct(mpfi_complex_var, ruby_var) { Data_Get_Struct(ruby_var, MPFIComplex, mpfi_complex_var); }
9
+
10
+ #define r_mpfi_complex_temp_alloc_init(mpfi_complex_var) { mpfi_complex_var = ALLOC_N(MPFIComplex, 1); mpfi_complex_init(mpfi_complex_var); }
11
+ #define r_mpfi_complex_temp_free(mpfi_complex_var) { mpfi_complex_clear(mpfi_complex_var); free(mpfi_complex_var); }
12
+
13
+ void r_mpfi_complex_free(void *ptr);
14
+
15
+ #endif