code: def _current_select():
      
  
      # helper to create the conjuction of predicates
      def and_with_possible_none(a, b):
          assert(a is not None or b is not None)
          if a is None:
              return b
          if b is None:
              return a
          return a & b
  
      def between_otherwise_and_current(predlist):
          lastother = None
          for i, p in enumerate(predlist[:-1]):
              if p is otherwise:
                  lastother = i
          if lastother is None:
              return predlist[:-1]
          else:
              return predlist[lastother+1:-1]
  
      select = None
      pred_set = set()
  
      # for all conditions except the current children (which should be [])
      for predlist in _conditions_list_stack[:-1]:
          # negate all of the predicates between "otherwise" and the current one
          for predicate in between_otherwise_and_current(predlist):
              select = and_with_possible_none(select, ~predicate)
              pred_set.add((predicate, True))
          # include the predicate for the current one (not negated)
          if predlist[-1] is not otherwise:
              predicate = predlist[-1]
              select = and_with_possible_none(select, predicate)
              pred_set.add((predicate, False))
  
      if select is None:
          raise PyrtlError('problem with conditional assignment')
      if len(select) != 1:
          raise PyrtlInternalError('conditional predicate with length greater than 1')
  
      return select, pred_set
docs: Function to calculate the current "predicate" in the current context.
  
      Returns a tuple of information: (predicate, pred_set).
      The value pred_set is a set([ (predicate, bool), ... ]) as described in
      the _reset_conditional_state