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.
- package/README.md +29 -2
- package/boost/cast.hpp +20 -0
- package/boost/numeric/conversion/bounds.hpp +24 -0
- package/boost/numeric/conversion/cast.hpp +61 -0
- package/boost/numeric/conversion/conversion_traits.hpp +32 -0
- package/boost/numeric/conversion/converter.hpp +68 -0
- package/boost/numeric/conversion/converter_policies.hpp +194 -0
- package/boost/numeric/conversion/detail/bounds.hpp +58 -0
- package/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
- package/boost/numeric/conversion/detail/converter.hpp +593 -0
- package/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
- package/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
- package/boost/numeric/conversion/detail/meta.hpp +120 -0
- package/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
- package/boost/numeric/conversion/detail/old_numeric_cast.hpp +308 -0
- package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
- package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
- package/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
- package/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
- package/boost/numeric/conversion/int_float_mixture.hpp +30 -0
- package/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
- package/boost/numeric/conversion/is_subranged.hpp +27 -0
- package/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
- package/boost/numeric/conversion/sign_mixture.hpp +30 -0
- package/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
- package/boost/numeric/conversion/udt_builtin_mixture.hpp +28 -0
- package/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
- package/boost/numeric/interval/arith.hpp +305 -0
- package/boost/numeric/interval/arith2.hpp +304 -0
- package/boost/numeric/interval/arith3.hpp +69 -0
- package/boost/numeric/interval/checking.hpp +130 -0
- package/boost/numeric/interval/compare/certain.hpp +113 -0
- package/boost/numeric/interval/compare/explicit.hpp +248 -0
- package/boost/numeric/interval/compare/lexicographic.hpp +122 -0
- package/boost/numeric/interval/compare/possible.hpp +113 -0
- package/boost/numeric/interval/compare/set.hpp +101 -0
- package/boost/numeric/interval/compare/tribool.hpp +138 -0
- package/boost/numeric/interval/compare.hpp +19 -0
- package/boost/numeric/interval/constants.hpp +85 -0
- package/boost/numeric/interval/detail/alpha_rounding_control.hpp +113 -0
- package/boost/numeric/interval/detail/bcc_rounding_control.hpp +57 -0
- package/boost/numeric/interval/detail/bugs.hpp +48 -0
- package/boost/numeric/interval/detail/c99_rounding_control.hpp +50 -0
- package/boost/numeric/interval/detail/c99sub_rounding_control.hpp +43 -0
- package/boost/numeric/interval/detail/division.hpp +194 -0
- package/boost/numeric/interval/detail/ia64_rounding_control.hpp +83 -0
- package/boost/numeric/interval/detail/interval_prototype.hpp +41 -0
- package/boost/numeric/interval/detail/msvc_rounding_control.hpp +113 -0
- package/boost/numeric/interval/detail/ppc_rounding_control.hpp +99 -0
- package/boost/numeric/interval/detail/sparc_rounding_control.hpp +112 -0
- package/boost/numeric/interval/detail/test_input.hpp +76 -0
- package/boost/numeric/interval/detail/x86_rounding_control.hpp +108 -0
- package/boost/numeric/interval/detail/x86gcc_rounding_control.hpp +51 -0
- package/boost/numeric/interval/ext/integer.hpp +70 -0
- package/boost/numeric/interval/ext/x86_fast_rounding_control.hpp +70 -0
- package/boost/numeric/interval/hw_rounding.hpp +73 -0
- package/boost/numeric/interval/interval.hpp +450 -0
- package/boost/numeric/interval/io.hpp +41 -0
- package/boost/numeric/interval/limits.hpp +49 -0
- package/boost/numeric/interval/policies.hpp +75 -0
- package/boost/numeric/interval/rounded_arith.hpp +120 -0
- package/boost/numeric/interval/rounded_transc.hpp +140 -0
- package/boost/numeric/interval/rounding.hpp +101 -0
- package/boost/numeric/interval/transc.hpp +232 -0
- package/boost/numeric/interval/utility.hpp +335 -0
- package/boost/numeric/interval/utility_fwd.hpp +172 -0
- package/boost/numeric/interval.hpp +32 -0
- package/boost/numeric/odeint/algebra/algebra_dispatcher.hpp +86 -0
- package/boost/numeric/odeint/algebra/array_algebra.hpp +293 -0
- package/boost/numeric/odeint/algebra/default_operations.hpp +599 -0
- package/boost/numeric/odeint/algebra/detail/extract_value_type.hpp +51 -0
- package/boost/numeric/odeint/algebra/detail/for_each.hpp +165 -0
- package/boost/numeric/odeint/algebra/detail/macros.hpp +35 -0
- package/boost/numeric/odeint/algebra/detail/norm_inf.hpp +46 -0
- package/boost/numeric/odeint/algebra/fusion_algebra.hpp +216 -0
- package/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp +48 -0
- package/boost/numeric/odeint/algebra/multi_array_algebra.hpp +146 -0
- package/boost/numeric/odeint/algebra/norm_result_type.hpp +33 -0
- package/boost/numeric/odeint/algebra/operations_dispatcher.hpp +41 -0
- package/boost/numeric/odeint/algebra/range_algebra.hpp +142 -0
- package/boost/numeric/odeint/algebra/vector_space_algebra.hpp +175 -0
- package/boost/numeric/odeint/config.hpp +53 -0
- package/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp +55 -0
- package/boost/numeric/odeint/external/blaze/blaze_resize.hpp +64 -0
- package/boost/numeric/odeint/external/compute/compute.hpp +27 -0
- package/boost/numeric/odeint/external/compute/compute_algebra.hpp +65 -0
- package/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp +41 -0
- package/boost/numeric/odeint/external/compute/compute_operations.hpp +198 -0
- package/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp +44 -0
- package/boost/numeric/odeint/external/compute/compute_resize.hpp +92 -0
- package/boost/numeric/odeint/external/eigen/eigen.hpp +27 -0
- package/boost/numeric/odeint/external/eigen/eigen_algebra.hpp +98 -0
- package/boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp +49 -0
- package/boost/numeric/odeint/external/eigen/eigen_resize.hpp +103 -0
- package/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp +228 -0
- package/boost/numeric/odeint/external/mkl/mkl_operations.hpp +181 -0
- package/boost/numeric/odeint/external/mpi/mpi.hpp +25 -0
- package/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp +62 -0
- package/boost/numeric/odeint/external/mpi/mpi_state.hpp +113 -0
- package/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp +95 -0
- package/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp +161 -0
- package/boost/numeric/odeint/external/mtl4/mtl4.hpp +23 -0
- package/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp +99 -0
- package/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp +134 -0
- package/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp +25 -0
- package/boost/numeric/odeint/external/nt2/nt2_copy.hpp +33 -0
- package/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp +31 -0
- package/boost/numeric/odeint/external/nt2/nt2_resize.hpp +54 -0
- package/boost/numeric/odeint/external/openmp/openmp.hpp +31 -0
- package/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp +281 -0
- package/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp +276 -0
- package/boost/numeric/odeint/external/openmp/openmp_state.hpp +172 -0
- package/boost/numeric/odeint/external/thrust/thrust.hpp +27 -0
- package/boost/numeric/odeint/external/thrust/thrust_algebra.hpp +217 -0
- package/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp +118 -0
- package/boost/numeric/odeint/external/thrust/thrust_operations.hpp +233 -0
- package/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp +118 -0
- package/boost/numeric/odeint/external/thrust/thrust_resize.hpp +197 -0
- package/boost/numeric/odeint/external/vexcl/vexcl.hpp +28 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp +61 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp +51 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp +55 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp +68 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp +96 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp +58 -0
- package/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp +226 -0
- package/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp +68 -0
- package/boost/numeric/odeint/integrate/check_adapter.hpp +222 -0
- package/boost/numeric/odeint/integrate/detail/functors.hpp +70 -0
- package/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp +161 -0
- package/boost/numeric/odeint/integrate/detail/integrate_const.hpp +167 -0
- package/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp +161 -0
- package/boost/numeric/odeint/integrate/detail/integrate_times.hpp +179 -0
- package/boost/numeric/odeint/integrate/integrate.hpp +133 -0
- package/boost/numeric/odeint/integrate/integrate_adaptive.hpp +127 -0
- package/boost/numeric/odeint/integrate/integrate_const.hpp +195 -0
- package/boost/numeric/odeint/integrate/integrate_n_steps.hpp +178 -0
- package/boost/numeric/odeint/integrate/integrate_times.hpp +220 -0
- package/boost/numeric/odeint/integrate/max_step_checker.hpp +114 -0
- package/boost/numeric/odeint/integrate/null_observer.hpp +38 -0
- package/boost/numeric/odeint/integrate/observer_collection.hpp +55 -0
- package/boost/numeric/odeint/iterator/adaptive_iterator.hpp +183 -0
- package/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp +175 -0
- package/boost/numeric/odeint/iterator/const_step_iterator.hpp +180 -0
- package/boost/numeric/odeint/iterator/const_step_time_iterator.hpp +173 -0
- package/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp +199 -0
- package/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp +251 -0
- package/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp +228 -0
- package/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp +239 -0
- package/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp +369 -0
- package/boost/numeric/odeint/iterator/integrate/detail/functors.hpp +70 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp +121 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp +111 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp +107 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp +67 -0
- package/boost/numeric/odeint/iterator/integrate/integrate.hpp +111 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp +127 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_const.hpp +158 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp +123 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_times.hpp +131 -0
- package/boost/numeric/odeint/iterator/integrate/null_observer.hpp +38 -0
- package/boost/numeric/odeint/iterator/integrate/observer_collection.hpp +55 -0
- package/boost/numeric/odeint/iterator/n_step_iterator.hpp +168 -0
- package/boost/numeric/odeint/iterator/n_step_time_iterator.hpp +169 -0
- package/boost/numeric/odeint/iterator/times_iterator.hpp +189 -0
- package/boost/numeric/odeint/iterator/times_time_iterator.hpp +193 -0
- package/boost/numeric/odeint/stepper/adams_bashforth.hpp +418 -0
- package/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp +313 -0
- package/boost/numeric/odeint/stepper/adams_moulton.hpp +201 -0
- package/boost/numeric/odeint/stepper/adaptive_adams_bashforth_moulton.hpp +237 -0
- package/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp +91 -0
- package/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp +588 -0
- package/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp +677 -0
- package/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp +415 -0
- package/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp +431 -0
- package/boost/numeric/odeint/stepper/bulirsch_stoer.hpp +642 -0
- package/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp +838 -0
- package/boost/numeric/odeint/stepper/controlled_adams_bashforth_moulton.hpp +322 -0
- package/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp +1018 -0
- package/boost/numeric/odeint/stepper/controlled_step_result.hpp +42 -0
- package/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp +476 -0
- package/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp +148 -0
- package/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp +168 -0
- package/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp +148 -0
- package/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp +168 -0
- package/boost/numeric/odeint/stepper/detail/adaptive_adams_coefficients.hpp +207 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp +247 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp +263 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp +252 -0
- package/boost/numeric/odeint/stepper/detail/pid_step_adjuster.hpp +199 -0
- package/boost/numeric/odeint/stepper/detail/pid_step_adjuster_coefficients.hpp +180 -0
- package/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp +84 -0
- package/boost/numeric/odeint/stepper/euler.hpp +166 -0
- package/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp +255 -0
- package/boost/numeric/odeint/stepper/explicit_generic_rk.hpp +246 -0
- package/boost/numeric/odeint/stepper/extrapolation_stepper.hpp +288 -0
- package/boost/numeric/odeint/stepper/generation/generation_controlled_adams_bashforth_moulton.hpp +59 -0
- package/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp +61 -0
- package/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp +65 -0
- package/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp +79 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp +47 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp +48 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp +56 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp +46 -0
- package/boost/numeric/odeint/stepper/generation/make_controlled.hpp +103 -0
- package/boost/numeric/odeint/stepper/generation/make_dense_output.hpp +100 -0
- package/boost/numeric/odeint/stepper/generation.hpp +37 -0
- package/boost/numeric/odeint/stepper/implicit_euler.hpp +170 -0
- package/boost/numeric/odeint/stepper/modified_midpoint.hpp +315 -0
- package/boost/numeric/odeint/stepper/rosenbrock4.hpp +346 -0
- package/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp +240 -0
- package/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp +204 -0
- package/boost/numeric/odeint/stepper/runge_kutta4.hpp +181 -0
- package/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp +232 -0
- package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp +231 -0
- package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp +289 -0
- package/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp +403 -0
- package/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp +374 -0
- package/boost/numeric/odeint/stepper/stepper_categories.hpp +66 -0
- package/boost/numeric/odeint/stepper/symplectic_euler.hpp +136 -0
- package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp +160 -0
- package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp +162 -0
- package/boost/numeric/odeint/stepper/velocity_verlet.hpp +375 -0
- package/boost/numeric/odeint/tools/assert.hpp +30 -0
- package/boost/numeric/odeint/tools/is_standalone.hpp +21 -0
- package/boost/numeric/odeint/tools/traits.hpp +39 -0
- package/boost/numeric/odeint/util/bind.hpp +35 -0
- package/boost/numeric/odeint/util/copy.hpp +88 -0
- package/boost/numeric/odeint/util/detail/is_range.hpp +127 -0
- package/boost/numeric/odeint/util/detail/less_with_sign.hpp +78 -0
- package/boost/numeric/odeint/util/is_pair.hpp +42 -0
- package/boost/numeric/odeint/util/is_resizeable.hpp +84 -0
- package/boost/numeric/odeint/util/multi_array_adaption.hpp +131 -0
- package/boost/numeric/odeint/util/n_ary_helper.hpp +96 -0
- package/boost/numeric/odeint/util/odeint_error.hpp +77 -0
- package/boost/numeric/odeint/util/resize.hpp +120 -0
- package/boost/numeric/odeint/util/resizer.hpp +94 -0
- package/boost/numeric/odeint/util/same_instance.hpp +56 -0
- package/boost/numeric/odeint/util/same_size.hpp +117 -0
- package/boost/numeric/odeint/util/split.hpp +64 -0
- package/boost/numeric/odeint/util/split_adaptor.hpp +103 -0
- package/boost/numeric/odeint/util/state_wrapper.hpp +50 -0
- package/boost/numeric/odeint/util/stepper_traits.hpp +63 -0
- package/boost/numeric/odeint/util/ublas_matrix_expression.patch +6 -0
- package/boost/numeric/odeint/util/ublas_wrapper.hpp +297 -0
- package/boost/numeric/odeint/util/unit_helper.hpp +151 -0
- package/boost/numeric/odeint/util/unwrap_reference.hpp +141 -0
- package/boost/numeric/odeint/version.hpp +55 -0
- package/boost/numeric/odeint.hpp +87 -0
- package/boost/numeric/ublas/assignment.hpp +1288 -0
- package/boost/numeric/ublas/banded.hpp +2372 -0
- package/boost/numeric/ublas/blas.hpp +499 -0
- package/boost/numeric/ublas/detail/concepts.hpp +1465 -0
- package/boost/numeric/ublas/detail/config.hpp +304 -0
- package/boost/numeric/ublas/detail/definitions.hpp +212 -0
- package/boost/numeric/ublas/detail/documentation.hpp +33 -0
- package/boost/numeric/ublas/detail/duff.hpp +56 -0
- package/boost/numeric/ublas/detail/iterator.hpp +1448 -0
- package/boost/numeric/ublas/detail/matrix_assign.hpp +1785 -0
- package/boost/numeric/ublas/detail/raw.hpp +878 -0
- package/boost/numeric/ublas/detail/returntype_deduction.hpp +174 -0
- package/boost/numeric/ublas/detail/temporary.hpp +33 -0
- package/boost/numeric/ublas/detail/vector_assign.hpp +609 -0
- package/boost/numeric/ublas/doxydoc.hpp +58 -0
- package/boost/numeric/ublas/exception.hpp +297 -0
- package/boost/numeric/ublas/experimental/sparse_view.hpp +317 -0
- package/boost/numeric/ublas/expression_types.hpp +506 -0
- package/boost/numeric/ublas/functional.hpp +2112 -0
- package/boost/numeric/ublas/fwd.hpp +229 -0
- package/boost/numeric/ublas/hermitian.hpp +2633 -0
- package/boost/numeric/ublas/io.hpp +355 -0
- package/boost/numeric/ublas/lu.hpp +350 -0
- package/boost/numeric/ublas/matrix.hpp +6013 -0
- package/boost/numeric/ublas/matrix_expression.hpp +5693 -0
- package/boost/numeric/ublas/matrix_proxy.hpp +5457 -0
- package/boost/numeric/ublas/matrix_sparse.hpp +5773 -0
- package/boost/numeric/ublas/matrix_vector.hpp +406 -0
- package/boost/numeric/ublas/opencl/elementwise.hpp +508 -0
- package/boost/numeric/ublas/opencl/library.hpp +38 -0
- package/boost/numeric/ublas/opencl/matrix.hpp +123 -0
- package/boost/numeric/ublas/opencl/misc.hpp +182 -0
- package/boost/numeric/ublas/opencl/operations.hpp +18 -0
- package/boost/numeric/ublas/opencl/prod.hpp +364 -0
- package/boost/numeric/ublas/opencl/transpose.hpp +142 -0
- package/boost/numeric/ublas/opencl/vector.hpp +90 -0
- package/boost/numeric/ublas/opencl.hpp +16 -0
- package/boost/numeric/ublas/operation/begin.hpp +318 -0
- package/boost/numeric/ublas/operation/c_array.hpp +41 -0
- package/boost/numeric/ublas/operation/end.hpp +318 -0
- package/boost/numeric/ublas/operation/num_columns.hpp +45 -0
- package/boost/numeric/ublas/operation/num_rows.hpp +44 -0
- package/boost/numeric/ublas/operation/size.hpp +350 -0
- package/boost/numeric/ublas/operation.hpp +830 -0
- package/boost/numeric/ublas/operation_blocked.hpp +266 -0
- package/boost/numeric/ublas/operation_sparse.hpp +198 -0
- package/boost/numeric/ublas/operations.hpp +26 -0
- package/boost/numeric/ublas/storage.hpp +2131 -0
- package/boost/numeric/ublas/storage_sparse.hpp +578 -0
- package/boost/numeric/ublas/symmetric.hpp +2309 -0
- package/boost/numeric/ublas/tags.hpp +37 -0
- package/boost/numeric/ublas/tensor/algorithms.hpp +345 -0
- package/boost/numeric/ublas/tensor/expression.hpp +181 -0
- package/boost/numeric/ublas/tensor/expression_evaluation.hpp +288 -0
- package/boost/numeric/ublas/tensor/extents.hpp +335 -0
- package/boost/numeric/ublas/tensor/functions.hpp +558 -0
- package/boost/numeric/ublas/tensor/index.hpp +89 -0
- package/boost/numeric/ublas/tensor/multi_index.hpp +110 -0
- package/boost/numeric/ublas/tensor/multi_index_utility.hpp +364 -0
- package/boost/numeric/ublas/tensor/multiplication.hpp +945 -0
- package/boost/numeric/ublas/tensor/operators_arithmetic.hpp +244 -0
- package/boost/numeric/ublas/tensor/operators_comparison.hpp +175 -0
- package/boost/numeric/ublas/tensor/ostream.hpp +122 -0
- package/boost/numeric/ublas/tensor/storage_traits.hpp +84 -0
- package/boost/numeric/ublas/tensor/strides.hpp +251 -0
- package/boost/numeric/ublas/tensor/tensor.hpp +734 -0
- package/boost/numeric/ublas/tensor.hpp +26 -0
- package/boost/numeric/ublas/traits/c_array.hpp +110 -0
- package/boost/numeric/ublas/traits/const_iterator_type.hpp +127 -0
- package/boost/numeric/ublas/traits/iterator_type.hpp +126 -0
- package/boost/numeric/ublas/traits.hpp +753 -0
- package/boost/numeric/ublas/triangular.hpp +2775 -0
- package/boost/numeric/ublas/vector.hpp +2947 -0
- package/boost/numeric/ublas/vector_expression.hpp +1762 -0
- package/boost/numeric/ublas/vector_of_vector.hpp +1347 -0
- package/boost/numeric/ublas/vector_proxy.hpp +1697 -0
- package/boost/numeric/ublas/vector_sparse.hpp +2246 -0
- 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_
|