boost.cxx 0.0.2 → 1.90.1

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 (327) hide show
  1. package/README.md +29 -2
  2. package/boost/cast.hpp +20 -0
  3. package/boost/numeric/conversion/bounds.hpp +24 -0
  4. package/boost/numeric/conversion/cast.hpp +61 -0
  5. package/boost/numeric/conversion/conversion_traits.hpp +32 -0
  6. package/boost/numeric/conversion/converter.hpp +68 -0
  7. package/boost/numeric/conversion/converter_policies.hpp +194 -0
  8. package/boost/numeric/conversion/detail/bounds.hpp +58 -0
  9. package/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
  10. package/boost/numeric/conversion/detail/converter.hpp +593 -0
  11. package/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
  12. package/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
  13. package/boost/numeric/conversion/detail/meta.hpp +120 -0
  14. package/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
  15. package/boost/numeric/conversion/detail/old_numeric_cast.hpp +308 -0
  16. package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
  17. package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
  18. package/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
  19. package/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
  20. package/boost/numeric/conversion/int_float_mixture.hpp +30 -0
  21. package/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
  22. package/boost/numeric/conversion/is_subranged.hpp +27 -0
  23. package/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
  24. package/boost/numeric/conversion/sign_mixture.hpp +30 -0
  25. package/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
  26. package/boost/numeric/conversion/udt_builtin_mixture.hpp +28 -0
  27. package/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
  28. package/boost/numeric/interval/arith.hpp +305 -0
  29. package/boost/numeric/interval/arith2.hpp +304 -0
  30. package/boost/numeric/interval/arith3.hpp +69 -0
  31. package/boost/numeric/interval/checking.hpp +130 -0
  32. package/boost/numeric/interval/compare/certain.hpp +113 -0
  33. package/boost/numeric/interval/compare/explicit.hpp +248 -0
  34. package/boost/numeric/interval/compare/lexicographic.hpp +122 -0
  35. package/boost/numeric/interval/compare/possible.hpp +113 -0
  36. package/boost/numeric/interval/compare/set.hpp +101 -0
  37. package/boost/numeric/interval/compare/tribool.hpp +138 -0
  38. package/boost/numeric/interval/compare.hpp +19 -0
  39. package/boost/numeric/interval/constants.hpp +85 -0
  40. package/boost/numeric/interval/detail/alpha_rounding_control.hpp +113 -0
  41. package/boost/numeric/interval/detail/bcc_rounding_control.hpp +57 -0
  42. package/boost/numeric/interval/detail/bugs.hpp +48 -0
  43. package/boost/numeric/interval/detail/c99_rounding_control.hpp +50 -0
  44. package/boost/numeric/interval/detail/c99sub_rounding_control.hpp +43 -0
  45. package/boost/numeric/interval/detail/division.hpp +194 -0
  46. package/boost/numeric/interval/detail/ia64_rounding_control.hpp +83 -0
  47. package/boost/numeric/interval/detail/interval_prototype.hpp +41 -0
  48. package/boost/numeric/interval/detail/msvc_rounding_control.hpp +113 -0
  49. package/boost/numeric/interval/detail/ppc_rounding_control.hpp +99 -0
  50. package/boost/numeric/interval/detail/sparc_rounding_control.hpp +112 -0
  51. package/boost/numeric/interval/detail/test_input.hpp +76 -0
  52. package/boost/numeric/interval/detail/x86_rounding_control.hpp +108 -0
  53. package/boost/numeric/interval/detail/x86gcc_rounding_control.hpp +51 -0
  54. package/boost/numeric/interval/ext/integer.hpp +70 -0
  55. package/boost/numeric/interval/ext/x86_fast_rounding_control.hpp +70 -0
  56. package/boost/numeric/interval/hw_rounding.hpp +73 -0
  57. package/boost/numeric/interval/interval.hpp +450 -0
  58. package/boost/numeric/interval/io.hpp +41 -0
  59. package/boost/numeric/interval/limits.hpp +49 -0
  60. package/boost/numeric/interval/policies.hpp +75 -0
  61. package/boost/numeric/interval/rounded_arith.hpp +120 -0
  62. package/boost/numeric/interval/rounded_transc.hpp +140 -0
  63. package/boost/numeric/interval/rounding.hpp +101 -0
  64. package/boost/numeric/interval/transc.hpp +232 -0
  65. package/boost/numeric/interval/utility.hpp +335 -0
  66. package/boost/numeric/interval/utility_fwd.hpp +172 -0
  67. package/boost/numeric/interval.hpp +32 -0
  68. package/boost/numeric/odeint/algebra/algebra_dispatcher.hpp +86 -0
  69. package/boost/numeric/odeint/algebra/array_algebra.hpp +293 -0
  70. package/boost/numeric/odeint/algebra/default_operations.hpp +599 -0
  71. package/boost/numeric/odeint/algebra/detail/extract_value_type.hpp +51 -0
  72. package/boost/numeric/odeint/algebra/detail/for_each.hpp +165 -0
  73. package/boost/numeric/odeint/algebra/detail/macros.hpp +35 -0
  74. package/boost/numeric/odeint/algebra/detail/norm_inf.hpp +46 -0
  75. package/boost/numeric/odeint/algebra/fusion_algebra.hpp +216 -0
  76. package/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp +48 -0
  77. package/boost/numeric/odeint/algebra/multi_array_algebra.hpp +146 -0
  78. package/boost/numeric/odeint/algebra/norm_result_type.hpp +33 -0
  79. package/boost/numeric/odeint/algebra/operations_dispatcher.hpp +41 -0
  80. package/boost/numeric/odeint/algebra/range_algebra.hpp +142 -0
  81. package/boost/numeric/odeint/algebra/vector_space_algebra.hpp +175 -0
  82. package/boost/numeric/odeint/config.hpp +53 -0
  83. package/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp +55 -0
  84. package/boost/numeric/odeint/external/blaze/blaze_resize.hpp +64 -0
  85. package/boost/numeric/odeint/external/compute/compute.hpp +27 -0
  86. package/boost/numeric/odeint/external/compute/compute_algebra.hpp +65 -0
  87. package/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp +41 -0
  88. package/boost/numeric/odeint/external/compute/compute_operations.hpp +198 -0
  89. package/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp +44 -0
  90. package/boost/numeric/odeint/external/compute/compute_resize.hpp +92 -0
  91. package/boost/numeric/odeint/external/eigen/eigen.hpp +27 -0
  92. package/boost/numeric/odeint/external/eigen/eigen_algebra.hpp +98 -0
  93. package/boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp +49 -0
  94. package/boost/numeric/odeint/external/eigen/eigen_resize.hpp +103 -0
  95. package/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp +228 -0
  96. package/boost/numeric/odeint/external/mkl/mkl_operations.hpp +181 -0
  97. package/boost/numeric/odeint/external/mpi/mpi.hpp +25 -0
  98. package/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp +62 -0
  99. package/boost/numeric/odeint/external/mpi/mpi_state.hpp +113 -0
  100. package/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp +95 -0
  101. package/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp +161 -0
  102. package/boost/numeric/odeint/external/mtl4/mtl4.hpp +23 -0
  103. package/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp +99 -0
  104. package/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp +134 -0
  105. package/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp +25 -0
  106. package/boost/numeric/odeint/external/nt2/nt2_copy.hpp +33 -0
  107. package/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp +31 -0
  108. package/boost/numeric/odeint/external/nt2/nt2_resize.hpp +54 -0
  109. package/boost/numeric/odeint/external/openmp/openmp.hpp +31 -0
  110. package/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp +281 -0
  111. package/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp +276 -0
  112. package/boost/numeric/odeint/external/openmp/openmp_state.hpp +172 -0
  113. package/boost/numeric/odeint/external/thrust/thrust.hpp +27 -0
  114. package/boost/numeric/odeint/external/thrust/thrust_algebra.hpp +217 -0
  115. package/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp +118 -0
  116. package/boost/numeric/odeint/external/thrust/thrust_operations.hpp +233 -0
  117. package/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp +118 -0
  118. package/boost/numeric/odeint/external/thrust/thrust_resize.hpp +197 -0
  119. package/boost/numeric/odeint/external/vexcl/vexcl.hpp +28 -0
  120. package/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp +61 -0
  121. package/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp +51 -0
  122. package/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp +55 -0
  123. package/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp +68 -0
  124. package/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp +96 -0
  125. package/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp +58 -0
  126. package/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp +226 -0
  127. package/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp +68 -0
  128. package/boost/numeric/odeint/integrate/check_adapter.hpp +222 -0
  129. package/boost/numeric/odeint/integrate/detail/functors.hpp +70 -0
  130. package/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp +161 -0
  131. package/boost/numeric/odeint/integrate/detail/integrate_const.hpp +167 -0
  132. package/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp +161 -0
  133. package/boost/numeric/odeint/integrate/detail/integrate_times.hpp +179 -0
  134. package/boost/numeric/odeint/integrate/integrate.hpp +133 -0
  135. package/boost/numeric/odeint/integrate/integrate_adaptive.hpp +127 -0
  136. package/boost/numeric/odeint/integrate/integrate_const.hpp +195 -0
  137. package/boost/numeric/odeint/integrate/integrate_n_steps.hpp +178 -0
  138. package/boost/numeric/odeint/integrate/integrate_times.hpp +220 -0
  139. package/boost/numeric/odeint/integrate/max_step_checker.hpp +114 -0
  140. package/boost/numeric/odeint/integrate/null_observer.hpp +38 -0
  141. package/boost/numeric/odeint/integrate/observer_collection.hpp +55 -0
  142. package/boost/numeric/odeint/iterator/adaptive_iterator.hpp +183 -0
  143. package/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp +175 -0
  144. package/boost/numeric/odeint/iterator/const_step_iterator.hpp +180 -0
  145. package/boost/numeric/odeint/iterator/const_step_time_iterator.hpp +173 -0
  146. package/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp +199 -0
  147. package/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp +251 -0
  148. package/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp +228 -0
  149. package/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp +239 -0
  150. package/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp +369 -0
  151. package/boost/numeric/odeint/iterator/integrate/detail/functors.hpp +70 -0
  152. package/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp +121 -0
  153. package/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp +111 -0
  154. package/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp +107 -0
  155. package/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp +67 -0
  156. package/boost/numeric/odeint/iterator/integrate/integrate.hpp +111 -0
  157. package/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp +127 -0
  158. package/boost/numeric/odeint/iterator/integrate/integrate_const.hpp +158 -0
  159. package/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp +123 -0
  160. package/boost/numeric/odeint/iterator/integrate/integrate_times.hpp +131 -0
  161. package/boost/numeric/odeint/iterator/integrate/null_observer.hpp +38 -0
  162. package/boost/numeric/odeint/iterator/integrate/observer_collection.hpp +55 -0
  163. package/boost/numeric/odeint/iterator/n_step_iterator.hpp +168 -0
  164. package/boost/numeric/odeint/iterator/n_step_time_iterator.hpp +169 -0
  165. package/boost/numeric/odeint/iterator/times_iterator.hpp +189 -0
  166. package/boost/numeric/odeint/iterator/times_time_iterator.hpp +193 -0
  167. package/boost/numeric/odeint/stepper/adams_bashforth.hpp +418 -0
  168. package/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp +313 -0
  169. package/boost/numeric/odeint/stepper/adams_moulton.hpp +201 -0
  170. package/boost/numeric/odeint/stepper/adaptive_adams_bashforth_moulton.hpp +237 -0
  171. package/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp +91 -0
  172. package/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp +588 -0
  173. package/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp +677 -0
  174. package/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp +415 -0
  175. package/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp +431 -0
  176. package/boost/numeric/odeint/stepper/bulirsch_stoer.hpp +642 -0
  177. package/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp +838 -0
  178. package/boost/numeric/odeint/stepper/controlled_adams_bashforth_moulton.hpp +322 -0
  179. package/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp +1018 -0
  180. package/boost/numeric/odeint/stepper/controlled_step_result.hpp +42 -0
  181. package/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp +476 -0
  182. package/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp +148 -0
  183. package/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp +168 -0
  184. package/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp +148 -0
  185. package/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp +168 -0
  186. package/boost/numeric/odeint/stepper/detail/adaptive_adams_coefficients.hpp +207 -0
  187. package/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp +247 -0
  188. package/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp +263 -0
  189. package/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp +252 -0
  190. package/boost/numeric/odeint/stepper/detail/pid_step_adjuster.hpp +199 -0
  191. package/boost/numeric/odeint/stepper/detail/pid_step_adjuster_coefficients.hpp +180 -0
  192. package/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp +84 -0
  193. package/boost/numeric/odeint/stepper/euler.hpp +166 -0
  194. package/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp +255 -0
  195. package/boost/numeric/odeint/stepper/explicit_generic_rk.hpp +246 -0
  196. package/boost/numeric/odeint/stepper/extrapolation_stepper.hpp +288 -0
  197. package/boost/numeric/odeint/stepper/generation/generation_controlled_adams_bashforth_moulton.hpp +59 -0
  198. package/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp +61 -0
  199. package/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp +65 -0
  200. package/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp +79 -0
  201. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp +47 -0
  202. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp +48 -0
  203. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp +56 -0
  204. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp +46 -0
  205. package/boost/numeric/odeint/stepper/generation/make_controlled.hpp +103 -0
  206. package/boost/numeric/odeint/stepper/generation/make_dense_output.hpp +100 -0
  207. package/boost/numeric/odeint/stepper/generation.hpp +37 -0
  208. package/boost/numeric/odeint/stepper/implicit_euler.hpp +170 -0
  209. package/boost/numeric/odeint/stepper/modified_midpoint.hpp +315 -0
  210. package/boost/numeric/odeint/stepper/rosenbrock4.hpp +346 -0
  211. package/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp +240 -0
  212. package/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp +204 -0
  213. package/boost/numeric/odeint/stepper/runge_kutta4.hpp +181 -0
  214. package/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp +232 -0
  215. package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp +231 -0
  216. package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp +289 -0
  217. package/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp +403 -0
  218. package/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp +374 -0
  219. package/boost/numeric/odeint/stepper/stepper_categories.hpp +66 -0
  220. package/boost/numeric/odeint/stepper/symplectic_euler.hpp +136 -0
  221. package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp +160 -0
  222. package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp +162 -0
  223. package/boost/numeric/odeint/stepper/velocity_verlet.hpp +375 -0
  224. package/boost/numeric/odeint/tools/assert.hpp +30 -0
  225. package/boost/numeric/odeint/tools/is_standalone.hpp +21 -0
  226. package/boost/numeric/odeint/tools/traits.hpp +39 -0
  227. package/boost/numeric/odeint/util/bind.hpp +35 -0
  228. package/boost/numeric/odeint/util/copy.hpp +88 -0
  229. package/boost/numeric/odeint/util/detail/is_range.hpp +127 -0
  230. package/boost/numeric/odeint/util/detail/less_with_sign.hpp +78 -0
  231. package/boost/numeric/odeint/util/is_pair.hpp +42 -0
  232. package/boost/numeric/odeint/util/is_resizeable.hpp +84 -0
  233. package/boost/numeric/odeint/util/multi_array_adaption.hpp +131 -0
  234. package/boost/numeric/odeint/util/n_ary_helper.hpp +96 -0
  235. package/boost/numeric/odeint/util/odeint_error.hpp +77 -0
  236. package/boost/numeric/odeint/util/resize.hpp +120 -0
  237. package/boost/numeric/odeint/util/resizer.hpp +94 -0
  238. package/boost/numeric/odeint/util/same_instance.hpp +56 -0
  239. package/boost/numeric/odeint/util/same_size.hpp +117 -0
  240. package/boost/numeric/odeint/util/split.hpp +64 -0
  241. package/boost/numeric/odeint/util/split_adaptor.hpp +103 -0
  242. package/boost/numeric/odeint/util/state_wrapper.hpp +50 -0
  243. package/boost/numeric/odeint/util/stepper_traits.hpp +63 -0
  244. package/boost/numeric/odeint/util/ublas_matrix_expression.patch +6 -0
  245. package/boost/numeric/odeint/util/ublas_wrapper.hpp +297 -0
  246. package/boost/numeric/odeint/util/unit_helper.hpp +151 -0
  247. package/boost/numeric/odeint/util/unwrap_reference.hpp +141 -0
  248. package/boost/numeric/odeint/version.hpp +55 -0
  249. package/boost/numeric/odeint.hpp +87 -0
  250. package/boost/numeric/ublas/assignment.hpp +1288 -0
  251. package/boost/numeric/ublas/banded.hpp +2372 -0
  252. package/boost/numeric/ublas/blas.hpp +499 -0
  253. package/boost/numeric/ublas/detail/concepts.hpp +1465 -0
  254. package/boost/numeric/ublas/detail/config.hpp +304 -0
  255. package/boost/numeric/ublas/detail/definitions.hpp +212 -0
  256. package/boost/numeric/ublas/detail/documentation.hpp +33 -0
  257. package/boost/numeric/ublas/detail/duff.hpp +56 -0
  258. package/boost/numeric/ublas/detail/iterator.hpp +1448 -0
  259. package/boost/numeric/ublas/detail/matrix_assign.hpp +1785 -0
  260. package/boost/numeric/ublas/detail/raw.hpp +878 -0
  261. package/boost/numeric/ublas/detail/returntype_deduction.hpp +174 -0
  262. package/boost/numeric/ublas/detail/temporary.hpp +33 -0
  263. package/boost/numeric/ublas/detail/vector_assign.hpp +609 -0
  264. package/boost/numeric/ublas/doxydoc.hpp +58 -0
  265. package/boost/numeric/ublas/exception.hpp +297 -0
  266. package/boost/numeric/ublas/experimental/sparse_view.hpp +317 -0
  267. package/boost/numeric/ublas/expression_types.hpp +506 -0
  268. package/boost/numeric/ublas/functional.hpp +2112 -0
  269. package/boost/numeric/ublas/fwd.hpp +229 -0
  270. package/boost/numeric/ublas/hermitian.hpp +2633 -0
  271. package/boost/numeric/ublas/io.hpp +355 -0
  272. package/boost/numeric/ublas/lu.hpp +350 -0
  273. package/boost/numeric/ublas/matrix.hpp +6013 -0
  274. package/boost/numeric/ublas/matrix_expression.hpp +5693 -0
  275. package/boost/numeric/ublas/matrix_proxy.hpp +5457 -0
  276. package/boost/numeric/ublas/matrix_sparse.hpp +5773 -0
  277. package/boost/numeric/ublas/matrix_vector.hpp +406 -0
  278. package/boost/numeric/ublas/opencl/elementwise.hpp +508 -0
  279. package/boost/numeric/ublas/opencl/library.hpp +38 -0
  280. package/boost/numeric/ublas/opencl/matrix.hpp +123 -0
  281. package/boost/numeric/ublas/opencl/misc.hpp +182 -0
  282. package/boost/numeric/ublas/opencl/operations.hpp +18 -0
  283. package/boost/numeric/ublas/opencl/prod.hpp +364 -0
  284. package/boost/numeric/ublas/opencl/transpose.hpp +142 -0
  285. package/boost/numeric/ublas/opencl/vector.hpp +90 -0
  286. package/boost/numeric/ublas/opencl.hpp +16 -0
  287. package/boost/numeric/ublas/operation/begin.hpp +318 -0
  288. package/boost/numeric/ublas/operation/c_array.hpp +41 -0
  289. package/boost/numeric/ublas/operation/end.hpp +318 -0
  290. package/boost/numeric/ublas/operation/num_columns.hpp +45 -0
  291. package/boost/numeric/ublas/operation/num_rows.hpp +44 -0
  292. package/boost/numeric/ublas/operation/size.hpp +350 -0
  293. package/boost/numeric/ublas/operation.hpp +830 -0
  294. package/boost/numeric/ublas/operation_blocked.hpp +266 -0
  295. package/boost/numeric/ublas/operation_sparse.hpp +198 -0
  296. package/boost/numeric/ublas/operations.hpp +26 -0
  297. package/boost/numeric/ublas/storage.hpp +2131 -0
  298. package/boost/numeric/ublas/storage_sparse.hpp +578 -0
  299. package/boost/numeric/ublas/symmetric.hpp +2309 -0
  300. package/boost/numeric/ublas/tags.hpp +37 -0
  301. package/boost/numeric/ublas/tensor/algorithms.hpp +345 -0
  302. package/boost/numeric/ublas/tensor/expression.hpp +181 -0
  303. package/boost/numeric/ublas/tensor/expression_evaluation.hpp +288 -0
  304. package/boost/numeric/ublas/tensor/extents.hpp +335 -0
  305. package/boost/numeric/ublas/tensor/functions.hpp +558 -0
  306. package/boost/numeric/ublas/tensor/index.hpp +89 -0
  307. package/boost/numeric/ublas/tensor/multi_index.hpp +110 -0
  308. package/boost/numeric/ublas/tensor/multi_index_utility.hpp +364 -0
  309. package/boost/numeric/ublas/tensor/multiplication.hpp +945 -0
  310. package/boost/numeric/ublas/tensor/operators_arithmetic.hpp +244 -0
  311. package/boost/numeric/ublas/tensor/operators_comparison.hpp +175 -0
  312. package/boost/numeric/ublas/tensor/ostream.hpp +122 -0
  313. package/boost/numeric/ublas/tensor/storage_traits.hpp +84 -0
  314. package/boost/numeric/ublas/tensor/strides.hpp +251 -0
  315. package/boost/numeric/ublas/tensor/tensor.hpp +734 -0
  316. package/boost/numeric/ublas/tensor.hpp +26 -0
  317. package/boost/numeric/ublas/traits/c_array.hpp +110 -0
  318. package/boost/numeric/ublas/traits/const_iterator_type.hpp +127 -0
  319. package/boost/numeric/ublas/traits/iterator_type.hpp +126 -0
  320. package/boost/numeric/ublas/traits.hpp +753 -0
  321. package/boost/numeric/ublas/triangular.hpp +2775 -0
  322. package/boost/numeric/ublas/vector.hpp +2947 -0
  323. package/boost/numeric/ublas/vector_expression.hpp +1762 -0
  324. package/boost/numeric/ublas/vector_of_vector.hpp +1347 -0
  325. package/boost/numeric/ublas/vector_proxy.hpp +1697 -0
  326. package/boost/numeric/ublas/vector_sparse.hpp +2246 -0
  327. package/package.json +3 -7
