You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: HISTORY.md
+82-17Lines changed: 82 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,26 +4,25 @@
4
4
5
5
**Breaking changes**
6
6
7
-
### VarInfo constructors
8
-
9
-
`VarInfo(vi::VarInfo, values)` has been removed. You can replace this directly with `unflatten(vi, values)` instead.
7
+
### Submodels: conditioning
10
8
11
-
The `metadata` argument to `VarInfo([rng, ]model[, sampler, context, metadata])` has been removed.
12
-
If you were not using this argument (most likely), then there is no change needed.
13
-
If you were using the `metadata` argument to specify a blank `VarNamedVector`, then you should replace calls to `VarInfo` with `DynamicPPL.typed_vector_varinfo` instead (see 'Other changes' below).
9
+
Variables in a submodel can now be conditioned and fixed in a correct way.
10
+
See https://github.com/TuringLang/DynamicPPL.jl/issues/857 for a full illustration, but essentially it means you can now do this:
14
11
15
-
The `UntypedVarInfo` constructor and type is no longer exported.
16
-
If you needed to construct one, you should now use `DynamicPPL.untyped_varinfo` instead.
17
-
18
-
The `TypedVarInfo` constructor and type is no longer exported.
19
-
The _type_ has been replaced with `DynamicPPL.NTVarInfo`.
20
-
The _constructor_ has been replaced with `DynamicPPL.typed_varinfo`.
12
+
```julia
13
+
@modelfunctioninner()
14
+
x ~Normal()
15
+
return y ~Normal()
16
+
end
17
+
@modelfunctionouter()
18
+
return a ~to_submodel(inner() | (x=1.0,))
19
+
end
20
+
```
21
21
22
-
Note that the exact kind of VarInfo returned by `VarInfo(rng, model, ...)` is an implementation detail.
23
-
Previously, it was guaranteed that this would always be a VarInfo whose metadata was a `NamedTuple` containing `Metadata` structs.
24
-
Going forward, this is no longer the case, and you should only assume that the returned object obeys the `AbstractVarInfo` interface.
22
+
and the `a.x` variable will be correctly conditioned.
23
+
(Previously, you would have to condition `inner()` with the variable `a.x`, meaning that you would need to know what prefix to use before you had actually prefixed it.)
25
24
26
-
### VarName prefixing behaviour
25
+
### Submodel prefixing
27
26
28
27
The way in which VarNames in submodels are prefixed has been changed.
If you are sampling from a model with submodels, this doesn't affect the way you interact with the `MCMCChains.Chains` object, because VarNames are converted into Symbols when stored in the chain.
67
+
In a similar way, if the variable on the left-hand side of your tilde statement is not just a single identifier, any fields or indices it accesses are now properly respected.
68
+
Consider the following setup:
69
+
70
+
```julia
71
+
using DynamicPPL, Distributions
72
+
@modelinner() = x ~Normal()
73
+
@modelfunctionouter()
74
+
a =Vector{Float64}(undef, 1)
75
+
a[1] ~to_submodel(inner())
76
+
return a
77
+
end
78
+
```
79
+
80
+
In this case, the variable sampled is actually the `x` field of the first element of `a`:
Before this version, it used to be a single variable called `var"a[1].x"`.
88
+
89
+
Note that if you are sampling from a model with submodels, this doesn't affect the way you interact with the `MCMCChains.Chains` object, because VarNames are converted into Symbols when stored in the chain.
69
90
(This behaviour will likely be changed in the future, in that Chains should be indexable by VarNames and not just Symbols, but that has not been implemented yet.)
70
91
92
+
### AD testing utilities
93
+
94
+
`DynamicPPL.TestUtils.AD.run_ad` now links the VarInfo by default.
95
+
To disable this, pass the `linked=false` keyword argument.
96
+
If the calculated value or gradient is incorrect, it also throws a `DynamicPPL.TestUtils.AD.ADIncorrectException` rather than a test failure.
97
+
This exception contains the actual and expected gradient so you can inspect it if needed; see the documentation for more information.
98
+
From a practical perspective, this means that if you need to add this to a test suite, you need to use `@test run_ad(...) isa Any` rather than just `run_ad(...)`.
99
+
100
+
### SimpleVarInfo linking / invlinking
101
+
102
+
Linking a linked SimpleVarInfo, or invlinking an unlinked SimpleVarInfo, now displays a warning instead of an error.
103
+
104
+
### VarInfo constructors
105
+
106
+
`VarInfo(vi::VarInfo, values)` has been removed. You can replace this directly with `unflatten(vi, values)` instead.
107
+
108
+
The `metadata` argument to `VarInfo([rng, ]model[, sampler, context, metadata])` has been removed.
109
+
If you were not using this argument (most likely), then there is no change needed.
110
+
If you were using the `metadata` argument to specify a blank `VarNamedVector`, then you should replace calls to `VarInfo` with `DynamicPPL.typed_vector_varinfo` instead (see 'Other changes' below).
111
+
112
+
The `UntypedVarInfo` constructor and type is no longer exported.
113
+
If you needed to construct one, you should now use `DynamicPPL.untyped_varinfo` instead.
114
+
115
+
The `TypedVarInfo` constructor and type is no longer exported.
116
+
The _type_ has been replaced with `DynamicPPL.NTVarInfo`.
117
+
The _constructor_ has been replaced with `DynamicPPL.typed_varinfo`.
118
+
119
+
Note that the exact kind of VarInfo returned by `VarInfo(rng, model, ...)` is an implementation detail.
120
+
Previously, it was guaranteed that this would always be a VarInfo whose metadata was a `NamedTuple` containing `Metadata` structs.
121
+
Going forward, this is no longer the case, and you should only assume that the returned object obeys the `AbstractVarInfo` interface.
122
+
71
123
**Other changes**
72
124
73
125
While these are technically breaking, they are only internal changes and do not affect the public API.
@@ -82,6 +134,19 @@ The reason for this change is that there were several flavours of VarInfo.
82
134
Some, like `typed_varinfo`, were easy to construct because we had convenience methods for them; however, the others were more difficult.
83
135
This change makes it easier to access different VarInfo types, and also makes it more explicit which one you are constructing.
84
136
137
+
## 0.35.9
138
+
139
+
Fixed the `isnan` check introduced in 0.35.7 for distributions which returned NamedTuple.
140
+
141
+
## 0.35.8
142
+
143
+
Added the `DynamicPPL.TestUtils.AD.run_ad` function to test the correctness and/or benchmark the performance of an automatic differentiation backend on DynamicPPL models.
144
+
Please see [the docstring](https://turinglang.org/DynamicPPL.jl/api/#DynamicPPL.TestUtils.AD.run_ad) for more information.
145
+
146
+
## 0.35.7
147
+
148
+
`check_model_and_trace` now errors if any NaN's are encountered when evaluating the model.
149
+
85
150
## 0.35.6
86
151
87
152
Fixed the implementation of `.~`, such that running a model with it no longer requires DynamicPPL itself to be loaded.
0 commit comments