@@ -40,7 +40,7 @@ export variance, variance_given_mean, mean_1d
4040# XXX : Does having a common supertype of DistributionAbilityEstimator and PointAbilityEstimator make sense?
4141abstract type AbilityEstimator <: CatConfigBase end
4242
43- function AbilityEstimator (bits... ; ability_estimator= nothing )
43+ function AbilityEstimator (bits... ; ability_estimator= nothing , ability_tracker = nothing )
4444 @returnsome ability_estimator
4545 @returnsome find1_instance (AbilityEstimator, bits)
4646 item_bank = find1_type_sloppy (AbstractItemBank, bits)
7373
7474abstract type AbilityTracker <: CatConfigBase end
7575
76- function AbilityTracker (bits... ; ability_estimator= nothing )
76+ function AbilityTracker (bits... ; integrator = nothing , ability_estimator= nothing )
7777 @returnsome find1_instance (AbilityTracker, bits)
7878 ability_tracker = find1_type (AbilityTracker, bits)
7979 if (ability_tracker != = nothing )
8080 ability_tracker ()
8181 end
82- NullAbilityTracker ()
83- # TODO : find if ability_estimator is GriddedAbilityEstimator and then propagate stuff to GriddedAbilityTracker
82+ if ability_estimator != = nothing && integrator != = nothing
83+ GriddedAbilityTracker (ability_estimator, integrator)
84+ else
85+ NullAbilityTracker ()
86+ end
87+ end
88+
89+ function compatible_tracker (bits... ; integrator, ability_estimator, prefer_tracked)
90+ ability_tracker = AbilityTracker (bits... ; ability_estimator= ability_estimator)
91+ if ability_tracker isa GriddedAbilityTracker && ability_tracker. integrator === integrator
92+ return ability_tracker
93+ end
94+ if prefer_tracked
95+ return AbilityTracker (bits... ; integrator= integrator, ability_estimator= ability_estimator)
96+ end
8497end
8598
8699abstract type AbilityIntegrator <: CatConfigBase end
87- function AbilityIntegrator (bits... ; ability_estimator= nothing )
100+ function AbilityIntegrator (bits... ; ability_estimator= nothing , prefer_tracked = false )
88101 @returnsome find1_instance (AbilityIntegrator, bits)
89102 zero_arg_intergrators = find1_type (RiemannEnumerationIntegrator, bits)
90103 if (zero_arg_intergrators != = nothing )
91104 return RiemannEnumerationIntegrator ()
92105 end
93- @returnsome Integrator (bits... ) integrator -> FunctionIntegrator (integrator)
106+ integrator = Integrator (bits... )
107+ if integrator === nothing
108+ return nothing
109+ end
110+ tracker = compatible_tracker (
111+ bits... ;
112+ integrator= integrator,
113+ ability_estimator= ability_estimator,
114+ prefer_tracked= prefer_tracked
115+ )
116+ if tracker != = nothing
117+ TrackedLikelihoodIntegrator (integrator, tracker)
118+ else
119+ FunctionIntegrator (integrator)
120+ end
94121end
95122
96123abstract type AbilityOptimizer end
0 commit comments