passenger 6.1.0 → 6.1.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.
- checksums.yaml +4 -4
- data/CHANGELOG +32 -2
- data/Rakefile +6 -13
- data/bin/passenger-install-apache2-module +15 -19
- data/bin/passenger-install-nginx-module +42 -44
- data/bin/passenger-status +9 -10
- data/build/common_library.rb +4 -4
- data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +1 -1
- data/build/test_basics.rb +4 -3
- data/dev/copy_boost_headers +54 -40
- data/dev/ruby_server.rb +1 -1
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +94 -110
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag_impl.hpp +52 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +641 -285
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +593 -260
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +37 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas_based_exchange.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/chrono.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +16 -17
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +25 -34
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp +204 -97
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +251 -122
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp +56 -56
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_arm.hpp +129 -129
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +253 -125
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_sparc.hpp +25 -25
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +193 -126
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_arm.hpp +57 -57
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +96 -97
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_cas_based.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_atomic.hpp +27 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_sync.hpp +39 -37
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_linux_arm.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extending_cas_based_arithmetic.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +21 -21
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +170 -98
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +209 -119
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +95 -95
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +148 -76
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +293 -123
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +87 -71
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +88 -88
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_operations.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch32.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch64.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_alpha.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_ppc.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_sparc.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_x86.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_arm.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_x86.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations_emulated.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_atomic.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_sync.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_linux_arm.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +110 -49
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_atomic_memory_order_utils.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/has_posix_clock_traits.hpp +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_conversions.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +69 -30
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/intptr.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lock_pool.hpp +51 -31
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/memory_order_utils.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/once_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_traits.hpp +31 -31
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_iec559.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_integral.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_signed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_copyable.hpp +20 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_signed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_unsigned.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +90 -16
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_dragonfly_umtx.hpp +80 -11
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +160 -15
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_freebsd_umtx.hpp +327 -38
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_futex.hpp +276 -33
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_generic.hpp +260 -20
- data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +14 -18
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/posix_clock_traits_fwd.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +102 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/wait_result.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +108 -41
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +1235 -1009
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +23 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +88 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +68 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +72 -13
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +8 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +31 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +37 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +72 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +3 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +54 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +32 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +27 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +37 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +23 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +41 -20
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -8
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_is_avalanching.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +29 -29
- data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +15 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/assert.hpp +18 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_sleep.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/static_assert.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -10
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +35 -27
- data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +20 -9
- data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +0 -5
- data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_rebind.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +43 -64
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -5
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/eval_if_default.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +103 -117
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/conjunction.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/disjunction.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/negation.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/type_identity.hpp +54 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +32 -38
- data/src/cxx_supportlib/vendor-modified/boost/iterator/enable_if_convertible.hpp +84 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/interoperable.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +162 -309
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +52 -161
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +3 -11
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +804 -977
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +24 -17
- data/src/cxx_supportlib/vendor-modified/boost/iterator/min_category.hpp +83 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/minimum_category.hpp +11 -73
- data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +56 -57
- data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +123 -156
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +43 -50
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +23 -27
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +10 -11
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +6 -7
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/type_traits.hpp +81 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +8 -9
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +1 -12
- data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +8 -26
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +11 -44
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +33 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na_assert.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/ptr_to_ref.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +0 -13
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +190 -190
- data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +12 -2
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/config.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/size.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/xoshiro_base.hpp +472 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +7 -10
- data/src/cxx_supportlib/vendor-modified/boost/random/gamma_distribution.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/generalized_inverse_gaussian_distribution.hpp +339 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +12 -14
- data/src/cxx_supportlib/vendor-modified/boost/random/inverse_gaussian_distribution.hpp +226 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +63 -63
- data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_constant_distribution.hpp +7 -10
- data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_linear_distribution.hpp +8 -11
- data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/random/xoshiro.hpp +488 -0
- data/src/cxx_supportlib/vendor-modified/boost/random.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/has_member_size.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/msvc_has_iterator_workaround.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +35 -18
- data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +18 -101
- data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +4 -10
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +63 -17
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +71 -16
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +22 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +11 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +11 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +40 -38
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +39 -37
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +46 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +57 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +21 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +18 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +11 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +12 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +16 -11
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits_defaults.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +54 -49
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +64 -62
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/deprecated_macros.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +2 -77
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +1 -64
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -77
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_cxx20_constexpr.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +5 -28
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +41 -40
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +0 -15
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +0 -18
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +31 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +34 -8
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/unordered/{unordered_printers.hpp → detail/unordered_printers.hpp} +34 -36
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +6 -49
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/nginx_module/ContentHandler.c +2 -0
- data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +5 -3
- data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +6 -13
- data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +29 -30
- data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -3
- data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +2 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger.rb +8 -8
- metadata +26 -99
- data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +0 -47
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +0 -41
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +0 -34
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -28
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +0 -68
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/conditional.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/integral_constant.hpp +0 -46
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_function.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +0 -46
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +0 -64
- data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +0 -15
- data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +0 -195
- data/src/cxx_supportlib/vendor-modified/boost/detail/select_type.hpp +0 -36
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/internals.hpp +0 -35
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +0 -120
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_debug.cpp +0 -59
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +0 -189
- data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +0 -31
- data/src/cxx_supportlib/vendor-modified/boost/regex/config/borland.hpp +0 -72
- data/src/cxx_supportlib/vendor-modified/boost/regex/config/cwchar.hpp +0 -207
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/static_mutex.hpp +0 -182
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +0 -797
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +0 -1598
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +0 -3174
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +0 -511
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/char_regex_traits.hpp +0 -81
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +0 -1237
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -213
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/error_type.hpp +0 -59
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +0 -1516
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/indexed_bit_flag.hpp +0 -54
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_category.hpp +0 -91
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_traits.hpp +0 -135
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +0 -161
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +0 -716
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +0 -183
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +0 -171
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +0 -128
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +0 -645
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +0 -1030
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +0 -1947
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +0 -1131
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +0 -146
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regbase.hpp +0 -180
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -166
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -1158
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_fwd.hpp +0 -73
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_grep.hpp +0 -155
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -195
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_match.hpp +0 -382
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_merge.hpp +0 -93
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +0 -241
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_replace.hpp +0 -99
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_search.hpp +0 -217
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +0 -174
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -327
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +0 -189
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +0 -997
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +0 -237
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +0 -321
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +0 -516
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/syntax_type.hpp +0 -105
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +0 -185
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +0 -360
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +0 -871
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +0 -1229
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +0 -79
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +0 -63
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +0 -88
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_pt.hpp +0 -104
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +0 -69
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_sync.hpp +0 -72
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +0 -163
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +0 -152
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +0 -185
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +0 -148
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +0 -170
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +0 -200
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +0 -194
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +0 -179
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +0 -186
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +0 -147
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +0 -174
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +0 -141
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +0 -165
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +0 -163
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +0 -69
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +0 -128
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_nt.hpp +0 -96
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pt.hpp +0 -86
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_sync.hpp +0 -94
data/src/cxx_supportlib/vendor-modified/boost/random/generalized_inverse_gaussian_distribution.hpp
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/* boost random/generalized_inverse_gaussian_distribution.hpp header file
|
|
2
|
+
*
|
|
3
|
+
* Copyright Young Geun Kim 2025
|
|
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
|
+
* See http://www.boost.org for most recent version including documentation.
|
|
9
|
+
*
|
|
10
|
+
* $Id$
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
#ifndef BOOST_GENERALIZED_RANDOM_INVERSE_GAUSSIAN_DISTRIBUTION_HPP
|
|
14
|
+
#define BOOST_GENERALIZED_RANDOM_INVERSE_GAUSSIAN_DISTRIBUTION_HPP
|
|
15
|
+
|
|
16
|
+
#include <boost/config/no_tr1/cmath.hpp>
|
|
17
|
+
#include <istream>
|
|
18
|
+
#include <iosfwd>
|
|
19
|
+
#include <limits>
|
|
20
|
+
#include <boost/assert.hpp>
|
|
21
|
+
#include <boost/limits.hpp>
|
|
22
|
+
#include <boost/random/detail/config.hpp>
|
|
23
|
+
#include <boost/random/detail/operators.hpp>
|
|
24
|
+
#include <boost/random/uniform_01.hpp>
|
|
25
|
+
|
|
26
|
+
namespace boost {
|
|
27
|
+
namespace random {
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The generalized inverse gaussian distribution is a real-valued distribution with
|
|
31
|
+
* three parameters p, a, and b. It produced values > 0.
|
|
32
|
+
*
|
|
33
|
+
* It has
|
|
34
|
+
* \f$\displaystyle p(x) = \frac{(a / b)^{p / 2}}{2 K_{p}(\sqrt{a b})} x^{p - 1} e^{-(a x + b / 2) / 2}\f$.
|
|
35
|
+
* where \f$\displaystyle K_{p}\f$ is a modified Bessel function of the second kind.
|
|
36
|
+
*
|
|
37
|
+
* The algorithm used is from
|
|
38
|
+
*
|
|
39
|
+
* @blockquote
|
|
40
|
+
* "Random variate generation for the generalized inverse Gaussian distribution",
|
|
41
|
+
* Luc Devroye,
|
|
42
|
+
* Statistics and Computing,
|
|
43
|
+
* Volume 24, 2014, Pages 236 - 246
|
|
44
|
+
* @endblockquote
|
|
45
|
+
*/
|
|
46
|
+
template<class RealType = double>
|
|
47
|
+
class generalized_inverse_gaussian_distribution
|
|
48
|
+
{
|
|
49
|
+
public:
|
|
50
|
+
typedef RealType result_type;
|
|
51
|
+
typedef RealType input_type;
|
|
52
|
+
|
|
53
|
+
class param_type {
|
|
54
|
+
public:
|
|
55
|
+
typedef generalized_inverse_gaussian_distribution distribution_type;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Constructs a @c param_type object from the "p", "a", and "b"
|
|
59
|
+
* parameters.
|
|
60
|
+
*
|
|
61
|
+
* Requires:
|
|
62
|
+
* a > 0 && b >= 0 if p > 0,
|
|
63
|
+
* a > 0 && b > 0 if p == 0,
|
|
64
|
+
* a >= 0 && b > 0 if p < 0
|
|
65
|
+
*/
|
|
66
|
+
explicit param_type(RealType p_arg = RealType(1.0),
|
|
67
|
+
RealType a_arg = RealType(1.0),
|
|
68
|
+
RealType b_arg = RealType(1.0))
|
|
69
|
+
: _p(p_arg), _a(a_arg), _b(b_arg)
|
|
70
|
+
{
|
|
71
|
+
BOOST_ASSERT(
|
|
72
|
+
(p_arg > RealType(0) && a_arg > RealType(0) && b_arg >= RealType(0)) ||
|
|
73
|
+
(p_arg == RealType(0) && a_arg > RealType(0) && b_arg > RealType(0)) ||
|
|
74
|
+
(p_arg < RealType(0) && a_arg >= RealType(0) && b_arg > RealType(0))
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Returns the "p" parameter of the distribution. */
|
|
79
|
+
RealType p() const { return _p; }
|
|
80
|
+
/** Returns the "a" parameter of the distribution. */
|
|
81
|
+
RealType a() const { return _a; }
|
|
82
|
+
/** Returns the "b" parameter of the distribution. */
|
|
83
|
+
RealType b() const { return _b; }
|
|
84
|
+
|
|
85
|
+
/** Writes a @c param_type to a @c std::ostream. */
|
|
86
|
+
BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm)
|
|
87
|
+
{
|
|
88
|
+
os << parm._p << ' ' << parm._a << ' ' << parm._b;
|
|
89
|
+
return os;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Reads a @c param_type from a @c std::istream. */
|
|
93
|
+
BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm)
|
|
94
|
+
{
|
|
95
|
+
is >> parm._p >> std::ws >> parm._a >> std::ws >> parm._b;
|
|
96
|
+
return is;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Returns true if the two sets of parameters are the same. */
|
|
100
|
+
BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs)
|
|
101
|
+
{ return lhs._p == rhs._p && lhs._a == rhs._a && lhs._b == rhs._b; }
|
|
102
|
+
|
|
103
|
+
/** Returns true if the two sets of parameters are different. */
|
|
104
|
+
BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type)
|
|
105
|
+
|
|
106
|
+
private:
|
|
107
|
+
RealType _p;
|
|
108
|
+
RealType _a;
|
|
109
|
+
RealType _b;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
|
|
113
|
+
BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
|
|
114
|
+
#endif
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Constructs an @c generalized_inverse_gaussian_distribution from its "p", "a", and "b" parameters.
|
|
118
|
+
*
|
|
119
|
+
* Requires:
|
|
120
|
+
* a > 0 && b >= 0 if p > 0,
|
|
121
|
+
* a > 0 && b > 0 if p == 0,
|
|
122
|
+
* a >= 0 && b > 0 if p < 0
|
|
123
|
+
*/
|
|
124
|
+
explicit generalized_inverse_gaussian_distribution(RealType p_arg = RealType(1.0),
|
|
125
|
+
RealType a_arg = RealType(1.0),
|
|
126
|
+
RealType b_arg = RealType(1.0))
|
|
127
|
+
: _p(p_arg), _a(a_arg), _b(b_arg)
|
|
128
|
+
{
|
|
129
|
+
BOOST_ASSERT(
|
|
130
|
+
(p_arg > RealType(0) && a_arg > RealType(0) && b_arg >= RealType(0)) ||
|
|
131
|
+
(p_arg == RealType(0) && a_arg > RealType(0) && b_arg > RealType(0)) ||
|
|
132
|
+
(p_arg < RealType(0) && a_arg >= RealType(0) && b_arg > RealType(0))
|
|
133
|
+
);
|
|
134
|
+
init();
|
|
135
|
+
}
|
|
136
|
+
/** Constructs an @c generalized_inverse_gaussian_distribution from its parameters. */
|
|
137
|
+
explicit generalized_inverse_gaussian_distribution(const param_type& parm)
|
|
138
|
+
: _p(parm.p()), _a(parm.a()), _b(parm.b())
|
|
139
|
+
{
|
|
140
|
+
init();
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Returns a random variate distributed according to the
|
|
145
|
+
* generalized inverse gaussian distribution.
|
|
146
|
+
*/
|
|
147
|
+
template<class URNG>
|
|
148
|
+
RealType operator()(URNG& urng) const
|
|
149
|
+
{
|
|
150
|
+
#ifndef BOOST_NO_STDC_NAMESPACE
|
|
151
|
+
using std::sqrt;
|
|
152
|
+
using std::log;
|
|
153
|
+
using std::min;
|
|
154
|
+
using std::exp;
|
|
155
|
+
using std::cosh;
|
|
156
|
+
#endif
|
|
157
|
+
RealType t = result_type(1);
|
|
158
|
+
RealType s = result_type(1);
|
|
159
|
+
RealType log_concave = -psi(result_type(1));
|
|
160
|
+
if (log_concave >= result_type(.5) && log_concave <= result_type(2)) {
|
|
161
|
+
t = result_type(1);
|
|
162
|
+
} else if (log_concave > result_type(2)) {
|
|
163
|
+
t = sqrt(result_type(2) / (_alpha + _abs_p));
|
|
164
|
+
} else if (log_concave < result_type(.5)) {
|
|
165
|
+
t = log(result_type(4) / (_alpha + result_type(2) * _abs_p));
|
|
166
|
+
}
|
|
167
|
+
log_concave = -psi(result_type(-1));
|
|
168
|
+
if (log_concave >= result_type(.5) && log_concave <= result_type(2)) {
|
|
169
|
+
s = result_type(1);
|
|
170
|
+
} else if (log_concave > result_type(2)) {
|
|
171
|
+
s = sqrt(result_type(4) / (_alpha * cosh(1) + _abs_p));
|
|
172
|
+
} else if (log_concave < result_type(.5)) {
|
|
173
|
+
s = min(result_type(1) / _abs_p, log(result_type(1) + result_type(1) / _alpha + sqrt(result_type(1) / (_alpha * _alpha) + result_type(2) / _alpha)));
|
|
174
|
+
}
|
|
175
|
+
RealType eta = -psi(t);
|
|
176
|
+
RealType zeta = -psi_deriv(t);
|
|
177
|
+
RealType theta = -psi(-s);
|
|
178
|
+
RealType xi = psi_deriv(-s);
|
|
179
|
+
RealType p = result_type(1) / xi;
|
|
180
|
+
RealType r = result_type(1) / zeta;
|
|
181
|
+
RealType t_deriv = t - r * eta;
|
|
182
|
+
RealType s_deriv = s - p * theta;
|
|
183
|
+
RealType q = t_deriv + s_deriv;
|
|
184
|
+
RealType u = result_type(0);
|
|
185
|
+
RealType v = result_type(0);
|
|
186
|
+
RealType w = result_type(0);
|
|
187
|
+
RealType cand = result_type(0);
|
|
188
|
+
do
|
|
189
|
+
{
|
|
190
|
+
u = uniform_01<RealType>()(urng);
|
|
191
|
+
v = uniform_01<RealType>()(urng);
|
|
192
|
+
w = uniform_01<RealType>()(urng);
|
|
193
|
+
if (u < q / (p + q + r)) {
|
|
194
|
+
cand = -s_deriv + q * v;
|
|
195
|
+
} else if (u < (q + r) / (p + q + r)) {
|
|
196
|
+
cand = t_deriv - r * log(v);
|
|
197
|
+
} else {
|
|
198
|
+
cand = -s_deriv + p * log(v);
|
|
199
|
+
}
|
|
200
|
+
} while (w * chi(cand, s, t, s_deriv, t_deriv, eta, zeta, theta, xi) > exp(psi(cand)));
|
|
201
|
+
cand = (_abs_p / _omega + sqrt(result_type(1) + _abs_p * _abs_p / (_omega * _omega))) * exp(cand);
|
|
202
|
+
return _p > 0 ? cand * sqrt(_b / _a) : sqrt(_b / _a) / cand;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Returns a random variate distributed accordint to the beta
|
|
207
|
+
* distribution with parameters specified by @c param.
|
|
208
|
+
*/
|
|
209
|
+
template<class URNG>
|
|
210
|
+
result_type operator()(URNG& urng, const param_type& parm) const
|
|
211
|
+
{
|
|
212
|
+
return generalized_inverse_gaussian_distribution(parm)(urng);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Returns the "p" parameter of the distribution. */
|
|
216
|
+
RealType p() const { return _p; }
|
|
217
|
+
/** Returns the "a" parameter of the distribution. */
|
|
218
|
+
RealType a() const { return _a; }
|
|
219
|
+
/** Returns the "b" parameter of the distribution. */
|
|
220
|
+
RealType b() const { return _b; }
|
|
221
|
+
|
|
222
|
+
/** Returns the smallest value that the distribution can produce. */
|
|
223
|
+
RealType min BOOST_PREVENT_MACRO_SUBSTITUTION () const
|
|
224
|
+
{ return RealType(0.0); }
|
|
225
|
+
/** Returns the largest value that the distribution can produce. */
|
|
226
|
+
RealType max BOOST_PREVENT_MACRO_SUBSTITUTION () const
|
|
227
|
+
{ return (std::numeric_limits<RealType>::infinity)(); }
|
|
228
|
+
|
|
229
|
+
/** Returns the parameters of the distribution. */
|
|
230
|
+
param_type param() const { return param_type(_p, _a, _b); }
|
|
231
|
+
/** Sets the parameters of the distribution. */
|
|
232
|
+
void param(const param_type& parm)
|
|
233
|
+
{
|
|
234
|
+
_p = parm.p();
|
|
235
|
+
_a = parm.a();
|
|
236
|
+
_b = parm.b();
|
|
237
|
+
init();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Effects: Subsequent uses of the distribution do not depend
|
|
242
|
+
* on values produced by any engine prior to invoking reset.
|
|
243
|
+
*/
|
|
244
|
+
void reset() { }
|
|
245
|
+
|
|
246
|
+
/** Writes an @c generalized_inverse_gaussian_distribution to a @c std::ostream. */
|
|
247
|
+
BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, generalized_inverse_gaussian_distribution, wd)
|
|
248
|
+
{
|
|
249
|
+
os << wd.param();
|
|
250
|
+
return os;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/** Reads an @c generalized_inverse_gaussian_distribution from a @c std::istream. */
|
|
254
|
+
BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, generalized_inverse_gaussian_distribution, wd)
|
|
255
|
+
{
|
|
256
|
+
param_type parm;
|
|
257
|
+
if(is >> parm) {
|
|
258
|
+
wd.param(parm);
|
|
259
|
+
}
|
|
260
|
+
return is;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Returns true if the two instances of @c generalized_inverse_gaussian_distribution will
|
|
265
|
+
* return identical sequences of values given equal generators.
|
|
266
|
+
*/
|
|
267
|
+
BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(generalized_inverse_gaussian_distribution, lhs, rhs)
|
|
268
|
+
{ return lhs._p == rhs._p && lhs._a == rhs._a && lhs._b == rhs._b; }
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Returns true if the two instances of @c generalized_inverse_gaussian_distribution will
|
|
272
|
+
* return different sequences of values given equal generators.
|
|
273
|
+
*/
|
|
274
|
+
BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(generalized_inverse_gaussian_distribution)
|
|
275
|
+
|
|
276
|
+
private:
|
|
277
|
+
RealType _p;
|
|
278
|
+
RealType _a;
|
|
279
|
+
RealType _b;
|
|
280
|
+
// some data precomputed from the parameters
|
|
281
|
+
RealType _abs_p;
|
|
282
|
+
RealType _omega;
|
|
283
|
+
RealType _alpha;
|
|
284
|
+
|
|
285
|
+
/// \cond hide_private_members
|
|
286
|
+
void init()
|
|
287
|
+
{
|
|
288
|
+
#ifndef BOOST_NO_STDC_NAMESPACE
|
|
289
|
+
using std::abs;
|
|
290
|
+
using std::sqrt;
|
|
291
|
+
#endif
|
|
292
|
+
_abs_p = abs(_p);
|
|
293
|
+
_omega = sqrt(_a * _b); // two-parameter representation (p, omega)
|
|
294
|
+
_alpha = sqrt(_omega * _omega + _abs_p * _abs_p) - _abs_p;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
result_type psi(const RealType& x) const
|
|
298
|
+
{
|
|
299
|
+
#ifndef BOOST_NO_STDC_NAMESPACE
|
|
300
|
+
using std::cosh;
|
|
301
|
+
using std::exp;
|
|
302
|
+
#endif
|
|
303
|
+
return -_alpha * (cosh(x) - result_type(1)) - _abs_p * (exp(x) - x - result_type(1));
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
result_type psi_deriv(const RealType& x) const
|
|
307
|
+
{
|
|
308
|
+
#ifndef BOOST_NO_STDC_NAMESPACE
|
|
309
|
+
using std::sinh;
|
|
310
|
+
using std::exp;
|
|
311
|
+
#endif
|
|
312
|
+
return -_alpha * sinh(x) - _abs_p * (exp(x) - result_type(1));
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
static result_type chi(const RealType& x,
|
|
316
|
+
const RealType& s, const RealType& t,
|
|
317
|
+
const RealType& s_deriv, const RealType& t_deriv,
|
|
318
|
+
const RealType& eta, const RealType& zeta, const RealType& theta, const RealType& xi)
|
|
319
|
+
{
|
|
320
|
+
#ifndef BOOST_NO_STDC_NAMESPACE
|
|
321
|
+
using std::exp;
|
|
322
|
+
#endif
|
|
323
|
+
if (x >= -s_deriv && x <= t_deriv) {
|
|
324
|
+
return result_type(1);
|
|
325
|
+
} else if (x > t_deriv) {
|
|
326
|
+
return exp(-eta - zeta * (x - t));
|
|
327
|
+
}
|
|
328
|
+
return exp(-theta + xi * (x + s));
|
|
329
|
+
}
|
|
330
|
+
/// \endcond
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
} // namespace random
|
|
334
|
+
|
|
335
|
+
using random::generalized_inverse_gaussian_distribution;
|
|
336
|
+
|
|
337
|
+
} // namespace boost
|
|
338
|
+
|
|
339
|
+
#endif // BOOST_GENERALIZED_RANDOM_INVERSE_GAUSSIAN_DISTRIBUTION_HPP
|
|
@@ -23,11 +23,9 @@
|
|
|
23
23
|
#include <boost/core/cmath.hpp>
|
|
24
24
|
#include <boost/random/detail/operators.hpp>
|
|
25
25
|
#include <boost/random/detail/vector_io.hpp>
|
|
26
|
+
#include <boost/random/detail/size.hpp>
|
|
26
27
|
#include <boost/random/discrete_distribution.hpp>
|
|
27
28
|
#include <boost/random/exponential_distribution.hpp>
|
|
28
|
-
#include <boost/range/begin.hpp>
|
|
29
|
-
#include <boost/range/end.hpp>
|
|
30
|
-
#include <boost/range/size.hpp>
|
|
31
29
|
#include <boost/type_traits/has_pre_increment.hpp>
|
|
32
30
|
#include <cmath>
|
|
33
31
|
#include <cstddef>
|
|
@@ -294,8 +292,8 @@ class hyperexponential_distribution
|
|
|
294
292
|
param_type(ProbRangeT const& prob_range,
|
|
295
293
|
RateRangeT const& rate_range,
|
|
296
294
|
typename boost::disable_if_c<boost::has_pre_increment<ProbRangeT>::value || boost::has_pre_increment<RateRangeT>::value>::type* = 0)
|
|
297
|
-
: probs_(
|
|
298
|
-
rates_(
|
|
295
|
+
: probs_(std::begin(prob_range), std::end(prob_range)),
|
|
296
|
+
rates_(std::begin(rate_range), std::end(rate_range))
|
|
299
297
|
{
|
|
300
298
|
hyperexp_detail::normalize(probs_);
|
|
301
299
|
|
|
@@ -330,8 +328,8 @@ class hyperexponential_distribution
|
|
|
330
328
|
// We SFINAE this out of existance if the argument type is
|
|
331
329
|
// incrementable as in that case the type is probably an iterator.
|
|
332
330
|
public: template <typename RateIterT>
|
|
333
|
-
param_type(RateIterT rate_first,
|
|
334
|
-
RateIterT rate_last,
|
|
331
|
+
param_type(RateIterT rate_first,
|
|
332
|
+
RateIterT rate_last,
|
|
335
333
|
typename boost::enable_if_c<boost::has_pre_increment<RateIterT>::value>::type* = 0)
|
|
336
334
|
: probs_(std::distance(rate_first, rate_last), 1), // will be normalized below
|
|
337
335
|
rates_(rate_first, rate_last)
|
|
@@ -355,8 +353,8 @@ class hyperexponential_distribution
|
|
|
355
353
|
*/
|
|
356
354
|
public: template <typename RateRangeT>
|
|
357
355
|
param_type(RateRangeT const& rate_range)
|
|
358
|
-
: probs_(boost::size(rate_range), 1), // Will be normalized below
|
|
359
|
-
rates_(
|
|
356
|
+
: probs_(boost::random::detail::size(rate_range), 1), // Will be normalized below
|
|
357
|
+
rates_(std::begin(rate_range), std::end(rate_range))
|
|
360
358
|
{
|
|
361
359
|
hyperexp_detail::normalize(probs_);
|
|
362
360
|
|
|
@@ -529,7 +527,7 @@ class hyperexponential_distribution
|
|
|
529
527
|
return lhs.probs_ == rhs.probs_
|
|
530
528
|
&& lhs.rates_ == rhs.rates_;
|
|
531
529
|
}
|
|
532
|
-
|
|
530
|
+
|
|
533
531
|
/** Returns true if the two sets of parameters are the different. */
|
|
534
532
|
public: BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type)
|
|
535
533
|
|
|
@@ -608,7 +606,7 @@ class hyperexponential_distribution
|
|
|
608
606
|
RateRangeT const& rate_range,
|
|
609
607
|
typename boost::disable_if_c<boost::has_pre_increment<ProbRangeT>::value || boost::has_pre_increment<RateRangeT>::value>::type* = 0)
|
|
610
608
|
: dd_(prob_range),
|
|
611
|
-
rates_(
|
|
609
|
+
rates_(std::begin(rate_range), std::end(rate_range))
|
|
612
610
|
{
|
|
613
611
|
BOOST_ASSERT( hyperexp_detail::check_params(dd_.probabilities(), rates_) );
|
|
614
612
|
}
|
|
@@ -667,8 +665,8 @@ class hyperexponential_distribution
|
|
|
667
665
|
*/
|
|
668
666
|
public: template <typename RateRangeT>
|
|
669
667
|
hyperexponential_distribution(RateRangeT const& rate_range)
|
|
670
|
-
: dd_(std::vector<RealT>(boost::size(rate_range), 1)),
|
|
671
|
-
rates_(
|
|
668
|
+
: dd_(std::vector<RealT>(boost::random::detail::size(rate_range), 1)),
|
|
669
|
+
rates_(std::begin(rate_range), std::end(rate_range))
|
|
672
670
|
{
|
|
673
671
|
BOOST_ASSERT( hyperexp_detail::check_params(dd_.probabilities(), rates_) );
|
|
674
672
|
}
|
|
@@ -854,7 +852,7 @@ class hyperexponential_distribution
|
|
|
854
852
|
return lhs.dd_ == rhs.dd_
|
|
855
853
|
&& lhs.rates_ == rhs.rates_;
|
|
856
854
|
}
|
|
857
|
-
|
|
855
|
+
|
|
858
856
|
/**
|
|
859
857
|
* Returns true if the two instances of @c hyperexponential_distribution will
|
|
860
858
|
* return different sequences of values given equal generators.
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/* boost random/inverse_gaussian_distribution.hpp header file
|
|
2
|
+
*
|
|
3
|
+
* Copyright Young Geun Kim 2025
|
|
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
|
+
* See http://www.boost.org for most recent version including documentation.
|
|
9
|
+
*
|
|
10
|
+
* $Id$
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
#ifndef BOOST_RANDOM_INVERSE_GAUSSIAN_DISTRIBUTION_HPP
|
|
14
|
+
#define BOOST_RANDOM_INVERSE_GAUSSIAN_DISTRIBUTION_HPP
|
|
15
|
+
|
|
16
|
+
#include <boost/config/no_tr1/cmath.hpp>
|
|
17
|
+
#include <istream>
|
|
18
|
+
#include <iosfwd>
|
|
19
|
+
#include <limits>
|
|
20
|
+
#include <boost/assert.hpp>
|
|
21
|
+
#include <boost/limits.hpp>
|
|
22
|
+
#include <boost/random/detail/config.hpp>
|
|
23
|
+
#include <boost/random/detail/operators.hpp>
|
|
24
|
+
#include <boost/random/uniform_01.hpp>
|
|
25
|
+
#include <boost/random/chi_squared_distribution.hpp>
|
|
26
|
+
|
|
27
|
+
namespace boost {
|
|
28
|
+
namespace random {
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The inverse gaussian distribution is a real-valued distribution with
|
|
32
|
+
* two parameters alpha (mean) and beta (shape). It produced values > 0.
|
|
33
|
+
*
|
|
34
|
+
* It has
|
|
35
|
+
* \f$\displaystyle p(x) = \sqrt{\beta / (2 \pi x^3)} \exp(-\frac{\beta (x - \alpha)^2}{2 \alpha^2 x})$.
|
|
36
|
+
*
|
|
37
|
+
* The algorithm used is from
|
|
38
|
+
*
|
|
39
|
+
* @blockquote
|
|
40
|
+
* "Generating Random Variates Using Transformations with Multiple Roots",
|
|
41
|
+
* Michael, J. R., Schucany, W. R. and Haas, R. W.,
|
|
42
|
+
* The American Statistician,
|
|
43
|
+
* Volume 30, Issue 2, 1976, Pages 88 - 90
|
|
44
|
+
* @endblockquote
|
|
45
|
+
*/
|
|
46
|
+
template<class RealType = double>
|
|
47
|
+
class inverse_gaussian_distribution
|
|
48
|
+
{
|
|
49
|
+
public:
|
|
50
|
+
typedef RealType result_type;
|
|
51
|
+
typedef RealType input_type;
|
|
52
|
+
|
|
53
|
+
class param_type {
|
|
54
|
+
public:
|
|
55
|
+
typedef inverse_gaussian_distribution distribution_type;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Constructs a @c param_type object from the "alpha" and "beta"
|
|
59
|
+
* parameters.
|
|
60
|
+
*
|
|
61
|
+
* Requires: alpha > 0 && beta > 0
|
|
62
|
+
*/
|
|
63
|
+
explicit param_type(RealType alpha_arg = RealType(1.0),
|
|
64
|
+
RealType beta_arg = RealType(1.0))
|
|
65
|
+
: _alpha(alpha_arg), _beta(beta_arg)
|
|
66
|
+
{
|
|
67
|
+
BOOST_ASSERT(alpha_arg > 0);
|
|
68
|
+
BOOST_ASSERT(beta_arg > 0);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Returns the "alpha" parameter of the distribution. */
|
|
72
|
+
RealType alpha() const { return _alpha; }
|
|
73
|
+
/** Returns the "beta" parameter of the distribution. */
|
|
74
|
+
RealType beta() const { return _beta; }
|
|
75
|
+
|
|
76
|
+
/** Writes a @c param_type to a @c std::ostream. */
|
|
77
|
+
BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, param_type, parm)
|
|
78
|
+
{ os << parm._alpha << ' ' << parm._beta; return os; }
|
|
79
|
+
|
|
80
|
+
/** Reads a @c param_type from a @c std::istream. */
|
|
81
|
+
BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, param_type, parm)
|
|
82
|
+
{ is >> parm._alpha >> std::ws >> parm._beta; return is; }
|
|
83
|
+
|
|
84
|
+
/** Returns true if the two sets of parameters are the same. */
|
|
85
|
+
BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(param_type, lhs, rhs)
|
|
86
|
+
{ return lhs._alpha == rhs._alpha && lhs._beta == rhs._beta; }
|
|
87
|
+
|
|
88
|
+
/** Returns true if the two sets fo parameters are different. */
|
|
89
|
+
BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(param_type)
|
|
90
|
+
|
|
91
|
+
private:
|
|
92
|
+
RealType _alpha;
|
|
93
|
+
RealType _beta;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
#ifndef BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
|
|
97
|
+
BOOST_STATIC_ASSERT(!std::numeric_limits<RealType>::is_integer);
|
|
98
|
+
#endif
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Constructs an @c inverse_gaussian_distribution from its "alpha" and "beta" parameters.
|
|
102
|
+
*
|
|
103
|
+
* Requires: alpha > 0, beta > 0
|
|
104
|
+
*/
|
|
105
|
+
explicit inverse_gaussian_distribution(RealType alpha_arg = RealType(1.0),
|
|
106
|
+
RealType beta_arg = RealType(1.0))
|
|
107
|
+
: _alpha(alpha_arg), _beta(beta_arg)
|
|
108
|
+
{
|
|
109
|
+
BOOST_ASSERT(alpha_arg > 0);
|
|
110
|
+
BOOST_ASSERT(beta_arg > 0);
|
|
111
|
+
init();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Constructs an @c inverse_gaussian_distribution from its parameters. */
|
|
115
|
+
explicit inverse_gaussian_distribution(const param_type& parm)
|
|
116
|
+
: _alpha(parm.alpha()), _beta(parm.beta())
|
|
117
|
+
{
|
|
118
|
+
init();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Returns a random variate distributed according to the
|
|
123
|
+
* inverse gaussian distribution.
|
|
124
|
+
*/
|
|
125
|
+
template<class URNG>
|
|
126
|
+
RealType operator()(URNG& urng) const
|
|
127
|
+
{
|
|
128
|
+
#ifndef BOOST_NO_STDC_NAMESPACE
|
|
129
|
+
using std::sqrt;
|
|
130
|
+
#endif
|
|
131
|
+
RealType w = _alpha * chi_squared_distribution<RealType>(result_type(1))(urng);
|
|
132
|
+
RealType cand = _alpha + _c * (w - sqrt(w * (result_type(4) * _beta + w)));
|
|
133
|
+
RealType u = uniform_01<RealType>()(urng);
|
|
134
|
+
if (u < _alpha / (_alpha + cand)) {
|
|
135
|
+
return cand;
|
|
136
|
+
}
|
|
137
|
+
return _alpha * _alpha / cand;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Returns a random variate distributed accordint to the beta
|
|
142
|
+
* distribution with parameters specified by @c param.
|
|
143
|
+
*/
|
|
144
|
+
template<class URNG>
|
|
145
|
+
RealType operator()(URNG& urng, const param_type& parm) const
|
|
146
|
+
{
|
|
147
|
+
return inverse_gaussian_distribution(parm)(urng);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** Returns the "alpha" parameter of the distribution. */
|
|
151
|
+
RealType alpha() const { return _alpha; }
|
|
152
|
+
/** Returns the "beta" parameter of the distribution. */
|
|
153
|
+
RealType beta() const { return _beta; }
|
|
154
|
+
|
|
155
|
+
/** Returns the smallest value that the distribution can produce. */
|
|
156
|
+
RealType min BOOST_PREVENT_MACRO_SUBSTITUTION () const
|
|
157
|
+
{ return RealType(0.0); }
|
|
158
|
+
/** Returns the largest value that the distribution can produce. */
|
|
159
|
+
RealType max BOOST_PREVENT_MACRO_SUBSTITUTION () const
|
|
160
|
+
{ return (std::numeric_limits<RealType>::infinity)(); }
|
|
161
|
+
|
|
162
|
+
/** Returns the parameters of the distribution. */
|
|
163
|
+
param_type param() const { return param_type(_alpha, _beta); }
|
|
164
|
+
/** Sets the parameters of the distribution. */
|
|
165
|
+
void param(const param_type& parm)
|
|
166
|
+
{
|
|
167
|
+
_alpha = parm.alpha();
|
|
168
|
+
_beta = parm.beta();
|
|
169
|
+
init();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Effects: Subsequent uses of the distribution do not depend
|
|
174
|
+
* on values produced by any engine prior to invoking reset.
|
|
175
|
+
*/
|
|
176
|
+
void reset() { }
|
|
177
|
+
|
|
178
|
+
/** Writes an @c inverse_gaussian_distribution to a @c std::ostream. */
|
|
179
|
+
BOOST_RANDOM_DETAIL_OSTREAM_OPERATOR(os, inverse_gaussian_distribution, wd)
|
|
180
|
+
{
|
|
181
|
+
os << wd.param();
|
|
182
|
+
return os;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Reads an @c inverse_gaussian_distribution from a @c std::istream. */
|
|
186
|
+
BOOST_RANDOM_DETAIL_ISTREAM_OPERATOR(is, inverse_gaussian_distribution, wd)
|
|
187
|
+
{
|
|
188
|
+
param_type parm;
|
|
189
|
+
if(is >> parm) {
|
|
190
|
+
wd.param(parm);
|
|
191
|
+
}
|
|
192
|
+
return is;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Returns true if the two instances of @c inverse_gaussian_distribution will
|
|
197
|
+
* return identical sequences of values given equal generators.
|
|
198
|
+
*/
|
|
199
|
+
BOOST_RANDOM_DETAIL_EQUALITY_OPERATOR(inverse_gaussian_distribution, lhs, rhs)
|
|
200
|
+
{ return lhs._alpha == rhs._alpha && lhs._beta == rhs._beta; }
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Returns true if the two instances of @c inverse_gaussian_distribution will
|
|
204
|
+
* return different sequences of values given equal generators.
|
|
205
|
+
*/
|
|
206
|
+
BOOST_RANDOM_DETAIL_INEQUALITY_OPERATOR(inverse_gaussian_distribution)
|
|
207
|
+
|
|
208
|
+
private:
|
|
209
|
+
result_type _alpha;
|
|
210
|
+
result_type _beta;
|
|
211
|
+
// some data precomputed from the parameters
|
|
212
|
+
result_type _c;
|
|
213
|
+
|
|
214
|
+
void init()
|
|
215
|
+
{
|
|
216
|
+
_c = _alpha / (result_type(2) * _beta);
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
} // namespace random
|
|
221
|
+
|
|
222
|
+
using random::inverse_gaussian_distribution;
|
|
223
|
+
|
|
224
|
+
} // namespace boost
|
|
225
|
+
|
|
226
|
+
#endif // BOOST_RANDOM_INVERSE_GAUSSIAN_DISTRIBUTION_HPP
|
|
@@ -434,10 +434,7 @@ private:
|
|
|
434
434
|
// already know what they are.
|
|
435
435
|
for(std::size_t j = 0; j < num_bits; ++j) {
|
|
436
436
|
if(tmp.i >= n) tmp.twist();
|
|
437
|
-
|
|
438
|
-
assert((tmp.x[tmp.i] & 1) == 1);
|
|
439
|
-
else
|
|
440
|
-
assert((tmp.x[tmp.i] & 1) == 0);
|
|
437
|
+
assert((tmp.x[tmp.i] & 1) == (j == num_bits - 1));
|
|
441
438
|
++tmp.i;
|
|
442
439
|
}
|
|
443
440
|
detail::polynomial phi;
|