class_docstr: A mutator that can be dry run.
  
  :class:`StationaryMutator` invoke :class:`StationaryMutator.dry_run` to predict choice candidates,
  such that the mutator simplifies to some static choices within `simplify()`.
  This could be convenient to certain algorithms which do not want to handle dynamic samplers.
class_docstr_tok: ["A","mutator","that","can","be","dry","run",".",":","class",":","`","StationaryMutator","`","invoke",":","class",":","`","StationaryMutator.dry_run","`","to","predict","choice","candidates",",","such","that","the","mutator","simplifies","to","some","static","choices","within","`","simplify","(",")","`",".","This","could","be","convenient","to","certain","algorithms","which","do","not","want","to","handle","dynamic","samplers","."]
code: def freeze(self, sample: dict[str, Any]) -> GraphModelSpace:
      self.validate(sample)
  
      assert self._dry_run_choices is not None
      assert self.model is not None
  
      # The orders should be preserved here
      samples = [sample[label] for label in self._dry_run_choices]
      # We fake a FixedSampler in this freeze to consume the already-generated samples.s
      sampler = _FixedSampler(samples)
      return self.bind_sampler(sampler).apply(self.model)
  
imports: from __future__ import annotations
  from contextlib import contextmanager
  from typing import Any, Callable, Iterable, List, Optional, TYPE_CHECKING, Iterator
  from numpy.random import RandomState
  from nni.mutable import LabeledMutable, MutableList, MutableDict, Categorical, Mutable, SampleValidationError, Sample, SampleMissingError, label_scope, auto_label, frozen_context
  from .space import ModelStatus
label_desc: Use image node_id 4 for calling the StationaryMutator obj's underlying member method code with example usage: obj.freeze(sample) and returns: self