class_docstr: This class will have references to all the ops that we have captured in the main, larger program.
  Each captured op will be an attribute of this class. The attribute name will be the same name
  that the user defined in their pattern. So, if the user defines a pattern add(name = 'add_1') -> sub(name = 'sub_1),
  the pattern object will have the fields pattern.add_1, pattern.sub_1, which are references to the corresponding operations
  in the larger program.
  
  
  Minimum Attributes:
  root_var: which is the root variable of the first operation of the captured pattern (and corresponds to the user defined pattern’s root variable)
  final_op: the operation in the larger machine learning model that corresponds to the last operation in the user defined pattern.
  block: the block in the larger machine learning model where the pattern was found
  op_set: a set of all the operations captured from the larger machine learning model
  attribute_set: used for enforcing naming (ie, so the user doesn't overwrite any of the variables mentioned above)
  
  Setters
  set_root_var(root_var): sets the root_var attribute of the Pattern with the given root_var
  set_block(block): sets the block attribute of the Pattern with the given block
  set_final_op(op_name, final_op): adds the operation in question to the pattern and also sets it as the final_op
  
  Other Methods
  add_attribute(attribute_name, attribute): Adds an attribute to the pattern object. Can be useful for the user.
                                            Verifies name using the attribute set mentioned above
  add_op(op_name, op): Adds an operation to the pattern, as an attribute which can be accessed and as part of the op_set
  op_list(): converts the op_set to a list and returns it to make it easier for the user
code: def op_list(self):
      return list(self.op_set)
  
imports: import itertools
  import warnings
  from functools import partial
  from coremltools.converters.mil.mil.passes.helper import block_context_manager
  from ...mil.passes import pass_registry
label_desc: Use image node_id 7 for calling the Pattern obj's underlying member method code with example usage: obj.op_list() and returns: list