Scale#

Block 4 — parallel evaluation and pre-enumerated libraries. See the guide.

The user-facing knobs are fields on ThompsonSamplingConfig (processes, min_cpds_per_core, product_library_file) and the sampler methods set_evaluator() and load_product_library(). The machinery behind processes > 1:

class TACTICS.thompson_sampling.core.parallel_evaluator.ParallelEvaluator(processes=1)[source]#

Wrapper for parallel evaluation of compounds with persistent pool.

The pool is created once and reused across all evaluations to avoid the overhead of repeatedly spawning processes.

Two execution paths:

  • processes == 1: sequential, calling evaluate_fn directly. No pickling and no worker processes.

  • processes > 1: a persistent pool whose workers each construct their own evaluator via _init_worker(). Requires a worker context to have been bound with bind_worker_context(); without one, falls back to sending evaluate_fn itself, which works for picklable evaluators but not for OpenEye-backed ones.

bind_worker_context(sampler, evaluator_config)[source]#

Record what each worker needs in order to rebuild its own evaluator.

Called by ThompsonSampler.set_evaluator when the evaluator’s config is known (i.e. when the sampler was built by from_config, or when set_evaluator was given an explicit evaluator_config).

Any existing pool is shut down, because its workers were initialized from the previous context and would otherwise keep using a stale evaluator.

Parameters:
  • sampler – The ThompsonSampler whose evaluate the workers run.

  • evaluator_config – Picklable evaluator config used to rebuild the evaluator inside each worker. If None, the context is cleared.

close()[source]#

Close the process pool if it exists.

evaluate_batch(evaluate_fn, compound_list)[source]#

Evaluate a batch of compounds in parallel.

Parameters:
  • evaluate_fn (Callable) – Function that takes a compound representation (e.g. list of reagent indices) and returns [score, smiles, name]. Used directly when running sequentially, and as the fallback task function when no worker context has been bound.

  • compound_list (List[Any]) – List of compound representations to evaluate

Returns:

List of evaluation results [score, smiles, name] for each compound

Raises:

TypeError – if processes > 1 with no worker context bound and the evaluator cannot be pickled. The message explains how to fix it.

Return type:

List[Any]