docs: def evaluate_cut(uncut_subsystem, cut, unpartitioned_ces):
      """Compute the system irreducibility for a given cut.
  
      Args:
          uncut_subsystem (Subsystem): The subsystem without the cut applied.
          cut (Cut): The cut to evaluate.
          unpartitioned_ces (CauseEffectStructure): The cause-effect structure of
              the uncut subsystem.
  
      Returns:
          SystemIrreducibilityAnalysis: The |SystemIrreducibilityAnalysis| for
          that cut.
      """
      log.debug('Evaluating %s...', cut)
  
      cut_subsystem = uncut_subsystem.apply_cut(cut)
  
      if config.ASSUME_CUTS_CANNOT_CREATE_NEW_CONCEPTS:
          mechanisms = unpartitioned_ces.mechanisms
      else:
          # Mechanisms can only produce concepts if they were concepts in the
          # original system, or the cut divides the mechanism.
          mechanisms = set(
              unpartitioned_ces.mechanisms +
              list(cut_subsystem.cut_mechanisms))
  
      partitioned_ces = ces(cut_subsystem, mechanisms)
  
      log.debug('Finished evaluating %s.', cut)
  
      phi_ = ces_distance(unpartitioned_ces, partitioned_ces)
  
      return SystemIrreducibilityAnalysis(
          phi=phi_,
          ces=unpartitioned_ces,
          partitioned_ces=partitioned_ces,
          subsystem=uncut_subsystem,
          cut_subsystem=cut_subsystem)