We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Port `transforms.LinearTransformation` to `prototype.transforms`
cc @vfdev-5 @datumbox @bjuncek

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `torchvision/prototype/transforms/_misc.py`
Content:
```
1 import functools
2 from typing import Any, Callable, Dict, List, Sequence, Type, Union
3 
4 import torch
5 from torchvision.prototype.transforms import functional as F, Transform
6 from torchvision.transforms.transforms import _setup_size
7 
8 
9 class Identity(Transform):
10     def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:
11         return inpt
12 
13 
14 class Lambda(Transform):
15     def __init__(self, fn: Callable[[Any], Any], *types: Type):
16         super().__init__()
17         self.fn = fn
18         self.types = types
19 
20     def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:
21         if type(inpt) in self.types:
22             return self.fn(inpt)
23         else:
24             return inpt
25 
26     def extra_repr(self) -> str:
27         extras = []
28         name = getattr(self.fn, "__name__", None)
29         if name:
30             extras.append(name)
31         extras.append(f"types={[type.__name__ for type in self.types]}")
32         return ", ".join(extras)
33 
34 
35 class Normalize(Transform):
36     def __init__(self, mean: List[float], std: List[float]):
37         super().__init__()
38         self.mean = mean
39         self.std = std
40 
41     def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:
42         return F.normalize(inpt, mean=self.mean, std=self.std)
43 
44 
45 class GaussianBlur(Transform):
46     def __init__(
47         self, kernel_size: Union[int, Sequence[int]], sigma: Union[float, Sequence[float]] = (0.1, 2.0)
48     ) -> None:
49         super().__init__()
50         self.kernel_size = _setup_size(kernel_size, "Kernel size should be a tuple/list of two integers")
51         for ks in self.kernel_size:
52             if ks <= 0 or ks % 2 == 0:
53                 raise ValueError("Kernel size value should be an odd and positive number.")
54 
55         if isinstance(sigma, float):
56             if sigma <= 0:
57                 raise ValueError("If sigma is a single number, it must be positive.")
58             sigma = (sigma, sigma)
59         elif isinstance(sigma, Sequence) and len(sigma) == 2:
60             if not 0.0 < sigma[0] <= sigma[1]:
61                 raise ValueError("sigma values should be positive and of the form (min, max).")
62         else:
63             raise TypeError("sigma should be a single float or a list/tuple with length 2 floats.")
64 
65         self.sigma = sigma
66 
67     def _get_params(self, sample: Any) -> Dict[str, Any]:
68         sigma = torch.empty(1).uniform_(self.sigma[0], self.sigma[1]).item()
69         return dict(sigma=[sigma, sigma])
70 
71     def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:
72         return F.gaussian_blur(inpt, **params)
73 
74 
75 class ToDtype(Lambda):
76     def __init__(self, dtype: torch.dtype, *types: Type) -> None:
77         self.dtype = dtype
78         super().__init__(functools.partial(torch.Tensor.to, dtype=dtype), *types)
79 
80     def extra_repr(self) -> str:
81         return ", ".join([f"dtype={self.dtype}", f"types={[type.__name__ for type in self.types]}"])
82
```

