@@ -12,12 +12,18 @@ using DispatchDoctor: @unstable
1212using Logging: AbstractLogger
1313
1414using DynamicExpressions:
15- AbstractExpression, string_tree, parse_expression, EvalOptions, with_type_parameters
15+ AbstractExpression,
16+ string_tree,
17+ parse_expression,
18+ EvalOptions,
19+ with_type_parameters,
20+ constructorof
1621using .. UtilsModule: subscriptify
17- using .. CoreModule: Dataset, AbstractOptions, Options, RecordType, max_features
22+ using .. CoreModule:
23+ Dataset, AbstractOptions, Options, RecordType, max_features, create_expression
1824using .. ComplexityModule: compute_complexity
1925using .. PopulationModule: Population
20- using .. PopMemberModule: PopMember, AbstractPopMember
26+ using .. PopMemberModule: PopMember, AbstractPopMember, with_expression_type
2127using .. HallOfFameModule: HallOfFame, string_dominating_pareto_curve
2228using .. ConstantOptimizationModule: optimize_constants
2329using .. ProgressBarsModule: WrappedProgressBar, manually_iterate!, barlen
@@ -800,7 +806,9 @@ function parse_guesses(
800806 dataset = datasets[j]
801807 for g in guess_lists[j]
802808 ex = _parse_guess_expression (T, g, dataset, options)
803- member = PopMember (dataset, ex, options; deterministic= options. deterministic)
809+ member = constructorof (P)(
810+ dataset, ex, options; deterministic= options. deterministic
811+ )
804812 if options. should_optimize_constants
805813 member, _ = optimize_constants (dataset, member, options)
806814 end
@@ -818,6 +826,21 @@ function parse_guesses(
818826 end
819827 return out
820828end
829+
830+ # Deal with non-concrete PopMember types
831+ function parse_guesses (
832+ :: Type{P} ,
833+ guesses:: Union{AbstractVector,AbstractVector{<:AbstractVector}} ,
834+ datasets:: Vector{D} ,
835+ options:: AbstractOptions ,
836+ ) where {T,L,P<: AbstractPopMember{T,L} ,D<: Dataset{T,L} }
837+ NodeType = with_type_parameters (options. node_type, T)
838+ N = Base. promote_op (create_expression, NodeType, typeof (options), D)
839+ N === Any && error (" Failed to infer expression type" )
840+ ConcreteP = with_expression_type (P, N)
841+ return parse_guesses (ConcreteP, guesses, datasets, options)
842+ end
843+
821844function _make_vector_vector (guesses, nout)
822845 if nout == 1
823846 if guesses isa AbstractVector{<: AbstractVector }
0 commit comments