<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_system_data() -> typing.Union[None, dict]: """ Returns information about the system in which Cauldron is running. If the information cannot be found, None is returned instead. :return: Dictionary containing information about the Cauldron system, whic includes: * name * location * version """


    site_packages = get_site_packages()
    path_prefixes = [('[SP]', p) for p in site_packages]
    path_prefixes.append(('[CORE]', sys.exec_prefix))

    packages = [
        module_to_package_data(name, entry, path_prefixes)
        for name, entry in list(sys.modules.items())
    ]

    python_data = dict(
        version=list(sys.version_info),
        executable=simplify_path(sys.executable),
        directory=simplify_path(sys.exec_prefix),
        site_packages=[simplify_path(sp) for sp in site_packages]
    )

    return dict(
        python=python_data,
        packages=[p for p in packages if p is not None]
    )