<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_caller_stack_info(start_back: int = 1) -> List[str]: r""" Retrieves a textual representation of the call stack. Args: start_back: number of calls back in the frame stack (starting from the frame stack as seen by :func:`get_caller_stack_info`) to begin with Returns: list of descriptions Example: .. code-block:: python from cardinal_pythonlib.debugging import get_caller_stack_info def who_am_i():
 return get_caller_name() class MyClass(object):
 def classfunc(self):
 print("Stack info:\n" + "\n".join(get_caller_stack_info())) def f2():
 x = MyClass() x.classfunc() def f1():
 f2() f1() if called from the Python prompt will produce: .. code-block:: none Stack info: <module>() f1() f2() classfunc(self=<__main__.MyClass object at 0x7f86a009c6d8>) and if called from a Python file will produce: .. code-block:: none Stack info: <module>() f1() f1() f2() f2() x.classfunc() classfunc(self=<__main__.MyClass object at 0x7fd7a731f358>) print("Stack info:\n" + "\n".join(get_caller_stack_info())) """

    # "0 back" is debug_callers, so "1 back" its caller
    # https://docs.python.org/3/library/inspect.html
    callers = []  # type: List[str]
    frameinfolist = inspect.stack()  # type: List[FrameInfo]  # noqa
    frameinfolist = frameinfolist[start_back:]
    for frameinfo in frameinfolist:
        frame = frameinfo.frame
        function_defined_at = "... defined at {filename}:{line}".format(
            filename=frame.f_code.co_filename,
            line=frame.f_code.co_firstlineno,
        )
        argvalues = inspect.getargvalues(frame)
        formatted_argvalues = inspect.formatargvalues(*argvalues)
        function_call = "{funcname}{argvals}".format(
            funcname=frame.f_code.co_name,
            argvals=formatted_argvalues,
        )
        code_context = frameinfo.code_context
        code = "".join(code_context) if code_context else ""
        onwards = "... line {line} calls next in stack; code is:\n{c}".format(
            line=frame.f_lineno,
            c=code,
        )
        description = "\n".join([function_call, function_defined_at, onwards])
        callers.append(description)
    return list(reversed(callers))