Skip to content

Commit d3105b6

Browse files
Merge pull request #104 from bmad-sim/newmapparams
MapParams accepts parameters now
2 parents 69cbad8 + 3803269 commit d3105b6

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "Beamlines"
22
uuid = "5bb90b03-0719-46b8-8ce4-1ef3afd3cd4b"
33
authors = ["Matt Signorelli <mgs255@cornell.edu> and contributors"]
4-
version = "0.8.2"
4+
version = "0.8.3"
55

66
[deps]
77
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"

src/keymaps.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ const PROPERTIES_MAP = Dict{Symbol,Type{<:AbstractParams}}(
8383
:is_crabcavity => RFParams,
8484

8585
:transport_map => MapParams,
86+
:transport_map_params => MapParams,
87+
8688
:four_potential => FourPotentialParams,
8789

8890
:alias => MetaParams,

src/misc.jl

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
1-
@kwdef struct MapParams{F<:Function} <: AbstractParams
2-
transport_map::F = (v, q=nothing) -> (v, q)
1+
@kwdef mutable struct MapParams{F<:Function, P<:Tuple} <: AbstractParams
2+
transport_map::F = (v, q, p=nothing) -> (v, q)
3+
transport_map_params::P = ()
34
end
45

5-
Base.isapprox(a::MapParams, b::MapParams) = a.transport_map == b.transport_map
6+
function Base.isapprox(a::MapParams, b::MapParams)
7+
return a.transport_map == b.transport_map &&
8+
all(a.transport_map_params .≈ b.transport_map_params)
9+
end
10+
11+
# === THIS BLOCK WAS PARTIALLY WRITTEN BY CLAUDE ===
12+
# Generated function for arbitrary-length tuples
13+
@generated function deval(mp::MapParams{F,P}) where {F,P}
14+
N = length(P.parameters)
15+
# Use getfield with literal integer arguments
16+
exprs = [:(deval(Base.getfield(mp.transport_map_params, $i))) for i in 1:N]
17+
return :(MapParams(mp.transport_map, tuple($(exprs...))))
18+
end
19+
# === END CLAUDE ===
620

721
@kwdef struct FourPotentialParams{F<:Function} <: AbstractParams
822
four_potential::F = (x, y, s, t) -> (0, 0, 0, 0) # Returns phi, Ax, Ay, Az

test/runtests.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1259,7 +1259,11 @@ using ForwardDiff, GTPSA, ReverseDiff
12591259
@test ele1.transport_map == g
12601260
@test ele2.transport_map == g
12611261
@test ele1 ele2
1262-
1262+
let
1263+
local a = 1
1264+
ele1.transport_map_params = (DefExpr(()->10*sin(a)), 100)
1265+
@test Beamlines.deval(ele1.MapParams) MapParams(ele1.transport_map, (10*sin(1),100.))
1266+
end
12631267
# FourPotentialParams
12641268
f = (x,y,s,t)->(1,2,3,4)
12651269
g = (x,y,s,t)->(5,6,7,8)

0 commit comments

Comments
 (0)