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,288 @@
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_EVALUATION_HPP_
13
+ #define _BOOST_UBLAS_TENSOR_EXPRESSIONS_EVALUATION_HPP_
14
+
15
+ #include <type_traits>
16
+ #include <stdexcept>
17
+
18
+
19
+ namespace boost::numeric::ublas {
20
+
21
+ template<class element_type, class storage_format, class storage_type>
22
+ class tensor;
23
+
24
+ template<class size_type>
25
+ class basic_extents;
26
+
27
+ }
28
+
29
+ namespace boost::numeric::ublas::detail {
30
+
31
+ template<class T, class D>
32
+ struct tensor_expression;
33
+
34
+ template<class T, class EL, class ER, class OP>
35
+ struct binary_tensor_expression;
36
+
37
+ template<class T, class E, class OP>
38
+ struct unary_tensor_expression;
39
+
40
+ }
41
+
42
+ namespace boost::numeric::ublas::detail {
43
+
44
+ template<class T, class E>
45
+ struct has_tensor_types
46
+ { static constexpr bool value = false; };
47
+
48
+ template<class T>
49
+ struct has_tensor_types<T,T>
50
+ { static constexpr bool value = true; };
51
+
52
+ template<class T, class D>
53
+ struct has_tensor_types<T, tensor_expression<T,D>>
54
+ { static constexpr bool value = std::is_same<T,D>::value || has_tensor_types<T,D>::value; };
55
+
56
+
57
+ template<class T, class EL, class ER, class OP>
58
+ struct has_tensor_types<T, binary_tensor_expression<T,EL,ER,OP>>
59
+ { static constexpr bool value = std::is_same<T,EL>::value || std::is_same<T,ER>::value || has_tensor_types<T,EL>::value || has_tensor_types<T,ER>::value; };
60
+
61
+ template<class T, class E, class OP>
62
+ struct has_tensor_types<T, unary_tensor_expression<T,E,OP>>
63
+ { static constexpr bool value = std::is_same<T,E>::value || has_tensor_types<T,E>::value; };
64
+
65
+ } // namespace boost::numeric::ublas::detail
66
+
67
+
68
+ namespace boost::numeric::ublas::detail {
69
+
70
+
71
+
72
+
73
+
74
+ /** @brief Retrieves extents of the tensor
75
+ *
76
+ */
77
+ template<class T, class F, class A>
78
+ auto retrieve_extents(tensor<T,F,A> const& t)
79
+ {
80
+ return t.extents();
81
+ }
82
+
83
+ /** @brief Retrieves extents of the tensor expression
84
+ *
85
+ * @note tensor expression must be a binary tree with at least one tensor type
86
+ *
87
+ * @returns extents of the child expression if it is a tensor or extents of one child of its child.
88
+ */
89
+ template<class T, class D>
90
+ auto retrieve_extents(tensor_expression<T,D> const& expr)
91
+ {
92
+ static_assert(detail::has_tensor_types<T,tensor_expression<T,D>>::value,
93
+ "Error in boost::numeric::ublas::detail::retrieve_extents: Expression to evaluate should contain tensors.");
94
+
95
+ auto const& cast_expr = static_cast<D const&>(expr);
96
+
97
+ if constexpr ( std::is_same<T,D>::value )
98
+ return cast_expr.extents();
99
+ else
100
+ return retrieve_extents(cast_expr);
101
+ }
102
+
103
+ /** @brief Retrieves extents of the binary tensor expression
104
+ *
105
+ * @note tensor expression must be a binary tree with at least one tensor type
106
+ *
107
+ * @returns extents of the (left and if necessary then right) child expression if it is a tensor or extents of a child of its (left and if necessary then right) child.
108
+ */
109
+ template<class T, class EL, class ER, class OP>
110
+ auto retrieve_extents(binary_tensor_expression<T,EL,ER,OP> const& expr)
111
+ {
112
+ static_assert(detail::has_tensor_types<T,binary_tensor_expression<T,EL,ER,OP>>::value,
113
+ "Error in boost::numeric::ublas::detail::retrieve_extents: Expression to evaluate should contain tensors.");
114
+
115
+ if constexpr ( std::is_same<T,EL>::value )
116
+ return expr.el.extents();
117
+
118
+ if constexpr ( std::is_same<T,ER>::value )
119
+ return expr.er.extents();
120
+
121
+ else if constexpr ( detail::has_tensor_types<T,EL>::value )
122
+ return retrieve_extents(expr.el);
123
+
124
+ else if constexpr ( detail::has_tensor_types<T,ER>::value )
125
+ return retrieve_extents(expr.er);
126
+ }
127
+
128
+ /** @brief Retrieves extents of the binary tensor expression
129
+ *
130
+ * @note tensor expression must be a binary tree with at least one tensor type
131
+ *
132
+ * @returns extents of the child expression if it is a tensor or extents of a child of its child.
133
+ */
134
+ template<class T, class E, class OP>
135
+ auto retrieve_extents(unary_tensor_expression<T,E,OP> const& expr)
136
+ {
137
+
138
+ static_assert(detail::has_tensor_types<T,unary_tensor_expression<T,E,OP>>::value,
139
+ "Error in boost::numeric::ublas::detail::retrieve_extents: Expression to evaluate should contain tensors.");
140
+
141
+ if constexpr ( std::is_same<T,E>::value )
142
+ return expr.e.extents();
143
+
144
+ else if constexpr ( detail::has_tensor_types<T,E>::value )
145
+ return retrieve_extents(expr.e);
146
+ }
147
+
148
+ } // namespace boost::numeric::ublas::detail
149
+
150
+
151
+ ///////////////
152
+
153
+ namespace boost::numeric::ublas::detail {
154
+
155
+ template<class T, class F, class A, class S>
156
+ auto all_extents_equal(tensor<T,F,A> const& t, basic_extents<S> const& extents)
157
+ {
158
+ return extents == t.extents();
159
+ }
160
+
161
+ template<class T, class D, class S>
162
+ auto all_extents_equal(tensor_expression<T,D> const& expr, basic_extents<S> const& extents)
163
+ {
164
+ static_assert(detail::has_tensor_types<T,tensor_expression<T,D>>::value,
165
+ "Error in boost::numeric::ublas::detail::all_extents_equal: Expression to evaluate should contain tensors.");
166
+ auto const& cast_expr = static_cast<D const&>(expr);
167
+
168
+
169
+ if constexpr ( std::is_same<T,D>::value )
170
+ if( extents != cast_expr.extents() )
171
+ return false;
172
+
173
+ if constexpr ( detail::has_tensor_types<T,D>::value )
174
+ if ( !all_extents_equal(cast_expr, extents))
175
+ return false;
176
+
177
+ return true;
178
+
179
+ }
180
+
181
+ template<class T, class EL, class ER, class OP, class S>
182
+ auto all_extents_equal(binary_tensor_expression<T,EL,ER,OP> const& expr, basic_extents<S> const& extents)
183
+ {
184
+ static_assert(detail::has_tensor_types<T,binary_tensor_expression<T,EL,ER,OP>>::value,
185
+ "Error in boost::numeric::ublas::detail::all_extents_equal: Expression to evaluate should contain tensors.");
186
+
187
+ if constexpr ( std::is_same<T,EL>::value )
188
+ if(extents != expr.el.extents())
189
+ return false;
190
+
191
+ if constexpr ( std::is_same<T,ER>::value )
192
+ if(extents != expr.er.extents())
193
+ return false;
194
+
195
+ if constexpr ( detail::has_tensor_types<T,EL>::value )
196
+ if(!all_extents_equal(expr.el, extents))
197
+ return false;
198
+
199
+ if constexpr ( detail::has_tensor_types<T,ER>::value )
200
+ if(!all_extents_equal(expr.er, extents))
201
+ return false;
202
+
203
+ return true;
204
+ }
205
+
206
+
207
+ template<class T, class E, class OP, class S>
208
+ auto all_extents_equal(unary_tensor_expression<T,E,OP> const& expr, basic_extents<S> const& extents)
209
+ {
210
+
211
+ static_assert(detail::has_tensor_types<T,unary_tensor_expression<T,E,OP>>::value,
212
+ "Error in boost::numeric::ublas::detail::all_extents_equal: Expression to evaluate should contain tensors.");
213
+
214
+ if constexpr ( std::is_same<T,E>::value )
215
+ if(extents != expr.e.extents())
216
+ return false;
217
+
218
+ if constexpr ( detail::has_tensor_types<T,E>::value )
219
+ if(!all_extents_equal(expr.e, extents))
220
+ return false;
221
+
222
+ return true;
223
+ }
224
+
225
+ } // namespace boost::numeric::ublas::detail
226
+
227
+
228
+ namespace boost::numeric::ublas::detail {
229
+
230
+
231
+ /** @brief Evaluates expression for a tensor
232
+ *
233
+ * Assigns the results of the expression to the tensor.
234
+ *
235
+ * \note Checks if shape of the tensor matches those of all tensors within the expression.
236
+ */
237
+ template<class tensor_type, class derived_type>
238
+ void eval(tensor_type& lhs, tensor_expression<tensor_type, derived_type> const& expr)
239
+ {
240
+ if constexpr (detail::has_tensor_types<tensor_type, tensor_expression<tensor_type,derived_type> >::value )
241
+ if(!detail::all_extents_equal(expr, lhs.extents() ))
242
+ throw std::runtime_error("Error in boost::numeric::ublas::tensor: expression contains tensors with different shapes.");
243
+
244
+ #pragma omp parallel for
245
+ for(auto i = 0u; i < lhs.size(); ++i)
246
+ lhs(i) = expr()(i);
247
+ }
248
+
249
+ /** @brief Evaluates expression for a tensor
250
+ *
251
+ * Applies a unary function to the results of the expressions before the assignment.
252
+ * Usually applied needed for unary operators such as A += C;
253
+ *
254
+ * \note Checks if shape of the tensor matches those of all tensors within the expression.
255
+ */
256
+ template<class tensor_type, class derived_type, class unary_fn>
257
+ void eval(tensor_type& lhs, tensor_expression<tensor_type, derived_type> const& expr, unary_fn const fn)
258
+ {
259
+
260
+ if constexpr (detail::has_tensor_types< tensor_type, tensor_expression<tensor_type,derived_type> >::value )
261
+ if(!detail::all_extents_equal( expr, lhs.extents() ))
262
+ throw std::runtime_error("Error in boost::numeric::ublas::tensor: expression contains tensors with different shapes.");
263
+
264
+ #pragma omp parallel for
265
+ for(auto i = 0u; i < lhs.size(); ++i)
266
+ fn(lhs(i), expr()(i));
267
+ }
268
+
269
+
270
+
271
+ /** @brief Evaluates expression for a tensor
272
+ *
273
+ * Applies a unary function to the results of the expressions before the assignment.
274
+ * Usually applied needed for unary operators such as A += C;
275
+ *
276
+ * \note Checks if shape of the tensor matches those of all tensors within the expression.
277
+ */
278
+ template<class tensor_type, class unary_fn>
279
+ void eval(tensor_type& lhs, unary_fn const fn)
280
+ {
281
+ #pragma omp parallel for
282
+ for(auto i = 0u; i < lhs.size(); ++i)
283
+ fn(lhs(i));
284
+ }
285
+
286
+
287
+ }
288
+ #endif
@@ -0,0 +1,335 @@
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_NUMERIC_UBLAS_TENSOR_EXTENTS_HPP
14
+ #define BOOST_NUMERIC_UBLAS_TENSOR_EXTENTS_HPP
15
+
16
+ #include <algorithm>
17
+ #include <initializer_list>
18
+ #include <limits>
19
+ #include <numeric>
20
+ #include <stdexcept>
21
+ #include <vector>
22
+
23
+ #include <cassert>
24
+
25
+ namespace boost {
26
+ namespace numeric {
27
+ namespace ublas {
28
+
29
+
30
+ /** @brief Template class for storing tensor extents with runtime variable size.
31
+ *
32
+ * Proxy template class of std::vector<int_type>.
33
+ *
34
+ */
35
+ template<class int_type>
36
+ class basic_extents
37
+ {
38
+ static_assert( std::numeric_limits<typename std::vector<int_type>::value_type>::is_integer, "Static error in basic_layout: type must be of type integer.");
39
+ static_assert(!std::numeric_limits<typename std::vector<int_type>::value_type>::is_signed, "Static error in basic_layout: type must be of type unsigned integer.");
40
+
41
+ public:
42
+ using base_type = std::vector<int_type>;
43
+ using value_type = typename base_type::value_type;
44
+ using const_reference = typename base_type::const_reference;
45
+ using reference = typename base_type::reference;
46
+ using size_type = typename base_type::size_type;
47
+ using const_pointer = typename base_type::const_pointer;
48
+ using const_iterator = typename base_type::const_iterator;
49
+
50
+
51
+ /** @brief Default constructs basic_extents
52
+ *
53
+ * @code auto ex = basic_extents<unsigned>{};
54
+ */
55
+ constexpr explicit basic_extents()
56
+ : _base{}
57
+ {
58
+ }
59
+
60
+ /** @brief Copy constructs basic_extents from a one-dimensional container
61
+ *
62
+ * @code auto ex = basic_extents<unsigned>( std::vector<unsigned>(3u,3u) );
63
+ *
64
+ * @note checks if size > 1 and all elements > 0
65
+ *
66
+ * @param b one-dimensional std::vector<int_type> container
67
+ */
68
+ explicit basic_extents(base_type const& b)
69
+ : _base(b)
70
+ {
71
+ if (!this->valid()){
72
+ throw std::length_error("Error in basic_extents::basic_extents() : shape tuple is not a valid permutation: has zero elements.");
73
+ }
74
+ }
75
+
76
+ /** @brief Move constructs basic_extents from a one-dimensional container
77
+ *
78
+ * @code auto ex = basic_extents<unsigned>( std::vector<unsigned>(3u,3u) );
79
+ *
80
+ * @note checks if size > 1 and all elements > 0
81
+ *
82
+ * @param b one-dimensional container of type std::vector<int_type>
83
+ */
84
+ explicit basic_extents(base_type && b)
85
+ : _base(std::move(b))
86
+ {
87
+ if (!this->valid()){
88
+ throw std::length_error("Error in basic_extents::basic_extents() : shape tuple is not a valid permutation: has zero elements.");
89
+ }
90
+ }
91
+
92
+ /** @brief Constructs basic_extents from an initializer list
93
+ *
94
+ * @code auto ex = basic_extents<unsigned>{3,2,4};
95
+ *
96
+ * @note checks if size > 1 and all elements > 0
97
+ *
98
+ * @param l one-dimensional list of type std::initializer<int_type>
99
+ */
100
+ basic_extents(std::initializer_list<value_type> l)
101
+ : basic_extents( base_type(std::move(l)) )
102
+ {
103
+ }
104
+
105
+ /** @brief Constructs basic_extents from a range specified by two iterators
106
+ *
107
+ * @code auto ex = basic_extents<unsigned>(a.begin(), a.end());
108
+ *
109
+ * @note checks if size > 1 and all elements > 0
110
+ *
111
+ * @param first iterator pointing to the first element
112
+ * @param last iterator pointing to the next position after the last element
113
+ */
114
+ basic_extents(const_iterator first, const_iterator last)
115
+ : basic_extents ( base_type( first,last ) )
116
+ {
117
+ }
118
+
119
+ /** @brief Copy constructs basic_extents */
120
+ basic_extents(basic_extents const& l )
121
+ : _base(l._base)
122
+ {
123
+ }
124
+
125
+ /** @brief Move constructs basic_extents */
126
+ basic_extents(basic_extents && l ) noexcept
127
+ : _base(std::move(l._base))
128
+ {
129
+ }
130
+
131
+ ~basic_extents() = default;
132
+
133
+ basic_extents& operator=(basic_extents other) noexcept
134
+ {
135
+ swap (*this, other);
136
+ return *this;
137
+ }
138
+
139
+ friend void swap(basic_extents& lhs, basic_extents& rhs) {
140
+ std::swap(lhs._base , rhs._base );
141
+ }
142
+
143
+
144
+
145
+ /** @brief Returns true if this has a scalar shape
146
+ *
147
+ * @returns true if (1,1,[1,...,1])
148
+ */
149
+ bool is_scalar() const
150
+ {
151
+ return
152
+ _base.size() != 0 &&
153
+ std::all_of(_base.begin(), _base.end(),
154
+ [](const_reference a){ return a == 1;});
155
+ }
156
+
157
+ /** @brief Returns true if this has a vector shape
158
+ *
159
+ * @returns true if (1,n,[1,...,1]) or (n,1,[1,...,1]) with n > 1
160
+ */
161
+ bool is_vector() const
162
+ {
163
+ if(_base.size() == 0){
164
+ return false;
165
+ }
166
+
167
+ if(_base.size() == 1){
168
+ return _base.at(0) > 1;
169
+ }
170
+
171
+ auto greater_one = [](const_reference a){ return a > 1;};
172
+ auto equal_one = [](const_reference a){ return a == 1;};
173
+
174
+ return
175
+ std::any_of(_base.begin(), _base.begin()+2, greater_one) &&
176
+ std::any_of(_base.begin(), _base.begin()+2, equal_one ) &&
177
+ std::all_of(_base.begin()+2, _base.end(), equal_one);
178
+ }
179
+
180
+ /** @brief Returns true if this has a matrix shape
181
+ *
182
+ * @returns true if (m,n,[1,...,1]) with m > 1 and n > 1
183
+ */
184
+ bool is_matrix() const
185
+ {
186
+ if(_base.size() < 2){
187
+ return false;
188
+ }
189
+
190
+ auto greater_one = [](const_reference a){ return a > 1;};
191
+ auto equal_one = [](const_reference a){ return a == 1;};
192
+
193
+ return
194
+ std::all_of(_base.begin(), _base.begin()+2, greater_one) &&
195
+ std::all_of(_base.begin()+2, _base.end(), equal_one );
196
+ }
197
+
198
+ /** @brief Returns true if this is has a tensor shape
199
+ *
200
+ * @returns true if !empty() && !is_scalar() && !is_vector() && !is_matrix()
201
+ */
202
+ bool is_tensor() const
203
+ {
204
+ if(_base.size() < 3){
205
+ return false;
206
+ }
207
+
208
+ auto greater_one = [](const_reference a){ return a > 1;};
209
+
210
+ return std::any_of(_base.begin()+2, _base.end(), greater_one);
211
+ }
212
+
213
+ const_pointer data() const
214
+ {
215
+ return this->_base.data();
216
+ }
217
+
218
+ const_reference operator[] (size_type p) const
219
+ {
220
+ return this->_base[p];
221
+ }
222
+
223
+ const_reference at (size_type p) const
224
+ {
225
+ return this->_base.at(p);
226
+ }
227
+
228
+ reference operator[] (size_type p)
229
+ {
230
+ return this->_base[p];
231
+ }
232
+
233
+ reference at (size_type p)
234
+ {
235
+ return this->_base.at(p);
236
+ }
237
+
238
+
239
+ bool empty() const
240
+ {
241
+ return this->_base.empty();
242
+ }
243
+
244
+ size_type size() const
245
+ {
246
+ return this->_base.size();
247
+ }
248
+
249
+ /** @brief Returns true if size > 1 and all elements > 0 */
250
+ bool valid() const
251
+ {
252
+ return
253
+ this->size() > 1 &&
254
+ std::none_of(_base.begin(), _base.end(),
255
+ [](const_reference a){ return a == value_type(0); });
256
+ }
257
+
258
+ /** @brief Returns the number of elements a tensor holds with this */
259
+ size_type product() const
260
+ {
261
+ if(_base.empty()){
262
+ return 0;
263
+ }
264
+
265
+ return std::accumulate(_base.begin(), _base.end(), 1ul, std::multiplies<>());
266
+
267
+ }
268
+
269
+
270
+ /** @brief Eliminates singleton dimensions when size > 2
271
+ *
272
+ * squeeze { 1,1} -> { 1,1}
273
+ * squeeze { 2,1} -> { 2,1}
274
+ * squeeze { 1,2} -> { 1,2}
275
+ *
276
+ * squeeze {1,2,3} -> { 2,3}
277
+ * squeeze {2,1,3} -> { 2,3}
278
+ * squeeze {1,3,1} -> { 3,1}
279
+ *
280
+ */
281
+ basic_extents squeeze() const
282
+ {
283
+ if(this->size() <= 2){
284
+ return *this;
285
+ }
286
+
287
+ auto new_extent = basic_extents{};
288
+ auto insert_iter = std::back_insert_iterator<typename basic_extents::base_type>(new_extent._base);
289
+ std::remove_copy(this->_base.begin(), this->_base.end(), insert_iter ,value_type{1});
290
+ return new_extent;
291
+
292
+ }
293
+
294
+ void clear()
295
+ {
296
+ this->_base.clear();
297
+ }
298
+
299
+ bool operator == (basic_extents const& b) const
300
+ {
301
+ return _base == b._base;
302
+ }
303
+
304
+ bool operator != (basic_extents const& b) const
305
+ {
306
+ return !( _base == b._base );
307
+ }
308
+
309
+ const_iterator
310
+ begin() const
311
+ {
312
+ return _base.begin();
313
+ }
314
+
315
+ const_iterator
316
+ end() const
317
+ {
318
+ return _base.end();
319
+ }
320
+
321
+ base_type const& base() const { return _base; }
322
+
323
+ private:
324
+
325
+ base_type _base;
326
+
327
+ };
328
+
329
+ using shape = basic_extents<std::size_t>;
330
+
331
+ } // namespace ublas
332
+ } // namespace numeric
333
+ } // namespace boost
334
+
335
+ #endif