diff --git a/.circleci/config.yml b/.circleci/config.yml index 713c1e6c421..9c03a0669f6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -152,15 +152,6 @@ commands: args: --no-build-isolation <<# parameters.editable >> --editable <> . descr: Install torchvision <<# parameters.editable >> in editable mode <> - install_prototype_dependencies: - steps: - - pip_install: - args: iopath - descr: Install third-party dependencies - - pip_install: - args: --pre torchdata --extra-index-url https://download.pytorch.org/whl/nightly/cpu - descr: Install torchdata from nightly releases - # Most of the test suite is handled by the `unittest` jobs, with completely different workflow and setup. # This command can be used if only a selection of tests need to be run, for ad-hoc files. run_tests_selective: @@ -326,7 +317,6 @@ jobs: - checkout - install_torchvision: editable: true - - install_prototype_dependencies - pip_install: args: mypy descr: Install Python type check utilities diff --git a/.circleci/config.yml.in b/.circleci/config.yml.in index b421dc1a79a..d3146568b32 100644 --- a/.circleci/config.yml.in +++ b/.circleci/config.yml.in @@ -152,15 +152,6 @@ commands: args: --no-build-isolation <<# parameters.editable >> --editable <> . descr: Install torchvision <<# parameters.editable >> in editable mode <> - install_prototype_dependencies: - steps: - - pip_install: - args: iopath - descr: Install third-party dependencies - - pip_install: - args: --pre torchdata --extra-index-url https://download.pytorch.org/whl/nightly/cpu - descr: Install torchdata from nightly releases - # Most of the test suite is handled by the `unittest` jobs, with completely different workflow and setup. # This command can be used if only a selection of tests need to be run, for ad-hoc files. run_tests_selective: @@ -326,7 +317,6 @@ jobs: - checkout - install_torchvision: editable: true - - install_prototype_dependencies - pip_install: args: mypy descr: Install Python type check utilities diff --git a/.github/workflows/prototype-tests.yml b/.github/workflows/prototype-tests.yml index 5e9ca360d08..daff383b097 100644 --- a/.github/workflows/prototype-tests.yml +++ b/.github/workflows/prototype-tests.yml @@ -28,13 +28,13 @@ jobs: uses: actions/checkout@v3 - name: Install PyTorch nightly builds - run: pip install --progress-bar=off --pre torch torchdata --extra-index-url https://download.pytorch.org/whl/nightly/cpu/ + run: pip install --progress-bar=off --pre torch --extra-index-url https://download.pytorch.org/whl/nightly/cpu/ - name: Install torchvision run: pip install --progress-bar=off --no-build-isolation --editable . - name: Install other prototype dependencies - run: pip install --progress-bar=off scipy pycocotools h5py iopath + run: pip install --progress-bar=off scipy pycocotools h5py - name: Install test requirements run: pip install --progress-bar=off pytest pytest-mock pytest-cov @@ -52,16 +52,6 @@ jobs: --cov-report=term-missing \ test/test_prototype_features*.py - - name: Run prototype datasets tests - if: success() || ( failure() && steps.setup.conclusion == 'success' ) - shell: bash - run: | - pytest \ - --durations=20 \ - --cov=torchvision/prototype/datasets \ - --cov-report=term-missing \ - test/test_prototype_datasets*.py - - name: Run prototype transforms tests if: success() || ( failure() && steps.setup.conclusion == 'success' ) shell: bash diff --git a/torchvision/prototype/__init__.py b/torchvision/prototype/__init__.py index bef5ecc411d..0edf8eb2e9f 100644 --- a/torchvision/prototype/__init__.py +++ b/torchvision/prototype/__init__.py @@ -1 +1 @@ -from . import datasets, features, models, transforms, utils +from . import features, models, transforms, utils diff --git a/torchvision/prototype/datasets/_builtin/caltech.py b/torchvision/prototype/datasets/_builtin/caltech.py index 29ed162ccea..eadc2a019f6 100644 --- a/torchvision/prototype/datasets/_builtin/caltech.py +++ b/torchvision/prototype/datasets/_builtin/caltech.py @@ -4,7 +4,7 @@ import numpy as np from torchdata.datapipes.iter import Filter, IterDataPipe, IterKeyZipper, Mapper -from torchvision.prototype.datasets.utils import Dataset, GDriveResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, GDriveResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( hint_sharding, hint_shuffling, @@ -12,7 +12,7 @@ read_categories_file, read_mat, ) -from torchvision.prototype.features import _Feature, BoundingBox, EncodedImage, Label +from torchvision.prototype.features import _Feature, BoundingBox, Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/celeba.py b/torchvision/prototype/datasets/_builtin/celeba.py index 3382b62b6ce..829fa2560fd 100644 --- a/torchvision/prototype/datasets/_builtin/celeba.py +++ b/torchvision/prototype/datasets/_builtin/celeba.py @@ -3,7 +3,7 @@ from typing import Any, BinaryIO, Dict, Iterator, List, Optional, Sequence, Tuple, Union from torchdata.datapipes.iter import Filter, IterDataPipe, IterKeyZipper, Mapper, Zipper -from torchvision.prototype.datasets.utils import Dataset, GDriveResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, GDriveResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -11,7 +11,7 @@ INFINITE_BUFFER_SIZE, path_accessor, ) -from torchvision.prototype.features import _Feature, BoundingBox, EncodedImage, Label +from torchvision.prototype.features import _Feature, BoundingBox, Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/clevr.py b/torchvision/prototype/datasets/_builtin/clevr.py index cb701fbe624..753a28363c6 100644 --- a/torchvision/prototype/datasets/_builtin/clevr.py +++ b/torchvision/prototype/datasets/_builtin/clevr.py @@ -2,7 +2,7 @@ from typing import Any, BinaryIO, Dict, List, Optional, Tuple, Union from torchdata.datapipes.iter import Demultiplexer, Filter, IterDataPipe, IterKeyZipper, JsonParser, Mapper, UnBatcher -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -11,7 +11,7 @@ path_accessor, path_comparator, ) -from torchvision.prototype.features import EncodedImage, Label +from torchvision.prototype.features import Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/coco.py b/torchvision/prototype/datasets/_builtin/coco.py index 72d76f48783..4ec4580e780 100644 --- a/torchvision/prototype/datasets/_builtin/coco.py +++ b/torchvision/prototype/datasets/_builtin/coco.py @@ -14,7 +14,7 @@ Mapper, UnBatcher, ) -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -24,7 +24,7 @@ path_accessor, read_categories_file, ) -from torchvision.prototype.features import _Feature, BoundingBox, EncodedImage, Label +from torchvision.prototype.features import _Feature, BoundingBox, Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/country211.py b/torchvision/prototype/datasets/_builtin/country211.py index f9821ea4eb6..c006e445491 100644 --- a/torchvision/prototype/datasets/_builtin/country211.py +++ b/torchvision/prototype/datasets/_builtin/country211.py @@ -2,14 +2,14 @@ from typing import Any, Dict, List, Tuple, Union from torchdata.datapipes.iter import Filter, IterDataPipe, Mapper -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( hint_sharding, hint_shuffling, path_comparator, read_categories_file, ) -from torchvision.prototype.features import EncodedImage, Label +from torchvision.prototype.features import Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/cub200.py b/torchvision/prototype/datasets/_builtin/cub200.py index 9c32d96f960..2a88f703014 100644 --- a/torchvision/prototype/datasets/_builtin/cub200.py +++ b/torchvision/prototype/datasets/_builtin/cub200.py @@ -14,7 +14,7 @@ Mapper, ) from torchdata.datapipes.map import IterToMapConverter -from torchvision.prototype.datasets.utils import Dataset, GDriveResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, GDriveResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -25,7 +25,7 @@ read_categories_file, read_mat, ) -from torchvision.prototype.features import _Feature, BoundingBox, EncodedImage, Label +from torchvision.prototype.features import _Feature, BoundingBox, Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/dtd.py b/torchvision/prototype/datasets/_builtin/dtd.py index e7ff1e79559..ebd5eaec571 100644 --- a/torchvision/prototype/datasets/_builtin/dtd.py +++ b/torchvision/prototype/datasets/_builtin/dtd.py @@ -3,7 +3,7 @@ from typing import Any, BinaryIO, Dict, List, Optional, Tuple, Union from torchdata.datapipes.iter import CSVParser, Demultiplexer, Filter, IterDataPipe, IterKeyZipper, LineReader, Mapper -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -12,7 +12,7 @@ path_comparator, read_categories_file, ) -from torchvision.prototype.features import EncodedImage, Label +from torchvision.prototype.features import Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/eurosat.py b/torchvision/prototype/datasets/_builtin/eurosat.py index 88863dbcb3a..12a379b47b5 100644 --- a/torchvision/prototype/datasets/_builtin/eurosat.py +++ b/torchvision/prototype/datasets/_builtin/eurosat.py @@ -2,9 +2,9 @@ from typing import Any, Dict, List, Tuple, Union from torchdata.datapipes.iter import IterDataPipe, Mapper -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import hint_sharding, hint_shuffling -from torchvision.prototype.features import EncodedImage, Label +from torchvision.prototype.features import Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/food101.py b/torchvision/prototype/datasets/_builtin/food101.py index 3657116ae7a..122962599af 100644 --- a/torchvision/prototype/datasets/_builtin/food101.py +++ b/torchvision/prototype/datasets/_builtin/food101.py @@ -2,7 +2,7 @@ from typing import Any, BinaryIO, Dict, List, Optional, Tuple, Union from torchdata.datapipes.iter import Demultiplexer, Filter, IterDataPipe, IterKeyZipper, LineReader, Mapper -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -11,7 +11,7 @@ path_comparator, read_categories_file, ) -from torchvision.prototype.features import EncodedImage, Label +from torchvision.prototype.features import Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/gtsrb.py b/torchvision/prototype/datasets/_builtin/gtsrb.py index e11dc2bb4ca..73eee8435e3 100644 --- a/torchvision/prototype/datasets/_builtin/gtsrb.py +++ b/torchvision/prototype/datasets/_builtin/gtsrb.py @@ -2,14 +2,14 @@ from typing import Any, Dict, List, Optional, Tuple, Union from torchdata.datapipes.iter import CSVDictParser, Demultiplexer, Filter, IterDataPipe, Mapper, Zipper -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( hint_sharding, hint_shuffling, INFINITE_BUFFER_SIZE, path_comparator, ) -from torchvision.prototype.features import BoundingBox, EncodedImage, Label +from torchvision.prototype.features import BoundingBox, Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/imagenet.py b/torchvision/prototype/datasets/_builtin/imagenet.py index 3192f1f5503..8388285e541 100644 --- a/torchvision/prototype/datasets/_builtin/imagenet.py +++ b/torchvision/prototype/datasets/_builtin/imagenet.py @@ -15,7 +15,7 @@ TarArchiveLoader, ) from torchdata.datapipes.map import IterToMapConverter -from torchvision.prototype.datasets.utils import Dataset, ManualDownloadResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, ManualDownloadResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -25,7 +25,7 @@ read_categories_file, read_mat, ) -from torchvision.prototype.features import EncodedImage, Label +from torchvision.prototype.features import Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/oxford_iiit_pet.py b/torchvision/prototype/datasets/_builtin/oxford_iiit_pet.py index 499dbd837ed..7621e7b1163 100644 --- a/torchvision/prototype/datasets/_builtin/oxford_iiit_pet.py +++ b/torchvision/prototype/datasets/_builtin/oxford_iiit_pet.py @@ -3,7 +3,7 @@ from typing import Any, BinaryIO, Dict, List, Optional, Tuple, Union from torchdata.datapipes.iter import CSVDictParser, Demultiplexer, Filter, IterDataPipe, IterKeyZipper, Mapper -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -13,7 +13,7 @@ path_comparator, read_categories_file, ) -from torchvision.prototype.features import EncodedImage, Label +from torchvision.prototype.features import Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/sbd.py b/torchvision/prototype/datasets/_builtin/sbd.py index 7aea1e0f782..01dd1d888f5 100644 --- a/torchvision/prototype/datasets/_builtin/sbd.py +++ b/torchvision/prototype/datasets/_builtin/sbd.py @@ -4,7 +4,7 @@ import numpy as np from torchdata.datapipes.iter import Demultiplexer, Filter, IterDataPipe, IterKeyZipper, LineReader, Mapper -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -15,7 +15,7 @@ read_categories_file, read_mat, ) -from torchvision.prototype.features import _Feature, EncodedImage +from torchvision.prototype.features import _Feature from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/stanford_cars.py b/torchvision/prototype/datasets/_builtin/stanford_cars.py index a0e7a377e48..82aec31295e 100644 --- a/torchvision/prototype/datasets/_builtin/stanford_cars.py +++ b/torchvision/prototype/datasets/_builtin/stanford_cars.py @@ -2,7 +2,7 @@ from typing import Any, BinaryIO, Dict, Iterator, List, Tuple, Union from torchdata.datapipes.iter import Filter, IterDataPipe, Mapper, Zipper -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( hint_sharding, hint_shuffling, @@ -10,7 +10,7 @@ read_categories_file, read_mat, ) -from torchvision.prototype.features import BoundingBox, EncodedImage, Label +from torchvision.prototype.features import BoundingBox, Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_builtin/voc.py b/torchvision/prototype/datasets/_builtin/voc.py index 8db82b4aac3..901f8eeb1cd 100644 --- a/torchvision/prototype/datasets/_builtin/voc.py +++ b/torchvision/prototype/datasets/_builtin/voc.py @@ -6,7 +6,7 @@ from torchdata.datapipes.iter import Demultiplexer, Filter, IterDataPipe, IterKeyZipper, LineReader, Mapper from torchvision.datasets import VOCDetection -from torchvision.prototype.datasets.utils import Dataset, HttpResource, OnlineResource +from torchvision.prototype.datasets.utils import Dataset, EncodedImage, HttpResource, OnlineResource from torchvision.prototype.datasets.utils._internal import ( getitem, hint_sharding, @@ -16,7 +16,7 @@ path_comparator, read_categories_file, ) -from torchvision.prototype.features import BoundingBox, EncodedImage, Label +from torchvision.prototype.features import BoundingBox, Label from .._api import register_dataset, register_info diff --git a/torchvision/prototype/datasets/_folder.py b/torchvision/prototype/datasets/_folder.py index b2ec23c5e3d..01a93a52af1 100644 --- a/torchvision/prototype/datasets/_folder.py +++ b/torchvision/prototype/datasets/_folder.py @@ -5,8 +5,9 @@ from typing import Any, BinaryIO, Collection, Dict, List, Optional, Tuple, Union from torchdata.datapipes.iter import FileLister, FileOpener, Filter, IterDataPipe, Mapper +from torchvision.prototype.datasets.utils import EncodedData, EncodedImage from torchvision.prototype.datasets.utils._internal import hint_sharding, hint_shuffling -from torchvision.prototype.features import EncodedData, EncodedImage, Label +from torchvision.prototype.features import Label __all__ = ["from_data_folder", "from_image_folder"] diff --git a/torchvision/prototype/datasets/utils/__init__.py b/torchvision/prototype/datasets/utils/__init__.py index 41ccbf48951..3fdb53eec43 100644 --- a/torchvision/prototype/datasets/utils/__init__.py +++ b/torchvision/prototype/datasets/utils/__init__.py @@ -1,3 +1,4 @@ from . import _internal # usort: skip from ._dataset import Dataset +from ._encoded import EncodedData, EncodedImage from ._resource import GDriveResource, HttpResource, KaggleDownloadResource, ManualDownloadResource, OnlineResource diff --git a/torchvision/prototype/features/_encoded.py b/torchvision/prototype/datasets/utils/_encoded.py similarity index 96% rename from torchvision/prototype/features/_encoded.py rename to torchvision/prototype/datasets/utils/_encoded.py index ffa347a3ef6..1e06878ba74 100644 --- a/torchvision/prototype/features/_encoded.py +++ b/torchvision/prototype/datasets/utils/_encoded.py @@ -6,9 +6,9 @@ import PIL.Image import torch -from torchvision.prototype.utils._internal import fromfile, ReadOnlyTensorBuffer -from ._feature import _Feature +from torchvision.prototype.features._feature import _Feature +from torchvision.prototype.utils._internal import fromfile, ReadOnlyTensorBuffer D = TypeVar("D", bound="EncodedData") diff --git a/torchvision/prototype/features/__init__.py b/torchvision/prototype/features/__init__.py index 557c4d83ca5..e11e99a9bef 100644 --- a/torchvision/prototype/features/__init__.py +++ b/torchvision/prototype/features/__init__.py @@ -1,5 +1,4 @@ from ._bounding_box import BoundingBox, BoundingBoxFormat -from ._encoded import EncodedData, EncodedImage from ._feature import _Feature, FillType, FillTypeJIT, InputType, InputTypeJIT, is_simple_tensor from ._image import ColorSpace, Image, ImageType, ImageTypeJIT, TensorImageType, TensorImageTypeJIT from ._label import Label, OneHotLabel diff --git a/torchvision/prototype/transforms/__init__.py b/torchvision/prototype/transforms/__init__.py index 2f9bd76d4ed..a5e54bb5fb2 100644 --- a/torchvision/prototype/transforms/__init__.py +++ b/torchvision/prototype/transforms/__init__.py @@ -52,6 +52,6 @@ TransposeDimensions, ) from ._temporal import UniformTemporalSubsample -from ._type_conversion import DecodeImage, LabelToOneHot, PILToTensor, ToImagePIL, ToImageTensor, ToPILImage +from ._type_conversion import LabelToOneHot, PILToTensor, ToImagePIL, ToImageTensor, ToPILImage from ._deprecated import Grayscale, RandomGrayscale, ToTensor # usort: skip diff --git a/torchvision/prototype/transforms/_type_conversion.py b/torchvision/prototype/transforms/_type_conversion.py index d0b11d53a8f..30b92259b93 100644 --- a/torchvision/prototype/transforms/_type_conversion.py +++ b/torchvision/prototype/transforms/_type_conversion.py @@ -9,13 +9,6 @@ from torchvision.prototype.transforms import functional as F, Transform -class DecodeImage(Transform): - _transformed_types = (features.EncodedImage,) - - def _transform(self, inpt: torch.Tensor, params: Dict[str, Any]) -> features.Image: - return F.decode_image_with_pil(inpt) # type: ignore[no-any-return] - - class LabelToOneHot(Transform): _transformed_types = (features.Label,) diff --git a/torchvision/prototype/transforms/functional/__init__.py b/torchvision/prototype/transforms/functional/__init__.py index 0b49c53b5fb..ec2da6ee518 100644 --- a/torchvision/prototype/transforms/functional/__init__.py +++ b/torchvision/prototype/transforms/functional/__init__.py @@ -166,13 +166,6 @@ normalize_video, ) from ._temporal import uniform_temporal_subsample, uniform_temporal_subsample_video -from ._type_conversion import ( - decode_image_with_pil, - decode_video_with_av, - pil_to_tensor, - to_image_pil, - to_image_tensor, - to_pil_image, -) +from ._type_conversion import pil_to_tensor, to_image_pil, to_image_tensor, to_pil_image from ._deprecated import get_image_size, rgb_to_grayscale, to_grayscale, to_tensor # usort: skip diff --git a/torchvision/prototype/transforms/functional/_type_conversion.py b/torchvision/prototype/transforms/functional/_type_conversion.py index c99d3d9affc..0e3d08ef076 100644 --- a/torchvision/prototype/transforms/functional/_type_conversion.py +++ b/torchvision/prototype/transforms/functional/_type_conversion.py @@ -1,30 +1,12 @@ -from typing import Any, Dict, Tuple, Union +from typing import Union import numpy as np import PIL.Image import torch -from torchvision.io.video import read_video from torchvision.prototype import features -from torchvision.prototype.utils._internal import ReadOnlyTensorBuffer from torchvision.transforms import functional as _F -@torch.jit.unused -def decode_image_with_pil(encoded_image: torch.Tensor) -> features.Image: - image = torch.as_tensor(np.array(PIL.Image.open(ReadOnlyTensorBuffer(encoded_image)), copy=True)) - if image.ndim == 2: - image = image.unsqueeze(2) - return features.Image(image.permute(2, 0, 1)) - - -@torch.jit.unused -def decode_video_with_av(encoded_video: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor, Dict[str, Any]]: - import unittest.mock - - with unittest.mock.patch("torchvision.io.video.os.path.exists", return_value=True): - return read_video(ReadOnlyTensorBuffer(encoded_video)) # type: ignore[arg-type] - - @torch.jit.unused def to_image_tensor(image: Union[torch.Tensor, PIL.Image.Image, np.ndarray]) -> features.Image: if isinstance(image, np.ndarray):