"""A directly executed Python application."""
print(__name__, __package__, __spec__, __doc__)

def main():
    print('main ran', __name__)
if __name__ == '__main__':
    main()
else:
    print('not the entry module')

def local(__name__):
    return __name__
print(local('local'), __name__)

def rename(value):
    global __name__
    __name__ = value
__name__ = 'first'
def first():
    return __name__
first_alias = first
class First:
    def method(self):
        return __name__
instance = First()
saved = instance.method
__name__ = 'second'
def second():
    return __name__
print(first.__module__, first_alias.__module__, second.__module__, first(), second())
print(saved.__module__, saved.__func__.__module__, First.method.__module__, saved())
rename('third')
print(__name__, first(), first.__module__, abs.__module__)

def factory(__name__):
    return lambda: __name__
a = factory('local a')
rename('fourth')
b = factory('local b')
print(a.__module__, b.__module__, a(), b(), factory.__module__)

def defaults():
    rename('default evaluation')
    return 7
def after_default(value=defaults()):
    return value
print(after_default.__module__, defaults.__module__, after_default())
