# ____________________________________________________________________________________
#
# Pyomo: Python Optimization Modeling Objects
# Copyright (c) 2008-2026 National Technology and Engineering Solutions of Sandia, LLC
# Under the terms of Contract DE-NA0003525 with National Technology and Engineering
# Solutions of Sandia, LLC, the U.S. Government retains certain rights in this
# software.  This software is distributed under the 3-clause BSD License.
# ____________________________________________________________________________________

"""
This module redefines the global help() function.  If the 'thing'
being requested for help has the '__help__' attribute, then that
string is used to provide help information.  Otherwise, the standard
help utility is used.
"""

old_help = None
# there are times when the help function is not available
# (e.g., after 'freezing' code into an executable with tools
# like py2exe or cx_Freeze)
try:
    old_help = help
except NameError:
    old_help = None


def help(thing=None):  # pragma:nocover
    if not thing is None and hasattr(thing, '__help__'):
        print(thing.__help__)
    else:
        if old_help is None:
            raise NameError("Builtin 'help' is not available")
        old_help(thing)


try:
    __builtins__['help'] = help
except:  # pragma:nocover
    # If this fails, then just die silently.
    pass
