diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index e97b127ed2..57fef3461b 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -3,7 +3,7 @@ name: Feature request
about: Suggest an idea for this project
title: "[FEATURE]"
labels: "i: enhancement, i: needs triage"
-assignees: ""
+assignees: ''
---
diff --git a/.gitignore b/.gitignore
index 981cd731ff..d0eb7fca83 100644
--- a/.gitignore
+++ b/.gitignore
@@ -185,4 +185,8 @@ logs/
.creds/
.idea/
waymo/
-output/
\ No newline at end of file
+output/
+cov.xml
+hub/api/cov.xml
+hub/api/nested_seq
+nested_seq
\ No newline at end of file
diff --git a/README.md b/README.md
index 20d534ae2c..d664534ba2 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-
+
@@ -164,9 +164,17 @@ As always, thanks to our amazing contributors!
## Examples
-Activeloop’s Hub format lets you achieve faster inference at a lower cost. Test out the datasets we’ve converted into Hub format - see for yourself!
-- [Waymo Open Dataset](https://medium.com/snarkhub/extending-snark-hub-capabilities-to-handle-waymo-open-dataset-4dc7b7d8ab35)
-- [Aptiv nuScenes](https://medium.com/snarkhub/snark-hub-is-hosting-nuscenes-dataset-for-autonomous-driving-1470ae3e1923)
+Activeloop’s Hub format lets you achieve faster inference at a lower cost. We have 30+ popular datasets already on our platform. These include:-
+- COCO
+- CIFAR-10
+- PASCAL VOC
+- Cars196
+- KITTI
+- EuroSAT
+- Caltech-UCSD Birds 200
+- Food101
+
+Check these and many more popular datasets on our [visualizer web app](https://app.activeloop.ai/datasets/popular) and load them directly for model training!
## Disclaimers
diff --git a/benchmarks/benchmark_to_pytorch.py b/benchmarks/benchmark_to_pytorch.py
new file mode 100644
index 0000000000..b26851f490
--- /dev/null
+++ b/benchmarks/benchmark_to_pytorch.py
@@ -0,0 +1,53 @@
+import torchvision
+import torch
+import numpy as np
+
+import hub
+from hub.utils import Timer
+
+
+class HubAdapter2(torch.utils.data.Dataset):
+ def __init__(self, ods):
+ self.ds = ods
+
+ def __len__(self):
+ return min(len(self.ds), 1000 * 1000)
+
+ @property
+ def shape(self):
+ return (self.ds.__len__(), None, None, None)
+
+ def __iter__(self):
+ for i in range(len(self)):
+ yield self[i]
+
+ def __getitem__(self, index):
+ x, y = self.ds.__getitem__(index)
+ res = {"image": np.array(x), "label": y}
+ return res
+
+
+def test():
+ tv_cifar_ds = torchvision.datasets.CIFAR10(".", download=True)
+
+ hub_cifar = HubAdapter2(tv_cifar_ds)
+
+ pt2hb_ds = hub.Dataset.from_pytorch(hub_cifar, scheduler="threaded", workers=8)
+ res_ds = pt2hb_ds.store("./data/test/cifar/train")
+ hub_s3_ds = hub.Dataset(
+ url="./data/test/cifar/train", cache=False, storage_cache=False
+ )
+ print(hub_s3_ds._tensors["/image"].chunks)
+ hub_s3_ds = hub_s3_ds.to_pytorch()
+ dl = torch.utils.data.DataLoader(hub_s3_ds, batch_size=100, num_workers=8)
+ with Timer("Time"):
+ counter = 0
+ for i, b in enumerate(dl):
+ with Timer("Batch Time"):
+ x, y = b["image"], b["image"]
+ counter += 100
+ print(counter)
+
+
+if __name__ == "__main__":
+ test()
diff --git a/docs/logo/logo-explainer-bg.png b/docs/logo/logo-explainer-bg.png
new file mode 100644
index 0000000000..1005cae755
Binary files /dev/null and b/docs/logo/logo-explainer-bg.png differ
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 1c2758ad7e..35f722f839 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -1,4 +1,4 @@
sphinx==3.1.2
sphinx_markdown_tables==0.0.15
-recommonmark==0.6.0
+recommonmark==0.7.1
sphinx_rtd_theme==0.5.0
\ No newline at end of file
diff --git a/examples/mpii_data_upload_example.py b/examples/mpii_data_upload_example.py
new file mode 100644
index 0000000000..a4a6bd1fc5
--- /dev/null
+++ b/examples/mpii_data_upload_example.py
@@ -0,0 +1,99 @@
+import json
+import time
+import numpy as np
+from PIL import Image
+from tqdm import tqdm
+
+import hub
+from hub import Dataset, schema
+from hub.schema import Tensor, Text
+
+"""
+Below we will define a schema for our dataset. Schema is kind of
+a container to specify structure, shape, dtype and meta information
+of our dataset. We have different types of schemas for different
+types of data like image, tensor, text. More info. on docs.
+"""
+mpii_schema = {
+ """
+ we specify 'shape' as None for variable image size, and we
+ give 'max_shape' arguement a maximum possible size of image.
+ """
+ "image": schema.Image(
+ shape=(None, None, 3), max_shape=(1920, 1920, 3), dtype="uint8"
+ ),
+ "isValidation": "float64",
+ "img_paths": Text(shape=(None,), max_shape=(15,)),
+ "img_width": "int32",
+ "img_height": "int32",
+ "objpos": Tensor(max_shape=(100,), dtype="float64"),
+ """
+ 'joint_self' has nested list structure
+ """
+ "joint_self": Tensor(shape=(None, None), max_shape=(100, 100), dtype="float64"),
+ "scale_provided": "float64",
+ "annolist_index": "int32",
+ "people_index": "int32",
+ "numOtherPeople": "int32",
+}
+
+
+"""
+Below function takes JSON file and gives annotations in the
+form of dictionary inside list.
+"""
+
+
+def get_anno(jsonfile):
+
+ with open(jsonfile) as f:
+ instances = json.load(f)
+
+ annotations = []
+ for i in range(len(instances)):
+ annotations.append(instances[i])
+ return annotations
+
+
+"""
+Hub Transform is optimized to give efficient processing and
+storing of dataset. Below function takes a dataset and applies
+transform on every sample(instance) of dataset, and outputs a
+dataset with specified schema. More info. on docs.
+"""
+
+
+@hub.transform(schema=mpii_schema, workers=8)
+def mpii_transform(annotation):
+ return {
+ "image": np.array(Image.open(img_path + annotation["img_paths"])),
+ "isValidation": np.array(annotation["isValidation"]),
+ "img_paths": annotation["img_paths"],
+ "img_width": np.array(annotation["img_width"]),
+ "img_height": np.array(annotation["img_height"]),
+ "objpos": np.array(annotation["objpos"]),
+ "joint_self": np.array(annotation["joint_self"]),
+ "scale_provided": np.array(annotation["scale_provided"]),
+ "annolist_index": np.array(annotation["annolist_index"]),
+ "people_index": np.array(annotation["people_index"]),
+ "numOtherPeople": np.array(annotation["numOtherPeople"]),
+ }
+
+
+if __name__ == "__main__":
+
+ tag = input("Enter tag(username/dataset_name):")
+ jsonfile = input("Enter json file path:")
+ img_path = input("Enter path to images:")
+
+ annotations = get_anno(jsonfile)
+
+ t1 = time.time()
+ ds = mpii_transform(annotations)
+ ds = ds.store(tag)
+ print("Time taken to upload:", (time.time() - t1), "sec")
+
+"""
+Dataset uploaded using AWS EC2. Pipeline took 8931.26 sec to
+finish. Dataset is visible on app and tested working fine.
+"""
diff --git a/examples/tutorial/README.md b/examples/tutorial/README.md
new file mode 100644
index 0000000000..ebddfe2328
--- /dev/null
+++ b/examples/tutorial/README.md
@@ -0,0 +1,2 @@
+# A Gentle Introduction to Hub
+A collection of tutorials for [Hub](https://github.com/activeloopai/hub). It starts off by working with [different types](https://docs.activeloop.ai/en/latest/concepts/features.html#available-schemas) of data (eg images, audio), and then moves on to more complicated concepts like dynamic tensors.
\ No newline at end of file
diff --git a/examples/tutorial/Tutorial 1a - Uploading Images.ipynb b/examples/tutorial/Tutorial 1a - Uploading Images.ipynb
new file mode 100644
index 0000000000..6e1e87dad0
--- /dev/null
+++ b/examples/tutorial/Tutorial 1a - Uploading Images.ipynb
@@ -0,0 +1,273 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Uploading [Images](https://docs.activeloop.ai/en/latest/concepts/features.html#image)\n",
+ "\n",
+ "In this notebook, we will see how to upload and store images on Hub."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from hub.schema import ClassLabel, Image\n",
+ "from hub import transform, schema\n",
+ "\n",
+ "from skimage.io import imread\n",
+ "from skimage import img_as_ubyte\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "from tqdm import tqdm\n",
+ "\n",
+ "from glob import glob\n",
+ "from time import time\n",
+ "\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(['./Data/Images/00164.00000.jpg',\n",
+ " './Data/Images/00132.00001.jpg',\n",
+ " './Data/Images/00088.00001.jpg',\n",
+ " './Data/Images/00148.00000.jpg',\n",
+ " './Data/Images/00176.00000.jpg'],\n",
+ " 27)"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# a list of image filepaths\n",
+ "fnames = glob(\"./Data/Images/*\")\n",
+ "fnames[:5], len(fnames)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# each image filepath corresponds to an unique image\n",
+ "img = imread(fnames[0])\n",
+ "plt.imshow(img)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Defining a Schema\n",
+ "A schema is a python `dicts` that contains metadata about our dataset. \n",
+ "\n",
+ "In this example, we tell Hub that our images have the shape 380x380x3 and are `uint8`. Furthermore, these images belong to one of two classes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "my_schema = {\n",
+ " \"image\": Image(shape=(380, 380, 3), dtype=\"uint8\"),\n",
+ " \"label\": ClassLabel(num_classes=2),\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Defining Transforms\n",
+ "First, we define a method `load_transform` and decorate it with `@transform`. This is the function that will applied to **each instance/sample** of our dataset. \n",
+ "\n",
+ "In our example, for each element in the list `fnames`, we want to read the image into memory (with `imread`) and label it (by pulling its class from its filename). If we wanted to, we include arbitrary operations too, perhaps resizing or reshaping each image.\n",
+ "\n",
+ "Then, we return a `dict` with the same key-values as the ones defined in `my_schema`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "@transform(schema=my_schema)\n",
+ "def load_transform(sample):\n",
+ " image = imread(sample)\n",
+ " label = int(sample.split('.')[-2])\n",
+ " \n",
+ " return {\n",
+ " \"image\" : image,\n",
+ " \"label\" : label\n",
+ " }"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "hub.compute.transform.Transform"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ds = load_transform(fnames) # returns a transform object\n",
+ "type(ds)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Finally, Execution!\n",
+ "Hub lazily executes, so nothing happens until we invoke `store`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Computing the transormation: 100%|██████████| 27.0/27.0 [00:02<00:00, 9.08 items/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Elapsed time: 5.092390775680542\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "start = time()\n",
+ "\n",
+ "tag = \"mynameisvinn/faces\"\n",
+ "ds2 = ds.store(tag)\n",
+ "type(ds2)\n",
+ "\n",
+ "end = time()\n",
+ "print(\"Elapsed time:\", end - start)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.imshow(ds2['image', 0].compute())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/examples/tutorial/Tutorial 1b - Uploading Dataframes.ipynb b/examples/tutorial/Tutorial 1b - Uploading Dataframes.ipynb
new file mode 100644
index 0000000000..42667c45d1
--- /dev/null
+++ b/examples/tutorial/Tutorial 1b - Uploading Dataframes.ipynb
@@ -0,0 +1,222 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Working with DataFrames"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import hub\n",
+ "from hub.schema import Primitive\n",
+ "from tqdm import tqdm\n",
+ "from hub import Dataset, transform, schema\n",
+ "from time import time\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Unnamed: 0 | \n",
+ " contest | \n",
+ " winner | \n",
+ " loser | \n",
+ " time | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 7995092012829590 | \n",
+ " 64 | \n",
+ " 61 | \n",
+ " 2020-08-21 19:15:34.342 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 5179645355963421 | \n",
+ " 54 | \n",
+ " 59 | \n",
+ " 2020-08-21 20:10:45.923 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 3186990526737690 | \n",
+ " 64 | \n",
+ " 59 | \n",
+ " 2020-08-21 22:19:37.525 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 3 | \n",
+ " 6369489012402744 | \n",
+ " 70 | \n",
+ " 62 | \n",
+ " 2020-08-21 22:19:37.525 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 4 | \n",
+ " 3091106470863898 | \n",
+ " 71 | \n",
+ " 62 | \n",
+ " 2020-08-21 22:19:37.525 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Unnamed: 0 contest winner loser time\n",
+ "0 0 7995092012829590 64 61 2020-08-21 19:15:34.342\n",
+ "1 1 5179645355963421 54 59 2020-08-21 20:10:45.923\n",
+ "2 2 3186990526737690 64 59 2020-08-21 22:19:37.525\n",
+ "3 3 6369489012402744 70 62 2020-08-21 22:19:37.525\n",
+ "4 4 3091106470863898 71 62 2020-08-21 22:19:37.525"
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# tabular data\n",
+ "df = pd.read_csv(\"ps4-madden21.csv\")\n",
+ "df.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# i want to keep 'contest' column\n",
+ "my_schema = {\n",
+ " \"contest\": Primitive(dtype=\"float32\") # Primitive handles numpy arrays\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "@transform(schema=my_schema)\n",
+ "def load_transform(sample):\n",
+ " return {\n",
+ " \"contest\": sample\n",
+ " }"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds = load_transform((df['contest'])) # pass the dataframe column"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 56,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Computing the transormation: 154k items [00:36, 4.23k items/s] "
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "elapsed time: 39.528635025024414\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "start = time()\n",
+ "\n",
+ "tag = \"mynameisvinn/pandas\" # use your own tag/url\n",
+ "ds2 = ds.store(tag)\n",
+ "\n",
+ "end = time()\n",
+ "print(\"elapsed time:\", end - start)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/examples/tutorial/Tutorial 1c - Uploading Audio.ipynb b/examples/tutorial/Tutorial 1c - Uploading Audio.ipynb
new file mode 100644
index 0000000000..ceb35f1116
--- /dev/null
+++ b/examples/tutorial/Tutorial 1c - Uploading Audio.ipynb
@@ -0,0 +1,219 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Working with [Audio](https://docs.activeloop.ai/en/latest/concepts/features.html#audio)\n",
+ "\n",
+ "In this notebook, we will see how to handle audio data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from hub.schema import Primitive, Audio, ClassLabel\n",
+ "from hub import transform, schema\n",
+ "\n",
+ "import librosa\n",
+ "from librosa import display\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "from tqdm import tqdm\n",
+ "\n",
+ "from glob import glob\n",
+ "from time import time\n",
+ "\n",
+ "plt.style.use(\"ggplot\")\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Text(0.5, 0, 'Amplitude')"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fnames = glob(\"./Data/audio/*\")\n",
+ "\n",
+ "# lets look at an audio file\n",
+ "audio, sr = librosa.load(fnames[0])\n",
+ "librosa.display.waveplot(audio, sr=sr)\n",
+ "plt.ylabel(\"Time\")\n",
+ "plt.xlabel(\"Amplitude\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## (A) Defining a Schema for Audio Files\n",
+ "A schema is a python `dict` that contains metadata about our dataset. \n",
+ "\n",
+ "For this example, we tell Hub that our audio files have variable shape, perhaps as long as 192,000 samples. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "my_schema = {\n",
+ " \"wav\": Audio(shape=(None,), max_shape=(192000,), file_format=\"wav\"),\n",
+ " \"sampling_rate\": Primitive(dtype=int), \n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## (B) Defining Transforms\n",
+ "First, we define a method `load_transform` and decorate it with `@transform`. This is the function that will applied to **each instance/sample** of our dataset. \n",
+ "\n",
+ "In our example, for each element in the list `fnames`, we want to read the wav file into memory (with `librosa.load`)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "@transform(schema=my_schema)\n",
+ "def load_transform(sample):\n",
+ " \n",
+ " audio, sr = librosa.load(sample, sr=None)\n",
+ " \n",
+ " return {\n",
+ " \"wav\": audio,\n",
+ " \"sampling_rate\": sr\n",
+ " }"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "hub.compute.transform.Transform"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ds = load_transform(fnames) # returns a transform object\n",
+ "type(ds)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## (C) Finally, Execution!\n",
+ "Hub lazily executes, so nothing happens until we invoke `store`. By invoking `store`, we apply `load_transform` to our dataset and push everything."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/mynameisvinn/anaconda3/lib/python3.8/site-packages/zarr/creation.py:210: UserWarning: ignoring keyword argument 'mode'\n",
+ " warn('ignoring keyword argument %r' % k)\n",
+ "Computing the transormation: 100%|██████████| 14.0/14.0 [00:01<00:00, 13.5 items/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Elapsed time: 5.174474000930786\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "start = time()\n",
+ "\n",
+ "tag = \"mynameisvinn/vibrations\"\n",
+ "ds2 = ds.store(tag)\n",
+ "type(ds2)\n",
+ "\n",
+ "end = time()\n",
+ "print(\"Elapsed time:\", end - start)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/examples/tutorial/Tutorial 2 - Retrieving Remote Data.ipynb b/examples/tutorial/Tutorial 2 - Retrieving Remote Data.ipynb
new file mode 100644
index 0000000000..9226298cb8
--- /dev/null
+++ b/examples/tutorial/Tutorial 2 - Retrieving Remote Data.ipynb
@@ -0,0 +1,96 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Retrieving Data\n",
+ "We will retrieve the dataset that was created in the previous [tutorial](https://github.com/activeloopai/Hub/blob/master/examples/tutorial/Tutorial%201a%20-%20Uploading%20Images.ipynb)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import hub\n",
+ "\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "tag = \"mynameisvinn/faces\"\n",
+ "ds = hub.load(tag)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "img = ds[\"image\", 5].compute()\n",
+ "plt.imshow(img)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/examples/tutorial/Tutorial 3 - Transforming Data.ipynb b/examples/tutorial/Tutorial 3 - Transforming Data.ipynb
new file mode 100644
index 0000000000..3fcb95f26f
--- /dev/null
+++ b/examples/tutorial/Tutorial 3 - Transforming Data.ipynb
@@ -0,0 +1,203 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# [Transforming Data](https://docs.activeloop.ai/en/latest/concepts/transform.html#transform)\n",
+ "This notebook shows how we can transform `hub.Dataset`'s. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import hub\n",
+ "from hub.schema import ClassLabel, Image, Tensor\n",
+ "from hub import Dataset, transform, schema\n",
+ "from skimage.transform import resize\n",
+ "from skimage import img_as_ubyte\n",
+ "\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# lets fetch our original hub.Dataset\n",
+ "tag = \"mynameisvinn/faces\"\n",
+ "ds = hub.Dataset(tag)\n",
+ "plt.imshow(ds['image', 0].compute())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Transform\n",
+ "Let's say we want to resize the images (from `224x224x3` to `24x24x3`) in our dataset, a common operation in computer vision pipelines.\n",
+ "\n",
+ "Without Hub, we would have to read every image into memory (possibly from a remote data store like s3), apply a resizing operation, and then save it. This simple sequence could potentially take lots of wall time, mostly with read/writes.\n",
+ "\n",
+ "With Hub, we could appy this transformation without moving bytes back and forth."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "new_schema = {\n",
+ " \"resized_image\": Image(shape=(24, 24, 3), dtype=\"uint8\"),\n",
+ " \"label\": ClassLabel(num_classes=2)\n",
+ "}\n",
+ "\n",
+ "@transform(schema=new_schema)\n",
+ "def resize_transform(sample):\n",
+ " \n",
+ " image = resize(sample['image'].compute(), (24, 24, 3), anti_aliasing=True)\n",
+ " image = img_as_ubyte(image) # recast from float to uint8\n",
+ " label = int(sample['label'].compute())\n",
+ " \n",
+ " return {\n",
+ " \"resized_image\": image,\n",
+ " \"label\": label\n",
+ " }"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ds2 = resize_transform(ds) # transform object"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Computing the transormation: 100%|██████████| 27.0/27.0 [00:01<00:00, 15.3 items/s]\n"
+ ]
+ }
+ ],
+ "source": [
+ "tag = \"mynameisvinn/resized_faces\"\n",
+ "ds3 = ds2.store(tag)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Verify\n",
+ "We can verify results by fetching an instance from the resized dataset."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "img = ds3[\"resized_image\", 3].compute()\n",
+ "plt.imshow(img)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/examples/tutorial/Tutorial 4 - What are Dynamic Tensors.ipynb b/examples/tutorial/Tutorial 4 - What are Dynamic Tensors.ipynb
new file mode 100644
index 0000000000..9b52d24708
--- /dev/null
+++ b/examples/tutorial/Tutorial 4 - What are Dynamic Tensors.ipynb
@@ -0,0 +1,213 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Dynamic Tensors\n",
+ "\n",
+ "In this notebook, we will see how to handle data of variable shape and sizes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from hub.schema import Primitive, Audio, ClassLabel\n",
+ "from hub import transform, schema\n",
+ "\n",
+ "import librosa\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "from tqdm import tqdm\n",
+ "\n",
+ "from glob import glob\n",
+ "from time import time"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## What if our dataset contains data with varying sizes?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n_samples: 32000\n",
+ "n_samples: 115542\n",
+ "n_samples: 176400\n",
+ "n_samples: 176400\n",
+ "n_samples: 176400\n",
+ "n_samples: 176400\n",
+ "n_samples: 176400\n",
+ "n_samples: 176400\n",
+ "n_samples: 192000\n",
+ "n_samples: 176400\n",
+ "n_samples: 176400\n",
+ "n_samples: 176400\n",
+ "n_samples: 64589\n",
+ "n_samples: 23373\n"
+ ]
+ }
+ ],
+ "source": [
+ "fnames = glob(\"./Data/audio/*\")\n",
+ "\n",
+ "for fname in fnames:\n",
+ " print(\"n_samples:\", librosa.load(fname, sr=None)[0].shape[0])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## (A) Defining a \"Dynamic\" Schema\n",
+ "A schema is a python `dicts` that contains metadata about our dataset. \n",
+ "\n",
+ "In this example, we tell Hub that our files are variable in duration by passing in `shape=(None,)`. In return, we tell Hub that our files could be as large as 192,000 samples with `max_shape=(192000,)`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "my_schema = {\n",
+ " \"wav\": Audio(shape=(None,), max_shape=(192000,), file_format=\"wav\")\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## (B) Defining Transforms\n",
+ "Transforms for dynamic tensors look the seame as transforms for static tensors."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "@transform(schema=my_schema)\n",
+ "def load_transform(sample):\n",
+ " \n",
+ " audio = librosa.load(sample, sr=None)[0]\n",
+ " \n",
+ " return {\n",
+ " \"wav\": audio\n",
+ " }"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "hub.compute.transform.Transform"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "ds = load_transform(fnames) # returns a transform object\n",
+ "type(ds)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## (C) Finally, Execution!\n",
+ "Hub lazily executes, so nothing happens until we invoke `store`. By invoking `store`, we apply `load_transform` to our dataset and push everything."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/mynameisvinn/anaconda3/lib/python3.8/site-packages/zarr/creation.py:210: UserWarning: ignoring keyword argument 'mode'\n",
+ " warn('ignoring keyword argument %r' % k)\n",
+ "Computing the transormation: 100%|██████████| 14.0/14.0 [00:00<00:00, 20.9 items/s]"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Elapsed time: 3.316145896911621\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "start = time()\n",
+ "\n",
+ "tag = \"mynameisvinn/vibrations\"\n",
+ "ds2 = ds.store(tag)\n",
+ "type(ds2)\n",
+ "\n",
+ "end = time()\n",
+ "print(\"Elapsed time:\", end - start)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/hub/__init__.py b/hub/__init__.py
index c88e962012..463336094f 100644
--- a/hub/__init__.py
+++ b/hub/__init__.py
@@ -11,7 +11,7 @@
from hub.compute import transform
from hub.log import logger
import traceback
-from hub.exceptions import DaskModuleNotInstalledException
+from hub.exceptions import DaskModuleNotInstalledException, HubDatasetNotFoundException
def local_mode():
@@ -47,6 +47,8 @@ def load(tag):
return ds
except ImportError:
raise DaskModuleNotInstalledException
+ except HubDatasetNotFoundException:
+ raise
except Exception as e:
pass
# logger.warning(traceback.format_exc() + str(e))
diff --git a/hub/api/dataset.py b/hub/api/dataset.py
index ff51b68094..35031a708f 100644
--- a/hub/api/dataset.py
+++ b/hub/api/dataset.py
@@ -4,11 +4,13 @@
import json
import sys
import traceback
+from collections import defaultdict
import fsspec
import numcodecs
import numcodecs.lz4
import numcodecs.zstd
+import numpy as np
from hub.schema.features import (
Primitive,
@@ -18,9 +20,18 @@
featurify,
)
from hub.log import logger
+
+# from hub.api.tensorview import TensorView
+# from hub.api.datasetview import DatasetView
+from hub.api.objectview import ObjectView, DatasetView
from hub.api.tensorview import TensorView
-from hub.api.datasetview import DatasetView
-from hub.api.dataset_utils import slice_extract_info, slice_split, str_to_int
+from hub.api.dataset_utils import (
+ create_numpy_dict,
+ get_value,
+ slice_extract_info,
+ slice_split,
+ str_to_int,
+)
import hub.schema.serialize
import hub.schema.deserialize
@@ -43,7 +54,9 @@
from hub.client.hub_control import HubControlClient
from hub.schema import Audio, BBox, ClassLabel, Image, Sequence, Text, Video
from hub.numcodecs import PngCodec
-from collections import defaultdict
+
+from hub.utils import norm_cache, norm_shape
+from hub import defaults
def get_file_count(fs: fsspec.AbstractFileSystem, path):
@@ -55,16 +68,18 @@ def __init__(
self,
url: str,
mode: str = "a",
- safe_mode: bool = False,
shape=None,
schema=None,
token=None,
fs=None,
fs_map=None,
- cache: int = 2 ** 26,
- storage_cache: int = 2 ** 28,
+ meta_information=dict(),
+ cache: int = defaults.DEFAULT_MEMORY_CACHE_SIZE,
+ storage_cache: int = defaults.DEFAULT_STORAGE_CACHE_SIZE,
lock_cache=True,
tokenizer=None,
+ lazy: bool = True,
+ public: bool = True,
):
"""| Open a new or existing dataset for read/write
@@ -72,10 +87,8 @@ def __init__(
----------
url: str
The url where dataset is located/should be created
- mode: str, optional (default to "w")
+ mode: str, optional (default to "a")
Python way to tell whether dataset is for read or write (ex. "r", "w", "a")
- safe_mode: bool, optional
- if dataset exists it cannot be rewritten in safe mode, otherwise it lets to write the first time
shape: tuple, optional
Tuple with (num_samples,) format, where num_samples is number of samples
schema: optional
@@ -86,6 +99,7 @@ def __init__(
token is the parameter to pass the credentials, it can be filepath or dict
fs: optional
fs_map: optional
+ meta_information: optional ,give information about dataset in a dictionary.
cache: int, optional
Size of the memory cache. Default is 64MB (2**26)
if 0, False or None, then cache is not used
@@ -94,29 +108,32 @@ def __init__(
if 0, False or None, then storage cache is not used
lock_cache: bool, optional
Lock the cache for avoiding multiprocessing errors
+ lazy: bool, optional
+ Setting this to False will stop lazy computation and will allow items to be accessed without .compute()
+ public: bool, optional
+ only applicable if using hub storage, ignored otherwise
+ setting this to False allows only the user who created it to access the dataset and
+ the dataset won't be visible in the visualizer to the public
"""
- shape = shape or (None,)
- if isinstance(shape, int):
- shape = [shape]
- if shape is not None:
- if len(tuple(shape)) != 1:
- raise ShapeLengthException
- if mode is None:
- raise NoneValueException("mode")
-
- if not cache:
- storage_cache = False
-
- self.url = url
- self.token = token
- self.mode = mode
+ shape = norm_shape(shape)
+ if len(shape) != 1:
+ raise ShapeLengthException()
+ mode = mode or "a"
+ storage_cache = norm_cache(storage_cache) if cache else 0
+ cache = norm_cache(cache)
+ schema: SchemaDict = featurify(schema) if schema else None
+
+ self._url = url
+ self._token = token
+ self._mode = mode
self.tokenizer = tokenizer
+ self.lazy = lazy
self._fs, self._path = (
- (fs, url) if fs else get_fs_and_path(self.url, token=token)
+ (fs, url) if fs else get_fs_and_path(self._url, token=token, public=public)
)
- self.cache = cache
+ self._cache = cache
self._storage_cache = storage_cache
self.lock_cache = lock_cache
self.verison = "1.x"
@@ -126,17 +143,27 @@ def __init__(
self._fs, self._path, cache, lock=lock_cache, storage_cache=storage_cache
)
self._fs_map = fs_map
-
- if safe_mode and not needcreate:
- mode = "r"
+ self._meta_information = meta_information
self.username = None
self.dataset_name = None
if not needcreate:
self.meta = json.loads(fs_map["meta.json"].decode("utf-8"))
- self.shape = tuple(self.meta["shape"])
- self.schema = hub.schema.deserialize.deserialize(self.meta["schema"])
- self._flat_tensors = tuple(flatten(self.schema))
+ self._shape = tuple(self.meta["shape"])
+ self._schema = hub.schema.deserialize.deserialize(self.meta["schema"])
+ self._meta_information = self.meta.get("meta_info") or dict()
+ self._flat_tensors = tuple(flatten(self._schema))
self._tensors = dict(self._open_storage_tensors())
+ if shape != (None,) and shape != self._shape:
+ raise TypeError(
+ f"Shape in metafile [{self._shape}] and shape in arguments [{shape}] are !=, use mode='w' to overwrite dataset"
+ )
+ if schema is not None and sorted(schema.dict_.keys()) != sorted(
+ self._schema.dict_.keys()
+ ):
+ raise TypeError(
+ "Schema in metafile and schema in arguments do not match, use mode='w' to overwrite dataset"
+ )
+
else:
if shape[0] is None:
raise ShapeArgumentNotFoundException()
@@ -147,9 +174,10 @@ def __init__(
raise ShapeArgumentNotFoundException()
if schema is None:
raise SchemaArgumentNotFoundException()
- self.schema: HubSchema = featurify(schema)
- self.shape = tuple(shape)
+ self._schema = schema
+ self._shape = tuple(shape)
self.meta = self._store_meta()
+ self._meta_information = meta_information
self._flat_tensors = tuple(flatten(self.schema))
self._tensors = dict(self._generate_storage_tensors())
self.flush()
@@ -173,15 +201,52 @@ def __init__(
self.username = spl[-2]
self.dataset_name = spl[-1]
HubControlClient().create_dataset_entry(
- self.username, self.dataset_name, self.meta
+ self.username, self.dataset_name, self.meta, public=public
)
+ @property
+ def mode(self):
+ return self._mode
+
+ @property
+ def url(self):
+ return self._url
+
+ @property
+ def shape(self):
+ return self._shape
+
+ @property
+ def token(self):
+ return self._token
+
+ @property
+ def cache(self):
+ return self._cache
+
+ @property
+ def storage_cache(self):
+ return self._storage_cache
+
+ @property
+ def schema(self):
+ return self._schema
+
+ @property
+ def meta_information(self):
+ return self._meta_information
+
def _store_meta(self) -> dict:
+
meta = {
- "shape": self.shape,
- "schema": hub.schema.serialize.serialize(self.schema),
+ "shape": self._shape,
+ "schema": hub.schema.serialize.serialize(self._schema),
"version": 1,
}
+
+ if self._meta_information != None:
+ meta["meta_info"] = self._meta_information
+
self._fs_map["meta.json"] = bytes(json.dumps(meta), "utf-8")
return meta
@@ -191,7 +256,7 @@ def _check_and_prepare_dir(self):
Creates or overwrites dataset folder.
Returns True dataset needs to be created opposed to read.
"""
- fs, path, mode = self._fs, self._path, self.mode
+ fs, path, mode = self._fs, self._path, self._mode
if path.startswith("s3://"):
with open(posixpath.expanduser("~/.activeloop/store"), "rb") as f:
stored_username = json.load(f)["_id"]
@@ -254,15 +319,15 @@ def _generate_storage_tensors(self):
get_storage_map(
self._fs,
path,
- self.cache,
+ self._cache,
self.lock_cache,
storage_cache=self._storage_cache,
),
self._fs_map,
),
- mode=self.mode,
- shape=self.shape + t_dtype.shape,
- max_shape=self.shape + t_dtype.max_shape,
+ mode=self._mode,
+ shape=self._shape + t_dtype.shape,
+ max_shape=self._shape + t_dtype.max_shape,
dtype=self._get_dynamic_tensor_dtype(t_dtype),
chunks=t_dtype.chunks,
compressor=self._get_compressor(t_dtype.compressor),
@@ -278,26 +343,26 @@ def _open_storage_tensors(self):
get_storage_map(
self._fs,
path,
- self.cache,
+ self._cache,
self.lock_cache,
storage_cache=self._storage_cache,
),
self._fs_map,
),
- mode=self.mode,
+ mode=self._mode,
# FIXME We don't need argument below here
- shape=self.shape + t_dtype.shape,
+ shape=self._shape + t_dtype.shape,
)
def __getitem__(self, slice_):
"""| Gets a slice or slices from dataset
| Usage:
- >>> return ds["image", 5, 0:1920, 0:1080, 0:3].numpy() # returns numpy array
+ >>> return ds["image", 5, 0:1920, 0:1080, 0:3].compute() # returns numpy array
>>> images = ds["image"]
- >>> return images[5].numpy() # returns numpy array
+ >>> return images[5].compute() # returns numpy array
>>> images = ds["image"]
>>> image = images[5]
- >>> return image[0:1920, 0:1080, 0:3].numpy()
+ >>> return image[0:1920, 0:1080, 0:3].compute()
"""
if not isinstance(slice_, abc.Iterable) or isinstance(slice_, str):
slice_ = [slice_]
@@ -308,23 +373,61 @@ def __getitem__(self, slice_):
raise ValueError(
"Can't slice a dataset with multiple slices without subpath"
)
- num, ofs = slice_extract_info(slice_list[0], self.shape[0])
+ num, ofs = slice_extract_info(slice_list[0], self._shape[0])
return DatasetView(
dataset=self,
num_samples=num,
offset=ofs,
squeeze_dim=isinstance(slice_list[0], int),
+ lazy=self.lazy,
)
elif not slice_list:
if subpath in self._tensors.keys():
- return TensorView(
- dataset=self, subpath=subpath, slice_=slice(0, self.shape[0])
+ tensorview = TensorView(
+ dataset=self,
+ subpath=subpath,
+ slice_=slice(0, self._shape[0]),
+ lazy=self.lazy,
)
+ if self.lazy:
+ return tensorview
+ else:
+ return tensorview.compute()
+ for key in self._tensors.keys():
+ if subpath.startswith(key):
+ objectview = ObjectView(
+ dataset=self, subpath=subpath, lazy=self.lazy
+ )
+ if self.lazy:
+ return objectview
+ else:
+ return objectview.compute()
return self._get_dictionary(subpath)
else:
num, ofs = slice_extract_info(slice_list[0], self.shape[0])
- if subpath in self._tensors.keys():
- return TensorView(dataset=self, subpath=subpath, slice_=slice_list)
+ schema_obj = self.schema.dict_[subpath.split("/")[1]]
+ if subpath in self._tensors.keys() and (
+ not isinstance(schema_obj, Sequence) or len(slice_list) <= 1
+ ):
+ tensorview = TensorView(
+ dataset=self, subpath=subpath, slice_=slice_list, lazy=self.lazy
+ )
+ if self.lazy:
+ return tensorview
+ else:
+ return tensorview.compute()
+ for key in self._tensors.keys():
+ if subpath.startswith(key):
+ objectview = ObjectView(
+ dataset=self,
+ subpath=subpath,
+ slice_list=slice_list,
+ lazy=self.lazy,
+ )
+ if self.lazy:
+ return objectview
+ else:
+ return objectview.compute()
if len(slice_list) > 1:
raise ValueError("You can't slice a dictionary of Tensors")
return self._get_dictionary(subpath, slice_list[0])
@@ -337,8 +440,8 @@ def __setitem__(self, slice_, value):
>>> image = images[5]
>>> image[0:1920, 0:1080, 0:3] = np.zeros((1920, 1080, 3), "uint8")
"""
+ assign_value = get_value(value)
# handling strings and bytes
- assign_value = value
assign_value = str_to_int(assign_value, self.tokenizer)
if not isinstance(slice_, abc.Iterable) or isinstance(slice_, str):
@@ -349,16 +452,24 @@ def __setitem__(self, slice_, value):
if not subpath:
raise ValueError("Can't assign to dataset sliced without subpath")
elif not slice_list:
- self._tensors[subpath][:] = assign_value # Add path check
+ if subpath in self._tensors.keys():
+ self._tensors[subpath][:] = assign_value # Add path check
+ else:
+ ObjectView(dataset=self, subpath=subpath)[:] = assign_value
else:
- self._tensors[subpath][slice_list] = assign_value
+ if subpath in self._tensors.keys():
+ self._tensors[subpath][slice_list] = assign_value
+ else:
+ ObjectView(dataset=self, subpath=subpath, slice_list=slice_list)[
+ :
+ ] = assign_value
def resize_shape(self, size: int) -> None:
""" Resize the shape of the dataset by resizing each tensor first dimension """
- if size == self.shape[0]:
+ if size == self._shape[0]:
return
- self.shape = (int(size),)
+ self._shape = (int(size),)
self.meta = self._store_meta()
for t in self._tensors.values():
t.resize_shape(int(size))
@@ -367,7 +478,7 @@ def resize_shape(self, size: int) -> None:
def append_shape(self, size: int):
""" Append the shape: Heavy Operation """
- size += self.shape[0]
+ size += self._shape[0]
self.resize_shape(size)
def delete(self):
@@ -385,7 +496,7 @@ def delete(self):
def to_pytorch(
self,
- Transform=None,
+ transform=None,
inplace=True,
output_type=dict,
offset=None,
@@ -395,7 +506,7 @@ def to_pytorch(
Parameters
----------
- Transform: function that transforms data in a dict format
+ transform: function that transforms data in a dict format
inplace: bool, optional
Defines if data should be converted to torch.Tensor before or after Transforms applied (depends on what data
type you need for Transforms). Default is True.
@@ -408,15 +519,14 @@ def to_pytorch(
"""
if "torch" not in sys.modules:
raise ModuleNotInstalledException("torch")
- else:
- import torch
+ import torch
- global torch
+ global torch
self.flush() # FIXME Without this some tests in test_converters.py fails, not clear why
return TorchDataset(
self,
- Transform,
+ transform,
inplace=inplace,
output_type=output_type,
offset=offset,
@@ -441,7 +551,7 @@ def to_tensorflow(self, offset=None, num_samples=None):
global tf
offset = 0 if offset is None else offset
- num_samples = self.shape[0] if num_samples is None else num_samples
+ num_samples = self._shape[0] if num_samples is None else num_samples
def tf_gen():
for index in range(offset, offset + num_samples):
@@ -491,8 +601,8 @@ def output_shapes_from_dict(my_dtype):
d[k] = get_output_shapes(v)
return d
- output_types = dtype_to_tf(self.schema)
- output_shapes = get_output_shapes(self.schema)
+ output_types = dtype_to_tf(self._schema)
+ output_shapes = get_output_shapes(self._schema)
return tf.data.Dataset.from_generator(
tf_gen, output_types=output_types, output_shapes=output_shapes
@@ -511,11 +621,12 @@ def _get_dictionary(self, subpath, slice_=None):
if split_key[i] not in cur.keys():
cur[split_key[i]] = {}
cur = cur[split_key[i]]
- slice_ = slice_ if slice_ else slice(0, self.shape[0])
- cur[split_key[-1]] = TensorView(
- dataset=self, subpath=key, slice_=slice_
+ slice_ = slice_ or slice(0, self._shape[0])
+ tensorview = TensorView(
+ dataset=self, subpath=key, slice_=slice_, lazy=self.lazy
)
- if len(tensor_dict) == 0:
+ cur[split_key[-1]] = tensorview if self.lazy else tensorview.compute()
+ if not tensor_dict:
raise KeyError(f"Key {subpath} was not found in dataset")
return tensor_dict
@@ -526,7 +637,13 @@ def __iter__(self):
def __len__(self):
""" Number of samples in the dataset """
- return self.shape[0]
+ return self._shape[0]
+
+ def disable_lazy(self):
+ self.lazy = False
+
+ def enable_lazy(self):
+ self.lazy = True
def flush(self):
"""Save changes from cache to dataset final storage.
@@ -556,22 +673,27 @@ def _update_dataset_state(self):
self.username, self.dataset_name, "UPLOADED"
)
+ def numpy(self):
+ return [create_numpy_dict(self, i) for i in range(self._shape[0])]
+
+ def compute(self):
+ return self.numpy()
+
def __str__(self):
- out = (
+ return (
"Dataset(schema="
- + str(self.schema)
+ + str(self._schema)
+ "url="
+ "'"
- + self.url
+ + self._url
+ "'"
+ ", shape="
- + str(self.shape)
+ + str(self._shape)
+ ", mode="
+ "'"
- + self.mode
+ + self._mode
+ "')"
)
- return out
def __repr__(self):
return self.__str__()
@@ -637,7 +759,7 @@ def tf_to_hub(tf_dt):
def TensorSpec_to_hub(tf_dt):
dt = tf_dt.dtype.name if tf_dt.dtype.name != "string" else "object"
- shape = tf_dt.shape if tf_dt.shape.rank is not None else (None,)
+ shape = tuple(tf_dt.shape) if tf_dt.shape.rank is not None else (None,)
return Tensor(shape=shape, dtype=dt)
def dict_to_hub(tf_dt):
@@ -653,7 +775,7 @@ def transform_numpy(sample):
for k, v in sample.items():
k = k.replace("/", "_")
if not isinstance(v, dict):
- if isinstance(v, tuple) or isinstance(v, list):
+ if isinstance(v, (tuple, list)):
new_v = list(v)
for i in range(len(new_v)):
new_v[i] = new_v[i].numpy()
@@ -759,8 +881,7 @@ def dict_sampling(d, path=""):
def generate_schema(ds):
tf_schema = ds[1].features
- schema = to_hub(tf_schema).dict_
- return schema
+ return to_hub(tf_schema).dict_
def to_hub(tf_dt, max_shape=None, path=""):
if isinstance(tf_dt, tfds.features.FeaturesDict):
@@ -872,10 +993,7 @@ def transform_numpy(sample):
d = {}
for k, v in sample.items():
k = k.replace("/", "_")
- if not isinstance(v, dict):
- d[k] = v.numpy()
- else:
- d[k] = transform_numpy(v)
+ d[k] = transform_numpy(v) if isinstance(v, dict) else v.numpy()
return d
@hub.transform(schema=my_schema, scheduler=scheduler, workers=workers)
@@ -947,9 +1065,9 @@ def dict_to_hub(dic, path=""):
value_shape = v.shape if hasattr(v, "shape") else ()
if isinstance(v, torch.Tensor):
v = v.numpy()
- shape = tuple([None for it in value_shape])
+ shape = tuple(None for it in value_shape)
max_shape = (
- max_dict[cur_path] or tuple([10000 for it in value_shape])
+ max_dict[cur_path] or tuple(10000 for it in value_shape)
if not isinstance(v, str)
else (10000,)
)
@@ -968,10 +1086,7 @@ def transform_numpy(sample):
d = {}
for k, v in sample.items():
k = k.replace("/", "_")
- if not isinstance(v, dict):
- d[k] = v
- else:
- d[k] = transform_numpy(v)
+ d[k] = transform_numpy(v) if isinstance(v, dict) else v
return d
@hub.transform(schema=my_schema, scheduler=scheduler, workers=workers)
@@ -1022,11 +1137,9 @@ def __getitem__(self, index):
split_key = key.split("/")
cur = d
for i in range(1, len(split_key) - 1):
- if split_key[i] in cur.keys():
- cur = cur[split_key[i]]
- else:
+ if split_key[i] not in cur.keys():
cur[split_key[i]] = {}
- cur = cur[split_key[i]]
+ cur = cur[split_key[i]]
if not isinstance(self._ds._tensors[key][index], bytes) and not isinstance(
self._ds._tensors[key][index], str
):
@@ -1041,23 +1154,5 @@ def __getitem__(self, index):
def __iter__(self):
self._init_ds()
- start = self.offset if self.offset is not None else 0
- for index in range(start, start + self.__len__()):
- d = {}
- for key in self._ds._tensors.keys():
- split_key = key.split("/")
- cur = d
- for i in range(1, len(split_key) - 1):
- if split_key[i] in cur.keys():
- cur = cur[split_key[i]]
- else:
- cur[split_key[i]] = {}
- cur = cur[split_key[i]]
- t = self._ds._tensors[key][index]
- if self.inplace:
- t = torch.tensor(t)
- cur[split_key[-1]] = t
- d = self._do_transform(d)
- if self.inplace & (self.output_type != dict) & (type(d) == dict):
- d = self.output_type(d.values())
- yield (d)
+ for i in range(len(self)):
+ yield self[i]
diff --git a/hub/api/dataset_utils.py b/hub/api/dataset_utils.py
index 209d682fbb..a1d188f9c3 100644
--- a/hub/api/dataset_utils.py
+++ b/hub/api/dataset_utils.py
@@ -10,7 +10,7 @@ def slice_split(slice_):
for sl in slice_:
if isinstance(sl, str):
path += sl if sl.startswith("/") else "/" + sl
- elif isinstance(sl, int) or isinstance(sl, slice):
+ elif isinstance(sl, (int, slice)):
list_slice.append(sl)
else:
raise TypeError(
@@ -22,8 +22,8 @@ def slice_split(slice_):
def slice_extract_info(slice_, num):
"""Extracts number of samples and offset from slice"""
if isinstance(slice_, int):
- slice_ = slice_ + num if slice_ < 0 else slice_
- if slice_ >= num or slice_ < 0:
+ slice_ = slice_ + num if num and slice_ < 0 else slice_
+ if num and (slice_ >= num or slice_ < 0):
raise IndexError(
"index out of bounds for dimension with length {}".format(num)
)
@@ -36,7 +36,7 @@ def slice_extract_info(slice_, num):
slice_ = (
slice(slice_.start + num, slice_.stop) if slice_.start < 0 else slice_
) # make indices positive if possible
- if slice_.start < 0 or slice_.start >= num:
+ if num and (slice_.start < 0 or slice_.start >= num):
raise IndexError(
"index out of bounds for dimension with length {}".format(num)
)
@@ -45,19 +45,54 @@ def slice_extract_info(slice_, num):
slice_ = (
slice(slice_.start, slice_.stop + num) if slice_.stop < 0 else slice_
) # make indices positive if possible
- if slice_.stop < 0 or slice_.stop > num:
+ if num and (slice_.stop < 0 or slice_.stop > num):
raise IndexError(
"index out of bounds for dimension with length {}".format(num)
)
if slice_.start is not None and slice_.stop is not None:
- num = 0 if slice_.stop < slice_.start else slice_.stop - slice_.start
+ if (
+ slice_.start < 0
+ and slice_.stop < 0
+ or slice_.start >= 0
+ and slice_.stop >= 0
+ ):
+ # If same signs, bound checking can be done
+ if abs(slice_.start) > abs(slice_.stop):
+ raise IndexError("start index is greater than stop index")
+ num = abs(slice_.stop) - abs(slice_.start)
+ else:
+ num = 0
+ # num = 0 if slice_.stop < slice_.start else slice_.stop - slice_.start
elif slice_.start is None and slice_.stop is not None:
num = slice_.stop
elif slice_.start is not None and slice_.stop is None:
- num = num - slice_.start
+ num = num - slice_.start if num else 0
return num, offset
+def create_numpy_dict(dataset, index):
+ numpy_dict = {}
+ for path in dataset._tensors.keys():
+ d = numpy_dict
+ split = path.split("/")
+ for subpath in split[1:-1]:
+ if subpath not in d:
+ d[subpath] = {}
+ d = d[subpath]
+ d[split[-1]] = dataset[path, index].numpy()
+ return numpy_dict
+
+
+def get_value(value):
+ if isinstance(value, np.ndarray) and value.shape == ():
+ value = value.item()
+ elif isinstance(value, list):
+ for i in range(len(value)):
+ if isinstance(value[i], np.ndarray) and value[i].shape == ():
+ value[i] = value[i].item()
+ return value
+
+
def str_to_int(assign_value, tokenizer):
if isinstance(assign_value, bytes):
try:
@@ -73,10 +108,9 @@ def str_to_int(assign_value, tokenizer):
if tokenizer is not None:
if "transformers" not in sys.modules:
raise ModuleNotInstalledException("transformers")
- else:
- import transformers
+ import transformers
- global transformers
+ global transformers
tokenizer = transformers.AutoTokenizer.from_pretrained("bert-base-cased")
assign_value = (
np.array(tokenizer(assign_value, add_special_tokens=False)["input_ids"])
diff --git a/hub/api/datasetview.py b/hub/api/datasetview.py
index 8e91663e71..bbeb0bf144 100644
--- a/hub/api/datasetview.py
+++ b/hub/api/datasetview.py
@@ -1,16 +1,24 @@
from hub.api.tensorview import TensorView
-from hub.api.dataset_utils import slice_extract_info, slice_split, str_to_int
+from hub.api.dataset_utils import (
+ create_numpy_dict,
+ get_value,
+ slice_extract_info,
+ slice_split,
+ str_to_int,
+)
from hub.exceptions import NoneValueException
import collections.abc as abc
+import hub.api.objectview as objv
class DatasetView:
def __init__(
self,
dataset=None,
- num_samples=None,
- offset=None,
- squeeze_dim=False,
+ num_samples: int = None,
+ offset: int = None,
+ squeeze_dim: bool = False,
+ lazy: bool = True,
):
"""Creates a DatasetView object for a subset of the Dataset.
@@ -22,8 +30,10 @@ def __init__(
The number of samples in this DatasetView
offset: int
The offset from which the DatasetView starts
- squeeze_dim: bool
+ squeeze_dim: bool, optional
For slicing with integers we would love to remove the first dimension to make it nicer
+ lazy: bool, optional
+ Setting this to False will stop lazy computation and will allow items to be accessed without .compute()
"""
if dataset is None:
raise NoneValueException("dataset")
@@ -36,6 +46,7 @@ def __init__(
self.num_samples = num_samples
self.offset = offset
self.squeeze_dim = squeeze_dim
+ self.lazy = lazy
def __getitem__(self, slice_):
"""| Gets a slice or slices from DatasetView
@@ -63,31 +74,59 @@ def __getitem__(self, slice_):
num_samples=num,
offset=ofs + self.offset,
squeeze_dim=isinstance(slice_list[0], int),
+ lazy=self.lazy,
)
elif not slice_list:
- slice_ = slice(self.offset, self.offset + self.num_samples)
+ slice_ = (
+ slice(self.offset, self.offset + self.num_samples)
+ if not self.squeeze_dim
+ else self.offset
+ )
if subpath in self.dataset._tensors.keys():
- return TensorView(
+ tensorview = TensorView(
dataset=self.dataset,
subpath=subpath,
slice_=slice_,
- squeeze_dims=[True] if self.squeeze_dim else [],
+ lazy=self.lazy,
)
+ return tensorview if self.lazy else tensorview.compute()
+ for key in self.dataset._tensors.keys():
+ if subpath.startswith(key):
+ objectview = objv.ObjectView(
+ dataset=self.dataset,
+ subpath=subpath,
+ slice_list=[slice_],
+ lazy=self.lazy,
+ )
+ return objectview if self.lazy else objectview.compute()
return self._get_dictionary(self.dataset, subpath, slice=slice_)
else:
num, ofs = slice_extract_info(slice_list[0], self.num_samples)
slice_list[0] = (
ofs + self.offset
- if num == 1
+ if isinstance(slice_list[0], int)
else slice(ofs + self.offset, ofs + self.offset + num)
)
- if subpath in self.dataset._tensors.keys():
- return TensorView(
+ schema_obj = self.dataset.schema.dict_[subpath.split("/")[1]]
+ if subpath in self.dataset._tensors.keys() and (
+ not isinstance(schema_obj, objv.Sequence) or len(slice_list) <= 1
+ ):
+ tensorview = TensorView(
dataset=self.dataset,
subpath=subpath,
slice_=slice_list,
- squeeze_dims=[True] if self.squeeze_dim else [],
+ lazy=self.lazy,
)
+ return tensorview if self.lazy else tensorview.compute()
+ for key in self.dataset._tensors.keys():
+ if subpath.startswith(key):
+ objectview = objv.ObjectView(
+ dataset=self.dataset,
+ subpath=subpath,
+ slice_list=slice_list,
+ lazy=self.lazy,
+ )
+ return objectview if self.lazy else objectview.compute()
if len(slice_list) > 1:
raise ValueError("You can't slice a dictionary of Tensors")
return self._get_dictionary(subpath, slice_list[0])
@@ -99,8 +138,8 @@ def __setitem__(self, slice_, value):
>>> ds_view = ds[5:15]
>>> ds_view["image", 3, 0:1920, 0:1080, 0:3] = np.zeros((1920, 1080, 3), "uint8") # sets the 8th image
"""
+ assign_value = get_value(value)
# handling strings and bytes
- assign_value = value
assign_value = str_to_int(assign_value, self.dataset.tokenizer)
if not isinstance(slice_, abc.Iterable) or isinstance(slice_, str):
@@ -113,10 +152,18 @@ def __setitem__(self, slice_, value):
elif not slice_list:
slice_ = (
self.offset
- if self.num_samples == 1
+ # if self.num_samples == 1
+ if self.squeeze_dim
else slice(self.offset, self.offset + self.num_samples)
)
- self.dataset._tensors[subpath][slice_] = assign_value # Add path check
+ if subpath in self.dataset._tensors.keys():
+ self.dataset._tensors[subpath][slice_] = assign_value # Add path check
+ for key in self.dataset._tensors.keys():
+ if subpath.startswith(key):
+ objv.ObjectView(
+ dataset=self.dataset, subpath=subpath, slice_list=[slice_]
+ )[:] = assign_value
+ # raise error
else:
num, ofs = (
slice_extract_info(slice_list[0], self.num_samples)
@@ -125,10 +172,20 @@ def __setitem__(self, slice_, value):
)
slice_list[0] = (
slice(ofs + self.offset, ofs + self.offset + num)
- if num > 1
+ if isinstance(slice_list[0], slice)
else ofs + self.offset
)
- self.dataset._tensors[subpath][slice_list] = assign_value
+ # self.dataset._tensors[subpath][slice_list] = assign_value
+ if subpath in self.dataset._tensors.keys():
+ self.dataset._tensors[subpath][
+ slice_list
+ ] = assign_value # Add path check
+ return
+ for key in self.dataset._tensors.keys():
+ if subpath.startswith(key):
+ objv.ObjectView(
+ dataset=self.dataset, subpath=subpath, slice_list=slice_list
+ )[:] = assign_value
@property
def keys(self):
@@ -137,7 +194,7 @@ def keys(self):
"""
return self.dataset._tensors.keys()
- def _get_dictionary(self, subpath, slice_=None):
+ def _get_dictionary(self, subpath, slice_):
"""Gets dictionary from dataset given incomplete subpath"""
tensor_dict = {}
subpath = subpath if subpath.endswith("/") else subpath + "/"
@@ -146,18 +203,18 @@ def _get_dictionary(self, subpath, slice_=None):
suffix_key = key[len(subpath) :]
split_key = suffix_key.split("/")
cur = tensor_dict
- for i in range(len(split_key) - 1):
- if split_key[i] not in cur.keys():
- cur[split_key[i]] = {}
- cur = cur[split_key[i]]
- slice_ = slice_ if slice_ else slice(0, self.dataset.shape[0])
- cur[split_key[-1]] = TensorView(
+ for sub_key in split_key[:-1]:
+ if sub_key not in cur.keys():
+ cur[sub_key] = {}
+ cur = cur[sub_key]
+ tensorview = TensorView(
dataset=self.dataset,
subpath=key,
slice_=slice_,
- squeeze_dims=[True] if self.squeeze_dim else [],
+ lazy=self.lazy,
)
- if len(tensor_dict) == 0:
+ cur[split_key[-1]] = tensorview if self.lazy else tensorview.compute()
+ if not tensor_dict:
raise KeyError(f"Key {subpath} was not found in dataset")
return tensor_dict
@@ -193,10 +250,19 @@ def to_tensorflow(self):
num_samples=self.num_samples, offset=self.offset
)
- def to_pytorch(self, Transform=None):
+ def to_pytorch(
+ self,
+ transform=None,
+ inplace=True,
+ output_type=dict,
+ ):
"""Converts the dataset into a pytorch compatible format"""
return self.dataset.to_pytorch(
- Transform=Transform, num_samples=self.num_samples, offset=self.offset
+ transform=transform,
+ num_samples=self.num_samples,
+ offset=self.offset,
+ inplace=inplace,
+ output_type=output_type,
)
def resize_shape(self, size: int) -> None:
@@ -206,3 +272,21 @@ def resize_shape(self, size: int) -> None:
def commit(self) -> None:
"""Commit dataset"""
self.dataset.commit()
+
+ def numpy(self):
+ if self.num_samples == 1 and self.squeeze_dim:
+ return create_numpy_dict(self.dataset, self.offset)
+ else:
+ return [
+ create_numpy_dict(self.dataset, self.offset + i)
+ for i in range(self.num_samples)
+ ]
+
+ def disable_lazy(self):
+ self.lazy = False
+
+ def enable_lazy(self):
+ self.lazy = True
+
+ def compute(self):
+ return self.numpy()
diff --git a/hub/api/objectview.py b/hub/api/objectview.py
new file mode 100644
index 0000000000..66d0f22021
--- /dev/null
+++ b/hub/api/objectview.py
@@ -0,0 +1,327 @@
+from hub.api.datasetview import DatasetView
+from hub.schema import Sequence, Tensor, SchemaDict, Primitive
+from hub.api.dataset_utils import get_value, slice_extract_info, slice_split, str_to_int
+
+# from hub.exceptions import NoneValueException
+import collections.abc as abc
+import hub.api as api
+
+
+class ObjectView:
+ def __init__(
+ self,
+ dataset,
+ subpath=None,
+ slice_list=None,
+ nums=[],
+ offsets=[],
+ squeeze_dims=[],
+ inner_schema_obj=None,
+ lazy=True,
+ new=True,
+ ):
+ """Creates an ObjectView object for dataset from a Dataset, DatasetView or TensorView
+ object, or creates a different ObjectView from an existing one
+
+ Parameters
+ ----------
+ These parameters are used to create a new ObjectView.
+ dataset: hub.api.dataset.Dataset object
+ The dataset whose ObjectView is being created, or its DatasetView
+ subpath: str (optional)
+ A potentially incomplete path to any element in the Dataset
+ slice_list: optional
+ The `slice_` of this Tensor that needs to be accessed
+ lazy: bool, optional
+ Setting this to False will stop lazy computation and will allow items to be accessed without .compute()
+
+ These parameters are also needed to create an ObjectView from an existing one.
+ nums: List[int]
+ Number of elements in each dimension of the ObjectView to be created
+ offsets: List[int]
+ Starting element in each dimension of the ObjectView to be created
+ squeeze_dims: List[bool]
+ Whether each dimension can be squeezed or not
+ inner_schema_obj: Child of hub.schema.Tensor or hub.schema.SchemaDict
+ The deepest element in the schema upto which the previous ObjectView had been processed
+
+ new: bool
+ Whether to create a new ObjectView object from a Dataset, DatasetView or TensorView
+ or create a different ObjectView from an existing one
+ """
+ self.dataset = dataset
+ self.schema = (
+ dataset.schema.dict_
+ if not isinstance(dataset, DatasetView)
+ else dataset.dataset.schema.dict_
+ )
+ self.subpath = subpath
+
+ self.nums = nums
+ self.offsets = offsets
+ self.squeeze_dims = squeeze_dims
+
+ self.inner_schema_obj = inner_schema_obj
+ self.lazy = lazy
+
+ if new:
+ # Creating new obj
+ if self.subpath:
+ (
+ self.inner_schema_obj,
+ self.nums,
+ self.offsets,
+ self.squeeze_dims,
+ ) = self.process_path(
+ self.subpath,
+ self.inner_schema_obj,
+ self.nums.copy(),
+ self.offsets.copy(),
+ self.squeeze_dims.copy(),
+ )
+ # Check if dataset view needs to be made
+ if slice_list and len(slice_list) >= 1:
+ num, ofs = slice_extract_info(slice_list[0], dataset.shape[0])
+ self.dataset = DatasetView(
+ dataset, num, ofs, isinstance(slice_list[0], int)
+ )
+
+ if slice_list and len(slice_list) > 1:
+ slice_list = slice_list[1:]
+ if len(slice_list) > len(self.nums):
+ raise IndexError("Too many indices")
+ for i, it in enumerate(slice_list):
+ num, ofs = slice_extract_info(it, self.nums[i])
+ self.nums[i] = num
+ self.offsets[i] += ofs
+ self.squeeze_dims[i] = num == 1
+
+ def num_process(self, schema_obj, nums, offsets, squeeze_dims):
+ """Determines the maximum number of elements in each discovered dimension"""
+ if isinstance(schema_obj, SchemaDict):
+ return
+ elif isinstance(schema_obj, Sequence):
+ nums.append(0)
+ offsets.append(0)
+ squeeze_dims.append(False)
+ if isinstance(schema_obj.dtype, Tensor):
+ self.num_process(schema_obj.dtype, nums, offsets, squeeze_dims)
+ else:
+ for dim in schema_obj.max_shape:
+ nums.append(dim)
+ offsets.append(0)
+ squeeze_dims.append(False)
+ if not isinstance(schema_obj.dtype, Primitive) and not isinstance(
+ schema_obj, Sequence
+ ):
+ raise ValueError("Only sequences can be nested")
+
+ def process_path(self, subpath, inner_schema_obj, nums, offsets, squeeze_dims):
+ """Checks if a subpath is valid or not. Does not repeat computation done in a
+ previous ObjectView object"""
+ paths = subpath.split("/")[1:]
+ try:
+ # If key is invalid raises KeyError
+ # If schema object is not subscriptable raises AttributeError
+ if inner_schema_obj:
+ if isinstance(inner_schema_obj, Sequence):
+ schema_obj = inner_schema_obj.dtype.dict_[paths[0]]
+ elif isinstance(inner_schema_obj, SchemaDict):
+ schema_obj = inner_schema_obj.dict_[paths[0]]
+ else:
+ raise KeyError()
+ else:
+ schema_obj = self.schema[paths[0]]
+ except (KeyError, AttributeError):
+ raise KeyError(f"{paths[0]} is an invalid key")
+ self.num_process(schema_obj, nums, offsets, squeeze_dims)
+ for path in paths[1:]:
+ try:
+ if isinstance(schema_obj, Sequence):
+ schema_obj = schema_obj.dtype.dict_[path]
+ elif isinstance(schema_obj, SchemaDict):
+ schema_obj = schema_obj.dict_[path]
+ else:
+ raise KeyError()
+ self.num_process(schema_obj, nums, offsets, squeeze_dims)
+ except (KeyError, AttributeError):
+ raise KeyError(f"{path} is an invalid key")
+ return schema_obj, nums, offsets, squeeze_dims
+
+ def __getitem__(self, slice_):
+ """| Gets a slice from an objectview"""
+ if not isinstance(slice_, abc.Iterable) or isinstance(slice_, str):
+ slice_ = [slice_]
+ slice_ = list(slice_)
+ subpath, slice_list = slice_split(slice_)
+
+ dataset = self.dataset
+ nums, offsets, squeeze_dims, inner_schema_obj = (
+ self.nums.copy(),
+ self.offsets.copy(),
+ self.squeeze_dims.copy(),
+ self.inner_schema_obj,
+ )
+
+ if subpath:
+ inner_schema_obj, nums, offsets, squeeze_dims = self.process_path(
+ subpath, inner_schema_obj, nums, offsets, squeeze_dims
+ )
+ subpath = self.subpath + subpath
+ if len(slice_list) >= 1:
+ # Slice first dim
+ if isinstance(self.dataset, DatasetView) and not self.dataset.squeeze_dim:
+ dataset = self.dataset[slice_list[0]]
+ slice_list = slice_list[1:]
+ elif not isinstance(self.dataset, DatasetView):
+ num, ofs = slice_extract_info(slice_list[0], self.dataset.shape[0])
+ dataset = DatasetView(
+ self.dataset, num, ofs, isinstance(slice_list[0], int)
+ )
+ slice_list = slice_list[1:]
+
+ # Expand slice list for rest of dims
+ if len(slice_list) >= 1:
+ exp_slice_list = []
+ for squeeze in squeeze_dims:
+ if squeeze:
+ exp_slice_list += [None]
+ else:
+ if len(slice_list) > 0:
+ exp_slice_list += [slice_list.pop(0)]
+ else:
+ # slice list smaller than max
+ exp_slice_list += [None]
+ if len(slice_list) > 0:
+ # slice list longer than max
+ raise IndexError("Too many indices")
+ for i, it in enumerate(exp_slice_list):
+ if it is not None:
+ num, ofs = slice_extract_info(it, nums[i])
+ nums[i] = num
+ offsets[i] += ofs
+ squeeze_dims[i] = num == 1
+ objectview = ObjectView(
+ dataset=dataset,
+ subpath=subpath,
+ slice_list=None,
+ nums=nums,
+ offsets=offsets,
+ squeeze_dims=squeeze_dims,
+ inner_schema_obj=inner_schema_obj,
+ lazy=self.lazy,
+ new=False,
+ )
+ return objectview if self.lazy else objectview.compute()
+
+ def numpy(self):
+ """Gets the value from the objectview"""
+ if not isinstance(self.dataset, DatasetView):
+ # subpath present but no slice done
+ if len(self.subpath.split("/")[1:]) > 1:
+ raise IndexError("Can only go deeper on single datapoint")
+ if not self.dataset.squeeze_dim:
+ # return a combined tensor for multiple datapoints
+ # only possible if the field has a fixed size
+ paths = self.subpath.split("/")[1:]
+ if len(paths) > 1:
+ raise IndexError("Can only go deeper on single datapoint")
+ else:
+ # single datapoint
+ paths = self.subpath.split("/")[1:]
+ schema = self.schema[paths[0]]
+ slice_ = [
+ ofs if sq else slice(ofs, ofs + num) if num else slice(None, None)
+ for ofs, num, sq in zip(self.offsets, self.nums, self.squeeze_dims)
+ ]
+ if isinstance(schema, Sequence):
+ if isinstance(schema.dtype, SchemaDict):
+ # if sequence of dict, have to fetch everything
+ value = self.dataset[paths[0]].compute()
+ for path in paths[1:]:
+ value = value[path]
+ try:
+ return value[tuple(slice_)]
+ except TypeError:
+ # raise error
+ return value
+ except KeyError:
+ raise KeyError("Invalid slice")
+ else:
+ # sequence of tensors
+ return self.dataset[paths[0]].compute()[tuple(slice_)]
+
+ def compute(self):
+ return self.numpy()
+
+ def __setitem__(self, slice_, value):
+ """| Sets a slice of the objectview with a value"""
+ if isinstance(slice_, slice) and (slice_.start is None and slice_.stop is None):
+ objview = self
+ else:
+ objview = self.__getitem__(slice_)
+ assign_value = get_value(value)
+
+ if not isinstance(objview.dataset, DatasetView):
+ # subpath present but no slice done
+ assign_value = str_to_int(assign_value, objview.dataset.tokenizer)
+ if len(objview.subpath.split("/")[1:]) > 1:
+ raise IndexError("Can only go deeper on single datapoint")
+ if not objview.dataset.squeeze_dim:
+ # assign a combined tensor for multiple datapoints
+ # only possible if the field has a fixed size
+ assign_value = str_to_int(assign_value, objview.dataset.dataset.tokenizer)
+ paths = objview.subpath.split("/")[1:]
+ if len(paths) > 1:
+ raise IndexError("Can only go deeper on single datapoint")
+ else:
+ # single datapoint
+ def assign(paths, value):
+ # helper function for recursive assign
+ if len(paths) > 0:
+ path = paths.pop(0)
+ value[path] = assign(paths, value[path])
+ return value
+ try:
+ value[tuple(slice_)] = assign_value
+ except TypeError:
+ value = assign_value
+ return value
+
+ assign_value = str_to_int(assign_value, objview.dataset.dataset.tokenizer)
+ paths = objview.subpath.split("/")[1:]
+ schema = objview.schema[paths[0]]
+ slice_ = [
+ of if sq else slice(of, of + num) if num else slice(None, None)
+ for num, of, sq in zip(
+ objview.nums, objview.offsets, objview.squeeze_dims
+ )
+ ]
+ if isinstance(schema, Sequence):
+ if isinstance(schema.dtype, SchemaDict):
+ # if sequence of dict, have to fetch everything
+ value = objview.dataset[paths[0]].compute()
+ value = assign(paths[1:], value)
+ objview.dataset[paths[0]] = value
+ else:
+ # sequence of tensors
+ value = objview.dataset[paths[0]].compute()
+ value[tuple(slice_)] = assign_value
+ objview.dataset[paths[0]] = value
+
+ def __str__(self):
+ if isinstance(self.dataset, DatasetView):
+ slice_ = [
+ self.dataset.offset
+ if self.dataset.squeeze_dim
+ else slice(
+ self.dataset.offset, self.dataset.offset + self.dataset.num_samples
+ )
+ ]
+ else:
+ slice_ = [slice(None, None)]
+ slice_ += [
+ ofs if sq else slice(ofs, ofs + num) if num else slice(None, None)
+ for ofs, num, sq in zip(self.offsets, self.nums, self.squeeze_dims)
+ ]
+ return f"ObjectView(subpath='{self.subpath}', slice={str(slice_)})"
diff --git a/hub/api/tensorview.py b/hub/api/tensorview.py
index 3a13b7dae8..6f2fa55cd2 100644
--- a/hub/api/tensorview.py
+++ b/hub/api/tensorview.py
@@ -1,7 +1,8 @@
import hub
import collections.abc as abc
-from hub.api.dataset_utils import slice_split, str_to_int
+from hub.api.dataset_utils import get_value, slice_split, str_to_int
from hub.exceptions import NoneValueException
+import hub.api.objectview as objv
class TensorView:
@@ -10,7 +11,7 @@ def __init__(
dataset=None,
subpath=None,
slice_=None,
- squeeze_dims=[],
+ lazy: bool = True,
):
"""Creates a TensorView object for a particular tensor in the dataset
@@ -22,6 +23,8 @@ def __init__(
The full path to the particular Tensor in the Dataset
slice_: optional
The `slice_` of this Tensor that needs to be accessed
+ lazy: bool, optional
+ Setting this to False will stop lazy computation and will allow items to be accessed without .compute()
"""
if dataset is None:
@@ -31,10 +34,11 @@ def __init__(
self.dataset = dataset
self.subpath = subpath
+ self.lazy = lazy
- if isinstance(slice_, int) or isinstance(slice_, slice):
+ if isinstance(slice_, (int, slice)):
self.slice_ = [slice_]
- elif isinstance(slice_, tuple) or isinstance(slice_, list):
+ elif isinstance(slice_, (tuple, list)):
self.slice_ = list(slice_)
self.nums = []
self.offsets = []
@@ -46,7 +50,7 @@ def __init__(
self.offsets.append(it)
self.squeeze_dims.append(True)
elif isinstance(it, slice):
- ofs = it.start if it.start else 0
+ ofs = it.start or 0
num = it.stop - ofs if it.stop else None
self.nums.append(num)
self.offsets.append(ofs)
@@ -69,9 +73,9 @@ def numpy(self):
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
if value.ndim == 1:
return tokenizer.decode(value.tolist())
- else:
- if value.ndim == 1:
- return "".join(chr(it) for it in value.tolist())
+ elif value.ndim == 1:
+ return "".join(chr(it) for it in value.tolist())
+ raise ValueError("Can only access Text with integer index")
return self.dataset._tensors[self.subpath][self.slice_]
def compute(self):
@@ -91,28 +95,38 @@ def __getitem__(self, slice_):
slice_ = self.slice_fill(slice_)
subpath, slice_list = slice_split(slice_)
- if subpath:
- raise ValueError("Can't slice a Tensor with string")
+ new_nums = self.nums.copy()
+ new_offsets = self.offsets.copy()
+ if len(new_nums) < len(slice_list):
+ new_nums.extend([None] * (len(slice_list) - len(new_nums)))
+ new_offsets.extend([0] * (len(slice_list) - len(new_offsets)))
+ for i in range(len(slice_list)):
+ slice_list[i] = self._combine(slice_list[i], new_nums[i], new_offsets[i])
+ for i in range(len(slice_list), len(new_nums)):
+ cur_slice = (
+ slice(new_offsets[i], new_offsets[i] + new_nums[i])
+ if new_nums[i] > 1
+ else new_offsets[i]
+ )
+ slice_list.append(cur_slice)
+ if subpath or (
+ len(slice_list) > len(self.nums) and isinstance(self.dtype, objv.Sequence)
+ ):
+ objectview = objv.ObjectView(
+ dataset=self.dataset,
+ subpath=self.subpath + subpath,
+ slice_list=slice_list,
+ lazy=self.lazy,
+ )
+ return objectview if self.lazy else objectview.compute()
else:
- new_nums = self.nums.copy()
- new_offsets = self.offsets.copy()
- if len(new_nums) < len(slice_list):
- new_nums.extend([None] * (len(slice_list) - len(new_nums)))
- new_offsets.extend([0] * (len(slice_list) - len(new_offsets)))
- for i in range(len(slice_list)):
- slice_list[i] = self._combine(
- slice_list[i], new_nums[i], new_offsets[i]
- )
- for i in range(len(slice_list), len(new_nums)):
- cur_slice = (
- slice(new_offsets[i], new_offsets[i] + new_nums[i])
- if new_nums[i] > 1
- else new_offsets[i]
- )
- slice_list.append(cur_slice)
- return TensorView(
- dataset=self.dataset, subpath=self.subpath, slice_=slice_list
+ tensorview = TensorView(
+ dataset=self.dataset,
+ subpath=self.subpath,
+ slice_=slice_list,
+ lazy=self.lazy,
)
+ return tensorview if self.lazy else tensorview.compute()
def __setitem__(self, slice_, value):
"""| Sets a slice or slices with a value
@@ -121,8 +135,8 @@ def __setitem__(self, slice_, value):
>>> images_tensorview = ds["image"]
>>> images_tensorview[7, 0:1920, 0:1080, 0:3] = np.zeros((1920, 1080, 3), "uint8") # sets 7th image
"""
+ assign_value = get_value(value)
# handling strings and bytes
- assign_value = value
assign_value = str_to_int(assign_value, self.dataset.tokenizer)
if not isinstance(slice_, abc.Iterable) or isinstance(slice_, str):
@@ -130,26 +144,29 @@ def __setitem__(self, slice_, value):
slice_ = list(slice_)
slice_ = self.slice_fill(slice_)
subpath, slice_list = slice_split(slice_)
-
- if subpath:
- raise ValueError(
- "Can't slice a Tensor with multiple slices without subpath"
+ new_nums = self.nums.copy()
+ new_offsets = self.offsets.copy()
+ if len(new_nums) < len(slice_list):
+ new_nums.extend([None] * (len(slice_list) - len(new_nums)))
+ new_offsets.extend([0] * (len(slice_list) - len(new_offsets)))
+ for i in range(len(slice_list)):
+ slice_list[i] = self._combine(slice_list[i], new_nums[i], new_offsets[i])
+ for i in range(len(slice_list), len(new_nums)):
+ cur_slice = (
+ slice(new_offsets[i], new_offsets[i] + new_nums[i])
+ if new_nums[i] > 1
+ else new_offsets[i]
)
+ slice_list.append(cur_slice)
+ if subpath or (
+ len(slice_list) > len(self.nums) and isinstance(self.dtype, objv.Sequence)
+ ):
+ objv.ObjectView(
+ dataset=self.dataset,
+ subpath=self.subpath + subpath,
+ slice_list=slice_list,
+ )[:] = assign_value
else:
- new_nums = self.nums.copy()
- new_offsets = self.offsets.copy()
- if len(new_nums) < len(slice_list):
- new_nums.extend([None] * (len(slice_list) - len(new_nums)))
- new_offsets.extend([0] * (len(slice_list) - len(new_offsets)))
- for i in range(len(slice_list)):
- slice_list[i] = self._combine(slice_[i], new_nums[i], new_offsets[i])
- for i in range(len(slice_list), len(new_nums)):
- cur_slice = (
- slice(new_offsets[i], new_offsets[i] + new_nums[i])
- if new_nums[i] > 1
- else new_offsets[i]
- )
- slice_list.append(cur_slice)
self.dataset._tensors[self.subpath][slice_list] = assign_value
def _combine(self, slice_, num=None, ofs=0):
@@ -163,13 +180,13 @@ def _combine(self, slice_, num=None, ofs=0):
)
if slice_.start is None and slice_.stop is None:
return slice(ofs, None) if num is None else slice(ofs, ofs + num)
- elif slice_.start is not None and slice_.stop is None:
+ elif slice_.stop is None:
return (
slice(ofs + slice_.start, None)
if num is None
else slice(ofs + slice_.start, ofs + num)
)
- elif slice_.start is None and slice_.stop is not None:
+ elif slice_.start is None:
return slice(ofs, ofs + slice_.stop)
else:
return slice(ofs + slice_.start, ofs + slice_.stop)
@@ -208,7 +225,7 @@ def slice_fill(self, slice_):
elif offset < len(slice_):
new_slice_.append(slice_[offset])
offset += 1
- new_slice_ = new_slice_ + slice_[offset:]
+ new_slice_ += slice_[offset:]
return new_slice_
def __repr__(self):
@@ -249,3 +266,9 @@ def chunksize(self):
@property
def is_dynamic(self):
return self.dataset._tensors[self.subpath].is_dynamic
+
+ def disable_lazy(self):
+ self.lazy = False
+
+ def enable_lazy(self):
+ self.lazy = True
diff --git a/hub/api/tests/test_converters.py b/hub/api/tests/test_converters.py
index a4f1441931..9dde363ce8 100644
--- a/hub/api/tests/test_converters.py
+++ b/hub/api/tests/test_converters.py
@@ -83,6 +83,35 @@ def test_to_from_tensorflow():
assert (res_ds["label", "d", "e", i].numpy() == i * np.ones((5, 3))).all()
+@pytest.mark.skipif(not tensorflow_loaded(), reason="requires tensorflow to be loaded")
+def test_to_from_tensorflow_datasetview():
+ my_schema = {
+ "image": Tensor((10, 1920, 1080, 3), "uint8"),
+ "label": {
+ "a": Tensor((100, 200), "int32"),
+ "b": Tensor((100, 400), "int64"),
+ "c": Tensor((5, 3), "uint8"),
+ "d": {"e": Tensor((5, 3), "uint8")},
+ "f": "float",
+ },
+ }
+
+ ds = hub.Dataset(
+ schema=my_schema, shape=(10,), url="./data/test_from_tf/ds4", mode="w"
+ )
+ for i in range(10):
+ ds["label", "d", "e", i] = i * np.ones((5, 3))
+ dsv = ds[5:]
+ tds = dsv.to_tensorflow()
+ out_ds = hub.Dataset.from_tensorflow(tds)
+ res_ds = out_ds.store(
+ "./data/test_from_tf/ds6", length=5
+ ) # generator has no length, argument needed
+
+ for i in range(5):
+ assert (res_ds["label", "d", "e", i].numpy() == (5 + i) * np.ones((5, 3))).all()
+
+
@pytest.mark.skipif(not pytorch_loaded(), reason="requires pytorch to be loaded")
def test_to_pytorch():
import torch
@@ -126,7 +155,7 @@ def transform(data):
label = recursive_torch_tensor(label)
return (image, label)
- dst = ds.to_pytorch(Transform=transform, inplace=False)
+ dst = ds.to_pytorch(transform=transform, inplace=False)
dl = torch.utils.data.DataLoader(
dst,
batch_size=1,
@@ -145,6 +174,69 @@ def transform(data):
assert type(d) == tuple
+@pytest.mark.skipif(not pytorch_loaded(), reason="requires pytorch to be loaded")
+def test_to_pytorch_datasetview():
+ import torch
+
+ my_schema = {
+ "image": Tensor((10, 1920, 1080, 3), "uint8"),
+ "label": {
+ "a": Tensor((100, 200), "int32"),
+ "b": Tensor((100, 400), "int64"),
+ "c": Tensor((5, 3), "uint8"),
+ "d": {"e": Tensor((5, 3), "uint8")},
+ "f": "float",
+ },
+ }
+ ds = hub.Dataset(
+ schema=my_schema, shape=(10,), url="./data/test_from_tf/ds5", mode="w"
+ )
+ for i in range(10):
+ ds["label", "d", "e", i] = i * np.ones((5, 3))
+ # pure conversion
+ dsv = ds[3:]
+ ptds = dsv.to_pytorch()
+ dl = torch.utils.data.DataLoader(
+ ptds,
+ batch_size=1,
+ )
+ for i, batch in enumerate(dl):
+ assert (batch["label"]["d"]["e"].numpy() == (3 + i) * np.ones((5, 3))).all()
+
+ # with transforms and inplace=False
+ def recursive_torch_tensor(label):
+ for key, value in label.items():
+ if type(value) is dict:
+ label[key] = recursive_torch_tensor(value)
+ else:
+ label[key] = torch.tensor(value)
+ return label
+
+ def transform(data):
+ image = torch.tensor(data["image"])
+ label = data["label"]
+ label = recursive_torch_tensor(label)
+ return (image, label)
+
+ dst = dsv.to_pytorch(transform=transform, inplace=False)
+ dl = torch.utils.data.DataLoader(
+ dst,
+ batch_size=1,
+ )
+ for i, batch in enumerate(dl):
+ assert (batch[1]["d"]["e"].numpy() == (3 + i) * np.ones((5, 3))).all()
+
+ # output_type = list
+ dst = ds.to_pytorch(output_type=list)
+ for i, d in enumerate(dst):
+ assert type(d) == list
+
+ # output_type = tuple
+ dst = ds.to_pytorch(output_type=tuple)
+ for i, d in enumerate(dst):
+ assert type(d) == tuple
+
+
@pytest.mark.skipif(not pytorch_loaded(), reason="requires pytorch to be loaded")
def test_from_pytorch():
from torch.utils.data import Dataset
@@ -215,7 +307,6 @@ def test_to_from_pytorch():
if __name__ == "__main__":
-
with Timer("Test Converters"):
with Timer("from MNIST"):
test_from_tfds_mnist()
diff --git a/hub/api/tests/test_dataset.py b/hub/api/tests/test_dataset.py
index a5b8b05c60..d6106b09cd 100644
--- a/hub/api/tests/test_dataset.py
+++ b/hub/api/tests/test_dataset.py
@@ -1,11 +1,14 @@
+import os
+from hub.cli.auth import login_fn
from hub.exceptions import HubException
import numpy as np
import pytest
-
+from hub import transform
import hub.api.dataset as dataset
from hub.schema import Tensor, Text, Image
from hub.utils import (
gcp_creds_exist,
+ hub_creds_exist,
s3_creds_exist,
azure_creds_exist,
transformers_loaded,
@@ -27,13 +30,24 @@
def test_dataset2():
dt = {"first": "float", "second": "float"}
ds = Dataset(schema=dt, shape=(2,), url="./data/test/test_dataset2", mode="w")
+ ds.meta_information["description"] = "This is my description"
ds["first"][0] = 2.3
+ assert ds.meta_information["description"] == "This is my description"
assert ds["second"][0].numpy() != 2.3
def test_dataset_append_and_read():
dt = {"first": "float", "second": "float"}
+ ds = Dataset(
+ schema=dt,
+ shape=(2,),
+ url="./data/test/test_dataset_append_and_read",
+ mode="w",
+ )
+
+ ds.delete()
+
ds = Dataset(
schema=dt,
shape=(2,),
@@ -42,6 +56,7 @@ def test_dataset_append_and_read():
)
ds["first"][0] = 2.3
+ assert ds.meta_information["description"] == "This is my description"
assert ds["second"][0].numpy() != 2.3
ds.close()
@@ -49,14 +64,18 @@ def test_dataset_append_and_read():
url="./data/test/test_dataset_append_and_read",
mode="r",
)
+ assert ds.meta_information["description"] == "This is my description"
+ ds.meta_information["hello"] = 5
ds.delete()
ds.close()
# TODO Add case when non existing dataset is opened in read mode
-def test_dataset(url="./data/test/dataset", token=None):
- ds = Dataset(url, token=token, shape=(10000,), mode="w", schema=my_schema)
+def test_dataset(url="./data/test/dataset", token=None, public=True):
+ ds = Dataset(
+ url, token=token, shape=(10000,), mode="w", schema=my_schema, public=public
+ )
sds = ds[5]
sds["label/a", 50, 50] = 2
@@ -226,10 +245,37 @@ def test_dataset_bug_2(url="./data/test/dataset", token=None):
ds["image", 0:1] = [np.zeros((100, 100))]
+def test_dataset_bug_3(url="./data/test/dataset", token=None):
+ my_schema = {
+ "image": Tensor((100, 100), "uint8"),
+ }
+ ds = Dataset(url, token=token, shape=(10000,), mode="w", schema=my_schema)
+ ds.close()
+ ds = Dataset(url)
+ ds["image", 0:1] = [np.zeros((100, 100))]
+
+
+def test_dataset_wrong_append(url="./data/test/dataset", token=None):
+ my_schema = {
+ "image": Tensor((100, 100), "uint8"),
+ }
+ ds = Dataset(url, token=token, shape=(10000,), mode="w", schema=my_schema)
+ ds.close()
+ try:
+ ds = Dataset(url, shape=100)
+ except Exception as ex:
+ assert isinstance(ex, TypeError)
+
+ try:
+ ds = Dataset(url, schema={"hello": "uint8"})
+ except Exception as ex:
+ assert isinstance(ex, TypeError)
+
+
def test_dataset_no_shape(url="./data/test/dataset", token=None):
try:
Tensor(shape=(120, 120, 3), max_shape=(120, 120, 4))
- except HubException:
+ except ValueError:
pass
@@ -257,6 +303,14 @@ def test_dataset_batch_write_2():
ds["image", 0:14] = [np.ones((640 - i, 640, 3)) for i in range(14)]
+@pytest.mark.skipif(not hub_creds_exist(), reason="requires hub credentials")
+def test_dataset_hub():
+ password = os.getenv("ACTIVELOOP_HUB_PASSWORD")
+ login_fn("testingacc", password)
+ test_dataset("testingacc/test_dataset_private", public=False)
+ test_dataset("testingacc/test_dataset_public")
+
+
@pytest.mark.skipif(not gcp_creds_exist(), reason="requires gcp credentials")
def test_dataset_gcs():
test_dataset("gcs://snark-test/test_dataset_gcs")
@@ -280,17 +334,33 @@ def test_dataset_azure():
def test_datasetview_slicing():
dt = {"first": Tensor((100, 100))}
- ds = Dataset(schema=dt, shape=(20,), url="./data/test/model", mode="w")
-
+ ds = Dataset(
+ schema=dt, shape=(20,), url="./data/test/datasetview_slicing", mode="w"
+ )
assert ds["first", 0].numpy().shape == (100, 100)
assert ds["first", 0:1].numpy().shape == (1, 100, 100)
assert ds[0]["first"].numpy().shape == (100, 100)
assert ds[0:1]["first"].numpy().shape == (1, 100, 100)
+def test_datasetview_get_dictionary():
+ ds = Dataset(
+ schema=my_schema,
+ shape=(20,),
+ url="./data/test/datasetview_get_dictionary",
+ mode="w",
+ )
+ ds["label", 5, "a"] = 5 * np.ones((100, 200))
+ ds["label", 5, "d", "e"] = 3 * np.ones((5, 3))
+ dsv = ds[2:10]
+ dic = dsv[3, "label"]
+ assert (dic["a"].compute() == 5 * np.ones((100, 200))).all()
+ assert (dic["d"]["e"].compute() == 3 * np.ones((5, 3))).all()
+
+
def test_tensorview_slicing():
dt = {"first": Tensor(shape=(None, None), max_shape=(250, 300))}
- ds = Dataset(schema=dt, shape=(20,), url="./data/test/model", mode="w")
+ ds = Dataset(schema=dt, shape=(20,), url="./data/test/tensorivew_slicing", mode="w")
tv = ds["first", 5:6, 7:10, 9:10]
assert tv.numpy().shape == tuple(tv.shape) == (1, 3, 1)
tv2 = ds["first", 5:6, 7:10, 9]
@@ -355,12 +425,213 @@ def test_append_dataset():
assert ds["second"].shape[0] == 120
+def test_meta_information():
+ description = {"author": "testing", "description": "here goes the testing text"}
+
+ description_changed = {
+ "author": "changed author",
+ "description": "now it's changed",
+ }
+
+ schema = {"text": Text((None,), max_shape=(1000,))}
+
+ ds = Dataset(
+ "./data/test_meta",
+ shape=(10,),
+ schema=schema,
+ meta_information=description,
+ mode="w",
+ )
+
+ some_text = ["hello world", "hello penguin", "hi penguin"]
+
+ for i, text in enumerate(some_text):
+ ds["text", i] = text
+
+ assert type(ds.meta["meta_info"]) == dict
+ assert ds.meta["meta_info"]["author"] == "testing"
+ assert ds.meta["meta_info"]["description"] == "here goes the testing text"
+
+ ds.close()
+
+
+def test_dataset_compute():
+ dt = {
+ "first": Tensor(shape=(2,)),
+ "second": "float",
+ "text": Text(shape=(None,), max_shape=(12,)),
+ }
+ url = "./data/test/ds_compute"
+ ds = Dataset(schema=dt, shape=(2,), url=url, mode="w")
+ ds["text", 1] = "hello world"
+ ds["second", 0] = 3.14
+ ds["first", 0] = np.array([5, 6])
+ comp = ds.compute()
+ comp0 = comp[0]
+ assert (comp0["first"] == np.array([5, 6])).all()
+ assert comp0["second"] == 3.14
+ assert comp0["text"] == ""
+ comp1 = comp[1]
+ assert (comp1["first"] == np.array([0, 0])).all()
+ assert comp1["second"] == 0
+ assert comp1["text"] == "hello world"
+
+
+def test_dataset_view_compute():
+ dt = {
+ "first": Tensor(shape=(2,)),
+ "second": "float",
+ "text": Text(shape=(None,), max_shape=(12,)),
+ }
+ url = "./data/test/dsv_compute"
+ ds = Dataset(schema=dt, shape=(4,), url=url, mode="w")
+ ds["text", 3] = "hello world"
+ ds["second", 2] = 3.14
+ ds["first", 2] = np.array([5, 6])
+ dsv = ds[2:]
+ comp = dsv.compute()
+ comp0 = comp[0]
+ assert (comp0["first"] == np.array([5, 6])).all()
+ assert comp0["second"] == 3.14
+ assert comp0["text"] == ""
+ comp1 = comp[1]
+ assert (comp1["first"] == np.array([0, 0])).all()
+ assert comp1["second"] == 0
+ assert comp1["text"] == "hello world"
+
+
+def test_dataset_lazy():
+ dt = {
+ "first": Tensor(shape=(2,)),
+ "second": "float",
+ "text": Text(shape=(None,), max_shape=(12,)),
+ }
+ url = "./data/test/ds_lazy"
+ ds = Dataset(schema=dt, shape=(2,), url=url, mode="w", lazy=False)
+ ds["text", 1] = "hello world"
+ ds["second", 0] = 3.14
+ ds["first", 0] = np.array([5, 6])
+ assert ds["text", 1] == "hello world"
+ assert ds["second", 0] == 3.14
+ assert (ds["first", 0] == np.array([5, 6])).all()
+
+
+def test_dataset_view_lazy():
+ dt = {
+ "first": Tensor(shape=(2,)),
+ "second": "float",
+ "text": Text(shape=(None,), max_shape=(12,)),
+ }
+ url = "./data/test/dsv_lazy"
+ ds = Dataset(schema=dt, shape=(4,), url=url, mode="w", lazy=False)
+ ds["text", 3] = "hello world"
+ ds["second", 2] = 3.14
+ ds["first", 2] = np.array([5, 6])
+ dsv = ds[2:]
+ assert dsv["text", 1] == "hello world"
+ assert dsv["second", 0] == 3.14
+ assert (dsv["first", 0] == np.array([5, 6])).all()
+
+
+def test_datasetview_repr():
+ dt = {
+ "first": Tensor(shape=(2,)),
+ "second": "float",
+ "text": Text(shape=(None,), max_shape=(12,)),
+ }
+ url = "./data/test/dsv_repr"
+ ds = Dataset(schema=dt, shape=(9,), url=url, mode="w", lazy=False)
+ dsv = ds[2:]
+ print_text = "DatasetView(Dataset(schema=SchemaDict({'first': Tensor(shape=(2,), dtype='float64'), 'second': 'float64', 'text': Text(shape=(None,), dtype='int64', max_shape=(12,))})url='./data/test/dsv_repr', shape=(9,), mode='w'), slice=slice(2, 9, None))"
+ assert dsv.__repr__() == print_text
+
+
+def test_dataset_casting():
+ my_schema = {
+ "a": Tensor(shape=(1,), dtype="float64"),
+ }
+
+ @transform(schema=my_schema)
+ def my_transform(annotation):
+ return {
+ "a": 2.4,
+ }
+
+ out_ds = my_transform(range(100))
+ res_ds = out_ds.store("./data/casting")
+ assert res_ds["a", 30].compute() == np.array([2.4])
+
+ ds = Dataset(schema=my_schema, url="./data/casting2", shape=(100,))
+ for i in range(100):
+ ds["a", i] = 0.2
+ assert ds["a", 30].compute() == np.array([0.2])
+
+ ds2 = Dataset(schema=my_schema, url="./data/casting3", shape=(100,))
+ ds2["a", 0:100] = np.ones(
+ 100,
+ )
+ assert ds2["a", 30].compute() == np.array([1])
+
+
+def test_dataset_setting_shape():
+ schema = {"text": Text(shape=(None,), dtype="int64", max_shape=(10,))}
+
+ url = "./data/test/text_data"
+ ds = Dataset(schema=schema, shape=(5,), url=url, mode="w")
+ slice_ = slice(0, 5, None)
+ key = "text"
+ batch = [
+ np.array("THTMLY2F9"),
+ np.array("QUUVEU2IU"),
+ np.array("8ZUFCYWKD"),
+ "H9EDFAGHB",
+ "WDLDYN6XG",
+ ]
+ shape = ds._tensors[f"/{key}"].get_shape_from_value([slice_], batch)
+ assert shape[0][0] == [1]
+
+
+def test_dataset_assign_value():
+ schema = {"text": Text(shape=(None,), dtype="int64", max_shape=(10,))}
+ url = "./data/test/text_data"
+ ds = Dataset(schema=schema, shape=(7,), url=url, mode="w")
+ slice_ = slice(0, 5, None)
+ key = "text"
+ batch = [
+ np.array("THTMLY2F9"),
+ np.array("QUUVEU2IU"),
+ np.array("8ZUFCYWKD"),
+ "H9EDFAGHB",
+ "WDLDYN6XG",
+ ]
+ ds[key, slice_] = batch
+ ds[key][5] = np.array("GHLSGBFF8")
+ ds[key][6] = "YGFJN75NF"
+ assert ds["text", 0].compute() == "THTMLY2F9"
+ assert ds["text", 1].compute() == "QUUVEU2IU"
+ assert ds["text", 2].compute() == "8ZUFCYWKD"
+ assert ds["text", 3].compute() == "H9EDFAGHB"
+ assert ds["text", 4].compute() == "WDLDYN6XG"
+ assert ds["text", 5].compute() == "GHLSGBFF8"
+ assert ds["text", 6].compute() == "YGFJN75NF"
+
+
if __name__ == "__main__":
- # test_tensorview_slicing()
- # test_datasetview_slicing()
- # test_dataset()
+ test_dataset_assign_value()
+ test_dataset_setting_shape()
+ test_datasetview_repr()
+ test_datasetview_get_dictionary()
+ test_tensorview_slicing()
+ test_datasetview_slicing()
+ test_dataset()
test_dataset_batch_write_2()
test_append_dataset()
test_dataset2()
test_text_dataset()
test_text_dataset_tokenizer()
+ test_dataset_compute()
+ test_dataset_view_compute()
+ test_dataset_lazy()
+ test_dataset_view_lazy()
+ test_dataset_hub()
+ test_meta_information()
diff --git a/hub/api/tests/test_objectview.py b/hub/api/tests/test_objectview.py
new file mode 100644
index 0000000000..53197f3267
--- /dev/null
+++ b/hub/api/tests/test_objectview.py
@@ -0,0 +1,122 @@
+import numpy as np
+import hub
+from hub.schema import Tensor, Image, Text, Sequence, SchemaDict, BBox
+import pytest
+
+
+def test_objectview():
+ schema = SchemaDict(
+ {
+ "a": Tensor((20, 20), dtype=int, max_shape=(20, 20)),
+ "b": Sequence(dtype=BBox(dtype=float)),
+ "c": Sequence(
+ dtype=SchemaDict({"d": Sequence((), dtype=Tensor((5, 5), dtype=float))})
+ ),
+ "e": Sequence(
+ dtype={"f": {"g": Tensor(5, dtype=int), "h": Tensor((), dtype=int)}}
+ ),
+ }
+ )
+ ds = hub.Dataset("./nested_seq", shape=(5,), mode="w", schema=schema)
+
+ # dataset view to objectview
+ dv = ds[3:5]
+ dv["c", 0] = {"d": 5 * np.ones((2, 2, 5, 5))}
+ assert (dv[0, "c", 0, "d", 0].compute() == 5 * np.ones((5, 5))).all()
+
+ # dataset view unsqueezed
+ with pytest.raises(IndexError):
+ dv["c", "d"].compute()
+ with pytest.raises(IndexError):
+ dv["c", "d"] = np.ones((2, 3, 3, 5, 5))
+
+ # dataset unsqueezed
+ with pytest.raises(IndexError):
+ ds["c", "d"].compute()
+ with pytest.raises(IndexError):
+ ds["c", "d"] = np.ones((5, 3, 3, 5, 5))
+
+ # tensorview to object view
+ # sequence of tensor
+ ds["b", 0] = 0.5 * np.ones((5, 4))
+ tv = ds["b", 0]
+ tv[0] = 0.3 * np.ones((4,))
+ assert (tv[0].compute() == 0.3 * np.ones((4,))).all()
+
+ # ds to object view
+ assert (ds[3, "c", "d"].compute() == 5 * np.ones((2, 2, 5, 5))).all()
+
+ # Sequence of schemadicts
+ ds[0, "e"] = {"f": {"g": np.ones((3, 5)), "h": np.ones(3)}}
+ ds[0, "e", 0, "f", "h"] = 42
+ # The first slice is unstable but the complete slice is valid
+ ds[0, "e", 1]["f", "h"] = 25
+ with pytest.raises(KeyError):
+ ds[0, "e", 1].compute()
+ ds[0, "e"][2]["f"]["h"] = 15
+ assert (ds[0, "e", "f", "h"].compute() == np.array([42, 25, 15])).all()
+ # With dataset view
+ dv[0, "e"] = {"f": {"g": np.ones((3, 5)), "h": np.ones(3)}}
+ dv[0, "e", 1]["f", "h"] = 25
+ assert (dv[0, "e", "f", "h"].compute() == np.array([1, 25, 1])).all()
+ # if not lazy mode all slices should be stable
+ ds.lazy = False
+ assert ds[0, "e", 0, "f", "h"] == 42
+ with pytest.raises(KeyError):
+ ds[0, "e", 1]["f", "h"] == 25
+ ds.lazy = True
+
+ # make an objectview
+ ov = ds["c", "d"]
+ with pytest.raises(IndexError):
+ ov.compute()
+ assert (ov[3].compute() == 5 * np.ones((2, 2, 5, 5))).all()
+ ov[3, 1] = 2 * np.ones((2, 5, 5))
+ assert (ov[3][0, 0].compute() == 5 * np.ones((5, 5))).all()
+ assert (ov[3][1].compute() == 2 * np.ones((2, 5, 5))).all()
+
+
+def test_errors():
+ schema = SchemaDict(
+ {
+ "a": Tensor((None, None), dtype=int, max_shape=(20, 20)),
+ "b": Sequence(
+ dtype=SchemaDict(
+ {"e": Tensor((None,), max_shape=(10,), dtype=BBox(dtype=float))}
+ )
+ ),
+ "c": Sequence(
+ dtype=SchemaDict({"d": Sequence((), dtype=Tensor((5, 5), dtype=float))})
+ ),
+ }
+ )
+ ds = hub.Dataset("./nested_seq", shape=(5,), mode="w", schema=schema)
+
+ # Invalid schema
+ with pytest.raises(ValueError):
+ ds["b", 0, "e", 1]
+
+ # Too many indices
+ with pytest.raises(IndexError):
+ ds["c", 0, "d", 1, 1, 0, 0, 0]
+ with pytest.raises(IndexError):
+ ds["c", :2, "d"][0, 1, 1, 0, 0, 0]
+ ob = ds["c", :2, "d"][0, 2:5, 1, 0, 0]
+ assert str(ob[1]) == "ObjectView(subpath='/c/d', slice=[0, 3, 1, 0, 0])"
+ with pytest.raises(IndexError):
+ ob[1, 0]
+
+ # Key Errors
+ # wrong key
+ with pytest.raises(KeyError):
+ ds["b", "c"]
+ # too many keys
+ with pytest.raises(KeyError):
+ ds["c", "d", "e"]
+ with pytest.raises(KeyError):
+ ds["c", "d"]["e"]
+
+
+if __name__ == "__main__":
+ test_objectview()
+ test_errors()
diff --git a/hub/api/tests/test_tensorview.py b/hub/api/tests/test_tensorview.py
index 40e01f64a4..f111637d6f 100644
--- a/hub/api/tests/test_tensorview.py
+++ b/hub/api/tests/test_tensorview.py
@@ -24,13 +24,13 @@ def test_tensorview_init():
def test_tensorview_getitem():
images_tensorview = ds["image"]
- with pytest.raises(ValueError):
+ with pytest.raises(IndexError):
images_tensorview["7", 0:1920, 0:1080, 0:3].compute()
def test_tensorview_setitem():
images_tensorview = ds["image"]
- with pytest.raises(ValueError):
+ with pytest.raises(IndexError):
images_tensorview["7", 0:1920, 0:1080, 0:3] = np.zeros((1920, 1080, 3), "uint8")
diff --git a/hub/cli/auth.py b/hub/cli/auth.py
index b0bfe692c4..2461a9e973 100644
--- a/hub/cli/auth.py
+++ b/hub/cli/auth.py
@@ -13,33 +13,7 @@
@click.option("--password", "-p", default=None, help="Your Snark AI password")
def login(username, password):
""" Logs in to Snark AI"""
- token = ""
- if token:
- logger.info("Token login.")
- logger.degug("Getting the token...")
- token = click.prompt(
- "Please paste the authentication token from {}".format(
- config.GET_TOKEN_REST_SUFFIX, type=str, hide_input=True
- )
- )
- token = token.strip()
- AuthClient.check_token(token)
- else:
- logger.info(
- "Please log in using Snark AI credentials. You can register at https://app.activeloop.ai "
- )
- if not username:
- logger.debug("Prompting for username.")
- username = click.prompt("Username", type=str)
- username = username.strip()
- if not password:
- logger.debug("Prompting for password.")
- password = click.prompt("Password", type=str, hide_input=True)
- password = password.strip()
- token = AuthClient().get_access_token(username, password)
- TokenManager.set_token(token)
- HubControlClient().get_credentials()
- logger.info("Login Successful.")
+ login_fn(username, password)
@click.command()
@@ -69,3 +43,34 @@ def register(username, email, password):
AuthClient().register(username, email, password)
token = AuthClient().get_access_token(username, password)
TokenManager.set_token(token)
+
+
+def login_fn(username, password):
+ """ Logs in to Snark AI"""
+ token = ""
+ if token:
+ logger.info("Token login.")
+ logger.degug("Getting the token...")
+ token = click.prompt(
+ "Please paste the authentication token from {}".format(
+ config.GET_TOKEN_REST_SUFFIX, type=str, hide_input=True
+ )
+ )
+ token = token.strip()
+ AuthClient.check_token(token)
+ else:
+ logger.info(
+ "Please log in using Activeloop credentials. You can register at https://app.activeloop.ai "
+ )
+ if not username:
+ logger.debug("Prompting for username.")
+ username = click.prompt("Username", type=str)
+ username = username.strip()
+ if not password:
+ logger.debug("Prompting for password.")
+ password = click.prompt("Password", type=str, hide_input=True)
+ password = password.strip()
+ token = AuthClient().get_access_token(username, password)
+ TokenManager.set_token(token)
+ HubControlClient().get_credentials()
+ logger.info("Login Successful.")
diff --git a/hub/cli/utils.py b/hub/cli/utils.py
index a1c181fad5..72296ee1c2 100644
--- a/hub/cli/utils.py
+++ b/hub/cli/utils.py
@@ -10,47 +10,3 @@
def get_cli_version():
return "1.0.0"
-
-
-def verify_cli_version():
- os.environ["OUTDATED_IGNORE"] = 1
- try:
-
- version = pkg_resources.get_distribution(hub.__name__).version
- is_outdated, latest_version = check_outdated(hub.__name__, version)
- if is_outdated:
- print(
- "\033[93m"
- + "Hub is out of date. Please upgrade the package by running `pip3 install --upgrade snark`"
- + "\033[0m"
- )
- except Exception as e:
- logger.error(str(e))
-
-
-def check_program_exists(command):
- try:
- subprocess.call([command])
- except OSError as e:
- if e.errno == os.errno.ENOENT:
- return False
- else:
- # Something else went wrong while trying to run `wget`
- return True
- return True
-
-
-def get_proxy_command(proxy):
- ssh_proxy = ""
- if proxy and proxy != " " and proxy != "None" and proxy != "":
- if check_program_exists("ncat"):
- ssh_proxy = (
- '-o "ProxyCommand=ncat --proxy-type socks5 --proxy {} %h %p"'.format(
- proxy
- )
- )
- else:
- raise HubException(
- message="This pod is behind the firewall. You need one more thing. Please install nmap by running `sudo apt-get install nmap` on Ubuntu or `brew install nmap` for Mac"
- )
- return ssh_proxy
diff --git a/hub/collections/dataset/core.py b/hub/collections/dataset/core.py
index 3224e4ea07..ebae7fe09b 100644
--- a/hub/collections/dataset/core.py
+++ b/hub/collections/dataset/core.py
@@ -690,7 +690,7 @@ def load(tag, creds=None, session_creds=True) -> Dataset:
fs, path = _load_fs_and_path(tag, creds, session_creds=session_creds)
fs: fsspec.AbstractFileSystem = fs
path_2 = f"{path}/meta.json"
- if not fs.exists(path):
+ if not fs.exists(path_2):
raise HubDatasetNotFoundException(tag)
with fs.open(path_2, "r") as f:
diff --git a/hub/compute/ray.py b/hub/compute/ray.py
index 1951415d7b..1d5cfb23f3 100644
--- a/hub/compute/ray.py
+++ b/hub/compute/ray.py
@@ -3,13 +3,14 @@
from hub.api.datasetview import DatasetView
from hub.utils import batchify
from hub.compute import Transform
-from typing import Iterable
+from typing import Iterable, Iterator
from hub.exceptions import ModuleNotInstalledException
from hub.api.sharded_datasetview import ShardedDatasetView
import hub
+from hub.api.dataset_utils import get_value, str_to_int
-def remote(template, **kwargs):
+def empty_remote(template, **kwargs):
"""
remote template
"""
@@ -28,7 +29,7 @@ def inner(**kwargs):
remote = ray.remote
except Exception:
- pass
+ remote = empty_remote
class RayTransform(Transform):
@@ -36,24 +37,29 @@ def __init__(self, func, schema, ds, scheduler="ray", workers=1, **kwargs):
super(RayTransform, self).__init__(
func, schema, ds, scheduler="single", workers=workers, **kwargs
)
+ self.workers = workers
if "ray" not in sys.modules:
raise ModuleNotInstalledException("ray")
if not ray.is_initialized():
- ray.init()
+ ray.init(local_mode=True)
@remote
- def _func_argd(_func, index, _ds, schema, **kwargs):
+ def _func_argd(_func, index, _ds, schema, kwargs):
"""
Remote wrapper for user defined function
"""
+
if isinstance(_ds, Dataset) or isinstance(_ds, DatasetView):
_ds.squeeze_dim = False
item = _ds[index]
- item = _func(item, **kwargs)
- # item = Transform._flatten(item, schema)
+ if isinstance(item, DatasetView) or isinstance(item, Dataset):
+ item = item.compute()
+
+ item = _func(0, item)
item = Transform._flatten_dict(item, schema=schema)
+
return list(item.values())
def store(
@@ -63,6 +69,7 @@ def store(
length: int = None,
ds: Iterable = None,
progressbar: bool = True,
+ public: bool = True,
):
"""
The function to apply the transformation for each element in batchified manner
@@ -79,50 +86,84 @@ def store(
ds: Iterable
progressbar: bool
Show progress bar
+ public: bool, optional
+ only applicable if using hub storage, ignored otherwise
+ setting this to False allows only the user who created it to access the dataset and
+ the dataset won't be visible in the visualizer to the public
+
Returns
----------
ds: hub.Dataset
uploaded dataset
"""
-
- _ds = ds or self._ds
- if isinstance(_ds, Transform):
- _ds = _ds.store(
- "{}_{}".format(url, _ds._func.__name__),
- token=token,
- progressbar=progressbar,
- )
+ _ds = ds or self.base_ds
num_returns = len(self._flatten_dict(self.schema, schema=self.schema).keys())
results = [
self._func_argd.options(num_returns=num_returns).remote(
- self._func, el, _ds, schema=self.schema, **self.kwargs
+ self.call_func, el, _ds, schema=self.schema, kwargs=self.kwargs
)
for el in range(len(_ds))
]
+ if num_returns == 1:
+ results = [[r] for r in results]
+
results = self._split_list_to_dicts(results)
- ds = self.upload(results, url=url, token=token, progressbar=progressbar)
+
+ ds = self.upload(
+ results, url=url, token=token, progressbar=progressbar, public=public
+ )
return ds
@remote
def upload_chunk(i_batch, key, ds):
"""
Remote function to upload a chunk
+ Returns the shape of dynamic tensor to upload all in once after upload is completed
+
+ Parameters
+ ----------
+ i_batch: Tuple
+ Tuple composed of (index, batch)
+ key: str
+ Key of the tensor
+ ds:
+ Dataset to set to upload
+ Returns
+ ----------
+ (key, slice_, shape) to set the shape later
+
"""
i, batch = i_batch
- length = len(batch)
-
if not isinstance(batch, dict) and isinstance(batch[0], ray.ObjectRef):
batch = ray.get(batch)
+ # FIXME an ugly hack to unwrap elements with a schema that has one tensor
+ num_returns = len(
+ Transform._flatten_dict(ds.schema.dict_, schema=ds.schema.dict_).keys()
+ )
+ if num_returns == 1:
+ batch = [item for sublist in batch for item in sublist]
- # TODO some sort of syncronizer across nodes
- if length != 1:
- ds[key, i * length : (i + 1) * length] = batch
- else:
- ds[key, i * length] = batch[0]
+ shape = None
+ length = len(batch)
+
+ slice_ = slice(i * length, (i + 1) * length)
+ if ds[key].is_dynamic:
+ # Sometimes ds._tensor slice_ gets out of the shape value
+ shape = ds._tensors[f"/{key}"].get_shape_from_value([slice_], batch)
+ ds[key, slice_] = batch
- def upload(self, results, url: str, token: dict, progressbar: bool = True):
+ return (key, [slice_], shape)
+
+ def upload(
+ self,
+ results,
+ url: str,
+ token: dict,
+ progressbar: bool = True,
+ public: bool = True,
+ ):
"""Batchified upload of results.
For each tensor batchify based on its chunk and upload.
If tensor is dynamic then still upload element by element.
@@ -134,41 +175,85 @@ def upload(self, results, url: str, token: dict, progressbar: bool = True):
results:
Output of transform function
progressbar: bool
+ public: bool, optional
+ only applicable if using hub storage, ignored otherwise
+ setting this to False allows only the user who created it to access the dataset and
+ the dataset won't be visible in the visualizer to the public
Returns
----------
ds: hub.Dataset
Uploaded dataset
"""
- shape = (len(list(results.values())[0]),)
+ if len(list(results.values())) == 0:
+ shape = (0,)
+ else:
+ shape = (len(list(results.values())[0]),)
+
ds = Dataset(
url,
mode="w",
- shape=shape, # unkownn
+ shape=shape,
schema=self.schema,
token=token,
cache=False,
+ public=public,
)
tasks = []
for key, value in results.items():
+
length = ds[key].chunksize[0]
+ value = get_value(value)
+ value = str_to_int(value, ds.tokenizer)
batched_values = batchify(value, length)
-
chunk_id = list(range(len(batched_values)))
index_batched_values = list(zip(chunk_id, batched_values))
+
+ ds._tensors[f"/{key}"].disable_dynamicness()
+
results = [
self.upload_chunk.remote(el, key=key, ds=ds)
for el in index_batched_values
]
tasks.extend(results)
- ray.get(tasks)
+ results = ray.get(tasks)
+ self.set_dynamic_shapes(results, ds)
ds.commit()
return ds
+ def set_dynamic_shapes(self, results, ds):
+ """
+ Sets shapes for dynamic tensors after the dataset is uploaded
+
+ Parameters
+ ----------
+ results: Tuple
+ results from uploading each chunk which includes (key, slice, shape) tuple
+ ds:
+ Dataset to set the shapes to
+ Returns
+ ----------
+ """
+
+ shapes = {}
+ for (key, slice_, value) in results:
+ if not ds[key].is_dynamic:
+ continue
+
+ if key not in shapes:
+ shapes[key] = []
+ shapes[key].append((slice_, value))
+
+ for key, value in shapes.items():
+ ds._tensors[f"/{key}"].enable_dynamicness()
+
+ for (slice_, shape) in shapes[key]:
+ ds._tensors[f"/{key}"].set_dynamic_shape(slice_, shape)
+
class TransformShard:
- def __init__(self, ds, func, schema, **kwargs):
+ def __init__(self, ds, func, schema, kwargs):
if isinstance(ds, Dataset) or isinstance(ds, DatasetView):
ds.squeeze_dim = False
@@ -185,9 +270,14 @@ def __call__(self, ids):
"""
for index in ids:
item = self._ds[index]
- item = self._func(item, **self.kwargs)
+ if isinstance(item, DatasetView) or isinstance(item, Dataset):
+ item = item.compute()
- for item in Transform._unwrap(item):
+ items = self._func(0, item)
+ if not isinstance(items, list):
+ items = [items]
+
+ for item in items:
yield Transform._flatten_dict(item, schema=self.schema)
@@ -199,6 +289,7 @@ def store(
length: int = None,
ds: Iterable = None,
progressbar: bool = True,
+ public: bool = True,
):
"""
The function to apply the transformation for each element by sharding the dataset
@@ -215,21 +306,21 @@ def store(
ds: Iterable
progressbar: bool
Show progress bar
+ public: bool, optional
+ only applicable if using hub storage, ignored otherwise
+ setting this to False allows only the user who created it to access the dataset and
+ the dataset won't be visible in the visualizer to the public
Returns
----------
ds: hub.Dataset
uploaded dataset
"""
- _ds = ds or self._ds
- if isinstance(_ds, Transform):
- _ds = _ds.store(
- "{}_{}".format(url, _ds._func.__name__),
- token=token,
- progressbar=progressbar,
- )
+ _ds = ds or self.base_ds
- results = ray.util.iter.from_range(len(_ds), num_shards=4).transform(
- TransformShard(ds=_ds, func=self._func, schema=self.schema, **self.kwargs)
+ results = ray.util.iter.from_range(len(_ds), num_shards=self.workers).transform(
+ TransformShard(
+ ds=_ds, func=self.call_func, schema=self.schema, kwargs=self.kwargs
+ )
)
@remote
@@ -239,7 +330,7 @@ def upload_shard(i, shard_results):
"""
shard_results = self._split_list_to_dicts(shard_results)
- if len(shard_results) == 0:
+ if len(shard_results) == 0 or len(list(shard_results.values())[0]) == 0:
return None
ds = self.upload(
@@ -247,6 +338,7 @@ def upload_shard(i, shard_results):
url=f"{url}_shard_{i}",
token=token,
progressbar=progressbar,
+ public=public,
)
return ds
@@ -270,19 +362,9 @@ def merge_sharded_dataset(
"""
sharded_ds = ShardedDatasetView(datasets)
- def identity(sample):
- d = {}
- for k in sample.keys:
- v = sample[k]
- if not isinstance(v, dict):
- d[k] = v.compute()
- else:
- d[k] = identity(v)
- return d
-
@hub.transform(schema=self.schema, scheduler="ray")
def transform_identity(sample):
- return identity(sample)
+ return sample
ds = transform_identity(sharded_ds).store(
url,
diff --git a/hub/compute/tests/test_ray.py b/hub/compute/tests/test_ray.py
index 767fc0df12..e649b8deb7 100644
--- a/hub/compute/tests/test_ray.py
+++ b/hub/compute/tests/test_ray.py
@@ -2,6 +2,7 @@
from hub.utils import ray_loaded
from hub.schema import Tensor, Text
import pytest
+from hub.compute.ray import empty_remote
import numpy as np
@@ -18,6 +19,79 @@
}
+def test_wrapper():
+ @empty_remote
+ def a(x):
+ return x
+
+ assert a(5)() == 5
+
+
+@pytest.mark.skipif(
+ not ray_loaded(),
+ reason="requires ray to be loaded",
+)
+def test_ray_simple():
+ schema = {"var": "float"}
+
+ @hub.transform(schema=schema, scheduler="ray")
+ def process(item):
+ return {"var": 1}
+
+ ds = process([1, 2, 3]).store("./data/somedataset")
+ assert ds["var", 0].compute() == 1
+
+
+@pytest.mark.skipif(
+ not ray_loaded(),
+ reason="requires ray to be loaded",
+)
+def test_ray_non_dynamic():
+ schema = {
+ "var": Tensor(shape=(2, 2), dtype="uint8"),
+ "var2": Tensor(shape=(2, 2), dtype="uint8"),
+ }
+
+ @hub.transform(schema=schema, scheduler="ray_generator")
+ def process(item):
+ return [{"var": np.ones((2, 2)), "var2": np.ones((2, 2))} for i in range(2)]
+
+ ds = process([1, 2, 3]).store("./data/somedataset")
+ assert ds["var", 0].compute().shape[0] == 2
+
+
+@pytest.mark.skipif(
+ not ray_loaded(),
+ reason="requires ray to be loaded",
+)
+def test_ray_dynamic():
+ schema = {"var": Tensor(shape=(None, None), max_shape=(2, 2), dtype="uint8")}
+
+ @hub.transform(schema=schema, scheduler="ray_generator")
+ def process(item):
+ return {"var": np.ones((1, 2))}
+
+ ds = process([1, 2, 3]).store("./data/somedataset")
+ assert ds["var", 0].compute().shape[0] == 1
+
+
+@pytest.mark.skipif(
+ not ray_loaded(),
+ reason="requires ray to be loaded",
+)
+def test_ray_simple_generator():
+ schema = {"var": "float"}
+
+ @hub.transform(schema=schema, scheduler="ray_generator")
+ def process(item):
+ items = [{"var": item} for i in range(item)]
+ return items
+
+ ds = process([0, 1, 2, 3]).store("./data/somegeneratordataset")
+ assert ds["var", 0].compute() == 1
+ assert ds.shape[0] == 6
+
+
@pytest.mark.skipif(
not ray_loaded(),
reason="requires ray to be loaded",
@@ -39,10 +113,10 @@ def test_pipeline_ray():
@hub.transform(schema=my_schema, scheduler="ray")
def my_transform(sample, multiplier: int = 2):
return {
- "image": sample["image"].compute() * multiplier,
- "label": sample["label"].compute(),
+ "image": sample["image"] * multiplier,
+ "label": sample["label"],
"confidence": {
- "confidence": sample["confidence/confidence"].compute() * multiplier
+ "confidence": sample["confidence"]["confidence"] * multiplier
},
}
@@ -72,8 +146,8 @@ def test_ray_pipeline_multiple():
def dynamic_transform(sample, multiplier: int = 2):
return [
{
- "image": sample["image"].compute() * multiplier,
- "label": sample["label"].compute(),
+ "image": sample["image"] * multiplier,
+ "label": sample["label"],
}
for _ in range(4)
]
@@ -87,5 +161,42 @@ def dynamic_transform(sample, multiplier: int = 2):
).all()
+@pytest.mark.skipif(
+ not ray_loaded(),
+ reason="requires ray to be loaded",
+)
+def test_stacked_transform():
+ schema = {"test": Tensor((2, 2), dtype="uint8")}
+
+ @hub.transform(schema=schema)
+ def multiply_transform(sample, multiplier=1, times=1):
+ if times == 1:
+ return {"test": multiplier * sample["test"]}
+ else:
+ return [{"test": multiplier * sample["test"]} for i in range(times)]
+
+ @hub.transform(schema=schema, scheduler="ray_generator")
+ def multiply_transform_2(sample, multiplier=1, times=1):
+ if times == 1:
+ return {"test": multiplier * sample["test"]}
+ else:
+ return [{"test": multiplier * sample["test"]} for i in range(times)]
+
+ ds = hub.Dataset("./data/stacked_transform", mode="w", shape=(5,), schema=schema)
+ for i in range(5):
+ ds["test", i] = np.ones((2, 2))
+ ds1 = multiply_transform(ds, multiplier=2, times=5)
+ ds2 = multiply_transform(ds1, multiplier=3, times=2)
+ ds3 = multiply_transform_2(ds2, multiplier=5, times=3)
+ ds4 = ds3.store("./data/stacked_transform_2")
+ assert len(ds4) == 150
+ assert (ds4["test", 0].compute() == 30 * np.ones((2, 2))).all()
+
+
if __name__ == "__main__":
- test_ray_pipeline_multiple()
+ # test_ray_simple()
+ # test_ray_non_dynamic()
+ test_ray_dynamic()
+ # test_ray_simple_generator()
+ # test_pipeline_ray()
+ # test_ray_pipeline_multiple()
diff --git a/hub/compute/tests/test_transform.py b/hub/compute/tests/test_transform.py
index 8610cdf116..fff4fbb7fb 100644
--- a/hub/compute/tests/test_transform.py
+++ b/hub/compute/tests/test_transform.py
@@ -30,9 +30,9 @@ def test_pipeline_basic():
@hub.transform(schema=my_schema)
def my_transform(sample, multiplier: int = 2):
return {
- "image": sample["image"].compute() * multiplier,
- "label": sample["label"].compute(),
- "confidence": sample["confidence"].compute() * multiplier,
+ "image": sample["image"] * multiplier,
+ "label": sample["label"],
+ "confidence": sample["confidence"] * multiplier,
}
out_ds = my_transform(ds, multiplier=2)
@@ -77,7 +77,7 @@ def test_threaded():
@hub.transform(schema=schema, scheduler="threaded", workers=2)
def create_classification_dataset(sample):
- ts = sample["image"].numpy()
+ ts = sample["image"]
return [
{
"image": ts,
@@ -109,8 +109,8 @@ def test_pipeline_dynamic():
@hub.transform(schema=dynamic_schema)
def dynamic_transform(sample, multiplier: int = 2):
return {
- "image": sample["image"].compute() * multiplier,
- "label": sample["label"].compute(),
+ "image": sample["image"] * multiplier,
+ "label": sample["label"],
}
out_ds = dynamic_transform(ds, multiplier=4).store(
@@ -137,8 +137,8 @@ def test_pipeline_multiple():
def dynamic_transform(sample, multiplier: int = 2):
return [
{
- "image": sample["image"].compute() * multiplier,
- "label": sample["label"].compute(),
+ "image": sample["image"] * multiplier,
+ "label": sample["label"],
}
for i in range(4)
]
@@ -206,9 +206,9 @@ def test_pipeline():
@hub.transform(schema=my_schema)
def my_transform(sample, multiplier: int = 2):
return {
- "image": sample["image"].compute() * multiplier,
- "label": sample["label"].compute(),
- "confidence": sample["confidence"].compute() * multiplier,
+ "image": sample["image"] * multiplier,
+ "label": sample["label"],
+ "confidence": sample["confidence"] * multiplier,
}
out_ds = my_transform(ds, multiplier=2)
@@ -218,6 +218,79 @@ def my_transform(sample, multiplier: int = 2):
assert (out_ds["image", 0].compute() == 4).all()
+def test_stacked_transform():
+ schema = {"test": Tensor((2, 2), dtype="uint8")}
+
+ @hub.transform(schema=schema)
+ def multiply_transform(sample, multiplier=1, times=1):
+ if times == 1:
+ return {"test": multiplier * sample["test"]}
+ else:
+ return [{"test": multiplier * sample["test"]} for i in range(times)]
+
+ @hub.transform(schema=schema)
+ def multiply_transform_2(sample, multiplier=1, times=1):
+ if times == 1:
+ return {"test": multiplier * sample["test"]}
+ else:
+ return [{"test": multiplier * sample["test"]} for i in range(times)]
+
+ ds = hub.Dataset("./data/stacked_transform", mode="w", shape=(5,), schema=schema)
+ for i in range(5):
+ ds["test", i] = np.ones((2, 2))
+ ds1 = multiply_transform(ds, multiplier=2, times=5)
+ ds2 = multiply_transform(ds1, multiplier=3, times=2)
+ ds3 = multiply_transform_2(ds2, multiplier=5, times=3)
+ ds4 = ds3.store("./data/stacked_transform_2")
+ assert len(ds4) == 150
+ assert (ds4["test", 0].compute() == 30 * np.ones((2, 2))).all()
+
+
+def test_text():
+ my_schema = {"text": Text((None,), max_shape=(10,))}
+
+ @hub.transform(schema=my_schema)
+ def my_transform(sample):
+ return {"text": np.array("abc")}
+
+ ds = my_transform([i for i in range(10)])
+ ds2 = ds.store("./data/test/transform_text")
+ for i in range(10):
+ assert ds2["text", i].compute() == "abc"
+
+
+def test_zero_sample_transform():
+ schema = {"test": Tensor((None, None), dtype="uint8", max_shape=(10, 10))}
+
+ @hub.transform(schema=schema)
+ def my_transform(sample):
+ if sample % 5 == 0:
+ return []
+ else:
+ return {"test": (sample % 5) * np.ones((5, 5))}
+
+ ds = my_transform([i for i in range(30)])
+ ds2 = ds.store("./data/transform_zero_sample", sample_per_shard=5)
+ assert len(ds2) == 24
+ for i, item in enumerate(ds2):
+ assert (item["test"].compute() == (((i % 4) + 1) * np.ones((5, 5)))).all()
+
+
+def test_mutli_sample_transform():
+ schema = {"test": Tensor((None, None), dtype="uint8", max_shape=(10, 10))}
+
+ @hub.transform(schema=schema)
+ def my_transform(sample):
+ d = {"test": sample * np.ones((5, 5))}
+ return [d, d]
+
+ ds = my_transform([i for i in range(32)])
+ ds2 = ds.store("./data/transform_zero_sample", sample_per_shard=5)
+ assert len(ds2) == 64
+ for i, item in enumerate(ds2):
+ assert (item["test"].compute() == (i // 2) * np.ones((5, 5))).all()
+
+
def benchmark(sample_size=100, width=1000, channels=4, dtype="int8"):
numpy_arr = np.zeros((sample_size, width, width, channels), dtype=dtype)
zarr_fs = zarr.zeros(
diff --git a/hub/compute/transform.py b/hub/compute/transform.py
index c08830b46f..95604252d0 100644
--- a/hub/compute/transform.py
+++ b/hub/compute/transform.py
@@ -1,13 +1,12 @@
import zarr
import numpy as np
import math
-from psutil import virtual_memory
from typing import Dict, Iterable
from hub.api.dataset import Dataset
from tqdm import tqdm
from collections.abc import MutableMapping
from hub.utils import batchify
-from hub.api.dataset_utils import slice_extract_info, slice_split, str_to_int
+from hub.api.dataset_utils import get_value, slice_extract_info, slice_split, str_to_int
import collections.abc as abc
from hub.api.datasetview import DatasetView
from pathos.pools import ProcessPool, ThreadPool
@@ -38,6 +37,7 @@ def prod(shp):
return res
samples = min(samples, (16 * 1024 * 1024 * 8) // (prod(shp) * sz))
+ samples = max(samples, 1)
return samples * workers
@@ -68,6 +68,17 @@ def __init__(
self.kwargs = kwargs
self.workers = workers
+ if isinstance(self._ds, Transform):
+ self.base_ds = self._ds.base_ds
+ self._func = self._ds._func[:]
+ self._func.append(func)
+ self.kwargs = self._ds.kwargs[:]
+ self.kwargs.append(kwargs)
+ else:
+ self.base_ds = ds
+ self._func = [func]
+ self.kwargs = [kwargs]
+
if scheduler == "threaded" or (scheduler == "single" and workers > 1):
self.map = ThreadPool(nodes=workers).map
elif scheduler == "processed":
@@ -85,6 +96,48 @@ def __init__(
f"Scheduler {scheduler} not understood, please use 'single', 'threaded', 'processed'"
)
+ def __len__(self):
+ return self.shape[0]
+
+ def __getitem__(self, slice_):
+ """| Get an item to be computed without iterating on the whole dataset.
+ | Creates a dataset view, then a temporary dataset to apply the transform.
+ Parameters:
+ ----------
+ slice_: slice
+ Gets a slice or slices from dataset
+ """
+ if not isinstance(slice_, abc.Iterable) or isinstance(slice_, str):
+ slice_ = [slice_]
+
+ slice_ = list(slice_)
+ subpath, slice_list = slice_split(slice_)
+
+ if len(slice_list) == 0:
+ slice_list = [slice(None, None, None)]
+
+ num, ofs = slice_extract_info(slice_list[0], self.shape[0])
+
+ ds_view = DatasetView(
+ dataset=self._ds,
+ num_samples=num,
+ offset=ofs,
+ squeeze_dim=isinstance(slice_list[0], int),
+ )
+
+ path = posixpath.expanduser("~/.activeloop/tmparray")
+ new_ds = self.store(path, length=num, ds=ds_view, progressbar=False)
+
+ index = 1 if len(slice_) > 1 else 0
+ slice_[index] = (
+ slice(None, None, None) if not isinstance(slice_list[0], int) else 0
+ ) # Get all shape dimension since we already sliced
+ return new_ds[slice_]
+
+ def __iter__(self):
+ for index in range(len(self)):
+ yield self[index]
+
@classmethod
def _flatten_dict(self, d: Dict, parent_key="", schema=None):
"""| Helper function to flatten dictionary of a recursive tensor
@@ -136,6 +189,19 @@ def dtype_from_path(cls, path, schema):
cur_type = cur_type.dict_
return cur_type[path[-1]]
+ @classmethod
+ def _unwrap(cls, results):
+ """
+ If there is any list then unwrap it into its elements
+ """
+ items = []
+ for r in results:
+ if isinstance(r, dict):
+ items.append(r)
+ else:
+ items.extend(r)
+ return items
+
def _split_list_to_dicts(self, xs):
"""| Helper function that transform list of dicts into dicts of lists
@@ -160,7 +226,20 @@ def _split_list_to_dicts(self, xs):
xs_new[key] = [value]
return xs_new
- def create_dataset(self, url, length=None, token=None):
+ def _pbar(self, show: bool = True):
+ """
+ Returns a progress bar, if empty then it function does nothing
+ """
+
+ def _empty_pbar(xs, **kwargs):
+ return xs
+
+ single_threaded = self.map == map
+ return tqdm if show and single_threaded else _empty_pbar
+
+ def create_dataset(
+ self, url: str, length: int = None, token: dict = None, public: bool = True
+ ):
"""Helper function to creat a dataset"""
shape = (length,)
ds = Dataset(
@@ -171,6 +250,7 @@ def create_dataset(self, url, length=None, token=None):
token=token,
fs=zarr.storage.MemoryStore() if "tmp" in url else None,
cache=False,
+ public=public,
)
return ds
@@ -197,18 +277,18 @@ def upload(self, results, ds: Dataset, token: dict, progressbar: bool = True):
chunk = ds[key].chunksize[0]
chunk = 1 if chunk == 0 else chunk
+ value = get_value(value)
value = str_to_int(value, ds.dataset.tokenizer)
+
num_chunks = math.ceil(len(value) / (chunk * self.workers))
length = num_chunks * chunk if self.workers != 1 else len(value)
batched_values = batchify(value, length)
def upload_chunk(i_batch):
i, batch = i_batch
- batch_length = len(batch)
- if batch_length != 1:
- ds[key, i * length : i * length + batch_length] = batch
- else:
- ds[key, i * length] = batch[0]
+ length = len(batch)
+ slice_ = slice(i * length, (i + 1) * length)
+ ds[key, slice_] = batch
index_batched_values = list(
zip(list(range(len(batched_values))), batched_values)
@@ -228,29 +308,32 @@ def upload_chunk(i_batch):
ds.commit()
return ds
- def _pbar(self, show: bool = True):
- """
- Returns a progress bar, if empty then it function does nothing
- """
-
- def _empty_pbar(xs, **kwargs):
- return xs
+ def call_func(self, fn_index, item, as_list=False):
+ """Calls all the functions one after the other
- single_threaded = self.map == map
- return tqdm if show and single_threaded else _empty_pbar
+ Parameters
+ ----------
+ fn_index: int
+ The index starting from which the functions need to be called
+ item:
+ The item on which functions need to be applied
+ as_list: bool, optional
+ If true then treats the item as a list.
- @classmethod
- def _unwrap(cls, results):
- """
- If there is any list then unwrap it into its elements
+ Returns
+ ----------
+ result:
+ The final output obtained after all transforms
"""
- items = []
- for r in results:
- if isinstance(r, dict):
- items.append(r)
+ result = item
+ if fn_index < len(self._func):
+ if as_list:
+ result = [self.call_func(fn_index, it) for it in result]
else:
- items.extend(r)
- return items
+ result = self._func[fn_index](result, **self.kwargs[fn_index])
+ result = self.call_func(fn_index + 1, result, isinstance(result, list))
+ result = self._unwrap(result) if isinstance(result, list) else result
+ return result
def store_shard(self, ds_in: Iterable, ds_out: Dataset, offset: int, token=None):
"""
@@ -258,7 +341,12 @@ def store_shard(self, ds_in: Iterable, ds_out: Dataset, offset: int, token=None)
"""
def _func_argd(item):
- return self._func(item, **self.kwargs)
+ if isinstance(item, DatasetView) or isinstance(item, Dataset):
+ item = item.numpy()
+ result = self.call_func(
+ 0, item
+ ) # If the iterable obtained from iterating ds_in is a list, it is not treated as list
+ return result
ds_in = list(ds_in)
results = self.map(
@@ -297,7 +385,8 @@ def store(
length: int = None,
ds: Iterable = None,
progressbar: bool = True,
- sample_per_shard=None,
+ sample_per_shard: int = None,
+ public: bool = True,
):
"""| The function to apply the transformation for each element in batchified manner
@@ -315,19 +404,17 @@ def store(
Show progress bar
sample_per_shard: int
How to split the iterator not to overfill RAM
+ public: bool, optional
+ only applicable if using hub storage, ignored otherwise
+ setting this to False allows only the user who created it to access the dataset and
+ the dataset won't be visible in the visualizer to the public
Returns
----------
ds: hub.Dataset
uploaded dataset
"""
- ds_in = ds or self._ds
- if isinstance(ds_in, Transform):
- ds_in = ds_in.store(
- "{}_{}".format(url, ds_in._func.__name__),
- token=token,
- progressbar=progressbar,
- )
+ ds_in = ds or self.base_ds
# compute shard length
if sample_per_shard is None:
@@ -342,7 +429,7 @@ def store(
if length < n_samples:
n_samples = length
- ds_out = self.create_dataset(url, length=length, token=token)
+ ds_out = self.create_dataset(url, length=length, token=token, public=public)
def batchify_generator(iterator: Iterable, size: int):
batch = []
@@ -365,57 +452,13 @@ def batchify_generator(iterator: Iterable, size: int):
for ds_in_shard in batchify_generator(ds_in, n_samples):
n_results = self.store_shard(ds_in_shard, ds_out, start, token=token)
total += n_results
- pbar.update(n_results)
- if n_results < n_samples or n_results == 0:
- break
- start += n_samples
+ pbar.update(len(ds_in_shard))
+ start += n_results
ds_out.resize_shape(total)
ds_out.commit()
return ds_out
- def __len__(self):
- return self.shape[0]
-
- def __getitem__(self, slice_):
- """| Get an item to be computed without iterating on the whole dataset.
- | Creates a dataset view, then a temporary dataset to apply the transform.
- Parameters:
- ----------
- slice_: slice
- Gets a slice or slices from dataset
- """
- if not isinstance(slice_, abc.Iterable) or isinstance(slice_, str):
- slice_ = [slice_]
-
- slice_ = list(slice_)
- subpath, slice_list = slice_split(slice_)
-
- if len(slice_list) == 0:
- slice_list = [slice(None, None, None)]
-
- num, ofs = slice_extract_info(slice_list[0], self.shape[0])
-
- ds_view = DatasetView(
- dataset=self._ds,
- num_samples=num,
- offset=ofs,
- squeeze_dim=isinstance(slice_list[0], int),
- )
-
- path = posixpath.expanduser("~/.activeloop/tmparray")
- new_ds = self.store(path, length=num, ds=ds_view, progressbar=False)
-
- index = 1 if len(slice_) > 1 else 0
- slice_[index] = (
- slice(None, None, None) if not isinstance(slice_list[0], int) else 0
- ) # Get all shape dimension since we already sliced
- return new_ds[slice_]
-
- def __iter__(self):
- for index in range(len(self)):
- yield self[index]
-
@property
def shape(self):
return self._ds.shape
diff --git a/hub/defaults.py b/hub/defaults.py
index ca20ca319f..ebaf4c49d9 100644
--- a/hub/defaults.py
+++ b/hub/defaults.py
@@ -1,3 +1,5 @@
CHUNK_DEFAULT_SIZE = 2 ** 24
OBJECT_CHUNK = 128
DEFAULT_COMPRESSOR = "default"
+DEFAULT_MEMORY_CACHE_SIZE = 2 ** 26
+DEFAULT_STORAGE_CACHE_SIZE = 2 ** 28
diff --git a/hub/exceptions.py b/hub/exceptions.py
index 836c2f9c7b..dcef6e6280 100644
--- a/hub/exceptions.py
+++ b/hub/exceptions.py
@@ -207,7 +207,10 @@ class NotHubDatasetToOverwriteException(HubException):
def __init__(self):
message = (
"Unable to overwrite the dataset. "
- "The provided directory is not empty and doesn't contain information about any Hub Dataset "
+ "The provided directory is not empty and doesn't contain information about any Hub Dataset. "
+ "This is a safety check so it won't be possible to overwrite (delete) any folder other than Dataset folder. "
+ "If this error persists in case of Dataset folder then it means your Dataset data is corrupted. "
+ "In that case feel free to create an issue in here https://github.com/activeloopai/Hub"
)
super(HubException, self).__init__(message=message)
diff --git a/hub/schema/features.py b/hub/schema/features.py
index 150c304a9c..4c7ce06ef9 100644
--- a/hub/schema/features.py
+++ b/hub/schema/features.py
@@ -1,5 +1,4 @@
from typing import Tuple, Dict, Iterable
-
import hub
Shape = Tuple[int, ...]
@@ -126,15 +125,39 @@ def __init__(
Sample Count is also in the list of tensor's dimensions (first dimension)
If default value is chosen, automatically detects how to split into chunks
"""
- if shape is None or shape == (None,) and max_shape is None:
- raise TypeError("both shape and max_shape cannot be None at the same time")
+ if shape is None:
+ raise TypeError("shape cannot be None")
+ if isinstance(shape, Iterable) and None in shape and max_shape is None:
+ raise ValueError(
+ "while specifying shape containing None dimensions, max_shape argument needs to be provided"
+ )
+ if not isinstance(shape, (tuple, int, list)):
+ raise TypeError(f"shape of {type(shape)} is not supported")
+
shape = (shape,) if isinstance(shape, int) else tuple(shape)
- chunks = _normalize_chunks(chunks)
- max_shape = max_shape or shape
+ for dim in shape:
+ if not isinstance(dim, int) and dim is not None:
+ raise TypeError(f"shape can't have {type(dim)} in its dimension")
+ max_shape = shape if max_shape is None else max_shape
+ if not isinstance(max_shape, (tuple, int, list)):
+ raise TypeError(f"max_shape of {type(max_shape)} is not supported")
+ max_shape = (max_shape,) if isinstance(max_shape, int) else tuple(max_shape)
+ for dim in max_shape:
+ if dim is None:
+ raise TypeError("max_shape can't have None in it's dimension")
+ elif not isinstance(dim, int):
+ raise TypeError(f"max_shape can't have {type(dim)} in its dimension")
+
if len(shape) != len(max_shape):
raise ValueError(
- f"Length of shape ({len(shape)}) and max_shape ({len(max_shape)}) does not match"
+ f"shape {shape} and max_shape {max_shape} have different lengths"
)
+ for dim, max_dim in zip(shape, max_shape):
+ if dim is not None and dim != max_dim:
+ raise ValueError(f"shape and max_shape mismatch, {dim} != {max_dim}")
+
+ chunks = _normalize_chunks(chunks)
+
# TODO add errors if shape and max_shape have wrong values
self.shape = tuple(shape)
self.dtype = featurify(dtype)
diff --git a/hub/schema/tests/test_tensor.py b/hub/schema/tests/test_tensor.py
index 0a9fef9670..e609a61c68 100644
--- a/hub/schema/tests/test_tensor.py
+++ b/hub/schema/tests/test_tensor.py
@@ -8,7 +8,34 @@ def test_tensor_error():
try:
Tensor(None, max_shape=None)
except TypeError as ex:
- assert "both shape and max_shape cannot be None at the same time" in str(ex)
+ assert "shape cannot be None" in str(ex)
+
+
+def test_tensor_error_2():
+ with pytest.raises(TypeError):
+ t1 = Tensor(shape=(5.1))
+ with pytest.raises(TypeError):
+ t2 = Tensor(shape=(5.1,))
+ with pytest.raises(TypeError):
+ t3 = Tensor(shape=(5, 6), max_shape=(7.2, 8))
+ with pytest.raises(ValueError):
+ t4 = Tensor(shape=(5, 6), max_shape=(7, 8, 9))
+ with pytest.raises(TypeError):
+ t5 = Tensor(shape=(5, None), max_shape=(5, None))
+ with pytest.raises(TypeError):
+ t6 = Tensor(shape=(5, 6), max_shape=(7.2, 8))
+ with pytest.raises(ValueError):
+ t7 = Tensor(max_shape=(10, 15))
+ with pytest.raises(TypeError):
+ t8 = Tensor(None)
+ with pytest.raises(ValueError):
+ t9 = Tensor((5, 6, None))
+ with pytest.raises(TypeError):
+ t10 = Tensor(max_shape="abc")
+ with pytest.raises(TypeError):
+ t11 = Tensor(max_shape=(7.4, 2))
+ with pytest.raises(ValueError):
+ t12 = Tensor(max_shape=[])
def test_tensor_flattening():
@@ -66,3 +93,4 @@ def test_tensor_repr():
test_tensor_init()
test_tensor_str()
test_tensor_repr()
+ test_tensor_error_2()
diff --git a/hub/store/dynamic_tensor.py b/hub/store/dynamic_tensor.py
index 731fc6661c..b940233e13 100644
--- a/hub/store/dynamic_tensor.py
+++ b/hub/store/dynamic_tensor.py
@@ -189,7 +189,7 @@ def __setitem__(self, slice_, value):
elif self._dynamic_tensor and isinstance(slice_[0], slice):
max_shape = value[0].shape
for item in value:
- max_shape = tuple([max(value) for value in zip(max_shape, item.shape)])
+ max_shape = tuple(max(value) for value in zip(max_shape, item.shape))
for i in range(len(value)):
pad = [
(0, max_shape[dim] - value[i].shape[dim])
@@ -234,12 +234,12 @@ def check_value_shape(self, value, slice_):
if isinstance(value, list):
value = np.array(value)
if isinstance(value, np.ndarray):
- if value.shape[0] == 1 and expected_value_shape[0] != 1:
- value = np.squeeze(value, axis=0)
- if value.shape[-1] == 1 and expected_value_shape[-1] != 1:
- value = np.squeeze(value, axis=-1)
- if value.shape != expected_value_shape:
+ value_shape = [dim for dim in value.shape if dim != 1]
+ expected_shape = [dim for dim in expected_value_shape if dim != 1]
+ if value_shape != expected_shape:
raise ValueShapeError(expected_value_shape, value.shape)
+ else:
+ value = value.reshape(expected_value_shape)
else:
expected_value_shape = (1,)
if isinstance(value, list):
@@ -343,14 +343,28 @@ def get_shape(self, slice_):
return final_shapes # returns 2D np array
def set_shape(self, slice_, value):
- """Sets the shape of the slice of tensor"""
+ """
+ Set shape of the dynamic tensor given value
+ """
if not self._enabled_dynamicness:
return
+
+ new_shape = self.get_shape_from_value(slice_, value)
+ self.set_dynamic_shape(slice_, new_shape)
+
+ def set_dynamic_shape(self, slice_, shape):
+ """
+ Set shape from the shape directly
+ """
+ self._dynamic_tensor[slice_[0]] = shape
+
+ def get_shape_from_value(self, slice_, value):
+ """
+ create shape for multiple elements
+ """
if isinstance(slice_[0], int):
- new_shape = self.create_shape(slice_, value)
- self._dynamic_tensor[slice_[0]] = new_shape = np.maximum(
- self._dynamic_tensor[slice_[0]], new_shape
- )
+ new_shapes = self.create_shape(slice_, value)
+ new_shapes = np.maximum(self._dynamic_tensor[slice_[0]], new_shapes)
else:
start = slice_[0].start if slice_[0].start is not None else 0
stop = (
@@ -362,14 +376,21 @@ def set_shape(self, slice_, value):
new_shape = self.create_shape([i] + slice_[1:], value[i - start])
new_shape = np.maximum(dt[i - start], new_shape)
new_shapes.append(new_shape)
- self._dynamic_tensor[slice_[0]] = new_shapes
+ return new_shapes
def create_shape(self, slice_, value):
assert isinstance(slice_[0], int)
new_shape = []
shape_offset = 0
- value_shape = list(value.shape) if hasattr(value, "shape") else [1]
+
+ value_shape = (
+ list(value.shape)
+ if hasattr(value, "shape") and len(list(value.shape)) > 0
+ else [1]
+ )
+
for i in range(1, len(self.shape)):
+
if self.shape[i] is None:
if i < len(slice_):
if isinstance(slice_[i], slice):
diff --git a/hub/store/store.py b/hub/store/store.py
index c5f7bda243..223421c224 100644
--- a/hub/store/store.py
+++ b/hub/store/store.py
@@ -1,21 +1,22 @@
+from typing import MutableMapping, Tuple
import posixpath
import shutil
-from hub.store.cache import Cache
-from hub.store.lru_cache import LRUCache
-
-from hub.client.hub_control import HubControlClient
import configparser
-from typing import MutableMapping, Tuple
+import os
+from time import sleep
+import re
import fsspec
import gcsfs
import zarr
+
+from hub.store.cache import Cache
+from hub.store.lru_cache import LRUCache
+from hub.client.hub_control import HubControlClient
from hub.store.azure_fs import AzureBlobFileSystem
-import os
-import re
-def _connect(tag):
+def _connect(tag, public=True):
"""Connects to the backend and receives credentials"""
creds = HubControlClient().get_config()
@@ -28,12 +29,15 @@ def _connect(tag):
else:
sub_tags = tag.split("/")
# Get repository path from the cred location
- path = "/".join(creds["bucket"].split("/")[:-1])
+ path = "/".join(creds["bucket"].split("/")[:-2])
+ path = path + "/public" if public else path + "/private"
path = f"{path}/{sub_tags[0]}/{sub_tags[-1]}"
return path, creds
-def get_fs_and_path(url: str, token=None) -> Tuple[fsspec.AbstractFileSystem, str]:
+def get_fs_and_path(
+ url: str, token=None, public=True
+) -> Tuple[fsspec.AbstractFileSystem, str]:
if url.startswith("s3://"):
token = token or dict()
token = read_aws_creds(token) if isinstance(token, str) else token
@@ -72,7 +76,7 @@ def get_fs_and_path(url: str, token=None) -> Tuple[fsspec.AbstractFileSystem, st
return fsspec.filesystem("file"), url
else:
# TOOD check if url is username/dataset:version
- url, creds = _connect(url)
+ url, creds = _connect(url, public=public)
fs = fsspec.filesystem(
"s3",
key=creds["access_key"],
@@ -118,12 +122,6 @@ def get_cache_path(path, cache_folder="~/.activeloop/cache/"):
def get_storage_map(fs, path, memcache=2 ** 26, lock=True, storage_cache=2 ** 28):
store = _get_storage_map(fs, path)
- cache_path = get_cache_path(path)
- if storage_cache and storage_cache > 0:
- os.makedirs(cache_path, exist_ok=True)
- store = LRUCache(
- zarr.LMDBStore(cache_path, buffers=True, lock=lock), store, storage_cache
- )
if memcache and memcache > 0:
store = LRUCache(zarr.MemoryStore(), store, memcache)
return store
diff --git a/hub/test_numcodecs.py b/hub/test_numcodecs.py
new file mode 100644
index 0000000000..611542deb9
--- /dev/null
+++ b/hub/test_numcodecs.py
@@ -0,0 +1,11 @@
+import numpy as np
+
+from .numcodecs import PngCodec
+
+
+def test_png_codec():
+ codec = PngCodec()
+ arr = np.ones((1000, 1000, 3), dtype="uint8")
+ bytes_ = codec.encode(arr)
+ arr_ = codec.decode(bytes_)
+ assert (arr == arr_).all()
diff --git a/hub/tests/test_hub_init.py b/hub/tests/test_hub_init.py
index 963d45ceed..8594ca20f0 100644
--- a/hub/tests/test_hub_init.py
+++ b/hub/tests/test_hub_init.py
@@ -1,3 +1,6 @@
+from hub.exceptions import HubDatasetNotFoundException
+import pytest
+
import hub
import hub.config
from hub.utils import dask_loaded
@@ -22,6 +25,13 @@ def test_load(caplog):
assert isinstance(obj, hub.Dataset) == True
+def test_load_wrong_dataset():
+ try:
+ obj = hub.load("./data/dataset_that_does_not_exist")
+ except Exception as ex:
+ assert isinstance(ex, HubDatasetNotFoundException)
+
+
if __name__ == "__main__":
test_local_mode()
test_dev_mode()
diff --git a/hub/utils.py b/hub/utils.py
index e5023d0892..4a93488344 100644
--- a/hub/utils.py
+++ b/hub/utils.py
@@ -1,5 +1,11 @@
from math import gcd
import time
+from collections import abc
+
+from numpy.lib.arraysetops import isin
+
+from hub.exceptions import ShapeLengthException
+from hub import defaults
def _flatten(list_):
@@ -48,6 +54,17 @@ def azure_creds_exist():
return False
+def hub_creds_exist():
+ """Checks if credentials exists"""
+
+ import os
+
+ env = os.getenv("ACTIVELOOP_HUB_PASSWORD")
+ if env is not None:
+ return True
+ return False
+
+
def pytorch_loaded():
try:
import torch
@@ -150,3 +167,24 @@ def __enter__(self):
def __exit__(self, *args):
print(f"{self._text}: {time.time() - self._start}s")
+
+
+def norm_shape(shape):
+ shape = shape or (None,)
+ if isinstance(shape, int):
+ shape = (shape,)
+ if not isinstance(shape, abc.Iterable):
+ raise TypeError(
+ f"shape is not None, int or Iterable, type(shape): {type(shape)}"
+ )
+ shape = tuple(shape)
+ if not all([isinstance(s, int) or s is None for s in shape]):
+ raise TypeError(f"Shape elements can be either int or None | shape: {shape}")
+ return shape
+
+
+def norm_cache(cache):
+ cache = cache or 0
+ if not isinstance(cache, int):
+ raise TypeError("Cache should be None or int")
+ return cache
diff --git a/requirements-dev.txt b/requirements-dev.txt
index dbac4d3d08..524d2d3e71 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,4 +1,4 @@
-pytest==6.1.2
+pytest==6.2.1
pytest-cov==2.10.1
flake8==3.8.4
black==20.8b1
diff --git a/requirements.txt b/requirements.txt
index 602fab3ac2..ab232f79f7 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,16 +2,16 @@ click>=6.7,<8
numpy>=1.13.0,<2
requests>=2,<3
cachey==0.2.1
-fsspec==0.8.4
+fsspec==0.8.5
s3fs==0.4.2
gcsfs==0.6.2
outdated==0.2.0
lz4>=3,<4
-zarr==2.5
+zarr==2.6.1
lmdb==1.0.0
-boto3==1.16.10
-azure-storage-blob==12.5.0
-tqdm==4.51
+boto3==1.16.39
+tqdm==4.54.1
+azure-storage-blob==12.6.0
pathos>=0.2.2
psutil>=5.7.3
Pillow>=8.0.1
diff --git a/setup.py b/setup.py
index afcc0018e7..40e5866093 100644
--- a/setup.py
+++ b/setup.py
@@ -3,7 +3,7 @@
from setuptools import find_packages, setup
project = "hub"
-VERSION = "1.0.6"
+VERSION = "1.0.7"
this_directory = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(this_directory, "README.md")) as f: