class_docstr: Parse and test package version predicates.
  
  >>> v = VersionPredicate('pyepat.abc (>1.0, <3333.3a1, !=1555.1b3)')
  
  The `name` attribute provides the full dotted name that is given::
  
  >>> v.name
  'pyepat.abc'
  
  The str() of a `VersionPredicate` provides a normalized
  human-readable version of the expression::
  
  >>> print(v)
  pyepat.abc (> 1.0, < 3333.3a1, != 1555.1b3)
  
  The `satisfied_by()` method can be used to determine with a given
  version number is included in the set described by the version
  restrictions::
  
  >>> v.satisfied_by('1.1')
  True
  >>> v.satisfied_by('1.4')
  True
  >>> v.satisfied_by('1.0')
  False
  >>> v.satisfied_by('4444.4')
  False
  >>> v.satisfied_by('1555.1b3')
  False
  
  `VersionPredicate` is flexible in accepting extra whitespace::
  
  >>> v = VersionPredicate(' pat( ==  0.1  )  ')
  >>> v.name
  'pat'
  >>> v.satisfied_by('0.1')
  True
  >>> v.satisfied_by('0.2')
  False
  
  If any version numbers passed in do not conform to the
  restrictions of `StrictVersion`, a `ValueError` is raised::
  
  >>> v = VersionPredicate('p1.p2.p3.p4(>=1.0, <=1.3a1, !=1.2zb3)')
  Traceback (most recent call last):
    ...
  ValueError: invalid version number '1.2zb3'
  
  It the module or package name given does not conform to what's
  allowed as a legal module or package name, `ValueError` is
  raised::
  
  >>> v = VersionPredicate('foo-bar')
  Traceback (most recent call last):
    ...
  ValueError: expected parenthesized list: '-bar'
  
  >>> v = VersionPredicate('foo bar (12.21)')
  Traceback (most recent call last):
    ...
  ValueError: expected parenthesized list: 'bar (12.21)'
code: def __str__(self):
      if self.pred:
          seq = [cond + " " + str(ver) for cond, ver in self.pred]
          return self.name + " (" + ", ".join(seq) + ")"
      else:
          return self.name
  
file_path: catboost/contrib/tools/python3/src/Lib/distutils/versionpredicate.py
imports: import re
  import distutils.version
  import operator
label_desc: Use image node_id 2 for calling the VersionPredicate obj's underlying member method code with example usage: obj.__str__() and returns: unknown, self