(root)/
Python-3.12.0/
Lib/
__future__.py
       1  """Record of phased-in incompatible language changes.
       2  
       3  Each line is of the form:
       4  
       5      FeatureName = "_Feature(" OptionalRelease "," MandatoryRelease ","
       6                                CompilerFlag ")"
       7  
       8  where, normally, OptionalRelease < MandatoryRelease, and both are 5-tuples
       9  of the same form as sys.version_info:
      10  
      11      (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
      12       PY_MINOR_VERSION, # the 1; an int
      13       PY_MICRO_VERSION, # the 0; an int
      14       PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
      15       PY_RELEASE_SERIAL # the 3; an int
      16      )
      17  
      18  OptionalRelease records the first release in which
      19  
      20      from __future__ import FeatureName
      21  
      22  was accepted.
      23  
      24  In the case of MandatoryReleases that have not yet occurred,
      25  MandatoryRelease predicts the release in which the feature will become part
      26  of the language.
      27  
      28  Else MandatoryRelease records when the feature became part of the language;
      29  in releases at or after that, modules no longer need
      30  
      31      from __future__ import FeatureName
      32  
      33  to use the feature in question, but may continue to use such imports.
      34  
      35  MandatoryRelease may also be None, meaning that a planned feature got
      36  dropped or that the release version is undetermined.
      37  
      38  Instances of class _Feature have two corresponding methods,
      39  .getOptionalRelease() and .getMandatoryRelease().
      40  
      41  CompilerFlag is the (bitfield) flag that should be passed in the fourth
      42  argument to the builtin function compile() to enable the feature in
      43  dynamically compiled code.  This flag is stored in the .compiler_flag
      44  attribute on _Future instances.  These values must match the appropriate
      45  #defines of CO_xxx flags in Include/cpython/compile.h.
      46  
      47  No feature line is ever to be deleted from this file.
      48  """
      49  
      50  all_feature_names = [
      51      "nested_scopes",
      52      "generators",
      53      "division",
      54      "absolute_import",
      55      "with_statement",
      56      "print_function",
      57      "unicode_literals",
      58      "barry_as_FLUFL",
      59      "generator_stop",
      60      "annotations",
      61  ]
      62  
      63  __all__ = ["all_feature_names"] + all_feature_names
      64  
      65  # The CO_xxx symbols are defined here under the same names defined in
      66  # code.h and used by compile.h, so that an editor search will find them here.
      67  # However, they're not exported in __all__, because they don't really belong to
      68  # this module.
      69  CO_NESTED = 0x0010                      # nested_scopes
      70  CO_GENERATOR_ALLOWED = 0                # generators (obsolete, was 0x1000)
      71  CO_FUTURE_DIVISION = 0x20000            # division
      72  CO_FUTURE_ABSOLUTE_IMPORT = 0x40000     # perform absolute imports by default
      73  CO_FUTURE_WITH_STATEMENT = 0x80000      # with statement
      74  CO_FUTURE_PRINT_FUNCTION = 0x100000     # print function
      75  CO_FUTURE_UNICODE_LITERALS = 0x200000   # unicode string literals
      76  CO_FUTURE_BARRY_AS_BDFL = 0x400000
      77  CO_FUTURE_GENERATOR_STOP = 0x800000     # StopIteration becomes RuntimeError in generators
      78  CO_FUTURE_ANNOTATIONS = 0x1000000       # annotations become strings at runtime
      79  
      80  
      81  class ESC[4;38;5;81m_Feature:
      82  
      83      def __init__(self, optionalRelease, mandatoryRelease, compiler_flag):
      84          self.optional = optionalRelease
      85          self.mandatory = mandatoryRelease
      86          self.compiler_flag = compiler_flag
      87  
      88      def getOptionalRelease(self):
      89          """Return first release in which this feature was recognized.
      90  
      91          This is a 5-tuple, of the same form as sys.version_info.
      92          """
      93          return self.optional
      94  
      95      def getMandatoryRelease(self):
      96          """Return release in which this feature will become mandatory.
      97  
      98          This is a 5-tuple, of the same form as sys.version_info, or, if
      99          the feature was dropped, or the release date is undetermined, is None.
     100          """
     101          return self.mandatory
     102  
     103      def __repr__(self):
     104          return "_Feature" + repr((self.optional,
     105                                    self.mandatory,
     106                                    self.compiler_flag))
     107  
     108  
     109  nested_scopes = _Feature((2, 1, 0, "beta",  1),
     110                           (2, 2, 0, "alpha", 0),
     111                           CO_NESTED)
     112  
     113  generators = _Feature((2, 2, 0, "alpha", 1),
     114                        (2, 3, 0, "final", 0),
     115                        CO_GENERATOR_ALLOWED)
     116  
     117  division = _Feature((2, 2, 0, "alpha", 2),
     118                      (3, 0, 0, "alpha", 0),
     119                      CO_FUTURE_DIVISION)
     120  
     121  absolute_import = _Feature((2, 5, 0, "alpha", 1),
     122                             (3, 0, 0, "alpha", 0),
     123                             CO_FUTURE_ABSOLUTE_IMPORT)
     124  
     125  with_statement = _Feature((2, 5, 0, "alpha", 1),
     126                            (2, 6, 0, "alpha", 0),
     127                            CO_FUTURE_WITH_STATEMENT)
     128  
     129  print_function = _Feature((2, 6, 0, "alpha", 2),
     130                            (3, 0, 0, "alpha", 0),
     131                            CO_FUTURE_PRINT_FUNCTION)
     132  
     133  unicode_literals = _Feature((2, 6, 0, "alpha", 2),
     134                              (3, 0, 0, "alpha", 0),
     135                              CO_FUTURE_UNICODE_LITERALS)
     136  
     137  barry_as_FLUFL = _Feature((3, 1, 0, "alpha", 2),
     138                            (4, 0, 0, "alpha", 0),
     139                            CO_FUTURE_BARRY_AS_BDFL)
     140  
     141  generator_stop = _Feature((3, 5, 0, "beta", 1),
     142                            (3, 7, 0, "alpha", 0),
     143                            CO_FUTURE_GENERATOR_STOP)
     144  
     145  annotations = _Feature((3, 7, 0, "beta", 1),
     146                         None,
     147                         CO_FUTURE_ANNOTATIONS)