code: def _build_full_partition(
          optional_parts, sequence_var_partition: Sequence[int], subjects: Sequence[Expression], operation: Operation
  ) -> List[Sequence[Expression]]:
      
      i = 0
      var_index = 0
      opt_index = 0
      result = []
      for operand in op_iter(operation):
          wrap_associative = False
          if isinstance(operand, Wildcard):
              count = operand.min_count if operand.optional is None else 0
              if not operand.fixed_size or isinstance(operation, AssociativeOperation):
                  count += sequence_var_partition[var_index]
                  var_index += 1
                  wrap_associative = operand.fixed_size and operand.min_count
              elif operand.optional is not None:
                  count = optional_parts[opt_index]
                  opt_index += 1
          else:
              count = 1
  
          operand_expressions = list(op_iter(subjects))[i:i + count]
          i += count
  
          if wrap_associative and len(operand_expressions) > wrap_associative:
              fixed = wrap_associative - 1
              operand_expressions = tuple(operand_expressions[:fixed]) + (
                  create_operation_expression(operation, operand_expressions[fixed:]),
              )
  
          result.append(operand_expressions)
  
      return result
docs: Distribute subject operands among pattern operands.
  
      Given a partitoning for the variable part of the operands (i.e. a list of how many extra operands each sequence
      variable gets assigned).