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,266 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright (c) 2000-2002
|
|
3
|
+
// Joerg Walter, Mathias Koch
|
|
4
|
+
//
|
|
5
|
+
// Distributed under the Boost Software License, Version 1.0. (See
|
|
6
|
+
// accompanying file LICENSE_1_0.txt or copy at
|
|
7
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
|
8
|
+
//
|
|
9
|
+
// The authors gratefully acknowledge the support of
|
|
10
|
+
// GeNeSys mbH & Co. KG in producing this work.
|
|
11
|
+
//
|
|
12
|
+
|
|
13
|
+
#ifndef _BOOST_UBLAS_OPERATION_BLOCKED_
|
|
14
|
+
#define _BOOST_UBLAS_OPERATION_BLOCKED_
|
|
15
|
+
|
|
16
|
+
#include <boost/numeric/ublas/traits.hpp>
|
|
17
|
+
#include <boost/numeric/ublas/detail/vector_assign.hpp> // indexing_vector_assign
|
|
18
|
+
#include <boost/numeric/ublas/detail/matrix_assign.hpp> // indexing_matrix_assign
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
namespace boost { namespace numeric { namespace ublas {
|
|
22
|
+
|
|
23
|
+
template<class V, typename V::size_type BS, class E1, class E2>
|
|
24
|
+
BOOST_UBLAS_INLINE
|
|
25
|
+
V
|
|
26
|
+
block_prod (const matrix_expression<E1> &e1,
|
|
27
|
+
const vector_expression<E2> &e2) {
|
|
28
|
+
typedef V vector_type;
|
|
29
|
+
typedef const E1 expression1_type;
|
|
30
|
+
typedef const E2 expression2_type;
|
|
31
|
+
typedef typename V::size_type size_type;
|
|
32
|
+
typedef typename V::value_type value_type;
|
|
33
|
+
const size_type block_size = BS;
|
|
34
|
+
|
|
35
|
+
V v (e1 ().size1 ());
|
|
36
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
37
|
+
vector<value_type> cv (v.size ());
|
|
38
|
+
typedef typename type_traits<value_type>::real_type real_type;
|
|
39
|
+
real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
|
|
40
|
+
indexing_vector_assign<scalar_assign> (cv, prod (e1, e2));
|
|
41
|
+
#endif
|
|
42
|
+
size_type i_size = e1 ().size1 ();
|
|
43
|
+
size_type j_size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size ());
|
|
44
|
+
for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
|
|
45
|
+
size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
|
|
46
|
+
// FIX: never ignore Martin Weiser's advice ;-(
|
|
47
|
+
#ifdef BOOST_UBLAS_NO_CACHE
|
|
48
|
+
vector_range<vector_type> v_range (v, range (i_begin, i_end));
|
|
49
|
+
#else
|
|
50
|
+
// vector<value_type, bounded_array<value_type, block_size> > v_range (i_end - i_begin);
|
|
51
|
+
vector<value_type> v_range (i_end - i_begin);
|
|
52
|
+
#endif
|
|
53
|
+
v_range.assign (zero_vector<value_type> (i_end - i_begin));
|
|
54
|
+
for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
|
|
55
|
+
size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
|
|
56
|
+
#ifdef BOOST_UBLAS_NO_CACHE
|
|
57
|
+
const matrix_range<expression1_type> e1_range (e1 (), range (i_begin, i_end), range (j_begin, j_end));
|
|
58
|
+
const vector_range<expression2_type> e2_range (e2 (), range (j_begin, j_end));
|
|
59
|
+
v_range.plus_assign (prod (e1_range, e2_range));
|
|
60
|
+
#else
|
|
61
|
+
// const matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > e1_range (project (e1 (), range (i_begin, i_end), range (j_begin, j_end)));
|
|
62
|
+
// const vector<value_type, bounded_array<value_type, block_size> > e2_range (project (e2 (), range (j_begin, j_end)));
|
|
63
|
+
const matrix<value_type, row_major> e1_range (project (e1 (), range (i_begin, i_end), range (j_begin, j_end)));
|
|
64
|
+
const vector<value_type> e2_range (project (e2 (), range (j_begin, j_end)));
|
|
65
|
+
v_range.plus_assign (prod (e1_range, e2_range));
|
|
66
|
+
#endif
|
|
67
|
+
}
|
|
68
|
+
#ifndef BOOST_UBLAS_NO_CACHE
|
|
69
|
+
project (v, range (i_begin, i_end)).assign (v_range);
|
|
70
|
+
#endif
|
|
71
|
+
}
|
|
72
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
73
|
+
BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
|
|
74
|
+
#endif
|
|
75
|
+
return v;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
template<class V, typename V::size_type BS, class E1, class E2>
|
|
79
|
+
BOOST_UBLAS_INLINE
|
|
80
|
+
V
|
|
81
|
+
block_prod (const vector_expression<E1> &e1,
|
|
82
|
+
const matrix_expression<E2> &e2) {
|
|
83
|
+
typedef V vector_type;
|
|
84
|
+
typedef const E1 expression1_type;
|
|
85
|
+
typedef const E2 expression2_type;
|
|
86
|
+
typedef typename V::size_type size_type;
|
|
87
|
+
typedef typename V::value_type value_type;
|
|
88
|
+
const size_type block_size = BS;
|
|
89
|
+
|
|
90
|
+
V v (e2 ().size2 ());
|
|
91
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
92
|
+
vector<value_type> cv (v.size ());
|
|
93
|
+
typedef typename type_traits<value_type>::real_type real_type;
|
|
94
|
+
real_type verrorbound (norm_1 (v) + norm_1 (e1) * norm_1 (e2));
|
|
95
|
+
indexing_vector_assign<scalar_assign> (cv, prod (e1, e2));
|
|
96
|
+
#endif
|
|
97
|
+
size_type i_size = BOOST_UBLAS_SAME (e1 ().size (), e2 ().size1 ());
|
|
98
|
+
size_type j_size = e2 ().size2 ();
|
|
99
|
+
for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
|
|
100
|
+
size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
|
|
101
|
+
// FIX: never ignore Martin Weiser's advice ;-(
|
|
102
|
+
#ifdef BOOST_UBLAS_NO_CACHE
|
|
103
|
+
vector_range<vector_type> v_range (v, range (j_begin, j_end));
|
|
104
|
+
#else
|
|
105
|
+
// vector<value_type, bounded_array<value_type, block_size> > v_range (j_end - j_begin);
|
|
106
|
+
vector<value_type> v_range (j_end - j_begin);
|
|
107
|
+
#endif
|
|
108
|
+
v_range.assign (zero_vector<value_type> (j_end - j_begin));
|
|
109
|
+
for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
|
|
110
|
+
size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
|
|
111
|
+
#ifdef BOOST_UBLAS_NO_CACHE
|
|
112
|
+
const vector_range<expression1_type> e1_range (e1 (), range (i_begin, i_end));
|
|
113
|
+
const matrix_range<expression2_type> e2_range (e2 (), range (i_begin, i_end), range (j_begin, j_end));
|
|
114
|
+
#else
|
|
115
|
+
// const vector<value_type, bounded_array<value_type, block_size> > e1_range (project (e1 (), range (i_begin, i_end)));
|
|
116
|
+
// const matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > e2_range (project (e2 (), range (i_begin, i_end), range (j_begin, j_end)));
|
|
117
|
+
const vector<value_type> e1_range (project (e1 (), range (i_begin, i_end)));
|
|
118
|
+
const matrix<value_type, column_major> e2_range (project (e2 (), range (i_begin, i_end), range (j_begin, j_end)));
|
|
119
|
+
#endif
|
|
120
|
+
v_range.plus_assign (prod (e1_range, e2_range));
|
|
121
|
+
}
|
|
122
|
+
#ifndef BOOST_UBLAS_NO_CACHE
|
|
123
|
+
project (v, range (j_begin, j_end)).assign (v_range);
|
|
124
|
+
#endif
|
|
125
|
+
}
|
|
126
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
127
|
+
BOOST_UBLAS_CHECK (norm_1 (v - cv) <= 2 * std::numeric_limits<real_type>::epsilon () * verrorbound, internal_logic ());
|
|
128
|
+
#endif
|
|
129
|
+
return v;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
template<class M, typename M::size_type BS, class E1, class E2>
|
|
133
|
+
BOOST_UBLAS_INLINE
|
|
134
|
+
M
|
|
135
|
+
block_prod (const matrix_expression<E1> &e1,
|
|
136
|
+
const matrix_expression<E2> &e2,
|
|
137
|
+
row_major_tag) {
|
|
138
|
+
typedef M matrix_type;
|
|
139
|
+
typedef const E1 expression1_type;
|
|
140
|
+
typedef const E2 expression2_type;
|
|
141
|
+
typedef typename M::size_type size_type;
|
|
142
|
+
typedef typename M::value_type value_type;
|
|
143
|
+
const size_type block_size = BS;
|
|
144
|
+
|
|
145
|
+
M m (e1 ().size1 (), e2 ().size2 ());
|
|
146
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
147
|
+
matrix<value_type, row_major> cm (m.size1 (), m.size2 ());
|
|
148
|
+
typedef typename type_traits<value_type>::real_type real_type;
|
|
149
|
+
real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
|
|
150
|
+
indexing_matrix_assign<scalar_assign> (cm, prod (e1, e2), row_major_tag ());
|
|
151
|
+
disable_type_check<bool>::value = true;
|
|
152
|
+
#endif
|
|
153
|
+
size_type i_size = e1 ().size1 ();
|
|
154
|
+
size_type j_size = e2 ().size2 ();
|
|
155
|
+
size_type k_size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ());
|
|
156
|
+
for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
|
|
157
|
+
size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
|
|
158
|
+
for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
|
|
159
|
+
size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
|
|
160
|
+
// FIX: never ignore Martin Weiser's advice ;-(
|
|
161
|
+
#ifdef BOOST_UBLAS_NO_CACHE
|
|
162
|
+
matrix_range<matrix_type> m_range (m, range (i_begin, i_end), range (j_begin, j_end));
|
|
163
|
+
#else
|
|
164
|
+
// matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > m_range (i_end - i_begin, j_end - j_begin);
|
|
165
|
+
matrix<value_type, row_major> m_range (i_end - i_begin, j_end - j_begin);
|
|
166
|
+
#endif
|
|
167
|
+
m_range.assign (zero_matrix<value_type> (i_end - i_begin, j_end - j_begin));
|
|
168
|
+
for (size_type k_begin = 0; k_begin < k_size; k_begin += block_size) {
|
|
169
|
+
size_type k_end = k_begin + (std::min) (k_size - k_begin, block_size);
|
|
170
|
+
#ifdef BOOST_UBLAS_NO_CACHE
|
|
171
|
+
const matrix_range<expression1_type> e1_range (e1 (), range (i_begin, i_end), range (k_begin, k_end));
|
|
172
|
+
const matrix_range<expression2_type> e2_range (e2 (), range (k_begin, k_end), range (j_begin, j_end));
|
|
173
|
+
#else
|
|
174
|
+
// const matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
|
|
175
|
+
// const matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
|
|
176
|
+
const matrix<value_type, row_major> e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
|
|
177
|
+
const matrix<value_type, column_major> e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
|
|
178
|
+
#endif
|
|
179
|
+
m_range.plus_assign (prod (e1_range, e2_range));
|
|
180
|
+
}
|
|
181
|
+
#ifndef BOOST_UBLAS_NO_CACHE
|
|
182
|
+
project (m, range (i_begin, i_end), range (j_begin, j_end)).assign (m_range);
|
|
183
|
+
#endif
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
187
|
+
disable_type_check<bool>::value = false;
|
|
188
|
+
BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
|
|
189
|
+
#endif
|
|
190
|
+
return m;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
template<class M, typename M::size_type BS, class E1, class E2>
|
|
194
|
+
BOOST_UBLAS_INLINE
|
|
195
|
+
M
|
|
196
|
+
block_prod (const matrix_expression<E1> &e1,
|
|
197
|
+
const matrix_expression<E2> &e2,
|
|
198
|
+
column_major_tag) {
|
|
199
|
+
typedef M matrix_type;
|
|
200
|
+
typedef const E1 expression1_type;
|
|
201
|
+
typedef const E2 expression2_type;
|
|
202
|
+
typedef typename M::size_type size_type;
|
|
203
|
+
typedef typename M::value_type value_type;
|
|
204
|
+
const size_type block_size = BS;
|
|
205
|
+
|
|
206
|
+
M m (e1 ().size1 (), e2 ().size2 ());
|
|
207
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
208
|
+
matrix<value_type, column_major> cm (m.size1 (), m.size2 ());
|
|
209
|
+
typedef typename type_traits<value_type>::real_type real_type;
|
|
210
|
+
real_type merrorbound (norm_1 (m) + norm_1 (e1) * norm_1 (e2));
|
|
211
|
+
indexing_matrix_assign<scalar_assign> (cm, prod (e1, e2), column_major_tag ());
|
|
212
|
+
disable_type_check<bool>::value = true;
|
|
213
|
+
#endif
|
|
214
|
+
size_type i_size = e1 ().size1 ();
|
|
215
|
+
size_type j_size = e2 ().size2 ();
|
|
216
|
+
size_type k_size = BOOST_UBLAS_SAME (e1 ().size2 (), e2 ().size1 ());
|
|
217
|
+
for (size_type j_begin = 0; j_begin < j_size; j_begin += block_size) {
|
|
218
|
+
size_type j_end = j_begin + (std::min) (j_size - j_begin, block_size);
|
|
219
|
+
for (size_type i_begin = 0; i_begin < i_size; i_begin += block_size) {
|
|
220
|
+
size_type i_end = i_begin + (std::min) (i_size - i_begin, block_size);
|
|
221
|
+
// FIX: never ignore Martin Weiser's advice ;-(
|
|
222
|
+
#ifdef BOOST_UBLAS_NO_CACHE
|
|
223
|
+
matrix_range<matrix_type> m_range (m, range (i_begin, i_end), range (j_begin, j_end));
|
|
224
|
+
#else
|
|
225
|
+
// matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > m_range (i_end - i_begin, j_end - j_begin);
|
|
226
|
+
matrix<value_type, column_major> m_range (i_end - i_begin, j_end - j_begin);
|
|
227
|
+
#endif
|
|
228
|
+
m_range.assign (zero_matrix<value_type> (i_end - i_begin, j_end - j_begin));
|
|
229
|
+
for (size_type k_begin = 0; k_begin < k_size; k_begin += block_size) {
|
|
230
|
+
size_type k_end = k_begin + (std::min) (k_size - k_begin, block_size);
|
|
231
|
+
#ifdef BOOST_UBLAS_NO_CACHE
|
|
232
|
+
const matrix_range<expression1_type> e1_range (e1 (), range (i_begin, i_end), range (k_begin, k_end));
|
|
233
|
+
const matrix_range<expression2_type> e2_range (e2 (), range (k_begin, k_end), range (j_begin, j_end));
|
|
234
|
+
#else
|
|
235
|
+
// const matrix<value_type, row_major, bounded_array<value_type, block_size * block_size> > e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
|
|
236
|
+
// const matrix<value_type, column_major, bounded_array<value_type, block_size * block_size> > e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
|
|
237
|
+
const matrix<value_type, row_major> e1_range (project (e1 (), range (i_begin, i_end), range (k_begin, k_end)));
|
|
238
|
+
const matrix<value_type, column_major> e2_range (project (e2 (), range (k_begin, k_end), range (j_begin, j_end)));
|
|
239
|
+
#endif
|
|
240
|
+
m_range.plus_assign (prod (e1_range, e2_range));
|
|
241
|
+
}
|
|
242
|
+
#ifndef BOOST_UBLAS_NO_CACHE
|
|
243
|
+
project (m, range (i_begin, i_end), range (j_begin, j_end)).assign (m_range);
|
|
244
|
+
#endif
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
#if BOOST_UBLAS_TYPE_CHECK
|
|
248
|
+
disable_type_check<bool>::value = false;
|
|
249
|
+
BOOST_UBLAS_CHECK (norm_1 (m - cm) <= 2 * std::numeric_limits<real_type>::epsilon () * merrorbound, internal_logic ());
|
|
250
|
+
#endif
|
|
251
|
+
return m;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Dispatcher
|
|
255
|
+
template<class M, typename M::size_type BS, class E1, class E2>
|
|
256
|
+
BOOST_UBLAS_INLINE
|
|
257
|
+
M
|
|
258
|
+
block_prod (const matrix_expression<E1> &e1,
|
|
259
|
+
const matrix_expression<E2> &e2) {
|
|
260
|
+
typedef typename M::orientation_category orientation_category;
|
|
261
|
+
return block_prod<M, BS> (e1, e2, orientation_category ());
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
}}}
|
|
265
|
+
|
|
266
|
+
#endif
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright (c) 2000-2002
|
|
3
|
+
// Joerg Walter, Mathias Koch
|
|
4
|
+
//
|
|
5
|
+
// Distributed under the Boost Software License, Version 1.0. (See
|
|
6
|
+
// accompanying file LICENSE_1_0.txt or copy at
|
|
7
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
|
8
|
+
//
|
|
9
|
+
// The authors gratefully acknowledge the support of
|
|
10
|
+
// GeNeSys mbH & Co. KG in producing this work.
|
|
11
|
+
//
|
|
12
|
+
|
|
13
|
+
#ifndef _BOOST_UBLAS_OPERATION_SPARSE_
|
|
14
|
+
#define _BOOST_UBLAS_OPERATION_SPARSE_
|
|
15
|
+
|
|
16
|
+
#include <boost/numeric/ublas/traits.hpp>
|
|
17
|
+
|
|
18
|
+
// These scaled additions were borrowed from MTL unashamedly.
|
|
19
|
+
// But Alexei Novakov had a lot of ideas to improve these. Thanks.
|
|
20
|
+
|
|
21
|
+
namespace boost { namespace numeric { namespace ublas {
|
|
22
|
+
|
|
23
|
+
template<class M, class E1, class E2, class TRI>
|
|
24
|
+
BOOST_UBLAS_INLINE
|
|
25
|
+
M &
|
|
26
|
+
sparse_prod (const matrix_expression<E1> &e1,
|
|
27
|
+
const matrix_expression<E2> &e2,
|
|
28
|
+
M &m, TRI,
|
|
29
|
+
row_major_tag) {
|
|
30
|
+
typedef M matrix_type;
|
|
31
|
+
typedef TRI triangular_restriction;
|
|
32
|
+
typedef const E1 expression1_type;
|
|
33
|
+
typedef const E2 expression2_type;
|
|
34
|
+
typedef typename M::size_type size_type;
|
|
35
|
+
typedef typename M::value_type value_type;
|
|
36
|
+
|
|
37
|
+
// ISSUE why is there a dense vector here?
|
|
38
|
+
vector<value_type> temporary (e2 ().size2 ());
|
|
39
|
+
temporary.clear ();
|
|
40
|
+
typename expression1_type::const_iterator1 it1 (e1 ().begin1 ());
|
|
41
|
+
typename expression1_type::const_iterator1 it1_end (e1 ().end1 ());
|
|
42
|
+
while (it1 != it1_end) {
|
|
43
|
+
size_type jb (temporary.size ());
|
|
44
|
+
size_type je (0);
|
|
45
|
+
#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
|
|
46
|
+
typename expression1_type::const_iterator2 it2 (it1.begin ());
|
|
47
|
+
typename expression1_type::const_iterator2 it2_end (it1.end ());
|
|
48
|
+
#else
|
|
49
|
+
typename expression1_type::const_iterator2 it2 (boost::numeric::ublas::begin (it1, iterator1_tag ()));
|
|
50
|
+
typename expression1_type::const_iterator2 it2_end (boost::numeric::ublas::end (it1, iterator1_tag ()));
|
|
51
|
+
#endif
|
|
52
|
+
while (it2 != it2_end) {
|
|
53
|
+
// temporary.plus_assign (*it2 * row (e2 (), it2.index2 ()));
|
|
54
|
+
matrix_row<expression2_type> mr (e2 (), it2.index2 ());
|
|
55
|
+
typename matrix_row<expression2_type>::const_iterator itr (mr.begin ());
|
|
56
|
+
typename matrix_row<expression2_type>::const_iterator itr_end (mr.end ());
|
|
57
|
+
while (itr != itr_end) {
|
|
58
|
+
size_type j (itr.index ());
|
|
59
|
+
temporary (j) += *it2 * *itr;
|
|
60
|
+
jb = (std::min) (jb, j);
|
|
61
|
+
je = (std::max) (je, j);
|
|
62
|
+
++ itr;
|
|
63
|
+
}
|
|
64
|
+
++ it2;
|
|
65
|
+
}
|
|
66
|
+
for (size_type j = jb; j < je + 1; ++ j) {
|
|
67
|
+
if (temporary (j) != value_type/*zero*/()) {
|
|
68
|
+
// FIXME we'll need to extend the container interface!
|
|
69
|
+
// m.push_back (it1.index1 (), j, temporary (j));
|
|
70
|
+
// FIXME What to do with adaptors?
|
|
71
|
+
// m.insert (it1.index1 (), j, temporary (j));
|
|
72
|
+
if (triangular_restriction::other (it1.index1 (), j))
|
|
73
|
+
m (it1.index1 (), j) = temporary (j);
|
|
74
|
+
temporary (j) = value_type/*zero*/();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
++ it1;
|
|
78
|
+
}
|
|
79
|
+
return m;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
template<class M, class E1, class E2, class TRI>
|
|
83
|
+
BOOST_UBLAS_INLINE
|
|
84
|
+
M &
|
|
85
|
+
sparse_prod (const matrix_expression<E1> &e1,
|
|
86
|
+
const matrix_expression<E2> &e2,
|
|
87
|
+
M &m, TRI,
|
|
88
|
+
column_major_tag) {
|
|
89
|
+
typedef M matrix_type;
|
|
90
|
+
typedef TRI triangular_restriction;
|
|
91
|
+
typedef const E1 expression1_type;
|
|
92
|
+
typedef const E2 expression2_type;
|
|
93
|
+
typedef typename M::size_type size_type;
|
|
94
|
+
typedef typename M::value_type value_type;
|
|
95
|
+
|
|
96
|
+
// ISSUE why is there a dense vector here?
|
|
97
|
+
vector<value_type> temporary (e1 ().size1 ());
|
|
98
|
+
temporary.clear ();
|
|
99
|
+
typename expression2_type::const_iterator2 it2 (e2 ().begin2 ());
|
|
100
|
+
typename expression2_type::const_iterator2 it2_end (e2 ().end2 ());
|
|
101
|
+
while (it2 != it2_end) {
|
|
102
|
+
size_type ib (temporary.size ());
|
|
103
|
+
size_type ie (0);
|
|
104
|
+
#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
|
|
105
|
+
typename expression2_type::const_iterator1 it1 (it2.begin ());
|
|
106
|
+
typename expression2_type::const_iterator1 it1_end (it2.end ());
|
|
107
|
+
#else
|
|
108
|
+
typename expression2_type::const_iterator1 it1 (boost::numeric::ublas::begin (it2, iterator2_tag ()));
|
|
109
|
+
typename expression2_type::const_iterator1 it1_end (boost::numeric::ublas::end (it2, iterator2_tag ()));
|
|
110
|
+
#endif
|
|
111
|
+
while (it1 != it1_end) {
|
|
112
|
+
// column (m, it2.index2 ()).plus_assign (*it1 * column (e1 (), it1.index1 ()));
|
|
113
|
+
matrix_column<expression1_type> mc (e1 (), it1.index1 ());
|
|
114
|
+
typename matrix_column<expression1_type>::const_iterator itc (mc.begin ());
|
|
115
|
+
typename matrix_column<expression1_type>::const_iterator itc_end (mc.end ());
|
|
116
|
+
while (itc != itc_end) {
|
|
117
|
+
size_type i (itc.index ());
|
|
118
|
+
temporary (i) += *it1 * *itc;
|
|
119
|
+
ib = (std::min) (ib, i);
|
|
120
|
+
ie = (std::max) (ie, i);
|
|
121
|
+
++ itc;
|
|
122
|
+
}
|
|
123
|
+
++ it1;
|
|
124
|
+
}
|
|
125
|
+
for (size_type i = ib; i < ie + 1; ++ i) {
|
|
126
|
+
if (temporary (i) != value_type/*zero*/()) {
|
|
127
|
+
// FIXME we'll need to extend the container interface!
|
|
128
|
+
// m.push_back (i, it2.index2 (), temporary (i));
|
|
129
|
+
// FIXME What to do with adaptors?
|
|
130
|
+
// m.insert (i, it2.index2 (), temporary (i));
|
|
131
|
+
if (triangular_restriction::other (i, it2.index2 ()))
|
|
132
|
+
m (i, it2.index2 ()) = temporary (i);
|
|
133
|
+
temporary (i) = value_type/*zero*/();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
++ it2;
|
|
137
|
+
}
|
|
138
|
+
return m;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Dispatcher
|
|
142
|
+
template<class M, class E1, class E2, class TRI>
|
|
143
|
+
BOOST_UBLAS_INLINE
|
|
144
|
+
M &
|
|
145
|
+
sparse_prod (const matrix_expression<E1> &e1,
|
|
146
|
+
const matrix_expression<E2> &e2,
|
|
147
|
+
M &m, TRI, bool init = true) {
|
|
148
|
+
typedef typename M::value_type value_type;
|
|
149
|
+
typedef TRI triangular_restriction;
|
|
150
|
+
typedef typename M::orientation_category orientation_category;
|
|
151
|
+
|
|
152
|
+
if (init)
|
|
153
|
+
m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
|
|
154
|
+
return sparse_prod (e1, e2, m, triangular_restriction (), orientation_category ());
|
|
155
|
+
}
|
|
156
|
+
template<class M, class E1, class E2, class TRI>
|
|
157
|
+
BOOST_UBLAS_INLINE
|
|
158
|
+
M
|
|
159
|
+
sparse_prod (const matrix_expression<E1> &e1,
|
|
160
|
+
const matrix_expression<E2> &e2,
|
|
161
|
+
TRI) {
|
|
162
|
+
typedef M matrix_type;
|
|
163
|
+
typedef TRI triangular_restriction;
|
|
164
|
+
|
|
165
|
+
matrix_type m (e1 ().size1 (), e2 ().size2 ());
|
|
166
|
+
// FIXME needed for c_matrix?!
|
|
167
|
+
// return sparse_prod (e1, e2, m, triangular_restriction (), false);
|
|
168
|
+
return sparse_prod (e1, e2, m, triangular_restriction (), true);
|
|
169
|
+
}
|
|
170
|
+
template<class M, class E1, class E2>
|
|
171
|
+
BOOST_UBLAS_INLINE
|
|
172
|
+
M &
|
|
173
|
+
sparse_prod (const matrix_expression<E1> &e1,
|
|
174
|
+
const matrix_expression<E2> &e2,
|
|
175
|
+
M &m, bool init = true) {
|
|
176
|
+
typedef typename M::value_type value_type;
|
|
177
|
+
typedef typename M::orientation_category orientation_category;
|
|
178
|
+
|
|
179
|
+
if (init)
|
|
180
|
+
m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
|
|
181
|
+
return sparse_prod (e1, e2, m, full (), orientation_category ());
|
|
182
|
+
}
|
|
183
|
+
template<class M, class E1, class E2>
|
|
184
|
+
BOOST_UBLAS_INLINE
|
|
185
|
+
M
|
|
186
|
+
sparse_prod (const matrix_expression<E1> &e1,
|
|
187
|
+
const matrix_expression<E2> &e2) {
|
|
188
|
+
typedef M matrix_type;
|
|
189
|
+
|
|
190
|
+
matrix_type m (e1 ().size1 (), e2 ().size2 ());
|
|
191
|
+
// FIXME needed for c_matrix?!
|
|
192
|
+
// return sparse_prod (e1, e2, m, full (), false);
|
|
193
|
+
return sparse_prod (e1, e2, m, full (), true);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
}}}
|
|
197
|
+
|
|
198
|
+
#endif
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* -*- c++ -*-
|
|
3
|
+
*
|
|
4
|
+
* \file operations.hpp
|
|
5
|
+
*
|
|
6
|
+
* \brief This header includes several headers from the operation directory.
|
|
7
|
+
*
|
|
8
|
+
* Copyright (c) 2009, Gunter Winkler
|
|
9
|
+
*
|
|
10
|
+
* Distributed under the Boost Software License, Version 1.0. (See
|
|
11
|
+
* accompanying file LICENSE_1_0.txt or copy at
|
|
12
|
+
* http://www.boost.org/LICENSE_1_0.txt)
|
|
13
|
+
*
|
|
14
|
+
* \author Gunter Winkler (guwi17 at gmx dot de)
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#ifndef BOOST_NUMERIC_UBLAS_OPERATIONS_HPP
|
|
18
|
+
#define BOOST_NUMERIC_UBLAS_OPERATIONS_HPP
|
|
19
|
+
|
|
20
|
+
#include <boost/numeric/ublas/operation/begin.hpp>
|
|
21
|
+
#include <boost/numeric/ublas/operation/end.hpp>
|
|
22
|
+
#include <boost/numeric/ublas/operation/num_columns.hpp>
|
|
23
|
+
#include <boost/numeric/ublas/operation/num_rows.hpp>
|
|
24
|
+
#include <boost/numeric/ublas/operation/size.hpp>
|
|
25
|
+
|
|
26
|
+
#endif
|