@@ -27,11 +27,11 @@ function uniformlogpdf(a, b, x)
27
27
return oftype (c, - Inf )
28
28
end
29
29
end
30
- uniformlogpdf (a:: Real , b:: Real , x:: TrackedReal ) = Tracker . track (uniformlogpdf, a, b, x)
31
- uniformlogpdf (a:: TrackedReal , b:: TrackedReal , x:: Real ) = Tracker . track (uniformlogpdf, a, b, x)
32
- uniformlogpdf (a:: TrackedReal , b:: TrackedReal , x:: TrackedReal ) = Tracker . track (uniformlogpdf, a, b, x)
30
+ uniformlogpdf (a:: Real , b:: Real , x:: TrackedReal ) = track (uniformlogpdf, a, b, x)
31
+ uniformlogpdf (a:: TrackedReal , b:: TrackedReal , x:: Real ) = track (uniformlogpdf, a, b, x)
32
+ uniformlogpdf (a:: TrackedReal , b:: TrackedReal , x:: TrackedReal ) = track (uniformlogpdf, a, b, x)
33
33
Tracker. @grad function uniformlogpdf (a, b, x)
34
- diff = Tracker . data (b) - Tracker . data (a)
34
+ diff = data (b) - data (a)
35
35
T = typeof (diff)
36
36
l = - log (diff)
37
37
f = isfinite (l)
@@ -49,7 +49,7 @@ ZygoteRules.@adjoint function uniformlogpdf(a, b, x)
49
49
return l, Δ-> (f ? da : n, f ? - da : n, f ? zero (T) : n)
50
50
end
51
51
ZygoteRules. @adjoint function Distributions. Uniform (args... )
52
- return ZygoteRules . pullback (TuringUniform, args... )
52
+ return pullback (TuringUniform, args... )
53
53
end
54
54
55
55
# # Beta ##
@@ -123,12 +123,12 @@ end
123
123
logpdf (d:: Semicircle{<:Real} , x:: TrackedReal ) = semicirclelogpdf (d. r, x)
124
124
logpdf (d:: Semicircle{<:TrackedReal} , x:: Real ) = semicirclelogpdf (d. r, x)
125
125
logpdf (d:: Semicircle{<:TrackedReal} , x:: TrackedReal ) = semicirclelogpdf (d. r, x)
126
- semicirclelogpdf (r:: TrackedReal , x:: Real ) = Tracker . track (semicirclelogpdf, r, x)
127
- semicirclelogpdf (r:: Real , x:: TrackedReal ) = Tracker . track (semicirclelogpdf, r, x)
128
- semicirclelogpdf (r:: TrackedReal , x:: TrackedReal ) = Tracker . track (semicirclelogpdf, r, x)
126
+ semicirclelogpdf (r:: TrackedReal , x:: Real ) = track (semicirclelogpdf, r, x)
127
+ semicirclelogpdf (r:: Real , x:: TrackedReal ) = track (semicirclelogpdf, r, x)
128
+ semicirclelogpdf (r:: TrackedReal , x:: TrackedReal ) = track (semicirclelogpdf, r, x)
129
129
Tracker. @grad function semicirclelogpdf (r, x)
130
- rd = Tracker . data (r)
131
- xd = Tracker . data (x)
130
+ rd = data (r)
131
+ xd = data (x)
132
132
xx, rr = promote (xd, float (rd))
133
133
d = Semicircle (rr)
134
134
T = typeof (xx)
146
146
147
147
# # Binomial ##
148
148
149
- binomlogpdf (n:: Int , p:: Tracker. TrackedReal , x:: Int ) = Tracker . track (binomlogpdf, n, p, x)
150
- Tracker. @grad function binomlogpdf (n:: Int , p:: Tracker. TrackedReal , x:: Int )
151
- return binomlogpdf (n, Tracker . data (p), x),
149
+ binomlogpdf (n:: Int , p:: TrackedReal , x:: Int ) = track (binomlogpdf, n, p, x)
150
+ Tracker. @grad function binomlogpdf (n:: Int , p:: TrackedReal , x:: Int )
151
+ return binomlogpdf (n, data (p), x),
152
152
Δ-> (nothing , Δ * (x / p - (n - x) / (1 - p)), nothing )
153
153
end
154
154
ZygoteRules. @adjoint function binomlogpdf (n:: Int , p:: Real , x:: Int )
@@ -171,19 +171,19 @@ end
171
171
_nbinomlogpdf_grad_1 (r, p, k) = k == 0 ? log (p) : sum (1 / (k + r - i) for i in 1 : k) + log (p)
172
172
_nbinomlogpdf_grad_2 (r, p, k) = - k / (1 - p) + r / p
173
173
174
- nbinomlogpdf (n:: Tracker. TrackedReal , p:: Tracker. TrackedReal , x:: Int ) = Tracker . track (nbinomlogpdf, n, p, x)
175
- nbinomlogpdf (n:: Real , p:: Tracker. TrackedReal , x:: Int ) = Tracker . track (nbinomlogpdf, n, p, x)
176
- nbinomlogpdf (n:: Tracker. TrackedReal , p:: Real , x:: Int ) = Tracker . track (nbinomlogpdf, n, p, x)
177
- Tracker. @grad function nbinomlogpdf (r:: Tracker. TrackedReal , p:: Tracker. TrackedReal , k:: Int )
178
- return nbinomlogpdf (Tracker . data (r), Tracker . data (p), k),
174
+ nbinomlogpdf (n:: TrackedReal , p:: TrackedReal , x:: Int ) = track (nbinomlogpdf, n, p, x)
175
+ nbinomlogpdf (n:: Real , p:: TrackedReal , x:: Int ) = track (nbinomlogpdf, n, p, x)
176
+ nbinomlogpdf (n:: TrackedReal , p:: Real , x:: Int ) = track (nbinomlogpdf, n, p, x)
177
+ Tracker. @grad function nbinomlogpdf (r:: TrackedReal , p:: TrackedReal , k:: Int )
178
+ return nbinomlogpdf (data (r), data (p), k),
179
179
Δ-> (Δ * _nbinomlogpdf_grad_1 (r, p, k), Δ * _nbinomlogpdf_grad_2 (r, p, k), nothing )
180
180
end
181
- Tracker. @grad function nbinomlogpdf (r:: Real , p:: Tracker. TrackedReal , k:: Int )
182
- return nbinomlogpdf (Tracker . data (r), Tracker . data (p), k),
181
+ Tracker. @grad function nbinomlogpdf (r:: Real , p:: TrackedReal , k:: Int )
182
+ return nbinomlogpdf (data (r), data (p), k),
183
183
Δ-> (Tracker. _zero (r), Δ * _nbinomlogpdf_grad_2 (r, p, k), nothing )
184
184
end
185
- Tracker. @grad function nbinomlogpdf (r:: Tracker. TrackedReal , p:: Real , k:: Int )
186
- return nbinomlogpdf (Tracker . data (r), Tracker . data (p), k),
185
+ Tracker. @grad function nbinomlogpdf (r:: TrackedReal , p:: Real , k:: Int )
186
+ return nbinomlogpdf (data (r), data (p), k),
187
187
Δ-> (Δ * _nbinomlogpdf_grad_1 (r, p, k), Tracker. _zero (p), nothing )
188
188
end
189
189
212
212
213
213
# # Poisson ##
214
214
215
- poislogpdf (v:: Tracker. TrackedReal , x:: Int ) = Tracker . track (poislogpdf, v, x)
216
- Tracker. @grad function poislogpdf (v:: Tracker. TrackedReal , x:: Int )
217
- return poislogpdf (Tracker . data (v), x),
215
+ poislogpdf (v:: TrackedReal , x:: Int ) = track (poislogpdf, v, x)
216
+ Tracker. @grad function poislogpdf (v:: TrackedReal , x:: Int )
217
+ return poislogpdf (data (v), x),
218
218
Δ-> (Δ * (x/ v - 1 ), nothing )
219
219
end
220
220
ZygoteRules. @adjoint function poislogpdf (v:: Real , x:: Int )
@@ -244,13 +244,13 @@ function logpdf(d::TuringPoissonBinomial{T}, k::Int) where T<:Real
244
244
insupport (d, k) ? log (d. pmf[k + 1 ]) : - T (Inf )
245
245
end
246
246
quantile (d:: TuringPoissonBinomial , x:: Float64 ) = quantile (Categorical (d. pmf), x) - 1
247
- PoissonBinomial (p:: Tracker. TrackedArray ) = TuringPoissonBinomial (p)
247
+ PoissonBinomial (p:: TrackedArray ) = TuringPoissonBinomial (p)
248
248
Base. minimum (d:: TuringPoissonBinomial ) = 0
249
249
Base. maximum (d:: TuringPoissonBinomial ) = length (d. p)
250
250
251
- poissonbinomial_pdf_fft (x:: Tracker. TrackedArray ) = Tracker . track (poissonbinomial_pdf_fft, x)
252
- Tracker. @grad function poissonbinomial_pdf_fft (x:: Tracker. TrackedArray )
253
- x_data = Tracker . data (x)
251
+ poissonbinomial_pdf_fft (x:: TrackedArray ) = track (poissonbinomial_pdf_fft, x)
252
+ Tracker. @grad function poissonbinomial_pdf_fft (x:: TrackedArray )
253
+ x_data = data (x)
254
254
T = eltype (x_data)
255
255
fft = poissonbinomial_pdf_fft (x_data)
256
256
return fft, Δ -> begin
268
268
# The code below doesn't work because of bugs in Zygote. The above is inefficient.
269
269
#=
270
270
ZygoteRules.@adjoint function poissonbinomial_pdf_fft(x::AbstractArray{<:Real})
271
- return ZygoteRules. pullback(poissonbinomial_pdf_fft_zygote, x)
271
+ return pullback(poissonbinomial_pdf_fft_zygote, x)
272
272
end
273
273
function poissonbinomial_pdf_fft_zygote(p::AbstractArray{T}) where {T <: Real}
274
274
n = length(p)
0 commit comments