bayinx 0.3.12__tar.gz → 0.3.13__tar.gz

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.
Files changed (43) hide show
  1. {bayinx-0.3.12 → bayinx-0.3.13}/PKG-INFO +1 -1
  2. {bayinx-0.3.12 → bayinx-0.3.13}/pyproject.toml +2 -2
  3. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/censored/posnormal/r.py +5 -6
  4. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/uniform.py +39 -5
  5. {bayinx-0.3.12 → bayinx-0.3.13}/.github/workflows/release_and_publish.yml +0 -0
  6. {bayinx-0.3.12 → bayinx-0.3.13}/.gitignore +0 -0
  7. {bayinx-0.3.12 → bayinx-0.3.13}/LICENSE +0 -0
  8. {bayinx-0.3.12 → bayinx-0.3.13}/README.md +0 -0
  9. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/__init__.py +0 -0
  10. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/constraints/__init__.py +0 -0
  11. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/constraints/lower.py +0 -0
  12. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/core/__init__.py +0 -0
  13. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/core/_constraint.py +0 -0
  14. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/core/_flow.py +0 -0
  15. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/core/_model.py +0 -0
  16. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/core/_optimization.py +0 -0
  17. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/core/_parameter.py +0 -0
  18. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/core/_variational.py +0 -0
  19. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/__init__.py +0 -0
  20. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/bernoulli.py +0 -0
  21. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/censored/__init__.py +0 -0
  22. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/censored/gamma2/__init__.py +0 -0
  23. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/censored/gamma2/r.py +0 -0
  24. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/censored/posnormal/__init__.py +0 -0
  25. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/gamma2.py +0 -0
  26. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/normal.py +0 -0
  27. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/dists/posnormal.py +0 -0
  28. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/__init__.py +0 -0
  29. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/opt/__init__.py +0 -0
  30. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/vi/__init__.py +0 -0
  31. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/vi/flows/__init__.py +0 -0
  32. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/vi/flows/fullaffine.py +0 -0
  33. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/vi/flows/planar.py +0 -0
  34. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/vi/flows/radial.py +0 -0
  35. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/vi/flows/sylvester.py +0 -0
  36. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/vi/meanfield.py +0 -0
  37. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/vi/normalizing_flow.py +0 -0
  38. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/mhx/vi/standard.py +0 -0
  39. {bayinx-0.3.12 → bayinx-0.3.13}/src/bayinx/py.typed +0 -0
  40. {bayinx-0.3.12 → bayinx-0.3.13}/tests/__init__.py +0 -0
  41. {bayinx-0.3.12 → bayinx-0.3.13}/tests/test_predictive.py +0 -0
  42. {bayinx-0.3.12 → bayinx-0.3.13}/tests/test_variational.py +0 -0
  43. {bayinx-0.3.12 → bayinx-0.3.13}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bayinx
3
- Version: 0.3.12
3
+ Version: 0.3.13
4
4
  Summary: Bayesian Inference with JAX
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "bayinx"
3
- version = "0.3.12"
3
+ version = "0.3.13"
4
4
  description = "Bayesian Inference with JAX"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -19,7 +19,7 @@ build-backend = "hatchling.build"
19
19
  addopts = "-q --benchmark-min-rounds=30 --benchmark-columns=rounds,mean,median,stddev --benchmark-group-by=func"
20
20
 
21
21
  [tool.bumpversion]
22
- current_version = "0.3.12"
22
+ current_version = "0.3.13"
23
23
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
24
24
  serialize = ["{major}.{minor}.{patch}"]
25
25
  search = "{current_version}"
@@ -1,8 +1,9 @@
1
1
  import jax.numpy as jnp
2
2
  import jax.random as jr
3
+ from jax.scipy.special import ndtri
3
4
  from jaxtyping import Array, ArrayLike, Float, Key
4
5
 
5
- from bayinx.dists import posnormal
6
+ from bayinx.dists import normal, posnormal
6
7
 
7
8
 
