record of phasedin incompatible language changes each line is of the form featurename feature optionalrelease mandatoryrelease compilerflag where normally optionalrelease mandatoryrelease and both are 5tuples of the same form as sys versioninfo pymajorversion the 2 in 2 1 0a3 an int pyminorversion the 1 an int pymicroversion the 0 an int pyreleaselevel alpha beta candidate or final string pyreleaseserial the 3 an int optionalrelease records the first release in which from future import featurename was accepted in the case of mandatoryreleases that have not yet occurred mandatoryrelease predicts the release in which the feature will become part of the language else mandatoryrelease records when the feature became part of the language in releases at or after that modules no longer need from future import featurename to use the feature in question but may continue to use such imports mandatoryrelease may also be none meaning that a planned feature got dropped or that the release version is undetermined instances of class feature have two corresponding methods getoptionalrelease and getmandatoryrelease compilerflag is the bitfield flag that should be passed in the fourth argument to the builtin function compile to enable the feature in dynamically compiled code this flag is stored in the compilerflag attribute on future instances these values must match the appropriate defines of coxxx flags in includecpythoncompile h no feature line is ever to be deleted from this file the coxxx symbols are defined here under the same names defined in code h and used by compile h so that an editor search will find them here however they re not exported in all because they don t really belong to this module return first release in which this feature was recognized this is a 5tuple of the same form as sys versioninfo return release in which this feature will become mandatory this is a 5tuple of the same form as sys versioninfo or if the feature was dropped or the release date is undetermined is none the co_xxx symbols are defined here under the same names defined in code h and used by compile h so that an editor search will find them here however they re not exported in __all__ because they don t really belong to this module nested_scopes generators obsolete was 0x1000 division perform absolute imports by default with statement print function unicode string literals stopiteration becomes runtimeerror in generators annotations become strings at runtime return first release in which this feature was recognized this is a 5 tuple of the same form as sys version_info return release in which this feature will become mandatory this is a 5 tuple of the same form as sys version_info or if the feature was dropped or the release date is undetermined is none
all_feature_names = [
    "nested_scopes",
    "generators",
    "division",
    "absolute_import",
    "with_statement",
    "print_function",
    "unicode_literals",
    "barry_as_FLUFL",
    "generator_stop",
    "annotations",
]

__all__ = ["all_feature_names"] + all_feature_names





CO_NESTED = 0x0010                      
CO_GENERATOR_ALLOWED = 0                
CO_FUTURE_DIVISION = 0x20000            
CO_FUTURE_ABSOLUTE_IMPORT = 0x40000     
CO_FUTURE_WITH_STATEMENT = 0x80000      
CO_FUTURE_PRINT_FUNCTION = 0x100000     
CO_FUTURE_UNICODE_LITERALS = 0x200000   
CO_FUTURE_BARRY_AS_BDFL = 0x400000
CO_FUTURE_GENERATOR_STOP = 0x800000     
CO_FUTURE_ANNOTATIONS = 0x1000000       


class _Feature:

    def __init__(self, optionalRelease, mandatoryRelease, compiler_flag):
        self.optional = optionalRelease
        self.mandatory = mandatoryRelease
        self.compiler_flag = compiler_flag

    def getOptionalRelease(self):
        
        return self.optional

    def getMandatoryRelease(self):
        
        return self.mandatory

    def __repr__(self):
        return "_Feature" + repr((self.optional,
                                  self.mandatory,
                                  self.compiler_flag))


nested_scopes = _Feature((2, 1, 0, "beta",  1),
                         (2, 2, 0, "alpha", 0),
                         CO_NESTED)

generators = _Feature((2, 2, 0, "alpha", 1),
                      (2, 3, 0, "final", 0),
                      CO_GENERATOR_ALLOWED)

division = _Feature((2, 2, 0, "alpha", 2),
                    (3, 0, 0, "alpha", 0),
                    CO_FUTURE_DIVISION)

absolute_import = _Feature((2, 5, 0, "alpha", 1),
                           (3, 0, 0, "alpha", 0),
                           CO_FUTURE_ABSOLUTE_IMPORT)

with_statement = _Feature((2, 5, 0, "alpha", 1),
                          (2, 6, 0, "alpha", 0),
                          CO_FUTURE_WITH_STATEMENT)

print_function = _Feature((2, 6, 0, "alpha", 2),
                          (3, 0, 0, "alpha", 0),
                          CO_FUTURE_PRINT_FUNCTION)

unicode_literals = _Feature((2, 6, 0, "alpha", 2),
                            (3, 0, 0, "alpha", 0),
                            CO_FUTURE_UNICODE_LITERALS)

barry_as_FLUFL = _Feature((3, 1, 0, "alpha", 2),
                          (4, 0, 0, "alpha", 0),
                          CO_FUTURE_BARRY_AS_BDFL)

generator_stop = _Feature((3, 5, 0, "beta", 1),
                          (3, 7, 0, "alpha", 0),
                          CO_FUTURE_GENERATOR_STOP)

annotations = _Feature((3, 7, 0, "beta", 1),
                       None,
                       CO_FUTURE_ANNOTATIONS)