Transforms¶
Operations and transformations on stochastic morphisms.
transforms
¶
Transformations on stochastic morphisms.
Provides operations like conditioning, mixing, factoring, and normalization that wrap existing morphisms into new ones.
ConditionedMorphism
¶
ConditionedMorphism(inner: Morphism, evidence: Tensor)
Bases: Morphism
A morphism conditioned on evidence via Bayesian update.
Given a morphism f: A → B and evidence tensor e over B, produces f|e: A → B where:
f|e(a, b) = f(a, b) · e(b) / Σ_{b'} f(a, b') · e(b')
This is pointwise multiplication followed by row-renormalization.
| PARAMETER | DESCRIPTION |
|---|---|
inner
|
The unconditioned morphism.
TYPE:
|
evidence
|
Evidence tensor broadcastable to the codomain shape. Values should be non-negative (likelihoods).
TYPE:
|
Source code in src/quivers/stochastic/transforms.py
45 46 47 48 | |
tensor
property
¶
tensor: Tensor
Conditioned (posterior) tensor.
| RETURNS | DESCRIPTION |
|---|---|
Tensor
|
Row-normalized tensor after pointwise evidence multiplication. |
MixtureMorphism
¶
Bases: Morphism
Convex combination of two morphisms with a learnable weight.
Given morphisms f, g: A → B and a mixing weight p ∈ [0, 1]:
mix(p, f, g)(a, b) = p · f(a, b) + (1 - p) · g(a, b)
The weight p is parameterized via a sigmoid-transformed scalar.
| PARAMETER | DESCRIPTION |
|---|---|
left
|
First component morphism.
TYPE:
|
right
|
Second component morphism (same domain and codomain).
TYPE:
|
learnable
|
If True (default), the mixing weight is a learnable parameter. If False, it is fixed at the initial value.
TYPE:
|
init_logit
|
Initial value for the unconstrained logit of p. Default 0.0 (p = 0.5).
TYPE:
|
Source code in src/quivers/stochastic/transforms.py
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | |
FactoredMorphism
¶
FactoredMorphism(inner: Morphism, weights: Tensor)
Bases: Morphism
A morphism with pointwise likelihood weighting.
Given a morphism f: A → B and a weight tensor w over B:
factor(f, w)(a, b) = f(a, b) · w(b)
This is unnormalized — the result is not necessarily row-stochastic.
Use normalize afterward if normalization is needed.
| PARAMETER | DESCRIPTION |
|---|---|
inner
|
The base morphism.
TYPE:
|
weights
|
Non-negative weight tensor broadcastable to the codomain shape.
TYPE:
|
Source code in src/quivers/stochastic/transforms.py
246 247 248 249 | |
tensor
property
¶
tensor: Tensor
Pointwise-weighted tensor (unnormalized).
| RETURNS | DESCRIPTION |
|---|---|
Tensor
|
f(a, b) · w(b) for each (a, b). |
NormalizedMorphism
¶
NormalizedMorphism(inner: Morphism)
Bases: Morphism
A morphism with row-renormalized tensor.
Divides each codomain fiber by its sum so that rows sum to 1.
| PARAMETER | DESCRIPTION |
|---|---|
inner
|
The unnormalized morphism.
TYPE:
|
Source code in src/quivers/stochastic/transforms.py
314 315 316 | |
tensor
property
¶
tensor: Tensor
Row-normalized tensor.
| RETURNS | DESCRIPTION |
|---|---|
Tensor
|
Tensor where codomain fibers sum to 1. |
condition
¶
condition(f: Morphism, evidence: Tensor) -> ConditionedMorphism
Condition a morphism on evidence (Bayesian update).
Computes the posterior: f|e(a, b) ∝ f(a, b) · e(b), renormalized so rows sum to 1.
| PARAMETER | DESCRIPTION |
|---|---|
f
|
The prior morphism A → B.
TYPE:
|
evidence
|
Non-negative evidence tensor over B.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
ConditionedMorphism
|
The conditioned morphism. |
Examples:
>>> A = FinSet(name="A", cardinality=2)
>>> B = FinSet(name="B", cardinality=3)
>>> f = StochasticMorphism(A, B)
>>> e = torch.tensor([1.0, 0.0, 1.0]) # observe B != 1
>>> g = condition(f, e)
>>> g.tensor.sum(dim=-1) # still row-stochastic
Source code in src/quivers/stochastic/transforms.py
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | |
mix
¶
mix(left: Morphism, right: Morphism, learnable: bool = True, init_logit: float = 0.0) -> MixtureMorphism
Create a convex combination (mixture) of two morphisms.
Produces h: A → B where h(a,b) = p·f(a,b) + (1-p)·g(a,b). The mixing weight p is learnable by default.
| PARAMETER | DESCRIPTION |
|---|---|
left
|
First component.
TYPE:
|
right
|
Second component (same type as left).
TYPE:
|
learnable
|
Whether the mixing weight is trainable.
TYPE:
|
init_logit
|
Initial logit value for the mixing weight.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
MixtureMorphism
|
The mixture morphism. |
Source code in src/quivers/stochastic/transforms.py
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | |
factor
¶
factor(f: Morphism, weights: Tensor) -> FactoredMorphism
Apply pointwise likelihood weighting to a morphism.
Computes: factor(f, w)(a, b) = f(a, b) · w(b). The result is unnormalized.
| PARAMETER | DESCRIPTION |
|---|---|
f
|
The base morphism.
TYPE:
|
weights
|
Non-negative weight tensor over the codomain.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
FactoredMorphism
|
The weighted morphism. |
Source code in src/quivers/stochastic/transforms.py
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | |
normalize
¶
normalize(f: Morphism) -> NormalizedMorphism
Renormalize a morphism so codomain fibers sum to 1.
| PARAMETER | DESCRIPTION |
|---|---|
f
|
The unnormalized morphism.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
NormalizedMorphism
|
The row-normalized morphism. |
Source code in src/quivers/stochastic/transforms.py
337 338 339 340 341 342 343 344 345 346 347 348 349 350 | |