Skip to content

Commit 4520079

Browse files
committed
add a tapir extension to allow reuse rule
1 parent 138bd40 commit 4520079

File tree

3 files changed

+45
-3
lines changed

3 files changed

+45
-3
lines changed

Project.toml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "DynamicPPL"
22
uuid = "366bfd00-2699-11ea-058f-f148b4cae6d8"
3-
version = "0.29"
3+
version = "0.29.0"
44

55
[deps]
66
ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
@@ -21,6 +21,7 @@ MacroTools = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
2121
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
2222
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
2323
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
24+
Tapir = "07d77754-e150-4737-8c94-cd238a1fb45b"
2425
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
2526
ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444"
2627

@@ -30,6 +31,7 @@ EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869"
3031
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
3132
MCMCChains = "c7f686f2-ff18-58e9-bc7b-31028e88f75d"
3233
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
34+
Tapir = "07d77754-e150-4737-8c94-cd238a1fb45b"
3335
ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444"
3436

3537
[extensions]
@@ -38,6 +40,7 @@ DynamicPPLEnzymeCoreExt = ["EnzymeCore"]
3840
DynamicPPLForwardDiffExt = ["ForwardDiff"]
3941
DynamicPPLMCMCChainsExt = ["MCMCChains"]
4042
DynamicPPLReverseDiffExt = ["ReverseDiff"]
43+
DynamicPPLTapirExt = ["Tapir"]
4144
DynamicPPLZygoteRulesExt = ["ZygoteRules"]
4245

4346
[compat]
@@ -64,13 +67,14 @@ Random = "1.6"
6467
Requires = "1"
6568
ReverseDiff = "1"
6669
Test = "1.6"
70+
Tapir = "0.2.40"
6771
ZygoteRules = "0.2"
6872
julia = "1.6"
6973

7074
[extras]
7175
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
7276
EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869"
73-
MCMCChains = "c7f686f2-ff18-58e9-bc7b-31028e88f75d"
74-
ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444"
7577
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
78+
MCMCChains = "c7f686f2-ff18-58e9-bc7b-31028e88f75d"
7679
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
80+
ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444"

ext/DynamicPPLTapirExt.jl

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
module DynamicPPLTapirExt
2+
3+
if isdefined(Base, :get_extension)
4+
using DynamicPPL: ADTypes, DynamicPPL, LogDensityProblems, LogDensityProblemsAD
5+
using Tapir
6+
else
7+
using ..DynamicPPL: ADTypes, DynamicPPL, LogDensityProblems, LogDensityProblemsAD
8+
using ..Tapir
9+
end
10+
11+
function DynamicPPL.setmodel(
12+
f::LogDensityProblemsAD.ADGradientWrapper,
13+
model::DynamicPPL.Model,
14+
adtype::ADTypes.AutoTapir,
15+
)
16+
if !hasfield(typeof(f), :rule)
17+
@warn "ADGradientWrapper does not have a `rule` field. Please check Tapir version. It is also possible that `adtype` mismatch `ADGradientWrapper` type."
18+
@warn "Using default rule."
19+
return LogDensityProblemsAD.ADgradient(
20+
Val(:Tapir),
21+
DynamicPPL.setmodel(LogDensityProblemsAD.parent(f), model);
22+
safety_on=adtype.safe_mode,
23+
rule=nothing,
24+
)
25+
else
26+
return LogDensityProblemsAD.ADgradient(
27+
Val(:Tapir),
28+
DynamicPPL.setmodel(LogDensityProblemsAD.parent(f), model);
29+
safety_on=adtype.safe_mode,
30+
rule=f.rule,
31+
)
32+
end
33+
end
34+
35+
end # module

src/DynamicPPL.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,9 @@ end
214214
@require ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" include(
215215
"../ext/DynamicPPLReverseDiffExt.jl"
216216
)
217+
@require Tapir = "07d77754-e150-4737-8c94-cd238a1fb45b" include(
218+
"../ext/DynamicPPLTapirExt.jl"
219+
)
217220
@require ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444" include(
218221
"../ext/DynamicPPLZygoteRulesExt.jl"
219222
)

0 commit comments

Comments
 (0)