Source code for schrodinger.application.steps.test

"""
Utility code for testing of steps
"""
from schrodinger import structure
from schrodinger import stepper

from . import converters


class _FromSmilesChain(stepper.Chain):
    """
    A chain that acts like `step`, but takes SMILES as input.
    """

    def __init__(self, step, **kwargs):
        self.step = step
        super().__init__(**kwargs)

    def buildChain(self):
        self.addStep(converters.SmilesToMolConverter())
        if self.step.Input == structure.Structure:
            self.addStep(converters.MolToStructureConverter())
        self.addStep(self.step)


class _ToSmilesChain(stepper.Chain):
    """
    A chain that acts like `step`, but returns the outputs as canonical SMILES.
    """

    def __init__(self, step, **kwargs):
        self.step = step
        super().__init__(**kwargs)

    def buildChain(self):
        if self.step.Output == structure.Structure:
            self.addStep(converters.StructureToMolConverter())
        self.addStep(converters.MolToSmilesConverter())


[docs]def getOutputs(step, inputs): """ Return all the outputs for the step using the inputs asserting that all the step outputs are instances of the proper type. :param step: the step to get the outputs for :type step: schrodinger.stepper.stepper._BaseStep :param inputs: the inputs to use for the step :type inputs: list """ step.setInputs(inputs) outputs = step.getOutputs() assert all(isinstance(obj, step.Output) for obj in outputs) return outputs
[docs]def getOutputsFromSmiles(step, inputs): """ Return all the outputs for the step using the SMILES inputs asserting that all the step outputs are instances of the proper type. :param step: the step to get the outputs for :type step: schrodinger.stepper.stepper._BaseStep :param inputs: the SMILES inputs to use for the step :type inputs: list """ chain = _FromSmilesChain(step) chain.setInputs(inputs) outputs = chain.getOutputs() assert all(isinstance(obj, step.Output) for obj in outputs) return outputs
[docs]def getSmilesWrappedOutputs(step, inputs): """ Return all canonical SMILES outputs for the step using the SMILES inputs asserting that all the step outputs are instances of the proper type. :param step: the step to get the outputs for :type step: schrodinger.stepper.stepper._BaseStep :param inputs: the SMILES inputs to use for the step :type inputs: list """ raw_outputs = getOutputsFromSmiles(step, inputs) chain = _ToSmilesChain(step) chain.setInputs(raw_outputs) return chain.getOutputs()
[docs]def checkValidateSettings(step, msgs=None): """ Asserts that every issue message from the step's validateSettings occurs in the msgs in the same order. Note no distinction is made between warning or errors. :param step: the step whose validateSettings method is to be used :type step: stepper._BaseStep :param msgs: the list of messages expected :type msgs: List[str] or NoneType """ msgs = msgs or [] validation_messages = [issue.msg for issue in step.validateSettings()] assert validation_messages == msgs, f"{msgs=}\n{validation_messages=}"
[docs]class StepContract:
[docs] def test_getLicenseRequirements(self): raise NotImplementedError()
[docs] def test_validateSettings(self): raise NotImplementedError()
[docs] def test_getOutputs(self): raise NotImplementedError()