def METHOD_NAME() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--bandwidth", help="the bandwidth of the S2 signal", type=int, default=30, required=False)
    parser.add_argument("--noise", help="the rotational noise applied on the sphere", type=float, default=1.0, required=False)
    parser.add_argument("--chunk_size", help="size of image chunk with same rotation", type=int, default=500, required=False)
    parser.add_argument(
        "--mnist_data_folder", help="folder for saving the mnist data", type=str, default="MNIST_data", required=False
    )
    parser.add_argument(
        "--output_file", help="file for saving the data output (.gz file)", type=str, default="s2_mnist.gz", required=False
    )
    parser.add_argument("--no_rotate_train", help="do not rotate train set", dest="no_rotate_train", action="store_true")
    parser.add_argument("--no_rotate_test", help="do not rotate test set", dest="no_rotate_test", action="store_true")
    args = parser.parse_args()
    print("getting mnist data")
    trainset = datasets.MNIST(root=args.mnist_data_folder, train=True, download=True)
    testset = datasets.MNIST(root=args.mnist_data_folder, train=False, download=True)
    mnist_train = {}
    mnist_train["images"] = trainset.data.numpy()
    mnist_train["labels"] = trainset.targets.numpy()
    mnist_test = {}
    mnist_test["images"] = testset.data.numpy()
    mnist_test["labels"] = testset.targets.numpy()
    grid = get_projection_grid(b=args.bandwidth)
    # result
    dataset = {}
    no_rotate = {"train": args.no_rotate_train, "test": args.no_rotate_test}
    for label, data in zip(["train", "test"], [mnist_train, mnist_test]):
        print(f"projecting {label} data set")
        current = 0
        signals = data["images"].reshape(-1, 28, 28).astype(np.float64)
        n_signals = signals.shape[0]
        projections = np.ndarray((signals.shape[0], 2 * args.bandwidth, 2 * args.bandwidth), dtype=np.uint8)
        while current < n_signals:
            if not no_rotate[label]:
                rot = rand_rotation_matrix(deflection=args.noise)
                rotated_grid = rotate_grid(rot, grid)
            else:
                rotated_grid = grid
            idxs = np.arange(current, min(n_signals, current + args.chunk_size))
            chunk = signals[idxs]
            projections[idxs] = project_2d_on_sphere(chunk, rotated_grid)
            current += args.chunk_size
            print(f"\r{current}/{n_signals}", end="")
        print("")
        dataset[label] = {"images": projections, "labels": data["labels"]}
    print("writing pickle")
    with gzip.open(args.output_file, "wb") as f:
        pickle.dump(dataset, f)
    print("done")