<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def getFileLine(where=-1, targetModule=None):
 """ Return the filename and line number for the given location. If where is a negative integer, look for the code entry in the current stack that is the given number of frames above this module. If where is a function, look for the code entry of the function. @param where: how many frames to go back up, or function @type where: int (negative) or function @param targetModule: continue going up the stack until that module is seen @type targetModule: str or None @return: tuple of (file, line) @rtype: tuple of (str, int) """

    co = None
    lineno = None

    if isinstance(where, types.FunctionType):
        co = where.func_code
        lineno = co.co_firstlineno
    elif isinstance(where, types.MethodType):
        co = where.im_func.func_code
        lineno = co.co_firstlineno
    else:
        stackFrame = sys._getframe()

        while stackFrame:
            co = stackFrame.f_code
            if not co.co_filename in __file__:
                # wind up the stack according to frame
                while where < -1:
                    stackFrame = stackFrame.f_back
                    where += 1
                co = stackFrame.f_code
                lineno = stackFrame.f_lineno
                break
            stackFrame = stackFrame.f_back

    if not co:
        return "<unknown file>", 0

    if targetModule:
        while stackFrame:
            co = stackFrame.f_code
            lineno = stackFrame.f_lineno
            if targetModule in co.co_filename:
                break
            stackFrame = stackFrame.f_back

    return scrubFilename(co.co_filename), lineno