4377
|
1 diff -ur sparsersb-1.0.5.orig/src/sparsersb.cc sparsersb-1.0.5/src/sparsersb.cc |
|
2 --- sparsersb-1.0.5.orig/src/sparsersb.cc 2017-04-08 17:49:45.120506400 -0400 |
|
3 +++ sparsersb-1.0.5/src/sparsersb.cc 2017-04-08 17:50:04.244313729 -0400 |
|
4 @@ -311,7 +311,7 @@ |
|
5 // assumes tacitly that rsboi_idx_overflow(IA[i],JA[i])==false for i in 0..nnzA-1. |
|
6 rsb_err_t errval = RSB_ERR_NO_ERROR; |
|
7 |
|
8 - errval = rsb_mtx_get_coo(mtxAp, VA, (rsb_coo_idx_t *)IA, (rsb_coo_idx_ t*)JA, flags ); |
|
9 + errval = rsb_mtx_get_coo(mtxAp, VA, (rsb_coo_idx_t *)IA, (rsb_coo_idx_t*)JA, flags ); |
|
10 rsb_nnz_idx_t nnzA = 0; |
|
11 rsb_mtx_get_info(mtxAp,RSB_MIF_MATRIX_NNZ__TO__RSB_NNZ_INDEX_T,&nnzA); // FIXME: make this a member and use nnz() |
|
12 rsboi_ri2oi((rsb_coo_idx_t *)IA,nnzA); |
4427
|
13 diff -r e6017808f88d src/configure.ac |
|
14 --- a/src/configure.ac Fri Jul 21 12:04:41 2017 -0400 |
|
15 +++ b/src/configure.ac Fri Jul 21 13:25:48 2017 -0400 |
|
16 @@ -107,11 +107,7 @@ |
|
17 fi |
|
18 fi |
|
19 |
|
20 -if test -x `which $OCTAVE-cli` ; then |
|
21 - OCTAVE_CLI="$OCTAVE-cli"; |
|
22 -else |
|
23 - OCTAVE_CLI="$OCTAVE"; |
|
24 -fi |
|
25 +OCTAVE_CLI="$OCTAVE --no-gui --no-window-system"; |
|
26 |
|
27 SPARSERSB_USE_64BIT_IDX=`$OCTAVE_CLI --no-line-editing -qf --eval 'printf ("%i", sizemax() > intmax ("int32"))'` |
|
28 if [test x"$SPARSERSB_USE_64BIT_IDX" = x"1" ]; then |
|
29 diff -r 105149bc4206 src/Makeconf.in |
|
30 --- a/src/Makeconf.in Fri Jul 21 13:47:46 2017 -0400 |
|
31 +++ b/src/Makeconf.in Fri Jul 21 14:52:25 2017 -0400 |
|
32 @@ -4,3 +4,4 @@ |
|
33 SPARSERSB_CXXFLAGS = @SPARSERSB_CXXFLAGS@ |
|
34 SPARSERSB_LDFLAGS = @SPARSERSB_LDFLAGS@ |
|
35 SPARSERSB_CXX11= @SPARSERSB_CXX11@ |
|
36 +OCTAVE_FUNC_DEFINES = @HAVE_OCTAVE_VALUE_ISCOMPLEX@ |
|
37 diff -r 105149bc4206 src/Makefile |
|
38 --- a/src/Makefile Fri Jul 21 13:47:46 2017 -0400 |
|
39 +++ b/src/Makefile Fri Jul 21 14:52:25 2017 -0400 |
|
40 @@ -1,7 +1,7 @@ |
|
41 sinclude Makeconf |
|
42 # Makeconf is created by the configure script. |
|
43 # You can also not use it but set explicitly the following: |
|
44 -CXXFLAGS=$(SPARSERSB_CXXFLAGS) |
|
45 +CXXFLAGS=$(SPARSERSB_CXXFLAGS) $(OCTAVE_FUNC_DEFINES) |
|
46 LFLAGS=$(shell $(MKOCTFILE) -p LFLAGS) $(SPARSERSB_LDFLAGS) |
|
47 CXXFLAGS_CXX11=$(SPARSERSB_CXX11) |
|
48 |
|
49 diff -r 105149bc4206 src/configure.ac |
|
50 --- a/src/configure.ac Fri Jul 21 13:47:46 2017 -0400 |
|
51 +++ b/src/configure.ac Fri Jul 21 14:52:25 2017 -0400 |
|
52 @@ -154,6 +154,40 @@ |
|
53 AC_MSG_ERROR([$PACKAGE_NAME requires librsb library]) |
|
54 fi |
|
55 |
|
56 +# check for octave functions |
|
57 +save_CXX="$CXX" |
|
58 +save_CXXFLAGS="$CXXFLAGS" |
|
59 +CXX=`${MKOCTFILE} -p CXX` |
|
60 +CXXFLAGS="$CXXFLAGS -I`$MKOCTFILE -p OCTINCLUDEDIR`" |
|
61 + |
|
62 +# need to use interpreter->get_load_path in dev version of octave, |
|
63 +# prior to that methods of load_path were static |
|
64 +AC_CACHE_CHECK( |
|
65 + [for octave_value function iscomplex], |
|
66 + [octave_value_cv_iscomplex], |
|
67 + [AC_COMPILE_IFELSE( |
|
68 + [AC_LANG_PROGRAM([ |
|
69 + #include <oct.h> |
|
70 + #include <octave.h> |
|
71 + ], |
|
72 + [ |
|
73 + octave_value().iscomplex(); |
|
74 + ])], |
|
75 + [octave_value_cv_iscomplex=yes], |
|
76 + [octave_value_cv_iscomplex=no]) |
|
77 + ]) |
|
78 +if test "$octave_value_cv_iscomplex" = "yes" ; then |
|
79 + HAVE_OCTAVE_VALUE_ISCOMPLEX=-DHAVE_OCTAVE_VALUE_ISCOMPLEX |
|
80 +else |
|
81 + HAVE_OCTAVE_VALUE_ISCOMPLEX= |
|
82 +fi |
|
83 +AC_SUBST(HAVE_OCTAVE_VALUE_ISCOMPLEX) |
|
84 + |
|
85 +CC=$save_CXX |
|
86 +CXXFLAGS=$save_CXXFLAGS |
|
87 + |
|
88 + |
|
89 + |
|
90 AC_SUBST(OCTAVE) |
|
91 AC_SUBST(TARGETS) |
|
92 AC_SUBST(SPARSERSB_CXXFLAGS) |
|
93 @@ -163,6 +197,7 @@ |
|
94 AC_CONFIG_FILES([Makeconf]) |
|
95 AC_OUTPUT |
|
96 |
|
97 + |
|
98 AC_MSG_NOTICE([ |
|
99 |
|
100 $PACKAGE_NAME is configured with: |
|
101 diff -r 105149bc4206 src/sparsersb.cc |
|
102 --- a/src/sparsersb.cc Fri Jul 21 13:47:46 2017 -0400 |
|
103 +++ b/src/sparsersb.cc Fri Jul 21 14:52:25 2017 -0400 |
|
104 @@ -177,7 +177,11 @@ |
|
105 |
|
106 #ifdef RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX |
|
107 #define RSBOI_WANT_DOUBLE_COMPLEX 1 |
|
108 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
109 +#define ORSB_RSB_TYPE_FLAG(OBJ) (((OBJ).iscomplex())?RSB_NUMERICAL_TYPE_DOUBLE:RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX) |
|
110 +#else |
|
111 #define ORSB_RSB_TYPE_FLAG(OBJ) (((OBJ).is_complex_type())?RSB_NUMERICAL_TYPE_DOUBLE:RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX) |
|
112 +#endif |
|
113 #else |
|
114 #define RSBOI_WANT_DOUBLE_COMPLEX 0 |
|
115 #define ORSB_RSB_TYPE_FLAG(OBJ) RSB_NUMERICAL_TYPE_DOUBLE |
|
116 @@ -228,7 +232,11 @@ |
|
117 } |
|
118 #endif |
|
119 #if RSBOI_WANT_DOUBLE_COMPLEX |
|
120 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
121 +#define RSBOI_BINOP_PREVAILING_TYPE(V1,V2) (((V1).iscomplex()||(V2).iscomplex())?RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX:RSB_NUMERICAL_TYPE_DOUBLE) |
|
122 +#else |
|
123 #define RSBOI_BINOP_PREVAILING_TYPE(V1,V2) (((V1).is_complex_type()||(V2).is_complex_type())?RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX:RSB_NUMERICAL_TYPE_DOUBLE) |
|
124 +#endif |
|
125 #else |
|
126 #define RSBOI_BINOP_PREVAILING_TYPE(V1,V2) RSBOI_TYPECODE |
|
127 #endif |
|
128 @@ -863,7 +871,11 @@ |
|
129 bool is_diagonal (void) const { RSBOI_0_EMCHECK(this->mtxAp); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_DIAGONAL)?true:false; }/* FIXME: new: not sure whether this is ever called */ |
|
130 bool is_lower_triangular (void) const { RSBOI_0_EMCHECK(this->mtxAp); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_LOWER_TRIANGULAR)?true:false; }/* FIXME: new: not sure whether this is ever called */ |
|
131 bool is_upper_triangular (void) const { RSBOI_0_EMCHECK(this->mtxAp); RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG);return RSB_DO_FLAG_HAS(this->rsbflags(),RSB_FLAG_UPPER_TRIANGULAR)?true:false; }/* FIXME: new: not sure whether this is ever called */ |
|
132 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
133 + bool iscomplex (void) const { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); return !is_real_type(); } |
|
134 +#else |
|
135 bool is_complex_type (void) const { RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); return !is_real_type(); } |
|
136 +#endif |
|
137 bool is_bool_type (void) const { return false; } |
|
138 bool is_integer_type (void) const { return false; } |
|
139 bool is_square (void) const { return this->rows()==this->cols(); } |
|
140 @@ -1534,7 +1546,11 @@ |
|
141 rsb_err_t errval = RSB_ERR_NO_ERROR; |
|
142 RSBOI_DEBUG_NOTICE(RSBOI_D_EMPTY_MSG); |
|
143 |
|
144 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
145 + if(v1.iscomplex()) |
|
146 +#else |
|
147 if(v1.is_complex_type()) |
|
148 +#endif |
|
149 { |
|
150 ComplexMatrix retval = v2.complex_matrix_value(); |
|
151 octave_idx_type b_nc = retval.cols (); |
|
152 @@ -1640,7 +1656,11 @@ |
|
153 if(v1.is__triangular()) |
|
154 return rsboi_spsm(v1,v2,RSB_TRANSPOSITION_N); |
|
155 |
|
156 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
157 + if(v1.iscomplex() || v2.iscomplex()) |
|
158 +#else |
|
159 if(v1.is_complex_type() || v2.is_complex_type()) |
|
160 +#endif |
|
161 return (v1.sparse_complex_matrix_value()).solve(v2.sparse_complex_matrix_value()); |
|
162 else |
|
163 return (v1.sparse_matrix_value()).solve(v2.matrix_value()); |
|
164 @@ -1655,7 +1675,11 @@ |
|
165 if(v1.is__triangular()) |
|
166 return rsboi_spsm(v1,v2,RSB_TRANSPOSITION_T); |
|
167 |
|
168 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
169 + if(v1.iscomplex() || v2.iscomplex()) |
|
170 +#else |
|
171 if(v1.is_complex_type() || v2.is_complex_type()) |
|
172 +#endif |
|
173 return (v1.sparse_complex_matrix_value().transpose()).solve(v2.sparse_complex_matrix_value()); |
|
174 else |
|
175 return (v1.sparse_matrix_value().transpose()).solve(v2.matrix_value()); |
|
176 @@ -1671,7 +1695,11 @@ |
|
177 if(v1.is__triangular()) |
|
178 return rsboi_spsm(v1,v2,RSB_TRANSPOSITION_N); |
|
179 |
|
180 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
181 + if(v1.iscomplex() || v2.iscomplex()) |
|
182 +#else |
|
183 if(v1.is_complex_type() || v2.is_complex_type()) |
|
184 +#endif |
|
185 return (v1.sparse_complex_matrix_value()).solve(v2.sparse_complex_matrix_value()); |
|
186 else |
|
187 return (v1.sparse_matrix_value()).solve(v2.matrix_value()); |
|
188 @@ -1685,7 +1713,11 @@ |
|
189 if(v1.is__triangular()) |
|
190 return rsboi_spsm(v1,v2,RSB_TRANSPOSITION_T); |
|
191 |
|
192 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
193 + if(v1.iscomplex() || v2.iscomplex()) |
|
194 +#else |
|
195 if(v1.is_complex_type() || v2.is_complex_type()) |
|
196 +#endif |
|
197 return (v1.sparse_complex_matrix_value().transpose()).solve(v2.sparse_complex_matrix_value()); |
|
198 else |
|
199 return (v1.sparse_matrix_value().transpose()).solve(v2.matrix_value()); |
|
200 @@ -2199,8 +2231,13 @@ |
|
201 int nargin = args.length (); |
|
202 octave_value_list retval; |
|
203 octave_sparsersb_mtx*osmp = RSBOI_NULL; |
|
204 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
205 + bool ic0 = nargin>0?(args(0).iscomplex()):false; |
|
206 + bool ic3 = nargin>2?(args(2).iscomplex()):false; |
|
207 +#else |
|
208 bool ic0 = nargin>0?(args(0).is_complex_type()):false; |
|
209 bool ic3 = nargin>2?(args(2).is_complex_type()):false; |
|
210 +#endif |
|
211 bool isr = (nargin>0 && args(0).type_name()==RSB_OI_TYPEINFO_STRING); |
|
212 |
|
213 RSBOI_DEBUG_NOTICE("in sparsersb()\n"); |
|
214 @@ -2522,7 +2559,11 @@ |
|
215 if(nargout) retval.append(osmp->cols()),--nargout; |
|
216 if(nargout) retval.append(osmp->nnz()),--nargout; |
|
217 if(nargout) retval.append(osmp->get_info_string()),--nargout; |
|
218 +#ifdef HAVE_OCTAVE_VALUE_ISCOMPLEX |
|
219 + if(nargout) retval.append((!osmp->iscomplex())?"real":"complex"),--nargout; |
|
220 +#else |
|
221 if(nargout) retval.append((!osmp->is_complex_type())?"real":"complex"),--nargout; |
|
222 +#endif |
|
223 if(nargout) retval.append(osmp->get_symmetry()),--nargout; |
|
224 } |
|
225 } |