1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
use crate::;
/// An uncertain value which always yields the same
/// value.
///
/// This type can be useful when fixed values should
/// be conditionally returned e.g. from [`flat_map`](Uncertain::flat_map).
/// If you only need a fixed value as part of an uncertain computation, consider
/// using [`map`](Uncertain::map).
///
/// # Examples
///
/// Basic usage: conditional distribution.
///
/// ```
/// use uncertain::{Uncertain, PointMass, Distribution};
/// use rand_distr::Normal;
///
/// let a = Distribution::from(Normal::new(2.0, 1.0).unwrap());
/// let b = a.flat_map(|a| if a < 1.5 {
/// Distribution::from(Normal::new(0.0, 1.0).unwrap()).into_boxed()
/// } else {
/// PointMass::new(1.0).into_boxed()
/// });
/// assert!(b.map(|b| b > 0.5).pr(0.9));
/// ```
///
/// In most cases you can use [`map`](Uncertain::map) instead:
///
/// ```
/// use uncertain::{Uncertain, PointMass, Distribution};
/// use rand_distr::StandardNormal;
///
/// let x = 1.0;
/// let y = Distribution::<f64, _>::from(StandardNormal).into_ref();
/// let a = PointMass::new(x).add(&y);
/// let b = (&y).map(|v: f64| v + x);
/// assert!(a.join(b, |a, b| a == b).pr(0.999));
/// ```