Path: `torchvision/prototype/transforms/__init__.py`
Content:
```
1 from . import functional  # usort: skip
2 
3 from ._transform import Transform  # usort: skip
4 
5 from ._augment import RandomCutmix, RandomErasing, RandomMixup
6 from ._auto_augment import AugMix, AutoAugment, AutoAugmentPolicy, RandAugment, TrivialAugmentWide
7 from ._color import (
8     ColorJitter,
9     RandomAdjustSharpness,
10     RandomAutocontrast,
11     RandomEqualize,
12     RandomInvert,
13     RandomPhotometricDistort,
14     RandomPosterize,
15     RandomSolarize,
16 )
17 from ._container import Compose, RandomApply, RandomChoice, RandomOrder
18 from ._geometry import (
19     BatchMultiCrop,
20     CenterCrop,
21     ElasticTransform,
22     FiveCrop,
23     FixedSizeCrop,
24     Pad,
25     RandomAffine,
26     RandomCrop,
27     RandomHorizontalFlip,
28     RandomIoUCrop,
29     RandomPerspective,
30     RandomResizedCrop,
31     RandomRotation,
32     RandomShortestSize,
33     RandomVerticalFlip,
34     RandomZoomOut,
35     Resize,
36     ScaleJitter,
37     TenCrop,
38 )
39 from ._meta import ConvertBoundingBoxFormat, ConvertColorSpace, ConvertImageDtype
40 from ._misc import GaussianBlur, Identity, Lambda, Normalize, ToDtype
41 from ._type_conversion import DecodeImage, LabelToOneHot, ToImagePIL, ToImageTensor
42 
43 from ._deprecated import Grayscale, RandomGrayscale, ToTensor, ToPILImage, PILToTensor  # usort: skip
44
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/torchvision/prototype/transforms/__init__.py b/torchvision/prototype/transforms/__init__.py
--- a/torchvision/prototype/transforms/__init__.py
+++ b/torchvision/prototype/transforms/__init__.py
@@ -37,7 +37,7 @@
     TenCrop,
 )
 from ._meta import ConvertBoundingBoxFormat, ConvertColorSpace, ConvertImageDtype
-from ._misc import GaussianBlur, Identity, Lambda, Normalize, ToDtype
+from ._misc import GaussianBlur, Identity, Lambda, LinearTransformation, Normalize, ToDtype
 from ._type_conversion import DecodeImage, LabelToOneHot, ToImagePIL, ToImageTensor
 
 from ._deprecated import Grayscale, RandomGrayscale, ToTensor, ToPILImage, PILToTensor  # usort: skip
diff --git a/torchvision/prototype/transforms/_misc.py b/torchvision/prototype/transforms/_misc.py
--- a/torchvision/prototype/transforms/_misc.py
+++ b/torchvision/prototype/transforms/_misc.py
@@ -1,7 +1,10 @@
 import functools
 from typing import Any, Callable, Dict, List, Sequence, Type, Union
 
+import PIL.Image
+
 import torch
+from torchvision.prototype import features
 from torchvision.prototype.transforms import functional as F, Transform
 from torchvision.transforms.transforms import _setup_size
 
@@ -32,6 +35,59 @@
         return ", ".join(extras)
 
 
+class LinearTransformation(Transform):
+    def __init__(self, transformation_matrix: torch.Tensor, mean_vector: torch.Tensor):
+        super().__init__()
+        if transformation_matrix.size(0) != transformation_matrix.size(1):
+            raise ValueError(
+                "transformation_matrix should be square. Got "
+                f"{tuple(transformation_matrix.size())} rectangular matrix."
+            )
+
+        if mean_vector.size(0) != transformation_matrix.size(0):
+            raise ValueError(
+                f"mean_vector should have the same length {mean_vector.size(0)}"
+                f" as any one of the dimensions of the transformation_matrix [{tuple(transformation_matrix.size())}]"
+            )
+
+        if transformation_matrix.device != mean_vector.device:
+            raise ValueError(
+                f"Input tensors should be on the same device. Got {transformation_matrix.device} and {mean_vector.device}"
+            )
+
+        self.transformation_matrix = transformation_matrix
+        self.mean_vector = mean_vector
+
+    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:
+
+        if isinstance(inpt, features._Feature) and not isinstance(inpt, features.Image):
+            return inpt
+        elif isinstance(inpt, PIL.Image.Image):
+            raise TypeError("Unsupported input type")
+
+        # Image instance after linear transformation is not Image anymore due to unknown data range
+        # Thus we will return Tensor for input Image
+
+        shape = inpt.shape
+        n = shape[-3] * shape[-2] * shape[-1]
+        if n != self.transformation_matrix.shape[0]:
+            raise ValueError(
+                "Input tensor and transformation matrix have incompatible shape."
+                + f"[{shape[-3]} x {shape[-2]} x {shape[-1]}] != "
+                + f"{self.transformation_matrix.shape[0]}"
+            )
+
+        if inpt.device.type != self.mean_vector.device.type:
+            raise ValueError(
+                "Input tensor should be on the same device as transformation matrix and mean vector. "
+                f"Got {inpt.device} vs {self.mean_vector.device}"
+            )
+
+        flat_tensor = inpt.view(-1, n) - self.mean_vector
+        transformed_tensor = torch.mm(flat_tensor, self.transformation_matrix)
+        return transformed_tensor.view(shape)
+
+
 class Normalize(Transform):
     def __init__(self, mean: List[float], std: List[float]):
         super().__init__()

{"golden_diff": "diff --git a/torchvision/prototype/transforms/__init__.py b/torchvision/prototype/transforms/__init__.py\n--- a/torchvision/prototype/transforms/__init__.py\n+++ b/torchvision/prototype/transforms/__init__.py\n@@ -37,7 +37,7 @@\n     TenCrop,\n )\n from ._meta import ConvertBoundingBoxFormat, ConvertColorSpace, ConvertImageDtype\n-from ._misc import GaussianBlur, Identity, Lambda, Normalize, ToDtype\n+from ._misc import GaussianBlur, Identity, Lambda, LinearTransformation, Normalize, ToDtype\n from ._type_conversion import DecodeImage, LabelToOneHot, ToImagePIL, ToImageTensor\n \n from ._deprecated import Grayscale, RandomGrayscale, ToTensor, ToPILImage, PILToTensor  # usort: skip\ndiff --git a/torchvision/prototype/transforms/_misc.py b/torchvision/prototype/transforms/_misc.py\n--- a/torchvision/prototype/transforms/_misc.py\n+++ b/torchvision/prototype/transforms/_misc.py\n@@ -1,7 +1,10 @@\n import functools\n from typing import Any, Callable, Dict, List, Sequence, Type, Union\n \n+import PIL.Image\n+\n import torch\n+from torchvision.prototype import features\n from torchvision.prototype.transforms import functional as F, Transform\n from torchvision.transforms.transforms import _setup_size\n \n@@ -32,6 +35,59 @@\n         return \", \".join(extras)\n \n \n+class LinearTransformation(Transform):\n+    def __init__(self, transformation_matrix: torch.Tensor, mean_vector: torch.Tensor):\n+        super().__init__()\n+        if transformation_matrix.size(0) != transformation_matrix.size(1):\n+            raise ValueError(\n+                \"transformation_matrix should be square. Got \"\n+                f\"{tuple(transformation_matrix.size())} rectangular matrix.\"\n+            )\n+\n+        if mean_vector.size(0) != transformation_matrix.size(0):\n+            raise ValueError(\n+                f\"mean_vector should have the same length {mean_vector.size(0)}\"\n+                f\" as any one of the dimensions of the transformation_matrix [{tuple(transformation_matrix.size())}]\"\n+            )\n+\n+        if transformation_matrix.device != mean_vector.device:\n+            raise ValueError(\n+                f\"Input tensors should be on the same device. Got {transformation_matrix.device} and {mean_vector.device}\"\n+            )\n+\n+        self.transformation_matrix = transformation_matrix\n+        self.mean_vector = mean_vector\n+\n+    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n+\n+        if isinstance(inpt, features._Feature) and not isinstance(inpt, features.Image):\n+            return inpt\n+        elif isinstance(inpt, PIL.Image.Image):\n+            raise TypeError(\"Unsupported input type\")\n+\n+        # Image instance after linear transformation is not Image anymore due to unknown data range\n+        # Thus we will return Tensor for input Image\n+\n+        shape = inpt.shape\n+        n = shape[-3] * shape[-2] * shape[-1]\n+        if n != self.transformation_matrix.shape[0]:\n+            raise ValueError(\n+                \"Input tensor and transformation matrix have incompatible shape.\"\n+                + f\"[{shape[-3]} x {shape[-2]} x {shape[-1]}] != \"\n+                + f\"{self.transformation_matrix.shape[0]}\"\n+            )\n+\n+        if inpt.device.type != self.mean_vector.device.type:\n+            raise ValueError(\n+                \"Input tensor should be on the same device as transformation matrix and mean vector. \"\n+                f\"Got {inpt.device} vs {self.mean_vector.device}\"\n+            )\n+\n+        flat_tensor = inpt.view(-1, n) - self.mean_vector\n+        transformed_tensor = torch.mm(flat_tensor, self.transformation_matrix)\n+        return transformed_tensor.view(shape)\n+\n+\n class Normalize(Transform):\n     def __init__(self, mean: List[float], std: List[float]):\n         super().__init__()\n", "issue": "Port `transforms.LinearTransformation` to `prototype.transforms`\ncc @vfdev-5 @datumbox @bjuncek\n", "before_files": [{"content": "import functools\nfrom typing import Any, Callable, Dict, List, Sequence, Type, Union\n\nimport torch\nfrom torchvision.prototype.transforms import functional as F, Transform\nfrom torchvision.transforms.transforms import _setup_size\n\n\nclass Identity(Transform):\n    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n        return inpt\n\n\nclass Lambda(Transform):\n    def __init__(self, fn: Callable[[Any], Any], *types: Type):\n        super().__init__()\n        self.fn = fn\n        self.types = types\n\n    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n        if type(inpt) in self.types:\n            return self.fn(inpt)\n        else:\n            return inpt\n\n    def extra_repr(self) -> str:\n        extras = []\n        name = getattr(self.fn, \"__name__\", None)\n        if name:\n            extras.append(name)\n        extras.append(f\"types={[type.__name__ for type in self.types]}\")\n        return \", \".join(extras)\n\n\nclass Normalize(Transform):\n    def __init__(self, mean: List[float], std: List[float]):\n        super().__init__()\n        self.mean = mean\n        self.std = std\n\n    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n        return F.normalize(inpt, mean=self.mean, std=self.std)\n\n\nclass GaussianBlur(Transform):\n    def __init__(\n        self, kernel_size: Union[int, Sequence[int]], sigma: Union[float, Sequence[float]] = (0.1, 2.0)\n    ) -> None:\n        super().__init__()\n        self.kernel_size = _setup_size(kernel_size, \"Kernel size should be a tuple/list of two integers\")\n        for ks in self.kernel_size:\n            if ks <= 0 or ks % 2 == 0:\n                raise ValueError(\"Kernel size value should be an odd and positive number.\")\n\n        if isinstance(sigma, float):\n            if sigma <= 0:\n                raise ValueError(\"If sigma is a single number, it must be positive.\")\n            sigma = (sigma, sigma)\n        elif isinstance(sigma, Sequence) and len(sigma) == 2:\n            if not 0.0 < sigma[0] <= sigma[1]:\n                raise ValueError(\"sigma values should be positive and of the form (min, max).\")\n        else:\n            raise TypeError(\"sigma should be a single float or a list/tuple with length 2 floats.\")\n\n        self.sigma = sigma\n\n    def _get_params(self, sample: Any) -> Dict[str, Any]:\n        sigma = torch.empty(1).uniform_(self.sigma[0], self.sigma[1]).item()\n        return dict(sigma=[sigma, sigma])\n\n    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n        return F.gaussian_blur(inpt, **params)\n\n\nclass ToDtype(Lambda):\n    def __init__(self, dtype: torch.dtype, *types: Type) -> None:\n        self.dtype = dtype\n        super().__init__(functools.partial(torch.Tensor.to, dtype=dtype), *types)\n\n    def extra_repr(self) -> str:\n        return \", \".join([f\"dtype={self.dtype}\", f\"types={[type.__name__ for type in self.types]}\"])\n", "path": "torchvision/prototype/transforms/_misc.py"}, {"content": "from . import functional  # usort: skip\n\nfrom ._transform import Transform  # usort: skip\n\nfrom ._augment import RandomCutmix, RandomErasing, RandomMixup\nfrom ._auto_augment import AugMix, AutoAugment, AutoAugmentPolicy, RandAugment, TrivialAugmentWide\nfrom ._color import (\n    ColorJitter,\n    RandomAdjustSharpness,\n    RandomAutocontrast,\n    RandomEqualize,\n    RandomInvert,\n    RandomPhotometricDistort,\n    RandomPosterize,\n    RandomSolarize,\n)\nfrom ._container import Compose, RandomApply, RandomChoice, RandomOrder\nfrom ._geometry import (\n    BatchMultiCrop,\n    CenterCrop,\n    ElasticTransform,\n    FiveCrop,\n    FixedSizeCrop,\n    Pad,\n    RandomAffine,\n    RandomCrop,\n    RandomHorizontalFlip,\n    RandomIoUCrop,\n    RandomPerspective,\n    RandomResizedCrop,\n    RandomRotation,\n    RandomShortestSize,\n    RandomVerticalFlip,\n    RandomZoomOut,\n    Resize,\n    ScaleJitter,\n    TenCrop,\n)\nfrom ._meta import ConvertBoundingBoxFormat, ConvertColorSpace, ConvertImageDtype\nfrom ._misc import GaussianBlur, Identity, Lambda, Normalize, ToDtype\nfrom ._type_conversion import DecodeImage, LabelToOneHot, ToImagePIL, ToImageTensor\n\nfrom ._deprecated import Grayscale, RandomGrayscale, ToTensor, ToPILImage, PILToTensor  # usort: skip\n", "path": "torchvision/prototype/transforms/__init__.py"}], "after_files": [{"content": "import functools\nfrom typing import Any, Callable, Dict, List, Sequence, Type, Union\n\nimport PIL.Image\n\nimport torch\nfrom torchvision.prototype import features\nfrom torchvision.prototype.transforms import functional as F, Transform\nfrom torchvision.transforms.transforms import _setup_size\n\n\nclass Identity(Transform):\n    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n        return inpt\n\n\nclass Lambda(Transform):\n    def __init__(self, fn: Callable[[Any], Any], *types: Type):\n        super().__init__()\n        self.fn = fn\n        self.types = types\n\n    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n        if type(inpt) in self.types:\n            return self.fn(inpt)\n        else:\n            return inpt\n\n    def extra_repr(self) -> str:\n        extras = []\n        name = getattr(self.fn, \"__name__\", None)\n        if name:\n            extras.append(name)\n        extras.append(f\"types={[type.__name__ for type in self.types]}\")\n        return \", \".join(extras)\n\n\nclass LinearTransformation(Transform):\n    def __init__(self, transformation_matrix: torch.Tensor, mean_vector: torch.Tensor):\n        super().__init__()\n        if transformation_matrix.size(0) != transformation_matrix.size(1):\n            raise ValueError(\n                \"transformation_matrix should be square. Got \"\n                f\"{tuple(transformation_matrix.size())} rectangular matrix.\"\n            )\n\n        if mean_vector.size(0) != transformation_matrix.size(0):\n            raise ValueError(\n                f\"mean_vector should have the same length {mean_vector.size(0)}\"\n                f\" as any one of the dimensions of the transformation_matrix [{tuple(transformation_matrix.size())}]\"\n            )\n\n        if transformation_matrix.device != mean_vector.device:\n            raise ValueError(\n                f\"Input tensors should be on the same device. Got {transformation_matrix.device} and {mean_vector.device}\"\n            )\n\n        self.transformation_matrix = transformation_matrix\n        self.mean_vector = mean_vector\n\n    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n\n        if isinstance(inpt, features._Feature) and not isinstance(inpt, features.Image):\n            return inpt\n        elif isinstance(inpt, PIL.Image.Image):\n            raise TypeError(\"Unsupported input type\")\n\n        # Image instance after linear transformation is not Image anymore due to unknown data range\n        # Thus we will return Tensor for input Image\n\n        shape = inpt.shape\n        n = shape[-3] * shape[-2] * shape[-1]\n        if n != self.transformation_matrix.shape[0]:\n            raise ValueError(\n                \"Input tensor and transformation matrix have incompatible shape.\"\n                + f\"[{shape[-3]} x {shape[-2]} x {shape[-1]}] != \"\n                + f\"{self.transformation_matrix.shape[0]}\"\n            )\n\n        if inpt.device.type != self.mean_vector.device.type:\n            raise ValueError(\n                \"Input tensor should be on the same device as transformation matrix and mean vector. \"\n                f\"Got {inpt.device} vs {self.mean_vector.device}\"\n            )\n\n        flat_tensor = inpt.view(-1, n) - self.mean_vector\n        transformed_tensor = torch.mm(flat_tensor, self.transformation_matrix)\n        return transformed_tensor.view(shape)\n\n\nclass Normalize(Transform):\n    def __init__(self, mean: List[float], std: List[float]):\n        super().__init__()\n        self.mean = mean\n        self.std = std\n\n    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n        return F.normalize(inpt, mean=self.mean, std=self.std)\n\n\nclass GaussianBlur(Transform):\n    def __init__(\n        self, kernel_size: Union[int, Sequence[int]], sigma: Union[float, Sequence[float]] = (0.1, 2.0)\n    ) -> None:\n        super().__init__()\n        self.kernel_size = _setup_size(kernel_size, \"Kernel size should be a tuple/list of two integers\")\n        for ks in self.kernel_size:\n            if ks <= 0 or ks % 2 == 0:\n                raise ValueError(\"Kernel size value should be an odd and positive number.\")\n\n        if isinstance(sigma, float):\n            if sigma <= 0:\n                raise ValueError(\"If sigma is a single number, it must be positive.\")\n            sigma = (sigma, sigma)\n        elif isinstance(sigma, Sequence) and len(sigma) == 2:\n            if not 0.0 < sigma[0] <= sigma[1]:\n                raise ValueError(\"sigma values should be positive and of the form (min, max).\")\n        else:\n            raise TypeError(\"sigma should be a single float or a list/tuple with length 2 floats.\")\n\n        self.sigma = sigma\n\n    def _get_params(self, sample: Any) -> Dict[str, Any]:\n        sigma = torch.empty(1).uniform_(self.sigma[0], self.sigma[1]).item()\n        return dict(sigma=[sigma, sigma])\n\n    def _transform(self, inpt: Any, params: Dict[str, Any]) -> Any:\n        return F.gaussian_blur(inpt, **params)\n\n\nclass ToDtype(Lambda):\n    def __init__(self, dtype: torch.dtype, *types: Type) -> None:\n        self.dtype = dtype\n        super().__init__(functools.partial(torch.Tensor.to, dtype=dtype), *types)\n\n    def extra_repr(self) -> str:\n        return \", \".join([f\"dtype={self.dtype}\", f\"types={[type.__name__ for type in self.types]}\"])\n", "path": "torchvision/prototype/transforms/_misc.py"}, {"content": "from . import functional  # usort: skip\n\nfrom ._transform import Transform  # usort: skip\n\nfrom ._augment import RandomCutmix, RandomErasing, RandomMixup\nfrom ._auto_augment import AugMix, AutoAugment, AutoAugmentPolicy, RandAugment, TrivialAugmentWide\nfrom ._color import (\n    ColorJitter,\n    RandomAdjustSharpness,\n    RandomAutocontrast,\n    RandomEqualize,\n    RandomInvert,\n    RandomPhotometricDistort,\n    RandomPosterize,\n    RandomSolarize,\n)\nfrom ._container import Compose, RandomApply, RandomChoice, RandomOrder\nfrom ._geometry import (\n    BatchMultiCrop,\n    CenterCrop,\n    ElasticTransform,\n    FiveCrop,\n    FixedSizeCrop,\n    Pad,\n    RandomAffine,\n    RandomCrop,\n    RandomHorizontalFlip,\n    RandomIoUCrop,\n    RandomPerspective,\n    RandomResizedCrop,\n    RandomRotation,\n    RandomShortestSize,\n    RandomVerticalFlip,\n    RandomZoomOut,\n    Resize,\n    ScaleJitter,\n    TenCrop,\n)\nfrom ._meta import ConvertBoundingBoxFormat, ConvertColorSpace, ConvertImageDtype\nfrom ._misc import GaussianBlur, Identity, Lambda, LinearTransformation, Normalize, ToDtype\nfrom ._type_conversion import DecodeImage, LabelToOneHot, ToImagePIL, ToImageTensor\n\nfrom ._deprecated import Grayscale, RandomGrayscale, ToTensor, ToPILImage, PILToTensor  # usort: skip\n", "path": "torchvision/prototype/transforms/__init__.py"}]}