code: def tri_value(self):
          
          # This emulates a reverse dependency of 'm && visibility' for
          # non-optional choices, which is how the C implementation does it
  
          val = 0 if self.is_optional else 1
  
          if self.user_value is not None:
              val = max(val, self.user_value)
  
          # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
          # function call (property magic)
          val = min(val, self.visibility)
  
          # Promote m to y for boolean choices
          return 2 if val == 1 and self.type is BOOL else val
docs: See the class documentation.