old_contents: """
  Module defining global singleton classes.
  
  This module raises a RuntimeError if an attempt to reload it is made. In that
  way the identities of the classes defined here are fixed and will remain so
  even if numpy itself is reloaded. In particular, a function like the following
  will still work correctly after numpy is reloaded::
  
      def foo(arg=np._NoValue):
          if arg is np._NoValue:
              ...
  
  That was not the case when the singleton classes were defined in the numpy
  ``__init__.py`` file. See gh-7844 for a discussion of the reload problem that
  motivated this module.
  
  """
  __ALL__ = [
      'ModuleDeprecationWarning', 'VisibleDeprecationWarning', '_NoValue'
      ]
  
  
  # Disallow reloading this module so as to preserve the identities of the
  # classes defined here.
  if '_is_loaded' in globals():
      raise RuntimeError('Reloading numpy._globals is not allowed')
  _is_loaded = True
  
  
  class ModuleDeprecationWarning(DeprecationWarning):
      """Module deprecation warning.
  
      The nose tester turns ordinary Deprecation warnings into test failures.
      That makes it hard to deprecate whole modules, because they get
      imported by default. So this is a special Deprecation warning that the
      nose tester will let pass without making tests fail.
  
      """
  
  
  ModuleDeprecationWarning.__module__ = 'numpy'
  
  
  class VisibleDeprecationWarning(UserWarning):
      """Visible deprecation warning.
  
      By default, python will not show deprecation warnings, so this class
      can be used when a very visible warning is helpful, for example because
      the usage is most likely a user bug.
  
      """
  
  
  VisibleDeprecationWarning.__module__ = 'numpy'
  
  
  class _NoValueType:
      """Special keyword value.
  
      The instance of this class may be used as the default value assigned to a
      deprecated keyword in order to check if it has been given a user defined
      value.
      """
      __instance = None
      def __new__(cls):
          # ensure that only one instance exists
          if not cls.__instance:
              cls.__instance = super(_NoValueType, cls).__new__(cls)
          return cls.__instance
  
      # needed for python 2 to preserve identity through a pickle
      def __reduce__(self):
          return (self.__class__, ())
  
      def __repr__(self):
          return "<no value>"
  
  
  _NoValue = _NoValueType()
  
new_contents: """
  Module defining global singleton classes.
  
  This module raises a RuntimeError if an attempt to reload it is made. In that
  way the identities of the classes defined here are fixed and will remain so
  even if numpy itself is reloaded. In particular, a function like the following
  will still work correctly after numpy is reloaded::
  
      def foo(arg=np._NoValue):
          if arg is np._NoValue:
              ...
  
  That was not the case when the singleton classes were defined in the numpy
  ``__init__.py`` file. See gh-7844 for a discussion of the reload problem that
  motivated this module.
  
  """
  __ALL__ = [
      'ModuleDeprecationWarning', 'VisibleDeprecationWarning', '_NoValue'
      ]
  
  
  # Disallow reloading this module so as to preserve the identities of the
  # classes defined here.
  if '_is_loaded' in globals():
      raise RuntimeError('Reloading numpy._globals is not allowed')
  _is_loaded = True
  
  
  class ModuleDeprecationWarning(DeprecationWarning):
      """Module deprecation warning.
  
      The nose tester turns ordinary Deprecation warnings into test failures.
      That makes it hard to deprecate whole modules, because they get
      imported by default. So this is a special Deprecation warning that the
      nose tester will let pass without making tests fail.
  
      """
  
  
  ModuleDeprecationWarning.__module__ = 'numpy'
  
  
  class VisibleDeprecationWarning(UserWarning):
      """Visible deprecation warning.
  
      By default, python will not show deprecation warnings, so this class
      can be used when a very visible warning is helpful, for example because
      the usage is most likely a user bug.
  
      """
  
  
  VisibleDeprecationWarning.__module__ = 'numpy'
  
  
  class _NoValueType:
      """Special keyword value.
  
      The instance of this class may be used as the default value assigned to a
      keyword if no other obvious default (e.g., `None`) is suitable,
  
      Common reasons for using this keyword are:
  
      - A new keyword is added to a function, and that function forwards its
        inputs to another function or method which can be defined outside of
        NumPy. For example, ``np.std(x)`` calls ``x.std``, so when a ``keepdims``
        keyword was added that could only be forwarded if the user explicitly
        specified ``keepdims``; downstream array libraries may not have added
        the same keyword, so adding ``x.std(..., keepdims=keepdims)``
        unconditionally could have broken previously working code.
      - A keyword is being deprecated, and a deprecation warning must only be
        emitted when the keyword is used.
  
      """
      __instance = None
      def __new__(cls):
          # ensure that only one instance exists
          if not cls.__instance:
              cls.__instance = super(_NoValueType, cls).__new__(cls)
          return cls.__instance
  
      # needed for python 2 to preserve identity through a pickle
      def __reduce__(self):
          return (self.__class__, ())
  
      def __repr__(self):
          return "<no value>"
  
  
  _NoValue = _NoValueType()
  
subject: improve description of `NoValue`.