예제 #1
0
    def get_sub_workchain_builder(self, scale_factor, reference_workchain=None):
        """Return the builder for the relax workchain."""
        structure = scale_structure(self.inputs.structure, scale_factor)
        process_class = WorkflowFactory(self.inputs.sub_process_class)

        builder = process_class.get_input_generator().get_builder(
            structure,
            reference_workchain=reference_workchain,
            **self.inputs.generator_inputs
        )
        builder._update(**self.inputs.get('sub_process', {}))  # pylint: disable=protected-access

        return builder, structure
    def get_sub_workchain_builder(self, distance, reference_workchain=None):
        """Return the builder for the relax workchain."""
        molecule = set_distance(self.inputs.molecule, distance)
        process_class = WorkflowFactory(self.inputs.sub_process_class)

        builder = process_class.get_input_generator().get_builder(
            molecule,
            reference_workchain=reference_workchain,
            **self.inputs.generator_inputs
        )
        builder._update(**self.inputs.get('sub_process', {}))  # pylint: disable=protected-access

        distance_node = molecule.creator.inputs.distance

        return builder, distance_node
예제 #3
0
def validate_inputs(value, _):
    """Validate the entire input namespace."""
    if 'scale_factors' not in value:
        if 'scale_count' not in value or 'scale_increment' not in value:
            return 'neither `scale_factors` nor the pair of `scale_count` and `scale_increment` were defined.'

    # Validate that the provided ``generator_inputs`` are valid for the associated input generator.
    process_class = WorkflowFactory(value['sub_process_class'])
    generator = process_class.get_input_generator()

    try:
        generator.get_builder(structure=value['structure'],
                              **value['generator_inputs'])
    except Exception as exc:  # pylint: disable=broad-except
        return f'`{generator.__class__.__name__}.get_builder()` fails for the provided `generator_inputs`: {exc}'
def validate_inputs(value, _):
    """Validate the entire input namespace."""
    if 'distances' not in value:
        if any(key not in value
               for key in ['distances_count', 'distance_min', 'distance_max']):
            return 'neither `distances` nor the `distances_count`, `distance_min`, and `distance_max` set were defined.'
        if value['distance_min'] >= value['distance_max']:
            return '`distance_min` must be smaller than `distance_max`'

    # Validate that the provided ``generator_inputs`` are valid for the associated input generator.
    process_class = WorkflowFactory(value['sub_process_class'])
    generator = process_class.get_input_generator()

    try:
        generator.get_builder(structure=value['molecule'],
                              **value['generator_inputs'])
    except Exception as exc:  # pylint: disable=broad-except
        return f'`{generator.__class__.__name__}.get_builder()` fails for the provided `generator_inputs`: {exc}'