@@ -0,0 +1,266 @@
1
+ //
2
+ // Copyright (c) 2000-2002
3
+ // Joerg Walter, Mathias Koch
4
+ //
5
+ // Distributed under the Boost Software License, Version 1.0. (See
6
+ // accompanying file LICENSE_1_0.txt or copy at
7
+ // http://www.boost.org/LICENSE_1_0.txt)
8
+ //
9
+ // The authors gratefully acknowledge the support of
10
+ // GeNeSys mbH & Co. KG in producing this work.
11
+ //
12
+
13
+ #ifndef _BOOST_UBLAS_OPERATION_BLOCKED_
14
+ #define _BOOST_UBLAS_OPERATION_BLOCKED_
15
+
16
+ #include <boost/numeric/ublas/traits.hpp>
17
+ #include <boost/numeric/ublas/detail/vector_assign.hpp> // indexing_vector_assign
18
+ #include <boost/numeric/ublas/detail/matrix_assign.hpp> // indexing_matrix_assign
19
+
20
+
21
+ namespace boost { namespace numeric { namespace ublas {
22
+
23
+ template<class V, typename V::size_type BS, class E1, class E2>
24
+ BOOST_UBLAS_INLINE
25
+ V
26
+ block_prod (const matrix_expression<E1> &e1,
27
+ const vector_expression<E2> &e2) {
28
+ typedef V vector_type;
29
+ typedef const E1 expression1_type;
30
+ typedef const E2 expression2_type;
31
+ typedef typename V::size_type size_type;
32
+ typedef typename V::value_type value_type;
33
+ const size_type block_size = BS;
34
+
35
+ V v (e1 ().size1 ());
36
+ #if BOOST_UBLAS_TYPE_CHECK
37
+ vector<value_type> cv (v.size ());
38
+ typedef typename type_traits<value_type>::real_type real_type;
39
+ real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
40
+ indexing_vector_assign<scalar_assign> (cv, prod (e1, e2));
41
+ #endif
42
+ size_type i_size = e1 ().size1 ();
43
+ size_type j_size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size ());
44
+ for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
45
+ size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
46
+ // FIX: never ignore Martin Weiser's advice ;-(
47
+ #ifdef BOOST_UBLAS_NO_CACHE
48
+ vector_range<vector_type> v_range (v, range (i_begin, i_end));
49
+ #else
50
+ // vector<value_type, bounded_array<value_type, block_size> > v_range (i_end - i_begin);
51
+ vector<value_type> v_range (i_end - i_begin);
52
+ #endif
53
+ v_range.assign (zero_vector<value_type> (i_end - i_begin));
54
+ for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
55
+ size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
56
+ #ifdef BOOST_UBLAS_NO_CACHE
57
+ const matrix_range<expression1_type> e1_range (e1 (), range (i_begin, i_end), range (j_begin, j_end));
58
+ const vector_range<expression2_type> e2_range (e2 (), range (j_begin, j_end));
59
+ v_range.plus_assign (prod (e1_range, e2_range));
60
+ #else
61
+ // const matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > e1_range (project (e1 (), range (i_begin, i_end), range (j_begin, j_end)));
62
+ // const vector<value_type, bounded_array<value_type, block_size> > e2_range (project (e2 (), range (j_begin, j_end)));
63
+ const matrix<value_type, row_major> e1_range (project (e1 (), range (i_begin, i_end), range (j_begin, j_end)));
64
+ const vector<value_type> e2_range (project (e2 (), range (j_begin, j_end)));
65
+ v_range.plus_assign (prod (e1_range, e2_range));
66
+ #endif
67
+ }
68
+ #ifndef BOOST_UBLAS_NO_CACHE
69
+ project (v, range (i_begin, i_end)).assign (v_range);
70
+ #endif
71
+ }
72
+ #if BOOST_UBLAS_TYPE_CHECK
73
+ BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
74
+ #endif
75
+ return v;
76
+ }
77
+
78
+ template<class V, typename V::size_type BS, class E1, class E2>
79
+ BOOST_UBLAS_INLINE
80
+ V
81
+ block_prod (const vector_expression<E1> &e1,
82
+ const matrix_expression<E2> &e2) {
83
+ typedef V vector_type;
84
+ typedef const E1 expression1_type;
85
+ typedef const E2 expression2_type;
86
+ typedef typename V::size_type size_type;
87
+ typedef typename V::value_type value_type;
88
+ const size_type block_size = BS;
89
+
90
+ V v (e2 ().size2 ());
91
+ #if BOOST_UBLAS_TYPE_CHECK
92
+ vector<value_type> cv (v.size ());
93
+ typedef typename type_traits<value_type>::real_type real_type;
94
+ real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
95
+ indexing_vector_assign<scalar_assign> (cv, prod (e1, e2));
96
+ #endif
97
+ size_type i_size = BOOST_UBLAS_SAME (e1 ().size (), e2 ().size1 ());
98
+ size_type j_size = e2 ().size2 ();
99
+ for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
100
+ size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
101
+ // FIX: never ignore Martin Weiser's advice ;-(
102
+ #ifdef BOOST_UBLAS_NO_CACHE
103
+ vector_range<vector_type> v_range (v, range (j_begin, j_end));
104
+ #else
105
+ // vector<value_type, bounded_array<value_type, block_size> > v_range (j_end - j_begin);
106
+ vector<value_type> v_range (j_end - j_begin);
107
+ #endif
108
+ v_range.assign (zero_vector<value_type> (j_end - j_begin));
109
+ for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
110
+ size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
111
+ #ifdef BOOST_UBLAS_NO_CACHE
112
+ const vector_range<expression1_type> e1_range (e1 (), range (i_begin, i_end));
113
+ const matrix_range<expression2_type> e2_range (e2 (), range (i_begin, i_end), range (j_begin, j_end));
114
+ #else
115
+ // const vector<value_type, bounded_array<value_type, block_size> > e1_range (project (e1 (), range (i_begin, i_end)));
116
+ // const matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > e2_range (project (e2 (), range (i_begin, i_end), range (j_begin, j_end)));
117
+ const vector<value_type> e1_range (project (e1 (), range (i_begin, i_end)));
118
+ const matrix<value_type, column_major> e2_range (project (e2 (), range (i_begin, i_end), range (j_begin, j_end)));
119
+ #endif
120
+ v_range.plus_assign (prod (e1_range, e2_range));
121
+ }
122
+ #ifndef BOOST_UBLAS_NO_CACHE
123
+ project (v, range (j_begin, j_end)).assign (v_range);
124
+ #endif
125
+ }
126
+ #if BOOST_UBLAS_TYPE_CHECK
127
+ BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
128
+ #endif
129
+ return v;
130
+ }
131
+
132
+ template<class M, typename M::size_type BS, class E1, class E2>
133
+ BOOST_UBLAS_INLINE
134
+ M
135
+ block_prod (const matrix_expression<E1> &e1,
136
+ const matrix_expression<E2> &e2,
137
+ row_major_tag) {
138
+ typedef M matrix_type;
139
+ typedef const E1 expression1_type;
140
+ typedef const E2 expression2_type;
141
+ typedef typename M::size_type size_type;
142
+ typedef typename M::value_type value_type;
143
+ const size_type block_size = BS;
144
+
145
+ M m (e1 ().size1 (), e2 ().size2 ());
146
+ #if BOOST_UBLAS_TYPE_CHECK
147
+ matrix<value_type, row_major> cm (m.size1 (), m.size2 ());
148
+ typedef typename type_traits<value_type>::real_type real_type;
149
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
150
+ indexing_matrix_assign<scalar_assign> (cm, prod (e1, e2), row_major_tag ());
151
+ disable_type_check<bool>::value = true;
152
+ #endif
153
+ size_type i_size = e1 ().size1 ();
154
+ size_type j_size = e2 ().size2 ();
155
+ size_type k_size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ());
156
+ for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
157
+ size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
158
+ for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
159
+ size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
160
+ // FIX: never ignore Martin Weiser's advice ;-(
161
+ #ifdef BOOST_UBLAS_NO_CACHE
162
+ matrix_range<matrix_type> m_range (m, range (i_begin, i_end), range (j_begin, j_end));
163
+ #else
164
+ // matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > m_range (i_end - i_begin, j_end - j_begin);
165
+ matrix<value_type, row_major> m_range (i_end - i_begin, j_end - j_begin);
166
+ #endif
167
+ m_range.assign (zero_matrix<value_type> (i_end - i_begin, j_end - j_begin));
168
+ for (size_type k_begin = 0; k_begin < k_size; k_begin += block_size) {
169
+ size_type k_end = k_begin + (std::min) (k_size - k_begin, block_size);
170
+ #ifdef BOOST_UBLAS_NO_CACHE
171
+ const matrix_range<expression1_type> e1_range (e1 (), range (i_begin, i_end), range (k_begin, k_end));
172
+ const matrix_range<expression2_type> e2_range (e2 (), range (k_begin, k_end), range (j_begin, j_end));
173
+ #else
174
+ // const matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
175
+ // const matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
176
+ const matrix<value_type, row_major> e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
177
+ const matrix<value_type, column_major> e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
178
+ #endif
179
+ m_range.plus_assign (prod (e1_range, e2_range));
180
+ }
181
+ #ifndef BOOST_UBLAS_NO_CACHE
182
+ project (m, range (i_begin, i_end), range (j_begin, j_end)).assign (m_range);
183
+ #endif
184
+ }
185
+ }
186
+ #if BOOST_UBLAS_TYPE_CHECK
187
+ disable_type_check<bool>::value = false;
188
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
189
+ #endif
190
+ return m;
191
+ }
192
+
193
+ template<class M, typename M::size_type BS, class E1, class E2>
194
+ BOOST_UBLAS_INLINE
195
+ M
196
+ block_prod (const matrix_expression<E1> &e1,
197
+ const matrix_expression<E2> &e2,
198
+ column_major_tag) {
199
+ typedef M matrix_type;
200
+ typedef const E1 expression1_type;
201
+ typedef const E2 expression2_type;
202
+ typedef typename M::size_type size_type;
203
+ typedef typename M::value_type value_type;
204
+ const size_type block_size = BS;
205
+
206
+ M m (e1 ().size1 (), e2 ().size2 ());
207
+ #if BOOST_UBLAS_TYPE_CHECK
208
+ matrix<value_type, column_major> cm (m.size1 (), m.size2 ());
209
+ typedef typename type_traits<value_type>::real_type real_type;
210
+ real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
211
+ indexing_matrix_assign<scalar_assign> (cm, prod (e1, e2), column_major_tag ());
212
+ disable_type_check<bool>::value = true;
213
+ #endif
214
+ size_type i_size = e1 ().size1 ();
215
+ size_type j_size = e2 ().size2 ();
216
+ size_type k_size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ());
217
+ for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
218
+ size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
219
+ for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
220
+ size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
221
+ // FIX: never ignore Martin Weiser's advice ;-(
222
+ #ifdef BOOST_UBLAS_NO_CACHE
223
+ matrix_range<matrix_type> m_range (m, range (i_begin, i_end), range (j_begin, j_end));
224
+ #else
225
+ // matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > m_range (i_end - i_begin, j_end - j_begin);
226
+ matrix<value_type, column_major> m_range (i_end - i_begin, j_end - j_begin);
227
+ #endif
228
+ m_range.assign (zero_matrix<value_type> (i_end - i_begin, j_end - j_begin));
229
+ for (size_type k_begin = 0; k_begin < k_size; k_begin += block_size) {
230
+ size_type k_end = k_begin + (std::min) (k_size - k_begin, block_size);
231
+ #ifdef BOOST_UBLAS_NO_CACHE
232
+ const matrix_range<expression1_type> e1_range (e1 (), range (i_begin, i_end), range (k_begin, k_end));
233
+ const matrix_range<expression2_type> e2_range (e2 (), range (k_begin, k_end), range (j_begin, j_end));
234
+ #else
235
+ // const matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
236
+ // const matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
237
+ const matrix<value_type, row_major> e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
238
+ const matrix<value_type, column_major> e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
239
+ #endif
240
+ m_range.plus_assign (prod (e1_range, e2_range));
241
+ }
242
+ #ifndef BOOST_UBLAS_NO_CACHE
243
+ project (m, range (i_begin, i_end), range (j_begin, j_end)).assign (m_range);
244
+ #endif
245
+ }
246
+ }
247
+ #if BOOST_UBLAS_TYPE_CHECK
248
+ disable_type_check<bool>::value = false;
249
+ BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
250
+ #endif
251
+ return m;
252
+ }
253
+
254
+ // Dispatcher
255
+ template<class M, typename M::size_type BS, class E1, class E2>
256
+ BOOST_UBLAS_INLINE
257
+ M
258
+ block_prod (const matrix_expression<E1> &e1,
259
+ const matrix_expression<E2> &e2) {
260
+ typedef typename M::orientation_category orientation_category;
261
+ return block_prod<M, BS> (e1, e2, orientation_category ());
262
+ }
263
+
264
+ }}}
265
+
266
+ #endif
@@ -0,0 +1,198 @@
1
+ //
2
+ // Copyright (c) 2000-2002
3
+ // Joerg Walter, Mathias Koch
4
+ //
5
+ // Distributed under the Boost Software License, Version 1.0. (See
6
+ // accompanying file LICENSE_1_0.txt or copy at
7
+ // http://www.boost.org/LICENSE_1_0.txt)
8
+ //
9
+ // The authors gratefully acknowledge the support of
10
+ // GeNeSys mbH & Co. KG in producing this work.
11
+ //
12
+
13
+ #ifndef _BOOST_UBLAS_OPERATION_SPARSE_
14
+ #define _BOOST_UBLAS_OPERATION_SPARSE_
15
+
16
+ #include <boost/numeric/ublas/traits.hpp>
17
+
18
+ // These scaled additions were borrowed from MTL unashamedly.
19
+ // But Alexei Novakov had a lot of ideas to improve these. Thanks.
20
+
21
+ namespace boost { namespace numeric { namespace ublas {
22
+
23
+ template<class M, class E1, class E2, class TRI>
24
+ BOOST_UBLAS_INLINE
25
+ M &
26
+ sparse_prod (const matrix_expression<E1> &e1,
27
+ const matrix_expression<E2> &e2,
28
+ M &m, TRI,
29
+ row_major_tag) {
30
+ typedef M matrix_type;
31
+ typedef TRI triangular_restriction;
32
+ typedef const E1 expression1_type;
33
+ typedef const E2 expression2_type;
34
+ typedef typename M::size_type size_type;
35
+ typedef typename M::value_type value_type;
36
+
37
+ // ISSUE why is there a dense vector here?
38
+ vector<value_type> temporary (e2 ().size2 ());
39
+ temporary.clear ();
40
+ typename expression1_type::const_iterator1 it1 (e1 ().begin1 ());
41
+ typename expression1_type::const_iterator1 it1_end (e1 ().end1 ());
42
+ while (it1 != it1_end) {
43
+ size_type jb (temporary.size ());
44
+ size_type je (0);
45
+ #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
46
+ typename expression1_type::const_iterator2 it2 (it1.begin ());
47
+ typename expression1_type::const_iterator2 it2_end (it1.end ());
48
+ #else
49
+ typename expression1_type::const_iterator2 it2 (boost::numeric::ublas::begin (it1, iterator1_tag ()));
50
+ typename expression1_type::const_iterator2 it2_end (boost::numeric::ublas::end (it1, iterator1_tag ()));
51
+ #endif
52
+ while (it2 != it2_end) {
53
+ // temporary.plus_assign (*it2 * row (e2 (), it2.index2 ()));
54
+ matrix_row<expression2_type> mr (e2 (), it2.index2 ());
55
+ typename matrix_row<expression2_type>::const_iterator itr (mr.begin ());
56
+ typename matrix_row<expression2_type>::const_iterator itr_end (mr.end ());
57
+ while (itr != itr_end) {
58
+ size_type j (itr.index ());
59
+ temporary (j) += *it2 * *itr;
60
+ jb = (std::min) (jb, j);
61
+ je = (std::max) (je, j);
62
+ ++ itr;
63
+ }
64
+ ++ it2;
65
+ }
66
+ for (size_type j = jb; j < je + 1; ++ j) {
67
+ if (temporary (j) != value_type/*zero*/()) {
68
+ // FIXME we'll need to extend the container interface!
69
+ // m.push_back (it1.index1 (), j, temporary (j));
70
+ // FIXME What to do with adaptors?
71
+ // m.insert (it1.index1 (), j, temporary (j));
72
+ if (triangular_restriction::other (it1.index1 (), j))
73
+ m (it1.index1 (), j) = temporary (j);
74
+ temporary (j) = value_type/*zero*/();
75
+ }
76
+ }
77
+ ++ it1;
78
+ }
79
+ return m;
80
+ }
81
+
82
+ template<class M, class E1, class E2, class TRI>
83
+ BOOST_UBLAS_INLINE
84
+ M &
85
+ sparse_prod (const matrix_expression<E1> &e1,
86
+ const matrix_expression<E2> &e2,
87
+ M &m, TRI,
88
+ column_major_tag) {
89
+ typedef M matrix_type;
90
+ typedef TRI triangular_restriction;
91
+ typedef const E1 expression1_type;
92
+ typedef const E2 expression2_type;
93
+ typedef typename M::size_type size_type;
94
+ typedef typename M::value_type value_type;
95
+
96
+ // ISSUE why is there a dense vector here?
97
+ vector<value_type> temporary (e1 ().size1 ());
98
+ temporary.clear ();
99
+ typename expression2_type::const_iterator2 it2 (e2 ().begin2 ());
100
+ typename expression2_type::const_iterator2 it2_end (e2 ().end2 ());
101
+ while (it2 != it2_end) {
102
+ size_type ib (temporary.size ());
103
+ size_type ie (0);
104
+ #ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
105
+ typename expression2_type::const_iterator1 it1 (it2.begin ());
106
+ typename expression2_type::const_iterator1 it1_end (it2.end ());
107
+ #else
108
+ typename expression2_type::const_iterator1 it1 (boost::numeric::ublas::begin (it2, iterator2_tag ()));
109
+ typename expression2_type::const_iterator1 it1_end (boost::numeric::ublas::end (it2, iterator2_tag ()));
110
+ #endif
111
+ while (it1 != it1_end) {
112
+ // column (m, it2.index2 ()).plus_assign (*it1 * column (e1 (), it1.index1 ()));
113
+ matrix_column<expression1_type> mc (e1 (), it1.index1 ());
114
+ typename matrix_column<expression1_type>::const_iterator itc (mc.begin ());
115
+ typename matrix_column<expression1_type>::const_iterator itc_end (mc.end ());
116
+ while (itc != itc_end) {
117
+ size_type i (itc.index ());
118
+ temporary (i) += *it1 * *itc;
119
+ ib = (std::min) (ib, i);
120
+ ie = (std::max) (ie, i);
121
+ ++ itc;
122
+ }
123
+ ++ it1;
124
+ }
125
+ for (size_type i = ib; i < ie + 1; ++ i) {
126
+ if (temporary (i) != value_type/*zero*/()) {
127
+ // FIXME we'll need to extend the container interface!
128
+ // m.push_back (i, it2.index2 (), temporary (i));
129
+ // FIXME What to do with adaptors?
130
+ // m.insert (i, it2.index2 (), temporary (i));
131
+ if (triangular_restriction::other (i, it2.index2 ()))
132
+ m (i, it2.index2 ()) = temporary (i);
133
+ temporary (i) = value_type/*zero*/();
134
+ }
135
+ }
136
+ ++ it2;
137
+ }
138
+ return m;
139
+ }
140
+
141
+ // Dispatcher
142
+ template<class M, class E1, class E2, class TRI>
143
+ BOOST_UBLAS_INLINE
144
+ M &
145
+ sparse_prod (const matrix_expression<E1> &e1,
146
+ const matrix_expression<E2> &e2,
147
+ M &m, TRI, bool init = true) {
148
+ typedef typename M::value_type value_type;
149
+ typedef TRI triangular_restriction;
150
+ typedef typename M::orientation_category orientation_category;
151
+
152
+ if (init)
153
+ m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
154
+ return sparse_prod (e1, e2, m, triangular_restriction (), orientation_category ());
155
+ }
156
+ template<class M, class E1, class E2, class TRI>
157
+ BOOST_UBLAS_INLINE
158
+ M
159
+ sparse_prod (const matrix_expression<E1> &e1,
160
+ const matrix_expression<E2> &e2,
161
+ TRI) {
162
+ typedef M matrix_type;
163
+ typedef TRI triangular_restriction;
164
+
165
+ matrix_type m (e1 ().size1 (), e2 ().size2 ());
166
+ // FIXME needed for c_matrix?!
167
+ // return sparse_prod (e1, e2, m, triangular_restriction (), false);
168
+ return sparse_prod (e1, e2, m, triangular_restriction (), true);
169
+ }
170
+ template<class M, class E1, class E2>
171
+ BOOST_UBLAS_INLINE
172
+ M &
173
+ sparse_prod (const matrix_expression<E1> &e1,
174
+ const matrix_expression<E2> &e2,
175
+ M &m, bool init = true) {
176
+ typedef typename M::value_type value_type;
177
+ typedef typename M::orientation_category orientation_category;
178
+
179
+ if (init)
180
+ m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
181
+ return sparse_prod (e1, e2, m, full (), orientation_category ());
182
+ }
183
+ template<class M, class E1, class E2>
184
+ BOOST_UBLAS_INLINE
185
+ M
186
+ sparse_prod (const matrix_expression<E1> &e1,
187
+ const matrix_expression<E2> &e2) {
188
+ typedef M matrix_type;
189
+
190
+ matrix_type m (e1 ().size1 (), e2 ().size2 ());
191
+ // FIXME needed for c_matrix?!
192
+ // return sparse_prod (e1, e2, m, full (), false);
193
+ return sparse_prod (e1, e2, m, full (), true);
194
+ }
195
+
196
+ }}}
197
+
198
+ #endif
@@ -0,0 +1,26 @@
1
+ /**
2
+ * -*- c++ -*-
3
+ *
4
+ * \file operations.hpp
5
+ *
6
+ * \brief This header includes several headers from the operation directory.
7
+ *
8
+ * Copyright (c) 2009, Gunter Winkler
9
+ *
10
+ * Distributed under the Boost Software License, Version 1.0. (See
11
+ * accompanying file LICENSE_1_0.txt or copy at
12
+ * http://www.boost.org/LICENSE_1_0.txt)
13
+ *
14
+ * \author Gunter Winkler (guwi17 at gmx dot de)
15
+ */
16
+
17
+ #ifndef BOOST_NUMERIC_UBLAS_OPERATIONS_HPP
18
+ #define BOOST_NUMERIC_UBLAS_OPERATIONS_HPP
19
+
20
+ #include <boost/numeric/ublas/operation/begin.hpp>
21
+ #include <boost/numeric/ublas/operation/end.hpp>
22
+ #include <boost/numeric/ublas/operation/num_columns.hpp>
23
+ #include <boost/numeric/ublas/operation/num_rows.hpp>
24
+ #include <boost/numeric/ublas/operation/size.hpp>
25
+
26
+ #endif