brunorosilva commited on
Commit
c4bc1f2
0 Parent(s):

init: working release

Browse files
.gitignore ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ env/
12
+ build/
13
+ develop-eggs/
14
+ dist/
15
+ downloads/
16
+ eggs/
17
+ .eggs/
18
+ lib/
19
+ lib64/
20
+ parts/
21
+ sdist/
22
+ var/
23
+ wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+
28
+ # PyInstaller
29
+ # Usually these files are written by a python script from a template
30
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
31
+ *.manifest
32
+ *.spec
33
+
34
+ # Installer logs
35
+ pip-log.txt
36
+ pip-delete-this-directory.txt
37
+
38
+ # Unit test / coverage reports
39
+ htmlcov/
40
+ .tox/
41
+ .coverage
42
+ .coverage.*
43
+ .cache
44
+ nosetests.xml
45
+ coverage.xml
46
+ *.cover
47
+ .hypothesis/
48
+
49
+ # Translations
50
+ *.mo
51
+ *.pot
52
+
53
+ # Django stuff:
54
+ *.log
55
+ local_settings.py
56
+
57
+ # Flask stuff:
58
+ instance/
59
+ .webassets-cache
60
+
61
+ # Scrapy stuff:
62
+ .scrapy
63
+
64
+ # Sphinx documentation
65
+ docs/_build/
66
+
67
+ # PyBuilder
68
+ target/
69
+
70
+ # Jupyter Notebook
71
+ .ipynb_checkpoints
72
+
73
+ # pyenv
74
+ .python-version
75
+
76
+ # celery beat schedule file
77
+ celerybeat-schedule
78
+
79
+ # SageMath parsed files
80
+ *.sage.py
81
+
82
+ # dotenv
83
+ .env
84
+
85
+ # virtualenv
86
+ .venv
87
+ venv/
88
+ ENV/
89
+
90
+ # Spyder project settings
91
+ .spyderproject
92
+ .spyproject
93
+
94
+ # Rope project settings
95
+ .ropeproject
96
+
97
+ # mkdocs documentation
98
+ /site
99
+
100
+ # mypy
101
+ .mypy_cache/
102
+
103
+ # input data, saved log, checkpoints
104
+ input/
105
+ saved/
106
+ datasets/
107
+
108
+ # editor, os cache directory
109
+ .vscode/
110
+ .idea/
111
+ __MACOSX/
112
+
113
+ # random imgs
114
+ *.jpeg
115
+ *.jpg
116
+ *.png
README.md ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # (WIP) MakeItSports Bot Image-to-Art Search
2
+
3
+ This project fine-tunes a Vision Transformer (ViT) model, pre-trained with "google/vit-base-patch32-224-in21k" weights and fine tuned with the style of [ArtButMakeItSports](https://www.instagram.com/artbutmakeitsports/), to perform image-to-art search across 81k artworks made available by [WikiArt](https://wikiart.org/).
4
+
5
+ ## Table of Contents
6
+
7
+ - [Overview](#overview)
8
+ - [Installation](#installation)
9
+ - [Usage](#usage)
10
+ - [Dataset](#dataset)
11
+ - [Training](#training)
12
+ - [Inference](#inference)
13
+ - [Contributing](#contributing)
14
+ - [License](#license)
15
+
16
+ ## Overview
17
+
18
+ This project leverages the Vision Transformer (ViT) model architecture for the task of image-to-art search. By fine-tuning the pre-trained ViT model on a custom dataset derived from the Instagram account [ArtButMakeItSports](https://www.instagram.com/artbutmakeitsports/), we aim to create a model capable of matching images (but not only) to corresponding artworks, being able to search for any of the images on [WikiArt](https://wikiart.org/).
19
+
20
+ ## Installation
21
+
22
+ 1. Clone the repository:
23
+ ```sh
24
+ git clone https://github.com/brunorosilva/makeitsports-bot.git
25
+ cd makeitsports-bot
26
+ ```
27
+
28
+ 2. Install poetry:
29
+ ```sh
30
+ pip install poetry
31
+ ```
32
+
33
+ 3. Install using poetry:
34
+ ```sh
35
+ poetry install
36
+ ```
37
+
38
+ ## How it works
39
+
40
+ ### Dataset Preparation
41
+
42
+ 1. Download images from the [ArtButMakeItSports](https://www.instagram.com/artbutmakeitsports/) Instagram account.
43
+ 2. Organize the images into appropriate directories for training and validation.
44
+
45
+ ### Training
46
+
47
+ 1. Fine-tune the ViT model:
48
+ ```sh
49
+ poetry run python main.py train --epochs 50 --batch_size 32
50
+ ```
51
+
52
+ ### Inference via Gradio
53
+
54
+ 1. Perform image-to-art search using the fine-tuned model:
55
+ ```sh
56
+ poetry run python main.py interface
57
+ ```
58
+
59
+ ### Create new gallery
60
+
61
+ 1. If you want to index new images to search, use:
62
+ ```sh
63
+ poetry run python main.py gallery --gallery_path <your_path>
64
+ ```
65
+
66
+ ## Dataset
67
+
68
+ The dataset derives from 1k images from the Instagram account [ArtButMakeItSports](https://www.instagram.com/artbutmakeitsports/). Images are downloaded and split into training, validation and test sets. Each image is paired with its corresponding artwork for training purposes, if you want this dataset just ask me stating your usage.
69
+
70
+ WikiArt is indexed using the same process, except that there's no expected result. So each artwork is mapped to itself and the embeddings are saved as a numpy file (will be changed to chromadb in the future).
71
+
72
+ ## Training
73
+
74
+ The training script fine-tunes the ViT model on the prepared dataset. Key steps include:
75
+
76
+ 1. Loading the pre-trained "google/vit-base-patch32-224-in21k" weights.
77
+ 2. Preparing the dataset and data loaders.
78
+ 3. Fine-tuning the model using a custom training loop.
main.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from makeitsports_bot.models.predict import predict
2
+ from makeitsports_bot.models.train import fine_tune_vit
3
+ from makeitsports_bot.models.compute_embeddings import create_gallery_embeddings
4
+ import gradio as gr
5
+ import argparse
6
+
7
+ def make_interface():
8
+ interface = gr.Interface(
9
+ fn=predict,
10
+ inputs=gr.Image(type="pil"),
11
+ outputs=gr.Gallery(label="Most similar images", height=256 * 3),
12
+ live=True,
13
+ )
14
+ interface.launch()
15
+
16
+ def train(epochs, batch_size):
17
+ fine_tune_vit(epochs, batch_size)
18
+
19
+ def create_gallery(gallery_path):
20
+ create_gallery_embeddings(gallery_path)
21
+
22
+ def main():
23
+ parser = argparse.ArgumentParser(description="Train or infer the ViT model for image-to-art search.")
24
+ subparsers = parser.add_subparsers(dest="command")
25
+
26
+ # Subparser for training
27
+ train_parser = subparsers.add_parser("train", help="Fine-tune the ViT model")
28
+ train_parser.add_argument("--epochs", type=int, default=50, help="Number of training epochs")
29
+ train_parser.add_argument("--batch_size", type=int, default=32, help="Batch size for training")
30
+
31
+ # Subparser for inference
32
+ _ = subparsers.add_parser("interface", help="Perform image-to-art search using the fine-tuned model")
33
+
34
+ create_gallery_parser = subparsers.add_parser("gallery", help="Create new gallery from a path")
35
+ create_gallery_parser.add_argument("--gallery_path", type=str, default="data/wikiart")
36
+ args = parser.parse_args()
37
+
38
+ if args.command == "train":
39
+ train(args.epochs, args.batch_size)
40
+ elif args.command == "interface":
41
+ make_interface()
42
+ elif args.command == "gallery":
43
+ create_gallery(args.gallery_path)
44
+ else:
45
+ parser.print_help()
46
+
47
+ if __name__ == "__main__":
48
+ main()
makeitsports_bot/__init__.py ADDED
File without changes
makeitsports_bot/constants.py ADDED
@@ -0,0 +1 @@
 
 
1
+ BASE_PATH = "data/artmakeitsports"
makeitsports_bot/data/__init__.py ADDED
File without changes
makeitsports_bot/data/data.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from makeitsports_bot.constants import BASE_PATH
2
+ import os
3
+ import numpy as np
4
+
5
+
6
+ def get_data_from_local():
7
+ right_data = [f"{BASE_PATH}/right/{fn}" for fn in os.listdir(f"{BASE_PATH}/right")]
8
+ top_data = [f"{BASE_PATH}/top/{fn}" for fn in os.listdir(f"{BASE_PATH}/top")]
9
+
10
+ x = np.array(right_data + top_data)
11
+ y = np.array([ex.replace("right", "left").replace("top", "bottom") for ex in x])
12
+
13
+ data = np.array([x, y])
14
+ return data
15
+
16
+
17
+ def split_train_val_test(data, test_size, val_size):
18
+ train_size = 1 - test_size - val_size
19
+ SPLIT = int(data.shape[1] * train_size)
20
+ TEST_SPLIT = SPLIT + int(data.shape[1] * test_size)
21
+ train = data[:, :SPLIT]
22
+ validation = data[:, SPLIT:TEST_SPLIT]
23
+ test = data[:, TEST_SPLIT:]
24
+ return train, validation, test
makeitsports_bot/data/dataset.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from PIL import Image
2
+ from torch.utils.data import Dataset
3
+
4
+
5
+ class ImageRetrievalDataset(Dataset):
6
+ def __init__(self, data, transform=None):
7
+ self.data = data
8
+ self.transform = transform
9
+
10
+ def __len__(self):
11
+ return len(self.data)
12
+
13
+ def __getitem__(self, idx):
14
+ input_path, label_path = self.data[:, idx]
15
+ input_image = Image.open(input_path).convert("RGB")
16
+ label_image = Image.open(label_path).convert("RGB")
17
+
18
+ if self.transform:
19
+ input_image = self.transform(input_image)
20
+ label_image = self.transform(label_image)
21
+
22
+ return input_image, label_image
makeitsports_bot/data/transforms.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from torchvision import transforms
2
+
3
+ transform = transforms.Compose(
4
+ [
5
+ transforms.Resize((224, 224)),
6
+ transforms.ToTensor(),
7
+ transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
8
+ ]
9
+ )
10
+
11
+
12
+ inversetransform = transforms.Compose(
13
+ [
14
+ transforms.Normalize(
15
+ mean=[0.0, 0.0, 0.0], std=[1 / 0.229, 1 / 0.224, 1 / 0.225]
16
+ ),
17
+ transforms.Normalize(mean=[-0.485, -0.456, -0.406], std=[1.0, 1.0, 1.0]),
18
+ ]
19
+ )
makeitsports_bot/losses/__init__.py ADDED
File without changes
makeitsports_bot/losses/contrastiveloss.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+
3
+
4
+ class ContrastiveLoss(torch.nn.Module):
5
+ def __init__(self, margin=1.0):
6
+ super(ContrastiveLoss, self).__init__()
7
+ self.margin = margin
8
+
9
+ def forward(self, output1, output2): # noqa
10
+ euclidean_distance = torch.nn.functional.pairwise_distance(output1, output2)
11
+ loss = torch.mean(torch.pow(euclidean_distance, 2))
12
+ return loss
makeitsports_bot/models/__init__.py ADDED
File without changes
makeitsports_bot/models/compute_embeddings.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from makeitsports_bot.models.model import ViTImageSearchModel
3
+ import numpy as np
4
+ from sklearn.neighbors import NearestNeighbors
5
+ from makeitsports_bot.data.dataset import ImageRetrievalDataset
6
+ from makeitsports_bot.data.transforms import transform
7
+ from tqdm import tqdm
8
+ import os
9
+
10
+ def extract_embedding(image_data, fine_tuned_model):
11
+ image = image_data.unsqueeze(0)
12
+ with torch.no_grad():
13
+ embedding = fine_tuned_model(image).cpu().numpy()
14
+ return embedding
15
+
16
+
17
+ def load_fine_tuned_model():
18
+ fine_tuned_model = ViTImageSearchModel()
19
+ fine_tuned_model.load_state_dict(torch.load("results/model.pth"))
20
+ fine_tuned_model.eval()
21
+ return fine_tuned_model
22
+
23
+
24
+ def create_gallery(dataset, fine_tuned_model, save=True):
25
+ gallery_embeddings = []
26
+ for img_path, _ in tqdm(dataset):
27
+ embedding = extract_embedding(img_path, fine_tuned_model)
28
+ gallery_embeddings.append(embedding)
29
+ gallery_embeddings = np.vstack(gallery_embeddings)
30
+ if save:
31
+ np.save("results/embeddings", gallery_embeddings)
32
+ return gallery_embeddings
33
+
34
+
35
+ def search_image(query_image_path, gallery_embeddings, k=4):
36
+ fine_tuned_model = load_fine_tuned_model()
37
+ query_embedding = extract_embedding(query_image_path, fine_tuned_model)
38
+ neighbors = NearestNeighbors(n_neighbors=k, metric="euclidean")
39
+ neighbors.fit(gallery_embeddings)
40
+ distances, indices = neighbors.kneighbors(query_embedding)
41
+ return indices, distances
42
+
43
+
44
+ def create_gallery_embeddings(folder): # noqa
45
+ x = np.array([f"{folder}/{file}" for file in os.listdir(folder)])
46
+ gallery_data = np.array([x, x])
47
+ gallery_dataset = ImageRetrievalDataset(gallery_data, transform=transform)
48
+ fine_tuned_model = load_fine_tuned_model()
49
+ create_gallery(gallery_dataset, fine_tuned_model)
makeitsports_bot/models/model.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import ViTModel
2
+ from torch import nn
3
+
4
+
5
+ class ViTImageSearchModel(nn.Module):
6
+ def __init__(self, pretrained_model_name="google/vit-base-patch32-224-in21k"):
7
+ super(ViTImageSearchModel, self).__init__()
8
+ self.vit = ViTModel.from_pretrained(pretrained_model_name)
9
+
10
+ def forward(self, x): # noqa
11
+ outputs = self.vit(pixel_values=x)
12
+ cls_hidden_state = outputs.last_hidden_state[:, 0, :]
13
+ return cls_hidden_state
makeitsports_bot/models/predict.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from makeitsports_bot.data.dataset import ImageRetrievalDataset
2
+ from makeitsports_bot.data.transforms import transform
3
+ from makeitsports_bot.models.train import fine_tune_vit
4
+ from makeitsports_bot.utils import inverse_transform_img
5
+ from makeitsports_bot.models.compute_embeddings import (
6
+ search_image,
7
+ create_gallery,
8
+ load_fine_tuned_model,
9
+ )
10
+ import numpy as np
11
+ import os
12
+ from PIL import Image
13
+
14
+
15
+ def predict(img: Image):
16
+ x = np.array([f"data/wikiart/{file}" for file in os.listdir("data/wikiart")])
17
+ wikiart_data = np.array([x, x])
18
+ wikiart_dataset = ImageRetrievalDataset(wikiart_data, transform=transform)
19
+ gallery_embeddings = np.load("results/embeddings.npy")
20
+ tmp_img_path = "tmp_img.png"
21
+ img.save(tmp_img_path)
22
+ pred_img = np.array([[tmp_img_path], [tmp_img_path]])
23
+ pred_dataset = ImageRetrievalDataset(pred_img, transform=transform)
24
+ indices, distances = search_image(pred_dataset[0][0], gallery_embeddings)
25
+ results = []
26
+ for idx, _ in zip(indices[0], distances[0]):
27
+ inv_tensor = inverse_transform_img(wikiart_dataset[idx][1]).cpu().numpy()
28
+ results.append(inv_tensor)
29
+ return results
makeitsports_bot/models/train.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from makeitsports_bot.data.dataset import ImageRetrievalDataset
2
+ from torch.utils.data import DataLoader
3
+ from makeitsports_bot.losses.contrastiveloss import ContrastiveLoss
4
+ from makeitsports_bot.data.data import get_data_from_local, split_train_val_test
5
+ from makeitsports_bot.data.transforms import transform
6
+ from makeitsports_bot.models.model import ViTImageSearchModel
7
+ import torch
8
+ from torch.optim import Adam
9
+ from torch.utils.tensorboard import SummaryWriter
10
+ import numpy as np
11
+
12
+
13
+ def fine_tune_vit(epochs, batch_size):
14
+ data = get_data_from_local()
15
+ train_data, val_data, test_data = split_train_val_test(data, 0.2, 0.1)
16
+ np.save("results/test_data", test_data)
17
+ train_dataset = ImageRetrievalDataset(train_data, transform=transform)
18
+ val_dataset = ImageRetrievalDataset(val_data, transform=transform)
19
+
20
+ train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
21
+ val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)
22
+
23
+ model = ViTImageSearchModel()
24
+
25
+ # logs
26
+ log_dir = "./logs/"
27
+ writer = SummaryWriter(log_dir=log_dir)
28
+
29
+ # params
30
+ criterion = ContrastiveLoss()
31
+ optimizer = Adam(model.parameters(), lr=1e-4)
32
+ epochs = epochs
33
+
34
+ for epoch in range(epochs):
35
+ model.train()
36
+ total_loss = 0
37
+
38
+ for batch_idx, batch in enumerate(train_loader):
39
+ inputs, labels = batch
40
+ optimizer.zero_grad()
41
+
42
+ input_embeddings = model(inputs)
43
+ label_embeddings = model(labels)
44
+
45
+ loss = criterion(input_embeddings, label_embeddings)
46
+
47
+ loss.backward()
48
+ optimizer.step()
49
+
50
+ total_loss += loss.item()
51
+ writer.add_scalar(
52
+ "Train Loss", loss.item(), epoch * len(train_loader) + batch_idx
53
+ )
54
+
55
+ avg_train_loss = total_loss / len(train_loader)
56
+ writer.add_scalar("Average Train Loss", avg_train_loss, epoch)
57
+
58
+ print(f"Epoch [{epoch+1}/{epochs}], Loss: {total_loss/len(train_loader)}")
59
+
60
+ model.eval()
61
+ with torch.no_grad():
62
+ val_loss = 0
63
+ for batch_idx, batch in enumerate(val_loader):
64
+ inputs, labels = batch
65
+ input_embeddings = model(inputs)
66
+ label_embeddings = model(labels)
67
+
68
+ loss = criterion(input_embeddings, label_embeddings)
69
+ val_loss += loss.item()
70
+ avg_val_loss = val_loss / len(val_loader)
71
+ writer.add_scalar("Validation Loss", avg_val_loss, epoch)
72
+ print(f"Validation Loss: {val_loss/len(val_loader)}")
73
+
74
+ torch.save(model.state_dict(), "results/model.pth")
makeitsports_bot/utils.py ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ from makeitsports_bot.data.transforms import inversetransform
2
+
3
+
4
+ def inverse_transform_img(img):
5
+ inv_tensor = inversetransform(img)
6
+ return inv_tensor.permute(1, 2, 0)
notebooks/0-0-brsc-create-dataset.ipynb ADDED
@@ -0,0 +1,399 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "f5c16e68-e20a-473c-9d0c-557314b32203",
6
+ "metadata": {},
7
+ "source": [
8
+ "## Creating the dataset"
9
+ ]
10
+ },
11
+ {
12
+ "cell_type": "code",
13
+ "execution_count": 43,
14
+ "id": "f4e1aece-855e-4687-81d4-376da67545e2",
15
+ "metadata": {},
16
+ "outputs": [],
17
+ "source": [
18
+ "import os"
19
+ ]
20
+ },
21
+ {
22
+ "cell_type": "code",
23
+ "execution_count": 44,
24
+ "id": "fadf8ef6-ab1c-46a7-962c-512b61cff8b0",
25
+ "metadata": {},
26
+ "outputs": [],
27
+ "source": [
28
+ "base_path = \"../data/artmakeitsports/\"\n",
29
+ "folders = [f'{base_path}{file}' for file in os.listdir(base_path)]"
30
+ ]
31
+ },
32
+ {
33
+ "cell_type": "code",
34
+ "execution_count": 45,
35
+ "id": "99514288-bb6c-4b62-bf0e-f66c86b246b2",
36
+ "metadata": {},
37
+ "outputs": [
38
+ {
39
+ "data": {
40
+ "text/plain": [
41
+ "['../data/artmakeitsports/right',\n",
42
+ " '../data/artmakeitsports/top',\n",
43
+ " '../data/artmakeitsports/bruno.jpg',\n",
44
+ " '../data/artmakeitsports/image_test.jpeg',\n",
45
+ " '../data/artmakeitsports/train',\n",
46
+ " '../data/artmakeitsports/t.jpg',\n",
47
+ " '../data/artmakeitsports/bruno.jpeg',\n",
48
+ " '../data/artmakeitsports/validation',\n",
49
+ " '../data/artmakeitsports/left',\n",
50
+ " '../data/artmakeitsports/hugo.jpeg',\n",
51
+ " '../data/artmakeitsports/datasets',\n",
52
+ " '../data/artmakeitsports/bottom']"
53
+ ]
54
+ },
55
+ "execution_count": 45,
56
+ "metadata": {},
57
+ "output_type": "execute_result"
58
+ }
59
+ ],
60
+ "source": [
61
+ "folders"
62
+ ]
63
+ },
64
+ {
65
+ "cell_type": "markdown",
66
+ "id": "9e3b1185-7fa1-4eb5-996f-415fce3f1cf1",
67
+ "metadata": {},
68
+ "source": [
69
+ "---"
70
+ ]
71
+ },
72
+ {
73
+ "cell_type": "code",
74
+ "execution_count": 46,
75
+ "id": "5c0519e8-bbfd-4f6b-ba4a-ae099de57598",
76
+ "metadata": {},
77
+ "outputs": [],
78
+ "source": [
79
+ "import numpy as np"
80
+ ]
81
+ },
82
+ {
83
+ "cell_type": "code",
84
+ "execution_count": 47,
85
+ "id": "9de6eb5e-0144-45e9-9eb0-faad01a94b66",
86
+ "metadata": {},
87
+ "outputs": [],
88
+ "source": [
89
+ "x = np.array([])\n",
90
+ "for folder in [\"../data/artmakeitsports/right\", \"../data/artmakeitsports/top\"]:\n",
91
+ " x = np.append(x, np.array([f\"{folder}/{file}\" for file in os.listdir(folder)]))"
92
+ ]
93
+ },
94
+ {
95
+ "cell_type": "code",
96
+ "execution_count": 48,
97
+ "id": "f0b773aa-8a55-4fdf-926a-b822e8941526",
98
+ "metadata": {},
99
+ "outputs": [
100
+ {
101
+ "name": "stdout",
102
+ "output_type": "stream",
103
+ "text": [
104
+ "/usr/bin/zsh: /home/rosilva/miniconda3/envs/lori/lib/libtinfo.so.6: no version information available (required by /usr/bin/zsh)\n",
105
+ "bottom\t bruno.jpg hugo.jpeg\tleft t.jpg train\n",
106
+ "bruno.jpeg datasets image_test.jpeg\tright top validation\n"
107
+ ]
108
+ }
109
+ ],
110
+ "source": [
111
+ "!ls ../data/artmakeitsports/"
112
+ ]
113
+ },
114
+ {
115
+ "cell_type": "code",
116
+ "execution_count": 49,
117
+ "id": "b5fde846-d0ac-44f6-83e6-daa74aced018",
118
+ "metadata": {},
119
+ "outputs": [],
120
+ "source": [
121
+ "hugo = [\"../data/artmakeitsports/image_test.jpeg\"]"
122
+ ]
123
+ },
124
+ {
125
+ "cell_type": "code",
126
+ "execution_count": 50,
127
+ "id": "1f03d876-ed34-4465-961b-b2411aadf35f",
128
+ "metadata": {},
129
+ "outputs": [],
130
+ "source": [
131
+ "hugo = np.array([hugo, hugo])"
132
+ ]
133
+ },
134
+ {
135
+ "cell_type": "code",
136
+ "execution_count": 51,
137
+ "id": "4b28832b-fee1-4b6b-a8cc-773c8cab4219",
138
+ "metadata": {},
139
+ "outputs": [
140
+ {
141
+ "data": {
142
+ "text/plain": [
143
+ "array([['../data/artmakeitsports/image_test.jpeg'],\n",
144
+ " ['../data/artmakeitsports/image_test.jpeg']], dtype='<U39')"
145
+ ]
146
+ },
147
+ "execution_count": 51,
148
+ "metadata": {},
149
+ "output_type": "execute_result"
150
+ }
151
+ ],
152
+ "source": [
153
+ "hugo"
154
+ ]
155
+ },
156
+ {
157
+ "cell_type": "code",
158
+ "execution_count": 52,
159
+ "id": "de89352d-6c8c-48ba-a255-f2362d8b8a56",
160
+ "metadata": {},
161
+ "outputs": [],
162
+ "source": [
163
+ "np.save(\"hugo\", hugo)"
164
+ ]
165
+ },
166
+ {
167
+ "cell_type": "code",
168
+ "execution_count": 87,
169
+ "id": "a219c737-049a-4dc1-9c56-0def8236139d",
170
+ "metadata": {},
171
+ "outputs": [
172
+ {
173
+ "data": {
174
+ "text/plain": [
175
+ "(663,)"
176
+ ]
177
+ },
178
+ "execution_count": 87,
179
+ "metadata": {},
180
+ "output_type": "execute_result"
181
+ }
182
+ ],
183
+ "source": [
184
+ "x.shape"
185
+ ]
186
+ },
187
+ {
188
+ "cell_type": "code",
189
+ "execution_count": 88,
190
+ "id": "dde185c5-e754-4683-8f00-85311639249f",
191
+ "metadata": {},
192
+ "outputs": [],
193
+ "source": [
194
+ "y = np.array([ex.replace(\"right\", \"left\").replace(\"top\", \"bottom\") for ex in x])"
195
+ ]
196
+ },
197
+ {
198
+ "cell_type": "code",
199
+ "execution_count": 89,
200
+ "id": "47c27bef-e6d5-426c-9788-0b06ce6096e1",
201
+ "metadata": {},
202
+ "outputs": [
203
+ {
204
+ "data": {
205
+ "text/plain": [
206
+ "(663,)"
207
+ ]
208
+ },
209
+ "execution_count": 89,
210
+ "metadata": {},
211
+ "output_type": "execute_result"
212
+ }
213
+ ],
214
+ "source": [
215
+ "y.shape"
216
+ ]
217
+ },
218
+ {
219
+ "cell_type": "code",
220
+ "execution_count": 90,
221
+ "id": "5068a082-b787-4cd7-a973-c91bbcba33e7",
222
+ "metadata": {},
223
+ "outputs": [],
224
+ "source": [
225
+ "dataset = np.array([x, y])"
226
+ ]
227
+ },
228
+ {
229
+ "cell_type": "code",
230
+ "execution_count": 91,
231
+ "id": "a8b81faf-1459-4549-9411-22951667c6c5",
232
+ "metadata": {},
233
+ "outputs": [
234
+ {
235
+ "data": {
236
+ "text/plain": [
237
+ "663"
238
+ ]
239
+ },
240
+ "execution_count": 91,
241
+ "metadata": {},
242
+ "output_type": "execute_result"
243
+ }
244
+ ],
245
+ "source": [
246
+ "dataset.shape[1]"
247
+ ]
248
+ },
249
+ {
250
+ "cell_type": "code",
251
+ "execution_count": 92,
252
+ "id": "a599869f-d33f-4a7b-8772-1f2fdf50555d",
253
+ "metadata": {},
254
+ "outputs": [],
255
+ "source": [
256
+ "SPLIT = int(dataset.shape[1]*.8)\n",
257
+ "TEST_SPLIT = SPLIT + int(dataset.shape[1]*.1)\n",
258
+ "train = dataset[:,:SPLIT]\n",
259
+ "validation = dataset[:,SPLIT:TEST_SPLIT]\n",
260
+ "test = dataset[:,TEST_SPLIT:]"
261
+ ]
262
+ },
263
+ {
264
+ "cell_type": "code",
265
+ "execution_count": 93,
266
+ "id": "e41f40ad-0da6-43eb-b2c2-1f24283063b7",
267
+ "metadata": {},
268
+ "outputs": [
269
+ {
270
+ "data": {
271
+ "text/plain": [
272
+ "(2, 530)"
273
+ ]
274
+ },
275
+ "execution_count": 93,
276
+ "metadata": {},
277
+ "output_type": "execute_result"
278
+ }
279
+ ],
280
+ "source": [
281
+ "train.shape"
282
+ ]
283
+ },
284
+ {
285
+ "cell_type": "code",
286
+ "execution_count": 94,
287
+ "id": "28d94611-15a0-4f9b-8920-b6765572125c",
288
+ "metadata": {},
289
+ "outputs": [
290
+ {
291
+ "data": {
292
+ "text/plain": [
293
+ "(2, 66)"
294
+ ]
295
+ },
296
+ "execution_count": 94,
297
+ "metadata": {},
298
+ "output_type": "execute_result"
299
+ }
300
+ ],
301
+ "source": [
302
+ "validation.shape"
303
+ ]
304
+ },
305
+ {
306
+ "cell_type": "code",
307
+ "execution_count": 95,
308
+ "id": "aea0f3c6-ed5f-4f9a-97e9-1b4bbadae359",
309
+ "metadata": {},
310
+ "outputs": [
311
+ {
312
+ "data": {
313
+ "text/plain": [
314
+ "(2, 67)"
315
+ ]
316
+ },
317
+ "execution_count": 95,
318
+ "metadata": {},
319
+ "output_type": "execute_result"
320
+ }
321
+ ],
322
+ "source": [
323
+ "test.shape"
324
+ ]
325
+ },
326
+ {
327
+ "cell_type": "code",
328
+ "execution_count": 96,
329
+ "id": "af13d764-0730-4afe-9711-5cd16035337d",
330
+ "metadata": {},
331
+ "outputs": [
332
+ {
333
+ "data": {
334
+ "text/plain": [
335
+ "'../data/artmakeitsports/'"
336
+ ]
337
+ },
338
+ "execution_count": 96,
339
+ "metadata": {},
340
+ "output_type": "execute_result"
341
+ }
342
+ ],
343
+ "source": [
344
+ "base_path"
345
+ ]
346
+ },
347
+ {
348
+ "cell_type": "code",
349
+ "execution_count": 98,
350
+ "id": "b9a7971d-aa5d-4d08-9531-7596475fbc04",
351
+ "metadata": {},
352
+ "outputs": [],
353
+ "source": [
354
+ "os.mkdir(f\"{base_path}datasets\")"
355
+ ]
356
+ },
357
+ {
358
+ "cell_type": "code",
359
+ "execution_count": 99,
360
+ "id": "543b504e-1646-4c80-8e74-f42dc6251f66",
361
+ "metadata": {},
362
+ "outputs": [],
363
+ "source": [
364
+ "np.save(f\"{base_path}datasets/train\", train)\n",
365
+ "np.save(f\"{base_path}datasets/validation\", validation)\n",
366
+ "np.save(f\"{base_path}datasets/test\", test)"
367
+ ]
368
+ },
369
+ {
370
+ "cell_type": "code",
371
+ "execution_count": null,
372
+ "id": "17b6829d-2c2b-4635-8301-9c2c6e738446",
373
+ "metadata": {},
374
+ "outputs": [],
375
+ "source": []
376
+ }
377
+ ],
378
+ "metadata": {
379
+ "kernelspec": {
380
+ "display_name": "Python 3 (ipykernel)",
381
+ "language": "python",
382
+ "name": "python3"
383
+ },
384
+ "language_info": {
385
+ "codemirror_mode": {
386
+ "name": "ipython",
387
+ "version": 3
388
+ },
389
+ "file_extension": ".py",
390
+ "mimetype": "text/x-python",
391
+ "name": "python",
392
+ "nbconvert_exporter": "python",
393
+ "pygments_lexer": "ipython3",
394
+ "version": "3.10.12"
395
+ }
396
+ },
397
+ "nbformat": 4,
398
+ "nbformat_minor": 5
399
+ }
notebooks/0-1-brsc-poc-fine-tune.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
notebooks/0-2-brsc-create-wikiart-dataset.ipynb ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "id": "f5c16e68-e20a-473c-9d0c-557314b32203",
6
+ "metadata": {},
7
+ "source": [
8
+ "## Creating the dataset"
9
+ ]
10
+ },
11
+ {
12
+ "cell_type": "code",
13
+ "execution_count": 1,
14
+ "id": "f4e1aece-855e-4687-81d4-376da67545e2",
15
+ "metadata": {},
16
+ "outputs": [],
17
+ "source": [
18
+ "import os"
19
+ ]
20
+ },
21
+ {
22
+ "cell_type": "code",
23
+ "execution_count": 7,
24
+ "id": "5c0519e8-bbfd-4f6b-ba4a-ae099de57598",
25
+ "metadata": {},
26
+ "outputs": [],
27
+ "source": [
28
+ "import numpy as np"
29
+ ]
30
+ },
31
+ {
32
+ "cell_type": "code",
33
+ "execution_count": 6,
34
+ "id": "fadf8ef6-ab1c-46a7-962c-512b61cff8b0",
35
+ "metadata": {},
36
+ "outputs": [],
37
+ "source": [
38
+ "base_path = \"../data/wikiart/\""
39
+ ]
40
+ },
41
+ {
42
+ "cell_type": "code",
43
+ "execution_count": 8,
44
+ "id": "9de6eb5e-0144-45e9-9eb0-faad01a94b66",
45
+ "metadata": {},
46
+ "outputs": [],
47
+ "source": [
48
+ "x = np.array([])\n",
49
+ "x = np.append(x, np.array([f\"{base_path}{file}\" for file in os.listdir(base_path)]))"
50
+ ]
51
+ },
52
+ {
53
+ "cell_type": "code",
54
+ "execution_count": 10,
55
+ "id": "5d787870-a55e-4322-8df6-bd7b7e3f48da",
56
+ "metadata": {},
57
+ "outputs": [
58
+ {
59
+ "data": {
60
+ "text/plain": [
61
+ "(80082,)"
62
+ ]
63
+ },
64
+ "execution_count": 10,
65
+ "metadata": {},
66
+ "output_type": "execute_result"
67
+ }
68
+ ],
69
+ "source": [
70
+ "x.shape"
71
+ ]
72
+ },
73
+ {
74
+ "cell_type": "code",
75
+ "execution_count": 11,
76
+ "id": "b5fde846-d0ac-44f6-83e6-daa74aced018",
77
+ "metadata": {},
78
+ "outputs": [],
79
+ "source": [
80
+ "wikiart_dataset = np.array([x, x])"
81
+ ]
82
+ },
83
+ {
84
+ "cell_type": "code",
85
+ "execution_count": 12,
86
+ "id": "f9ab90a1-e78f-4009-9d97-e0a7066c36c3",
87
+ "metadata": {},
88
+ "outputs": [
89
+ {
90
+ "data": {
91
+ "text/plain": [
92
+ "(2, 80082)"
93
+ ]
94
+ },
95
+ "execution_count": 12,
96
+ "metadata": {},
97
+ "output_type": "execute_result"
98
+ }
99
+ ],
100
+ "source": [
101
+ "wikiart_dataset.shape"
102
+ ]
103
+ },
104
+ {
105
+ "cell_type": "code",
106
+ "execution_count": 13,
107
+ "id": "de89352d-6c8c-48ba-a255-f2362d8b8a56",
108
+ "metadata": {},
109
+ "outputs": [],
110
+ "source": [
111
+ "np.save(\"../data/artmakeitsports/datasets/wikiart_data\", wikiart_dataset)"
112
+ ]
113
+ },
114
+ {
115
+ "cell_type": "code",
116
+ "execution_count": null,
117
+ "id": "17b6829d-2c2b-4635-8301-9c2c6e738446",
118
+ "metadata": {},
119
+ "outputs": [],
120
+ "source": []
121
+ }
122
+ ],
123
+ "metadata": {
124
+ "kernelspec": {
125
+ "display_name": "Python 3 (ipykernel)",
126
+ "language": "python",
127
+ "name": "python3"
128
+ },
129
+ "language_info": {
130
+ "codemirror_mode": {
131
+ "name": "ipython",
132
+ "version": 3
133
+ },
134
+ "file_extension": ".py",
135
+ "mimetype": "text/x-python",
136
+ "name": "python",
137
+ "nbconvert_exporter": "python",
138
+ "pygments_lexer": "ipython3",
139
+ "version": "3.10.12"
140
+ }
141
+ },
142
+ "nbformat": 4,
143
+ "nbformat_minor": 5
144
+ }
notebooks/0-3-brsc-create-wikiart-gallery.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
poetry.lock ADDED
@@ -0,0 +1,1745 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [[package]]
2
+ name = "absl-py"
3
+ version = "2.1.0"
4
+ description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py."
5
+ category = "main"
6
+ optional = false
7
+ python-versions = ">=3.7"
8
+
9
+ [[package]]
10
+ name = "aiofiles"
11
+ version = "23.2.1"
12
+ description = "File support for asyncio."
13
+ category = "main"
14
+ optional = false
15
+ python-versions = ">=3.7"
16
+
17
+ [[package]]
18
+ name = "altair"
19
+ version = "5.3.0"
20
+ description = "Vega-Altair: A declarative statistical visualization library for Python."
21
+ category = "main"
22
+ optional = false
23
+ python-versions = ">=3.8"
24
+
25
+ [package.dependencies]
26
+ jinja2 = "*"
27
+ jsonschema = ">=3.0"
28
+ numpy = "*"
29
+ packaging = "*"
30
+ pandas = ">=0.25"
31
+ toolz = "*"
32
+ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""}
33
+
34
+ [package.extras]
35
+ all = ["altair-tiles (>=0.3.0)", "anywidget (>=0.9.0)", "pyarrow (>=11)", "vega-datasets (>=0.9.0)", "vegafusion[embed] (>=1.6.6)", "vl-convert-python (>=1.3.0)"]
36
+ dev = ["geopandas", "hatch", "ipython", "m2r", "mypy", "pandas-stubs", "pytest", "pytest-cov", "ruff (>=0.3.0)", "types-jsonschema", "types-setuptools"]
37
+ doc = ["docutils", "jinja2", "myst-parser", "numpydoc", "pillow (>=9,<10)", "pydata-sphinx-theme (>=0.14.1)", "scipy", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"]
38
+
39
+ [[package]]
40
+ name = "annotated-types"
41
+ version = "0.7.0"
42
+ description = "Reusable constraint types to use with typing.Annotated"
43
+ category = "main"
44
+ optional = false
45
+ python-versions = ">=3.8"
46
+
47
+ [[package]]
48
+ name = "anyio"
49
+ version = "4.4.0"
50
+ description = "High level compatibility layer for multiple asynchronous event loop implementations"
51
+ category = "main"
52
+ optional = false
53
+ python-versions = ">=3.8"
54
+
55
+ [package.dependencies]
56
+ exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""}
57
+ idna = ">=2.8"
58
+ sniffio = ">=1.1"
59
+ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""}
60
+
61
+ [package.extras]
62
+ doc = ["packaging", "Sphinx (>=7)", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"]
63
+ test = ["anyio", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
64
+ trio = ["trio (>=0.23)"]
65
+
66
+ [[package]]
67
+ name = "attrs"
68
+ version = "23.2.0"
69
+ description = "Classes Without Boilerplate"
70
+ category = "main"
71
+ optional = false
72
+ python-versions = ">=3.7"
73
+
74
+ [package.extras]
75
+ cov = ["attrs", "coverage[toml] (>=5.3)"]
76
+ dev = ["attrs", "pre-commit"]
77
+ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
78
+ tests = ["attrs", "zope-interface"]
79
+ tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"]
80
+ tests-no-zope = ["attrs", "cloudpickle", "hypothesis", "pympler", "pytest-xdist", "pytest (>=4.3.0)"]
81
+
82
+ [[package]]
83
+ name = "black"
84
+ version = "24.4.2"
85
+ description = "The uncompromising code formatter."
86
+ category = "dev"
87
+ optional = false
88
+ python-versions = ">=3.8"
89
+
90
+ [package.dependencies]
91
+ click = ">=8.0.0"
92
+ mypy-extensions = ">=0.4.3"
93
+ packaging = ">=22.0"
94
+ pathspec = ">=0.9.0"
95
+ platformdirs = ">=2"
96
+ tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
97
+ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""}
98
+
99
+ [package.extras]
100
+ colorama = ["colorama (>=0.4.3)"]
101
+ d = ["aiohttp (>=3.7.4,!=3.9.0)", "aiohttp (>=3.7.4)"]
102
+ jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
103
+ uvloop = ["uvloop (>=0.15.2)"]
104
+
105
+ [[package]]
106
+ name = "certifi"
107
+ version = "2024.6.2"
108
+ description = "Python package for providing Mozilla's CA Bundle."
109
+ category = "main"
110
+ optional = false
111
+ python-versions = ">=3.6"
112
+
113
+ [[package]]
114
+ name = "charset-normalizer"
115
+ version = "3.3.2"
116
+ description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
117
+ category = "main"
118
+ optional = false
119
+ python-versions = ">=3.7.0"
120
+
121
+ [[package]]
122
+ name = "click"
123
+ version = "8.1.7"
124
+ description = "Composable command line interface toolkit"
125
+ category = "main"
126
+ optional = false
127
+ python-versions = ">=3.7"
128
+
129
+ [package.dependencies]
130
+ colorama = {version = "*", markers = "platform_system == \"Windows\""}
131
+
132
+ [[package]]
133
+ name = "colorama"
134
+ version = "0.4.6"
135
+ description = "Cross-platform colored terminal text."
136
+ category = "main"
137
+ optional = false
138
+ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
139
+
140
+ [[package]]
141
+ name = "contourpy"
142
+ version = "1.2.1"
143
+ description = "Python library for calculating contours of 2D quadrilateral grids"
144
+ category = "main"
145
+ optional = false
146
+ python-versions = ">=3.9"
147
+
148
+ [package.dependencies]
149
+ numpy = ">=1.20"
150
+
151
+ [package.extras]
152
+ docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"]
153
+ bokeh = ["bokeh", "selenium"]
154
+ mypy = ["contourpy", "docutils-stubs", "mypy (==1.8.0)", "types-pillow"]
155
+ test = ["contourpy", "matplotlib", "pillow"]
156
+ test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"]
157
+
158
+ [[package]]
159
+ name = "cycler"
160
+ version = "0.12.1"
161
+ description = "Composable style cycles"
162
+ category = "main"
163
+ optional = false
164
+ python-versions = ">=3.8"
165
+
166
+ [package.extras]
167
+ docs = ["ipython", "matplotlib", "numpydoc", "sphinx"]
168
+ tests = ["pytest", "pytest-cov", "pytest-xdist"]
169
+
170
+ [[package]]
171
+ name = "dnspython"
172
+ version = "2.6.1"
173
+ description = "DNS toolkit"
174
+ category = "main"
175
+ optional = false
176
+ python-versions = ">=3.8"
177
+
178
+ [package.extras]
179
+ dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "mypy (>=1.8)", "pylint (>=3)", "pytest-cov (>=4.1.0)", "pytest (>=7.4)", "sphinx (>=7.2.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"]
180
+ dnssec = ["cryptography (>=41)"]
181
+ doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"]
182
+ doq = ["aioquic (>=0.9.25)"]
183
+ idna = ["idna (>=3.6)"]
184
+ trio = ["trio (>=0.23)"]
185
+ wmi = ["wmi (>=1.5.1)"]
186
+
187
+ [[package]]
188
+ name = "email-validator"
189
+ version = "2.2.0"
190
+ description = "A robust email address syntax and deliverability validation library."
191
+ category = "main"
192
+ optional = false
193
+ python-versions = ">=3.8"
194
+
195
+ [package.dependencies]
196
+ dnspython = ">=2.0.0"
197
+ idna = ">=2.0.0"
198
+
199
+ [[package]]
200
+ name = "exceptiongroup"
201
+ version = "1.2.1"
202
+ description = "Backport of PEP 654 (exception groups)"
203
+ category = "main"
204
+ optional = false
205
+ python-versions = ">=3.7"
206
+
207
+ [package.extras]
208
+ test = ["pytest (>=6)"]
209
+
210
+ [[package]]
211
+ name = "fastapi"
212
+ version = "0.111.0"
213
+ description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
214
+ category = "main"
215
+ optional = false
216
+ python-versions = ">=3.8"
217
+
218
+ [package.dependencies]
219
+ email_validator = ">=2.0.0"
220
+ fastapi-cli = ">=0.0.2"
221
+ httpx = ">=0.23.0"
222
+ jinja2 = ">=2.11.2"
223
+ orjson = ">=3.2.1"
224
+ pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0"
225
+ python-multipart = ">=0.0.7"
226
+ starlette = ">=0.37.2,<0.38.0"
227
+ typing-extensions = ">=4.8.0"
228
+ ujson = ">=4.0.1,<4.0.2 || >4.0.2,<4.1.0 || >4.1.0,<4.2.0 || >4.2.0,<4.3.0 || >4.3.0,<5.0.0 || >5.0.0,<5.1.0 || >5.1.0"
229
+ uvicorn = {version = ">=0.12.0", extras = ["standard"]}
230
+
231
+ [package.extras]
232
+ all = ["httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "itsdangerous (>=1.1.0)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "orjson (>=3.2.1)", "email_validator (>=2.0.0)", "uvicorn[standard] (>=0.12.0)", "pydantic-settings (>=2.0.0)", "pydantic-extra-types (>=2.0.0)"]
233
+
234
+ [[package]]
235
+ name = "fastapi-cli"
236
+ version = "0.0.4"
237
+ description = "Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀"
238
+ category = "main"
239
+ optional = false
240
+ python-versions = ">=3.8"
241
+
242
+ [package.dependencies]
243
+ typer = ">=0.12.3"
244
+
245
+ [package.extras]
246
+ standard = ["fastapi", "uvicorn[standard] (>=0.15.0)"]
247
+
248
+ [[package]]
249
+ name = "ffmpy"
250
+ version = "0.3.2"
251
+ description = "A simple Python wrapper for ffmpeg"
252
+ category = "main"
253
+ optional = false
254
+ python-versions = "*"
255
+
256
+ [[package]]
257
+ name = "filelock"
258
+ version = "3.15.4"
259
+ description = "A platform independent file lock."
260
+ category = "main"
261
+ optional = false
262
+ python-versions = ">=3.8"
263
+
264
+ [package.extras]
265
+ docs = ["furo (>=2023.9.10)", "sphinx-autodoc-typehints (>=1.25.2)", "sphinx (>=7.2.6)"]
266
+ testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "pytest (>=7.4.3)", "virtualenv (>=20.26.2)"]
267
+ typing = ["typing-extensions (>=4.8)"]
268
+
269
+ [[package]]
270
+ name = "flake8"
271
+ version = "7.1.0"
272
+ description = "the modular source code checker: pep8 pyflakes and co"
273
+ category = "dev"
274
+ optional = false
275
+ python-versions = ">=3.8.1"
276
+
277
+ [package.dependencies]
278
+ mccabe = ">=0.7.0,<0.8.0"
279
+ pycodestyle = ">=2.12.0,<2.13.0"
280
+ pyflakes = ">=3.2.0,<3.3.0"
281
+
282
+ [[package]]
283
+ name = "fonttools"
284
+ version = "4.53.0"
285
+ description = "Tools to manipulate font files"
286
+ category = "main"
287
+ optional = false
288
+ python-versions = ">=3.8"
289
+
290
+ [package.extras]
291
+ all = ["fs (>=2.2.0,<3)", "lxml (>=4.0)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "pycairo", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "uharfbuzz (>=0.23.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=15.1.0)", "xattr"]
292
+ graphite = ["lz4 (>=1.7.4.2)"]
293
+ interpolatable = ["pycairo", "scipy", "munkres"]
294
+ lxml = ["lxml (>=4.0)"]
295
+ pathops = ["skia-pathops (>=0.5.0)"]
296
+ plot = ["matplotlib"]
297
+ repacker = ["uharfbuzz (>=0.23.0)"]
298
+ symfont = ["sympy"]
299
+ type1 = ["xattr"]
300
+ ufo = ["fs (>=2.2.0,<3)"]
301
+ unicode = ["unicodedata2 (>=15.1.0)"]
302
+ woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"]
303
+
304
+ [[package]]
305
+ name = "fsspec"
306
+ version = "2024.6.1"
307
+ description = "File-system specification"
308
+ category = "main"
309
+ optional = false
310
+ python-versions = ">=3.8"
311
+
312
+ [package.extras]
313
+ abfs = ["adlfs"]
314
+ adl = ["adlfs"]
315
+ arrow = ["pyarrow (>=1)"]
316
+ dask = ["dask", "distributed"]
317
+ dev = ["pre-commit", "ruff"]
318
+ doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"]
319
+ dropbox = ["dropbox", "dropboxdrivefs", "requests"]
320
+ full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"]
321
+ fuse = ["fusepy"]
322
+ gcs = ["gcsfs"]
323
+ git = ["pygit2"]
324
+ github = ["requests"]
325
+ gs = ["gcsfs"]
326
+ gui = ["panel"]
327
+ hdfs = ["pyarrow (>=1)"]
328
+ http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"]
329
+ libarchive = ["libarchive-c"]
330
+ oci = ["ocifs"]
331
+ s3 = ["s3fs"]
332
+ sftp = ["paramiko"]
333
+ smb = ["smbprotocol"]
334
+ ssh = ["paramiko"]
335
+ test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"]
336
+ test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask", "moto[server] (>4,<5)", "pytest-timeout", "xarray"]
337
+ test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"]
338
+ tqdm = ["tqdm"]
339
+
340
+ [[package]]
341
+ name = "gradio"
342
+ version = "4.37.2"
343
+ description = "Python library for easily interacting with trained machine learning models"
344
+ category = "main"
345
+ optional = false
346
+ python-versions = ">=3.8"
347
+
348
+ [package.dependencies]
349
+ aiofiles = ">=22.0,<24.0"
350
+ altair = ">=4.2.0,<6.0"
351
+ fastapi = "*"
352
+ ffmpy = "*"
353
+ gradio-client = "1.0.2"
354
+ httpx = ">=0.24.1"
355
+ huggingface-hub = ">=0.19.3"
356
+ importlib-resources = ">=1.3,<7.0"
357
+ jinja2 = "<4.0"
358
+ markupsafe = ">=2.0,<3.0"
359
+ matplotlib = ">=3.0,<4.0"
360
+ numpy = ">=1.0,<3.0"
361
+ orjson = ">=3.0,<4.0"
362
+ packaging = "*"
363
+ pandas = ">=1.0,<3.0"
364
+ pillow = ">=8.0,<11.0"
365
+ pydantic = ">=2.0"
366
+ pydub = "*"
367
+ python-multipart = ">=0.0.9"
368
+ pyyaml = ">=5.0,<7.0"
369
+ ruff = {version = ">=0.2.2", markers = "sys_platform != \"emscripten\""}
370
+ semantic-version = ">=2.0,<3.0"
371
+ tomlkit = "0.12.0"
372
+ typer = {version = ">=0.12,<1.0", markers = "sys_platform != \"emscripten\""}
373
+ typing-extensions = ">=4.0,<5.0"
374
+ urllib3 = ">=2.0,<3.0"
375
+ uvicorn = {version = ">=0.14.0", markers = "sys_platform != \"emscripten\""}
376
+
377
+ [package.extras]
378
+ oauth = ["authlib", "itsdangerous"]
379
+
380
+ [[package]]
381
+ name = "gradio-client"
382
+ version = "1.0.2"
383
+ description = "Python library for easily interacting with trained machine learning models"
384
+ category = "main"
385
+ optional = false
386
+ python-versions = ">=3.8"
387
+
388
+ [package.dependencies]
389
+ fsspec = "*"
390
+ httpx = ">=0.24.1"
391
+ huggingface-hub = ">=0.19.3"
392
+ packaging = "*"
393
+ typing-extensions = ">=4.0,<5.0"
394
+ websockets = ">=10.0,<12.0"
395
+
396
+ [[package]]
397
+ name = "grpcio"
398
+ version = "1.64.1"
399
+ description = "HTTP/2-based RPC framework"
400
+ category = "main"
401
+ optional = false
402
+ python-versions = ">=3.8"
403
+
404
+ [package.extras]
405
+ protobuf = ["grpcio-tools (>=1.64.1)"]
406
+
407
+ [[package]]
408
+ name = "h11"
409
+ version = "0.14.0"
410
+ description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
411
+ category = "main"
412
+ optional = false
413
+ python-versions = ">=3.7"
414
+
415
+ [[package]]
416
+ name = "httpcore"
417
+ version = "1.0.5"
418
+ description = "A minimal low-level HTTP client."
419
+ category = "main"
420
+ optional = false
421
+ python-versions = ">=3.8"
422
+
423
+ [package.dependencies]
424
+ certifi = "*"
425
+ h11 = ">=0.13,<0.15"
426
+
427
+ [package.extras]
428
+ asyncio = ["anyio (>=4.0,<5.0)"]
429
+ http2 = ["h2 (>=3,<5)"]
430
+ socks = ["socksio (>=1.0.0,<2.0.0)"]
431
+ trio = ["trio (>=0.22.0,<0.26.0)"]
432
+
433
+ [[package]]
434
+ name = "httptools"
435
+ version = "0.6.1"
436
+ description = "A collection of framework independent HTTP protocol utils."
437
+ category = "main"
438
+ optional = false
439
+ python-versions = ">=3.8.0"
440
+
441
+ [package.extras]
442
+ test = ["Cython (>=0.29.24,<0.30.0)"]
443
+
444
+ [[package]]
445
+ name = "httpx"
446
+ version = "0.27.0"
447
+ description = "The next generation HTTP client."
448
+ category = "main"
449
+ optional = false
450
+ python-versions = ">=3.8"
451
+
452
+ [package.dependencies]
453
+ anyio = "*"
454
+ certifi = "*"
455
+ httpcore = ">=1.0.0,<2.0.0"
456
+ idna = "*"
457
+ sniffio = "*"
458
+
459
+ [package.extras]
460
+ brotli = ["brotli", "brotlicffi"]
461
+ cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"]
462
+ http2 = ["h2 (>=3,<5)"]
463
+ socks = ["socksio (>=1.0.0,<2.0.0)"]
464
+
465
+ [[package]]
466
+ name = "huggingface-hub"
467
+ version = "0.23.4"
468
+ description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
469
+ category = "main"
470
+ optional = false
471
+ python-versions = ">=3.8.0"
472
+
473
+ [package.dependencies]
474
+ filelock = "*"
475
+ fsspec = ">=2023.5.0"
476
+ packaging = ">=20.9"
477
+ pyyaml = ">=5.1"
478
+ requests = "*"
479
+ tqdm = ">=4.42.1"
480
+ typing-extensions = ">=3.7.4.3"
481
+
482
+ [package.extras]
483
+ all = ["InquirerPy (==0.3.4)", "aiohttp", "minijinja (>=1.0)", "jedi", "jinja2", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "pytest-vcr", "pytest-asyncio", "pytest-rerunfailures", "urllib3 (<2.0)", "soundfile", "pillow", "gradio", "numpy", "fastapi", "ruff (>=0.3.0)", "mypy (==1.5.1)", "typing-extensions (>=4.8.0)", "types-pyyaml", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"]
484
+ cli = ["InquirerPy (==0.3.4)"]
485
+ dev = ["InquirerPy (==0.3.4)", "aiohttp", "minijinja (>=1.0)", "jedi", "jinja2", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "pytest-vcr", "pytest-asyncio", "pytest-rerunfailures", "urllib3 (<2.0)", "soundfile", "pillow", "gradio", "numpy", "fastapi", "ruff (>=0.3.0)", "mypy (==1.5.1)", "typing-extensions (>=4.8.0)", "types-pyyaml", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"]
486
+ fastai = ["toml", "fastai (>=2.4)", "fastcore (>=1.3.27)"]
487
+ hf-transfer = ["hf-transfer (>=0.1.4)"]
488
+ inference = ["aiohttp", "minijinja (>=1.0)"]
489
+ quality = ["ruff (>=0.3.0)", "mypy (==1.5.1)"]
490
+ tensorflow = ["tensorflow", "pydot", "graphviz"]
491
+ tensorflow-testing = ["tensorflow", "keras (<3.0)"]
492
+ testing = ["InquirerPy (==0.3.4)", "aiohttp", "minijinja (>=1.0)", "jedi", "jinja2", "pytest", "pytest-cov", "pytest-env", "pytest-xdist", "pytest-vcr", "pytest-asyncio", "pytest-rerunfailures", "urllib3 (<2.0)", "soundfile", "pillow", "gradio", "numpy", "fastapi"]
493
+ torch = ["torch", "safetensors"]
494
+ typing = ["typing-extensions (>=4.8.0)", "types-pyyaml", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3"]
495
+
496
+ [[package]]
497
+ name = "idna"
498
+ version = "3.7"
499
+ description = "Internationalized Domain Names in Applications (IDNA)"
500
+ category = "main"
501
+ optional = false
502
+ python-versions = ">=3.5"
503
+
504
+ [[package]]
505
+ name = "importlib-resources"
506
+ version = "6.4.0"
507
+ description = "Read resources from Python packages"
508
+ category = "main"
509
+ optional = false
510
+ python-versions = ">=3.8"
511
+
512
+ [package.extras]
513
+ docs = ["sphinx (>=3.5)", "sphinx (<7.2.5)", "jaraco.packaging (>=9.3)", "rst.linker (>=1.9)", "furo", "sphinx-lint", "jaraco.tidelift (>=1.4)"]
514
+ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)", "jaraco.test (>=5.4)", "pytest-mypy"]
515
+
516
+ [[package]]
517
+ name = "intel-openmp"
518
+ version = "2021.4.0"
519
+ description = "Intel OpenMP* Runtime Library"
520
+ category = "main"
521
+ optional = false
522
+ python-versions = "*"
523
+
524
+ [[package]]
525
+ name = "jinja2"
526
+ version = "3.1.4"
527
+ description = "A very fast and expressive template engine."
528
+ category = "main"
529
+ optional = false
530
+ python-versions = ">=3.7"
531
+
532
+ [package.dependencies]
533
+ MarkupSafe = ">=2.0"
534
+
535
+ [package.extras]
536
+ i18n = ["Babel (>=2.7)"]
537
+
538
+ [[package]]
539
+ name = "joblib"
540
+ version = "1.4.2"
541
+ description = "Lightweight pipelining with Python functions"
542
+ category = "main"
543
+ optional = false
544
+ python-versions = ">=3.8"
545
+
546
+ [[package]]
547
+ name = "jsonschema"
548
+ version = "4.22.0"
549
+ description = "An implementation of JSON Schema validation for Python"
550
+ category = "main"
551
+ optional = false
552
+ python-versions = ">=3.8"
553
+
554
+ [package.dependencies]
555
+ attrs = ">=22.2.0"
556
+ jsonschema-specifications = ">=2023.03.6"
557
+ referencing = ">=0.28.4"
558
+ rpds-py = ">=0.7.1"
559
+
560
+ [package.extras]
561
+ format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
562
+ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
563
+
564
+ [[package]]
565
+ name = "jsonschema-specifications"
566
+ version = "2023.12.1"
567
+ description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
568
+ category = "main"
569
+ optional = false
570
+ python-versions = ">=3.8"
571
+
572
+ [package.dependencies]
573
+ referencing = ">=0.31.0"
574
+
575
+ [[package]]
576
+ name = "kiwisolver"
577
+ version = "1.4.5"
578
+ description = "A fast implementation of the Cassowary constraint solver"
579
+ category = "main"
580
+ optional = false
581
+ python-versions = ">=3.7"
582
+
583
+ [[package]]
584
+ name = "markdown"
585
+ version = "3.6"
586
+ description = "Python implementation of John Gruber's Markdown."
587
+ category = "main"
588
+ optional = false
589
+ python-versions = ">=3.8"
590
+
591
+ [package.extras]
592
+ docs = ["mkdocs (>=1.5)", "mkdocs-nature (>=0.6)", "mdx-gh-links (>=0.2)", "mkdocstrings", "mkdocs-gen-files", "mkdocs-section-index", "mkdocs-literate-nav"]
593
+ testing = ["coverage", "pyyaml"]
594
+
595
+ [[package]]
596
+ name = "markdown-it-py"
597
+ version = "3.0.0"
598
+ description = "Python port of markdown-it. Markdown parsing, done right!"
599
+ category = "main"
600
+ optional = false
601
+ python-versions = ">=3.8"
602
+
603
+ [package.dependencies]
604
+ mdurl = ">=0.1,<1.0"
605
+
606
+ [package.extras]
607
+ benchmarking = ["psutil", "pytest", "pytest-benchmark"]
608
+ code_style = ["pre-commit (>=3.0,<4.0)"]
609
+ compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
610
+ linkify = ["linkify-it-py (>=1,<3)"]
611
+ plugins = ["mdit-py-plugins"]
612
+ profiling = ["gprof2dot"]
613
+ rtd = ["mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx-book-theme", "jupyter-sphinx"]
614
+ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
615
+
616
+ [[package]]
617
+ name = "markupsafe"
618
+ version = "2.1.5"
619
+ description = "Safely add untrusted strings to HTML/XML markup."
620
+ category = "main"
621
+ optional = false
622
+ python-versions = ">=3.7"
623
+
624
+ [[package]]
625
+ name = "matplotlib"
626
+ version = "3.9.0"
627
+ description = "Python plotting package"
628
+ category = "main"
629
+ optional = false
630
+ python-versions = ">=3.9"
631
+
632
+ [package.dependencies]
633
+ contourpy = ">=1.0.1"
634
+ cycler = ">=0.10"
635
+ fonttools = ">=4.22.0"
636
+ kiwisolver = ">=1.3.1"
637
+ numpy = ">=1.23"
638
+ packaging = ">=20.0"
639
+ pillow = ">=8"
640
+ pyparsing = ">=2.3.1"
641
+ python-dateutil = ">=2.7"
642
+
643
+ [package.extras]
644
+ dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools_scm (>=7)", "setuptools (>=64)"]
645
+
646
+ [[package]]
647
+ name = "mccabe"
648
+ version = "0.7.0"
649
+ description = "McCabe checker, plugin for flake8"
650
+ category = "dev"
651
+ optional = false
652
+ python-versions = ">=3.6"
653
+
654
+ [[package]]
655
+ name = "mdurl"
656
+ version = "0.1.2"
657
+ description = "Markdown URL utilities"
658
+ category = "main"
659
+ optional = false
660
+ python-versions = ">=3.7"
661
+
662
+ [[package]]
663
+ name = "mkl"
664
+ version = "2021.4.0"
665
+ description = "Intel® oneAPI Math Kernel Library"
666
+ category = "main"
667
+ optional = false
668
+ python-versions = "*"
669
+
670
+ [package.dependencies]
671
+ intel-openmp = ">=2021.0.0,<2022.0.0"
672
+ tbb = ">=2021.0.0,<2022.0.0"
673
+
674
+ [[package]]
675
+ name = "mpmath"
676
+ version = "1.3.0"
677
+ description = "Python library for arbitrary-precision floating-point arithmetic"
678
+ category = "main"
679
+ optional = false
680
+ python-versions = "*"
681
+
682
+ [package.extras]
683
+ develop = ["pytest (>=4.6)", "pycodestyle", "pytest-cov", "codecov", "wheel"]
684
+ docs = ["sphinx"]
685
+ gmpy = ["gmpy2 (>=2.1.0a4)"]
686
+ tests = ["pytest (>=4.6)"]
687
+
688
+ [[package]]
689
+ name = "mypy"
690
+ version = "1.10.1"
691
+ description = "Optional static typing for Python"
692
+ category = "dev"
693
+ optional = false
694
+ python-versions = ">=3.8"
695
+
696
+ [package.dependencies]
697
+ mypy-extensions = ">=1.0.0"
698
+ tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
699
+ typing-extensions = ">=4.1.0"
700
+
701
+ [package.extras]
702
+ dmypy = ["psutil (>=4.0)"]
703
+ install-types = ["pip"]
704
+ mypyc = ["setuptools (>=50)"]
705
+ reports = ["lxml"]
706
+
707
+ [[package]]
708
+ name = "mypy-extensions"
709
+ version = "1.0.0"
710
+ description = "Type system extensions for programs checked with the mypy type checker."
711
+ category = "dev"
712
+ optional = false
713
+ python-versions = ">=3.5"
714
+
715
+ [[package]]
716
+ name = "networkx"
717
+ version = "3.3"
718
+ description = "Python package for creating and manipulating graphs and networks"
719
+ category = "main"
720
+ optional = false
721
+ python-versions = ">=3.10"
722
+
723
+ [package.extras]
724
+ default = ["numpy (>=1.23)", "scipy (>=1.9,!=1.11.0,!=1.11.1)", "matplotlib (>=3.6)", "pandas (>=1.4)"]
725
+ developer = ["changelist (==0.5)", "pre-commit (>=3.2)", "mypy (>=1.1)", "rtoml"]
726
+ doc = ["sphinx (>=7)", "pydata-sphinx-theme (>=0.14)", "sphinx-gallery (>=0.14)", "numpydoc (>=1.7)", "pillow (>=9.4)", "texext (>=0.6.7)", "myst-nb (>=1.0)"]
727
+ extra = ["lxml (>=4.6)", "pygraphviz (>=1.12)", "pydot (>=2.0)", "sympy (>=1.10)"]
728
+ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"]
729
+
730
+ [[package]]
731
+ name = "numpy"
732
+ version = "2.0.0"
733
+ description = "Fundamental package for array computing in Python"
734
+ category = "main"
735
+ optional = false
736
+ python-versions = ">=3.9"
737
+
738
+ [[package]]
739
+ name = "nvidia-cublas-cu12"
740
+ version = "12.1.3.1"
741
+ description = "CUBLAS native runtime libraries"
742
+ category = "main"
743
+ optional = false
744
+ python-versions = ">=3"
745
+
746
+ [[package]]
747
+ name = "nvidia-cuda-cupti-cu12"
748
+ version = "12.1.105"
749
+ description = "CUDA profiling tools runtime libs."
750
+ category = "main"
751
+ optional = false
752
+ python-versions = ">=3"
753
+
754
+ [[package]]
755
+ name = "nvidia-cuda-nvrtc-cu12"
756
+ version = "12.1.105"
757
+ description = "NVRTC native runtime libraries"
758
+ category = "main"
759
+ optional = false
760
+ python-versions = ">=3"
761
+
762
+ [[package]]
763
+ name = "nvidia-cuda-runtime-cu12"
764
+ version = "12.1.105"
765
+ description = "CUDA Runtime native Libraries"
766
+ category = "main"
767
+ optional = false
768
+ python-versions = ">=3"
769
+
770
+ [[package]]
771
+ name = "nvidia-cudnn-cu12"
772
+ version = "8.9.2.26"
773
+ description = "cuDNN runtime libraries"
774
+ category = "main"
775
+ optional = false
776
+ python-versions = ">=3"
777
+
778
+ [package.dependencies]
779
+ nvidia-cublas-cu12 = "*"
780
+
781
+ [[package]]
782
+ name = "nvidia-cufft-cu12"
783
+ version = "11.0.2.54"
784
+ description = "CUFFT native runtime libraries"
785
+ category = "main"
786
+ optional = false
787
+ python-versions = ">=3"
788
+
789
+ [[package]]
790
+ name = "nvidia-curand-cu12"
791
+ version = "10.3.2.106"
792
+ description = "CURAND native runtime libraries"
793
+ category = "main"
794
+ optional = false
795
+ python-versions = ">=3"
796
+
797
+ [[package]]
798
+ name = "nvidia-cusolver-cu12"
799
+ version = "11.4.5.107"
800
+ description = "CUDA solver native runtime libraries"
801
+ category = "main"
802
+ optional = false
803
+ python-versions = ">=3"
804
+
805
+ [package.dependencies]
806
+ nvidia-cublas-cu12 = "*"
807
+ nvidia-cusparse-cu12 = "*"
808
+ nvidia-nvjitlink-cu12 = "*"
809
+
810
+ [[package]]
811
+ name = "nvidia-cusparse-cu12"
812
+ version = "12.1.0.106"
813
+ description = "CUSPARSE native runtime libraries"
814
+ category = "main"
815
+ optional = false
816
+ python-versions = ">=3"
817
+
818
+ [package.dependencies]
819
+ nvidia-nvjitlink-cu12 = "*"
820
+
821
+ [[package]]
822
+ name = "nvidia-nccl-cu12"
823
+ version = "2.20.5"
824
+ description = "NVIDIA Collective Communication Library (NCCL) Runtime"
825
+ category = "main"
826
+ optional = false
827
+ python-versions = ">=3"
828
+
829
+ [[package]]
830
+ name = "nvidia-nvjitlink-cu12"
831
+ version = "12.5.40"
832
+ description = "Nvidia JIT LTO Library"
833
+ category = "main"
834
+ optional = false
835
+ python-versions = ">=3"
836
+
837
+ [[package]]
838
+ name = "nvidia-nvtx-cu12"
839
+ version = "12.1.105"
840
+ description = "NVIDIA Tools Extension"
841
+ category = "main"
842
+ optional = false
843
+ python-versions = ">=3"
844
+
845
+ [[package]]
846
+ name = "orjson"
847
+ version = "3.10.5"
848
+ description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
849
+ category = "main"
850
+ optional = false
851
+ python-versions = ">=3.8"
852
+
853
+ [[package]]
854
+ name = "packaging"
855
+ version = "24.1"
856
+ description = "Core utilities for Python packages"
857
+ category = "main"
858
+ optional = false
859
+ python-versions = ">=3.8"
860
+
861
+ [[package]]
862
+ name = "pandas"
863
+ version = "2.2.2"
864
+ description = "Powerful data structures for data analysis, time series, and statistics"
865
+ category = "main"
866
+ optional = false
867
+ python-versions = ">=3.9"
868
+
869
+ [package.dependencies]
870
+ numpy = [
871
+ {version = ">=1.22.4", markers = "python_version < \"3.11\""},
872
+ {version = ">=1.23.2", markers = "python_version == \"3.11\""},
873
+ {version = ">=1.26.0", markers = "python_version >= \"3.12\""},
874
+ ]
875
+ python-dateutil = ">=2.8.2"
876
+ pytz = ">=2020.1"
877
+ tzdata = ">=2022.7"
878
+
879
+ [package.extras]
880
+ test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"]
881
+ pyarrow = ["pyarrow (>=10.0.1)"]
882
+ performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"]
883
+ computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"]
884
+ fss = ["fsspec (>=2022.11.0)"]
885
+ aws = ["s3fs (>=2022.11.0)"]
886
+ gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"]
887
+ excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"]
888
+ parquet = ["pyarrow (>=10.0.1)"]
889
+ feather = ["pyarrow (>=10.0.1)"]
890
+ hdf5 = ["tables (>=3.8.0)"]
891
+ spss = ["pyreadstat (>=1.2.0)"]
892
+ postgresql = ["SQLAlchemy (>=2.0.0)", "psycopg2 (>=2.9.6)", "adbc-driver-postgresql (>=0.8.0)"]
893
+ mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"]
894
+ sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"]
895
+ html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"]
896
+ xml = ["lxml (>=4.9.2)"]
897
+ plot = ["matplotlib (>=3.6.3)"]
898
+ output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"]
899
+ clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"]
900
+ compression = ["zstandard (>=0.19.0)"]
901
+ consortium-standard = ["dataframe-api-compat (>=0.1.7)"]
902
+ all = ["adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "PyQt5 (>=5.15.9)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "scipy (>=1.10.0)", "s3fs (>=2022.11.0)", "SQLAlchemy (>=2.0.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"]
903
+
904
+ [[package]]
905
+ name = "pathspec"
906
+ version = "0.12.1"
907
+ description = "Utility library for gitignore style pattern matching of file paths."
908
+ category = "dev"
909
+ optional = false
910
+ python-versions = ">=3.8"
911
+
912
+ [[package]]
913
+ name = "pillow"
914
+ version = "10.3.0"
915
+ description = "Python Imaging Library (Fork)"
916
+ category = "main"
917
+ optional = false
918
+ python-versions = ">=3.8"
919
+
920
+ [package.extras]
921
+ docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"]
922
+ fpx = ["olefile"]
923
+ mic = ["olefile"]
924
+ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
925
+ typing = ["typing-extensions"]
926
+ xmp = ["defusedxml"]
927
+
928
+ [[package]]
929
+ name = "platformdirs"
930
+ version = "4.2.2"
931
+ description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
932
+ category = "dev"
933
+ optional = false
934
+ python-versions = ">=3.8"
935
+
936
+ [package.extras]
937
+ docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx-autodoc-typehints (>=1.25.2)", "sphinx (>=7.2.6)"]
938
+ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest (>=7.4.3)"]
939
+ type = ["mypy (>=1.8)"]
940
+
941
+ [[package]]
942
+ name = "protobuf"
943
+ version = "4.25.3"
944
+ description = ""
945
+ category = "main"
946
+ optional = false
947
+ python-versions = ">=3.8"
948
+
949
+ [[package]]
950
+ name = "pycodestyle"
951
+ version = "2.12.0"
952
+ description = "Python style guide checker"
953
+ category = "dev"
954
+ optional = false
955
+ python-versions = ">=3.8"
956
+
957
+ [[package]]
958
+ name = "pydantic"
959
+ version = "2.7.4"
960
+ description = "Data validation using Python type hints"
961
+ category = "main"
962
+ optional = false
963
+ python-versions = ">=3.8"
964
+
965
+ [package.dependencies]
966
+ annotated-types = ">=0.4.0"
967
+ pydantic-core = "2.18.4"
968
+ typing-extensions = ">=4.6.1"
969
+
970
+ [package.extras]
971
+ email = ["email-validator (>=2.0.0)"]
972
+
973
+ [[package]]
974
+ name = "pydantic-core"
975
+ version = "2.18.4"
976
+ description = "Core functionality for Pydantic validation and serialization"
977
+ category = "main"
978
+ optional = false
979
+ python-versions = ">=3.8"
980
+
981
+ [package.dependencies]
982
+ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
983
+
984
+ [[package]]
985
+ name = "pydub"
986
+ version = "0.25.1"
987
+ description = "Manipulate audio with an simple and easy high level interface"
988
+ category = "main"
989
+ optional = false
990
+ python-versions = "*"
991
+
992
+ [[package]]
993
+ name = "pyflakes"
994
+ version = "3.2.0"
995
+ description = "passive checker of Python programs"
996
+ category = "dev"
997
+ optional = false
998
+ python-versions = ">=3.8"
999
+
1000
+ [[package]]
1001
+ name = "pygments"
1002
+ version = "2.18.0"
1003
+ description = "Pygments is a syntax highlighting package written in Python."
1004
+ category = "main"
1005
+ optional = false
1006
+ python-versions = ">=3.8"
1007
+
1008
+ [package.extras]
1009
+ windows-terminal = ["colorama (>=0.4.6)"]
1010
+
1011
+ [[package]]
1012
+ name = "pyparsing"
1013
+ version = "3.1.2"
1014
+ description = "pyparsing module - Classes and methods to define and execute parsing grammars"
1015
+ category = "main"
1016
+ optional = false
1017
+ python-versions = ">=3.6.8"
1018
+
1019
+ [package.extras]
1020
+ diagrams = ["railroad-diagrams", "jinja2"]
1021
+
1022
+ [[package]]
1023
+ name = "python-dateutil"
1024
+ version = "2.9.0.post0"
1025
+ description = "Extensions to the standard Python datetime module"
1026
+ category = "main"
1027
+ optional = false
1028
+ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
1029
+
1030
+ [package.dependencies]
1031
+ six = ">=1.5"
1032
+
1033
+ [[package]]
1034
+ name = "python-dotenv"
1035
+ version = "1.0.1"
1036
+ description = "Read key-value pairs from a .env file and set them as environment variables"
1037
+ category = "main"
1038
+ optional = false
1039
+ python-versions = ">=3.8"
1040
+
1041
+ [package.extras]
1042
+ cli = ["click (>=5.0)"]
1043
+
1044
+ [[package]]
1045
+ name = "python-multipart"
1046
+ version = "0.0.9"
1047
+ description = "A streaming multipart parser for Python"
1048
+ category = "main"
1049
+ optional = false
1050
+ python-versions = ">=3.8"
1051
+
1052
+ [package.extras]
1053
+ dev = ["atomicwrites (==1.4.1)", "attrs (==23.2.0)", "coverage (==7.4.1)", "hatch", "invoke (==2.2.0)", "more-itertools (==10.2.0)", "pbr (==6.0.0)", "pluggy (==1.4.0)", "py (==1.11.0)", "pytest-cov (==4.1.0)", "pytest-timeout (==2.2.0)", "pytest (==8.0.0)", "pyyaml (==6.0.1)", "ruff (==0.2.1)"]
1054
+
1055
+ [[package]]
1056
+ name = "pytz"
1057
+ version = "2024.1"
1058
+ description = "World timezone definitions, modern and historical"
1059
+ category = "main"
1060
+ optional = false
1061
+ python-versions = "*"
1062
+
1063
+ [[package]]
1064
+ name = "pyyaml"
1065
+ version = "6.0.1"
1066
+ description = "YAML parser and emitter for Python"
1067
+ category = "main"
1068
+ optional = false
1069
+ python-versions = ">=3.6"
1070
+
1071
+ [[package]]
1072
+ name = "referencing"
1073
+ version = "0.35.1"
1074
+ description = "JSON Referencing + Python"
1075
+ category = "main"
1076
+ optional = false
1077
+ python-versions = ">=3.8"
1078
+
1079
+ [package.dependencies]
1080
+ attrs = ">=22.2.0"
1081
+ rpds-py = ">=0.7.0"
1082
+
1083
+ [[package]]
1084
+ name = "regex"
1085
+ version = "2024.5.15"
1086
+ description = "Alternative regular expression module, to replace re."
1087
+ category = "main"
1088
+ optional = false
1089
+ python-versions = ">=3.8"
1090
+
1091
+ [[package]]
1092
+ name = "requests"
1093
+ version = "2.32.3"
1094
+ description = "Python HTTP for Humans."
1095
+ category = "main"
1096
+ optional = false
1097
+ python-versions = ">=3.8"
1098
+
1099
+ [package.dependencies]
1100
+ certifi = ">=2017.4.17"
1101
+ charset-normalizer = ">=2,<4"
1102
+ idna = ">=2.5,<4"
1103
+ urllib3 = ">=1.21.1,<3"
1104
+
1105
+ [package.extras]
1106
+ socks = ["PySocks (>=1.5.6,!=1.5.7)"]
1107
+ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
1108
+
1109
+ [[package]]
1110
+ name = "rich"
1111
+ version = "13.7.1"
1112
+ description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
1113
+ category = "main"
1114
+ optional = false
1115
+ python-versions = ">=3.7.0"
1116
+
1117
+ [package.dependencies]
1118
+ markdown-it-py = ">=2.2.0"
1119
+ pygments = ">=2.13.0,<3.0.0"
1120
+
1121
+ [package.extras]
1122
+ jupyter = ["ipywidgets (>=7.5.1,<9)"]
1123
+
1124
+ [[package]]
1125
+ name = "rpds-py"
1126
+ version = "0.18.1"
1127
+ description = "Python bindings to Rust's persistent data structures (rpds)"
1128
+ category = "main"
1129
+ optional = false
1130
+ python-versions = ">=3.8"
1131
+
1132
+ [[package]]
1133
+ name = "ruff"
1134
+ version = "0.5.0"
1135
+ description = "An extremely fast Python linter and code formatter, written in Rust."
1136
+ category = "main"
1137
+ optional = false
1138
+ python-versions = ">=3.7"
1139
+
1140
+ [[package]]
1141
+ name = "safetensors"
1142
+ version = "0.4.3"
1143
+ description = ""
1144
+ category = "main"
1145
+ optional = false
1146
+ python-versions = ">=3.7"
1147
+
1148
+ [package.extras]
1149
+ numpy = ["numpy (>=1.21.6)"]
1150
+ torch = ["safetensors", "torch (>=1.10)"]
1151
+ tensorflow = ["safetensors", "tensorflow (>=2.11.0)"]
1152
+ pinned-tf = ["safetensors", "tensorflow (==2.11.0)"]
1153
+ jax = ["safetensors", "flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)"]
1154
+ mlx = ["mlx (>=0.0.9)"]
1155
+ paddlepaddle = ["safetensors", "paddlepaddle (>=2.4.1)"]
1156
+ quality = ["black (==22.3)", "click (==8.0.4)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"]
1157
+ testing = ["safetensors", "h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "setuptools-rust (>=1.5.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "hypothesis (>=6.70.2)"]
1158
+ all = ["safetensors", "safetensors", "safetensors", "safetensors", "safetensors", "safetensors", "safetensors"]
1159
+ dev = ["safetensors"]
1160
+
1161
+ [[package]]
1162
+ name = "scikit-learn"
1163
+ version = "1.5.0"
1164
+ description = "A set of python modules for machine learning and data mining"
1165
+ category = "main"
1166
+ optional = false
1167
+ python-versions = ">=3.9"
1168
+
1169
+ [package.dependencies]
1170
+ joblib = ">=1.2.0"
1171
+ numpy = ">=1.19.5"
1172
+ scipy = ">=1.6.0"
1173
+ threadpoolctl = ">=3.1.0"
1174
+
1175
+ [package.extras]
1176
+ build = ["numpy (>=1.19.5)", "scipy (>=1.6.0)", "cython (>=3.0.10)", "meson-python (>=0.15.0)"]
1177
+ install = ["numpy (>=1.19.5)", "scipy (>=1.6.0)", "joblib (>=1.2.0)", "threadpoolctl (>=3.1.0)"]
1178
+ benchmark = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "memory_profiler (>=0.57.0)"]
1179
+ docs = ["matplotlib (>=3.3.4)", "scikit-image (>=0.17.2)", "pandas (>=1.1.5)", "seaborn (>=0.9.0)", "memory_profiler (>=0.57.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.15.0)", "numpydoc (>=1.2.0)", "Pillow (>=7.1.2)", "pooch (>=1.6.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)", "plotly (>=5.14.0)", "polars (>=0.20.23)"]
1180
+ examples = ["matplotlib (>=3.3.4)", "scikit-image (>=0.17.2)", "pandas (>=1.1.5)", "seaborn (>=0.9.0)", "pooch (>=1.6.0)", "plotly (>=5.14.0)"]
1181
+ tests = ["matplotlib (>=3.3.4)", "scikit-image (>=0.17.2)", "pandas (>=1.1.5)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.2.1)", "black (>=24.3.0)", "mypy (>=1.9)", "pyamg (>=4.0.0)", "polars (>=0.20.23)", "pyarrow (>=12.0.0)", "numpydoc (>=1.2.0)", "pooch (>=1.6.0)"]
1182
+ maintenance = ["conda-lock (==2.5.6)"]
1183
+
1184
+ [[package]]
1185
+ name = "scipy"
1186
+ version = "1.14.0"
1187
+ description = "Fundamental algorithms for scientific computing in Python"
1188
+ category = "main"
1189
+ optional = false
1190
+ python-versions = ">=3.10"
1191
+
1192
+ [package.dependencies]
1193
+ numpy = ">=1.23.5,<2.3"
1194
+
1195
+ [package.extras]
1196
+ test = ["pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "asv", "mpmath", "gmpy2", "threadpoolctl", "scikit-umfpack", "pooch", "hypothesis (>=6.30)", "array-api-strict", "cython", "meson", "ninja"]
1197
+ doc = ["sphinx (>=5.0.0)", "pydata-sphinx-theme (>=0.15.2)", "sphinx-design (>=0.4.0)", "matplotlib (>=3.5)", "numpydoc", "jupytext", "myst-nb", "pooch", "jupyterlite-sphinx (>=0.13.1)", "jupyterlite-pyodide-kernel"]
1198
+ dev = ["mypy (==1.10.0)", "typing-extensions", "types-psutil", "pycodestyle", "ruff (>=0.0.292)", "cython-lint (>=0.12.2)", "rich-click", "doit (>=0.36.0)", "pydevtool"]
1199
+
1200
+ [[package]]
1201
+ name = "semantic-version"
1202
+ version = "2.10.0"
1203
+ description = "A library implementing the 'SemVer' scheme."
1204
+ category = "main"
1205
+ optional = false
1206
+ python-versions = ">=2.7"
1207
+
1208
+ [package.extras]
1209
+ dev = ["Django (>=1.11)", "nose2", "tox", "check-manifest", "coverage", "flake8", "wheel", "zest.releaser", "readme-renderer (<25.0)", "colorama (<=0.4.1)"]
1210
+ doc = ["sphinx", "sphinx-rtd-theme"]
1211
+
1212
+ [[package]]
1213
+ name = "shellingham"
1214
+ version = "1.5.4"
1215
+ description = "Tool to Detect Surrounding Shell"
1216
+ category = "main"
1217
+ optional = false
1218
+ python-versions = ">=3.7"
1219
+
1220
+ [[package]]
1221
+ name = "six"
1222
+ version = "1.16.0"
1223
+ description = "Python 2 and 3 compatibility utilities"
1224
+ category = "main"
1225
+ optional = false
1226
+ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
1227
+
1228
+ [[package]]
1229
+ name = "sniffio"
1230
+ version = "1.3.1"
1231
+ description = "Sniff out which async library your code is running under"
1232
+ category = "main"
1233
+ optional = false
1234
+ python-versions = ">=3.7"
1235
+
1236
+ [[package]]
1237
+ name = "starlette"
1238
+ version = "0.37.2"
1239
+ description = "The little ASGI library that shines."
1240
+ category = "main"
1241
+ optional = false
1242
+ python-versions = ">=3.8"
1243
+
1244
+ [package.dependencies]
1245
+ anyio = ">=3.4.0,<5"
1246
+
1247
+ [package.extras]
1248
+ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"]
1249
+
1250
+ [[package]]
1251
+ name = "sympy"
1252
+ version = "1.12.1"
1253
+ description = "Computer algebra system (CAS) in Python"
1254
+ category = "main"
1255
+ optional = false
1256
+ python-versions = ">=3.8"
1257
+
1258
+ [package.dependencies]
1259
+ mpmath = ">=1.1.0,<1.4.0"
1260
+
1261
+ [[package]]
1262
+ name = "tbb"
1263
+ version = "2021.13.0"
1264
+ description = "Intel® oneAPI Threading Building Blocks (oneTBB)"
1265
+ category = "main"
1266
+ optional = false
1267
+ python-versions = "*"
1268
+
1269
+ [[package]]
1270
+ name = "tensorboard"
1271
+ version = "2.17.0"
1272
+ description = "TensorBoard lets you watch Tensors Flow"
1273
+ category = "main"
1274
+ optional = false
1275
+ python-versions = ">=3.9"
1276
+
1277
+ [package.dependencies]
1278
+ absl-py = ">=0.4"
1279
+ grpcio = ">=1.48.2"
1280
+ markdown = ">=2.6.8"
1281
+ numpy = ">=1.12.0"
1282
+ protobuf = ">=3.19.6,<4.24.0 || >4.24.0,<5.0.0"
1283
+ six = ">1.9"
1284
+ tensorboard-data-server = ">=0.7.0,<0.8.0"
1285
+ werkzeug = ">=1.0.1"
1286
+
1287
+ [[package]]
1288
+ name = "tensorboard-data-server"
1289
+ version = "0.7.2"
1290
+ description = "Fast data loading for TensorBoard"
1291
+ category = "main"
1292
+ optional = false
1293
+ python-versions = ">=3.7"
1294
+
1295
+ [[package]]
1296
+ name = "threadpoolctl"
1297
+ version = "3.5.0"
1298
+ description = "threadpoolctl"
1299
+ category = "main"
1300
+ optional = false
1301
+ python-versions = ">=3.8"
1302
+
1303
+ [[package]]
1304
+ name = "tokenizers"
1305
+ version = "0.19.1"
1306
+ description = ""
1307
+ category = "main"
1308
+ optional = false
1309
+ python-versions = ">=3.7"
1310
+
1311
+ [package.dependencies]
1312
+ huggingface-hub = ">=0.16.4,<1.0"
1313
+
1314
+ [package.extras]
1315
+ testing = ["pytest", "requests", "numpy", "datasets", "black (==22.3)", "ruff"]
1316
+ docs = ["sphinx", "sphinx-rtd-theme", "setuptools-rust"]
1317
+ dev = ["tokenizers"]
1318
+
1319
+ [[package]]
1320
+ name = "tomli"
1321
+ version = "2.0.1"
1322
+ description = "A lil' TOML parser"
1323
+ category = "dev"
1324
+ optional = false
1325
+ python-versions = ">=3.7"
1326
+
1327
+ [[package]]
1328
+ name = "tomlkit"
1329
+ version = "0.12.0"
1330
+ description = "Style preserving TOML library"
1331
+ category = "main"
1332
+ optional = false
1333
+ python-versions = ">=3.7"
1334
+
1335
+ [[package]]
1336
+ name = "toolz"
1337
+ version = "0.12.1"
1338
+ description = "List processing tools and functional utilities"
1339
+ category = "main"
1340
+ optional = false
1341
+ python-versions = ">=3.7"
1342
+
1343
+ [[package]]
1344
+ name = "torch"
1345
+ version = "2.3.1"
1346
+ description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration"
1347
+ category = "main"
1348
+ optional = false
1349
+ python-versions = ">=3.8.0"
1350
+
1351
+ [package.dependencies]
1352
+ filelock = "*"
1353
+ fsspec = "*"
1354
+ jinja2 = "*"
1355
+ mkl = {version = ">=2021.1.1,<=2021.4.0", markers = "platform_system == \"Windows\""}
1356
+ networkx = "*"
1357
+ nvidia-cublas-cu12 = {version = "12.1.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1358
+ nvidia-cuda-cupti-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1359
+ nvidia-cuda-nvrtc-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1360
+ nvidia-cuda-runtime-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1361
+ nvidia-cudnn-cu12 = {version = "8.9.2.26", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1362
+ nvidia-cufft-cu12 = {version = "11.0.2.54", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1363
+ nvidia-curand-cu12 = {version = "10.3.2.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1364
+ nvidia-cusolver-cu12 = {version = "11.4.5.107", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1365
+ nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1366
+ nvidia-nccl-cu12 = {version = "2.20.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1367
+ nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""}
1368
+ sympy = "*"
1369
+ triton = {version = "2.3.1", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""}
1370
+ typing-extensions = ">=4.8.0"
1371
+
1372
+ [package.extras]
1373
+ opt-einsum = ["opt-einsum (>=3.3)"]
1374
+ optree = ["optree (>=0.9.1)"]
1375
+
1376
+ [[package]]
1377
+ name = "torchvision"
1378
+ version = "0.18.1"
1379
+ description = "image and video datasets and models for torch deep learning"
1380
+ category = "main"
1381
+ optional = false
1382
+ python-versions = ">=3.8"
1383
+
1384
+ [package.dependencies]
1385
+ numpy = "*"
1386
+ pillow = ">=5.3.0,<8.3.0 || >=8.4.0"
1387
+ torch = "2.3.1"
1388
+
1389
+ [package.extras]
1390
+ scipy = ["scipy"]
1391
+
1392
+ [[package]]
1393
+ name = "tqdm"
1394
+ version = "4.66.4"
1395
+ description = "Fast, Extensible Progress Meter"
1396
+ category = "main"
1397
+ optional = false
1398
+ python-versions = ">=3.7"
1399
+
1400
+ [package.dependencies]
1401
+ colorama = {version = "*", markers = "platform_system == \"Windows\""}
1402
+
1403
+ [package.extras]
1404
+ dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"]
1405
+ notebook = ["ipywidgets (>=6)"]
1406
+ slack = ["slack-sdk"]
1407
+ telegram = ["requests"]
1408
+
1409
+ [[package]]
1410
+ name = "transformers"
1411
+ version = "4.41.2"
1412
+ description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow"
1413
+ category = "main"
1414
+ optional = false
1415
+ python-versions = ">=3.8.0"
1416
+
1417
+ [package.dependencies]
1418
+ filelock = "*"
1419
+ huggingface-hub = ">=0.23.0,<1.0"
1420
+ numpy = ">=1.17"
1421
+ packaging = ">=20.0"
1422
+ pyyaml = ">=5.1"
1423
+ regex = "!=2019.12.17"
1424
+ requests = "*"
1425
+ safetensors = ">=0.4.1"
1426
+ tokenizers = ">=0.19,<0.20"
1427
+ tqdm = ">=4.27"
1428
+
1429
+ [package.extras]
1430
+ accelerate = ["accelerate (>=0.21.0)"]
1431
+ agents = ["diffusers", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "torch", "sentencepiece (>=0.1.91,!=0.1.92)", "opencv-python", "Pillow (>=10.0.1,<=15.0)"]
1432
+ all = ["tensorflow (>2.9,<2.16)", "onnxconverter-common", "tf2onnx", "tensorflow-text (<2.16)", "keras-nlp (>=0.3.1)", "torch", "accelerate (>=0.21.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "flax (>=0.4.1,<=0.7.0)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf", "tokenizers (>=0.19,<0.20)", "torchaudio", "librosa", "pyctcdecode (>=0.4.0)", "phonemizer", "kenlm", "Pillow (>=10.0.1,<=15.0)", "optuna", "ray[tune] (>=2.7.0)", "sigopt", "timm", "torchvision", "codecarbon (==1.2.0)", "decord (==0.6.0)", "av (==9.2.0)"]
1433
+ audio = ["librosa", "pyctcdecode (>=0.4.0)", "phonemizer", "kenlm"]
1434
+ codecarbon = ["codecarbon (==1.2.0)"]
1435
+ deepspeed = ["deepspeed (>=0.9.3)", "accelerate (>=0.21.0)"]
1436
+ deepspeed-testing = ["deepspeed (>=0.9.3)", "accelerate (>=0.21.0)", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "sacremoses", "rjieba", "beautifulsoup4", "tensorboard", "pydantic", "sentencepiece (>=0.1.91,!=0.1.92)", "faiss-cpu", "cookiecutter (==1.7.3)", "optuna", "protobuf"]
1437
+ dev-tensorflow = ["rjieba", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "sacremoses", "beautifulsoup4", "tensorboard", "pydantic", "sentencepiece (>=0.1.91,!=0.1.92)", "faiss-cpu", "cookiecutter (==1.7.3)", "tensorflow (>2.9,<2.16)", "onnxconverter-common", "tf2onnx", "tensorflow-text (<2.16)", "keras-nlp (>=0.3.1)", "protobuf", "tokenizers (>=0.19,<0.20)", "Pillow (>=10.0.1,<=15.0)", "isort (>=5.5.4)", "urllib3 (<2.0.0)", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "librosa", "pyctcdecode (>=0.4.0)", "phonemizer", "kenlm"]
1438
+ dev = ["tensorflow (>2.9,<2.16)", "onnxconverter-common", "tf2onnx", "tensorflow-text (<2.16)", "keras-nlp (>=0.3.1)", "torch", "accelerate (>=0.21.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "flax (>=0.4.1,<=0.7.0)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf", "tokenizers (>=0.19,<0.20)", "torchaudio", "librosa", "pyctcdecode (>=0.4.0)", "phonemizer", "kenlm", "Pillow (>=10.0.1,<=15.0)", "optuna", "ray[tune] (>=2.7.0)", "sigopt", "timm", "torchvision", "codecarbon (==1.2.0)", "decord (==0.6.0)", "av (==9.2.0)", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "sacremoses", "rjieba", "beautifulsoup4", "tensorboard", "pydantic", "faiss-cpu", "cookiecutter (==1.7.3)", "isort (>=5.5.4)", "urllib3 (<2.0.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "sudachipy (>=0.6.6)", "sudachidict-core (>=20220729)", "rhoknp (>=1.1.0,<1.3.1)", "scikit-learn"]
1439
+ dev-torch = ["pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "sacremoses", "rjieba", "beautifulsoup4", "tensorboard", "pydantic", "sentencepiece (>=0.1.91,!=0.1.92)", "faiss-cpu", "cookiecutter (==1.7.3)", "torch", "accelerate (>=0.21.0)", "protobuf", "tokenizers (>=0.19,<0.20)", "torchaudio", "librosa", "pyctcdecode (>=0.4.0)", "phonemizer", "kenlm", "Pillow (>=10.0.1,<=15.0)", "optuna", "ray[tune] (>=2.7.0)", "sigopt", "timm", "torchvision", "codecarbon (==1.2.0)", "isort (>=5.5.4)", "urllib3 (<2.0.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "sudachipy (>=0.6.6)", "sudachidict-core (>=20220729)", "rhoknp (>=1.1.0,<1.3.1)", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"]
1440
+ flax = ["jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "flax (>=0.4.1,<=0.7.0)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"]
1441
+ flax-speech = ["librosa", "pyctcdecode (>=0.4.0)", "phonemizer", "kenlm"]
1442
+ ftfy = ["ftfy"]
1443
+ integrations = ["optuna", "ray[tune] (>=2.7.0)", "sigopt"]
1444
+ ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "sudachipy (>=0.6.6)", "sudachidict-core (>=20220729)", "rhoknp (>=1.1.0,<1.3.1)"]
1445
+ modelcreation = ["cookiecutter (==1.7.3)"]
1446
+ natten = ["natten (>=0.14.6,<0.15.0)"]
1447
+ onnx = ["onnxconverter-common", "tf2onnx", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"]
1448
+ onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"]
1449
+ optuna = ["optuna"]
1450
+ quality = ["datasets (!=2.5.0)", "isort (>=5.5.4)", "ruff (==0.1.5)", "GitPython (<3.1.19)", "urllib3 (<2.0.0)"]
1451
+ ray = ["ray[tune] (>=2.7.0)"]
1452
+ retrieval = ["faiss-cpu", "datasets (!=2.5.0)"]
1453
+ sagemaker = ["sagemaker (>=2.31.0)"]
1454
+ sentencepiece = ["sentencepiece (>=0.1.91,!=0.1.92)", "protobuf"]
1455
+ serving = ["pydantic", "uvicorn", "fastapi", "starlette"]
1456
+ sigopt = ["sigopt"]
1457
+ sklearn = ["scikit-learn"]
1458
+ speech = ["torchaudio", "librosa", "pyctcdecode (>=0.4.0)", "phonemizer", "kenlm"]
1459
+ testing = ["pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "sacremoses", "rjieba", "beautifulsoup4", "tensorboard", "pydantic", "sentencepiece (>=0.1.91,!=0.1.92)", "faiss-cpu", "cookiecutter (==1.7.3)"]
1460
+ tf = ["tensorflow (>2.9,<2.16)", "onnxconverter-common", "tf2onnx", "tensorflow-text (<2.16)", "keras-nlp (>=0.3.1)"]
1461
+ tf-cpu = ["keras (>2.9,<2.16)", "tensorflow-cpu (>2.9,<2.16)", "onnxconverter-common", "tf2onnx", "tensorflow-text (<2.16)", "keras-nlp (>=0.3.1)", "tensorflow-probability (<2.16)"]
1462
+ tf-speech = ["librosa", "pyctcdecode (>=0.4.0)", "phonemizer", "kenlm"]
1463
+ timm = ["timm"]
1464
+ tokenizers = ["tokenizers (>=0.19,<0.20)"]
1465
+ torch = ["torch", "accelerate (>=0.21.0)"]
1466
+ torch-speech = ["torchaudio", "librosa", "pyctcdecode (>=0.4.0)", "phonemizer", "kenlm"]
1467
+ torch-vision = ["torchvision", "Pillow (>=10.0.1,<=15.0)"]
1468
+ torchhub = ["filelock", "huggingface-hub (>=0.23.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "torch", "tokenizers (>=0.19,<0.20)", "tqdm (>=4.27)"]
1469
+ video = ["decord (==0.6.0)", "av (==9.2.0)"]
1470
+ vision = ["Pillow (>=10.0.1,<=15.0)"]
1471
+
1472
+ [[package]]
1473
+ name = "triton"
1474
+ version = "2.3.1"
1475
+ description = "A language and compiler for custom Deep Learning operations"
1476
+ category = "main"
1477
+ optional = false
1478
+ python-versions = "*"
1479
+
1480
+ [package.dependencies]
1481
+ filelock = "*"
1482
+
1483
+ [package.extras]
1484
+ build = ["cmake (>=3.20)", "lit"]
1485
+ tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)", "torch"]
1486
+ tutorials = ["matplotlib", "pandas", "tabulate", "torch"]
1487
+
1488
+ [[package]]
1489
+ name = "typer"
1490
+ version = "0.12.3"
1491
+ description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
1492
+ category = "main"
1493
+ optional = false
1494
+ python-versions = ">=3.7"
1495
+
1496
+ [package.dependencies]
1497
+ click = ">=8.0.0"
1498
+ rich = ">=10.11.0"
1499
+ shellingham = ">=1.3.0"
1500
+ typing-extensions = ">=3.7.4.3"
1501
+
1502
+ [[package]]
1503
+ name = "typing-extensions"
1504
+ version = "4.12.2"
1505
+ description = "Backported and Experimental Type Hints for Python 3.8+"
1506
+ category = "main"
1507
+ optional = false
1508
+ python-versions = ">=3.8"
1509
+
1510
+ [[package]]
1511
+ name = "tzdata"
1512
+ version = "2024.1"
1513
+ description = "Provider of IANA time zone data"
1514
+ category = "main"
1515
+ optional = false
1516
+ python-versions = ">=2"
1517
+
1518
+ [[package]]
1519
+ name = "ujson"
1520
+ version = "5.10.0"
1521
+ description = "Ultra fast JSON encoder and decoder for Python"
1522
+ category = "main"
1523
+ optional = false
1524
+ python-versions = ">=3.8"
1525
+
1526
+ [[package]]
1527
+ name = "urllib3"
1528
+ version = "2.2.2"
1529
+ description = "HTTP library with thread-safe connection pooling, file post, and more."
1530
+ category = "main"
1531
+ optional = false
1532
+ python-versions = ">=3.8"
1533
+
1534
+ [package.extras]
1535
+ brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
1536
+ h2 = ["h2 (>=4,<5)"]
1537
+ socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
1538
+ zstd = ["zstandard (>=0.18.0)"]
1539
+
1540
+ [[package]]
1541
+ name = "uvicorn"
1542
+ version = "0.30.1"
1543
+ description = "The lightning-fast ASGI server."
1544
+ category = "main"
1545
+ optional = false
1546
+ python-versions = ">=3.8"
1547
+
1548
+ [package.dependencies]
1549
+ click = ">=7.0"
1550
+ colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""}
1551
+ h11 = ">=0.8"
1552
+ httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""}
1553
+ python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
1554
+ pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
1555
+ typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
1556
+ uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
1557
+ watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
1558
+ websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
1559
+
1560
+ [package.extras]
1561
+ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
1562
+
1563
+ [[package]]
1564
+ name = "uvloop"
1565
+ version = "0.19.0"
1566
+ description = "Fast implementation of asyncio event loop on top of libuv"
1567
+ category = "main"
1568
+ optional = false
1569
+ python-versions = ">=3.8.0"
1570
+
1571
+ [package.extras]
1572
+ docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)"]
1573
+ test = ["flake8 (>=5.0,<6.0)", "psutil", "pycodestyle (>=2.9.0,<2.10.0)", "pyOpenSSL (>=23.0.0,<23.1.0)", "mypy (>=0.800)", "Cython (>=0.29.36,<0.30.0)", "aiohttp (>=3.8.1)", "aiohttp (==3.9.0b0)"]
1574
+
1575
+ [[package]]
1576
+ name = "vulture"
1577
+ version = "2.11"
1578
+ description = "Find dead code"
1579
+ category = "dev"
1580
+ optional = false
1581
+ python-versions = ">=3.8"
1582
+
1583
+ [package.dependencies]
1584
+ tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
1585
+
1586
+ [[package]]
1587
+ name = "watchfiles"
1588
+ version = "0.22.0"
1589
+ description = "Simple, modern and high performance file watching and code reload in python."
1590
+ category = "main"
1591
+ optional = false
1592
+ python-versions = ">=3.8"
1593
+
1594
+ [package.dependencies]
1595
+ anyio = ">=3.0.0"
1596
+
1597
+ [[package]]
1598
+ name = "websockets"
1599
+ version = "11.0.3"
1600
+ description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
1601
+ category = "main"
1602
+ optional = false
1603
+ python-versions = ">=3.7"
1604
+
1605
+ [[package]]
1606
+ name = "werkzeug"
1607
+ version = "3.0.3"
1608
+ description = "The comprehensive WSGI web application library."
1609
+ category = "main"
1610
+ optional = false
1611
+ python-versions = ">=3.8"
1612
+
1613
+ [package.dependencies]
1614
+ MarkupSafe = ">=2.1.1"
1615
+
1616
+ [package.extras]
1617
+ watchdog = ["watchdog (>=2.3)"]
1618
+
1619
+ [metadata]
1620
+ lock-version = "1.1"
1621
+ python-versions = "^3.10"
1622
+ content-hash = "b2c34c8c67b16bae88499909078bb65a8829aa3a72b539871b2f1baf30eb9e11"
1623
+
1624
+ [metadata.files]
1625
+ absl-py = []
1626
+ aiofiles = []
1627
+ altair = []
1628
+ annotated-types = []
1629
+ anyio = []
1630
+ attrs = []
1631
+ black = []
1632
+ certifi = []
1633
+ charset-normalizer = []
1634
+ click = []
1635
+ colorama = []
1636
+ contourpy = []
1637
+ cycler = []
1638
+ dnspython = []
1639
+ email-validator = []
1640
+ exceptiongroup = []
1641
+ fastapi = []
1642
+ fastapi-cli = []
1643
+ ffmpy = []
1644
+ filelock = []
1645
+ flake8 = []
1646
+ fonttools = []
1647
+ fsspec = []
1648
+ gradio = []
1649
+ gradio-client = []
1650
+ grpcio = []
1651
+ h11 = []
1652
+ httpcore = []
1653
+ httptools = []
1654
+ httpx = []
1655
+ huggingface-hub = []
1656
+ idna = []
1657
+ importlib-resources = []
1658
+ intel-openmp = []
1659
+ jinja2 = []
1660
+ joblib = []
1661
+ jsonschema = []
1662
+ jsonschema-specifications = []
1663
+ kiwisolver = []
1664
+ markdown = []
1665
+ markdown-it-py = []
1666
+ markupsafe = []
1667
+ matplotlib = []
1668
+ mccabe = []
1669
+ mdurl = []
1670
+ mkl = []
1671
+ mpmath = []
1672
+ mypy = []
1673
+ mypy-extensions = []
1674
+ networkx = []
1675
+ numpy = []
1676
+ nvidia-cublas-cu12 = []
1677
+ nvidia-cuda-cupti-cu12 = []
1678
+ nvidia-cuda-nvrtc-cu12 = []
1679
+ nvidia-cuda-runtime-cu12 = []
1680
+ nvidia-cudnn-cu12 = []
1681
+ nvidia-cufft-cu12 = []
1682
+ nvidia-curand-cu12 = []
1683
+ nvidia-cusolver-cu12 = []
1684
+ nvidia-cusparse-cu12 = []
1685
+ nvidia-nccl-cu12 = []
1686
+ nvidia-nvjitlink-cu12 = []
1687
+ nvidia-nvtx-cu12 = []
1688
+ orjson = []
1689
+ packaging = []
1690
+ pandas = []
1691
+ pathspec = []
1692
+ pillow = []
1693
+ platformdirs = []
1694
+ protobuf = []
1695
+ pycodestyle = []
1696
+ pydantic = []
1697
+ pydantic-core = []
1698
+ pydub = []
1699
+ pyflakes = []
1700
+ pygments = []
1701
+ pyparsing = []
1702
+ python-dateutil = []
1703
+ python-dotenv = []
1704
+ python-multipart = []
1705
+ pytz = []
1706
+ pyyaml = []
1707
+ referencing = []
1708
+ regex = []
1709
+ requests = []
1710
+ rich = []
1711
+ rpds-py = []
1712
+ ruff = []
1713
+ safetensors = []
1714
+ scikit-learn = []
1715
+ scipy = []
1716
+ semantic-version = []
1717
+ shellingham = []
1718
+ six = []
1719
+ sniffio = []
1720
+ starlette = []
1721
+ sympy = []
1722
+ tbb = []
1723
+ tensorboard = []
1724
+ tensorboard-data-server = []
1725
+ threadpoolctl = []
1726
+ tokenizers = []
1727
+ tomli = []
1728
+ tomlkit = []
1729
+ toolz = []
1730
+ torch = []
1731
+ torchvision = []
1732
+ tqdm = []
1733
+ transformers = []
1734
+ triton = []
1735
+ typer = []
1736
+ typing-extensions = []
1737
+ tzdata = []
1738
+ ujson = []
1739
+ urllib3 = []
1740
+ uvicorn = []
1741
+ uvloop = []
1742
+ vulture = []
1743
+ watchfiles = []
1744
+ websockets = []
1745
+ werkzeug = []
pyproject.toml ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [tool.poetry]
2
+ name = "makeitsports-bot"
3
+ version = "0.1.0"
4
+ description = ""
5
+ authors = ["brunorosilva <b.rosilva1@gmail.com>"]
6
+ readme = "README.md"
7
+ packages = [{include = "makeitsports_bot"}]
8
+
9
+ [tool.poetry.dependencies]
10
+ python = "^3.10"
11
+ torch = "^2.3.1"
12
+ torchvision = "^0.18.1"
13
+ tqdm = "^4.66.4"
14
+ pandas = "^2.2.2"
15
+ scipy = "^1.14.0"
16
+ numpy = "^2.0.0"
17
+ transformers = "^4.41.2"
18
+ tensorboard = "^2.17.0"
19
+ scikit-learn = ">=0.0.0"
20
+ matplotlib = "^3.9.0"
21
+ gradio = ">=0.0.0"
22
+
23
+
24
+ [tool.poetry.dev-dependencies]
25
+ black = "^24.4.2"
26
+ vulture = "^2.11"
27
+ mypy = "^1.10.1"
28
+ flake8 = "^7.1.0"
29
+ [build-system]
30
+ requires = ["poetry-core"]
31
+ build-backend = "poetry.core.masonry.api"
setup.cfg ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ [flake8]
2
+ max-line-length = 88
3
+ ignore = E122,E123,E126,E127,E128,E203,E221,E241,E731,E722,W503
4
+ exclude = tests,.git,__init__.py
5
+
6
+ [bdist_wheel]
7
+ universal=1
setup.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import io
2
+ import os
3
+ import re
4
+
5
+ from setuptools import find_packages
6
+ from setuptools import setup
7
+
8
+
9
+ def read(filename):
10
+ filename = os.path.join(os.path.dirname(__file__), filename)
11
+ text_type = type("")
12
+ with io.open(filename, mode="r", encoding="utf-8") as fd:
13
+ return re.sub(text_type(r":[a-z]+:`~?(.*?)`"), text_type(r"``\1``"), fd.read())
14
+
15
+
16
+ requirements = [
17
+ # use environment.yml
18
+ ]
19
+
20
+
21
+ setup(
22
+ name="makeitsports_bot",
23
+ version="0.0.1",
24
+ url="https://github.com/brunorosilva/makeitsports-bot",
25
+ author="Bruno Chicelli",
26
+ author_email="chicelli@outlook.com",
27
+ description="Short description",
28
+ long_description=read("README.rst"),
29
+ packages=find_packages(exclude=("tests",)),
30
+ entry_points={"console_scripts": ["makeitsports_bot=makeitsports_bot.cli:cli"]},
31
+ install_requires=requirements,
32
+ classifiers=[
33
+ "Programming Language :: Python",
34
+ "Programming Language :: Python :: 3.6",
35
+ ],
36
+ )