def _check_proposal(self, proposal): """ Check for validity of the provided proposal distribution. If the proposal is a `NeuralPosterior`, we check if the default_x is set. If the proposal is **not** a `NeuralPosterior`, we warn since it is likely that the user simply passed the prior, but this would still trigger atomic loss. """ if proposal is not None: check_if_proposal_has_default_x(proposal) if isinstance(proposal, RestrictedPrior): if proposal._prior is not self._prior: warn( "The proposal you passed is a `RestrictedPrior`, but the " "proposal distribution it uses is not the prior (it can be " "accessed via `RestrictedPrior._prior`). We do not " "recommend to mix the `RestrictedPrior` with multi-round " "SNPE.") elif (not isinstance(proposal, DirectPosterior) and proposal is not self._prior): warn( "The proposal you passed is neither the prior nor a " "`NeuralPosterior` object. If you are an expert user and did so " "for research purposes, this is fine. If not, you might be doing " "something wrong: feel free to create an issue on Github.") elif self._round > 0: raise ValueError( "A proposal was passed but no prior was passed at initialisation. When " "running multi-round inference, a prior needs to be specified upon " "initialisation. Potential fix: setting the `._prior` attribute or " "re-initialisation. If the samples passed to `append_simulations()` " "were sampled from the prior, single-round inference can be performed " "with `append_simulations(..., proprosal=None)`.")
def _check_proposal(self, proposal): """ Check for validity of the provided proposal distribution. If the proposal is a `NeuralPosterior`, we check if the default_x is set. If the proposal is **not** a `NeuralPosterior`, we warn since it is likely that the user simply passed the prior, but this would still trigger atomic loss. """ if proposal is not None: check_if_proposal_has_default_x(proposal) if isinstance(proposal, RestrictedPrior): if proposal._prior is not self._prior: warn( "The proposal you passed is a `RestrictedPrior`, but the " "proposal distribution it uses is not the prior (it can be " "accessed via `RestrictedPrior._prior`). We do not " "recommend to mix the `RestrictedPrior` with multi-round " "SNPE." ) elif ( not isinstance(proposal, DirectPosterior) and proposal is not self._prior ): warn( "The proposal you passed is neither the prior nor a " "`NeuralPosterior` object. If you are an expert user and did so " "for research purposes, this is fine. If not, you might be doing " "something wrong: feel free to create an issue on Github." ) elif self._round > 0: raise ValueError( "You did not specify a proposal (i.e. `proposal=None`). " "However, previously, you had already specified a proposal. " "This scenario is currently not allowed." )