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,37 @@
1
+ /**
2
+ * -*- c++ -*-
3
+ *
4
+ * \file tags.hpp
5
+ *
6
+ * \brief Tags.
7
+ *
8
+ * Copyright (c) 2009, Marco Guazzone
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 Marco Guazzone, marco.guazzone@gmail.com
15
+ */
16
+
17
+ #ifndef BOOST_NUMERIC_UBLAS_TAG_HPP
18
+ #define BOOST_NUMERIC_UBLAS_TAG_HPP
19
+
20
+
21
+ namespace boost { namespace numeric { namespace ublas { namespace tag {
22
+
23
+ /// \brief Tag for the major dimension.
24
+ struct major {};
25
+
26
+
27
+ /// \brief Tag for the minor dimension.
28
+ struct minor {};
29
+
30
+
31
+ /// \brief Tag for the leading dimension.
32
+ struct leading {};
33
+
34
+ }}}} // Namespace boost::numeric::ublas::tag
35
+
36
+
37
+ #endif // BOOST_NUMERIC_UBLAS_TAG_HPP
@@ -0,0 +1,345 @@
1
+ //
2
+ // Copyright (c) 2018-2019, Cem Bassoy, cem.bassoy@gmail.com
3
+ //
4
+ // Distributed under the Boost Software License, Version 1.0. (See
5
+ // accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ // The authors gratefully acknowledge the support of
9
+ // Fraunhofer IOSB, Ettlingen, Germany
10
+ //
11
+
12
+
13
+ #ifndef _BOOST_UBLAS_TENSOR_ALGORITHMS_HPP
14
+ #define _BOOST_UBLAS_TENSOR_ALGORITHMS_HPP
15
+
16
+
17
+ #include <stdexcept>
18
+ #include <complex>
19
+ #include <functional>
20
+
21
+ namespace boost {
22
+ namespace numeric {
23
+ namespace ublas {
24
+
25
+
26
+
27
+ /** @brief Copies a tensor to another tensor with different layouts
28
+ *
29
+ * Implements C[i1,i2,...,ip] = A[i1,i2,...,ip]
30
+ *
31
+ * @param[in] p rank of input and output tensor
32
+ * @param[in] n pointer to the extents of input or output tensor of length p
33
+ * @param[in] pi pointer to a one-based permutation tuple of length p
34
+ * @param[out] c pointer to the output tensor
35
+ * @param[in] wc pointer to the strides of output tensor c
36
+ * @param[in] a pointer to the input tensor
37
+ * @param[in] wa pointer to the strides of input tensor a
38
+ */
39
+ template <class PointerOut, class PointerIn, class SizeType>
40
+ void copy(const SizeType p, SizeType const*const n,
41
+ PointerOut c, SizeType const*const wc,
42
+ PointerIn a, SizeType const*const wa)
43
+ {
44
+ static_assert( std::is_pointer<PointerOut>::value & std::is_pointer<PointerIn>::value,
45
+ "Static error in boost::numeric::ublas::copy: Argument types for pointers are not pointer types.");
46
+ if( p == 0 )
47
+ return;
48
+
49
+ if(c == nullptr || a == nullptr)
50
+ throw std::length_error("Error in boost::numeric::ublas::copy: Pointers shall not be null pointers.");
51
+
52
+ if(wc == nullptr || wa == nullptr)
53
+ throw std::length_error("Error in boost::numeric::ublas::copy: Pointers shall not be null pointers.");
54
+
55
+ if(n == nullptr)
56
+ throw std::length_error("Error in boost::numeric::ublas::copy: Pointers shall not be null pointers.");
57
+
58
+
59
+ std::function<void(SizeType r, PointerOut c, PointerIn a)> lambda;
60
+
61
+ lambda = [&lambda, n, wc, wa](SizeType r, PointerOut c, PointerIn a)
62
+ {
63
+ if(r > 0)
64
+ for(auto d = 0u; d < n[r]; c += wc[r], a += wa[r], ++d)
65
+ lambda(r-1, c, a );
66
+ else
67
+ for(auto d = 0u; d < n[0]; c += wc[0], a += wa[0], ++d)
68
+ *c = *a;
69
+ };
70
+
71
+ lambda( p-1, c, a );
72
+ }
73
+
74
+
75
+
76
+ /** @brief Copies a tensor to another tensor with different layouts applying a unary operation
77
+ *
78
+ * Implements C[i1,i2,...,ip] = op ( A[i1,i2,...,ip] )
79
+ *
80
+ * @param[in] p rank of input and output tensor
81
+ * @param[in] n pointer to the extents of input or output tensor of length p
82
+ * @param[in] pi pointer to a one-based permutation tuple of length p
83
+ * @param[out] c pointer to the output tensor
84
+ * @param[in] wc pointer to the strides of output tensor c
85
+ * @param[in] a pointer to the input tensor
86
+ * @param[in] wa pointer to the strides of input tensor a
87
+ * @param[in] op unary operation
88
+ */
89
+ template <class PointerOut, class PointerIn, class SizeType, class UnaryOp>
90
+ void transform(const SizeType p,
91
+ SizeType const*const n,
92
+ PointerOut c, SizeType const*const wc,
93
+ PointerIn a, SizeType const*const wa,
94
+ UnaryOp op)
95
+ {
96
+ static_assert( std::is_pointer<PointerOut>::value & std::is_pointer<PointerIn>::value,
97
+ "Static error in boost::numeric::ublas::transform: Argument types for pointers are not pointer types.");
98
+ if( p == 0 )
99
+ return;
100
+
101
+ if(c == nullptr || a == nullptr)
102
+ throw std::length_error("Error in boost::numeric::ublas::transform: Pointers shall not be null pointers.");
103
+
104
+ if(wc == nullptr || wa == nullptr)
105
+ throw std::length_error("Error in boost::numeric::ublas::transform: Pointers shall not be null pointers.");
106
+
107
+ if(n == nullptr)
108
+ throw std::length_error("Error in boost::numeric::ublas::transform: Pointers shall not be null pointers.");
109
+
110
+
111
+ std::function<void(SizeType r, PointerOut c, PointerIn a)> lambda;
112
+
113
+ lambda = [&lambda, n, wc, wa, op](SizeType r, PointerOut c, PointerIn a)
114
+ {
115
+ if(r > 0)
116
+ for(auto d = 0u; d < n[r]; c += wc[r], a += wa[r], ++d)
117
+ lambda(r-1, c, a);
118
+ else
119
+ for(auto d = 0u; d < n[0]; c += wc[0], a += wa[0], ++d)
120
+ *c = op(*a);
121
+ };
122
+
123
+ lambda( p-1, c, a );
124
+
125
+ }
126
+
127
+
128
+ /** @brief Performs a reduce operation with all elements of the tensor and an initial value
129
+ *
130
+ * Implements k = sum_{i1,..,ip} A[i1,i2,...,ip]
131
+ *
132
+ * @param[in] r zero-based recursion level starting with r=p-1
133
+ * @param[in] n pointer to the extents of input or output tensor
134
+ * @param[in] a pointer to the first input tensor
135
+ * @param[in] w pointer to the strides of input tensor a
136
+ * @param[in] k accumulated value
137
+ */
138
+ template <class PointerIn, class ValueType, class SizeType>
139
+ ValueType accumulate(SizeType const p, SizeType const*const n,
140
+ PointerIn a, SizeType const*const w,
141
+ ValueType k)
142
+ {
143
+ static_assert(std::is_pointer<PointerIn>::value,
144
+ "Static error in boost::numeric::ublas::transform: Argument types for pointers are not pointer types.");
145
+
146
+ if( p == 0 )
147
+ return k;
148
+
149
+ if(a == nullptr)
150
+ throw std::length_error("Error in boost::numeric::ublas::transform: Pointers shall not be null pointers.");
151
+
152
+ if(w == nullptr)
153
+ throw std::length_error("Error in boost::numeric::ublas::transform: Pointers shall not be null pointers.");
154
+
155
+ if(n == nullptr)
156
+ throw std::length_error("Error in boost::numeric::ublas::transform: Pointers shall not be null pointers.");
157
+
158
+
159
+ std::function<ValueType(SizeType r, PointerIn a, ValueType k)> lambda;
160
+
161
+ lambda = [&lambda, n, w](SizeType r, PointerIn a, ValueType k)
162
+ {
163
+ if(r > 0u)
164
+ for(auto d = 0u; d < n[r]; a += w[r], ++d)
165
+ k = lambda(r-1, a, k);
166
+ else
167
+ for(auto d = 0u; d < n[0]; a += w[0], ++d)
168
+ k += *a;
169
+ return k;
170
+ };
171
+
172
+ return lambda( p-1, a, k );
173
+ }
174
+
175
+ /** @brief Performs a reduce operation with all elements of the tensor and an initial value
176
+ *
177
+ * Implements k = op ( k , A[i1,i2,...,ip] ), for all ir
178
+ *
179
+ * @param[in] r zero-based recursion level starting with r=p-1
180
+ * @param[in] n pointer to the extents of input or output tensor
181
+ * @param[in] a pointer to the first input tensor
182
+ * @param[in] w pointer to the strides of input tensor a
183
+ * @param[in] k accumulated value
184
+ * @param[in] op binary operation
185
+ */
186
+
187
+ template <class PointerIn, class ValueType, class SizeType, class BinaryOp>
188
+ ValueType accumulate(SizeType const p, SizeType const*const n,
189
+ PointerIn a, SizeType const*const w,
190
+ ValueType k, BinaryOp op)
191
+ {
192
+ static_assert(std::is_pointer<PointerIn>::value,
193
+ "Static error in boost::numeric::ublas::transform: Argument types for pointers are not pointer types.");
194
+
195
+
196
+ if( p == 0 )
197
+ return k;
198
+
199
+ if(a == nullptr)
200
+ throw std::length_error("Error in boost::numeric::ublas::transform: Pointers shall not be null pointers.");
201
+
202
+ if(w == nullptr)
203
+ throw std::length_error("Error in boost::numeric::ublas::transform: Pointers shall not be null pointers.");
204
+
205
+ if(n == nullptr)
206
+ throw std::length_error("Error in boost::numeric::ublas::transform: Pointers shall not be null pointers.");
207
+
208
+
209
+ std::function<ValueType(SizeType r, PointerIn a, ValueType k)> lambda;
210
+
211
+ lambda = [&lambda, n, w, op](SizeType r, PointerIn a, ValueType k)
212
+ {
213
+ if(r > 0u)
214
+ for(auto d = 0u; d < n[r]; a += w[r], ++d)
215
+ k = lambda(r-1, a, k);
216
+ else
217
+ for(auto d = 0u; d < n[0]; a += w[0], ++d)
218
+ k = op ( k, *a );
219
+ return k;
220
+ };
221
+
222
+ return lambda( p-1, a, k );
223
+ }
224
+
225
+ /** @brief Transposes a tensor
226
+ *
227
+ * Implements C[tau[i1],tau[i2],...,tau[ip]] = A[i1,i2,...,ip]
228
+ *
229
+ * @note is used in function trans
230
+ *
231
+ * @param[in] p rank of input and output tensor
232
+ * @param[in] na pointer to the extents of the input tensor a of length p
233
+ * @param[in] pi pointer to a one-based permutation tuple of length p
234
+ * @param[out] c pointer to the output tensor
235
+ * @param[in] wc pointer to the strides of output tensor c
236
+ * @param[in] a pointer to the input tensor
237
+ * @param[in] wa pointer to the strides of input tensor a
238
+ */
239
+
240
+ template <class PointerOut, class PointerIn, class SizeType>
241
+ void trans( SizeType const p, SizeType const*const na, SizeType const*const pi,
242
+ PointerOut c, SizeType const*const wc,
243
+ PointerIn a, SizeType const*const wa)
244
+ {
245
+
246
+ static_assert( std::is_pointer<PointerOut>::value & std::is_pointer<PointerIn>::value,
247
+ "Static error in boost::numeric::ublas::trans: Argument types for pointers are not pointer types.");
248
+
249
+ if( p < 2)
250
+ return;
251
+
252
+ if(c == nullptr || a == nullptr)
253
+ throw std::runtime_error("Error in boost::numeric::ublas::trans: Pointers shall not be null pointers.");
254
+
255
+ if(na == nullptr)
256
+ throw std::runtime_error("Error in boost::numeric::ublas::trans: Pointers shall not be null.");
257
+
258
+ if(wc == nullptr || wa == nullptr)
259
+ throw std::length_error("Error in boost::numeric::ublas::trans: Pointers shall not be null pointers.");
260
+
261
+ if(na == nullptr)
262
+ throw std::length_error("Error in boost::numeric::ublas::trans: Pointers shall not be null pointers.");
263
+
264
+ if(pi == nullptr)
265
+ throw std::length_error("Error in boost::numeric::ublas::trans: Pointers shall not be null pointers.");
266
+
267
+
268
+ std::function<void(SizeType r, PointerOut c, PointerIn a)> lambda;
269
+
270
+ lambda = [&lambda, na, wc, wa, pi](SizeType r, PointerOut c, PointerIn a)
271
+ {
272
+ if(r > 0)
273
+ for(auto d = 0u; d < na[r]; c += wc[pi[r]-1], a += wa[r], ++d)
274
+ lambda(r-1, c, a);
275
+ else
276
+ for(auto d = 0u; d < na[0]; c += wc[pi[0]-1], a += wa[0], ++d)
277
+ *c = *a;
278
+ };
279
+
280
+ lambda( p-1, c, a );
281
+ }
282
+
283
+
284
+ /** @brief Transposes a tensor
285
+ *
286
+ * Implements C[tau[i1],tau[i2],...,tau[ip]] = A[i1,i2,...,ip]
287
+ *
288
+ * @note is used in function trans
289
+ *
290
+ * @param[in] p rank of input and output tensor
291
+ * @param[in] na pointer to the extents of the input tensor a of length p
292
+ * @param[in] pi pointer to a one-based permutation tuple of length p
293
+ * @param[out] c pointer to the output tensor
294
+ * @param[in] wc pointer to the strides of output tensor c
295
+ * @param[in] a pointer to the input tensor
296
+ * @param[in] wa pointer to the strides of input tensor a
297
+ */
298
+
299
+ template <class ValueType, class SizeType>
300
+ void trans( SizeType const p,
301
+ SizeType const*const na,
302
+ SizeType const*const pi,
303
+ std::complex<ValueType>* c, SizeType const*const wc,
304
+ std::complex<ValueType>* a, SizeType const*const wa)
305
+ {
306
+ if( p < 2)
307
+ return;
308
+
309
+ if(c == nullptr || a == nullptr)
310
+ throw std::length_error("Error in boost::numeric::ublas::trans: Pointers shall not be null pointers.");
311
+
312
+ if(wc == nullptr || wa == nullptr)
313
+ throw std::length_error("Error in boost::numeric::ublas::trans: Pointers shall not be null pointers.");
314
+
315
+ if(na == nullptr)
316
+ throw std::length_error("Error in boost::numeric::ublas::trans: Pointers shall not be null pointers.");
317
+
318
+ if(pi == nullptr)
319
+ throw std::length_error("Error in boost::numeric::ublas::trans: Pointers shall not be null pointers.");
320
+
321
+
322
+ std::function<void(SizeType r, std::complex<ValueType>* c, std::complex<ValueType>* a)> lambda;
323
+
324
+ lambda = [&lambda, na, wc, wa, pi](SizeType r, std::complex<ValueType>* c, std::complex<ValueType>* a)
325
+ {
326
+ if(r > 0)
327
+ for(auto d = 0u; d < na[r]; c += wc[pi[r]-1], a += wa[r], ++d)
328
+ lambda(r-1, c, a);
329
+ else
330
+ for(auto d = 0u; d < na[0]; c += wc[pi[0]-1], a += wa[0], ++d)
331
+ *c = std::conj(*a);
332
+ };
333
+
334
+ lambda( p-1, c, a );
335
+
336
+ }
337
+
338
+
339
+
340
+
341
+ }
342
+ }
343
+ }
344
+
345
+ #endif
@@ -0,0 +1,181 @@
1
+ //
2
+ // Copyright (c) 2018-2019, Cem Bassoy, cem.bassoy@gmail.com
3
+ //
4
+ // Distributed under the Boost Software License, Version 1.0. (See
5
+ // accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ // The authors gratefully acknowledge the support of
9
+ // Fraunhofer IOSB, Ettlingen, Germany
10
+ //
11
+
12
+ #ifndef BOOST_UBLAS_TENSOR_EXPRESSIONS_HPP
13
+ #define BOOST_UBLAS_TENSOR_EXPRESSIONS_HPP
14
+
15
+ #include <cstddef>
16
+ #include <boost/numeric/ublas/expression_types.hpp>
17
+
18
+
19
+ namespace boost {
20
+ namespace numeric {
21
+ namespace ublas {
22
+
23
+
24
+ template<class element_type, class storage_format, class storage_type>
25
+ class tensor;
26
+
27
+ template<class size_type>
28
+ class basic_extents;
29
+
30
+
31
+ //TODO: put in fwd.hpp
32
+ struct tensor_tag {};
33
+
34
+ }
35
+ }
36
+ }
37
+
38
+ namespace boost {
39
+ namespace numeric {
40
+ namespace ublas {
41
+ namespace detail {
42
+
43
+ /** @\brief base class for tensor expressions
44
+ *
45
+ * \note implements crtp - no use of virtual function calls
46
+ *
47
+ * \tparam T type of the tensor
48
+ * \tparam E type of the derived expression (crtp)
49
+ *
50
+ **/
51
+ template<class T, class E>
52
+ struct tensor_expression
53
+ : public ublas_expression<E>
54
+ {
55
+ // static const unsigned complexity = 0;
56
+ using expression_type = E;
57
+ using type_category = tensor_tag;
58
+ using tensor_type = T;
59
+
60
+ BOOST_UBLAS_INLINE
61
+ auto const& operator()() const { return *static_cast<const expression_type*> (this); }
62
+
63
+ protected :
64
+ explicit tensor_expression() = default;
65
+ tensor_expression(const tensor_expression&) = delete;
66
+ tensor_expression& operator=(const tensor_expression&) = delete;
67
+ };
68
+
69
+
70
+ template<class T, class EL, class ER, class OP>
71
+ struct binary_tensor_expression
72
+ : public tensor_expression <T, binary_tensor_expression<T,EL,ER,OP>>
73
+ {
74
+ using self_type = binary_tensor_expression<T,EL,ER,OP>;
75
+ using tensor_type = T;
76
+ using binary_operation = OP;
77
+ using expression_type_left = EL;
78
+ using expression_type_right = ER;
79
+ using derived_type = tensor_expression <tensor_type,self_type>;
80
+
81
+ using size_type = typename tensor_type::size_type;
82
+
83
+ explicit binary_tensor_expression(expression_type_left const& l, expression_type_right const& r, binary_operation o)
84
+ : el(l) , er(r) , op(o) {}
85
+ binary_tensor_expression() = delete;
86
+ binary_tensor_expression(const binary_tensor_expression& l) = delete;
87
+ binary_tensor_expression(binary_tensor_expression&& l)
88
+ : el(l.el), er(l.er), op(l.op) {}
89
+
90
+ BOOST_UBLAS_INLINE
91
+ decltype(auto) operator()(size_type i) const { return op(el(i), er(i)); }
92
+
93
+ expression_type_left const& el;
94
+ expression_type_right const& er;
95
+ binary_operation op;
96
+ };
97
+
98
+ /// @brief helper function to simply instantiation of lambda proxy class
99
+ template<class T, class EL, class ER, class OP>
100
+ auto make_binary_tensor_expression( tensor_expression<T,EL> const& el, tensor_expression<T,ER> const& er, OP op)
101
+ {
102
+ return binary_tensor_expression<T,EL,ER,OP>( el(), er(), op) ;
103
+ }
104
+
105
+ template<class T, class EL, class ER, class OP>
106
+ auto make_binary_tensor_expression( matrix_expression<EL> const& el, tensor_expression<T,ER> const& er, OP op)
107
+ {
108
+ return binary_tensor_expression<T,EL,ER,OP>( el(), er(), op) ;
109
+ }
110
+
111
+ template<class T, class EL, class ER, class OP>
112
+ auto make_binary_tensor_expression( tensor_expression<T,EL> const& el, matrix_expression<ER> const& er, OP op)
113
+ {
114
+ return binary_tensor_expression<T,EL,ER,OP>( el(), er(), op) ;
115
+ }
116
+
117
+ template<class T, class EL, class ER, class OP>
118
+ auto make_binary_tensor_expression( vector_expression<EL> const& el, tensor_expression<T,ER> const& er, OP op)
119
+ {
120
+ return binary_tensor_expression<T,EL,ER,OP>( el(), er(), op) ;
121
+ }
122
+
123
+ template<class T, class EL, class ER, class OP>
124
+ auto make_binary_tensor_expression( tensor_expression<T,EL> const& el, vector_expression<ER> const& er, OP op)
125
+ {
126
+ return binary_tensor_expression<T,EL,ER,OP>( el(), er(), op) ;
127
+ }
128
+
129
+
130
+
131
+ template<class T, class E, class OP>
132
+ struct unary_tensor_expression
133
+ : public tensor_expression <T, unary_tensor_expression<T,E,OP>>
134
+ {
135
+
136
+ using self_type = unary_tensor_expression<T,E,OP>;
137
+ using tensor_type = T;
138
+ using expression_type = E;
139
+
140
+ using derived_type = tensor_expression <T, unary_tensor_expression<T,E,OP>>;
141
+
142
+ using size_type = typename tensor_type::size_type;
143
+
144
+ explicit unary_tensor_expression(E const& ee, OP o) : e(ee) , op(o) {}
145
+ unary_tensor_expression() = delete;
146
+ unary_tensor_expression(const unary_tensor_expression& l) = delete;
147
+ unary_tensor_expression(unary_tensor_expression&& l)
148
+ : e(l.e), op(op.l) {}
149
+
150
+ BOOST_UBLAS_INLINE
151
+ decltype(auto) operator()(size_type i) const { return op(e(i)); }
152
+
153
+ E const& e;
154
+ OP op;
155
+ };
156
+
157
+ // \brief helper function to simply instantiation of lambda proxy class
158
+ template<class T, class E, class OP>
159
+ auto make_unary_tensor_expression( tensor_expression<T,E> const& e, OP op)
160
+ {
161
+ return unary_tensor_expression<T,E,OP>( e() , op);
162
+ }
163
+
164
+ template<class T, class E, class OP>
165
+ auto make_unary_tensor_expression( matrix_expression<E> const& e, OP op)
166
+ {
167
+ return unary_tensor_expression<T,E,OP>( e() , op);
168
+ }
169
+
170
+ template<class T, class E, class OP>
171
+ auto make_unary_tensor_expression( vector_expression<E> const& e, OP op)
172
+ {
173
+ return unary_tensor_expression<T,E,OP>( e() , op);
174
+ }
175
+
176
+
177
+ }
178
+ }
179
+ }
180
+ }
181
+ #endif