@@ -42,7 +42,9 @@ Constructor for `DataSample` with keyword arguments.
4242All keyword arguments beyond `x`, `θ`, `y`, and `extra` are collected into the `maximizer_kwargs`
4343field (solver kwargs). The `extra` keyword accepts a `NamedTuple` of non-solver data.
4444
45- Fields in `maximizer_kwargs` and `extra` must be disjoint. An error is thrown if they overlap.
45+ Fields in `maximizer_kwargs` and `extra` must be disjoint. Neither may use a reserved
46+ struct field name (`x`, `θ`, `y`, `maximizer_kwargs`, `extra`). An error is thrown in
47+ both cases.
4648Both can be accessed directly via property forwarding.
4749
4850# Examples
@@ -69,6 +71,19 @@ function DataSample(; x=nothing, θ=nothing, y=nothing, extra=NamedTuple(), kwar
6971 " Keys $(collect (overlap)) appear in both maximizer_kwargs and extra of DataSample" ,
7072 )
7173 end
74+ reserved = (:x , :θ , :y , :maximizer_kwargs , :extra )
75+ shadowed_ctx = intersect (keys (maximizer_kwargs), reserved)
76+ if ! isempty (shadowed_ctx)
77+ error (
78+ " Keys $(collect (shadowed_ctx)) in maximizer_kwargs shadow DataSample struct fields" ,
79+ )
80+ end
81+ shadowed_extra = intersect (keys (extra), reserved)
82+ if ! isempty (shadowed_extra)
83+ error (
84+ " Keys $(collect (shadowed_extra)) in extra shadow DataSample struct fields" ,
85+ )
86+ end
7287 return DataSample (x, θ, y, maximizer_kwargs, extra)
7388end
7489
0 commit comments