def _generate_image_size_report()

in src/package_report.py [0:0]


def _generate_image_size_report(target_version, base_version, staging_repo_name, staging_account):
    target_tag_gpu = f"{target_version.major}.{target_version.minor}.{target_version.patch}-gpu"
    base_tag_gpu = f"{base_version.major}.{base_version.minor}.{base_version.patch}-gpu" if base_version else None

    target_tag_cpu = f"{target_version.major}.{target_version.minor}.{target_version.patch}-cpu"
    base_tag_cpu = f"{base_version.major}.{base_version.minor}.{base_version.patch}-cpu" if base_version else None

    target_size_gpu = get_image_size(target_tag_gpu, staging_repo_name, staging_account)
    base_size_gpu = get_image_size(base_tag_gpu, staging_repo_name, staging_account) if base_tag_gpu else None

    target_size_cpu = get_image_size(target_tag_cpu, staging_repo_name, staging_account)
    base_size_cpu = get_image_size(base_tag_cpu, staging_repo_name, staging_account) if base_tag_cpu else None

    headers = ["Target Image Size", "Base Image Size", "Size Difference", "Size Change (%)"]

    print("\n# GPU Total Image Size Report\n")
    if target_size_gpu is not None and base_size_gpu is not None:
        size_diff_gpu = target_size_gpu - base_size_gpu
        size_diff_gpu_rel = size_diff_gpu / base_size_gpu if base_size_gpu != 0 else 0

        size_change_gpu = f"{size_diff_gpu:.2f} GB {'Larger' if size_diff_gpu > 0 else ('Smaller' if size_diff_gpu < 0 else 'No Change')}"

        size_change_percentage_gpu = (
            f"{round(abs(size_diff_gpu_rel * 100), 2)}% {'Larger' if size_diff_gpu > 0 else ('Smaller' if size_diff_gpu < 0 else 'No Change')}"
            if size_diff_gpu_rel
            else "-"
        )

        rows = [
            {
                "Target Image Size": f"{target_tag_gpu}:{target_size_gpu:.2f} GB",
                "Base Image Size": f"{base_tag_gpu}:{base_size_gpu:.2f} GB",
                "Size Difference": size_change_gpu,
                "Size Change (%)": size_change_percentage_gpu,
            }
        ]
        print(create_markdown_table(headers, rows))
    else:
        print(f"Failed to retrieve size for target image: {target_tag_gpu} or base image: {base_tag_gpu}")

    print("\n# CPU Total Image Size Report\n")
    if target_size_cpu is not None and base_size_cpu is not None:
        size_diff_cpu = target_size_cpu - base_size_cpu
        size_diff_cpu_rel = size_diff_cpu / base_size_cpu if base_size_cpu != 0 else 0

        size_change_cpu = f"{size_diff_cpu:.2f} GB {'Larger' if size_diff_cpu > 0 else ('Smaller' if size_diff_cpu < 0 else 'No Change')}"

        size_change_percentage_cpu = (
            f"{round(abs(size_diff_cpu_rel * 100), 2)}% {'Larger' if size_diff_cpu > 0 else ('Smaller' if size_diff_cpu < 0 else 'No Change')}"
            if size_diff_cpu_rel
            else "-"
        )

        rows = [
            {
                "Target Image Size": f"{target_tag_cpu}:{target_size_cpu:.2f} GB",
                "Base Image Size": f"{base_tag_cpu}:{base_size_cpu:.2f} GB",
                "Size Difference": size_change_cpu,
                "Size Change (%)": size_change_percentage_cpu,
            }
        ]
        print(create_markdown_table(headers, rows))
    else:
        print(f"Failed to retrieve size for target image: {target_tag_cpu} or base image: {base_tag_cpu}")