8
9
  def prob(
@@ -108,10 +109,8 @@ def sample(
108
109
  # Derive shape
109
110
  shape = (n,) + jnp.broadcast_shapes(mu.shape, sigma.shape, censor.shape)
110
111
 
111
- # Draw from positive normal
112
- draws = jr.truncated_normal(key, 0.0, jnp.inf, shape) * sigma + mu
113
-
114
- # Censor values
115
- draws = jnp.where(censor <= draws, censor, draws)
112
+ # Construct draws
113
+ draws = jr.uniform(key, shape)
114
+ draws = mu + sigma * ndtri(normal.cdf(-mu/sigma, 0.0, 1.0) + draws * normal.cdf(mu/sigma, 0.0, 1.0))
116
115
 
117
116
  return draws
@@ -1,6 +1,7 @@
1
1
  import jax.lax as _lax
2
2
  import jax.numpy as jnp
3
- from jaxtyping import Array, ArrayLike, Float
3
+ import jax.random as jr
4
+ from jaxtyping import Array, ArrayLike, Float, Key
4
5
 
5
6
 
6
7
  def prob(
@@ -17,8 +18,10 @@ def prob(
17
18
  # Returns
18
19
  The PDF evaluated at `x`. The output will have the broadcasted shapes of `x`, `lb`, and `ub`.
19
20
  """
21
+ # Cast to Array
22
+ x, lb, ub = jnp.asarray(x), jnp.asarray(lb), jnp.asarray(ub)
20
23
 
21
- return 1.0 / (ub - lb) # pyright: ignore
24
+ return 1.0 / (ub - lb)
22
25
 
23
26
 
24
27
  def logprob(
@@ -35,8 +38,10 @@ def logprob(
35
38
  # Returns
36
39
  The log of the PDF evaluated at `x`. The output will have the broadcasted shapes of `x`, `lb`, and `ub`.
37
40
  """
41
+ # Cast to Array
42
+ x, lb, ub = jnp.asarray(x), jnp.asarray(lb), jnp.asarray(ub)
38
43
 
39
- return _lax.log(1.0) - _lax.log(ub - lb) # pyright: ignore
44
+ return _lax.log(1.0) - _lax.log(ub - lb)
40
45
 
41
46
 
42
47
  def uprob(
@@ -53,8 +58,10 @@ def uprob(
53
58
  # Returns
54
59
  The uPDF evaluated at `x`. The output will have the broadcasted shapes of `x`, `lb`, and `ub`.
55
60
  """
61
+ # Cast to Array
62
+ x, lb, ub = jnp.asarray(x), jnp.asarray(lb), jnp.asarray(ub)
56
63
 
57
- return jnp.ones(jnp.broadcast_arrays(x, lb, ub))
64
+ return jnp.ones(jnp.broadcast_shapes(x.shape, lb.shape, ub.shape))
58
65
 
59
66
 
60
67
  def ulogprob(
@@ -71,5 +78,32 @@ def ulogprob(
71
78
  # Returns
72
79
  The log uPDF evaluated at `x`. The output will have the broadcasted shapes of `x`, `lb`, and `ub`.
73
80
  """
81
+ # Cast to Array
82
+ x, lb, ub = jnp.asarray(x), jnp.asarray(lb), jnp.asarray(ub)
74
83
 
75
- return jnp.zeros(jnp.broadcast_arrays(x, lb, ub))
84
+ return jnp.zeros(jnp.broadcast_shapes(x.shape, lb.shape, ub.shape))
85
+
86
+ def sample(
87
+ n: int, lb: Float[ArrayLike, "..."], ub: Float[ArrayLike, "..."], key: Key = jr.PRNGKey(0),
88
+ ) -> Float[Array, "..."]:
89
+ """
90
+ Sample from a Uniform distribution.
91
+
92
+ # Parameters
93
+ - `n`: Number of draws to sample per-parameter.
94
+ - `lb`: The lower bound parameter(s).
95
+ - `ub`: The upper bound parameter(s).
96
+
97
+ # Returns
98
+ Draws from a Uniform distribution. The output will have the shape of (n,) + the broadcasted shapes of `lb` and `ub`.
99
+ """
100
+ # Cast to Array
101
+ lb, ub = jnp.asarray(lb), jnp.asarray(ub)
102
+
103
+ # Derive shape
104
+ shape = (n,) + jnp.broadcast_shapes(lb.shape, ub.shape)
105
+
106
+ # Construct draws
107
+ draws = jr.uniform(key, shape, minval = lb, maxval = ub)
108
+
109
+ return draws
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes