# ConditionalGroup — OpenFF Evaluator documentation

# ConditionalGroup

class `openff.evaluator.protocols.groups.``ConditionalGroup`(protocol_id)

  A collection of protocols which are to execute until a given condition is met.

  `__init__`(protocol_id)

    Constructs a new ProtocolGroup.

  Methods

  `__init__`(protocol_id) | Constructs a new ProtocolGroup.
  `add_condition`(condition_to_add) | Adds a condition to this groups list of conditions if it not already in the condition list.
  `add_protocols`(*protocols) | Add protocols to this group.
  `apply_replicator`(replicator, template_values) | Applies a ProtocolReplicator to this protocol.
  `can_merge`(other[, path_replacements]) | Determines whether this protocol can be merged with another.
  `execute`([directory, available_resources]) | Execute the protocol.
  `from_json`(file_path) | Create this object from a JSON file.
  `from_schema`(schema) | Initializes a protocol from it’s schema definition.
  `get_attributes`([attribute_type]) | Returns all attributes of a specific attribute_type.
  `get_class_attribute`(reference_path) | Returns one of this protocols, or any of its children’s, attributes directly (rather than its value).
  `get_value`(reference_path) | Returns the value of one of this protocols inputs / outputs.
  `get_value_references`(input_path) | Returns a dictionary of references to the protocols which one of this protocols inputs (specified by input_path) takes its value from.
  `json`([file_path, format]) | Creates a JSON representation of this class.
  `merge`(other) | Merges another ProtocolGroup with this one.
  `parse_json`(string_contents[, encoding]) | Parses a typed json string into the corresponding class structure.
  `replace_protocol`(old_id, new_id) | Finds each input which came from a given protocol
  `set_uuid`(value) | Store the uuid of the calculation this protocol belongs to
  `set_value`(reference_path, value) | Sets the value of one of this protocols inputs.
  `validate`([attribute_type]) | Validate the values of the attributes.

  Attributes

  `allow_merging` | Input - Defines whether this protocols is allowed to merge with other protocols.
  `conditions` | Input - The conditions which must be satisfied beforethe group will cleanly exit.
  `current_iteration` | Output - The current number of iterations this group has performed while attempting to satisfy the specified conditions.
  `dependencies` | A list of pointers to the protocols which this protocol takes input from.
  `id` | The unique id of this protocol.
  `max_iterations` | Input - The maximum number of iterations to run for to try and satisfy the groups conditions.
  `outputs` | A dictionary of the outputs of this property.
  `protocols` | A dictionary of the protocols in this groups, where the dictionary key is the protocol id, and the value is the protocol itself.
  `required_inputs` | The inputs which must be set on this protocol.
  `schema` | A serializable schema for this object.

  class `Condition`

    Defines a specific condition which must be met of the form left_hand_value [TYPE] right_hand_value, where [TYPE] may be less than or greater than.

    class `Type`(value)

      The available condition types.

    `left_hand_value`

      The left-hand value to compare. The default value of this attribute is not set and must be set by the user..

      Type

        typing.Union[int, float, pint.quantity.Quantity]

    `right_hand_value`

      The right-hand value to compare. The default value of this attribute is not set and must be set by the user..

      Type

        typing.Union[int, float, pint.quantity.Quantity]

    `type`

      The right-hand value to compare. The default value of this attribute is `Type.LessThan`.

      Type

        ConditionalGroup.Condition.Type

    classmethod `from_json`(file_path)

      Create this object from a JSON file.

      Parameters

        file_path (str) – The path to load the JSON from.

      Returns

        The parsed class.

      Return type

        cls

    classmethod `get_attributes`(attribute_type=None)

      Returns all attributes of a specific attribute_type.

      Parameters

        attribute_type (type of Attribute, optional) – The type of attribute to search for.

      Returns

        The names of the attributes of the specified type.

      Return type

        list of str

    `json`(file_path=None, format=False)

      Creates a JSON representation of this class.

      Parameters

        - file_path (str , optional) – The (optional) file path to save the JSON file to.

        - format (bool) – Whether to format the JSON or not.

      Returns

        The JSON representation of this class.

      Return type

        str

    classmethod `parse_json`(string_contents, encoding='utf8')

      Parses a typed json string into the corresponding class structure.

      Parameters

        - string_contents (str or bytes) – The typed json string.

        - encoding (str) – The encoding of the string_contents.

      Returns

        The parsed class.

      Return type

        Any

    `validate`(attribute_type=None)

      Validate the values of the attributes. If attribute_type is set, only attributes of that type will be validated.

      Parameters

        attribute_type (type of Attribute, optional) – The type of attribute to validate.

      Raises

        ValueError or AssertionError –

  `conditions`

    Input - The conditions which must be satisfied beforethe group will cleanly exit. The default value of this attribute is `[]`.

    Type

      list

  `current_iteration`

    Output - The current number of iterations this group has performed while attempting to satisfy the specified conditions. This value starts from one. The default value of this attribute is not set and must be set by the user..

    Type

      int

  `max_iterations`

    Input - The maximum number of iterations to run for to try and satisfy the groups conditions. The default value of this attribute is `100`.

    Type

      int

  `merge`(other)

    Merges another ProtocolGroup with this one. The id of this protocol will remain unchanged.

    It is assumed that can_merge has already returned that these protocol groups are compatible to be merged together.

    Parameters

      other (ConditionalGroup) – The protocol to merge into this one.

  `add_condition`(condition_to_add)

    Adds a condition to this groups list of conditions if it not already in the condition list.

    Parameters

      condition_to_add (`ConditionalGroup.Condition`) – The condition to add.

  `get_value_references`(input_path)

    Returns a dictionary of references to the protocols which one of this protocols inputs (specified by input_path) takes its value from.

    Notes

    Currently this method only functions correctly for an input value which is either currently a `ProtocolPath`, or a list / dict which contains at least one `ProtocolPath`.

    Parameters

      input_path (ProtocolPath) – The input value to check.

    Returns

      A dictionary of the protocol paths that the input targeted by input_path depends upon.

    Return type

      dict of ProtocolPath and ProtocolPath

  `add_protocols`(*protocols)

    Add protocols to this group.

    Parameters

      protocols (Protocol) – The protocols to add.

  `allow_merging`

    Input - Defines whether this protocols is allowed to merge with other protocols. The default value of this attribute is `True`.

    Type

      bool

  `apply_replicator`(replicator, template_values, template_index=- 1, template_value=None, update_input_references=False)

    Applies a ProtocolReplicator to this protocol. This method should clone any protocols whose id contains the id of the replicator (in the format $(replicator.id)).

    Parameters

      - replicator (ProtocolReplicator) – The replicator to apply.

      - template_values (list of Any) –

        A list of the values which will be inserted into the newly replicated protocols.

        This parameter is mutually exclusive with template_index and template_value

      - template_index (int , optional) –

        A specific value which should be used for any protocols flagged as to be replicated by the replicator. This option is mainly used when replicating children of an already replicated protocol.

        This parameter is mutually exclusive with template_values and must be set along with a template_value.

      - template_value (Any, optional) –

        A specific index which should be used for any protocols flagged as to be replicated by the replicator. This option is mainly used when replicating children of an already replicated protocol.

        This parameter is mutually exclusive with template_values and must be set along with a template_index.

      - update_input_references (bool) –

        If true, any protocols which take their input from a protocol which was flagged for replication will be updated to take input from the actually replicated protocol. This should only be set to true if this protocol is not nested within a workflow or a protocol group.

        This option cannot be used when a specific template_index or template_value is providied.

    Returns

      A dictionary of references to all of the protocols which have been replicated, with keys of original protocol ids. Each value is comprised of a list of the replicated protocol ids, and their index into the template_values array.

    Return type

      dict of ProtocolPath and list of tuple of ProtocolPath and int

  `can_merge`(other, path_replacements=None)

    Determines whether this protocol can be merged with another.

    Parameters

      - other (`Protocol`) – The protocol to compare against.

      - path_replacements (list of tuple of str, optional) – Replacements to make in any value reference protocol paths before comparing for equality.

    Returns

      True if the two protocols are safe to merge.

    Return type

      bool

  property `dependencies`

    A list of pointers to the protocols which this protocol takes input from.

    Type

      list of ProtocolPath

  `execute`(directory='', available_resources=None)

    Execute the protocol.

    Parameters

      - directory (str) – The directory to store output data in.

      - available_resources (ComputeResources) – The resources available to execute on. If None, the protocol will be executed on a single CPU.

  classmethod `from_json`(file_path)

    Create this object from a JSON file.

    Parameters

      file_path (str) – The path to load the JSON from.

    Returns

      The parsed class.

    Return type

      cls

  classmethod `from_schema`(schema)

    Initializes a protocol from it’s schema definition.

    Parameters

      schema (ProtocolSchema) – The schema to initialize the protocol using.

    Returns

      The initialized protocol.

    Return type

      cls

  classmethod `get_attributes`(attribute_type=None)

    Returns all attributes of a specific attribute_type.

    Parameters

      attribute_type (type of Attribute, optional) – The type of attribute to search for.

    Returns

      The names of the attributes of the specified type.

    Return type

      list of str

  `get_class_attribute`(reference_path)

    Returns one of this protocols, or any of its children’s, attributes directly (rather than its value).

    Parameters

      reference_path (ProtocolPath) – The path pointing to the attribute to return.

    Returns

      The class attribute.

    Return type

      object

  `get_value`(reference_path)

    Returns the value of one of this protocols inputs / outputs.

    Parameters

      reference_path (ProtocolPath) – The path pointing to the value to return.

    Returns

      The value of the input / output

    Return type

      Any

  `id`

    The unique id of this protocol. The default value of this attribute is not set and must be set by the user..

    Type

      str

  `json`(file_path=None, format=False)

    Creates a JSON representation of this class.

    Parameters

      - file_path (str , optional) – The (optional) file path to save the JSON file to.

      - format (bool) – Whether to format the JSON or not.

    Returns

      The JSON representation of this class.

    Return type

      str

  property `outputs`

    A dictionary of the outputs of this property.

    Type

      dict of ProtocolPath and Any

  classmethod `parse_json`(string_contents, encoding='utf8')

    Parses a typed json string into the corresponding class structure.

    Parameters

      - string_contents (str or bytes) – The typed json string.

      - encoding (str) – The encoding of the string_contents.

    Returns

      The parsed class.

    Return type

      Any

  property `protocols`

    A dictionary of the protocols in this groups, where the dictionary key is the protocol id, and the value is the protocol itself.

    Notes

    This property should not be altered. Use add_protocols to add new protocols to the group.

    Type

      dict of str and Protocol

  `replace_protocol`(old_id, new_id)
    Finds each input which came from a given protocol

      and redirects it to instead take input from a different one.

    Parameters

      - old_id (str) – The id of the old input protocol.

      - new_id (str) – The id of the new input protocol.

  property `required_inputs`

    The inputs which must be set on this protocol.

    Type

      list of ProtocolPath

  property `schema`

    A serializable schema for this object.

    Type

      ProtocolSchema

  `set_uuid`(value)

    Store the uuid of the calculation this protocol belongs to

    Parameters

      value (str) – The uuid of the parent calculation.

  `set_value`(reference_path, value)

    Sets the value of one of this protocols inputs.

    Parameters

      - reference_path (ProtocolPath) – The path pointing to the value to return.

      - value (Any) – The value to set.

  `validate`(attribute_type=None)

    Validate the values of the attributes. If attribute_type is set, only attributes of that type will be validated.

    Parameters

      attribute_type (type of Attribute, optional) – The type of attribute to validate.

    Raises

      ValueError or AssertionError –