Skip to content

Commit 7124580

Browse files
committed
update params and paramnames
1 parent 4cd1baa commit 7124580

File tree

2 files changed

+33
-8
lines changed

2 files changed

+33
-8
lines changed

src/combinators/affine.jl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,17 @@ struct Affine{N,M,T} <: AbstractMeasure
2727
parent::M
2828
end
2929

30-
params(::Type{A}, nt::NamedTuple{C}) where {A<:Affine{N,M}} where {N,M,C} = tuple(setdiff(union(N, params(M)),C)...)
30+
parent(d::Affine) = getfield(d, :parent)
3131

32+
function params::Affine)
33+
nt1 = getfield(getfield(μ, :f), :par)
34+
nt2 = params(parent(μ))
35+
return merge(nt1, nt2)
36+
end
3237

33-
parent(d::Affine) = getfield(d, :parent)
38+
function paramnames(::Type{A}) where {N,M, A<:Affine{N,M}}
39+
tuple(union(N, paramnames(M))...)
40+
end
3441

3542
Affine(nt::NamedTuple, μ::AbstractMeasure) = Affine(AffineTransform(nt), μ)
3643

src/parameterized.jl

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,36 @@ end
3636

3737
(::Type{P})(;kwargs...) where {P <: ParameterizedMeasure} = P(NamedTuple(kwargs))
3838

39+
function ConstructionBase.setproperties(d::P, nt::NamedTuple) where {P<:ParameterizedMeasure}
40+
return constructorof(P)(merge(params(d), nt))
41+
end
42+
43+
###############################################################################
44+
# params
45+
3946
export params
4047

41-
params(::Type{PM}) where {N, PM<:ParameterizedMeasure{N}} = N
48+
params(μ::ParameterizedMeasure) = getfield(μ, :par)
4249

43-
function params(::Type{M}, constraints::NamedTuple{N2}) where {N1, N2, M<: ParameterizedMeasure{N1}}
44-
tuple((k for k in N1 if k N2)...)
50+
function params(μ::AbstractMeasure, constraints::NamedTuple{C}) where {N1, N2, M<: ParameterizedMeasure{N1}}
51+
NamedTuple{paramnames(μ, constraints)}(params(μ))
4552
end
4653

54+
params::AbstractMeasure) = NamedTuple()
4755

48-
params(μ) = ()
56+
###############################################################################
57+
# paramnames
4958

59+
export paramnames
5060

51-
function ConstructionBase.setproperties(d::P, nt::NamedTuple) where {P<:ParameterizedMeasure}
52-
return constructorof(P)(merge(params(d), nt))
61+
paramnames(μ) = paramnames(typeof(μ))
62+
63+
paramnames(::Type{PM}) where {N, PM<:ParameterizedMeasure{N}} = N
64+
65+
paramnames::AbstractMeasure) = propertynames(μ)
66+
67+
params(::Type{PM}) where {N, PM<:ParameterizedMeasure{N}} = N
68+
69+
function paramnames(μ, constraints::NamedTuple{N}) where {N}
70+
tuple((k for k in paramnames(μ) if k N)...)
5371
end

0 commit comments

Comments
 (0)