Skip to content

Commit 8aa59b8

Browse files
fix: convert num_features dict keys to Julia Symbols (#1209)
Closes #811 Co-authored-by: Miles Cranmer <miles.cranmer@gmail.com>
1 parent beaa405 commit 8aa59b8

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

pysr/expression_specs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ def julia_expression_options(self):
293293
num_features = if num_features === nothing
294294
nothing
295295
else
296-
(; num_features...)
296+
NamedTuple(Symbol(k) => v for (k, v) in num_features)
297297
end
298298
structure = SymbolicRegression.TemplateStructure{tuple_symbol}(combine, num_features)
299299
return (; structure)

pysr/test/test_main.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2246,6 +2246,17 @@ def test_process_constraints_swaps_multiplication_constraints(self):
22462246

22472247

22482248
class TestTemplateExpressionSpec(unittest.TestCase):
2249+
def test_num_features_symbol_keys(self):
2250+
# ponytail: one check — dict keys must reach Julia as Symbols
2251+
spec = TemplateExpressionSpec(
2252+
["f", "g"],
2253+
"combine(fs, vars) = fs.f(vars[1], vars[2]) + fs.g(vars[3])",
2254+
{"f": 2, "g": 1},
2255+
)
2256+
options = spec.julia_expression_options()
2257+
names = jl.seval("x -> propertynames(x.structure.num_features)")(options)
2258+
self.assertEqual(names, (jl.Symbol("f"), jl.Symbol("g")))
2259+
22492260
def _check_macro_str(self, spec, expected_str):
22502261
self.assertEqual(
22512262
spec._template_macro_str().strip(), dedent(expected_str).strip()

0 commit comments

Comments
 (0)