-
Notifications
You must be signed in to change notification settings - Fork 4
Add variate transport #62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
70 commits
Select commit
Hold shift + click to select a range
25fa2e1
Add ChainRulesCore to dependencies
oschulz a3e1bbf
Add InverseFunctions and ChangesOfVariables to deps
oschulz 2015ccd
Add require_insupport
oschulz e86cf2c
Add effndof and require_same_effndof
oschulz 2e8e7d6
Add check_varshape
oschulz 5019b14
Add vartransform
oschulz 6ee4e3d
Remove "measure-like" terminology
oschulz 2217a42
Remove requirement for vartransform to return a Function
oschulz bb0257d
Remove check_varshape
oschulz 15952bb
Rename effndof to getdof
oschulz d5635fe
Separate vartransform and vartransform_def
oschulz 57c83b3
Fix default vartransform_def
oschulz b2817f0
Remove select_vartransform_intermediate
oschulz 66f5990
Fix check_dof
oschulz de96842
Export getdof
oschulz 9101015
Export vartransform
oschulz 45fe220
Implement getdof for measures
oschulz e7fff14
Remove StdNormal
oschulz 680e8f8
FIXUP implement getdof
oschulz 7d9e11e
FIXUP implement getdof
oschulz c6368bb
Add StdLogistic
oschulz 9372871
Implement vartransform_def for StdMeasure
oschulz 70f1e30
FIXUP vartransform_def for StdMeasure
oschulz 147ba2a
Add _vartransform_intermediate
oschulz 0f26323
FIXUP Implement vartransform_def for StdMeasure
oschulz 6ffa92c
Fix insupport for StdLogistic
oschulz 101f947
Fix StdLogistic
oschulz 1193e05
FIXUP StdMeasure vartransform
oschulz d0509e9
Fix check_dof
oschulz 9556e31
Add checked_var
oschulz acde08b
WIP Add vartransform tests
oschulz 5a16bef
FIXUP vartransform tests
oschulz ebb7ddb
Fix rand for StdUniform
oschulz 7b56f08
FIXUP vartransform tests
oschulz 23e41c7
Use checked_var at VarTransformation input stage
oschulz 6f5b246
FIX vartransform tests
oschulz f5ebe6d
Add defaults for check_dof and checked_var
oschulz cbb6873
Add vartransform_origin for WeightedMeasure
oschulz 1c52ed0
Fix deps
oschulz 7b954a5
Fix tests
oschulz 5a12523
WIP Add PushforwardMeasure
oschulz 520562c
WIP improve PushforwardMeasure
oschulz 10b12dc
WIP improve PushforwardMeasure
oschulz bfda82b
WIP improve PushforwardMeasure
oschulz 62eabb0
WIP improve PushforwardMeasure
oschulz a3a7b00
FIX PushforwardMeasure
oschulz 39bf7b0
Allow PushforwardMeasure to bypass checked_var
oschulz da7ecc6
Test PushforwardMeasure
oschulz 75e1fb3
Fix docstring of NoDOF
oschulz 6250b20
Add test_vartransform to Interface
oschulz 9bfa9f9
FIXUP _default_checked_var
oschulz d4f0246
FIXUP vartransform_origin docs and defaults
oschulz 0512930
Run vartransform tests
oschulz 14890bb
Improve vartransform_origin def for WeightedMeasure
oschulz b32f34d
Add vartransform stdmeasure autodim
oschulz f12f1b5
Specialize equality for VarTransformation
oschulz b3dfe13
Don't call check_dof so often
oschulz 1088fc1
Improve checked_var for PowerMeasure
oschulz 1c2311c
Fix check_dof and require_insupport rrules
oschulz 1fb805c
Test getdof
oschulz 24affe6
Document TransformVolCorr
oschulz 35fae34
Fix transform variable naming inconsistencies
oschulz d673692
Specialize gotdof for inferrably empty power measures
oschulz 3965732
Add trafos for Dirac
oschulz 5b5eb7f
Support logdensity calculation on empty power measures
oschulz e70f294
Improve test_vartransform
oschulz e85e54f
Fix and test vartransform for Dirac
oschulz 8f2da10
Rename vartransform to transport_to
oschulz 343d20b
Rename vartransform_origin
oschulz a8faa66
Increase package version to v0.11.0
oschulz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,17 @@ | ||
name = "MeasureBase" | ||
uuid = "fa1605e6-acd5-459c-a1e6-7e635759db14" | ||
authors = ["Chad Scherrer <[email protected]> and contributors"] | ||
version = "0.10.0" | ||
version = "0.11.0" | ||
|
||
[deps] | ||
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" | ||
ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" | ||
Compat = "34da2185-b29b-5c13-b0c7-acf172513d20" | ||
ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" | ||
DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" | ||
FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" | ||
IfElse = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" | ||
InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" | ||
IrrationalConstants = "92d709cd-6900-40b7-9082-c6be49f344b6" | ||
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" | ||
LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" | ||
|
@@ -24,11 +27,14 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" | |
Tricks = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" | ||
|
||
[compat] | ||
ChainRulesCore = "1" | ||
ChangesOfVariables = "0.1.3" | ||
Compat = "3.35, 4" | ||
ConstructionBase = "1.3" | ||
DensityInterface = "0.4" | ||
FillArrays = "0.12, 0.13" | ||
IfElse = "0.1" | ||
InverseFunctions = "0.1.7" | ||
IrrationalConstants = "0.1" | ||
LogExpFunctions = "0.3" | ||
LogarithmicNumbers = "1" | ||
|
@@ -42,6 +48,7 @@ julia = "1.3" | |
|
||
[extras] | ||
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" | ||
ChainRulesTestUtils = "cdddcdb0-9152-4a09-a978-84456f9df70a" | ||
|
||
[targets] | ||
test = ["Aqua"] | ||
test = ["Aqua", "ChainRulesTestUtils"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
""" | ||
MeasureBase.NoDOF{MU} | ||
|
||
Indicates that there is no way to compute degrees of freedom of a measure | ||
of type `MU` with the given information, e.g. because the DOF are not | ||
a global property of the measure. | ||
""" | ||
struct NoDOF{MU} end | ||
|
||
|
||
""" | ||
getdof(μ) | ||
|
||
Returns the effective number of degrees of freedom of variates of | ||
measure `μ`. | ||
|
||
The effective NDOF my differ from the length of the variates. For example, | ||
the effective NDOF for a Dirichlet distribution with variates of length `n` | ||
is `n - 1`. | ||
|
||
Also see [`check_dof`](@ref). | ||
""" | ||
function getdof end | ||
|
||
# Prevent infinite recursion: | ||
@inline _default_getdof(::Type{MU}, ::MU) where MU = NoDOF{MU} | ||
@inline _default_getdof(::Type{MU}, mu_base) where MU = getdof(mu_base) | ||
|
||
@inline getdof(μ::MU) where MU = _default_getdof(MU, basemeasure(μ)) | ||
|
||
|
||
""" | ||
MeasureBase.check_dof(ν, μ)::Nothing | ||
|
||
Check if `ν` and `μ` have the same effective number of degrees of freedom | ||
according to [`MeasureBase.getdof`](@ref). | ||
""" | ||
function check_dof end | ||
|
||
function check_dof(ν, μ) | ||
n_ν = getdof(ν) | ||
n_μ = getdof(μ) | ||
if n_ν != n_μ | ||
throw(ArgumentError("Measure ν of type $(nameof(typeof(ν))) has $(n_ν) DOF but μ of type $(nameof(typeof(μ))) has $(n_μ) DOF")) | ||
end | ||
return nothing | ||
end | ||
|
||
_check_dof_pullback(ΔΩ) = NoTangent(), NoTangent(), NoTangent() | ||
ChainRulesCore.rrule(::typeof(check_dof), ν, μ) = check_dof(ν, μ), _check_dof_pullback | ||
|
||
|
||
""" | ||
MeasureBase.NoVarCheck{MU,T} | ||
|
||
Indicates that there is no way to check of a values of type `T` are | ||
variate of measures of type `MU`. | ||
""" | ||
struct NoVarCheck{MU,T} end | ||
|
||
|
||
""" | ||
MeasureBase.checked_var(μ::MU, x::T)::T | ||
|
||
Return `x` if `x` is a valid variate of `μ`, throw an `ArgumentError` if not, | ||
return `NoVarCheck{MU,T}()` if not check can be performed. | ||
""" | ||
function checked_var end | ||
|
||
# Prevent infinite recursion: | ||
@propagate_inbounds _default_checked_var(::Type{MU}, ::MU, ::T) where {MU,T} = NoVarCheck{MU,T} | ||
@propagate_inbounds _default_checked_var(::Type{MU}, mu_base, x) where MU = checked_var(mu_base, x) | ||
|
||
@propagate_inbounds checked_var(mu::MU, x) where MU = _default_checked_var(MU, basemeasure(mu), x) | ||
|
||
_checked_var_pullback(ΔΩ) = NoTangent(), NoTangent(), ΔΩ | ||
ChainRulesCore.rrule(::typeof(checked_var), ν, x) = checked_var(ν, x), _checked_var_pullback |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
""" | ||
inssupport(m, x) | ||
insupport(m) | ||
|
||
`insupport(m,x)` computes whether `x` is in the support of `m`. | ||
|
||
`insupport(m)` returns a function, and satisfies | ||
|
||
insupport(m)(x) == insupport(m, x) | ||
""" | ||
function insupport end | ||
|
||
|
||
""" | ||
MeasureBase.require_insupport(μ, x)::Nothing | ||
|
||
Checks if `x` is in the support of distribution/measure `μ`, throws an | ||
`ArgumentError` if not. | ||
""" | ||
function require_insupport end | ||
|
||
_require_insupport_pullback(ΔΩ) = NoTangent(), ZeroTangent() | ||
function ChainRulesCore.rrule(::typeof(require_insupport), μ, x) | ||
return require_insupport(μ, x), _require_insupport_pullback | ||
end | ||
|
||
function require_insupport(μ, x) | ||
if !insupport(μ, x) | ||
throw(ArgumentError("x is not within the support of μ")) | ||
end | ||
return nothing | ||
end |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.