3535#include < hydra/detail/BackendPolicy.h>
3636#include < hydra/Types.h>
3737#include < hydra/detail/functors/RandomUtils.h>
38+ #include < hydra/detail/functors/DistributionSampler.h>
3839#include < hydra/detail/TypeTraits.h>
3940#include < hydra/detail/Iterable_traits.h>
4041#include < hydra/detail/FunctorTraits.h>
@@ -118,7 +119,9 @@ template<typename RNG=default_random_engine, typename DerivedPolicy, typename It
118119typename std::enable_if<
119120detail::random::is_iterator<IteratorData>::value && detail::random::is_iterator<IteratorWeight>::value,
120121Range<IteratorData> >::type
121- unweight ( hydra_thrust::detail::execution_policy_base<DerivedPolicy> const & policy, IteratorData data_begin, IteratorData data_end, IteratorWeight weights_begin);
122+ unweight ( hydra_thrust::detail::execution_policy_base<DerivedPolicy> const & policy,
123+ IteratorData data_begin, IteratorData data_end, IteratorWeight weights_begin,
124+ double max_pdf=-1.0 , size_t rng_seed=0x8ec74d321e6b5a27 , size_t rng_jump=0 );
122125
123126/* *
124127 * \ingroup random
@@ -137,7 +140,8 @@ template<typename RNG=default_random_engine, typename IteratorData, typename Ite
137140typename std::enable_if<
138141detail::random::is_iterator<IteratorData>::value && detail::random::is_iterator<IteratorWeight>::value,
139142Range<IteratorData> >::type
140- unweight ( detail::BackendPolicy<BACKEND> const & policy, IteratorData data_begin, IteratorData data_end, IteratorWeight weights_begin);
143+ unweight ( detail::BackendPolicy<BACKEND> const & policy, IteratorData data_begin, IteratorData data_end, IteratorWeight weights_begin,
144+ double max_pdf=-1.0 , size_t rng_seed=0x8ec74d321e6b5a27 , size_t rng_jump=0 );
141145
142146/* *
143147 * \ingroup random
@@ -156,7 +160,8 @@ typename std::enable_if<
156160 detail::random::is_iterator<IteratorData>::value && detail::random::is_iterator<IteratorWeight>::value,
157161 Range<IteratorData>
158162>::type
159- unweight (IteratorData data_begin, IteratorData data_end , IteratorData weights_begin);
163+ unweight (IteratorData data_begin, IteratorData data_end , IteratorData weights_begin,
164+ double max_pdf=-1.0 , size_t rng_seed=0x8ec74d321e6b5a27 , size_t rng_jump=0 );
160165
161166/* *
162167 * \ingroup random
@@ -174,7 +179,8 @@ template<typename RNG=default_random_engine, typename IterableData, typename Ite
174179typename std::enable_if<
175180detail::random::is_iterable<IterableData>::value && detail::random::is_iterable<IterableWeight>::value,
176181Range< decltype (std::declval<IterableData>().begin())> >::type
177- unweight ( hydra::detail::BackendPolicy<BACKEND> const & policy, IterableData&& data, IterableWeight&& weights);
182+ unweight ( hydra::detail::BackendPolicy<BACKEND> const & policy, IterableData&& data, IterableWeight&& weights,
183+ double max_pdf=-1.0 , size_t rng_seed=0x8ec74d321e6b5a27 , size_t rng_jump=0 );
178184
179185/* *
180186 * \ingroup random
@@ -192,7 +198,8 @@ typename std::enable_if<
192198 detail::random::is_iterable<IterableData>::value && detail::random::is_iterable<IterableWeight>::value,
193199 Range< decltype (std::declval<IterableData>().begin())>
194200>::type
195- unweight ( IterableData data, IterableWeight weights);
201+ unweight ( IterableData data, IterableWeight weights,
202+ double max_pdf=-1.0 , size_t rng_seed=0x8ec74d321e6b5a27 , size_t rng_jump=0 );
196203
197204
198205/* *
@@ -304,7 +311,7 @@ detail::random::is_callable<Functor>::value && detail::random::is_iterator<Itera
304311Range<Iterator> >::type
305312sample (hydra::detail::BackendPolicy<BACKEND> const & policy,
306313 Iterator begin, Iterator end, double min, double max,
307- Functor const & functor, size_t seed=0xb56c4feeef1b );
314+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
308315
309316/* *
310317 * @brief Fill a range with numbers distributed according a user defined distribution.
@@ -322,7 +329,7 @@ detail::random::is_callable<Functor>::value && detail::random::is_iterator<Itera
322329Range<Iterator> >::type
323330sample (hydra_thrust::detail::execution_policy_base<DerivedPolicy> const & policy,
324331 Iterator begin, Iterator end, double min, double max,
325- Functor const & functor, size_t seed=0xb56c4feeef1b );
332+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
326333
327334/* *
328335 * @brief Fill a range with numbers distributed according a user defined distribution.
@@ -338,7 +345,7 @@ typename std::enable_if<
338345detail::random::is_callable<Functor>::value && detail::random::is_iterator<Iterator>::value,
339346Range<Iterator> >::type
340347sample (Iterator begin, Iterator end , double min, double max,
341- Functor const & functor, size_t seed=0xb56c4feeef1b );
348+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
342349
343350/* *
344351 * @brief Fill a range with numbers distributed according a user defined distribution.
@@ -353,7 +360,7 @@ typename std::enable_if<
353360detail::random::is_callable<Functor>::value && detail::random::is_iterable<Iterable>::value ,
354361Range< decltype (std::declval<Iterable>().begin())>>::type
355362sample (Iterable&& output, double min, double max,
356- Functor const & functor, size_t seed=0xb56c4feeef1b );
363+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
357364
358365/* *
359366 * @brief Fill a range with numbers distributed according a user defined distribution.
@@ -369,7 +376,7 @@ typename std::enable_if<
369376detail::random::is_callable<Functor>::value && detail::random::is_iterator<Iterator>::value,
370377Range<Iterator> >::type
371378sample (Iterator begin, Iterator end , std::array<double ,N>const & min, std::array<double ,N>const & max,
372- Functor const & functor, size_t seed=0xb56c4feeef1b );
379+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
373380
374381/* *
375382 * @brief Fill a range with numbers distributed according a user defined distribution.
@@ -388,7 +395,7 @@ detail::is_tuple_type< decltype(*std::declval<Iterator>())>::value,
388395Range<Iterator> >::type
389396sample (Iterator begin, Iterator end ,
390397 typename Functor::argument_type const & min, typename Functor::argument_type const & max,
391- Functor const & functor, size_t seed=0xb56c4feeef1b );
398+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
392399
393400/* *
394401 * @brief Fill a range with numbers distributed according a user defined distribution.
@@ -406,7 +413,7 @@ Range<Iterator> >::type
406413sample (hydra::detail::BackendPolicy<BACKEND> const & policy,
407414 Iterator begin, Iterator end ,
408415 std::array<double ,N>const & min, std::array<double ,N>const & max,
409- Functor const & functor, size_t seed=0xb56c4feeef1b );
416+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
410417/* *
411418 * @brief Fill a range with numbers distributed according a user defined distribution.
412419 * @param policy backend to perform the calculation.
@@ -423,7 +430,7 @@ Range<Iterator> >::type
423430sample (hydra_thrust::detail::execution_policy_base<DerivedPolicy> const & policy,
424431 Iterator begin, Iterator end ,
425432 std::array<double ,N>const & min, std::array<double ,N>const & max,
426- Functor const & functor, size_t seed=0xb56c4feeef1b );
433+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
427434
428435/* *
429436 * @brief Fill a range with numbers distributed according a user defined distribution.
@@ -439,7 +446,7 @@ detail::random::is_callable<Functor>::value && detail::random::is_iterable<Itera
439446Range< decltype (std::declval<Iterable>().begin())>>::type
440447sample ( Iterable&& output ,
441448 std::array<double ,N>const & min, std::array<double ,N>const & max,
442- Functor const & functor, size_t seed=0xb56c4feeef1b );
449+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
443450
444451/* *
445452 * @brief Fill a range with numbers distributed according a user defined distribution.
@@ -457,7 +464,7 @@ detail::is_tuple_type< decltype(*std::declval<Iterable>().begin())>::value ,
457464Range< decltype (std::declval<Iterable>().begin())>>::type
458465sample ( Iterable&& output ,
459466 typename Functor::argument_type const & min,typename Functor::argument_type const & max,
460- Functor const & functor, size_t seed=0xb56c4feeef1b );
467+ Functor const & functor, size_t seed=0xb56c4feeef1b , size_t rng_jump= 0 );
461468
462469/* *
463470 * \ingroup random
@@ -474,7 +481,7 @@ decltype(std::declval<RngFormula<FUNCTOR>>().Generate( std::declval<Engine&>(),
474481typename hydra_thrust::iterator_traits<Iterator>::value_type
475482>::value, void >::type
476483fill_random (hydra::detail::BackendPolicy<BACKEND> const & policy,
477- Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 );
484+ Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
478485
479486/* *
480487 * \ingroup random
@@ -489,7 +496,7 @@ typename std::enable_if< hydra::detail::has_rng_formula<FUNCTOR>::value && std::
489496decltype (std::declval<RngFormula<FUNCTOR>>().Generate( std::declval<Engine&>(), std::declval<FUNCTOR const &>())),
490497typename hydra_thrust::iterator_traits<Iterator>::value_type
491498>::value, void >::type
492- fill_random (Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 );
499+ fill_random (Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
493500
494501/* *
495502 * \ingroup random
@@ -504,7 +511,7 @@ typename std::enable_if< hydra::detail::is_iterable<Iterable>::value && std::is_
504511decltype (*std::declval<Iterable>().begin()), typename FUNCTOR::return_type
505512>::value, void >::type
506513fill_random (hydra::detail::BackendPolicy<BACKEND> const & policy,
507- Iterable&& iterable, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 );
514+ Iterable&& iterable, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
508515
509516/* *
510517 * \ingroup random
@@ -517,7 +524,7 @@ template< typename Engine = hydra::default_random_engine, typename Iterable, typ
517524typename std::enable_if< hydra::detail::is_iterable<Iterable>::value && std::is_convertible<
518525decltype (*std::declval<Iterable>().begin()), typename FUNCTOR::return_type
519526>::value, void >::type
520- fill_random (Iterable&& iterable, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 );
527+ fill_random (Iterable&& iterable, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
521528
522529/* *
523530 * \ingroup random
@@ -531,7 +538,7 @@ fill_random(Iterable&& iterable, FUNCTOR const& functor, size_t seed=0x254a0afcf
531538template < typename Engine = hydra::default_random_engine, hydra::detail::Backend BACKEND, typename Iterator, typename FUNCTOR >
532539typename std::enable_if< !hydra::detail::has_rng_formula<FUNCTOR>::value , void >::type
533540fill_random (hydra::detail::BackendPolicy<BACKEND> const & policy,
534- Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 );
541+ Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
535542
536543/* *
537544 * \ingroup random
@@ -543,7 +550,7 @@ fill_random(hydra::detail::BackendPolicy<BACKEND> const& policy,
543550 */
544551template < typename Engine = hydra::default_random_engine, typename Iterator, typename FUNCTOR >
545552typename std::enable_if< !hydra::detail::has_rng_formula<FUNCTOR>::value , void >::type
546- fill_random (Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 );
553+ fill_random (Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
547554
548555/* *
549556 * \ingroup random
@@ -560,7 +567,7 @@ decltype(std::declval<RngFormula<FUNCTOR>>().Generate( std::declval<Engine&>(),
560567typename std::iterator_traits<Iterator>::value_type
561568>::value && hydra::detail::has_rng_formula<FUNCTOR>::value, void >::type
562569fill_random (hydra::detail::BackendPolicy<BACKEND> const & policy,
563- Iterator begin, Iterator end, FUNCTOR const & funct, size_t seed=0x254a0afcf7da74a2 );
570+ Iterator begin, Iterator end, FUNCTOR const & funct, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
564571
565572/* *
566573 * \ingroup random
@@ -575,7 +582,7 @@ typename std::enable_if< !std::is_convertible<
575582decltype (std::declval<RngFormula<FUNCTOR>>().Generate( std::declval<Engine&>(), std::declval<FUNCTOR const &>())),
576583typename std::iterator_traits<Iterator>::value_type
577584>::value && hydra::detail::has_rng_formula<FUNCTOR>::value, void >::type
578- fill_random (Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 );
585+ fill_random (Iterator begin, Iterator end, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
579586
580587/* *
581588 * \ingroup random
@@ -590,7 +597,7 @@ typename std::enable_if< !hydra::detail::is_iterable<Iterable>::value || !std::i
590597decltype (*std::declval<Iterable>().begin()), typename FUNCTOR::return_type
591598>::value, void >::type
592599fill_random (hydra::detail::BackendPolicy<BACKEND> const & policy,
593- Iterable&& iterable, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 );
600+ Iterable&& iterable, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
594601
595602/* *
596603 * \ingroup random
@@ -603,7 +610,7 @@ template< typename Engine = hydra::default_random_engine, typename Iterable, typ
603610typename std::enable_if< !hydra::detail::is_iterable<Iterable>::value || !std::is_convertible<
604611decltype (*std::declval<Iterable>().begin()), typename FUNCTOR::return_type
605612>::value, void >::type
606- fill_random (Iterable&& iterable, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 );
613+ fill_random (Iterable&& iterable, FUNCTOR const & functor, size_t seed=0x254a0afcf7da74a2 , size_t rng_jump= 0 );
607614
608615
609616
0 commit comments