def METHOD_NAME(cls: Callable) -> str:
    """Get source of the class.
    It uses different methods for getting the class source based on shell type; IPython,Notebook
    shells or Python shell
    Args:
        cls: The class to extract the source code from
    Returns:
        str: Source code of the given class
    Raises:
        FedbiomedError: if argument is not a class
    """
    if not inspect.isclass(cls):
        raise FedbiomedError('The argument `cls` must be a python class')
    # Check ipython status
    status = is_ipython()
    if status:
        file = get_ipython_class_file(cls)
        codes = "".join(inspect.linecache.getlines(file))
        class_code = extract_symbols(codes, cls.__name__)[0][0]
        return class_code
    else:
        return inspect.getsource(cls)