def make_transform_defs():
    """
    Fills a series of definition obtained by the FFCV documentation,
    source code, and manual attempts.

    These definitions are used to properly arrange the order of transformations.
    In FFCV, not all transformations support NumPy, PyTorch CPU, and PyTorch GPU
    inputs. The supported inputs are defined in dictionaries stored in
    `FFCV_TRANSFORMS_DEFS`.
    """
    global FFCV_TRANSFORMS_DEFS

    FFCV_TRANSFORMS_DEFS[ToDeviceFFCV] = FFCVTransformRegistry(
        numpy_cpu=False,
        pytorch_cpu=True,
        pytorch_gpu=True,  # GPU -> CPU, probably unused
    )

    FFCV_TRANSFORMS_DEFS[ToTorchImageFFCV] = FFCVTransformRegistry(
        numpy_cpu=False, pytorch_cpu=True, pytorch_gpu=False
    )

    FFCV_TRANSFORMS_DEFS[NormalizeFFCV] = FFCVTransformRegistry(
        numpy_cpu=True, pytorch_cpu=False, pytorch_gpu=True
    )

    FFCV_TRANSFORMS_DEFS[ConvertFFCV] = FFCVTransformRegistry(
        numpy_cpu=False, pytorch_cpu=True, pytorch_gpu=True
    )

    # Note: for some reason, view == convert in FFCV
    # View should not used to change the shape of the tensor (it does not work)
    FFCV_TRANSFORMS_DEFS[ViewFFCV] = FFCV_TRANSFORMS_DEFS[ConvertFFCV]

    FFCV_TRANSFORMS_DEFS[SqueezeFFCV] = FFCVTransformRegistry(
        numpy_cpu=False, pytorch_cpu=True, pytorch_gpu=True
    )

    FFCV_TRANSFORMS_DEFS[MixupToOneHotFFCV] = FFCVTransformRegistry(
        numpy_cpu=False, pytorch_cpu=True, pytorch_gpu=True
    )

    FFCV_TRANSFORMS_DEFS[ModuleWrapper] = FFCVTransformRegistry(
        numpy_cpu=False, pytorch_cpu=True, pytorch_gpu=True
    )

    FFCV_TRANSFORMS_DEFS[SmartModuleWrapper] = FFCVTransformRegistry(
        numpy_cpu=True, pytorch_cpu=True, pytorch_gpu=True
    )

    numpy_only_types = [
        ToTensorFFCV,
        RandomResizedCropFFCV,
        RandomHorizontalFlipFFCV,
        RandomTranslateFFCV,
        CutoutFFCV,
        ImageMixupFFCV,
        LabelMixupFFCV,
        PoisonFFCV,
        ReplaceLabelFFCV,
        RandomBrightnessFFCV,
        RandomContrastFFCV,
        RandomSaturationFFCV,
    ]

    for t_type in numpy_only_types:
        FFCV_TRANSFORMS_DEFS[t_type] = FFCVTransformRegistry(
            numpy_cpu=True, pytorch_cpu=False, pytorch_gpu=False
        )

    Fills a series of definition obtained by the FFCV documentation,
    source code, and manual attempts.

    These definitions are used to properly arrange the order of transformations.
    In FFCV, not all transformations support NumPy, PyTorch CPU, and PyTorch GPU
    inputs. The supported inputs are defined in dictionaries stored in
    `FFCV_TRANSFORMS_DEFS`.
    
avalanche/benchmarks/utils/ffcv_support/ffcv_transform_utils.py