code: def sia(transition, direction=Direction.BIDIRECTIONAL):
      
      validate.direction(direction, allow_bi=True)
      log.info("Calculating big-alpha for %s...", transition)
  
      if not transition:
          log.info('Transition %s is empty; returning null SIA '
                   'immediately.', transition)
          return _null_ac_sia(transition, direction)
  
      if not connectivity.is_weak(transition.network.cm,
                                  transition.node_indices):
          log.info('%s is not strongly/weakly connected; returning null SIA '
                   'immediately.', transition)
          return _null_ac_sia(transition, direction)
  
      log.debug("Finding unpartitioned account...")
      unpartitioned_account = account(transition, direction)
      log.debug("Found unpartitioned account.")
  
      if not unpartitioned_account:
          log.info('Empty unpartitioned account; returning null AC SIA '
                   'immediately.')
          return _null_ac_sia(transition, direction)
  
      cuts = _get_cuts(transition, direction)
      engine = ComputeACSystemIrreducibility(
          cuts, transition, direction, unpartitioned_account)
      result = engine.run_sequential()
      log.info("Finished calculating big-ac-phi data for %s.", transition)
      log.debug("RESULT: \n%s", result)
      return result
docs: Return the minimal information partition of a transition in a specific
      direction.
  
      Args:
          transition (Transition): The candidate system.
  
      Returns:
          AcSystemIrreducibilityAnalysis: A nested structure containing all the
          data from the intermediate calculations. The top level contains the
          basic irreducibility information for the given subsystem.