Adding causal prediction functionality using CACM algorithm with demo notebook (#729)
* add causal prediction using cacm + demo notebook Signed-off-by: jivatneet <jivatneet@gmail.com> * Adding causal prediction code using CACM with demo notebook Signed-off-by: jivatneet <jivatneet@gmail.com> * addressing comments: fixing documentation in base_algorithm and cacm Signed-off-by: jivatneet <jivatneet@gmail.com> * addressing comments: fixing documentation in base_dataset Signed-off-by: jivatneet <jivatneet@gmail.com> * rename Algorithm class Signed-off-by: jivatneet <jivatneet@gmail.com> * updating base_dataset for format check Signed-off-by: jivatneet <jivatneet@gmail.com> * adding exception for optimizer; resolving list bug Signed-off-by: jivatneet <jivatneet@gmail.com> * adding docs for base algo Signed-off-by: jivatneet <jivatneet@gmail.com> * added torch to dev dependency * added torchlightning to dev dependency Signed-off-by: Amit Sharma <amit_sharma@live.com> * updated poetry.lock Signed-off-by: Amit Sharma <amit_sharma@live.com> * updated gpu to devices Signed-off-by: Amit Sharma <amit_sharma@live.com> Signed-off-by: jivatneet <jivatneet@gmail.com> Signed-off-by: Amit Sharma <amit_sharma@live.com> Co-authored-by: Amit Sharma <amit_sharma@live.com>
This commit is contained in:
Родитель
b6a3ae500c
Коммит
1ac8354e44
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -0,0 +1,97 @@
|
|||
import pytorch_lightning as pl
|
||||
import torch
|
||||
from torch.nn import functional as F
|
||||
|
||||
|
||||
class PredictionAlgorithm(pl.LightningModule):
|
||||
def __init__(self, model, optimizer, lr, weight_decay, betas, momentum):
|
||||
"""
|
||||
This class implements the default methods for a Pytorch lightning module `pl.LightningModule`.
|
||||
Its methods are called when the `fit()` method is called. To know more about these methods, refer to https://pytorch-lightning.readthedocs.io/en/stable/common/lightning_module.html.
|
||||
|
||||
:param model: Neural network modules used for training
|
||||
:param optimizer: Optimization algorithm used for training. Currently supports "Adam" and "SGD".
|
||||
:param lr: Value of learning rate
|
||||
:param weight_decay: Value of weight decay for optimizer
|
||||
:param betas: Adam configuration parameters (beta1, beta2), exponential decay rate for the first moment and second-moment estimates, respectively.
|
||||
:param momentum: Value of momentum for SGD optimzer
|
||||
"""
|
||||
super().__init__()
|
||||
|
||||
self.model = model
|
||||
self.optimizer = optimizer
|
||||
self.lr = lr
|
||||
self.weight_decay = weight_decay
|
||||
self.betas = betas
|
||||
self.momentum = momentum
|
||||
|
||||
# Check if the optimizer is currently supported
|
||||
if self.optimizer not in ["Adam", "SGD"]:
|
||||
error_msg = self.optimizer + " is not implemented currently. Try Adam or SGD."
|
||||
raise Exception(error_msg)
|
||||
|
||||
def training_step(self, train_batch, batch_idx):
|
||||
"""
|
||||
Activate the training loop for the pl.LightningModule.
|
||||
|
||||
Override this method for implementing a new algorithm.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def validation_step(self, batch, batch_idx, dataloader_idx=0):
|
||||
"""
|
||||
Activate the validation loop for the pl.LightningModule.
|
||||
|
||||
"""
|
||||
|
||||
if isinstance(batch[0], list):
|
||||
x = torch.cat([x for x, y, _, _ in batch])
|
||||
y = torch.cat([y for x, y, _, _ in batch])
|
||||
else:
|
||||
x = batch[0]
|
||||
y = batch[1]
|
||||
|
||||
out = self.model(x)
|
||||
loss = F.cross_entropy(out, y)
|
||||
acc = (torch.argmax(out, dim=1) == y).float().mean()
|
||||
|
||||
metrics = {"val_acc": acc, "val_loss": loss}
|
||||
self.log_dict(metrics, on_step=False, on_epoch=True, prog_bar=True)
|
||||
|
||||
def test_step(self, batch, batch_idx, dataloader_idx=0):
|
||||
"""
|
||||
Activate the test loop for the pl.LightningModule.
|
||||
|
||||
Test loop is called only when `test()` is used.
|
||||
|
||||
"""
|
||||
|
||||
if isinstance(batch[0], list):
|
||||
x = torch.cat([x for x, y, _, _ in batch])
|
||||
y = torch.cat([y for x, y, _, _ in batch])
|
||||
else:
|
||||
x = batch[0]
|
||||
y = batch[1]
|
||||
|
||||
out = self.model(x)
|
||||
loss = F.cross_entropy(out, y)
|
||||
acc = (torch.argmax(out, dim=1) == y).float().mean()
|
||||
|
||||
metrics = {"test_acc": acc, "test_loss": loss}
|
||||
self.log_dict(metrics, on_step=False, on_epoch=True, prog_bar=True)
|
||||
|
||||
def configure_optimizers(self):
|
||||
"""
|
||||
Initialize the optimizer using params passed when initializing PredictionAlgorithm class.
|
||||
|
||||
"""
|
||||
if self.optimizer == "Adam":
|
||||
optimizer = torch.optim.Adam(
|
||||
self.parameters(), lr=self.lr, weight_decay=self.weight_decay, betas=self.betas
|
||||
)
|
||||
elif self.optimizer == "SGD":
|
||||
optimizer = torch.optim.SGD(
|
||||
self.parameters(), lr=self.lr, weight_decay=self.weight_decay, momentum=self.momentum
|
||||
)
|
||||
|
||||
return optimizer
|
|
@ -0,0 +1,261 @@
|
|||
import torch
|
||||
from torch import nn
|
||||
from torch.nn import functional as F
|
||||
|
||||
from dowhy.causal_prediction.algorithms.base_algorithm import PredictionAlgorithm
|
||||
from dowhy.causal_prediction.algorithms.utils import mmd_compute
|
||||
|
||||
|
||||
class CACM(PredictionAlgorithm):
|
||||
def __init__(
|
||||
self,
|
||||
model,
|
||||
optimizer="Adam",
|
||||
lr=1e-3,
|
||||
weight_decay=0.0,
|
||||
betas=(0.9, 0.999),
|
||||
momentum=0.9,
|
||||
kernel_type="gaussian",
|
||||
ci_test="mmd",
|
||||
attr_types=[],
|
||||
E_conditioned=True,
|
||||
E_eq_Aind=True,
|
||||
gamma=1e-6,
|
||||
lambda_causal=1.0,
|
||||
lambda_ind=1.0,
|
||||
):
|
||||
|
||||
"""Class for Causally Adaptive Constraint Minimization (CACM) Algorithm.
|
||||
@article{Kaur2022ModelingTD,
|
||||
title={Modeling the Data-Generating Process is Necessary for Out-of-Distribution Generalization},
|
||||
author={Jivat Neet Kaur and Emre Kıcıman and Amit Sharma},
|
||||
journal={ArXiv},
|
||||
year={2022},
|
||||
volume={abs/2206.07837},
|
||||
url={https://arxiv.org/abs/2206.07837}
|
||||
}
|
||||
|
||||
:param model: Networks used for training. `model` type expected is torch.nn.Sequential(featurizer, classifier) where featurizer and classifier are of type torch.nn.Module.
|
||||
:param optimizer: Optimization algorithm used for training. Currently supports "Adam" and "SGD".
|
||||
:param lr: learning rate for CACM
|
||||
:param weight_decay: Value of weight decay for optimizer
|
||||
:param betas: Adam configuration parameters (beta1, beta2), exponential decay rate for the first moment and second-moment estimates, respectively.
|
||||
:param momentum: Value of momentum for SGD optimzer
|
||||
:param kernel_type: Kernel type for MMD penalty. Currently, supports "gaussian" (RBF). If None, distance between mean and second-order statistics (covariances) is used.
|
||||
:param ci_test: Conditional independence metric used for regularization penalty. Currently, MMD is supported.
|
||||
:param attr_types: list of attribute types (based on relationship with label Y); can be in any order. Currently, only 'causal' and 'ind' are supported.
|
||||
For single-shift datasets, use: ['causal'], ['ind']
|
||||
For multi-shift datasets, use: ['causal', 'ind']
|
||||
:param E_conditioned: Binary flag indicating whether E-conditioned regularization has to be applied
|
||||
:param E_eq_Aind: Binary flag indicating whether environment (E) and Aind (Independent attribute) coincide
|
||||
:param gamma: kernel bandwidth for MMD (due to implementation, the kernel bandwdith will actually be the reciprocal of gamma i.e., gamma=1e-6 implies kernel bandwidth=1e6. See `mmd_compute` in utils.py)
|
||||
:param lambda_causal: MMD penalty hyperparameter for Causal shift
|
||||
:param lambda_ind: MMD penalty hyperparameter for Independent shift
|
||||
:returns: an instance of PredictionAlgorithm class
|
||||
|
||||
"""
|
||||
|
||||
super().__init__(model, optimizer, lr, weight_decay, betas, momentum)
|
||||
|
||||
self.kernel_type = kernel_type
|
||||
self.attr_types = attr_types
|
||||
self.E_conditioned = E_conditioned # E-conditioned regularization by default
|
||||
self.E_eq_Aind = E_eq_Aind
|
||||
self.gamma = gamma
|
||||
self.lambda_causal = lambda_causal
|
||||
self.lambda_ind = lambda_ind
|
||||
|
||||
def mmd(self, x, y):
|
||||
"""
|
||||
Compute MMD penalty between x and y.
|
||||
|
||||
"""
|
||||
return mmd_compute(x, y, self.kernel_type, self.gamma)
|
||||
|
||||
def training_step(self, train_batch, batch_idx):
|
||||
"""
|
||||
Override `training_step` from PredictionAlgorithm class for CACM-specific training loop.
|
||||
|
||||
"""
|
||||
|
||||
self.featurizer = self.model[0]
|
||||
self.classifier = self.model[1]
|
||||
|
||||
minibatches = train_batch
|
||||
|
||||
objective = 0
|
||||
correct, total = 0, 0
|
||||
penalty_causal, penalty_ind = 0, 0
|
||||
nmb = len(minibatches)
|
||||
|
||||
if len(minibatches[0]) == 4:
|
||||
features = [self.featurizer(xi) for xi, _, _, _ in minibatches]
|
||||
classifs = [self.classifier(fi) for fi in features]
|
||||
targets = [yi for _, yi, _, _ in minibatches]
|
||||
causal_attribute_labels = [ai for _, _, ai, _ in minibatches]
|
||||
ind_attribute_labels = [ai for _, _, _, ai in minibatches]
|
||||
elif len(minibatches[0]) == 3: # redundant for now since enforcing 4-dim output from dataset
|
||||
features = [self.featurizer(xi) for xi, _, _ in minibatches]
|
||||
classifs = [self.classifier(fi) for fi in features]
|
||||
targets = [yi for _, yi, _ in minibatches]
|
||||
causal_attribute_labels = [ai for _, _, ai in minibatches]
|
||||
|
||||
for i in range(nmb):
|
||||
objective += F.cross_entropy(classifs[i], targets[i])
|
||||
correct += (torch.argmax(classifs[i], dim=1) == targets[i]).float().sum().item()
|
||||
total += classifs[i].shape[0]
|
||||
|
||||
# Acause regularization
|
||||
if "causal" in self.attr_types:
|
||||
if self.E_conditioned:
|
||||
for i in range(nmb):
|
||||
unique_labels = torch.unique(targets[i]) # find distinct labels in environment
|
||||
unique_label_indices = []
|
||||
for label in unique_labels:
|
||||
label_ind = [ind for ind, j in enumerate(targets[i]) if j == label]
|
||||
unique_label_indices.append(label_ind)
|
||||
|
||||
nulabels = unique_labels.shape[0]
|
||||
for idx in range(nulabels):
|
||||
unique_attrs = torch.unique(
|
||||
causal_attribute_labels[i][unique_label_indices[idx]]
|
||||
) # find distinct attributes in environment with same label
|
||||
unique_attr_indices = []
|
||||
for attr in unique_attrs:
|
||||
single_attr = []
|
||||
for y_attr_idx in unique_label_indices[idx]:
|
||||
if causal_attribute_labels[i][y_attr_idx] == attr:
|
||||
single_attr.append(y_attr_idx)
|
||||
unique_attr_indices.append(single_attr)
|
||||
|
||||
nuattr = unique_attrs.shape[0]
|
||||
for aidx in range(nuattr):
|
||||
for bidx in range(aidx + 1, nuattr):
|
||||
penalty_causal += self.mmd(
|
||||
classifs[i][unique_attr_indices[aidx]], classifs[i][unique_attr_indices[bidx]]
|
||||
)
|
||||
|
||||
else:
|
||||
overall_label_attr_vindices = {} # storing attribute indices
|
||||
overall_label_attr_eindices = {} # storing corresponding environment indices
|
||||
|
||||
for i in range(nmb):
|
||||
unique_labels = torch.unique(targets[i]) # find distinct labels in environment
|
||||
unique_label_indices = []
|
||||
for label in unique_labels:
|
||||
label_ind = [ind for ind, j in enumerate(targets[i]) if j == label]
|
||||
unique_label_indices.append(label_ind)
|
||||
|
||||
nulabels = unique_labels.shape[0]
|
||||
for idx in range(nulabels):
|
||||
label = unique_labels[idx]
|
||||
if label not in overall_label_attr_vindices:
|
||||
overall_label_attr_vindices[label] = {}
|
||||
overall_label_attr_eindices[label] = {}
|
||||
|
||||
unique_attrs = torch.unique(
|
||||
causal_attribute_labels[i][unique_label_indices[idx]]
|
||||
) # find distinct attributes in environment with same label
|
||||
unique_attr_indices = []
|
||||
for attr in unique_attrs: # storing indices with same attribute value and label
|
||||
if attr not in overall_label_attr_vindices[label]:
|
||||
overall_label_attr_vindices[label][attr] = []
|
||||
overall_label_attr_eindices[label][attr] = []
|
||||
single_attr = []
|
||||
for y_attr_idx in unique_label_indices[idx]:
|
||||
if causal_attribute_labels[i][y_attr_idx] == attr:
|
||||
single_attr.append(y_attr_idx)
|
||||
overall_label_attr_vindices[label][attr].append(single_attr)
|
||||
overall_label_attr_eindices[label][attr].append(i)
|
||||
unique_attr_indices.append(single_attr)
|
||||
|
||||
for (
|
||||
y_val
|
||||
) in (
|
||||
overall_label_attr_vindices
|
||||
): # applying MMD penalty between distributions P(φ(x)|ai, y), P(φ(x)|aj, y) i.e samples with different attribute values but same label
|
||||
tensors_list = []
|
||||
for attr in overall_label_attr_vindices[y_val]:
|
||||
attrs_list = []
|
||||
if overall_label_attr_vindices[y_val][attr] != []:
|
||||
for il_ind, indices_list in enumerate(overall_label_attr_vindices[y_val][attr]):
|
||||
attrs_list.append(
|
||||
classifs[overall_label_attr_eindices[y_val][attr][il_ind]][indices_list]
|
||||
)
|
||||
if len(attrs_list) > 0:
|
||||
tensor_attrs = torch.cat(attrs_list, 0)
|
||||
tensors_list.append(tensor_attrs)
|
||||
|
||||
nuattr = len(tensors_list)
|
||||
for aidx in range(nuattr):
|
||||
for bidx in range(aidx + 1, nuattr):
|
||||
penalty_causal += self.mmd(tensors_list[aidx], tensors_list[bidx])
|
||||
|
||||
# Aind regularization
|
||||
if "ind" in self.attr_types:
|
||||
if self.E_eq_Aind: # Environment (E) and Independent attribute (Aind) coincide
|
||||
for i in range(nmb):
|
||||
for j in range(i + 1, nmb):
|
||||
penalty_ind += self.mmd(classifs[i], classifs[j])
|
||||
|
||||
else:
|
||||
if self.E_conditioned:
|
||||
for i in range(nmb):
|
||||
unique_aind_labels = torch.unique(ind_attribute_labels[i])
|
||||
unique_aind_label_indices = []
|
||||
for label in unique_aind_labels:
|
||||
label_ind = [ind for ind, j in enumerate(ind_attribute_labels[i]) if j == label]
|
||||
unique_aind_label_indices.append(label_ind)
|
||||
|
||||
nulabels = unique_aind_labels.shape[0]
|
||||
for aidx in range(nulabels):
|
||||
for bidx in range(aidx + 1, nulabels):
|
||||
penalty_ind += self.mmd(
|
||||
classifs[i][unique_aind_label_indices[aidx]],
|
||||
classifs[i][unique_aind_label_indices[bidx]],
|
||||
)
|
||||
|
||||
else: # this currently assumes we have a disjoint set of attributes (Aind) across environments i.e., environment is defined by multiple closely related values of the attribute
|
||||
overall_nmb_indices, nmb_id = [], []
|
||||
for i in range(nmb):
|
||||
unique_attrs = torch.unique(ind_attribute_labels[i])
|
||||
unique_attr_indices = []
|
||||
for attr in unique_attrs:
|
||||
attr_ind = [ind for ind, j in enumerate(ind_attribute_labels[i]) if j == attr]
|
||||
unique_attr_indices.append(attr_ind)
|
||||
overall_nmb_indices.append(attr_ind)
|
||||
nmb_id.append(i)
|
||||
|
||||
nuattr = len(overall_nmb_indices)
|
||||
for aidx in range(nuattr):
|
||||
for bidx in range(aidx + 1, nuattr):
|
||||
a_nmb_id = nmb_id[aidx]
|
||||
b_nmb_id = nmb_id[bidx]
|
||||
penalty_ind += self.mmd(
|
||||
classifs[a_nmb_id][overall_nmb_indices[aidx]],
|
||||
classifs[b_nmb_id][overall_nmb_indices[bidx]],
|
||||
)
|
||||
|
||||
objective /= nmb
|
||||
if nmb > 1:
|
||||
penalty_causal /= nmb * (nmb - 1) / 2
|
||||
penalty_ind /= nmb * (nmb - 1) / 2
|
||||
|
||||
# Compile loss
|
||||
loss = objective
|
||||
loss += self.lambda_causal * penalty_causal
|
||||
loss += self.lambda_ind * penalty_ind
|
||||
|
||||
if torch.is_tensor(penalty_causal):
|
||||
penalty_causal = penalty_causal.item()
|
||||
self.log("penalty_causal", penalty_causal, on_step=False, on_epoch=True, prog_bar=True)
|
||||
if torch.is_tensor(penalty_ind):
|
||||
penalty_ind = penalty_ind.item()
|
||||
self.log("penalty_ind", penalty_ind, on_step=False, on_epoch=True, prog_bar=True)
|
||||
|
||||
acc = correct / total
|
||||
|
||||
metrics = {"train_acc": acc, "train_loss": loss}
|
||||
self.log_dict(metrics, on_step=False, on_epoch=True, prog_bar=True)
|
||||
|
||||
return loss
|
|
@ -0,0 +1,40 @@
|
|||
import torch
|
||||
from torch import nn
|
||||
from torch.nn import functional as F
|
||||
|
||||
from dowhy.causal_prediction.algorithms.base_algorithm import PredictionAlgorithm
|
||||
|
||||
|
||||
class ERM(PredictionAlgorithm):
|
||||
def __init__(self, model, optimizer="Adam", lr=1e-3, weight_decay=0.0, betas=(0.9, 0.999), momentum=0.9):
|
||||
super().__init__(model, optimizer, lr, weight_decay, betas, momentum)
|
||||
|
||||
"""Class for ERM Algorithm.
|
||||
|
||||
:param model: Networks used for training. `model` type expected is torch.nn.Sequential(featurizer, classifier) where featurizer and classifier are of type torch.nn.Module.
|
||||
:param optimizer: Optimization algorithm used for training. Currently supports "Adam" and "SGD".
|
||||
:param lr: learning rate for ERM
|
||||
:param weight_decay: Value of weight decay for optimizer
|
||||
:param betas: Adam configuration parameters (beta1, beta2), exponential decay rate for the first moment and second-moment estimates, respectively.
|
||||
:param momentum: Value of momentum for SGD optimzer
|
||||
:returns: an instance of PredictionAlgorithm class
|
||||
|
||||
"""
|
||||
|
||||
def training_step(self, train_batch, batch_idx):
|
||||
"""
|
||||
Override `training_step` from PredictionAlgorithm class for ERM-specific training loop.
|
||||
|
||||
"""
|
||||
|
||||
x = torch.cat([x for x, y, _, _ in train_batch])
|
||||
y = torch.cat([y for x, y, _, _ in train_batch])
|
||||
|
||||
out = self.model(x)
|
||||
loss = F.cross_entropy(out, y)
|
||||
acc = (torch.argmax(out, dim=1) == y).float().mean()
|
||||
|
||||
metrics = {"train_acc": acc, "train_loss": loss}
|
||||
self.log_dict(metrics, on_step=False, on_epoch=True, prog_bar=True)
|
||||
|
||||
return loss
|
|
@ -0,0 +1,49 @@
|
|||
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
||||
|
||||
"""
|
||||
The functions in this file are borrowed from DomainBed: https://github.com/facebookresearch/DomainBed
|
||||
@inproceedings{gulrajani2021in,
|
||||
title={In Search of Lost Domain Generalization},
|
||||
author={Ishaan Gulrajani and David Lopez-Paz},
|
||||
booktitle={International Conference on Learning Representations},
|
||||
year={2021},
|
||||
}
|
||||
"""
|
||||
|
||||
import torch
|
||||
|
||||
|
||||
def my_cdist(x1, x2):
|
||||
x1_norm = x1.pow(2).sum(dim=-1, keepdim=True)
|
||||
x2_norm = x2.pow(2).sum(dim=-1, keepdim=True)
|
||||
res = torch.addmm(x2_norm.transpose(-2, -1), x1, x2.transpose(-2, -1), alpha=-2).add_(x1_norm)
|
||||
return res.clamp_min_(1e-30)
|
||||
|
||||
|
||||
def gaussian_kernel(x, y, gamma):
|
||||
D = my_cdist(x, y)
|
||||
K = torch.zeros_like(D)
|
||||
|
||||
K.add_(torch.exp(D.mul(-gamma)))
|
||||
|
||||
return K
|
||||
|
||||
|
||||
def mmd_compute(x, y, kernel_type, gamma):
|
||||
if kernel_type == "gaussian":
|
||||
Kxx = gaussian_kernel(x, x, gamma).mean()
|
||||
Kyy = gaussian_kernel(y, y, gamma).mean()
|
||||
Kxy = gaussian_kernel(x, y, gamma).mean()
|
||||
return Kxx + Kyy - 2 * Kxy
|
||||
else:
|
||||
mean_x = x.mean(0, keepdim=True)
|
||||
mean_y = y.mean(0, keepdim=True)
|
||||
cent_x = x - mean_x
|
||||
cent_y = y - mean_y
|
||||
cova_x = (cent_x.t() @ cent_x) / (len(x) - 1)
|
||||
cova_y = (cent_y.t() @ cent_y) / (len(y) - 1)
|
||||
|
||||
mean_diff = (mean_x - mean_y).pow(2).mean()
|
||||
cova_diff = (cova_x - cova_y).pow(2).mean()
|
||||
|
||||
return mean_diff + cova_diff
|
|
@ -0,0 +1,68 @@
|
|||
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
||||
|
||||
import torch
|
||||
|
||||
|
||||
class _InfiniteSampler(torch.utils.data.Sampler):
|
||||
"""Wraps another Sampler to yield an infinite stream."""
|
||||
|
||||
def __init__(self, sampler):
|
||||
self.sampler = sampler
|
||||
|
||||
def __iter__(self):
|
||||
while True:
|
||||
for batch in self.sampler:
|
||||
yield batch
|
||||
|
||||
|
||||
class InfiniteDataLoader:
|
||||
def __init__(self, dataset, weights, batch_size, num_workers):
|
||||
super().__init__()
|
||||
|
||||
if weights is not None:
|
||||
sampler = torch.utils.data.WeightedRandomSampler(weights, replacement=True, num_samples=batch_size)
|
||||
else:
|
||||
sampler = torch.utils.data.RandomSampler(dataset, replacement=True)
|
||||
|
||||
if weights == None:
|
||||
weights = torch.ones(len(dataset))
|
||||
|
||||
batch_sampler = torch.utils.data.BatchSampler(sampler, batch_size=batch_size, drop_last=True)
|
||||
|
||||
self._infinite_iterator = iter(
|
||||
torch.utils.data.DataLoader(dataset, num_workers=num_workers, batch_sampler=_InfiniteSampler(batch_sampler))
|
||||
)
|
||||
|
||||
self._length = len(batch_sampler)
|
||||
|
||||
def __iter__(self):
|
||||
while True:
|
||||
yield next(self._infinite_iterator)
|
||||
|
||||
def __len__(self):
|
||||
return self._length
|
||||
|
||||
|
||||
class FastDataLoader:
|
||||
"""DataLoader wrapper with slightly improved speed by not respawning worker
|
||||
processes at every epoch."""
|
||||
|
||||
def __init__(self, dataset, batch_size, num_workers):
|
||||
super().__init__()
|
||||
|
||||
batch_sampler = torch.utils.data.BatchSampler(
|
||||
torch.utils.data.RandomSampler(dataset, replacement=False), batch_size=batch_size, drop_last=False
|
||||
)
|
||||
|
||||
self._infinite_iterator = iter(
|
||||
torch.utils.data.DataLoader(dataset, num_workers=num_workers, batch_sampler=_InfiniteSampler(batch_sampler))
|
||||
)
|
||||
|
||||
self._length = len(batch_sampler)
|
||||
|
||||
def __iter__(self):
|
||||
for _ in range(len(self)):
|
||||
yield next(self._infinite_iterator)
|
||||
|
||||
def __len__(self):
|
||||
return self._length
|
|
@ -0,0 +1,144 @@
|
|||
from dowhy.causal_prediction.dataloaders import misc
|
||||
from dowhy.causal_prediction.dataloaders.fast_data_loader import FastDataLoader, InfiniteDataLoader
|
||||
|
||||
|
||||
def get_train_loader(dataset, envs, batch_size, class_balanced=False):
|
||||
"""Return training dataloaders.
|
||||
|
||||
:param dataset: dataset class containing list of environments
|
||||
:param envs: list containing indices of training domains in the dataset
|
||||
:param batch_size: Value of batch size to be used for dataloaders
|
||||
:param class_balanced: Binary flag indicating whether balanced sampling is to be done between classes
|
||||
|
||||
:returns: list of dataloaders
|
||||
"""
|
||||
splits = []
|
||||
|
||||
for env_idx, env in enumerate(dataset):
|
||||
if env_idx in envs:
|
||||
if class_balanced:
|
||||
weights = misc.make_weights_for_balanced_classes(env)
|
||||
else:
|
||||
weights = None
|
||||
splits.append((env, weights))
|
||||
|
||||
train_loaders = [
|
||||
InfiniteDataLoader(dataset=env, weights=env_weights, batch_size=batch_size, num_workers=dataset.N_WORKERS)
|
||||
for env, env_weights in splits
|
||||
]
|
||||
|
||||
return train_loaders
|
||||
|
||||
|
||||
def get_eval_loader(dataset, envs, batch_size, class_balanced=False):
|
||||
"""Return evaluation dataloaders (test/validation).
|
||||
|
||||
:param dataset: dataset class containing list of environments
|
||||
:param envs: list containing indices of validation/test domains in the dataset
|
||||
:param batch_size: Value of batch size to be used for dataloaders
|
||||
:param class_balanced: Binary flag indicating whether balanced sampling is to be done between classes
|
||||
|
||||
:returns: list of dataloaders
|
||||
"""
|
||||
splits = []
|
||||
|
||||
for env_idx, env in enumerate(dataset):
|
||||
if env_idx in envs:
|
||||
if class_balanced:
|
||||
weights = misc.make_weights_for_balanced_classes(env)
|
||||
else:
|
||||
weights = None
|
||||
splits.append((env, weights))
|
||||
|
||||
eval_loaders = [
|
||||
FastDataLoader(dataset=env, batch_size=batch_size, num_workers=dataset.N_WORKERS) for env, _ in splits
|
||||
]
|
||||
|
||||
return eval_loaders
|
||||
|
||||
|
||||
def get_train_eval_loader(dataset, envs, batch_size, class_balanced, holdout_fraction, trial_seed):
|
||||
"""Return training and validation dataloaders.
|
||||
|
||||
:param dataset: dataset class containing list of environments
|
||||
:param envs: list containing indices of training domains in the dataset
|
||||
:param batch_size: Value of batch size to be used for dataloaders
|
||||
:param class_balanced: Binary flag indicating whether balanced sampling is to be done between classes
|
||||
:param holdout_fraction: fraction of training data used for creating validation domains
|
||||
:param trial_seed: seed used for generating validation split from training data
|
||||
|
||||
:returns: two lists of dataloaders for training (train_loaders) and validation (val_loaders) respectively
|
||||
"""
|
||||
train_splits, val_splits = [], []
|
||||
|
||||
for env_idx, env in enumerate(dataset):
|
||||
if env_idx in envs:
|
||||
val_, train_ = misc.split_dataset(
|
||||
env, int(len(env) * holdout_fraction), misc.seed_hash(trial_seed, env_idx)
|
||||
)
|
||||
|
||||
if class_balanced:
|
||||
train_weights = misc.make_weights_for_balanced_classes(train_)
|
||||
val_weights = misc.make_weights_for_balanced_classes(val_)
|
||||
else:
|
||||
train_weights, val_weights = None, None
|
||||
|
||||
train_splits.append((train_, train_weights))
|
||||
val_splits.append((val_, val_weights))
|
||||
|
||||
train_loaders = [
|
||||
InfiniteDataLoader(dataset=env, weights=env_weights, batch_size=batch_size, num_workers=dataset.N_WORKERS)
|
||||
for env, env_weights in train_splits
|
||||
]
|
||||
|
||||
eval_loaders = [
|
||||
FastDataLoader(dataset=env, batch_size=batch_size, num_workers=dataset.N_WORKERS) for env, _ in val_splits
|
||||
]
|
||||
|
||||
return train_loaders, eval_loaders
|
||||
|
||||
|
||||
def get_loaders(
|
||||
dataset,
|
||||
train_envs,
|
||||
batch_size,
|
||||
val_envs=None,
|
||||
test_envs=None,
|
||||
class_balanced=False,
|
||||
holdout_fraction=0.2,
|
||||
trial_seed=0,
|
||||
):
|
||||
|
||||
"""Return training, validation, and test dataloaders.
|
||||
|
||||
:param dataset: dataset class containing list of environments
|
||||
:param train_envs: list containing indices of training domains in the dataset
|
||||
:param batch_size: Value of batch size to be used for dataloaders
|
||||
:param val_envs: list containing indices of validation domains in the dataset. If None, fraction of training data (`holdout_fraction`) is used to create validation set.
|
||||
:param test_envs: list containing indices of test domains in the dataset
|
||||
:param class_balanced: Binary flag indicating whether balanced sampling is to be done between classes
|
||||
:param holdout_fraction: fraction of training data used for creating validation domains. This is used when `val_envs` is None.
|
||||
:param trial_seed: seed used for generating validation split from training data. This is used when `val_envs` is None.
|
||||
|
||||
:returns: dictionary of list of dataloaders in the format
|
||||
{'train_loaders': [train_dataloader_1, train_dataloader_2, ....],
|
||||
'val_loaders': [val_dataloader_1, val_dataloader_2, ....],
|
||||
'test_loaders': [test_dataloader_1, test_dataloader_2, ....]
|
||||
}
|
||||
"""
|
||||
|
||||
loaders = {}
|
||||
|
||||
if val_envs: # use validation environment to initialize val_loaders
|
||||
loaders["train_loaders"] = get_train_loader(dataset, train_envs, batch_size, class_balanced)
|
||||
loaders["val_loaders"] = get_eval_loader(dataset, val_envs, batch_size, class_balanced)
|
||||
|
||||
else: # use subset of training data to initialize val_loaders
|
||||
loaders["train_loaders"], loaders["val_loaders"] = get_train_eval_loader(
|
||||
dataset, train_envs, batch_size, class_balanced, holdout_fraction, trial_seed
|
||||
)
|
||||
|
||||
if test_envs:
|
||||
loaders["test_loaders"] = get_eval_loader(dataset, test_envs, batch_size, class_balanced)
|
||||
|
||||
return loaders
|
|
@ -0,0 +1,68 @@
|
|||
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
||||
|
||||
"""misc helper functions
|
||||
"""
|
||||
|
||||
import hashlib
|
||||
from collections import Counter, OrderedDict
|
||||
|
||||
import numpy as np
|
||||
import torch
|
||||
|
||||
|
||||
def make_weights_for_balanced_classes(dataset):
|
||||
counts = Counter()
|
||||
classes = []
|
||||
for _, y in dataset:
|
||||
y = int(y)
|
||||
counts[y] += 1
|
||||
classes.append(y)
|
||||
|
||||
n_classes = len(counts)
|
||||
|
||||
weight_per_class = {}
|
||||
for y in counts:
|
||||
weight_per_class[y] = 1 / (counts[y] * n_classes)
|
||||
|
||||
weights = torch.zeros(len(dataset))
|
||||
for i, y in enumerate(classes):
|
||||
weights[i] = weight_per_class[int(y)]
|
||||
|
||||
return weights
|
||||
|
||||
|
||||
class _SplitDataset(torch.utils.data.Dataset):
|
||||
"""Used by split_dataset"""
|
||||
|
||||
def __init__(self, underlying_dataset, keys):
|
||||
super(_SplitDataset, self).__init__()
|
||||
self.underlying_dataset = underlying_dataset
|
||||
self.keys = keys
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self.underlying_dataset[self.keys[key]]
|
||||
|
||||
def __len__(self):
|
||||
return len(self.keys)
|
||||
|
||||
|
||||
def split_dataset(dataset, n, seed=0):
|
||||
"""
|
||||
Return a pair of datasets corresponding to a random split of the given
|
||||
dataset, with n datapoints in the first dataset and the rest in the last,
|
||||
using the given random seed
|
||||
"""
|
||||
assert n <= len(dataset)
|
||||
keys = list(range(len(dataset)))
|
||||
np.random.RandomState(seed).shuffle(keys)
|
||||
keys_1 = keys[:n]
|
||||
keys_2 = keys[n:]
|
||||
return _SplitDataset(dataset, keys_1), _SplitDataset(dataset, keys_2)
|
||||
|
||||
|
||||
def seed_hash(*args):
|
||||
"""
|
||||
Derive an integer hash from all args, for use as a random seed.
|
||||
"""
|
||||
args_str = str(args)
|
||||
return int(hashlib.md5(args_str.encode("utf-8")).hexdigest(), 16) % (2**31)
|
|
@ -0,0 +1,25 @@
|
|||
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
||||
|
||||
"""
|
||||
`MultipleDomainDataset` class in this file is borrowed from DomainBed: https://github.com/facebookresearch/DomainBed
|
||||
@inproceedings{gulrajani2021in,
|
||||
title={In Search of Lost Domain Generalization},
|
||||
author={Ishaan Gulrajani and David Lopez-Paz},
|
||||
booktitle={International Conference on Learning Representations},
|
||||
year={2021},
|
||||
}
|
||||
"""
|
||||
|
||||
|
||||
class MultipleDomainDataset:
|
||||
N_STEPS = 5001 # Default, subclasses may override
|
||||
CHECKPOINT_FREQ = 100 # Default, subclasses may override
|
||||
N_WORKERS = 8 # Default, subclasses may override
|
||||
ENVIRONMENTS = None # Subclasses should override
|
||||
INPUT_SHAPE = None # Subclasses should override
|
||||
|
||||
def __getitem__(self, index):
|
||||
return self.datasets[index]
|
||||
|
||||
def __len__(self):
|
||||
return len(self.datasets)
|
|
@ -0,0 +1,328 @@
|
|||
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
||||
|
||||
import torch
|
||||
from PIL import Image
|
||||
from torch.utils.data import Subset, TensorDataset
|
||||
from torchvision import transforms
|
||||
from torchvision.datasets import MNIST, ImageFolder
|
||||
from torchvision.transforms.functional import rotate
|
||||
|
||||
from dowhy.causal_prediction.datasets.base_dataset import MultipleDomainDataset
|
||||
|
||||
""" MNIST Causal, Independent and Causal+Independent datasets
|
||||
|
||||
The class structure for datasets is adapted from OoD-Bench:
|
||||
@inproceedings{ye2022ood,
|
||||
title={OoD-Bench: Quantifying and Understanding Two Dimensions of Out-of-Distribution Generalization},
|
||||
author={Ye, Nanyang and Li, Kaican and Bai, Haoyue and Yu, Runpeng and Hong, Lanqing and Zhou, Fengwei and Li, Zhenguo and Zhu, Jun},
|
||||
booktitle={CVPR},
|
||||
year={2022}
|
||||
}
|
||||
|
||||
* datasets initialized from torchvision.datasets.MNIST
|
||||
* We assume causal attribute (Acause) = color, independent attribute (Aind) = rotation
|
||||
* Environments/domains stored in list self.datasets (required for all datasets)
|
||||
* Default env structure is TensorDataset(x, y, Acause, Aind)
|
||||
* We do not need Aind (rotation) explicitly here since E=Aind
|
||||
* In Aind case, we return (x, y, _, _)
|
||||
* '_' is replaced by any dummy vector (this is because the training loop assumes 4 inputs in TensorDataset)
|
||||
"""
|
||||
|
||||
# single-attribute Causal
|
||||
class MNISTCausalAttribute(MultipleDomainDataset):
|
||||
N_STEPS = 5001
|
||||
CHECKPOINT_FREQ = 500
|
||||
ENVIRONMENTS = ["+90%", "+80%", "-90%", "-90%"]
|
||||
INPUT_SHAPE = (2, 14, 14)
|
||||
|
||||
def __init__(self, root, download=True):
|
||||
"""Class for MNISTCausalAttribute dataset.
|
||||
|
||||
:param root: The directory where data can be found (or should be downloaded to, if it does not exist).
|
||||
:param download: Binary flag indicating whether data should be downloaded
|
||||
:returns: an instance of MultipleDomainDataset class
|
||||
|
||||
"""
|
||||
|
||||
super().__init__()
|
||||
if root is None:
|
||||
raise ValueError("Data directory not specified!")
|
||||
|
||||
original_dataset_tr = MNIST(root, train=True, download=download)
|
||||
|
||||
original_images = original_dataset_tr.data
|
||||
original_labels = original_dataset_tr.targets
|
||||
|
||||
shuffle = torch.randperm(len(original_images))
|
||||
original_images = original_images[shuffle]
|
||||
original_labels = original_labels[shuffle]
|
||||
|
||||
self.datasets = []
|
||||
|
||||
environments = (0.1, 0.2, 0.9)
|
||||
for i, env in enumerate(environments[:-1]):
|
||||
images = original_images[:50000][i::2]
|
||||
labels = original_labels[:50000][i::2]
|
||||
self.datasets.append(self.color_dataset(images, labels, env))
|
||||
images = original_images[50000:]
|
||||
labels = original_labels[50000:]
|
||||
self.datasets.append(self.color_dataset(images, labels, environments[-1]))
|
||||
|
||||
# test environment
|
||||
original_dataset_te = MNIST(root, train=False, download=download)
|
||||
original_images = original_dataset_te.data
|
||||
original_labels = original_dataset_te.targets
|
||||
self.datasets.append(self.color_dataset(original_images, original_labels, environments[-1]))
|
||||
|
||||
self.input_shape = self.INPUT_SHAPE
|
||||
self.num_classes = 2
|
||||
|
||||
def color_dataset(self, images, labels, environment):
|
||||
"""
|
||||
Transform MNIST dataset to introduce correlation between attribute (color) and label.
|
||||
There is a direct-causal relationship between label Y and color.
|
||||
|
||||
:param images: original MNIST images
|
||||
:param labels: original MNIST labels
|
||||
:param environment: Value of correlation between color and label
|
||||
:returns: TensorDataset containing transformed images, labels, and attributes (color)
|
||||
"""
|
||||
|
||||
# Subsample 2x for computational convenience
|
||||
images = images.reshape((-1, 28, 28))[:, ::2, ::2]
|
||||
# Assign a binary label based on the digit
|
||||
labels = (labels < 5).float()
|
||||
# Flip label with probability 0.25
|
||||
labels = self.torch_xor_(labels, self.torch_bernoulli_(0.25, len(labels)))
|
||||
|
||||
# Assign a color based on the label; flip the color with probability environment
|
||||
colors = self.torch_xor_(labels, self.torch_bernoulli_(environment, len(labels)))
|
||||
images = torch.stack([images, images], dim=1)
|
||||
# Apply the color to the image by zeroing out the other color channel
|
||||
images[torch.tensor(range(len(images))), (1 - colors).long(), :, :] *= 0
|
||||
|
||||
x = images.float().div_(255.0)
|
||||
y = labels.view(-1).long()
|
||||
|
||||
return TensorDataset(x, y, colors, colors)
|
||||
|
||||
def torch_bernoulli_(self, p, size):
|
||||
return (torch.rand(size) < p).float()
|
||||
|
||||
def torch_xor_(self, a, b):
|
||||
return (a - b).abs()
|
||||
|
||||
|
||||
# single-attribute Independent
|
||||
class MNISTIndAttribute(MultipleDomainDataset):
|
||||
N_STEPS = 5001
|
||||
CHECKPOINT_FREQ = 500
|
||||
ENVIRONMENTS = ["15", "60", "90", "90"]
|
||||
INPUT_SHAPE = (1, 14, 14)
|
||||
|
||||
def __init__(self, root, download=True):
|
||||
"""Class for MNISTIndAttribute dataset.
|
||||
|
||||
:param root: The directory where data can be found (or should be downloaded to, if it does not exist).
|
||||
:param download: Binary flag indicating whether data should be downloaded
|
||||
:returns: an instance of MultipleDomainDataset class
|
||||
|
||||
"""
|
||||
|
||||
super().__init__()
|
||||
if root is None:
|
||||
raise ValueError("Data directory not specified!")
|
||||
|
||||
original_dataset_tr = MNIST(root, train=True, download=download)
|
||||
|
||||
original_images = original_dataset_tr.data
|
||||
original_labels = original_dataset_tr.targets
|
||||
|
||||
shuffle = torch.randperm(len(original_images))
|
||||
original_images = original_images[shuffle]
|
||||
original_labels = original_labels[shuffle]
|
||||
|
||||
self.datasets = []
|
||||
|
||||
angles = ["15", "60", "90"]
|
||||
for i, env in enumerate(angles[:-1]):
|
||||
images = original_images[:50000][i::2]
|
||||
labels = original_labels[:50000][i::2]
|
||||
self.datasets.append(self.rotate_dataset(images, labels, angles[i]))
|
||||
images = original_images[50000:]
|
||||
labels = original_labels[50000:]
|
||||
self.datasets.append(self.rotate_dataset(images, labels, angles[-1]))
|
||||
|
||||
# test environment
|
||||
original_dataset_te = MNIST(root, train=False, download=download)
|
||||
original_images = original_dataset_te.data
|
||||
original_labels = original_dataset_te.targets
|
||||
self.datasets.append(self.rotate_dataset(original_images, original_labels, angles[-1]))
|
||||
|
||||
self.input_shape = self.INPUT_SHAPE
|
||||
self.num_classes = 2
|
||||
|
||||
def rotate_dataset(self, images, labels, angle):
|
||||
"""
|
||||
Transform MNIST dataset by applying rotation to images.
|
||||
Attribute (rotation angle) is independent of label Y.
|
||||
|
||||
:param images: original MNIST images
|
||||
:param labels: original MNIST labels
|
||||
:param angle: Value of rotation angle used for transforming the image
|
||||
:returns: TensorDataset containing transformed images and labels
|
||||
"""
|
||||
rotation = transforms.Compose(
|
||||
[
|
||||
transforms.ToPILImage(),
|
||||
transforms.Lambda(lambda x: rotate(x, int(angle), fill=(0,), resample=Image.BICUBIC)),
|
||||
transforms.ToTensor(),
|
||||
]
|
||||
)
|
||||
|
||||
# Subsample 2x for computational convenience
|
||||
images = images.reshape((-1, 28, 28))[:, ::2, ::2]
|
||||
# Assign a binary label based on the digit
|
||||
labels = (labels < 5).float()
|
||||
# Flip label with probability 0.25
|
||||
labels = self.torch_xor_(labels, self.torch_bernoulli_(0.25, len(labels)))
|
||||
|
||||
x = torch.zeros(len(images), 1, 14, 14)
|
||||
for i in range(len(images)):
|
||||
x[i] = rotation(images[i].float().div_(255.0))
|
||||
|
||||
y = labels.view(-1).long()
|
||||
|
||||
return TensorDataset(x, y, y, y)
|
||||
|
||||
def torch_bernoulli_(self, p, size):
|
||||
return (torch.rand(size) < p).float()
|
||||
|
||||
def torch_xor_(self, a, b):
|
||||
return (a - b).abs()
|
||||
|
||||
|
||||
# multi-attribute Causal + Independent
|
||||
class MNISTCausalIndAttribute(MultipleDomainDataset):
|
||||
N_STEPS = 5001
|
||||
CHECKPOINT_FREQ = 500
|
||||
ENVIRONMENTS = ["+90%, 15", "+80%, 16", "-90%, 90", "-90%, 90"]
|
||||
INPUT_SHAPE = (2, 14, 14)
|
||||
|
||||
def __init__(self, root, download=True):
|
||||
"""Class for MNISTIndAttribute dataset.
|
||||
|
||||
:param root: The directory where data can be found (or should be downloaded to, if it does not exist).
|
||||
:param download: Binary flag indicating whether data should be downloaded
|
||||
:returns: an instance of MultipleDomainDataset class
|
||||
|
||||
"""
|
||||
|
||||
super().__init__()
|
||||
if root is None:
|
||||
raise ValueError("Data directory not specified!")
|
||||
|
||||
original_dataset_tr = MNIST(root, train=True, download=download)
|
||||
|
||||
original_images = original_dataset_tr.data
|
||||
original_labels = original_dataset_tr.targets
|
||||
|
||||
shuffle = torch.randperm(len(original_images))
|
||||
original_images = original_images[shuffle]
|
||||
original_labels = original_labels[shuffle]
|
||||
|
||||
self.datasets = []
|
||||
|
||||
environments = (0.1, 0.2, 0.9)
|
||||
angles = ["15", "60", "90"]
|
||||
for i, env in enumerate(environments[:-1]):
|
||||
images = original_images[:50000][i::2]
|
||||
labels = original_labels[:50000][i::2]
|
||||
self.datasets.append(self.color_rot_dataset(images, labels, env, angles[i]))
|
||||
images = original_images[50000:]
|
||||
labels = original_labels[50000:]
|
||||
self.datasets.append(self.color_rot_dataset(images, labels, environments[-1], angles[-1]))
|
||||
|
||||
# test environment
|
||||
original_dataset_te = MNIST(root, train=False, download=download)
|
||||
original_images = original_dataset_te.data
|
||||
original_labels = original_dataset_te.targets
|
||||
self.datasets.append(self.color_rot_dataset(original_images, original_labels, environments[-1], angles[-1]))
|
||||
|
||||
self.input_shape = self.INPUT_SHAPE
|
||||
self.num_classes = 2
|
||||
|
||||
def color_rot_dataset(self, images, labels, environment, angle):
|
||||
"""
|
||||
Transform MNIST dataset by (i) applying rotation to images, then (ii) introducing correlation between attribute (color) and label.
|
||||
Attribute (rotation angle) is independent of label Y; there is a direct-causal relationship between label Y and color.
|
||||
|
||||
:param images: original MNIST images
|
||||
:param labels: original MNIST labels
|
||||
:param environment: Value of correlation between color and label
|
||||
:param angle: Value of rotation angle used for transforming the image
|
||||
:returns: TensorDataset containing transformed images, labels, and attributes (color)
|
||||
"""
|
||||
# Subsample 2x for computational convenience
|
||||
images = images.reshape((-1, 28, 28))[:, ::2, ::2]
|
||||
# rotate the image by angle in parameter
|
||||
images = self.rotate_dataset(images, angle)
|
||||
|
||||
images, labels, colors = self.color_dataset(images, labels, environment)
|
||||
|
||||
x = images # .float().div_(255.0)
|
||||
y = labels.view(-1).long()
|
||||
|
||||
return TensorDataset(x, y, colors, colors)
|
||||
|
||||
def color_dataset(self, images, labels, environment):
|
||||
"""
|
||||
Transform MNIST dataset to introduce correlation between attribute (color) and label.
|
||||
There is a direct-causal relationship between label Y and color.
|
||||
|
||||
:param images: rotated MNIST images
|
||||
:param labels: original MNIST labels
|
||||
:param environment: Value of correlation between color and label
|
||||
:returns: transformed images, labels, and attributes (color)
|
||||
"""
|
||||
|
||||
# Assign a binary label based on the digit
|
||||
labels = (labels < 5).float()
|
||||
# Flip label with probability 0.25
|
||||
labels = self.torch_xor_(labels, self.torch_bernoulli_(0.25, len(labels)))
|
||||
|
||||
# Assign a color based on the label; flip the color with probability environment
|
||||
colors = self.torch_xor_(labels, self.torch_bernoulli_(environment, len(labels)))
|
||||
images = torch.stack([images, images], dim=1)
|
||||
# Apply the color to the image by zeroing out the other color channel
|
||||
images[torch.tensor(range(len(images))), (1 - colors).long(), :, :] *= 0
|
||||
|
||||
return images, labels, colors
|
||||
|
||||
def rotate_dataset(self, images, angle):
|
||||
"""
|
||||
Transform MNIST dataset by applying rotation to images.
|
||||
Attribute (rotation angle) is independent of label Y.
|
||||
|
||||
:param images: original MNIST images
|
||||
:param angle: Value of rotation angle used for transforming the image
|
||||
:returns: transformed images
|
||||
"""
|
||||
rotation = transforms.Compose(
|
||||
[
|
||||
transforms.ToPILImage(),
|
||||
transforms.Lambda(lambda x: transforms.functional.rotate(x, int(angle), fill=(0,))),
|
||||
transforms.ToTensor(),
|
||||
]
|
||||
)
|
||||
|
||||
x = torch.zeros(len(images), 14, 14)
|
||||
for i in range(len(images)):
|
||||
x[i] = rotation(images[i].float().div_(255.0))
|
||||
return x
|
||||
|
||||
def torch_bernoulli_(self, p, size):
|
||||
return (torch.rand(size) < p).float()
|
||||
|
||||
def torch_xor_(self, a, b):
|
||||
return (a - b).abs()
|
|
@ -0,0 +1,197 @@
|
|||
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
||||
|
||||
"""
|
||||
The MNIST_MLP architecture is borrowed from OoD-Bench:
|
||||
@inproceedings{ye2022ood,
|
||||
title={OoD-Bench: Quantifying and Understanding Two Dimensions of Out-of-Distribution Generalization},
|
||||
author={Ye, Nanyang and Li, Kaican and Bai, Haoyue and Yu, Runpeng and Hong, Lanqing and Zhou, Fengwei and Li, Zhenguo and Zhu, Jun},
|
||||
booktitle={CVPR},
|
||||
year={2022}
|
||||
}
|
||||
"""
|
||||
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
import torch.nn.functional as F
|
||||
import torchvision.models
|
||||
|
||||
|
||||
class Identity(nn.Module):
|
||||
"""An identity layer"""
|
||||
|
||||
def __init__(self):
|
||||
super(Identity, self).__init__()
|
||||
|
||||
def forward(self, x):
|
||||
return x
|
||||
|
||||
|
||||
class MLP(nn.Module):
|
||||
"""Just an MLP"""
|
||||
|
||||
def __init__(self, n_inputs, n_outputs, mlp_width, mlp_depth, mlp_dropout):
|
||||
super(MLP, self).__init__()
|
||||
self.input = nn.Linear(n_inputs, mlp_width)
|
||||
self.dropout = nn.Dropout(mlp_dropout)
|
||||
self.hiddens = nn.ModuleList([nn.Linear(mlp_width, mlp_width) for _ in range(mlp_depth - 2)])
|
||||
self.output = nn.Linear(mlp_width, n_outputs)
|
||||
self.n_outputs = n_outputs
|
||||
|
||||
def forward(self, x):
|
||||
x = self.input(x)
|
||||
x = self.dropout(x)
|
||||
x = F.relu(x)
|
||||
for hidden in self.hiddens:
|
||||
x = hidden(x)
|
||||
x = self.dropout(x)
|
||||
x = F.relu(x)
|
||||
x = self.output(x)
|
||||
return x
|
||||
|
||||
|
||||
class MNIST_MLP(nn.Module):
|
||||
def __init__(self, input_shape):
|
||||
super(MNIST_MLP, self).__init__()
|
||||
self.hdim = hdim = 390
|
||||
self.encoder = nn.Sequential(
|
||||
nn.Linear(input_shape[0] * input_shape[1] * input_shape[2], hdim),
|
||||
nn.ReLU(True),
|
||||
nn.Linear(hdim, hdim),
|
||||
nn.ReLU(True),
|
||||
)
|
||||
self.n_outputs = hdim
|
||||
|
||||
for m in self.encoder:
|
||||
if isinstance(m, nn.Linear):
|
||||
gain = nn.init.calculate_gain("relu")
|
||||
nn.init.xavier_uniform_(m.weight, gain=gain)
|
||||
nn.init.zeros_(m.bias)
|
||||
|
||||
def forward(self, x):
|
||||
x = x.view(x.size(0), -1)
|
||||
return self.encoder(x)
|
||||
|
||||
|
||||
class ResNet(torch.nn.Module):
|
||||
"""ResNet with the softmax chopped off and the batchnorm frozen"""
|
||||
|
||||
def __init__(self, input_shape, resnet18=True, resnet_dropout=0.0):
|
||||
super(ResNet, self).__init__()
|
||||
if resnet18:
|
||||
self.network = torchvision.models.resnet18(pretrained=True)
|
||||
self.n_outputs = 512
|
||||
else:
|
||||
self.network = torchvision.models.resnet50(pretrained=True)
|
||||
self.n_outputs = 2048
|
||||
|
||||
# adapt number of channels
|
||||
nc = input_shape[0]
|
||||
if nc != 3:
|
||||
tmp = self.network.conv1.weight.data.clone()
|
||||
|
||||
self.network.conv1 = nn.Conv2d(nc, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
|
||||
|
||||
for i in range(nc):
|
||||
self.network.conv1.weight.data[:, i, :, :] = tmp[:, i % 3, :, :]
|
||||
|
||||
# save memory
|
||||
del self.network.fc
|
||||
self.network.fc = Identity()
|
||||
|
||||
self.freeze_bn()
|
||||
self.dropout = nn.Dropout(resnet_dropout)
|
||||
|
||||
def forward(self, x):
|
||||
"""Encode x into a feature vector of size n_outputs."""
|
||||
return self.dropout(self.network(x))
|
||||
|
||||
def train(self, mode=True):
|
||||
"""
|
||||
Override the default train() to freeze the BN parameters
|
||||
"""
|
||||
super().train(mode)
|
||||
self.freeze_bn()
|
||||
|
||||
def freeze_bn(self):
|
||||
for m in self.network.modules():
|
||||
if isinstance(m, nn.BatchNorm2d):
|
||||
m.eval()
|
||||
|
||||
|
||||
class MNIST_CNN(nn.Module):
|
||||
"""
|
||||
Hand-tuned architecture for MNIST.
|
||||
Weirdness I've noticed so far with this architecture:
|
||||
- adding a linear layer after the mean-pool in features hurts
|
||||
RotatedMNIST-100 generalization severely.
|
||||
"""
|
||||
|
||||
n_outputs = 128
|
||||
|
||||
def __init__(self, input_shape):
|
||||
super(MNIST_CNN, self).__init__()
|
||||
self.conv1 = nn.Conv2d(input_shape[0], 64, 3, 1, padding=1)
|
||||
self.conv2 = nn.Conv2d(64, 128, 3, stride=2, padding=1)
|
||||
self.conv3 = nn.Conv2d(128, 128, 3, 1, padding=1)
|
||||
self.conv4 = nn.Conv2d(128, 128, 3, 1, padding=1)
|
||||
|
||||
self.bn0 = nn.GroupNorm(8, 64)
|
||||
self.bn1 = nn.GroupNorm(8, 128)
|
||||
self.bn2 = nn.GroupNorm(8, 128)
|
||||
self.bn3 = nn.GroupNorm(8, 128)
|
||||
|
||||
self.avgpool = nn.AdaptiveAvgPool2d((1, 1))
|
||||
|
||||
def forward(self, x):
|
||||
x = self.conv1(x)
|
||||
x = F.relu(x)
|
||||
x = self.bn0(x)
|
||||
|
||||
x = self.conv2(x)
|
||||
x = F.relu(x)
|
||||
x = self.bn1(x)
|
||||
|
||||
x = self.conv3(x)
|
||||
x = F.relu(x)
|
||||
x = self.bn2(x)
|
||||
|
||||
x = self.conv4(x)
|
||||
x = F.relu(x)
|
||||
x = self.bn3(x)
|
||||
|
||||
x = self.avgpool(x)
|
||||
x = x.view(len(x), -1)
|
||||
return x
|
||||
|
||||
|
||||
class ContextNet(nn.Module):
|
||||
def __init__(self, input_shape):
|
||||
super(ContextNet, self).__init__()
|
||||
|
||||
# Keep same dimensions
|
||||
padding = (5 - 1) // 2
|
||||
self.context_net = nn.Sequential(
|
||||
nn.Conv2d(input_shape[0], 64, 5, padding=padding),
|
||||
nn.BatchNorm2d(64),
|
||||
nn.ReLU(),
|
||||
nn.Conv2d(64, 64, 5, padding=padding),
|
||||
nn.BatchNorm2d(64),
|
||||
nn.ReLU(),
|
||||
nn.Conv2d(64, 1, 5, padding=padding),
|
||||
)
|
||||
|
||||
def forward(self, x):
|
||||
return self.context_net(x)
|
||||
|
||||
|
||||
def Classifier(in_features, out_features, is_nonlinear=False):
|
||||
if is_nonlinear:
|
||||
return torch.nn.Sequential(
|
||||
torch.nn.Linear(in_features, in_features // 2),
|
||||
torch.nn.ReLU(),
|
||||
torch.nn.Linear(in_features // 2, in_features // 4),
|
||||
torch.nn.ReLU(),
|
||||
torch.nn.Linear(in_features // 4, out_features),
|
||||
)
|
||||
else:
|
||||
return torch.nn.Linear(in_features, out_features)
|
|
@ -12,6 +12,130 @@ files = [
|
|||
{file = "absl_py-1.3.0-py3-none-any.whl", hash = "sha256:34995df9bd7a09b3b8749e230408f5a2a2dd7a68a0d33c12a3d0cb15a041a507"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aiohttp"
|
||||
version = "3.8.3"
|
||||
description = "Async http client/server framework (asyncio)"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ba71c9b4dcbb16212f334126cc3d8beb6af377f6703d9dc2d9fb3874fd667ee9"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d24b8bb40d5c61ef2d9b6a8f4528c2f17f1c5d2d31fed62ec860f6006142e83e"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f88df3a83cf9df566f171adba39d5bd52814ac0b94778d2448652fc77f9eb491"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97decbb3372d4b69e4d4c8117f44632551c692bb1361b356a02b97b69e18a62"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:309aa21c1d54b8ef0723181d430347d7452daaff93e8e2363db8e75c72c2fb2d"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad5383a67514e8e76906a06741febd9126fc7c7ff0f599d6fcce3e82b80d026f"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20acae4f268317bb975671e375493dbdbc67cddb5f6c71eebdb85b34444ac46b"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05a3c31c6d7cd08c149e50dc7aa2568317f5844acd745621983380597f027a18"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d6f76310355e9fae637c3162936e9504b4767d5c52ca268331e2756e54fd4ca5"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:256deb4b29fe5e47893fa32e1de2d73c3afe7407738bd3c63829874661d4822d"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5c59fcd80b9049b49acd29bd3598cada4afc8d8d69bd4160cd613246912535d7"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:059a91e88f2c00fe40aed9031b3606c3f311414f86a90d696dd982e7aec48142"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2feebbb6074cdbd1ac276dbd737b40e890a1361b3cc30b74ac2f5e24aab41f7b"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-win32.whl", hash = "sha256:5bf651afd22d5f0c4be16cf39d0482ea494f5c88f03e75e5fef3a85177fecdeb"},
|
||||
{file = "aiohttp-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:653acc3880459f82a65e27bd6526e47ddf19e643457d36a2250b85b41a564715"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:86fc24e58ecb32aee09f864cb11bb91bc4c1086615001647dbfc4dc8c32f4008"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75e14eac916f024305db517e00a9252714fce0abcb10ad327fb6dcdc0d060f1d"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d1fde0f44029e02d02d3993ad55ce93ead9bb9b15c6b7ccd580f90bd7e3de476"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab94426ddb1ecc6a0b601d832d5d9d421820989b8caa929114811369673235c"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:89d2e02167fa95172c017732ed7725bc8523c598757f08d13c5acca308e1a061"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:02f9a2c72fc95d59b881cf38a4b2be9381b9527f9d328771e90f72ac76f31ad8"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7149272fb5834fc186328e2c1fa01dda3e1fa940ce18fded6d412e8f2cf76d"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:512bd5ab136b8dc0ffe3fdf2dfb0c4b4f49c8577f6cae55dca862cd37a4564e2"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7018ecc5fe97027214556afbc7c502fbd718d0740e87eb1217b17efd05b3d276"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:88c70ed9da9963d5496d38320160e8eb7e5f1886f9290475a881db12f351ab5d"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:da22885266bbfb3f78218dc40205fed2671909fbd0720aedba39b4515c038091"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:e65bc19919c910127c06759a63747ebe14f386cda573d95bcc62b427ca1afc73"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:08c78317e950e0762c2983f4dd58dc5e6c9ff75c8a0efeae299d363d439c8e34"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-win32.whl", hash = "sha256:45d88b016c849d74ebc6f2b6e8bc17cabf26e7e40c0661ddd8fae4c00f015697"},
|
||||
{file = "aiohttp-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:96372fc29471646b9b106ee918c8eeb4cca423fcbf9a34daa1b93767a88a2290"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c971bf3786b5fad82ce5ad570dc6ee420f5b12527157929e830f51c55dc8af77"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff25f48fc8e623d95eca0670b8cc1469a83783c924a602e0fbd47363bb54aaca"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e381581b37db1db7597b62a2e6b8b57c3deec95d93b6d6407c5b61ddc98aca6d"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db19d60d846283ee275d0416e2a23493f4e6b6028825b51290ac05afc87a6f97"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25892c92bee6d9449ffac82c2fe257f3a6f297792cdb18ad784737d61e7a9a85"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:398701865e7a9565d49189f6c90868efaca21be65c725fc87fc305906be915da"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4a4fbc769ea9b6bd97f4ad0b430a6807f92f0e5eb020f1e42ece59f3ecfc4585"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:b29bfd650ed8e148f9c515474a6ef0ba1090b7a8faeee26b74a8ff3b33617502"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:1e56b9cafcd6531bab5d9b2e890bb4937f4165109fe98e2b98ef0dcfcb06ee9d"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ec40170327d4a404b0d91855d41bfe1fe4b699222b2b93e3d833a27330a87a6d"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2df5f139233060578d8c2c975128fb231a89ca0a462b35d4b5fcf7c501ebdbe1"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-win32.whl", hash = "sha256:f973157ffeab5459eefe7b97a804987876dd0a55570b8fa56b4e1954bf11329b"},
|
||||
{file = "aiohttp-3.8.3-cp36-cp36m-win_amd64.whl", hash = "sha256:437399385f2abcd634865705bdc180c8314124b98299d54fe1d4c8990f2f9494"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:09e28f572b21642128ef31f4e8372adb6888846f32fecb288c8b0457597ba61a"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f3553510abdbec67c043ca85727396ceed1272eef029b050677046d3387be8d"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e168a7560b7c61342ae0412997b069753f27ac4862ec7867eff74f0fe4ea2ad9"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db4c979b0b3e0fa7e9e69ecd11b2b3174c6963cebadeecfb7ad24532ffcdd11a"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e164e0a98e92d06da343d17d4e9c4da4654f4a4588a20d6c73548a29f176abe2"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8a78079d9a39ca9ca99a8b0ac2fdc0c4d25fc80c8a8a82e5c8211509c523363"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:21b30885a63c3f4ff5b77a5d6caf008b037cb521a5f33eab445dc566f6d092cc"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4b0f30372cef3fdc262f33d06e7b411cd59058ce9174ef159ad938c4a34a89da"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:8135fa153a20d82ffb64f70a1b5c2738684afa197839b34cc3e3c72fa88d302c"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ad61a9639792fd790523ba072c0555cd6be5a0baf03a49a5dd8cfcf20d56df48"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:978b046ca728073070e9abc074b6299ebf3501e8dee5e26efacb13cec2b2dea0"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-win32.whl", hash = "sha256:0d2c6d8c6872df4a6ec37d2ede71eff62395b9e337b4e18efd2177de883a5033"},
|
||||
{file = "aiohttp-3.8.3-cp37-cp37m-win_amd64.whl", hash = "sha256:21d69797eb951f155026651f7e9362877334508d39c2fc37bd04ff55b2007091"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ca9af5f8f5812d475c5259393f52d712f6d5f0d7fdad9acdb1107dd9e3cb7eb"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d90043c1882067f1bd26196d5d2db9aa6d268def3293ed5fb317e13c9413ea4"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d737fc67b9a970f3234754974531dc9afeea11c70791dcb7db53b0cf81b79784"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf909ea0a3fc9596e40d55d8000702a85e27fd578ff41a5500f68f20fd32e6c"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5835f258ca9f7c455493a57ee707b76d2d9634d84d5d7f62e77be984ea80b849"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da37dcfbf4b7f45d80ee386a5f81122501ec75672f475da34784196690762f4b"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f44875f2804bc0511a69ce44a9595d5944837a62caecc8490bbdb0e18b1342"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:527b3b87b24844ea7865284aabfab08eb0faf599b385b03c2aa91fc6edd6e4b6"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d5ba88df9aa5e2f806650fcbeedbe4f6e8736e92fc0e73b0400538fd25a4dd96"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e7b8813be97cab8cb52b1375f41f8e6804f6507fe4660152e8ca5c48f0436017"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:2dea10edfa1a54098703cb7acaa665c07b4e7568472a47f4e64e6319d3821ccf"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:713d22cd9643ba9025d33c4af43943c7a1eb8547729228de18d3e02e278472b6"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2d252771fc85e0cf8da0b823157962d70639e63cb9b578b1dec9868dd1f4f937"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-win32.whl", hash = "sha256:66bd5f950344fb2b3dbdd421aaa4e84f4411a1a13fca3aeb2bcbe667f80c9f76"},
|
||||
{file = "aiohttp-3.8.3-cp38-cp38-win_amd64.whl", hash = "sha256:84b14f36e85295fe69c6b9789b51a0903b774046d5f7df538176516c3e422446"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16c121ba0b1ec2b44b73e3a8a171c4f999b33929cd2397124a8c7fcfc8cd9e06"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8d6aaa4e7155afaf994d7924eb290abbe81a6905b303d8cb61310a2aba1c68ba"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:43046a319664a04b146f81b40e1545d4c8ac7b7dd04c47e40bf09f65f2437346"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599418aaaf88a6d02a8c515e656f6faf3d10618d3dd95866eb4436520096c84b"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92a2964319d359f494f16011e23434f6f8ef0434acd3cf154a6b7bec511e2fb7"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73a4131962e6d91109bca6536416aa067cf6c4efb871975df734f8d2fd821b37"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598adde339d2cf7d67beaccda3f2ce7c57b3b412702f29c946708f69cf8222aa"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75880ed07be39beff1881d81e4a907cafb802f306efd6d2d15f2b3c69935f6fb"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0239da9fbafd9ff82fd67c16704a7d1bccf0d107a300e790587ad05547681c8"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4e3a23ec214e95c9fe85a58470b660efe6534b83e6cbe38b3ed52b053d7cb6ad"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:47841407cc89a4b80b0c52276f3cc8138bbbfba4b179ee3acbd7d77ae33f7ac4"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:54d107c89a3ebcd13228278d68f1436d3f33f2dd2af5415e3feaeb1156e1a62c"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c37c5cce780349d4d51739ae682dec63573847a2a8dcb44381b174c3d9c8d403"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-win32.whl", hash = "sha256:f178d2aadf0166be4df834c4953da2d7eef24719e8aec9a65289483eeea9d618"},
|
||||
{file = "aiohttp-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:88e5be56c231981428f4f506c68b6a46fa25c4123a2e86d156c58a8369d31ab7"},
|
||||
{file = "aiohttp-3.8.3.tar.gz", hash = "sha256:3828fb41b7203176b82fe5d699e0d845435f2374750a44b480ea6b930f6be269"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
aiosignal = ">=1.1.2"
|
||||
async-timeout = ">=4.0.0a3,<5.0"
|
||||
attrs = ">=17.3.0"
|
||||
charset-normalizer = ">=2.0,<3.0"
|
||||
frozenlist = ">=1.1.1"
|
||||
multidict = ">=4.5,<7.0"
|
||||
yarl = ">=1.0,<2.0"
|
||||
|
||||
[package.extras]
|
||||
speedups = ["Brotli", "aiodns", "cchardet"]
|
||||
|
||||
[[package]]
|
||||
name = "aiosignal"
|
||||
version = "1.3.1"
|
||||
description = "aiosignal: a list of registered asynchronous callbacks"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"},
|
||||
{file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
frozenlist = ">=1.1.0"
|
||||
|
||||
[[package]]
|
||||
name = "alabaster"
|
||||
version = "0.7.12"
|
||||
|
@ -164,6 +288,18 @@ files = [
|
|||
six = ">=1.6.1,<2.0"
|
||||
wheel = ">=0.23.0,<1.0"
|
||||
|
||||
[[package]]
|
||||
name = "async-timeout"
|
||||
version = "4.0.2"
|
||||
description = "Timeout context manager for asyncio programs"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"},
|
||||
{file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "attrs"
|
||||
version = "22.1.0"
|
||||
|
@ -1395,18 +1531,106 @@ files = [
|
|||
{file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "frozenlist"
|
||||
version = "1.3.3"
|
||||
description = "A list-like structure which implements collections.abc.MutableSequence"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-win32.whl", hash = "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642"},
|
||||
{file = "frozenlist-1.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-win32.whl", hash = "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8"},
|
||||
{file = "frozenlist-1.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-win32.whl", hash = "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a"},
|
||||
{file = "frozenlist-1.3.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-win32.whl", hash = "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b"},
|
||||
{file = "frozenlist-1.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-win32.whl", hash = "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38"},
|
||||
{file = "frozenlist-1.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9"},
|
||||
{file = "frozenlist-1.3.3.tar.gz", hash = "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fsspec"
|
||||
version = "2022.11.0"
|
||||
description = "File-system specification"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "fsspec-2022.11.0-py3-none-any.whl", hash = "sha256:d6e462003e3dcdcb8c7aa84c73a228f8227e72453cd22570e2363e8844edfe7b"},
|
||||
{file = "fsspec-2022.11.0.tar.gz", hash = "sha256:259d5fd5c8e756ff2ea72f42e7613c32667dc2049a4ac3d84364a7ca034acb8b"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
aiohttp = {version = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1", optional = true, markers = "extra == \"http\""}
|
||||
requests = {version = "*", optional = true, markers = "extra == \"http\""}
|
||||
|
||||
[package.extras]
|
||||
abfs = ["adlfs"]
|
||||
adl = ["adlfs"]
|
||||
|
@ -2280,6 +2504,27 @@ wheel = "*"
|
|||
[package.extras]
|
||||
dask = ["dask[array] (>=2.0.0)", "dask[dataframe] (>=2.0.0)", "dask[distributed] (>=2.0.0)", "pandas"]
|
||||
|
||||
[[package]]
|
||||
name = "lightning-utilities"
|
||||
version = "0.5.0"
|
||||
description = "PyTorch Lightning Sample project."
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "lightning-utilities-0.5.0.tar.gz", hash = "sha256:01ef5b7fd50a8b54b849d8621720a65c36c91b374933a8384fb2be3d86cfa8f1"},
|
||||
{file = "lightning_utilities-0.5.0-py3-none-any.whl", hash = "sha256:db1fa4300ce76b171d8cd4e78ffad3b6bc82f3fbe8ca5aa35da269fbda65bea3"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
packaging = ">=20.0"
|
||||
typing-extensions = "*"
|
||||
|
||||
[package.extras]
|
||||
cli = ["fire"]
|
||||
docs = ["sphinx (>=4.0,<5.0)"]
|
||||
test = ["coverage (==6.5.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "llvmlite"
|
||||
version = "0.39.1"
|
||||
|
@ -2459,7 +2704,6 @@ packaging = ">=20.0"
|
|||
pillow = ">=6.2.0"
|
||||
pyparsing = ">=2.2.1"
|
||||
python-dateutil = ">=2.7"
|
||||
setuptools_scm = ">=7"
|
||||
|
||||
[[package]]
|
||||
name = "matplotlib-inline"
|
||||
|
@ -2578,6 +2822,90 @@ files = [
|
|||
{file = "msgpack-1.0.4.tar.gz", hash = "sha256:f5d869c18f030202eb412f08b28d2afeea553d6613aee89e200d7aca7ef01f5f"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "multidict"
|
||||
version = "6.0.3"
|
||||
description = "multidict implementation"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "multidict-6.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:73009ea04205966d47e16d98686ac5c438af23a1bb30b48a2c5da3423ec9ce37"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b92a9f3ab904397a33b193000dc4de7318ea175c4c460a1e154c415f9008e3d"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:578bfcb16f4b8675ef71b960c00f174b0426e0eeb796bab6737389d8288eb827"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1650ea41c408755da5eed52ac6ccbc8938ccc3e698d81e6f6a1be02ff2a0945"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d52442e7c951e4c9ee591d6047706e66923d248d83958bbf99b8b19515fffaef"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad7d66422b9cc51125509229693d27e18c08f2dea3ac9de408d821932b1b3759"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cd14e61f0da2a2cfb9fe05bfced2a1ed7063ce46a7a8cd473be4973de9a7f91"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:190626ced82d4cc567a09e7346340d380154a493bac6905e0095d8158cdf1e38"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:791458a1f7d1b4ab3bd9e93e0dcd1d59ef7ee9aa051dcd1ea030e62e49b923fd"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b46e79a9f4db53897d17bc64a39d1c7c2be3e3d4f8dba6d6730a2b13ddf0f986"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e4a095e18847c12ec20e55326ab8782d9c2d599400a3a2f174fab4796875d0e2"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fb6c3dc3d65014d2c782f5acf0b3ba14e639c6c33d3ed8932ead76b9080b3544"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3541882266247c7cd3dba78d6ef28dbe704774df60c9e4231edaa4493522e614"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-win32.whl", hash = "sha256:67090b17a0a5be5704fd109f231ee73cefb1b3802d41288d6378b5df46ae89ba"},
|
||||
{file = "multidict-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:36df958b15639e40472adaa4f0c2c7828fe680f894a6b48c4ce229f59a6a798b"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b51969503709415a35754954c2763f536a70b8bf7360322b2edb0c0a44391f6"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:24e8d513bfcaadc1f8b0ebece3ff50961951c54b07d5a775008a882966102418"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d325d61cac602976a5d47b19eaa7d04e3daf4efce2164c630219885087234102"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbbe17f8a7211b623502d2bf41022a51da3025142401417c765bf9a56fed4c"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4fb3fe591956d8841882c463f934c9f7485cfd5f763a08c0d467b513dc18ef89"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1925f78a543b94c3d46274c66a366fee8a263747060220ed0188e5f3eeea1c0"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21e1ce0b187c4e93112304dcde2aa18922fdbe8fb4f13d8aa72a5657bce0563a"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e07c24018986fb00d6e7eafca8fcd6e05095649e17fcf0e33a592caaa62a78b9"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:114a4ab3e5cfbc56c4b6697686ecb92376c7e8c56893ef20547921552f8bdf57"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4ccf55f28066b4f08666764a957c2b7c241c7547b0921d69c7ceab5f74fe1a45"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:9d359b0a962e052b713647ac1f13eabf2263167b149ed1e27d5c579f5c8c7d2c"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:df7b4cee3ff31b3335aba602f8d70dbc641e5b7164b1e9565570c9d3c536a438"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ee9b1cae9a6c5d023e5a150f6f6b9dbb3c3bbc7887d6ee07d4c0ecb49a473734"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-win32.whl", hash = "sha256:960ce1b790952916e682093788696ef7e33ac6a97482f9b983abdc293091b531"},
|
||||
{file = "multidict-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:2b66d61966b12e6bba500e5cbb2c721a35e119c30ee02495c5629bd0e91eea30"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:526f8397fc124674b8f39748680a0ff673bd6a715fecb4866716d36e380f015f"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f5d5129a937af4e3c4a1d6c139f4051b7d17d43276cefdd8d442a7031f7eef2"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38d394814b39be1c36ac709006d39d50d72a884f9551acd9c8cc1ffae3fc8c4e"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99341ca1f1db9e7f47914cb2461305665a662383765ced6f843712564766956d"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5790cc603456b6dcf8a9a4765f666895a6afddc88b3d3ba7b53dea2b6e23116"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce8e51774eb03844588d3c279adb94efcd0edeccd2f97516623292445bcc01f9"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:baa96a3418e27d723064854143b2f414a422c84cc87285a71558722049bebc5a"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:cb4a08f0aaaa869f189ffea0e17b86ad0237b51116d494da15ef7991ee6ad2d7"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:62db44727d0befea68e8ad2881bb87a9cfb6b87d45dd78609009627167f37b69"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:4cc5c8cd205a9810d16a5cd428cd81bac554ad1477cb87f4ad722b10992e794d"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f76109387e1ec8d8e2137c94c437b89fe002f29e0881aae8ae45529bdff92000"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-win32.whl", hash = "sha256:f8a728511c977df6f3d8af388fcb157e49f11db4a6637dd60131b8b6e40b0253"},
|
||||
{file = "multidict-6.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c2a1168e5aa7c72499fb03c850e0f03f624fa4a5c8d2e215c518d0a73872eb64"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eddf604a3de2ace3d9a4e4d491be7562a1ac095a0a1c95a9ec5781ef0273ef11"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d09daf5c6ce7fc6ed444c9339bbde5ea84e2534d1ca1cd37b60f365c77f00dea"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:12e0d396faa6dc55ff5379eee54d1df3b508243ff15bfc8295a6ec7a4483a335"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70740c2bc9ab1c99f7cdcb104f27d16c63860c56d51c5bf0ef82fc1d892a2131"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e322c94596054352f5a02771eec71563c018b15699b961aba14d6dd943367022"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4159fc1ec9ede8ab93382e0d6ba9b1b3d23c72da39a834db7a116986605c7ab4"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47defc0218682281a52fb1f6346ebb8b68b17538163a89ea24dfe4da37a8a9a3"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f9511e48bde6b995825e8d35e434fc96296cf07a25f4aae24ff9162be7eaa46"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e0bce9f7c30e7e3a9e683f670314c0144e8d34be6b7019e40604763bd278d84f"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:01b456046a05ff7cceefb0e1d2a9d32f05efcb1c7e0d152446304e11557639ce"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8230a39bae6c2e8a09e4da6bace5064693b00590a4a213e38f9a9366da10e7dd"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:445c0851a1cbc1f2ec3b40bc22f9c4a235edb3c9a0906122a9df6ea8d51f886c"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9aac6881454a750554ed4b280a839dcf9e2133a9d12ab4d417d673fb102289b7"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-win32.whl", hash = "sha256:81c3d597591b0940e04949e4e4f79359b2d2e542a686ba0da5e25de33fec13e0"},
|
||||
{file = "multidict-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:dc4cfef5d899f5f1a15f3d2ac49f71107a01a5a2745b4dd53fa0cede1419385a"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d408172519049e36fb6d29672f060dc8461fc7174eba9883c7026041ef9bfb38"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e068dfeadbce63072b2d8096486713d04db4946aad0a0f849bd4fc300799d0d3"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8b817d4ed68fd568ec5e45dd75ddf30cc72a47a6b41b74d5bb211374c296f5e"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cf5d19e12eff855aa198259c0b02fd3f5d07e1291fbd20279c37b3b0e6c9852"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5a811aab1b4aea0b4be669363c19847a8c547510f0e18fb632956369fdbdf67"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cfda34b7cb99eacada2072e0f69c0ad3285cb6f8e480b11f2b6d6c1c6f92718"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beeca903e4270b4afcd114f371a9602240dc143f9e944edfea00f8d4ad56c40d"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd5771e8ea325f85cbb361ddbdeb9ae424a68e5dfb6eea786afdcd22e68a7d5d"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9dbab2a7e9c073bc9538824a01f5ed689194db7f55f2b8102766873e906a6c1a"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f2c0957b3e8c66c10d27272709a5299ab3670a0f187c9428f3b90d267119aedb"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:94cbe5535ef150546b8321aebea22862a3284da51e7b55f6f95b7d73e96d90ee"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d0e798b072cf2aab9daceb43d97c9c527a0c7593e67a7846ad4cc6051de1e303"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a27b029caa3b555a4f3da54bc1e718eb55fcf1a11fda8bf0132147b476cf4c08"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-win32.whl", hash = "sha256:018c8e3be7f161a12b3e41741b6721f9baeb2210f4ab25a6359b7d76c1017dce"},
|
||||
{file = "multidict-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:5e58ec0375803526d395f6f7e730ecc45d06e15f68f7b9cdbf644a2918324e51"},
|
||||
{file = "multidict-6.0.3.tar.gz", hash = "sha256:2523a29006c034687eccd3ee70093a697129a3ffe8732535d3b2df6a4ecc279d"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "murmurhash"
|
||||
version = "1.0.9"
|
||||
|
@ -3218,6 +3546,8 @@ category = "main"
|
|||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"},
|
||||
{file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"},
|
||||
{file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"},
|
||||
{file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"},
|
||||
{file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"},
|
||||
|
@ -3453,7 +3783,6 @@ category = "dev"
|
|||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
files = [
|
||||
{file = "protobuf-3.19.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5e2e5d83c75fb61be40c001cfbcb0e5f912a30e147b369e0ed3744406098a779"},
|
||||
{file = "protobuf-3.19.6-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:010be24d5a44be7b0613750ab40bc8b8cedc796db468eae6c779b395f50d1fa1"},
|
||||
{file = "protobuf-3.19.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11478547958c2dfea921920617eb457bc26867b0d1aa065ab05f35080c5d9eb6"},
|
||||
{file = "protobuf-3.19.6-cp310-cp310-win32.whl", hash = "sha256:559670e006e3173308c9254d63facb2c03865818f22204037ab76f7a0ff70b5f"},
|
||||
|
@ -3555,18 +3884,7 @@ category = "dev"
|
|||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"},
|
||||
{file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"},
|
||||
{file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"},
|
||||
{file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"},
|
||||
{file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"},
|
||||
{file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"},
|
||||
{file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"},
|
||||
{file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"},
|
||||
{file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"},
|
||||
{file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"},
|
||||
{file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"},
|
||||
{file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"},
|
||||
{file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"},
|
||||
]
|
||||
|
||||
|
@ -3579,18 +3897,7 @@ optional = false
|
|||
python-versions = "*"
|
||||
files = [
|
||||
{file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"},
|
||||
{file = "pyasn1_modules-0.2.8-py2.4.egg", hash = "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199"},
|
||||
{file = "pyasn1_modules-0.2.8-py2.5.egg", hash = "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405"},
|
||||
{file = "pyasn1_modules-0.2.8-py2.6.egg", hash = "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb"},
|
||||
{file = "pyasn1_modules-0.2.8-py2.7.egg", hash = "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8"},
|
||||
{file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"},
|
||||
{file = "pyasn1_modules-0.2.8-py3.1.egg", hash = "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d"},
|
||||
{file = "pyasn1_modules-0.2.8-py3.2.egg", hash = "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45"},
|
||||
{file = "pyasn1_modules-0.2.8-py3.3.egg", hash = "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4"},
|
||||
{file = "pyasn1_modules-0.2.8-py3.4.egg", hash = "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811"},
|
||||
{file = "pyasn1_modules-0.2.8-py3.5.egg", hash = "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed"},
|
||||
{file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"},
|
||||
{file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
@ -3882,6 +4189,42 @@ files = [
|
|||
{file = "python_json_logger-2.0.4-py3-none-any.whl", hash = "sha256:3b03487b14eb9e4f77e4fc2a023358b5394b82fd89cecf5586259baed57d8c6f"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pytorch-lightning"
|
||||
version = "1.8.6"
|
||||
description = "PyTorch Lightning is the lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate."
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "pytorch-lightning-1.8.6.tar.gz", hash = "sha256:c4af783579a1528e07f40dd9bd0128c162bbbcf74fe1ce4292fec63fa7e76ada"},
|
||||
{file = "pytorch_lightning-1.8.6-py3-none-any.whl", hash = "sha256:8b6b4126b85c56a9dd08a03f7096ce749bcb452a9a50f6201a7165dbd92d866d"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
fsspec = {version = ">2021.06.0", extras = ["http"]}
|
||||
lightning-utilities = ">=0.3.0,<0.4.0 || >0.4.0"
|
||||
numpy = ">=1.17.2"
|
||||
packaging = ">=17.0"
|
||||
PyYAML = ">=5.4"
|
||||
tensorboardX = ">=2.2"
|
||||
torch = ">=1.9.0"
|
||||
torchmetrics = ">=0.7.0"
|
||||
tqdm = ">=4.57.0"
|
||||
typing-extensions = ">=4.0.0"
|
||||
|
||||
[package.extras]
|
||||
all = ["cloudpickle (>=1.3)", "codecov (==2.1.12)", "coverage (==6.5.0)", "deepspeed (>=0.6.0)", "fairscale (>=0.4.5)", "fastapi", "gym[classic-control] (>=0.17.0)", "hivemind (==1.1.2)", "horovod (>=0.21.2,!=0.24.0)", "hydra-core (>=1.0.5)", "ipython[all]", "jsonargparse[signatures] (>=4.15.2)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "onnxruntime", "pandas (>1.0)", "pre-commit (==2.20.0)", "protobuf (<=3.20.1)", "psutil", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-forked (==1.4.0)", "pytest-rerunfailures (==10.2)", "rich (>=10.14.0,!=10.15.0.a)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "torchvision (>=0.10.0)", "uvicorn"]
|
||||
deepspeed = ["deepspeed (>=0.6.0)"]
|
||||
dev = ["cloudpickle (>=1.3)", "codecov (==2.1.12)", "coverage (==6.5.0)", "fastapi", "hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.15.2)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "onnxruntime", "pandas (>1.0)", "pre-commit (==2.20.0)", "protobuf (<=3.20.1)", "psutil", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-forked (==1.4.0)", "pytest-rerunfailures (==10.2)", "rich (>=10.14.0,!=10.15.0.a)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "uvicorn"]
|
||||
examples = ["gym[classic-control] (>=0.17.0)", "ipython[all]", "torchvision (>=0.10.0)"]
|
||||
extra = ["hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.15.2)", "matplotlib (>3.1)", "omegaconf (>=2.0.5)", "rich (>=10.14.0,!=10.15.0.a)"]
|
||||
fairscale = ["fairscale (>=0.4.5)"]
|
||||
hivemind = ["hivemind (==1.1.2)"]
|
||||
horovod = ["horovod (>=0.21.2,!=0.24.0)"]
|
||||
strategies = ["deepspeed (>=0.6.0)", "fairscale (>=0.4.5)", "hivemind (==1.1.2)", "horovod (>=0.21.2,!=0.24.0)"]
|
||||
test = ["cloudpickle (>=1.3)", "codecov (==2.1.12)", "coverage (==6.5.0)", "fastapi", "onnxruntime", "pandas (>1.0)", "pre-commit (==2.20.0)", "protobuf (<=3.20.1)", "psutil", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-forked (==1.4.0)", "pytest-rerunfailures (==10.2)", "scikit-learn (>0.22.1)", "tensorboard (>=2.9.1)", "uvicorn"]
|
||||
|
||||
[[package]]
|
||||
name = "pytz"
|
||||
version = "2022.6"
|
||||
|
@ -3965,6 +4308,13 @@ files = [
|
|||
{file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
|
||||
{file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
|
||||
{file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
|
||||
{file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"},
|
||||
{file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"},
|
||||
{file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"},
|
||||
{file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"},
|
||||
{file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"},
|
||||
{file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"},
|
||||
{file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"},
|
||||
{file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
|
||||
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
|
||||
{file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
|
||||
|
@ -4428,28 +4778,6 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-g
|
|||
testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
|
||||
testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
|
||||
|
||||
[[package]]
|
||||
name = "setuptools-scm"
|
||||
version = "7.0.5"
|
||||
description = "the blessed package to manage your versions by scm tags"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "setuptools_scm-7.0.5-py3-none-any.whl", hash = "sha256:7930f720905e03ccd1e1d821db521bff7ec2ac9cf0ceb6552dd73d24a45d3b02"},
|
||||
{file = "setuptools_scm-7.0.5.tar.gz", hash = "sha256:031e13af771d6f892b941adb6ea04545bbf91ebc5ce68c78aaf3fff6e1fb4844"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
packaging = ">=20.0"
|
||||
setuptools = "*"
|
||||
tomli = ">=1.0.0"
|
||||
typing-extensions = "*"
|
||||
|
||||
[package.extras]
|
||||
test = ["pytest (>=6.2)", "virtualenv (>20)"]
|
||||
toml = ["setuptools (>=42)"]
|
||||
|
||||
[[package]]
|
||||
name = "shap"
|
||||
version = "0.40.0"
|
||||
|
@ -4493,8 +4821,8 @@ slicer = "0.0.7"
|
|||
tqdm = ">4.25.0"
|
||||
|
||||
[package.extras]
|
||||
all = ["catboost", "ipython", "lightgbm", "lime", "matplotlib", "nbsphinx", "numpydoc", "opencv-python", "pyod", "pyspark", "pytest", "pytest-cov", "pytest-mpl", "sentencepiece", "sphinx", "sphinx_rtd_theme", "torch", "transformers", "xgboost"]
|
||||
docs = ["ipython", "matplotlib", "nbsphinx", "numpydoc", "sphinx", "sphinx_rtd_theme"]
|
||||
all = ["catboost", "ipython", "lightgbm", "lime", "matplotlib", "nbsphinx", "numpydoc", "opencv-python", "pyod", "pyspark", "pytest", "pytest-cov", "pytest-mpl", "sentencepiece", "sphinx", "sphinx-rtd-theme", "torch", "transformers", "xgboost"]
|
||||
docs = ["ipython", "matplotlib", "nbsphinx", "numpydoc", "sphinx", "sphinx-rtd-theme"]
|
||||
others = ["lime"]
|
||||
plots = ["ipython", "matplotlib"]
|
||||
test = ["catboost", "lightgbm", "opencv-python", "pyod", "pyspark", "pytest", "pytest-cov", "pytest-mpl", "sentencepiece", "torch", "transformers", "xgboost"]
|
||||
|
@ -5145,6 +5473,22 @@ files = [
|
|||
{file = "tensorboard_plugin_wit-1.8.1-py3-none-any.whl", hash = "sha256:ff26bdd583d155aa951ee3b152b3d0cffae8005dc697f72b44a8e8c2a77a8cbe"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tensorboardx"
|
||||
version = "2.5.1"
|
||||
description = "TensorBoardX lets you watch Tensors Flow without Tensorflow"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "tensorboardX-2.5.1-py2.py3-none-any.whl", hash = "sha256:8808133ccca673cd04076f6f2a85cf2d39bb2d0393a0f20d0f9cbb06d472b57e"},
|
||||
{file = "tensorboardX-2.5.1.tar.gz", hash = "sha256:ea85a3446f22ce8a917fe4fa4d8a7a96222ef84ac835267d038c34bb99f6d61b"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
numpy = "*"
|
||||
protobuf = ">=3.8.0,<=3.20.1"
|
||||
|
||||
[[package]]
|
||||
name = "tensorflow"
|
||||
version = "2.11.0"
|
||||
|
@ -5215,18 +5559,22 @@ python-versions = ">=3.7, <3.11"
|
|||
files = [
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:22753dc28c949bfaf29b573ee376370762c88d80330fe95cfb291261eb5e927a"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:52988659f405166df79905e9859bc84ae2a71e3ff61522ba32a95e4dce8e66d2"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cf11d36d5aac6365f9f6c4bc71eb23346a2f5dc139c91af1e2ea06cfd7f69a7"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp310-cp310-win_amd64.whl", hash = "sha256:698d7f89e09812b9afeb47c3860797343a22f997c64ab9dab98132c61daa8a7d"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:bbf245883aa52ec687b66d0fcbe0f5f0a92d98c0b1c53e6a736039a3548d29a1"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp311-cp311-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6d95f306ff225c5053fd06deeab3e3a2716357923cb40c44d566c11be779caa3"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp311-cp311-win_amd64.whl", hash = "sha256:5fbef5836e70026245d8d9e692c44dae2c6dbc208c743d01f5b7a2978d6b6bc6"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:00cf6a92f1f9f90b2ba2d728870bcd2a70b116316d0817ab0b91dd390c25b3fd"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f76cbe1a784841c223f6861e5f6c7e53aa6232cb626d57e76881a0638c365de6"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8f4b1b83ee28906881221c0a40822cbf30ebfcc3e96430f91f396309e6b452c"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c5d99f56c12a349905ff684142e4d2df06ae68ecf50c4aad5449a5f81731d858"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:b6e2d275020fb4d1a952cd3fa546483f4e46ad91d64e90d3458e5ca3d12f6477"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a6670e0da16c884267e896ea5c3334d6fd319bd6ff7cf917043a9f3b2babb1b3"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebb4724594bb897f74c637c256cb9509b25fc6b83860a2a6e2a6d42fd1a1a2a"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp38-cp38-win_amd64.whl", hash = "sha256:bfed720fc691d3f45802a7bed420716805aef0939c11cebf25798906201f626e"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:cc062ce13ec95fb64b1fd426818a6d2b0e5be9692bc0e43a19cce115b6da4336"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:366e1eff8dbd6b64333d7061e2a8efd081ae4742614f717ced08d8cc9379eb50"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47944fba38f46c9137b7bc27fb293953249d437f225bf46b96bac6a177bdfe04"},
|
||||
{file = "tensorflow_io_gcs_filesystem-0.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:9484893779324b2d34874b0aacf3b824eb4f22d782e75df029cbccab2e607974"},
|
||||
]
|
||||
|
||||
|
@ -5395,7 +5743,7 @@ files = [
|
|||
name = "tomli"
|
||||
version = "2.0.1"
|
||||
description = "A lil' TOML parser"
|
||||
category = "main"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
|
@ -5420,7 +5768,7 @@ name = "torch"
|
|||
version = "1.12.1"
|
||||
description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = ">=3.7.0"
|
||||
files = [
|
||||
{file = "torch-1.12.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:9c038662db894a23e49e385df13d47b2a777ffd56d9bcd5b832593fab0a7e286"},
|
||||
|
@ -5448,12 +5796,41 @@ files = [
|
|||
[package.dependencies]
|
||||
typing-extensions = "*"
|
||||
|
||||
[[package]]
|
||||
name = "torchmetrics"
|
||||
version = "0.11.0"
|
||||
description = "PyTorch native Metrics"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "torchmetrics-0.11.0-py3-none-any.whl", hash = "sha256:f809c3cb86a0bd3d8743df0888040257e20d371a937ff9114f582a60ce1a1c67"},
|
||||
{file = "torchmetrics-0.11.0.tar.gz", hash = "sha256:c838e0491d80775daadd0802e27ae3af112a52086c9ba8cbcd1e2807243c89ac"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
numpy = ">=1.17.2"
|
||||
packaging = "*"
|
||||
torch = ">=1.8.1"
|
||||
typing-extensions = {version = "*", markers = "python_version < \"3.9\""}
|
||||
|
||||
[package.extras]
|
||||
all = ["lpips", "nltk (>=3.6)", "pycocotools", "pystoi", "pytorch-lightning (>=1.5)", "regex (>=2021.9.24)", "scipy", "torch-fidelity", "torchvision", "torchvision (>=0.8)", "tqdm (>=4.41.0)", "transformers (>=4.10.0)"]
|
||||
audio = ["pystoi"]
|
||||
detection = ["pycocotools", "torchvision (>=0.8)"]
|
||||
docs = ["docutils (>=0.16)", "myst-parser", "nbsphinx (>=0.8)", "pandoc (>=1.0)", "sphinx (>=4.0,<5.0)", "sphinx-autodoc-typehints (>=1.0)", "sphinx-copybutton (>=0.3)", "sphinx-paramlinks (>=0.5.1)", "sphinx-togglebutton (>=0.2)", "sphinxcontrib-fulltoc (>=1.0)", "sphinxcontrib-mockautodoc"]
|
||||
image = ["lpips", "scipy", "torch-fidelity", "torchvision"]
|
||||
integrate = ["pytorch-lightning (>=1.5)"]
|
||||
multimodal = ["transformers (>=4.10.0)"]
|
||||
test = ["bert-score (==0.3.10)", "check-manifest", "cloudpickle (>=1.3)", "coverage (>5.2)", "dython", "fast-bss-eval (>=0.1.0)", "fire", "huggingface-hub (<0.7)", "jiwer (>=2.3.0)", "kornia (>=0.6.7)", "mir-eval (>=0.6)", "mypy (==0.982)", "netcal", "pandas", "phmdoctest (>=1.1.1)", "pre-commit (>=1.0)", "psutil", "pycocotools", "pypesq (>1.2)", "pytest (>=6.0.0,<7.0.0)", "pytest-cov (>2.10)", "pytest-doctestplus (>=0.9.0)", "pytest-rerunfailures (>=10.0)", "pytest-timeout", "pytorch-msssim (==0.2.1)", "requests", "rouge-score (>=0.0.4)", "sacrebleu (>=2.0.0)", "scikit-image (>0.17.1)", "scikit-learn (>1.0,<1.1.1)", "scipy", "torch-complex", "transformers (>4.4.0)", "types-PyYAML", "types-emoji", "types-protobuf", "types-requests", "types-setuptools", "types-six", "types-tabulate"]
|
||||
text = ["nltk (>=3.6)", "regex (>=2021.9.24)", "tqdm (>=4.41.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "torchvision"
|
||||
version = "0.13.1"
|
||||
description = "image and video datasets and models for torch deep learning"
|
||||
category = "main"
|
||||
optional = true
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "torchvision-0.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19286a733c69dcbd417b86793df807bd227db5786ed787c17297741a9b0d0fc7"},
|
||||
|
@ -5857,6 +6234,94 @@ plotting = ["graphviz", "matplotlib"]
|
|||
pyspark = ["cloudpickle", "pyspark", "scikit-learn"]
|
||||
scikit-learn = ["scikit-learn"]
|
||||
|
||||
[[package]]
|
||||
name = "yarl"
|
||||
version = "1.8.2"
|
||||
description = "Yet another URL library"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "yarl-1.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bb81f753c815f6b8e2ddd2eef3c855cf7da193b82396ac013c661aaa6cc6b0a5"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:47d49ac96156f0928f002e2424299b2c91d9db73e08c4cd6742923a086f1c863"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3fc056e35fa6fba63248d93ff6e672c096f95f7836938241ebc8260e062832fe"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58a3c13d1c3005dbbac5c9f0d3210b60220a65a999b1833aa46bd6677c69b08e"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10b08293cda921157f1e7c2790999d903b3fd28cd5c208cf8826b3b508026996"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de986979bbd87272fe557e0a8fcb66fd40ae2ddfe28a8b1ce4eae22681728fef"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4fcfa71e2c6a3cb568cf81aadc12768b9995323186a10827beccf5fa23d4f8"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae4d7ff1049f36accde9e1ef7301912a751e5bae0a9d142459646114c70ecba6"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf071f797aec5b96abfc735ab97da9fd8f8768b43ce2abd85356a3127909d146"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:74dece2bfc60f0f70907c34b857ee98f2c6dd0f75185db133770cd67300d505f"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:df60a94d332158b444301c7f569659c926168e4d4aad2cfbf4bce0e8fb8be826"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:63243b21c6e28ec2375f932a10ce7eda65139b5b854c0f6b82ed945ba526bff3"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cfa2bbca929aa742b5084fd4663dd4b87c191c844326fcb21c3afd2d11497f80"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-win32.whl", hash = "sha256:b05df9ea7496df11b710081bd90ecc3a3db6adb4fee36f6a411e7bc91a18aa42"},
|
||||
{file = "yarl-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:24ad1d10c9db1953291f56b5fe76203977f1ed05f82d09ec97acb623a7976574"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2a1fca9588f360036242f379bfea2b8b44cae2721859b1c56d033adfd5893634"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f37db05c6051eff17bc832914fe46869f8849de5b92dc4a3466cd63095d23dfd"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77e913b846a6b9c5f767b14dc1e759e5aff05502fe73079f6f4176359d832581"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0978f29222e649c351b173da2b9b4665ad1feb8d1daa9d971eb90df08702668a"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388a45dc77198b2460eac0aca1efd6a7c09e976ee768b0d5109173e521a19daf"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2305517e332a862ef75be8fad3606ea10108662bc6fe08509d5ca99503ac2aee"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42430ff511571940d51e75cf42f1e4dbdded477e71c1b7a17f4da76c1da8ea76"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3150078118f62371375e1e69b13b48288e44f6691c1069340081c3fd12c94d5b"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c15163b6125db87c8f53c98baa5e785782078fbd2dbeaa04c6141935eb6dab7a"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d04acba75c72e6eb90745447d69f84e6c9056390f7a9724605ca9c56b4afcc6"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e7fd20d6576c10306dea2d6a5765f46f0ac5d6f53436217913e952d19237efc4"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:75c16b2a900b3536dfc7014905a128a2bea8fb01f9ee26d2d7d8db0a08e7cb2c"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6d88056a04860a98341a0cf53e950e3ac9f4e51d1b6f61a53b0609df342cc8b2"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-win32.whl", hash = "sha256:fb742dcdd5eec9f26b61224c23baea46c9055cf16f62475e11b9b15dfd5c117b"},
|
||||
{file = "yarl-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:8c46d3d89902c393a1d1e243ac847e0442d0196bbd81aecc94fcebbc2fd5857c"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ceff9722e0df2e0a9e8a79c610842004fa54e5b309fe6d218e47cd52f791d7ef"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f6b4aca43b602ba0f1459de647af954769919c4714706be36af670a5f44c9c1"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1684a9bd9077e922300ecd48003ddae7a7474e0412bea38d4631443a91d61077"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebb78745273e51b9832ef90c0898501006670d6e059f2cdb0e999494eb1450c2"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adeef150d528ded2a8e734ebf9ae2e658f4c49bf413f5f157a470e17a4a2e89"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a7c87927a468e5a1dc60c17caf9597161d66457a34273ab1760219953f7f4c"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:efff27bd8cbe1f9bd127e7894942ccc20c857aa8b5a0327874f30201e5ce83d0"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a783cd344113cb88c5ff7ca32f1f16532a6f2142185147822187913eb989f739"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:705227dccbe96ab02c7cb2c43e1228e2826e7ead880bb19ec94ef279e9555b5b"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:34c09b43bd538bf6c4b891ecce94b6fa4f1f10663a8d4ca589a079a5018f6ed7"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a48f4f7fea9a51098b02209d90297ac324241bf37ff6be6d2b0149ab2bd51b37"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-win32.whl", hash = "sha256:0414fd91ce0b763d4eadb4456795b307a71524dbacd015c657bb2a39db2eab89"},
|
||||
{file = "yarl-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:d881d152ae0007809c2c02e22aa534e702f12071e6b285e90945aa3c376463c5"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5df5e3d04101c1e5c3b1d69710b0574171cc02fddc4b23d1b2813e75f35a30b1"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a66c506ec67eb3159eea5096acd05f5e788ceec7b96087d30c7d2865a243918"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2b4fa2606adf392051d990c3b3877d768771adc3faf2e117b9de7eb977741229"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e21fb44e1eff06dd6ef971d4bdc611807d6bd3691223d9c01a18cec3677939e"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93202666046d9edadfe9f2e7bf5e0782ea0d497b6d63da322e541665d65a044e"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc77086ce244453e074e445104f0ecb27530d6fd3a46698e33f6c38951d5a0f1"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dd68a92cab699a233641f5929a40f02a4ede8c009068ca8aa1fe87b8c20ae3"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b372aad2b5f81db66ee7ec085cbad72c4da660d994e8e590c997e9b01e44901"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6f3515aafe0209dd17fb9bdd3b4e892963370b3de781f53e1746a521fb39fc0"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dfef7350ee369197106805e193d420b75467b6cceac646ea5ed3049fcc950a05"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:728be34f70a190566d20aa13dc1f01dc44b6aa74580e10a3fb159691bc76909d"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ff205b58dc2929191f68162633d5e10e8044398d7a45265f90a0f1d51f85f72c"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf211dcad448a87a0d9047dc8282d7de59473ade7d7fdf22150b1d23859f946"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-win32.whl", hash = "sha256:272b4f1599f1b621bf2aabe4e5b54f39a933971f4e7c9aa311d6d7dc06965165"},
|
||||
{file = "yarl-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:326dd1d3caf910cd26a26ccbfb84c03b608ba32499b5d6eeb09252c920bcbe4f"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f8ca8ad414c85bbc50f49c0a106f951613dfa5f948ab69c10ce9b128d368baf8"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:418857f837347e8aaef682679f41e36c24250097f9e2f315d39bae3a99a34cbf"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ae0eec05ab49e91a78700761777f284c2df119376e391db42c38ab46fd662b77"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:009a028127e0a1755c38b03244c0bea9d5565630db9c4cf9572496e947137a87"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3edac5d74bb3209c418805bda77f973117836e1de7c000e9755e572c1f7850d0"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da65c3f263729e47351261351b8679c6429151ef9649bba08ef2528ff2c423b2"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef8fb25e52663a1c85d608f6dd72e19bd390e2ecaf29c17fb08f730226e3a08"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcd7bb1e5c45274af9a1dd7494d3c52b2be5e6bd8d7e49c612705fd45420b12d"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44ceac0450e648de86da8e42674f9b7077d763ea80c8ceb9d1c3e41f0f0a9951"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:97209cc91189b48e7cfe777237c04af8e7cc51eb369004e061809bcdf4e55220"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:48dd18adcf98ea9cd721a25313aef49d70d413a999d7d89df44f469edfb38a06"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e59399dda559688461762800d7fb34d9e8a6a7444fd76ec33220a926c8be1516"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d617c241c8c3ad5c4e78a08429fa49e4b04bedfc507b34b4d8dceb83b4af3588"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-win32.whl", hash = "sha256:cb6d48d80a41f68de41212f3dfd1a9d9898d7841c8f7ce6696cf2fd9cb57ef83"},
|
||||
{file = "yarl-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:6604711362f2dbf7160df21c416f81fac0de6dbcf0b5445a2ef25478ecc4c778"},
|
||||
{file = "yarl-1.8.2.tar.gz", hash = "sha256:49d43402c6e3013ad0978602bf6bf5328535c48d192304b91b97a3c6790b1562"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
idna = ">=2.0"
|
||||
multidict = ">=4.0"
|
||||
|
||||
[[package]]
|
||||
name = "zict"
|
||||
version = "2.2.0"
|
||||
|
@ -5897,4 +6362,4 @@ pygraphviz = ["pygraphviz"]
|
|||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = ">=3.8,<3.11"
|
||||
content-hash = "24420e732fbb02c571d8a1052c47638d55cf35001de646920d0512c2edb6515e"
|
||||
content-hash = "dd21efd9efd239d887d69cb14da1b4999ca1d39b4896605acfeca4fb86fa0d02"
|
||||
|
|
|
@ -89,6 +89,9 @@ flaky = "^3.7.0"
|
|||
keras = "^2.9.0"
|
||||
xgboost = "^1.7.0"
|
||||
mypy = "^0.971"
|
||||
torch = "^1.12.1"
|
||||
torchvision = "^0.13.1"
|
||||
pytorch-lightning = "^1.7.7"
|
||||
|
||||
[tool.poetry.group.docs]
|
||||
optional = true
|
||||
|
|
Загрузка…
Ссылка в новой задаче