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,244 @@
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_OPERATORS_ARITHMETIC_HPP
13
+ #define BOOST_UBLAS_TENSOR_OPERATORS_ARITHMETIC_HPP
14
+
15
+ #include "expression.hpp"
16
+ #include "expression_evaluation.hpp"
17
+ #include "multi_index_utility.hpp"
18
+ #include "functions.hpp"
19
+
20
+ #include <type_traits>
21
+ #include <functional>
22
+ #include <algorithm>
23
+
24
+ namespace boost{
25
+ namespace numeric{
26
+ namespace ublas {
27
+
28
+
29
+ template<class element_type, class storage_format, class storage_type>
30
+ class tensor;
31
+
32
+ template<class E>
33
+ class matrix_expression;
34
+
35
+
36
+ template<class E>
37
+ class vector_expression;
38
+
39
+ }
40
+ }
41
+ }
42
+
43
+ #define FIRST_ORDER_OPERATOR_RIGHT(OP, EXPR_TYPE_L, EXPR_TYPE_R) \
44
+ template<class T, class L, class R> \
45
+ auto operator OP ( boost::numeric::ublas:: EXPR_TYPE_L <T,L> const& lhs, boost::numeric::ublas:: EXPR_TYPE_R <R> const& rhs) { \
46
+ return boost::numeric::ublas::detail::make_binary_tensor_expression<T> (lhs(), rhs(), \
47
+ [](auto const& l, auto const& r){ return l OP r; }); \
48
+ } \
49
+
50
+ FIRST_ORDER_OPERATOR_RIGHT (*, detail:: tensor_expression , vector_expression)
51
+ FIRST_ORDER_OPERATOR_RIGHT (+, detail:: tensor_expression , vector_expression)
52
+ FIRST_ORDER_OPERATOR_RIGHT (-, detail:: tensor_expression , vector_expression)
53
+ FIRST_ORDER_OPERATOR_RIGHT (/, detail:: tensor_expression , vector_expression)
54
+
55
+ FIRST_ORDER_OPERATOR_RIGHT (*, detail:: tensor_expression , matrix_expression)
56
+ FIRST_ORDER_OPERATOR_RIGHT (+, detail:: tensor_expression , matrix_expression)
57
+ FIRST_ORDER_OPERATOR_RIGHT (-, detail:: tensor_expression , matrix_expression)
58
+ FIRST_ORDER_OPERATOR_RIGHT (/, detail:: tensor_expression , matrix_expression)
59
+
60
+
61
+ #define FIRST_ORDER_OPERATOR_LEFT(OP, EXPR_TYPE_L, EXPR_TYPE_R) \
62
+ template<class T, class L, class R> \
63
+ auto operator OP ( boost::numeric::ublas:: EXPR_TYPE_L <L> const& lhs, boost::numeric::ublas:: EXPR_TYPE_R <T,R> const& rhs) { \
64
+ return boost::numeric::ublas::detail::make_binary_tensor_expression<T> (lhs(), rhs(), \
65
+ [](auto const& l, auto const& r){ return l OP r; }); \
66
+ } \
67
+
68
+ FIRST_ORDER_OPERATOR_LEFT (*, vector_expression, detail:: tensor_expression)
69
+ FIRST_ORDER_OPERATOR_LEFT (+, vector_expression, detail:: tensor_expression)
70
+ FIRST_ORDER_OPERATOR_LEFT (-, vector_expression, detail:: tensor_expression)
71
+ FIRST_ORDER_OPERATOR_LEFT (/, vector_expression, detail:: tensor_expression)
72
+
73
+ FIRST_ORDER_OPERATOR_LEFT (*, matrix_expression, detail:: tensor_expression)
74
+ FIRST_ORDER_OPERATOR_LEFT (+, matrix_expression, detail:: tensor_expression)
75
+ FIRST_ORDER_OPERATOR_LEFT (-, matrix_expression, detail:: tensor_expression)
76
+ FIRST_ORDER_OPERATOR_LEFT (/, matrix_expression, detail:: tensor_expression)
77
+
78
+
79
+
80
+
81
+ template<class T, class L, class R>
82
+ auto operator+( boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs, boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
83
+ return boost::numeric::ublas::detail::make_binary_tensor_expression<T> (lhs(), rhs(), [](auto const& l, auto const& r){ return l + r; });
84
+ }
85
+ template<class T, class L, class R>
86
+ auto operator-( boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs, boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
87
+ return boost::numeric::ublas::detail::make_binary_tensor_expression<T> (lhs(), rhs(), [](auto const& l, auto const& r){ return l - r; });
88
+ // return boost::numeric::ublas::detail::make_lambda<T>([&lhs,&rhs](std::size_t i){ return lhs(i) - rhs(i);});
89
+ }
90
+ template<class T, class L, class R>
91
+ auto operator*( boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs, boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
92
+ return boost::numeric::ublas::detail::make_binary_tensor_expression<T> (lhs(), rhs(), [](auto const& l, auto const& r){ return l * r; });
93
+ }
94
+ template<class T, class L, class R>
95
+ auto operator/( boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs, boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
96
+ return boost::numeric::ublas::detail::make_binary_tensor_expression<T> (lhs(), rhs(), [](auto const& l, auto const& r){ return l / r; });
97
+ }
98
+
99
+
100
+ // Overloaded Arithmetic Operators with Scalars
101
+ template<class T, class R>
102
+ auto operator+(typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
103
+ return boost::numeric::ublas::detail::make_unary_tensor_expression<T> (rhs(), [lhs](auto const& r){ return lhs + r; });
104
+ //return boost::numeric::ublas::detail::make_lambda<T>( [&lhs,&rhs](std::size_t i) {return lhs + rhs(i); } );
105
+ }
106
+ template<class T, class R>
107
+ auto operator-(typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
108
+ return boost::numeric::ublas::detail::make_unary_tensor_expression<T> (rhs(), [lhs](auto const& r){ return lhs - r; });
109
+ }
110
+ template<class T, class R>
111
+ auto operator*(typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
112
+ return boost::numeric::ublas::detail::make_unary_tensor_expression<T> (rhs(), [lhs](auto const& r){ return lhs * r; });
113
+ }
114
+ template<class T, class R>
115
+ auto operator/(typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
116
+ return boost::numeric::ublas::detail::make_unary_tensor_expression<T> (rhs(), [lhs](auto const& r){ return lhs / r; });
117
+ }
118
+
119
+
120
+ template<class T, class L>
121
+ auto operator+(boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs, typename T::const_reference rhs) {
122
+ return boost::numeric::ublas::detail::make_unary_tensor_expression<T> (lhs(), [rhs] (auto const& l) { return l + rhs; } );
123
+ }
124
+ template<class T, class L>
125
+ auto operator-(boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs, typename T::const_reference rhs) {
126
+ return boost::numeric::ublas::detail::make_unary_tensor_expression<T> (lhs(), [rhs] (auto const& l) { return l - rhs; } );
127
+ }
128
+ template<class T, class L>
129
+ auto operator*(boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs, typename T::const_reference rhs) {
130
+ return boost::numeric::ublas::detail::make_unary_tensor_expression<T> (lhs(), [rhs] (auto const& l) { return l * rhs; } );
131
+ }
132
+ template<class T, class L>
133
+ auto operator/(boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs, typename T::const_reference rhs) {
134
+ return boost::numeric::ublas::detail::make_unary_tensor_expression<T> (lhs(), [rhs] (auto const& l) { return l / rhs; } );
135
+ }
136
+
137
+
138
+
139
+ template<class T, class D>
140
+ auto& operator += (T& lhs, const boost::numeric::ublas::detail::tensor_expression<T,D> &expr) {
141
+ boost::numeric::ublas::detail::eval(lhs, expr(), [](auto& l, auto const& r) { l+=r; } );
142
+ return lhs;
143
+ }
144
+
145
+ template<class T, class D>
146
+ auto& operator -= (T& lhs, const boost::numeric::ublas::detail::tensor_expression<T,D> &expr) {
147
+ boost::numeric::ublas::detail::eval(lhs, expr(), [](auto& l, auto const& r) { l-=r; } );
148
+ return lhs;
149
+ }
150
+
151
+ template<class T, class D>
152
+ auto& operator *= (T& lhs, const boost::numeric::ublas::detail::tensor_expression<T,D> &expr) {
153
+ boost::numeric::ublas::detail::eval(lhs, expr(), [](auto& l, auto const& r) { l*=r; } );
154
+ return lhs;
155
+ }
156
+
157
+ template<class T, class D>
158
+ auto& operator /= (T& lhs, const boost::numeric::ublas::detail::tensor_expression<T,D> &expr) {
159
+ boost::numeric::ublas::detail::eval(lhs, expr(), [](auto& l, auto const& r) { l/=r; } );
160
+ return lhs;
161
+ }
162
+
163
+
164
+
165
+
166
+ template<class E, class F, class A>
167
+ auto& operator += (boost::numeric::ublas::tensor<E,F,A>& lhs, typename boost::numeric::ublas::tensor<E,F,A>::const_reference r) {
168
+ boost::numeric::ublas::detail::eval(lhs, [r](auto& l) { l+=r; } );
169
+ return lhs;
170
+ }
171
+
172
+ template<class E, class F, class A>
173
+ auto& operator -= (boost::numeric::ublas::tensor<E,F,A>& lhs, typename boost::numeric::ublas::tensor<E,F,A>::const_reference r) {
174
+ boost::numeric::ublas::detail::eval(lhs, [r](auto& l) { l-=r; } );
175
+ return lhs;
176
+ }
177
+
178
+ template<class E, class F, class A>
179
+ auto& operator *= (boost::numeric::ublas::tensor<E,F,A>& lhs, typename boost::numeric::ublas::tensor<E,F,A>::const_reference r) {
180
+ boost::numeric::ublas::detail::eval(lhs, [r](auto& l) { l*=r; } );
181
+ return lhs;
182
+ }
183
+
184
+ template<class E, class F, class A>
185
+ auto& operator /= (boost::numeric::ublas::tensor<E,F,A>& lhs, typename boost::numeric::ublas::tensor<E,F,A>::const_reference r) {
186
+ boost::numeric::ublas::detail::eval(lhs, [r](auto& l) { l/=r; } );
187
+ return lhs;
188
+ }
189
+
190
+
191
+
192
+
193
+
194
+
195
+ template<class T, class D>
196
+ auto const& operator +(const boost::numeric::ublas::detail::tensor_expression<T,D>& lhs) {
197
+ return lhs;
198
+ }
199
+
200
+ template<class T, class D>
201
+ auto operator -(boost::numeric::ublas::detail::tensor_expression<T,D> const& lhs) {
202
+ return boost::numeric::ublas::detail::make_unary_tensor_expression<T> (lhs(), [] (auto const& l) { return -l; } );
203
+ }
204
+
205
+
206
+
207
+
208
+
209
+ /** @brief Performs a tensor contraction, not an elementwise multiplication
210
+ *
211
+ */
212
+
213
+ template<class tensor_type_left, class tuple_type_left, class tensor_type_right, class tuple_type_right>
214
+ auto operator*(
215
+ std::pair< tensor_type_left const&, tuple_type_left > lhs,
216
+ std::pair< tensor_type_right const&, tuple_type_right > rhs)
217
+ {
218
+
219
+ using namespace boost::numeric::ublas;
220
+
221
+ auto const& tensor_left = lhs.first;
222
+ auto const& tensor_right = rhs.first;
223
+
224
+ auto multi_index_left = lhs.second;
225
+ auto multi_index_right = rhs.second;
226
+
227
+ static constexpr auto num_equal_ind = number_equal_indexes<tuple_type_left, tuple_type_right>::value;
228
+
229
+ if constexpr ( num_equal_ind == 0 ){
230
+ return tensor_left * tensor_right;
231
+ }
232
+ else if constexpr ( num_equal_ind==std::tuple_size<tuple_type_left>::value && std::is_same<tuple_type_left, tuple_type_right>::value ){
233
+
234
+ return boost::numeric::ublas::inner_prod( tensor_left, tensor_right );
235
+ }
236
+ else {
237
+ auto array_index_pairs = index_position_pairs(multi_index_left,multi_index_right);
238
+ auto index_pairs = array_to_vector( array_index_pairs );
239
+ return boost::numeric::ublas::prod( tensor_left, tensor_right, index_pairs.first, index_pairs.second );
240
+ }
241
+
242
+ }
243
+
244
+ #endif
@@ -0,0 +1,175 @@
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_OPERATORS_COMPARISON_HPP
13
+ #define BOOST_UBLAS_TENSOR_OPERATORS_COMPARISON_HPP
14
+
15
+ #include <boost/numeric/ublas/tensor/expression.hpp>
16
+ #include <boost/numeric/ublas/tensor/expression_evaluation.hpp>
17
+ #include <type_traits>
18
+ #include <functional>
19
+
20
+ namespace boost::numeric::ublas {
21
+ template<class element_type, class storage_format, class storage_type>
22
+ class tensor;
23
+ }
24
+
25
+ namespace boost::numeric::ublas::detail {
26
+
27
+ template<class T, class F, class A, class BinaryPred>
28
+ bool compare(tensor<T,F,A> const& lhs, tensor<T,F,A> const& rhs, BinaryPred pred)
29
+ {
30
+
31
+ if(lhs.extents() != rhs.extents()){
32
+ if constexpr(!std::is_same<BinaryPred,std::equal_to<>>::value && !std::is_same<BinaryPred,std::not_equal_to<>>::value)
33
+ throw std::runtime_error("Error in boost::numeric::ublas::detail::compare: cannot compare tensors with different shapes.");
34
+ else
35
+ return false;
36
+ }
37
+
38
+ if constexpr(std::is_same<BinaryPred,std::greater<>>::value || std::is_same<BinaryPred,std::less<>>::value)
39
+ if(lhs.empty())
40
+ return false;
41
+
42
+ for(auto i = 0u; i < lhs.size(); ++i)
43
+ if(!pred(lhs(i), rhs(i)))
44
+ return false;
45
+ return true;
46
+ }
47
+
48
+ template<class T, class F, class A, class UnaryPred>
49
+ bool compare(tensor<T,F,A> const& rhs, UnaryPred pred)
50
+ {
51
+ for(auto i = 0u; i < rhs.size(); ++i)
52
+ if(!pred(rhs(i)))
53
+ return false;
54
+ return true;
55
+ }
56
+
57
+
58
+ template<class T, class L, class R, class BinaryPred>
59
+ bool compare(tensor_expression<T,L> const& lhs, tensor_expression<T,R> const& rhs, BinaryPred pred)
60
+ {
61
+ constexpr bool lhs_is_tensor = std::is_same<T,L>::value;
62
+ constexpr bool rhs_is_tensor = std::is_same<T,R>::value;
63
+
64
+ if constexpr (lhs_is_tensor && rhs_is_tensor)
65
+ return compare(static_cast<T const&>( lhs ), static_cast<T const&>( rhs ), pred);
66
+ else if constexpr (lhs_is_tensor && !rhs_is_tensor)
67
+ return compare(static_cast<T const&>( lhs ), T( rhs ), pred);
68
+ else if constexpr (!lhs_is_tensor && rhs_is_tensor)
69
+ return compare(T( lhs ), static_cast<T const&>( rhs ), pred);
70
+ else
71
+ return compare(T( lhs ), T( rhs ), pred);
72
+
73
+ }
74
+
75
+ template<class T, class D, class UnaryPred>
76
+ bool compare(tensor_expression<T,D> const& expr, UnaryPred pred)
77
+ {
78
+ if constexpr (std::is_same<T,D>::value)
79
+ return compare(static_cast<T const&>( expr ), pred);
80
+ else
81
+ return compare(T( expr ), pred);
82
+ }
83
+
84
+ }
85
+
86
+
87
+ template<class T, class L, class R>
88
+ bool operator==( boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs,
89
+ boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
90
+ return boost::numeric::ublas::detail::compare( lhs, rhs, std::equal_to<>{} );
91
+ }
92
+ template<class T, class L, class R>
93
+ auto operator!=(boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs,
94
+ boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
95
+ return boost::numeric::ublas::detail::compare( lhs, rhs, std::not_equal_to<>{} );
96
+ }
97
+ template<class T, class L, class R>
98
+ auto operator< ( boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs,
99
+ boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
100
+ return boost::numeric::ublas::detail::compare( lhs, rhs, std::less<>{} );
101
+ }
102
+ template<class T, class L, class R>
103
+ auto operator<=( boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs,
104
+ boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
105
+ return boost::numeric::ublas::detail::compare( lhs, rhs, std::less_equal<>{} );
106
+ }
107
+ template<class T, class L, class R>
108
+ auto operator> ( boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs,
109
+ boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
110
+ return boost::numeric::ublas::detail::compare( lhs, rhs, std::greater<>{} );
111
+ }
112
+ template<class T, class L, class R>
113
+ auto operator>=( boost::numeric::ublas::detail::tensor_expression<T,L> const& lhs,
114
+ boost::numeric::ublas::detail::tensor_expression<T,R> const& rhs) {
115
+ return boost::numeric::ublas::detail::compare( lhs, rhs, std::greater_equal<>{} );
116
+ }
117
+
118
+
119
+
120
+
121
+
122
+ template<class T, class D>
123
+ bool operator==( typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,D> const& rhs) {
124
+ return boost::numeric::ublas::detail::compare( rhs, [lhs](auto const& r){ return lhs == r; } );
125
+ }
126
+ template<class T, class D>
127
+ auto operator!=( typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,D> const& rhs) {
128
+ return boost::numeric::ublas::detail::compare( rhs, [lhs](auto const& r){ return lhs != r; } );
129
+ }
130
+ template<class T, class D>
131
+ auto operator< ( typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,D> const& rhs) {
132
+ return boost::numeric::ublas::detail::compare( rhs, [lhs](auto const& r){ return lhs < r; } );
133
+ }
134
+ template<class T, class D>
135
+ auto operator<=( typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,D> const& rhs) {
136
+ return boost::numeric::ublas::detail::compare( rhs, [lhs](auto const& r){ return lhs <= r; } );
137
+ }
138
+ template<class T, class D>
139
+ auto operator> ( typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,D> const& rhs) {
140
+ return boost::numeric::ublas::detail::compare( rhs, [lhs](auto const& r){ return lhs > r; } );
141
+ }
142
+ template<class T, class D>
143
+ auto operator>=( typename T::const_reference lhs, boost::numeric::ublas::detail::tensor_expression<T,D> const& rhs) {
144
+ return boost::numeric::ublas::detail::compare( rhs, [lhs](auto const& r){ return lhs >= r; } );
145
+ }
146
+
147
+
148
+
149
+ template<class T, class D>
150
+ bool operator==( boost::numeric::ublas::detail::tensor_expression<T,D> const& lhs, typename T::const_reference rhs) {
151
+ return boost::numeric::ublas::detail::compare( lhs, [rhs](auto const& l){ return l == rhs; } );
152
+ }
153
+ template<class T, class D>
154
+ auto operator!=( boost::numeric::ublas::detail::tensor_expression<T,D> const& lhs, typename T::const_reference rhs) {
155
+ return boost::numeric::ublas::detail::compare( lhs, [rhs](auto const& l){ return l != rhs; } );
156
+ }
157
+ template<class T, class D>
158
+ auto operator< ( boost::numeric::ublas::detail::tensor_expression<T,D> const& lhs, typename T::const_reference rhs) {
159
+ return boost::numeric::ublas::detail::compare( lhs, [rhs](auto const& l){ return l < rhs; } );
160
+ }
161
+ template<class T, class D>
162
+ auto operator<=( boost::numeric::ublas::detail::tensor_expression<T,D> const& lhs, typename T::const_reference rhs) {
163
+ return boost::numeric::ublas::detail::compare( lhs, [rhs](auto const& l){ return l <= rhs; } );
164
+ }
165
+ template<class T, class D>
166
+ auto operator> ( boost::numeric::ublas::detail::tensor_expression<T,D> const& lhs, typename T::const_reference rhs) {
167
+ return boost::numeric::ublas::detail::compare( lhs, [rhs](auto const& l){ return l > rhs; } );
168
+ }
169
+ template<class T, class D>
170
+ auto operator>=( boost::numeric::ublas::detail::tensor_expression<T,D> const& lhs, typename T::const_reference rhs) {
171
+ return boost::numeric::ublas::detail::compare( lhs, [rhs](auto const& l){ return l >= rhs; } );
172
+ }
173
+
174
+
175
+ #endif
@@ -0,0 +1,122 @@
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_OSTREAM_HPP
13
+ #define BOOST_UBLAS_TENSOR_OSTREAM_HPP
14
+
15
+ #include <ostream>
16
+ #include <complex>
17
+
18
+ namespace boost {
19
+ namespace numeric {
20
+ namespace ublas {
21
+ namespace detail {
22
+
23
+ template <class value_type>
24
+ void print(std::ostream& out, value_type const& p)
25
+ {
26
+ out << p << " ";
27
+ }
28
+
29
+ template <class value_type>
30
+ void print(std::ostream& out, const std::complex<value_type>& p)
31
+ {
32
+ out << std::real(p) << "+" << std::imag(p) << "i ";
33
+ }
34
+
35
+
36
+ template <class size_type, class value_type>
37
+ void print(std::ostream& out, size_type r, const value_type* p, const size_type* w, const size_type* n)
38
+ {
39
+
40
+ if(r < 2)
41
+ {
42
+ out << "[ ... " << std::endl;
43
+
44
+ for(auto row = 0u; row < n[0]; p += w[0], ++row) // iterate over one column
45
+ {
46
+ auto p1 = p;
47
+ for(auto col = 0u; col < n[1]; p1 += w[1], ++col) // iterate over first row
48
+ {
49
+ print(out,*p1);
50
+ }
51
+ if(row < n[0]-1)
52
+ out << "; " << std::endl;
53
+ }
54
+ out << "]";
55
+ }
56
+ else
57
+ {
58
+ out << "cat("<< r+1 <<",..." << std::endl;
59
+ for(auto d = 0u; d < n[r]-1; p += w[r], ++d){
60
+ print(out, r-1, p, w, n);
61
+ out << ",..." << std::endl;
62
+ }
63
+ print(out, r-1, p, w, n);
64
+ }
65
+ if(r>1)
66
+ out << ")";
67
+ }
68
+
69
+ ////////////////////////////
70
+
71
+
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+
78
+ namespace boost {
79
+ namespace numeric {
80
+ namespace ublas {
81
+
82
+ template<class T, class F, class A>
83
+ class tensor;
84
+
85
+ template<class T, class F, class A>
86
+ class matrix;
87
+
88
+ template<class T, class A>
89
+ class vector;
90
+
91
+ }
92
+ }
93
+ }
94
+
95
+
96
+ template <class V, class F, class A>
97
+ std::ostream& operator << (std::ostream& out, boost::numeric::ublas::tensor<V,F,A> const& t)
98
+ {
99
+
100
+ if(t.extents().is_scalar()){
101
+ out << '[';
102
+ boost::numeric::ublas::detail::print(out,t[0]);
103
+ out << ']';
104
+ }
105
+ else if(t.extents().is_vector()) {
106
+ const auto& cat = t.extents().at(0) > t.extents().at(1) ? ';' : ',';
107
+ out << '[';
108
+ for(auto i = 0u; i < t.size()-1; ++i){
109
+ boost::numeric::ublas::detail::print(out,t[i]);
110
+ out << cat << ' ';
111
+ }
112
+ boost::numeric::ublas::detail::print(out,t[t.size()-1]);
113
+ out << ']';
114
+ }
115
+ else{
116
+ boost::numeric::ublas::detail::print(out, t.rank()-1, t.data(), t.strides().data(), t.extents().data());
117
+ }
118
+ return out;
119
+ }
120
+
121
+
122
+ #endif
@@ -0,0 +1,84 @@
1
+ //
2
+ // Copyright (c) 2018, 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_STORAGE_TRAITS_HPP_
14
+ #define _BOOST_STORAGE_TRAITS_HPP_
15
+
16
+ #include <vector>
17
+ #include <array>
18
+
19
+ namespace boost {
20
+ namespace numeric {
21
+ namespace ublas {
22
+
23
+
24
+ template <class A>
25
+ struct storage_traits;
26
+
27
+
28
+ template <class V, class A>
29
+ struct storage_traits<std::vector<V,A>>
30
+ {
31
+ using array_type = std::vector<V,A>;
32
+
33
+ using size_type = typename array_type::size_type;
34
+ using difference_type = typename array_type::difference_type;
35
+ using value_type = typename array_type::value_type;
36
+
37
+ using reference = typename array_type::reference;
38
+ using const_reference = typename array_type::const_reference;
39
+
40
+ using pointer = typename array_type::pointer;
41
+ using const_pointer = typename array_type::const_pointer;
42
+
43
+ using iterator = typename array_type::iterator;
44
+ using const_iterator = typename array_type::const_iterator;
45
+
46
+ using reverse_iterator = typename array_type::reverse_iterator;
47
+ using const_reverse_iterator = typename array_type::const_reverse_iterator;
48
+
49
+ template<class U>
50
+ using rebind = std::vector<U, typename std::allocator_traits<A>::template rebind_alloc<U>>;
51
+ };
52
+
53
+
54
+ template <class V, std::size_t N>
55
+ struct storage_traits<std::array<V,N>>
56
+ {
57
+ using array_type = std::array<V,N>;
58
+
59
+ using size_type = typename array_type::size_type;
60
+ using difference_type = typename array_type::difference_type;
61
+ using value_type = typename array_type::value_type;
62
+
63
+ using reference = typename array_type::reference;
64
+ using const_reference = typename array_type::const_reference;
65
+
66
+ using pointer = typename array_type::pointer;
67
+ using const_pointer = typename array_type::const_pointer;
68
+
69
+ using iterator = typename array_type::iterator;
70
+ using const_iterator = typename array_type::const_iterator;
71
+
72
+ using reverse_iterator = typename array_type::reverse_iterator;
73
+ using const_reverse_iterator = typename array_type::const_reverse_iterator;
74
+
75
+ template<class U>
76
+ using rebind = std::array<U,N>;
77
+ };
78
+
79
+ } // ublas
80
+ } // numeric
81
+ } // boost
82
+
83
+
84
+ #endif // _BOOST_STORAGE_TRAITS_HPP_