def METHOD_NAME(self) -> Callable:
    color_jitter = pth_transforms.ColorJitter(
        0.8 * self.jitter_strength,
        0.8 * self.jitter_strength,
        0.8 * self.jitter_strength,
        0.2 * self.jitter_strength,
    )
    color_transform = [pth_transforms.RandomApply([color_jitter], p=0.8), pth_transforms.RandomGrayscale(p=0.2)]
    if self.gaussian_blur:
        kernel_size = int(0.1 * self.size_crops[0])
        if kernel_size % 2 == 0:
            kernel_size += 1
        color_transform.append(
            pth_transforms.RandomApply([pth_transforms.GaussianBlur(kernel_size=kernel_size)], p=0.5)
        )
    color_transform = pth_transforms.Compose(color_transform)
    final_transform = self._get_final_transform()
    transforms = []
    for num, size, scale in zip(self.num_crops, self.size_crops, self.crop_scales):
        transforms.extend(
            [
                pth_transforms.Compose(
                    [
                        pth_transforms.RandomResizedCrop(size, scale=scale),
                        pth_transforms.RandomHorizontalFlip(p=0.5),
                        color_transform,
                        final_transform,
                    ]
                )
            ]
            * num
        )
    return partial(self._parallel_apply, transforms)