From 26b0495c9a787e44e2d4f89f87be1dfa9d73a0a4 Mon Sep 17 00:00:00 2001 From: Charles Date: Mon, 22 Aug 2022 09:27:45 +0100 Subject: [PATCH 1/2] PairwiseSequenceClassificationExplainer, RoBERTa bug fixes, GH Actions migration (#99) * Make pytest a dev dependency * Add base _get_preds method to base explainer * Add pairwise explainer initial version, use global _get_preds in forward function * Bump min python version from 3.6 -> 3.7 * Formatting * Remove .circleci * Update dependencies * GH actions for unit tests * Sign flipping flag for attributions, documentation for pairwise sequence classification * Export pairwise explainer at project root * Fix incorrect values for sep idx * Add initial test for pairwise explainer * Fixing failing test * Update GH actions * Add more tests for pairwise explainer * Add details of pairwise explainer to readme, pairwise example image --- .circleci/config.yml | 32 - .github/workflows/black_check.yml | 13 - .github/workflows/unit_tests.yml | 45 + README.md | 144 ++- images/pairwise_cross_encoder_example.png | Bin 0 -> 235054 bytes poetry.lock | 884 +++++++----------- pyproject.toml | 6 +- ...est_multilabel_classification_explainer.py | 5 +- .../test_sequence_classification_explainer.py | 70 +- transformers_interpret/__init__.py | 2 +- transformers_interpret/attributions.py | 10 +- transformers_interpret/explainer.py | 52 +- transformers_interpret/explainers/__init__.py | 2 +- .../explainers/sequence_classification.py | 240 ++++- 14 files changed, 862 insertions(+), 643 deletions(-) delete mode 100644 .circleci/config.yml delete mode 100644 .github/workflows/black_check.yml create mode 100644 .github/workflows/unit_tests.yml create mode 100644 images/pairwise_cross_encoder_example.png diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 9d4861b..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: 2.1 - -orbs: - python: circleci/python@0.3.2 - -jobs: - build-and-test: - working_directory: ~/transformers-interpret - docker: - - image: circleci/python:3.8 - steps: - - checkout - - - python/load-cache - - python/install-deps - - python/save-cache - - run: - name: Run Tests - no_output_timeout: 30m - command: | - python -m pytest - - -workflows: - main: - jobs: - - build-and-test: - filters: - branches: - only: - - dev - - master diff --git a/.github/workflows/black_check.yml b/.github/workflows/black_check.yml deleted file mode 100644 index b7539b6..0000000 --- a/.github/workflows/black_check.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: black - -on: [push] - -jobs: - black: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Black Code Formatter - uses: lgeiger/black-action@master - with: - args: ". --check" diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml new file mode 100644 index 0000000..b22479f --- /dev/null +++ b/.github/workflows/unit_tests.yml @@ -0,0 +1,45 @@ +--- +name: Unit Tests +on: push +jobs: + tests: + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v1 + + - name: Set up Python 3.7.13 + uses: actions/setup-python@v2 + with: + python-version: 3.7.13 + + - name: Install poetry + run: | + which python + which pip + pip install poetry + + - name: Install Python dependencies + if: steps.cache-poetry.outputs.cache-hit != 'true' + run: | + poetry install + + - name: Run Unit tests + + run: | + export PATH="$HOME/.pyenv/bin:$PATH" + export PYTHONPATH="." + + poetry run pytest -s --cov=transformers_interpret/ --cov-report term-missing \ + test + + - name: Report coverage + run: | + export PATH="$HOME/.pyenv/bin:$PATH" + poetry run coverage report --fail-under=50 + poetry run coverage html -d unit_htmlcov + + - uses: actions/upload-artifact@v2 + with: + name: ti-unit-coverage + path: ti-unit-htmlcov/ diff --git a/README.md b/README.md index 733e616..b9e254d 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,8 @@

- - - - - - - + + @@ -36,17 +31,19 @@ Check out the streamlit [demo app here](https://share.streamlit.io/cdpierse/tran - [Documentation](#documentation) - [Quick Start](#quick-start) - - [Sequence Classification Explainer](#sequence-classification-explainer) + - [Sequence Classification Explainer and Pairwise Sequence Classification](#sequence-classification-explainer-and-pairwise-sequence-classification) - [Visualize Classification attributions](#visualize-classification-attributions) - [Explaining Attributions for Non Predicted Class](#explaining-attributions-for-non-predicted-class) - - [MultiLabel Classification Explainer](#sequence-classification-explainer) - - [Visualize MultiLabel Classification attributions](#visualize-multilabel-attributions) + - [Pairwise Sequence Classification](#pairwise-sequence-classification) + - [Visualize Pairwise Classification attributions](#visualize-pairwise-classification-attributions) + - [MultiLabel Classification Explainer](#multilabel-classification-explainer) + - [Visualize MultiLabel Classification attributions](#visualize-multilabel-classification-attributions) - [Zero Shot Classification Explainer](#zero-shot-classification-explainer) - [Visualize Zero Shot Classification attributions](#visualize-zero-shot-classification-attributions) - - [Question Answering Explainer (Experimental)](#question-answering-explainer-experimental) + - [Question Answering Explainer](#question-answering-explainer) - [Visualize Question Answering attributions](#visualize-question-answering-attributions) - - [Token Classfication (NER) Explainer (Experimental)](#token-classification-ner-explainer) - - [Visualize Token Classification (NER) attributions](#visualize-ner-attributions) + - [Token Classification (NER) explainer](#token-classification-ner-explainer) + - [Visualize NER attributions](#visualize-ner-attributions) - [Future Development](#future-development) - [Contributing](#contributing) - [Questions / Get In Touch](#questions--get-in-touch) @@ -63,7 +60,7 @@ pip install transformers-interpret Supported: -- Python >= 3.6 +- Python >= 3.7 - Pytorch >= 1.5.0 - [transformers][transformers] >= v3.0.0 - captum >= 0.3.1 @@ -74,8 +71,7 @@ The package does not work with Python 2.7 or below. ## Quick Start - -### Sequence Classification Explainer +### Sequence Classification Explainer and Pairwise Sequence Classification

Click to expand @@ -176,6 +172,102 @@ Getting attributions for different classes is particularly insightful for multic For a detailed explanation of this example please checkout this [multiclass classification notebook.](notebooks/multiclass_classification_example.ipynb) +### Pairwise Sequence Classification + +The `PairwiseSequenceClassificationExplainer` is a variant of the the `SequenceClassificationExplainer` that is designed to work with classification models that expect the input sequence to be two inputs separated by a models' separator token. Common examples of this are [NLI models](https://arxiv.org/abs/1705.02364) and [Cross-Encoders ](https://www.sbert.net/docs/pretrained_cross-encoders.html) which are commonly used to score two inputs similarity to one another. + +This explainer calculates pairwise attributions for two passed inputs `text1` and `text2` using the model +and tokenizer given in the constructor. + +Also, since a common use case for pairwise sequence classification is to compare two inputs similarity - models of this nature typically only have a single output node rather than multiple for each class. The pairwise sequence classification has some useful utility functions to make interpreting single node outputs clearer. + +By default for models that output a single node the attributions are with respect to the inputs pushing the scores closer to 1.0, however if you want to see the +attributions with respect to scores closer to 0.0 you can pass `flip_sign=True`. For similarity +based models this is useful, as the model might predict a score closer to 0.0 for the two inputs +and in that case we would flip the attributions sign to explain why the two inputs are dissimilar. + +Let's start by initializing a cross-encoder model and tokenizer from the suite of [pre-trained cross-encoders ](https://www.sbert.net/docs/pretrained_cross-encoders.html)provided by [sentence-transformers](https://github.com/UKPLab/sentence-transformers). + +For this example we are using `"cross-encoder/ms-marco-MiniLM-L-6-v2"`, a high quality cross-encoder trained on the [MSMarco dataset](https://github.com/microsoft/MSMARCO-Passage-Ranking) a passage ranking dataset for question answering and machine reading comprehension. + +```python +from transformers import AutoModelForSequenceClassification, AutoTokenizer + +from transformers_interpret.explainers.sequence_classification import PairwiseSequenceClassificationExplainer + +model = AutoModelForSequenceClassification.from_pretrained("cross-encoder/ms-marco-MiniLM-L-6-v2") +tokenizer = AutoTokenizer.from_pretrained("cross-encoder/ms-marco-MiniLM-L-6-v2") + +pairwise_explainer = PairwiseSequenceClassificationExplainer(model, tokenizer) + +# the pairwise explainer requires two string inputs to be passed, in this case given the nature of the model +# we pass a query string and a context string. The question we are asking of our model is "does this context contain a valid answer to our question" +# the higher the score the better the fit. + +query = "How many people live in Berlin?" +context = "Berlin has a population of 3,520,031 registered inhabitants in an area of 891.82 square kilometers." +pairwise_attr = explainer(query, context) +``` + +Which returns the following attributions: + +```python +>>> pairwise_attr +[('[CLS]', 0.0), + ('how', -0.037558652124213034), + ('many', -0.40348581975409786), + ('people', -0.29756140282349425), + ('live', -0.48979015417391764), + ('in', -0.17844527885888117), + ('berlin', 0.3737346097442739), + ('?', -0.2281428913480142), + ('[SEP]', 0.0), + ('berlin', 0.18282430604641564), + ('has', 0.039114659489254834), + ('a', 0.0820056652212297), + ('population', 0.35712150914643026), + ('of', 0.09680870840224687), + ('3', 0.04791760029513795), + (',', 0.040330986539774266), + ('520', 0.16307677913176166), + (',', -0.005919693904602767), + ('03', 0.019431649515841844), + ('##1', -0.0243808667024702), + ('registered', 0.07748341753369632), + ('inhabitants', 0.23904087299731255), + ('in', 0.07553221327346359), + ('an', 0.033112821611999875), + ('area', -0.025378852244447532), + ('of', 0.026526373859562906), + ('89', 0.0030700151809002147), + ('##1', -0.000410387092186983), + ('.', -0.0193147139126114), + ('82', 0.0073800833347678774), + ('square', 0.028988305990861576), + ('kilometers', 0.02071182933829008), + ('.', -0.025901070914318036), + ('[SEP]', 0.0)] +``` + +#### Visualize Pairwise Classification attributions + +Visualizing the pairwise attributions is no different to the sequence classification explaine. We can see that in both the `query` and `context` there is a lot of positive attribution for the word `berlin` as well the words `population` and `inhabitants` in the `context`, good signs that our model understands the textual context of the question asked. + +```python +pairwise_explainer.visualize("cross_encoder_attr.html") +``` + + + + + +If we were more interested in highlighting the input attributions that pushed the model away from the positive class of this single node output we could pass: + +```python +pairwise_attr = explainer(query, context, flip_sign=True) +``` + +This simply inverts the sign of the attributions ensuring that they are with respect to the model outputting 0 rather than 1.
@@ -199,7 +291,9 @@ cls_explainer = MultiLabelClassificationExplainer(model, tokenizer) word_attributions = cls_explainer("There were many aspects of the film I liked, but it was frightening and gross in parts. My parents hated it.") ``` + This produces a dictionary of word attributions mapping labels to a list of tuples for each word and it's attribution score. +
Click to see word attribution dictionary ```python @@ -394,8 +488,8 @@ This produces a dictionary of word attributions mapping labels to a list of tupl ('', -0.465690452620123), ('', 0.0)]} ``` -
+ #### Visualize MultiLabel Classification attributions @@ -411,15 +505,12 @@ cls_explainer.visualize("multilabel_viz.html") - ### Zero Shot Classification Explainer
Click to expand - - _Models using this explainer must be previously trained on NLI classification downstream tasks and have a label in the model's config called either "entailment" or "ENTAILMENT"._ This explainer allows for attributions to be calculated for zero shot classification like models. In order to achieve this we use the same methodology employed by Hugging face. For those not familiar method employed by Hugging Face to achieve zero shot classification the way this works is by exploiting the "entailment" label of NLI models. Here is a [link](https://arxiv.org/abs/1909.00161) to a paper explaining more about it. A list of NLI models guaranteed to be compatible with this explainer can be found on the [model hub](https://huggingface.co/models?filter=pytorch&pipeline_tag=zero-shot-classification). @@ -546,12 +637,10 @@ zero_shot_explainer.visualize("zero_shot.html")
-### Question Answering Explainer (Experimental) +### Question Answering Explainer
Click to expand -_This is currently an experimental explainer under active development and is not yet fully tested. The explainers' API is subject to change as are the attribution methods, if you find any bugs please let me know._ - Let's start by initializing a transformers' Question Answering model and tokenizer, and running it through the `QuestionAnsweringExplainer`. For this example we are using `bert-large-uncased-whole-word-masking-finetuned-squad`, a bert model finetuned on a SQuAD. @@ -686,9 +775,8 @@ qa_explainer.visualize("bert_qa_viz.html")
- - ### Token Classification (NER) explainer +
Click to expand _This is currently an experimental explainer under active development and is not yet fully tested. The explainers' API is subject to change as are the attribution methods, if you find any bugs please let me know._ @@ -697,8 +785,6 @@ Let's start by initializing a transformers' Token Classfication model and tokeni For this example we are using `dslim/bert-base-NER`, a bert model finetuned on the CoNLL-2003 Named Entity Recognition dataset. - - ```python from transformers import AutoModelForTokenClassification, AutoTokenizer from transformers_interpret import TokenClassificationExplainer @@ -717,7 +803,7 @@ word_attributions = ner_explainer(sample_text, ignored_labels=['O']) ``` -In order to reduce the number of attributions that are calculated, we tell the explainer to ignore the tokens that whose predicted label is `'O'`. We could also tell the explainer to ignore certain indexes providing a list as argument of the parameter `ignored_indexes`. +In order to reduce the number of attributions that are calculated, we tell the explainer to ignore the tokens that whose predicted label is `'O'`. We could also tell the explainer to ignore certain indexes providing a list as argument of the parameter `ignored_indexes`. Which will return the following dict of including the predicted label and the attributions for each of token, except those which were predicted as 'O': @@ -801,6 +887,7 @@ Which will return the following dict of including the predicted label and the at ``` #### Visualize NER attributions + For the `TokenClassificationExplainer` the visualize() method returns a table with as many rows as tokens. ```python @@ -811,7 +898,6 @@ ner_explainer.visualize("bert_ner_viz.html") - For more details about how the `TokenClassificationExplainer` works, you can check the notebook [notebooks/ner_example.ipynb](notebooks/ner_example.ipynb).
diff --git a/images/pairwise_cross_encoder_example.png b/images/pairwise_cross_encoder_example.png new file mode 100644 index 0000000000000000000000000000000000000000..de6543c88af2e5585c4c1e90e708206e9fe714d7 GIT binary patch literal 235054 zcmeFabzIcX7dHxmAOeD-Qqlq{-I6OMEg>PGEZrsDODIT(lprk9f}|qSs7QA=A|)M5 zZGP@9`2EH6{B!T?#_K+>M`ZcTerC>@nKOCLdCwTB^+<{QGTmi7JUnt0Wd$8PJkm;R zxcU+i_U~7dZ&&f~$eirt<+W7g<(akIT&(RJt?=-aBU22BpFHlmnQg42VvA3h|6-mn zk?w)&C7$3z*2zmM%DPSSQHPQbiq*0hu_`9NaFS3b;@AI9Q?;Q-nMZu23`OxWPI9shI|st0GN3G8 zDVN%=;e861z12#+Pe{pS!ITOGX-9Ige2zHQd1WRQoC0UCIbJvwB8K}mZpnV=E(Le8 znAZu%iyZ;neLyNo>PIkz@qJrXLxoU5$dm8JbyRuD=|s=dZVPef8#=rKy}DRZPY|r5 z81>3BMcV#bn!71F7{9Ijf{F6=HV(=Nl>_tKF+?x-a~f*%FUEs+e_e3C))r35cfDJl zYD|>gii&Eqc@V)(8&Nh6UFt%h?*&S0EpvPvL%Ar(m1i)Ga9?9DkW+s-S+Di>8bK9D z8}Gqv+nt)ePS&fO)~ycVnqF4h!4NF6TGw0EM6&I(${|pCpcLU zJl(M?-o8_QJz4O@HH9kRc|l=b;Tm&v_4vYs(hY}I(AS^0j+Z_u@ZqY%*SI_TKX?3wTN;QO*$+Ejllry+dt!T*DJjVfrtZqmgk;n_2P_d=d$W4@Aq`)a%X3}I}0KuEfux<=v~UToRv)H`CYtI zrp?Vw$wLilU$Wq)`MpynRN+S({G2@e*1E8OmmjnWzNb)MK&1_aa`s(H$LBJofITNL zX{8_x(V`?Vm%XM;uw-_~`ene%R51O@YOuN1<Pcd{Rx{TNZ}F+W zTDdaJzHBHWXe6Bb$?#i|^2Lk6t3>86(%D2`QT+<9Ou)N+J@VnT1mW8RT@P=+y6`5h zS6($y(2~5GD=$yH@hF^4c_*+l@a?$ zE_x9D``V{#We>e`kA9OJvidPNDS>mPX%s2M9D1EyPVM744Ot$~V#jsyS5ZmmU#< zFQoBjBxt0o-{H`u{Cw>S<)iN(M`eAKZeJsR<)z@_b93aCc$;0@k2cS?xwfS?(O(wk z6p;#otm26%m8#o}?}K&KjWniJBp%kwZ7>HiJ0$dVIWP0ONf^pytCchFGBdG*SwL(j zI-l-}UI(jkD?WImYN$FTXP5gl*F($iy@al02}mR|Lq1EsEPq^E^YO0sg1xQn6Z=!! zHiuUt)(*P%TSNDY_O+JSG}2a;mj>I1uYY3ycO-@hu@s* z6u+5-X)|~;o@#`wa`)Zq^XucvsQ7fpNYu!&Y~M)H=!OxphS$#1?(rw58u4kV?KjhU z)5J9{_9wsjJs$pU+gRS@9-n&WZn9R#t1_W4rfZNR3HJWDqcYb)7Gw6~C;w@TZwyb& zNX!-K-0Uny13sk+U6(YIQj^-|^5%%3D9m;AJv19)nSzY`3>BD@xv^OD!35IcobyM0O zAGwG72G>nC&Z5%cq=hoC`+6<(1vLd4c+|OBxv$^MT65+xeM8U`M$5_v))tAF9P2VDsbsqGMhmPGQ^blJb(}&k~=N%}M*$ z2j-w}Bkhq6R}_d-<;%ZIMD)ZJ=N093R(0&GcrbXsj%Z)tz&$jr3lcmJ{zjZ{Xi zxSDj&{)nGcTS7f+l>nGEp-G>G-tx z^aRrcJQsXJ#zNvlKZFv>8i!?9F-(eYWo;RJE&p2mli=&Fc=KD@w@WNflzo&{lpTtl zZQXun3=*5AnoXJ2n9VI_FOGbRSE6LiWldF@UCwZW&(b-2=X)>5bUxPpRNPi9q8*>h zkY_cdkvFKFn5Q38Pi;ZP7HRkDV%6;AjjEHStzR5J7@|1aJAN4a0BO)9@=Gr|va&sw z`xV#bt@2ex?ez}F3@2Ao=HpK~?S-THjhf^tJZer%(gBAtL)0TNBW-rE>-mSthh^*1 z7IGaQZjA_xyF2br(l2ebYtVWJHSV7_?kjQFYW&oggvxd*_f015zoG6aT|KgN6PmF0 zf{CN_P-&sevUNF+fAeuu$@Cly-0Shn-i9`@Haxz5r-afoQv8?5uL<$1;`DCwYwfGf zJ=;BMeKT2_{R5q#J3}eUs*f~;Gw)lOXO5~EaXUemCGA%7oeh&6OK&B{zZSds`)fSn z=F6sEoIk#Q3;tH}jpFrVj$LT3kfLCLRmsw*;$!HImp9OYQWb*OF_sb>;3os~8bJPm_^=5%|Y75auqbXxhBb+;G3| zVi2h)cN=vS^=Do;@F%~aiEFZ5FLfq{qlO2f;n933sb6c|P-LnlkKMD48V|JKFTt*A z`W}Kb7rv3ZT=)DN%}1jUZq~jka4;9=2PyEPc9q!;&lGb#e=85GCHu{>9({-jn~{6d zy)X7BMz3q4$D6^NPrR)H2NCt;h4iXo0n>NpeHMC24#s>$)n|TUpZNXRa9E zDwoKGSgvbt48fItR~h`(vN+wJF=9;VBqPJ zNrR8{s^3iPGJUOcT+>vLn(HQfyK$ys_xk*LlO&RH(WEPI8+n65olzIq*+cGlRUETX z$TNPHQVsAp5dijkI1f0XlB=KsP??W4=EG{;4D5TBSymc2#&>962T@&HdP8+ZYR;}a9ca}y_4LS#3O<2u+&7=}4)c%#^t3JU@ zyTAp3n+c2Ul+hYk{UgfiiHfy`2Hrhv_!1r=J{{ggYzQCwk-?|`SNI|R9Xx`w_ZRT+ zBJA)8|D<_@ed2x+upb=F`I8_i9FG|L?HcyulXKyp)TEU;1pkEbs z`Z&4b_~1$TNMM6bRvu=|K2DC#?h-!ItY;}CuwmS5K33+lBpwdZtWPwwnB`sEte8c4 z`FZ(SWiB%_GfTNyT1)6CJp4nB{U*(7>*3)l!N=$A?ak{g#OvZ_!zUmvF3!g<$R{Ys zgH6HX?(6Jf=ELLc&UVh^A3h3J?iOx#t{!$S&dfNzX67!Q9@4C=xQzbwb6!p>AG?3& zZTG$Hm;bQm%c=`GM#T!d1g?lTZW#?n%XsBT4gq0aK4;cZm`%-7=|EHLL=lCC# zPyS6QC@wDepQQg0^*@s8xm&r(yEtL<^pN>?d;KB)&&WT7Qhd0o|A#2f<$U%QD`=U^ zQhfhvG?~lG%Qx+??Rd*hK~op|#P+hYA4BZlJJ=8IX^4k!Bg&MKMuUg<08d3hR@VoA ztBC~Vr1+e-9>dH**P3>6fg==OyNg1&_|C(tw_NdZi;HQR>VhNrBGXM{2wrJ(K(5%v zki?nZDqp>KL1pw6+vU*v56PL^UZ||f{M1WZLDM`guhIF`L%8NBmrME&ggEG+cUzP&L5w0?zF8ZFrSjJ?$B6v!i9k1 zybmo;Aybe5F;506Ez9GD0L(IsdVsve{8t>C{S!HBcKIEU8xSJVjaI@178~AgrU$dS z1BuA^S;)`2MT3}a9wI!o&Zm~0xD;ASb--ER4?`SHB9cN%3>8(?^aIb7YOBwQ#V&=UN&(ZWi}M7F>!43@aEmTwrf*)KmRI;ve>VvwK|a z$2SRr*)4emmvJeI^JXC^$1RY)YjBf)FI=-z|M^9RmikL(aQT~@y2?w>6=3OIaEF&K zW=n=wxLgxVJ9}F!@z#TT5qY0%)pj=SPJqinC=!9gn|k$rB)7QvJAb{n{AM%$+Uw2u z(!A25EzlIC8c1%Rigs=yyiCV!`CRU0FGel03)3?;H1_y-VXI{dqPDc9SZi|OBKghg z`|sqefr2(mU}fX?#$BWfEfCBcPTy*I%J59u3h2Wo zs1@!v@z`Y78Z>2zrn+Z&3|3V?2A9W`XIBH(*aXIOHhlF**Y4O>Cj20|A&BH-UtMbe z%DKn2i$+gO*-fE*hNr~S2HkQ8UToBZa60)s)#OQ{D=yvGPGShL6|@!G-dG~nT5=$Z z&De|=WEQ8r-JV$uSOQ&`*XRiP!d=qg2XkdGk?@Bp%2njI=9AH!NX=vD7HF0~0PI>; zbbQUlu`|}l0>=_dfs15vrfKFo)fYMxS$>$}`d>uf8J98=c4=$sbmi7K)6UBA57Ex; zX1>w>+~TvWnE#6km(^hTQwC#&6nrPHSuWEn0_q&K|pmPzL8_FL08>#;iipd2L1=hom?8HY=Xl z*I{sl;Gww6H*FI$AAx$8BsrYQqCfG=f|)m$=Sn1Wb5QgEOznUL{ins1bJ{=S z@Rftyr{j=cp7CnGTayQvG@|Bk)Yy5W-Q+dyfq9YL;ubsyJ(wV-oG>=@9F8nwP-8Kd z)_3^SX3riQ89?7`d!Qw|WXvnxay$AU1-@1?1j?UKwRrqN^r)&S;Rd21KiSz3BEuE# zj<&+K&t}7AzSymnVdnfM`}h=5BcaC_jBemJo|`{*ctbpTFq=s_X6K{tBVey&TmRvc zL7j@XRouX+>hHSl(yRhz+9c;GNW*9)%lRm5F5N5XMDy9m&NyI42(fR>X!jjW#=h9) zds5M(tllK~#xjtnI`?|do8a{T)Al8ew3Op}wb%h{g;4DR0k%$~)3RP0Fh$Y`A2`ZW ze=!zD}sOQV`pH-ot@s z)2L-$@`~n&`q4G*OC+jHBXv`ithET8`()zV5x=?3dUHH<--MNk2J}PW1Bll*%+y%8 zDfRVRz9o^WGELMu4OcU4UqaKAvA-ZJu-bS-_<0qg>KCsI5 zU|El1Q*S|1qk3EX9~_B{8p&x~EU;RIRj9?^cvcQlQ!K}>AD?A+{FNO@9PZuW5khLF zF&cYJLAY<653u#jwHWrpyhhfd=8 zjM41d`$SF?oAF?s(~uQVrF%Zb6uB@8r4Bw09VYg0{%`gj|7Y3TgdqmHB_vuIC*J2* z>Sl4(m>-*Pyq8(x&f~X}C0^Fw>b&!C@gr=k#N(7-Le1}`(Bop?_V)y;j{UnrvA1k6 zf%>1GCeV-5z*3IVHu;i6bT2M^GE(h39To^rss>I|!WFE5eZ!$7S?4Dfy#}~iz9Y-O zcUm~6W8a<@Cy<i_MOh688`MxteEw_ij}462sL}eyvyGL1r@Mp zV;5xoPnPGI;ly%>;Qi%hyPD*T{Q?Uzc5F6WmD;fZ}8AAhl{ia;KmYF_k)s97bBhm>wt9{d6g*$N>x4=TlNpO zUCd%11Xj6lbG8dayVz_@mOA(&9|GgDvf zJuO(GT}$Vfsbx5!cnc)MWhB^1?hpe%o8$kli|8!FFcUI zCA9ABABbQ2=%03@92niuY68l!FXZm7vj|v}zc|XF9JmZNgk(f~0No{epQv?*UHZ0l zZ%QTOb!={2o0_nMBhDYpBG)b#jYc}bfXP+THJsXWW_AxNb-fD+MNC}E@r#s^Y8A$ zn^8hH(~$$SkX4M(3A7IAMceFv+<~cGN^2fZxHCwrv&wKrA zABlgtW0DYN7lZ&^@KSFA+a^V+3x`S_<~DX~R}JV;(H!1<{|@m zPZmCqh{A2mmCeXX*-pUj@%llB2TM05_yfpDfY03CYpnd?C`F?1?X%r@&bLmS$cxF^c|xP) zZ^>6|gML#_PK3Ot$PNb^Y1k=6+vTOi-c2uqrQJ&9yUti%{VwskGGluE;_n#=F5$=I zH;Et-oNF#g!^^xdO%Vf~>pi4&Dj|lDI*eSH8`oXzJcO-RPQ1Apid!0j9=}+j$u0(& z=N#R>SnJ>LlQQh_Ekd!3C?dAoog8EMVwOw1B`}Fg&cZjyA1Wtkln^*~wm;Kd^Q4@$ zy+;?5z?`W|Jev^PP~5-C{AEa2n1)4G^!=4DEcD*mSrf9ZdGBrc3nMlgN# zbLuf)hQ9^+E1|!A=~TrPri=AUmC$OS*OGHnllnHjWMA`LyL0MvYL0?lDt}Ff_w_7z%IcyCs&6=t zv&VHjS2%xr&i^u_V@MKx!QcNf8C&IY>DzmGVH?5s8HfrG za%4+tnlcT7?c#{&)tcRc#068}wK|=Mk(7{>Yc;ld;IqgSQ)1X;hXKwmp-VaialC5@ z4E0ks5DP1>eDa1}=IB(9= zmOxcO0$NE@ev5ICIb~$NkE>N!DJ+)#e~2cKP#n$G3p{c*!7tRqGQ2}wu%@byv)vYW zCZTJ2NlmVK{Mf-K*Ad^IYrLTDE&8F2nQiRyx$gCeQyr(Nsr+C*Vm6N0$9#2>Z6|xe5~zSdYhus_7_t#$->ymP z>!91cVH)Oime8M~KOWqs5at))%h#6WmnZz{6cwV(XlrV2qMR3M8h$Bs<~l*5)L?5{ zW5UCWU&*c#*4`yz_00*1^ks>?97@Z2$@wvv!odRqDwrJI4MHIW%GpAiSIZ$p9IG#d z?_IKf#r#D>fU=8#T)mgnPM5NmQr0!ooH>b@EqiB5TUOm*;RM=)MAyFNDrm+7Ol|pTAOOT6Qa)p+| zOG-yWh#};ltWf(X#?eT6>#9QSQ|!vOJkt^8M$%Mx8pd<(=nP8{vKb!xZX%2IN#Xpp zyFN`XY&6~xV!cTRaIAT6{}-*1=TW5^CDyTXX6+-RjxJAhBW8nw8ckH0x^Nae7(9Bs z62JNbz4_%_EZv!BZGU)ZOlN}ZV<^wL<7mKVpRCN2hXj}4jMJidPYY|(R%wpaHhs(vDrjj&2$)v3dAy{;h+b@o9A2yPRg!cJ6w2bHn`I^< zUq&V4Lt}eej@`NbO zL~kmz#9qPWVDb{tXoEyYr#PtK8|0(Pfv9q}nD0{|lKlBG@t?y$8p$?Xjs}S(_&HrxFs6bypO8Lr0R2Y0)T=MG<MOB zpTzC~EKCEl*N~!hvDx&}fWhM<#YdwkS3{r<AxHEjq!C&CV4XpyYbmRt;J&}$Y zr+xF=KQqxXti$tC7*W7?W+@vRx_|^aI+2>Mud&(%77|k{M@F|t8ou{7%WhBB-gb19 zNb`K~&R!OV8Ch#LA;>ii^omn%ko_u_0Uoaa1aoJ_|`znTmw+?|*8>Wp1Ax}VHWDeIy zMFGLJ3Aq838j;*{ORQ9Tu#gln+?-tC^lE133weah{p~uloH?&_M%puslgp=`8&P4& zv%o3_1fX6+FnRh315CmysqeHUYO0V4p=@mDle5bX=wV-ogyO$^SlV2j=(Gj(AJ25> z;zYcd1nsM?r{nxO%NUDK_i=t9KBKcN&M;Y46e>ab!btANt))v>0E)uN>94DeL@rv4hgR*82B7^qkzK;DXN* z4vN`4_rud0MC1+DcW=t!ao3C)aveB+6=<6+qpeqk)KXqBeP7mZlxRa5$Fl0&H>ihb zcu9$;=HxjZC1vbNCgAN5UOv3Q^8)XQed$O2<*87MS9Qih9w``S7Q$8?7hkYEVdtxacMQt$#t4L{}^us#6K;YRm1xJK(91xGLT) zwop>0bgDP`b|En0`^uAd4U*thXc7y&6XD>8$0OWNzVZ?Sso|P{266G>psvU(Z#Jtg z&&|QHpbx>@OgKel_%Vl+!xzy5IF- z3UUT*`O$Q3_AAUHnVV~~9nDuBK1-ovvSnbfi%&fU&o!P4X1#;frGAvQqNIs}g&r=ylrVwog zEo5K~yFUpsIRRr~ozx!}2X9YpkXx0mXz&hxHd__b3V&YzLnJ59N4}p={P=FwVVzSY zoZJ$_euI}OwU)@^x=Sab2ayM|hbL7YbRDIkTTlYC8{Z!sgH>MkM3iNor8oyT%Rq{4 zl3R95=l*PqD!57gE$Ofr@%(Qqd7^QzB%;L5px%El;BLSTCVEtG-#PY2ar4_}bs{(5 z?t53b?F{i@+%NKfA$?T(SOE+v!^cisea|33`Cg{R90YYhvhJ4v;kl8~|4Kc_dIB96 zyz$3k-I#X_-N9>c*7_w{aLDPBthYgSL2peGTvMdSNSQB)ekMKdGKqKE&#dLy3`>DI zFwS0?KR)1fXTD+R{t87qfhYG?HfJMXjdWie(nm#^Z{58xwuBBR58gfJ^9F)Nj)BXl zn3XMyRgZjH%m_>+!yb&m`_GYJ72_n7w*_?z{2CW3@hh{=Se?Vu3^oZbU8610Im>_Y zPyT0cvr^9sgpp)=?-_T+9Pu1&D2pW);N55Nu`vn!P=)Xk-S`uFQM}JWmvpms|6tne zv+!hD<@HKBkmU4uGqi*y{oa2tYBi67nG@gLJ1_M1d7;mMb1g=k4-z`HQa1L3z7w^2 z5rve%vd)2U{~J_ig251i9S|mQ_<=0PF31FXUV@hdL(>rwF^UftIlAEN1gEtO%Cf8X z9{ft=N~&>t8hm1robL0ap~^j|`#p!JsM0A-%ug6Or^LSfZv6oxMx$!d($im2+mGkcrn^(8|{5}9Rr5ak;n z0bh;MKEe_MFD+C)2)liQR^Bf+mhtx!0 z^s0SQ8T73BCbXaZfg?2zw&83wZd+bdru2 z6ZYWU0Vwkupzvb;%}iBS2k;^k#+;q!!`RTB^I>fb5ZZ^&C_ToLVd)$n@H^5QJ!l)L zd!M8)dRf=t-q;nkt{G!Uacv#EPJg8vfqYZil5()eyZun6WCjWEv57{!zo92{;CUMc zNOfF7`m-C^}cttScXSZRR*{pUp{9a{`L=Q{n=9M<&dpQmc`9cM%iceJ=3Wxo{4_` zJgfR<Z+O*{ci4#ini3`O}-NV6pMyPx9)J2 zmyPR-Iq&}Fc~~B-OzI~V(Ch0{6ZWb8;!)hZ`SRsg$*_1>1##3}+4~~e)g1PfH(s`N z%f*+9b&NL%_}mfKdJ6~Mk1eDaJQH!+cW4ovgZF!vAI;}N-=VxClC^!_jjP_hI1@g$ zV9wAqb&R0(1Gd$uvcQ5Z(of5-G&u3~@>l9Y-vNaukgpf1)iWKdyFP7;&NyqKjhzNb z(=`1f2f)|NU1ss=9G=jt+rj2GMAiS4)q5GXMhrR)=|z{eAW9K*sc(Uj(u$0rZD7Bt z08-mj(Cj3y*6*@UgqZS+PUPx@?+zkLBl+&YuxNTTNO}Y%KVO#gIkKi++h55=!0n|3CkyZ1*$6ZOUH|CIcnk^A`nKEWDw9?(Xxb?~+R5le^&NJnTddxsZ z7@W%x&b;}g@0FI~!S8SD&z!tE*v~uSxI~ScEn?#tTvmsVarV|wOOxm@!QLL zNiLfZfQx=VLQG>#dUO3ye5j(hhtJaC!~Jd>t_w>e5v?t?{oX-$_HFJk@xtM18YqGJ zU3q}H!jpmFj>$F*gxQ@Jf9Ct+hD1sxP&W{`bC}rz∨i>;q}k&iZX0)=xA)yiyRi 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

vhfx;VQlA|c2DCVQn@U@p!6!@4o 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

>YeBb!U(TR;} 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%0Dl+jG%qsky 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.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "backcall" @@ -36,9 +36,32 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "black" +version = "22.6.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} +typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + [[package]] name = "bleach" -version = "5.0.0" +version = "5.0.1" description = "An easy safelist-based HTML-sanitizing tool." category = "dev" optional = false @@ -49,8 +72,8 @@ six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0)"] -dev = ["pip-tools (==6.5.1)", "pytest (==7.1.1)", "flake8 (==4.0.1)", "tox (==3.24.5)", "sphinx (==4.3.2)", "twine (==4.0.0)", "wheel (==0.37.1)", "hashin (==0.17.0)", "black (==22.3.0)", "mypy (==0.942)"] +dev = ["mypy (==0.961)", "black (==22.3.0)", "wheel (==0.37.1)", "twine (==4.0.1)", "tox (==3.25.0)", "Sphinx (==4.3.2)", "pytest (==7.1.2)", "pip-tools (==6.6.2)", "hashin (==0.17.0)", "flake8 (==4.0.1)", "build (==0.8.0)"] +css = ["tinycss2 (>=1.1.0,<1.2)"] [[package]] name = "captum" @@ -73,7 +96,7 @@ tutorials = ["flask", "ipython", "ipywidgets", "jupyter", "flask-compress", "tor [[package]] name = "certifi" -version = "2022.5.18.1" +version = "2022.6.15" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -81,7 +104,7 @@ python-versions = ">=3.6" [[package]] name = "cffi" -version = "1.15.0" +version = "1.15.1" description = "Foreign Function Interface for Python calling C code." category = "dev" optional = false @@ -100,18 +123,30 @@ python-versions = ">=3.6.1" [[package]] name = "charset-normalizer" -version = "2.0.12" +version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.5.0" +python-versions = ">=3.6.0" [package.extras] unicode_backport = ["unicodedata2"] +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.5" description = "Cross-platform colored terminal text." category = "main" optional = false @@ -128,9 +163,23 @@ python-versions = "*" [package.extras] test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] +[[package]] +name = "coverage" +version = "6.4.4" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + [[package]] name = "cryptography" -version = "37.0.2" +version = "37.0.4" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "dev" optional = false @@ -165,7 +214,7 @@ python-versions = ">=3.5" [[package]] name = "distlib" -version = "0.3.4" +version = "0.3.5" description = "Distribution utilities" category = "dev" optional = false @@ -173,27 +222,27 @@ python-versions = "*" [[package]] name = "docutils" -version = "0.18.1" +version = "0.19" description = "Docutils -- Python Documentation Utilities" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" [[package]] name = "filelock" -version = "3.7.1" +version = "3.8.0" description = "A platform independent file lock." category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] -testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] +docs = ["furo (>=2022.6.21)", "sphinx (>=5.1.1)", "sphinx-autodoc-typehints (>=1.19.1)"] +testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "pytest-timeout (>=2.1)"] [[package]] name = "fonttools" -version = "4.33.3" +version = "4.36.0" description = "Tools to manipulate font files" category = "main" optional = false @@ -215,14 +264,15 @@ woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] [[package]] name = "huggingface-hub" -version = "0.7.0" -description = "Client library to download and publish models on the huggingface.co hub" +version = "0.8.1" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" category = "main" optional = false python-versions = ">=3.7.0" [package.dependencies] filelock = "*" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} packaging = ">=20.9" pyyaml = ">=5.1" requests = "*" @@ -230,17 +280,17 @@ tqdm = "*" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["pytest", "datasets", "soundfile", "black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] -dev = ["pytest", "datasets", "soundfile", "black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] +all = ["pytest", "pytest-cov", "datasets", "soundfile", "black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] +dev = ["pytest", "pytest-cov", "datasets", "soundfile", "black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] fastai = ["toml", "fastai (>=2.4)", "fastcore (>=1.3.27)"] quality = ["black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] tensorflow = ["tensorflow", "pydot", "graphviz"] -testing = ["pytest", "datasets", "soundfile"] +testing = ["pytest", "pytest-cov", "datasets", "soundfile"] torch = ["torch"] [[package]] name = "identify" -version = "2.5.1" +version = "2.5.3" description = "File identification library for Python" category = "dev" optional = false @@ -259,23 +309,24 @@ python-versions = ">=3.5" [[package]] name = "importlib-metadata" -version = "4.11.4" +version = "4.12.0" description = "Read metadata from Python packages" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" [package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "ipython" -version = "7.31.1" +version = "7.34.0" description = "IPython: Productive Interactive Computing" category = "main" optional = false @@ -334,7 +385,7 @@ trio = ["trio", "async-generator"] [[package]] name = "keyring" -version = "23.6.0" +version = "23.8.2" description = "Store and access your passwords safely." category = "dev" optional = false @@ -348,19 +399,22 @@ SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} [package.extras] docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [[package]] name = "kiwisolver" -version = "1.4.2" +version = "1.4.4" description = "A fast implementation of the Cassowary constraint solver" category = "main" optional = false python-versions = ">=3.7" +[package.dependencies] +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} + [[package]] name = "matplotlib" -version = "3.5.2" +version = "3.5.3" description = "Python plotting package" category = "main" optional = false @@ -375,11 +429,11 @@ packaging = ">=20.0" pillow = ">=6.2.0" pyparsing = ">=2.2.1" python-dateutil = ">=2.7" -setuptools_scm = ">=4" +setuptools_scm = ">=4,<7" [[package]] name = "matplotlib-inline" -version = "0.1.3" +version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" category = "main" optional = false @@ -390,27 +444,35 @@ traitlets = "*" [[package]] name = "more-itertools" -version = "8.13.0" +version = "8.14.0" description = "More routines for operating on iterables, beyond itertools" -category = "main" +category = "dev" optional = false python-versions = ">=3.5" +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "nodeenv" -version = "1.6.0" +version = "1.7.0" description = "Node.js virtual environment builder" category = "dev" optional = false -python-versions = "*" +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" [[package]] name = "numpy" -version = "1.22.4" +version = "1.21.1" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" [[package]] name = "packaging" @@ -435,6 +497,14 @@ python-versions = ">=3.6" qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["docopt", "pytest (<6.0.0)"] +[[package]] +name = "pathspec" +version = "0.9.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + [[package]] name = "pexpect" version = "4.8.0" @@ -456,14 +526,14 @@ python-versions = "*" [[package]] name = "pillow" -version = "9.1.1" +version = "9.2.0" description = "Python Imaging Library (Fork)" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinx-rtd-theme (>=1.0)", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] [[package]] @@ -493,16 +563,19 @@ test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytes name = "pluggy" version = "0.13.1" description = "plugin and hook calling mechanisms for python" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + [package.extras] dev = ["pre-commit", "tox"] [[package]] name = "pre-commit" -version = "2.19.0" +version = "2.20.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false @@ -511,6 +584,7 @@ python-versions = ">=3.7" [package.dependencies] cfgv = ">=2.0.0" identify = ">=1.0.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} nodeenv = ">=0.11.1" pyyaml = ">=5.1" toml = "*" @@ -518,7 +592,7 @@ virtualenv = ">=20.0.8" [[package]] name = "prompt-toolkit" -version = "3.0.29" +version = "3.0.30" description = "Library for building powerful interactive command lines in Python" category = "main" optional = false @@ -539,7 +613,7 @@ python-versions = "*" name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -553,12 +627,15 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pygments" -version = "2.12.0" +version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false python-versions = ">=3.6" +[package.extras] +plugins = ["importlib-metadata"] + [[package]] name = "pyparsing" version = "3.0.9" @@ -572,9 +649,9 @@ diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pytest" -version = "5.4.2" +version = "5.4.3" description = "pytest: simple powerful testing with Python" -category = "main" +category = "dev" optional = false python-versions = ">=3.5" @@ -582,6 +659,7 @@ python-versions = ">=3.5" atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=17.4.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} more-itertools = ">=4.0.0" packaging = "*" pluggy = ">=0.12,<1.0" @@ -592,6 +670,21 @@ wcwidth = "*" checkqa-mypy = ["mypy (==v0.761)"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +[[package]] +name = "pytest-cov" +version = "3.0.0" +description = "Pytest plugin for measuring coverage." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] + [[package]] name = "python-dateutil" version = "2.8.2" @@ -621,7 +714,7 @@ python-versions = ">=3.6" [[package]] name = "readme-renderer" -version = "35.0" +version = "36.0" description = "readme_renderer is a library for rendering \"readme\" descriptions for Warehouse" category = "dev" optional = false @@ -637,7 +730,7 @@ md = ["cmarkgfm (>=0.8.0)"] [[package]] name = "regex" -version = "2022.6.2" +version = "2022.8.17" description = "Alternative regular expression module, to replace re." category = "main" optional = false @@ -645,7 +738,7 @@ python-versions = ">=3.6" [[package]] name = "requests" -version = "2.28.0" +version = "2.28.1" description = "Python HTTP for Humans." category = "main" optional = false @@ -653,13 +746,13 @@ python-versions = ">=3.7, <4" [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2.0.0,<2.1.0" +charset-normalizer = ">=2,<3" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-toolbelt" @@ -685,7 +778,7 @@ idna2008 = ["idna"] [[package]] name = "rich" -version = "12.4.4" +version = "12.5.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "dev" optional = false @@ -694,13 +787,14 @@ python-versions = ">=3.6.3,<4.0.0" [package.dependencies] commonmark = ">=0.9.0,<0.10.0" pygments = ">=2.6.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] [[package]] name = "secretstorage" -version = "3.3.2" +version = "3.3.3" description = "Python bindings to FreeDesktop.org Secret Service API" category = "dev" optional = false @@ -764,7 +858,7 @@ python-versions = ">=3.7" [[package]] name = "torch" -version = "1.11.0" +version = "1.12.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" category = "main" optional = false @@ -792,7 +886,7 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.2.2.post1" +version = "5.3.0" description = "" category = "main" optional = false @@ -803,7 +897,7 @@ test = ["pre-commit", "pytest"] [[package]] name = "transformers" -version = "4.19.4" +version = "4.21.1" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" category = "main" optional = false @@ -812,6 +906,7 @@ python-versions = ">=3.7.0" [package.dependencies] filelock = "*" huggingface-hub = ">=0.1.0,<1.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} numpy = ">=1.17" packaging = ">=20.0" pyyaml = ">=5.1" @@ -821,19 +916,20 @@ tokenizers = ">=0.11.1,<0.11.3 || >0.11.3,<0.13" tqdm = ">=4.27" [package.extras] -all = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "torch (>=1.0)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.3.5)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)"] -audio = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] +accelerate = ["accelerate (>=0.10.0)"] +all = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text", "torch (>=1.0,<1.12)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.4.1)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "accelerate (>=0.10.0)"] +audio = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)"] codecarbon = ["codecarbon (==1.2.0)"] -deepspeed = ["deepspeed (>=0.6.4)"] -deepspeed-testing = ["deepspeed (>=0.6.4)", "pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "pytest-timeout", "black (>=22.0,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "optuna"] -dev = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "torch (>=1.0)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.3.5)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "pytest-timeout", "black (>=22.0,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "hf-doc-builder", "scikit-learn"] -dev-tensorflow = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "pytest-timeout", "black (>=22.0,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "pillow", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "hf-doc-builder", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] -dev-torch = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "pytest-timeout", "black (>=22.0,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "torch (>=1.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "hf-doc-builder", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] -docs = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "torch (>=1.0)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.3.5)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "hf-doc-builder"] +deepspeed = ["deepspeed (>=0.6.5)", "accelerate (>=0.10.0)"] +deepspeed-testing = ["deepspeed (>=0.6.5)", "accelerate (>=0.10.0)", "pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "optuna"] +dev = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text", "torch (>=1.0,<1.12)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.4.1)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "accelerate (>=0.10.0)", "pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "hf-doc-builder", "scikit-learn"] +dev-tensorflow = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "pillow", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "hf-doc-builder", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)"] +dev-torch = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "torch (>=1.0,<1.12)", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "hf-doc-builder", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] +docs = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text", "torch (>=1.0,<1.12)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.4.1)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "accelerate (>=0.10.0)", "hf-doc-builder"] docs_specific = ["hf-doc-builder"] fairscale = ["fairscale (>0.3)"] -flax = ["jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.3.5)", "optax (>=0.0.8)"] -flax-speech = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] +flax = ["jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.4.1)", "optax (>=0.0.8)"] +flax-speech = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)"] ftfy = ["ftfy"] integrations = ["optuna", "ray", "sigopt"] ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)"] @@ -841,7 +937,7 @@ modelcreation = ["cookiecutter (==1.7.3)"] onnx = ["onnxconverter-common", "tf2onnx", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] optuna = ["optuna"] -quality = ["black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)"] +quality = ["black (==22.3)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)"] ray = ["ray"] retrieval = ["faiss-cpu", "datasets"] sagemaker = ["sagemaker (>=2.31.0)"] @@ -849,16 +945,16 @@ sentencepiece = ["sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)"] serving = ["pydantic", "uvicorn", "fastapi", "starlette"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] -speech = ["torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] -testing = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "pytest-timeout", "black (>=22.0,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)"] -tf = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx"] -tf-cpu = ["tensorflow-cpu (>=2.3)", "onnxconverter-common", "tf2onnx"] -tf-speech = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] +speech = ["torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)"] +testing = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)"] +tf = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text"] +tf-cpu = ["tensorflow-cpu (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text"] +tf-speech = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)"] timm = ["timm"] tokenizers = ["tokenizers (>=0.11.1,!=0.11.3,<0.13)"] -torch = ["torch (>=1.0)"] -torch-speech = ["torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] -torchhub = ["filelock", "huggingface-hub (>=0.1.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf (<=3.20.1)", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.0)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "tqdm (>=4.27)"] +torch = ["torch (>=1.0,<1.12)"] +torch-speech = ["torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "resampy (<0.3.1)"] +torchhub = ["filelock", "huggingface-hub (>=0.1.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf (<=3.20.1)", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.0,<1.12)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "tqdm (>=4.27)"] vision = ["pillow"] [[package]] @@ -880,9 +976,17 @@ rfc3986 = ">=1.4.0" rich = ">=12.0.0" urllib3 = ">=1.26.0" +[[package]] +name = "typed-ast" +version = "1.5.4" +description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "typing-extensions" -version = "4.2.0" +version = "4.3.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false @@ -890,11 +994,11 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.9" +version = "1.26.11" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] @@ -903,21 +1007,21 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.14.1" +version = "20.16.3" description = "Virtual Python Environment builder" category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" [package.dependencies] -distlib = ">=0.3.1,<1" -filelock = ">=3.2,<4" -platformdirs = ">=2,<3" -six = ">=1.9.0,<2" +distlib = ">=0.3.5,<1" +filelock = ">=3.4.1,<4" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.8\""} +platformdirs = ">=2.4,<3" [package.extras] -docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] +docs = ["proselint (>=0.13)", "sphinx (>=5.1.1)", "sphinx-argparse (>=0.3.1)", "sphinx-rtd-theme (>=1)", "towncrier (>=21.9)"] +testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] [[package]] name = "wcwidth" @@ -937,142 +1041,124 @@ python-versions = "*" [[package]] name = "zipp" -version = "3.8.0" +version = "3.8.1" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" +category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "1.1" -python-versions = "^3.9" -content-hash = "88c555eb128bbdcdc9bffe98c4583b414955de750ac540c197e9f63ddc03e29c" +python-versions = ">=3.7,<4.0" +content-hash = "1d07b81ddad164a0dfc2879d5e7b57cd511ea17ccfce529e088eb72f7d2d5c3f" [metadata.files] appnope = [ {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, ] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] +atomicwrites = [] +attrs = [] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] +black = [] bleach = [ - {file = "bleach-5.0.0-py3-none-any.whl", hash = "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1"}, - {file = "bleach-5.0.0.tar.gz", hash = "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"}, + {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, + {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, ] captum = [ {file = "captum-0.5.0-py3-none-any.whl", hash = "sha256:b27996b4f7f0606d035ca210b723104ab209be55ca44bb65f46e036bcdf788e0"}, {file = "captum-0.5.0.tar.gz", hash = "sha256:84af2c8793d34c440a351793b5ca705b8542745e2dc8bc24afb1d9b86f3bf6ec"}, ] -certifi = [ - {file = "certifi-2022.5.18.1-py3-none-any.whl", hash = "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a"}, - {file = "certifi-2022.5.18.1.tar.gz", hash = "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7"}, -] +certifi = [] cffi = [ - {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, - {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, - {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, - {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, - {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, - {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, - {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, - {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, - {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, - {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, - {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, - {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, - {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, - {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, - {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, - {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, - {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, ] cfgv = [ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] -charset-normalizer = [ - {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, - {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +charset-normalizer = [] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] +colorama = [] commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] -cryptography = [ - {file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:ef15c2df7656763b4ff20a9bc4381d8352e6640cfeb95c2972c38ef508e75181"}, - {file = "cryptography-37.0.2-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:3c81599befb4d4f3d7648ed3217e00d21a9341a9a688ecdd615ff72ffbed7336"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2bd1096476aaac820426239ab534b636c77d71af66c547b9ddcd76eb9c79e004"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:31fe38d14d2e5f787e0aecef831457da6cec68e0bb09a35835b0b44ae8b988fe"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:093cb351031656d3ee2f4fa1be579a8c69c754cf874206be1d4cf3b542042804"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59b281eab51e1b6b6afa525af2bd93c16d49358404f814fe2c2410058623928c"}, - {file = "cryptography-37.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:0cc20f655157d4cfc7bada909dc5cc228211b075ba8407c46467f63597c78178"}, - {file = "cryptography-37.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:f8ec91983e638a9bcd75b39f1396e5c0dc2330cbd9ce4accefe68717e6779e0a"}, - {file = "cryptography-37.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:46f4c544f6557a2fefa7ac8ac7d1b17bf9b647bd20b16decc8fbcab7117fbc15"}, - {file = "cryptography-37.0.2-cp36-abi3-win32.whl", hash = "sha256:731c8abd27693323b348518ed0e0705713a36d79fdbd969ad968fbef0979a7e0"}, - {file = "cryptography-37.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:471e0d70201c069f74c837983189949aa0d24bb2d751b57e26e3761f2f782b8d"}, - {file = "cryptography-37.0.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a68254dd88021f24a68b613d8c51d5c5e74d735878b9e32cc0adf19d1f10aaf9"}, - {file = "cryptography-37.0.2-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:a7d5137e556cc0ea418dca6186deabe9129cee318618eb1ffecbd35bee55ddc1"}, - {file = "cryptography-37.0.2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aeaba7b5e756ea52c8861c133c596afe93dd716cbcacae23b80bc238202dc023"}, - {file = "cryptography-37.0.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95e590dd70642eb2079d280420a888190aa040ad20f19ec8c6e097e38aa29e06"}, - {file = "cryptography-37.0.2-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1b9362d34363f2c71b7853f6251219298124aa4cc2075ae2932e64c91a3e2717"}, - {file = "cryptography-37.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e53258e69874a306fcecb88b7534d61820db8a98655662a3dd2ec7f1afd9132f"}, - {file = "cryptography-37.0.2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:1f3bfbd611db5cb58ca82f3deb35e83af34bb8cf06043fa61500157d50a70982"}, - {file = "cryptography-37.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:419c57d7b63f5ec38b1199a9521d77d7d1754eb97827bbb773162073ccd8c8d4"}, - {file = "cryptography-37.0.2-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:dc26bb134452081859aa21d4990474ddb7e863aa39e60d1592800a8865a702de"}, - {file = "cryptography-37.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b8398b3d0efc420e777c40c16764d6870bcef2eb383df9c6dbb9ffe12c64452"}, - {file = "cryptography-37.0.2.tar.gz", hash = "sha256:f224ad253cc9cea7568f49077007d2263efa57396a2f2f78114066fd54b5c68e"}, -] +coverage = [] +cryptography = [] cycler = [ {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, @@ -1081,42 +1167,18 @@ decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -distlib = [ - {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, - {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, -] -docutils = [ - {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, - {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, -] -filelock = [ - {file = "filelock-3.7.1-py3-none-any.whl", hash = "sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404"}, - {file = "filelock-3.7.1.tar.gz", hash = "sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04"}, -] -fonttools = [ - {file = "fonttools-4.33.3-py3-none-any.whl", hash = "sha256:f829c579a8678fa939a1d9e9894d01941db869de44390adb49ce67055a06cc2a"}, - {file = "fonttools-4.33.3.zip", hash = "sha256:c0fdcfa8ceebd7c1b2021240bd46ef77aa8e7408cf10434be55df52384865f8e"}, -] -huggingface-hub = [ - {file = "huggingface_hub-0.7.0-py3-none-any.whl", hash = "sha256:fd448fd0b738d803411c79bdf9f12f0ba171fecd24a59edf88c1391b473bc2c0"}, - {file = "huggingface_hub-0.7.0.tar.gz", hash = "sha256:8154dc2fad84b32a4bca18372a647d9381ed8550a80b11050758357b8fcea639"}, -] -identify = [ - {file = "identify-2.5.1-py2.py3-none-any.whl", hash = "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa"}, - {file = "identify-2.5.1.tar.gz", hash = "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82"}, -] +distlib = [] +docutils = [] +filelock = [] +fonttools = [] +huggingface-hub = [] +identify = [] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] -importlib-metadata = [ - {file = "importlib_metadata-4.11.4-py3-none-any.whl", hash = "sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec"}, - {file = "importlib_metadata-4.11.4.tar.gz", hash = "sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700"}, -] -ipython = [ - {file = "ipython-7.31.1-py3-none-any.whl", hash = "sha256:55df3e0bd0f94e715abd968bedd89d4e8a7bce4bf498fb123fed4f5398fea874"}, - {file = "ipython-7.31.1.tar.gz", hash = "sha256:b5548ec5329a4bcf054a5deed5099b0f9622eb9ea51aaa7104d215fece201d8c"}, -] +importlib-metadata = [] +ipython = [] jedi = [ {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, @@ -1125,128 +1187,17 @@ jeepney = [ {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, ] -keyring = [ - {file = "keyring-23.6.0-py3-none-any.whl", hash = "sha256:372ff2fc43ab779e3f87911c26e6c7acc8bb440cbd82683e383ca37594cb0617"}, - {file = "keyring-23.6.0.tar.gz", hash = "sha256:3ac00c26e4c93739e19103091a9986a9f79665a78cf15a4df1dba7ea9ac8da2f"}, -] -kiwisolver = [ - {file = "kiwisolver-1.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e395ece147f0692ca7cdb05a028d31b83b72c369f7b4a2c1798f4b96af1e3d8"}, - {file = "kiwisolver-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b7f50a1a25361da3440f07c58cd1d79957c2244209e4f166990e770256b6b0b"}, - {file = "kiwisolver-1.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c032c41ae4c3a321b43a3650e6ecc7406b99ff3e5279f24c9b310f41bc98479"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dcade8f6fe12a2bb4efe2cbe22116556e3b6899728d3b2a0d3b367db323eacc"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e45e780a74416ef2f173189ef4387e44b5494f45e290bcb1f03735faa6779bf"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d2bb56309fb75a811d81ed55fbe2208aa77a3a09ff5f546ca95e7bb5fac6eff"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b2d6c12f2ad5f55104a36a356192cfb680c049fe5e7c1f6620fc37f119cdc2"}, - {file = "kiwisolver-1.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:262c248c60f22c2b547683ad521e8a3db5909c71f679b93876921549107a0c24"}, - {file = "kiwisolver-1.4.2-cp310-cp310-win32.whl", hash = "sha256:1008346a7741620ab9cc6c96e8ad9b46f7a74ce839dbb8805ddf6b119d5fc6c2"}, - {file = "kiwisolver-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:6ece2e12e4b57bc5646b354f436416cd2a6f090c1dadcd92b0ca4542190d7190"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b978afdb913ca953cf128d57181da2e8798e8b6153be866ae2a9c446c6162f40"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f88c4b8e449908eeddb3bbd4242bd4dc2c7a15a7aa44bb33df893203f02dc2d"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e348f1904a4fab4153407f7ccc27e43b2a139752e8acf12e6640ba683093dd96"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c839bf28e45d7ddad4ae8f986928dbf5a6d42ff79760d54ec8ada8fb263e097c"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8ae5a071185f1a93777c79a9a1e67ac46544d4607f18d07131eece08d415083a"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c222f91a45da9e01a9bc4f760727ae49050f8e8345c4ff6525495f7a164c8973"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:a4e8f072db1d6fb7a7cc05a6dbef8442c93001f4bb604f1081d8c2db3ca97159"}, - {file = "kiwisolver-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:be9a650890fb60393e60aacb65878c4a38bb334720aa5ecb1c13d0dac54dd73b"}, - {file = "kiwisolver-1.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ec2e55bf31b43aabe32089125dca3b46fdfe9f50afbf0756ae11e14c97b80ca"}, - {file = "kiwisolver-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d1078ba770d6165abed3d9a1be1f9e79b61515de1dd00d942fa53bba79f01ae"}, - {file = "kiwisolver-1.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cbb5eb4a2ea1ffec26268d49766cafa8f957fe5c1b41ad00733763fae77f9436"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e6cda72db409eefad6b021e8a4f964965a629f577812afc7860c69df7bdb84a"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1605c7c38cc6a85212dfd6a641f3905a33412e49f7c003f35f9ac6d71f67720"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81237957b15469ea9151ec8ca08ce05656090ffabc476a752ef5ad7e2644c526"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:240009fdf4fa87844f805e23f48995537a8cb8f8c361e35fda6b5ac97fcb906f"}, - {file = "kiwisolver-1.4.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:240c2d51d098395c012ddbcb9bd7b3ba5de412a1d11840698859f51d0e643c4f"}, - {file = "kiwisolver-1.4.2-cp38-cp38-win32.whl", hash = "sha256:8b6086aa6936865962b2cee0e7aaecf01ab6778ce099288354a7229b4d9f1408"}, - {file = "kiwisolver-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:0d98dca86f77b851350c250f0149aa5852b36572514d20feeadd3c6b1efe38d0"}, - {file = "kiwisolver-1.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:91eb4916271655dfe3a952249cb37a5c00b6ba68b4417ee15af9ba549b5ba61d"}, - {file = "kiwisolver-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa4d97d7d2b2c082e67907c0b8d9f31b85aa5d3ba0d33096b7116f03f8061261"}, - {file = "kiwisolver-1.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71469b5845b9876b8d3d252e201bef6f47bf7456804d2fbe9a1d6e19e78a1e65"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8ff3033e43e7ca1389ee59fb7ecb8303abb8713c008a1da49b00869e92e3dd7c"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89b57c2984f4464840e4b768affeff6b6809c6150d1166938ade3e22fbe22db8"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffbdb9a96c536f0405895b5e21ee39ec579cb0ed97bdbd169ae2b55f41d73219"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a830a03970c462d1a2311c90e05679da56d3bd8e78a4ba9985cb78ef7836c9f"}, - {file = "kiwisolver-1.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f74f2a13af201559e3d32b9ddfc303c94ae63d63d7f4326d06ce6fe67e7a8255"}, - {file = "kiwisolver-1.4.2-cp39-cp39-win32.whl", hash = "sha256:e677cc3626287f343de751e11b1e8a5b915a6ac897e8aecdbc996cd34de753a0"}, - {file = "kiwisolver-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b3e251e5c38ac623c5d786adb21477f018712f8c6fa54781bd38aa1c60b60fc2"}, - {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c380bb5ae20d829c1a5473cfcae64267b73aaa4060adc091f6df1743784aae0"}, - {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:484f2a5f0307bc944bc79db235f41048bae4106ffa764168a068d88b644b305d"}, - {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8afdf533b613122e4bbaf3c1e42c2a5e9e2d1dd3a0a017749a7658757cb377"}, - {file = "kiwisolver-1.4.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42f6ef9b640deb6f7d438e0a371aedd8bef6ddfde30683491b2e6f568b4e884e"}, - {file = "kiwisolver-1.4.2.tar.gz", hash = "sha256:7f606d91b8a8816be476513a77fd30abe66227039bd6f8b406c348cb0247dcc9"}, -] -matplotlib = [ - {file = "matplotlib-3.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:03bbb3f5f78836855e127b5dab228d99551ad0642918ccbf3067fcd52ac7ac5e"}, - {file = "matplotlib-3.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49a5938ed6ef9dda560f26ea930a2baae11ea99e1c2080c8714341ecfda72a89"}, - {file = "matplotlib-3.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:77157be0fc4469cbfb901270c205e7d8adb3607af23cef8bd11419600647ceed"}, - {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5844cea45d804174bf0fac219b4ab50774e504bef477fc10f8f730ce2d623441"}, - {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c87973ddec10812bddc6c286b88fdd654a666080fbe846a1f7a3b4ba7b11ab78"}, - {file = "matplotlib-3.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a05f2b37222319753a5d43c0a4fd97ed4ff15ab502113e3f2625c26728040cf"}, - {file = "matplotlib-3.5.2-cp310-cp310-win32.whl", hash = "sha256:9776e1a10636ee5f06ca8efe0122c6de57ffe7e8c843e0fb6e001e9d9256ec95"}, - {file = "matplotlib-3.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:b4fedaa5a9aa9ce14001541812849ed1713112651295fdddd640ea6620e6cf98"}, - {file = "matplotlib-3.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ee175a571e692fc8ae8e41ac353c0e07259113f4cb063b0ec769eff9717e84bb"}, - {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e8bda1088b941ead50caabd682601bece983cadb2283cafff56e8fcddbf7d7f"}, - {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9480842d5aadb6e754f0b8f4ebeb73065ac8be1855baa93cd082e46e770591e9"}, - {file = "matplotlib-3.5.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6c623b355d605a81c661546af7f24414165a8a2022cddbe7380a31a4170fa2e9"}, - {file = "matplotlib-3.5.2-cp37-cp37m-win32.whl", hash = "sha256:a91426ae910819383d337ba0dc7971c7cefdaa38599868476d94389a329e599b"}, - {file = "matplotlib-3.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c4b82c2ae6d305fcbeb0eb9c93df2602ebd2f174f6e8c8a5d92f9445baa0c1d3"}, - {file = "matplotlib-3.5.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ebc27ad11df3c1661f4677a7762e57a8a91dd41b466c3605e90717c9a5f90c82"}, - {file = "matplotlib-3.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a32ea6e12e80dedaca2d4795d9ed40f97bfa56e6011e14f31502fdd528b9c89"}, - {file = "matplotlib-3.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a0967d4156adbd0d46db06bc1a877f0370bce28d10206a5071f9ecd6dc60b79"}, - {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2b696699386766ef171a259d72b203a3c75d99d03ec383b97fc2054f52e15cf"}, - {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f409716119fa39b03da3d9602bd9b41142fab7a0568758cd136cd80b1bf36c8"}, - {file = "matplotlib-3.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b8d3f4e71e26307e8c120b72c16671d70c5cd08ae412355c11254aa8254fb87f"}, - {file = "matplotlib-3.5.2-cp38-cp38-win32.whl", hash = "sha256:b6c63cd01cad0ea8704f1fd586e9dc5777ccedcd42f63cbbaa3eae8dd41172a1"}, - {file = "matplotlib-3.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:75c406c527a3aa07638689586343f4b344fcc7ab1f79c396699eb550cd2b91f7"}, - {file = "matplotlib-3.5.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a44cdfdb9d1b2f18b1e7d315eb3843abb097869cd1ef89cfce6a488cd1b5182"}, - {file = "matplotlib-3.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d8e129af95b156b41cb3be0d9a7512cc6d73e2b2109f82108f566dbabdbf377"}, - {file = "matplotlib-3.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:364e6bca34edc10a96aa3b1d7cd76eb2eea19a4097198c1b19e89bee47ed5781"}, - {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea75df8e567743207e2b479ba3d8843537be1c146d4b1e3e395319a4e1a77fe9"}, - {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:44c6436868186564450df8fd2fc20ed9daaef5caad699aa04069e87099f9b5a8"}, - {file = "matplotlib-3.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d7705022df2c42bb02937a2a824f4ec3cca915700dd80dc23916af47ff05f1a"}, - {file = "matplotlib-3.5.2-cp39-cp39-win32.whl", hash = "sha256:ee0b8e586ac07f83bb2950717e66cb305e2859baf6f00a9c39cc576e0ce9629c"}, - {file = "matplotlib-3.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:c772264631e5ae61f0bd41313bbe48e1b9bcc95b974033e1118c9caa1a84d5c6"}, - {file = "matplotlib-3.5.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:751d3815b555dcd6187ad35b21736dc12ce6925fc3fa363bbc6dc0f86f16484f"}, - {file = "matplotlib-3.5.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:31fbc2af27ebb820763f077ec7adc79b5a031c2f3f7af446bd7909674cd59460"}, - {file = "matplotlib-3.5.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4fa28ca76ac5c2b2d54bc058b3dad8e22ee85d26d1ee1b116a6fd4d2277b6a04"}, - {file = "matplotlib-3.5.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:24173c23d1bcbaed5bf47b8785d27933a1ac26a5d772200a0f3e0e38f471b001"}, - {file = "matplotlib-3.5.2.tar.gz", hash = "sha256:48cf850ce14fa18067f2d9e0d646763681948487a8080ec0af2686468b4607a2"}, -] -matplotlib-inline = [ - {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, - {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, -] -more-itertools = [ - {file = "more-itertools-8.13.0.tar.gz", hash = "sha256:a42901a0a5b169d925f6f217cd5a190e32ef54360905b9c39ee7db5313bfec0f"}, - {file = "more_itertools-8.13.0-py3-none-any.whl", hash = "sha256:c5122bffc5f104d37c1626b8615b511f3427aa5389b94d61e5ef8236bfbc3ddb"}, -] -nodeenv = [ - {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, - {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, -] -numpy = [ - {file = "numpy-1.22.4-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:ba9ead61dfb5d971d77b6c131a9dbee62294a932bf6a356e48c75ae684e635b3"}, - {file = "numpy-1.22.4-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:1ce7ab2053e36c0a71e7a13a7475bd3b1f54750b4b433adc96313e127b870887"}, - {file = "numpy-1.22.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7228ad13744f63575b3a972d7ee4fd61815b2879998e70930d4ccf9ec721dce0"}, - {file = "numpy-1.22.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43a8ca7391b626b4c4fe20aefe79fec683279e31e7c79716863b4b25021e0e74"}, - {file = "numpy-1.22.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a911e317e8c826ea632205e63ed8507e0dc877dcdc49744584dfc363df9ca08c"}, - {file = "numpy-1.22.4-cp310-cp310-win32.whl", hash = "sha256:9ce7df0abeabe7fbd8ccbf343dc0db72f68549856b863ae3dd580255d009648e"}, - {file = "numpy-1.22.4-cp310-cp310-win_amd64.whl", hash = "sha256:3e1ffa4748168e1cc8d3cde93f006fe92b5421396221a02f2274aab6ac83b077"}, - {file = "numpy-1.22.4-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:59d55e634968b8f77d3fd674a3cf0b96e85147cd6556ec64ade018f27e9479e1"}, - {file = "numpy-1.22.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c1d937820db6e43bec43e8d016b9b3165dcb42892ea9f106c70fb13d430ffe72"}, - {file = "numpy-1.22.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4c5d5eb2ec8da0b4f50c9a843393971f31f1d60be87e0fb0917a49133d257d6"}, - {file = "numpy-1.22.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64f56fc53a2d18b1924abd15745e30d82a5782b2cab3429aceecc6875bd5add0"}, - {file = "numpy-1.22.4-cp38-cp38-win32.whl", hash = "sha256:fb7a980c81dd932381f8228a426df8aeb70d59bbcda2af075b627bbc50207cba"}, - {file = "numpy-1.22.4-cp38-cp38-win_amd64.whl", hash = "sha256:e96d7f3096a36c8754207ab89d4b3282ba7b49ea140e4973591852c77d09eb76"}, - {file = "numpy-1.22.4-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:4c6036521f11a731ce0648f10c18ae66d7143865f19f7299943c985cdc95afb5"}, - {file = "numpy-1.22.4-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:b89bf9b94b3d624e7bb480344e91f68c1c6c75f026ed6755955117de00917a7c"}, - {file = "numpy-1.22.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d487e06ecbf1dc2f18e7efce82ded4f705f4bd0cd02677ffccfb39e5c284c7e"}, - {file = "numpy-1.22.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3eb268dbd5cfaffd9448113539e44e2dd1c5ca9ce25576f7c04a5453edc26fa"}, - {file = "numpy-1.22.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37431a77ceb9307c28382c9773da9f306435135fae6b80b62a11c53cfedd8802"}, - {file = "numpy-1.22.4-cp39-cp39-win32.whl", hash = "sha256:cc7f00008eb7d3f2489fca6f334ec19ca63e31371be28fd5dad955b16ec285bd"}, - {file = "numpy-1.22.4-cp39-cp39-win_amd64.whl", hash = "sha256:f0725df166cf4785c0bc4cbfb320203182b1ecd30fee6e541c8752a92df6aa32"}, - {file = "numpy-1.22.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0791fbd1e43bf74b3502133207e378901272f3c156c4df4954cad833b1380207"}, - {file = "numpy-1.22.4.zip", hash = "sha256:425b390e4619f58d8526b3dcf656dde069133ae5c240229821f01b5f44ea07af"}, -] +keyring = [] +kiwisolver = [] +matplotlib = [] +matplotlib-inline = [] +more-itertools = [] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +nodeenv = [] +numpy = [] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, @@ -1255,6 +1206,10 @@ parso = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] +pathspec = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, @@ -1263,46 +1218,7 @@ pickleshare = [ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] -pillow = [ - {file = "Pillow-9.1.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe"}, - {file = "Pillow-9.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"}, - {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602"}, - {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530"}, - {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2"}, - {file = "Pillow-9.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a"}, - {file = "Pillow-9.1.1-cp310-cp310-win32.whl", hash = "sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c"}, - {file = "Pillow-9.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108"}, - {file = "Pillow-9.1.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b"}, - {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d"}, - {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84"}, - {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4"}, - {file = "Pillow-9.1.1-cp37-cp37m-win32.whl", hash = "sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578"}, - {file = "Pillow-9.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9"}, - {file = "Pillow-9.1.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf"}, - {file = "Pillow-9.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b"}, - {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546"}, - {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f"}, - {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a"}, - {file = "Pillow-9.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1"}, - {file = "Pillow-9.1.1-cp38-cp38-win32.whl", hash = "sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54"}, - {file = "Pillow-9.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf"}, - {file = "Pillow-9.1.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92"}, - {file = "Pillow-9.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a"}, - {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251"}, - {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d"}, - {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1"}, - {file = "Pillow-9.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601"}, - {file = "Pillow-9.1.1-cp39-cp39-win32.whl", hash = "sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45"}, - {file = "Pillow-9.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c"}, - {file = "Pillow-9.1.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6"}, - {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098"}, - {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765"}, - {file = "Pillow-9.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8"}, - {file = "Pillow-9.1.1.tar.gz", hash = "sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0"}, -] +pillow = [] pkginfo = [ {file = "pkginfo-1.8.3-py2.py3-none-any.whl", hash = "sha256:848865108ec99d4901b2f7e84058b6e7660aae8ae10164e015a6dcf5b242a594"}, {file = "pkginfo-1.8.3.tar.gz", hash = "sha256:a84da4318dd86f870a9447a8c98340aa06216bfc6f2b7bdc4b8766984ae1867c"}, @@ -1315,14 +1231,8 @@ pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, ] -pre-commit = [ - {file = "pre_commit-2.19.0-py2.py3-none-any.whl", hash = "sha256:10c62741aa5704faea2ad69cb550ca78082efe5697d6f04e5710c3c229afdd10"}, - {file = "pre_commit-2.19.0.tar.gz", hash = "sha256:4233a1e38621c87d9dda9808c6606d7e7ba0e087cd56d3fe03202a01d2919615"}, -] -prompt-toolkit = [ - {file = "prompt_toolkit-3.0.29-py3-none-any.whl", hash = "sha256:62291dad495e665fca0bda814e342c69952086afb0f4094d0893d357e5c78752"}, - {file = "prompt_toolkit-3.0.29.tar.gz", hash = "sha256:bd640f60e8cecd74f0dc249713d433ace2ddc62b65ee07f96d358e0b152b6ea7"}, -] +pre-commit = [] +prompt-toolkit = [] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -1335,17 +1245,18 @@ pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] -pygments = [ - {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, - {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, -] +pygments = [] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pytest = [ - {file = "pytest-5.4.2-py3-none-any.whl", hash = "sha256:95c710d0a72d91c13fae35dce195633c929c3792f54125919847fdcdf7caa0d3"}, - {file = "pytest-5.4.2.tar.gz", hash = "sha256:eb2b5e935f6a019317e455b6da83dd8650ac9ffd2ee73a7b657a30873d67a698"}, + {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, + {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, +] +pytest-cov = [ + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, ] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, @@ -1390,90 +1301,9 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] -readme-renderer = [ - {file = "readme_renderer-35.0-py3-none-any.whl", hash = "sha256:73b84905d091c31f36e50b4ae05ae2acead661f6a09a9abb4df7d2ddcdb6a698"}, - {file = "readme_renderer-35.0.tar.gz", hash = "sha256:a727999acfc222fc21d82a12ed48c957c4989785e5865807c65a487d21677497"}, -] -regex = [ - {file = "regex-2022.6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:042d122f9fee3ceb6d7e3067d56557df697d1aad4ff5f64ecce4dc13a90a7c01"}, - {file = "regex-2022.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffef4b30785dc2d1604dfb7cf9fca5dc27cd86d65f7c2a9ec34d6d3ae4565ec2"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0afa6a601acf3c0dc6de4e8d7d8bbce4e82f8542df746226cd35d4a6c15e9456"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a11cbe8eb5fb332ae474895b5ead99392a4ea568bd2a258ab8df883e9c2bf92"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c1f62ee2ba880e221bc950651a1a4b0176083d70a066c83a50ef0cb9b178e12"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aba3d13c77173e9bfed2c2cea7fc319f11c89a36fcec08755e8fb169cf3b0df"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:249437f7f5b233792234aeeecb14b0aab1566280de42dfc97c26e6f718297d68"}, - {file = "regex-2022.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:179410c79fa86ef318d58ace233f95b87b05a1db6dc493fa29404a43f4b215e2"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5e201b1232d81ca1a7a22ab2f08e1eccad4e111579fd7f3bbf60b21ef4a16cea"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fdecb225d0f1d50d4b26ac423e0032e76d46a788b83b4e299a520717a47d968c"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:be57f9c7b0b423c66c266a26ad143b2c5514997c05dd32ce7ca95c8b209c2288"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ed657a07d8a47ef447224ea00478f1c7095065dfe70a89e7280e5f50a5725131"}, - {file = "regex-2022.6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:24908aefed23dd065b4a668c0b4ca04d56b7f09d8c8e89636cf6c24e64e67a1e"}, - {file = "regex-2022.6.2-cp310-cp310-win32.whl", hash = "sha256:775694cd0bb2c4accf2f1cdd007381b33ec8b59842736fe61bdbad45f2ac7427"}, - {file = "regex-2022.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:809bbbbbcf8258049b031d80932ba71627d2274029386f0452e9950bcfa2c6e8"}, - {file = "regex-2022.6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2b5d983eb0adf2049d41f95205bdc3de4e6cc2350e9c80d4409d3a75229de"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4c101746a8dac0401abefa716b357c546e61ea2e3d4a564a9db9eac57ccbce"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:166ae7674d0a0e0f8044e7335ba86d0716c9d49465cff1b153f908e0470b8300"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5eac5d8a8ac9ccf00805d02a968a36f5c967db6c7d2b747ab9ed782b3b3a28b"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f57823f35b18d82b201c1b27ce4e55f88e79e81d9ca07b50ce625d33823e1439"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4d42e3b7b23473729adbf76103e7df75f9167a5a80b1257ca30688352b4bb2dc"}, - {file = "regex-2022.6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2932e728bee0a634fe55ee54d598054a5a9ffe4cd2be21ba2b4b8e5f8064c2c"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:17764683ea01c2b8f103d99ae9de2473a74340df13ce306c49a721f0b1f0eb9e"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:2ac29b834100d2c171085ceba0d4a1e7046c434ddffc1434dbc7f9d59af1e945"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:f43522fb5d676c99282ca4e2d41e8e2388427c0cf703db6b4a66e49b10b699a8"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:9faa01818dad9111dbf2af26c6e3c45140ccbd1192c3a0981f196255bf7ec5e6"}, - {file = "regex-2022.6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:17443f99b8f255273731f915fdbfea4d78d809bb9c3aaf67b889039825d06515"}, - {file = "regex-2022.6.2-cp36-cp36m-win32.whl", hash = "sha256:4a5449adef907919d4ce7a1eab2e27d0211d1b255bf0b8f5dd330ad8707e0fc3"}, - {file = "regex-2022.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:4d206703a96a39763b5b45cf42645776f5553768ea7f3c2c1a39a4f59cafd4ba"}, - {file = "regex-2022.6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fcd7c432202bcb8b642c3f43d5bcafc5930d82fe5b2bf2c008162df258445c1d"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:186c5a4a4c40621f64d771038ede20fca6c61a9faa8178f9e305aaa0c2442a97"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:047b2d1323a51190c01b6604f49fe09682a5c85d3c1b2c8b67c1cd68419ce3c4"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30637e7fa4acfed444525b1ab9683f714be617862820578c9fd4e944d4d9ad1f"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3adafe6f2c6d86dbf3313866b61180530ca4dcd0c264932dc8fa1ffb10871d58"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67ae3601edf86e15ebe40885e5bfdd6002d34879070be15cf18fc0d80ea24fed"}, - {file = "regex-2022.6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:48dddddce0ea7e7c3e92c1e0c5a28c13ca4dc9cf7e996c706d00479652bff76c"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:68e5c641645351eb9eb12c465876e76b53717f99e9b92aea7a2dd645a87aa7aa"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8fd5f8ae42f789538bb634bdfd69b9aa357e76fdfd7ad720f32f8994c0d84f1e"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:71988a76fcb68cc091e901fddbcac0f9ad9a475da222c47d3cf8db0876cb5344"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:4b8838f70be3ce9e706df9d72f88a0aa7d4c1fea61488e06fdf292ccb70ad2be"}, - {file = "regex-2022.6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:663dca677bd3d2e2b5b7d0329e9f24247e6f38f3b740dd9a778a8ef41a76af41"}, - {file = "regex-2022.6.2-cp37-cp37m-win32.whl", hash = "sha256:24963f0b13cc63db336d8da2a533986419890d128c551baacd934c249d51a779"}, - {file = "regex-2022.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:ceff75127f828dfe7ceb17b94113ec2df4df274c4cd5533bb299cb099a18a8ca"}, - {file = "regex-2022.6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a6f2698cfa8340dfe4c0597782776b393ba2274fe4c079900c7c74f68752705"}, - {file = "regex-2022.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8a08ace913c4101f0dc0be605c108a3761842efd5f41a3005565ee5d169fb2b"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26dbe90b724efef7820c3cf4a0e5be7f130149f3d2762782e4e8ac2aea284a0b"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5f759a1726b995dc896e86f17f9c0582b54eb4ead00ed5ef0b5b22260eaf2d0"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1fc26bb3415e7aa7495c000a2c13bf08ce037775db98c1a3fac9ff04478b6930"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52684da32d9003367dc1a1c07e059b9bbaf135ad0764cd47d8ac3dba2df109bc"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c1264eb40a71cf2bff43d6694ab7254438ca19ef330175060262b3c8dd3931a"}, - {file = "regex-2022.6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bc635ab319c9b515236bdf327530acda99be995f9d3b9f148ab1f60b2431e970"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:27624b490b5d8880f25dac67e1e2ea93dfef5300b98c6755f585799230d6c746"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:555f7596fd1f123f8c3a67974c01d6ef80b9769e04d660d6c1a7cc3e6cff7069"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:933e72fbe1829cbd59da2bc51ccd73d73162f087f88521a87a8ec9cb0cf10fa8"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cff5c87e941292c97d11dc81bd20679f56a2830f0f0e32f75b8ed6e0eb40f704"}, - {file = "regex-2022.6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c757f3a27b6345de13ef3ca956aa805d7734ce68023e84d0fc74e1f09ce66f7a"}, - {file = "regex-2022.6.2-cp38-cp38-win32.whl", hash = "sha256:a58d21dd1a2d6b50ed091554ff85e448fce3fe33a4db8b55d0eba2ca957ed626"}, - {file = "regex-2022.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:495a4165172848503303ed05c9d0409428f789acc27050fe2cf0a4549188a7d5"}, - {file = "regex-2022.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1ab5cf7d09515548044e69d3a0ec77c63d7b9dfff4afc19653f638b992573126"}, - {file = "regex-2022.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1ea28f0ee6cbe4c0367c939b015d915aa9875f6e061ba1cf0796ca9a3010570"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3de1ecf26ce85521bf73897828b6d0687cc6cf271fb6ff32ac63d26b21f5e764"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa7c7044aabdad2329974be2246babcc21d3ede852b3971a90fd8c2056c20360"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53d69d77e9cfe468b000314dd656be85bb9e96de088a64f75fe128dfe1bf30dd"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c8d61883a38b1289fba9944a19a361875b5c0170b83cdcc95ea180247c1b7d3"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5429202bef174a3760690d912e3a80060b323199a61cef6c6c29b30ce09fd17"}, - {file = "regex-2022.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e85b10280cf1e334a7c95629f6cbbfe30b815a4ea5f1e28d31f79eb92c2c3d93"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c400dfed4137f32127ea4063447006d7153c974c680bf0fb1b724cce9f8567fc"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f648037c503985aed39f85088acab6f1eb6a0482d7c6c665a5712c9ad9eaefc"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e7b2ff451f6c305b516281ec45425dd423223c8063218c5310d6f72a0a7a517c"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:be456b4313a86be41706319c397c09d9fdd2e5cdfde208292a277b867e99e3d1"}, - {file = "regex-2022.6.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c3db393b21b53d7e1d3f881b64c29d886cbfdd3df007e31de68b329edbab7d02"}, - {file = "regex-2022.6.2-cp39-cp39-win32.whl", hash = "sha256:d70596f20a03cb5f935d6e4aad9170a490d88fc4633679bf00c652e9def4619e"}, - {file = "regex-2022.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:3b9b6289e03dbe6a6096880d8ac166cb23c38b4896ad235edee789d4e8697152"}, - {file = "regex-2022.6.2.tar.gz", hash = "sha256:f7b43acb2c46fb2cd506965b2d9cf4c5e64c9c612bac26c1187933c7296bf08c"}, -] -requests = [ - {file = "requests-2.28.0-py3-none-any.whl", hash = "sha256:bc7861137fbce630f17b03d3ad02ad0bf978c844f3536d0edda6499dafce2b6f"}, - {file = "requests-2.28.0.tar.gz", hash = "sha256:d568723a7ebd25875d8d1eaf5dfa068cd2fc8194b2e483d7b1f7c81918dbec6b"}, -] +readme-renderer = [] +regex = [] +requests = [] requests-toolbelt = [ {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, @@ -1482,14 +1312,8 @@ rfc3986 = [ {file = "rfc3986-2.0.0-py2.py3-none-any.whl", hash = "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd"}, {file = "rfc3986-2.0.0.tar.gz", hash = "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"}, ] -rich = [ - {file = "rich-12.4.4-py3-none-any.whl", hash = "sha256:d2bbd99c320a2532ac71ff6a3164867884357da3e3301f0240090c5d2fdac7ec"}, - {file = "rich-12.4.4.tar.gz", hash = "sha256:4c586de507202505346f3e32d1363eb9ed6932f0c2f63184dea88983ff4971e2"}, -] -secretstorage = [ - {file = "SecretStorage-3.3.2-py3-none-any.whl", hash = "sha256:755dc845b6ad76dcbcbc07ea3da75ae54bb1ea529eb72d15f83d26499a5df319"}, - {file = "SecretStorage-3.3.2.tar.gz", hash = "sha256:0a8eb9645b320881c222e827c26f4cfcf55363e8b374a021981ef886657a912f"}, -] +rich = [] +secretstorage = [] setuptools-scm = [ {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, @@ -1542,53 +1366,46 @@ tomli = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] torch = [ - {file = "torch-1.11.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:62052b50fffc29ca7afc0c04ef8206b6f1ca9d10629cb543077e12967e8d0398"}, - {file = "torch-1.11.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:866bfba29ac98dec35d893d8e17eaec149d0ac7a53be7baae5c98069897db667"}, - {file = "torch-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:951640fb8db308a59d9b510e7d1ad910aff92913323bbe4bc75435347ddd346d"}, - {file = "torch-1.11.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:5d77b5ece78fdafa5c7f42995ff9474399d22571cd6b2de21a5d666306a2ff8c"}, - {file = "torch-1.11.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:b5a38682769b544c875ecc34bcb81fbad5c922139b61319aacffcfd8a32f528c"}, - {file = "torch-1.11.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f82d77695a60626f2b7382d85bc566de8a6b3e50d32080755abc040db802e419"}, - {file = "torch-1.11.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b96654d42566080a134e784705f33f8536b3b95b5dcde357ed7879b1692a5f78"}, - {file = "torch-1.11.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8ee7c2e8d7f7020d5bfbc1bb91b9591044c26bbd0cee5e4f694cfd7ed8649260"}, - {file = "torch-1.11.0-cp37-none-macosx_10_9_x86_64.whl", hash = "sha256:6860b1d1bf0bb0b67a6bd47f85a0e4c825b518eea13b5d6101999dbbcbd5bc0c"}, - {file = "torch-1.11.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:4322aa29f50da7f404db06cdf30896ea67b09f673af4a985afc7162bc897864d"}, - {file = "torch-1.11.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e4d2e0ddd652f30e94cff750220324ec45705d4ecc69658f773b3cb1c7a28dd0"}, - {file = "torch-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:34ce5ea4d8d85da32cdbadb50d4585106901e9f8a3527991daa70c13a09de1f7"}, - {file = "torch-1.11.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:0ccc85cd06227a3edf809e2c795fd5762c3d4e8a38b5c9f744c6e7cf841361bb"}, - {file = "torch-1.11.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:c1554e49d74f1b2c3e7202d77056ba2dd7465437585bac64062b580f714a44e9"}, - {file = "torch-1.11.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:58c7814502b1c129a650d7092033bbb0bbd64faf1a7941631aaa1aeaddc37570"}, - {file = "torch-1.11.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:831cf588f01dda9409e75576741d2823453990dee2983d670f2584b37a01adf7"}, - {file = "torch-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:44a1d02fd20f827f0f36dc26fdcfc45e793806a6ad52769a22260655a77a4369"}, - {file = "torch-1.11.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:50fd9bf85c578c871c28f1cb0ace9dfc6024401c7f399b174fb0f370899f4454"}, - {file = "torch-1.11.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:0e48af66ad755f0f9c5f2664028a414f57c49d6adc37e77e06fe0004da4edb61"}, + {file = "torch-1.12.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:9c038662db894a23e49e385df13d47b2a777ffd56d9bcd5b832593fab0a7e286"}, + {file = "torch-1.12.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:4e1b9c14cf13fd2ab8d769529050629a0e68a6fc5cb8e84b4a3cc1dd8c4fe541"}, + {file = "torch-1.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:e9c8f4a311ac29fc7e8e955cfb7733deb5dbe1bdaabf5d4af2765695824b7e0d"}, + {file = "torch-1.12.1-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:976c3f997cea38ee91a0dd3c3a42322785414748d1761ef926b789dfa97c6134"}, + {file = "torch-1.12.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:68104e4715a55c4bb29a85c6a8d57d820e0757da363be1ba680fa8cc5be17b52"}, + {file = "torch-1.12.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:743784ccea0dc8f2a3fe6a536bec8c4763bd82c1352f314937cb4008d4805de1"}, + {file = "torch-1.12.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b5dbcca369800ce99ba7ae6dee3466607a66958afca3b740690d88168752abcf"}, + {file = "torch-1.12.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f3b52a634e62821e747e872084ab32fbcb01b7fa7dbb7471b6218279f02a178a"}, + {file = "torch-1.12.1-cp37-none-macosx_10_9_x86_64.whl", hash = "sha256:8a34a2fbbaa07c921e1b203f59d3d6e00ed379f2b384445773bd14e328a5b6c8"}, + {file = "torch-1.12.1-cp37-none-macosx_11_0_arm64.whl", hash = "sha256:42f639501928caabb9d1d55ddd17f07cd694de146686c24489ab8c615c2871f2"}, + {file = "torch-1.12.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0b44601ec56f7dd44ad8afc00846051162ef9c26a8579dda0a02194327f2d55e"}, + {file = "torch-1.12.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:cd26d8c5640c3a28c526d41ccdca14cf1cbca0d0f2e14e8263a7ac17194ab1d2"}, + {file = "torch-1.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:42e115dab26f60c29e298559dbec88444175528b729ae994ec4c65d56fe267dd"}, + {file = "torch-1.12.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:a8320ba9ad87e80ca5a6a016e46ada4d1ba0c54626e135d99b2129a4541c509d"}, + {file = "torch-1.12.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:03e31c37711db2cd201e02de5826de875529e45a55631d317aadce2f1ed45aa8"}, + {file = "torch-1.12.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:9b356aea223772cd754edb4d9ecf2a025909b8615a7668ac7d5130f86e7ec421"}, + {file = "torch-1.12.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:6cf6f54b43c0c30335428195589bd00e764a6d27f3b9ba637aaa8c11aaf93073"}, + {file = "torch-1.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:f00c721f489089dc6364a01fd84906348fe02243d0af737f944fddb36003400d"}, + {file = "torch-1.12.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:bfec2843daa654f04fda23ba823af03e7b6f7650a873cdb726752d0e3718dada"}, + {file = "torch-1.12.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:69fe2cae7c39ccadd65a123793d30e0db881f1c1927945519c5c17323131437e"}, ] tqdm = [ {file = "tqdm-4.64.0-py2.py3-none-any.whl", hash = "sha256:74a2cdefe14d11442cedf3ba4e21a3b84ff9a2dbdc6cfae2c34addb2a14a5ea6"}, {file = "tqdm-4.64.0.tar.gz", hash = "sha256:40be55d30e200777a307a7585aee69e4eabb46b4ec6a4b4a5f2d9f11e7d5408d"}, ] -traitlets = [ - {file = "traitlets-5.2.2.post1-py3-none-any.whl", hash = "sha256:1530d04badddc6a73d50b7ee34667d4b96914da352109117b4280cb56523a51b"}, - {file = "traitlets-5.2.2.post1.tar.gz", hash = "sha256:74803a1baa59af70f023671d86d5c7a834c931186df26d50d362ee6a1ff021fd"}, -] +traitlets = [] transformers = [ - {file = "transformers-4.19.4-py3-none-any.whl", hash = "sha256:572d8ecbff29ec53769e0459b4334ebd1038f75ad25119a3006f8816643dccc4"}, - {file = "transformers-4.19.4.tar.gz", hash = "sha256:b8c0f9816b4c4c2f0265b24d0a0b9d4ae8b7b98fc779d63f92e3c121c4c2d483"}, + {file = "transformers-4.21.1-py3-none-any.whl", hash = "sha256:15785eda995f53d4e98ad92e84b7446dd7cf2426ba79a1ffa7511c723bd32dfb"}, + {file = "transformers-4.21.1.tar.gz", hash = "sha256:20f895d7304a5c7f5af099f9300b326819df9cf2167cdfb754450facc0e094f6"}, ] twine = [ {file = "twine-4.0.1-py3-none-any.whl", hash = "sha256:42026c18e394eac3e06693ee52010baa5313e4811d5a11050e7d48436cf41b9e"}, {file = "twine-4.0.1.tar.gz", hash = "sha256:96b1cf12f7ae611a4a40b6ae8e9570215daff0611828f5fe1f37a16255ab24a0"}, ] -typing-extensions = [ - {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, - {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, -] -urllib3 = [ - {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, - {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, -] +typed-ast = [] +typing-extensions = [] +urllib3 = [] virtualenv = [ - {file = "virtualenv-20.14.1-py2.py3-none-any.whl", hash = "sha256:e617f16e25b42eb4f6e74096b9c9e37713cf10bf30168fb4a739f3fa8f898a3a"}, - {file = "virtualenv-20.14.1.tar.gz", hash = "sha256:ef589a79795589aada0c1c5b319486797c03b67ac3984c48c669c0e4f50df3a5"}, + {file = "virtualenv-20.16.3-py2.py3-none-any.whl", hash = "sha256:4193b7bc8a6cd23e4eb251ac64f29b4398ab2c233531e66e40b19a6b7b0d30c1"}, + {file = "virtualenv-20.16.3.tar.gz", hash = "sha256:d86ea0bb50e06252d79e6c241507cb904fcd66090c3271381372d6221a3970f9"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, @@ -1598,7 +1415,4 @@ webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] -zipp = [ - {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, - {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, -] +zipp = [] diff --git a/pyproject.toml b/pyproject.toml index 242b25f..90f7bc9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,8 +20,7 @@ classifiers = [ authors = ["Charles Pierse "] [tool.poetry.dependencies] -python = "^3.6" -pytest = "^5.4.2" +python = ">=3.7,<4.0" captum = ">=0.3.1" transformers = ">=3.0.0" ipython = "^7.31.1" @@ -29,6 +28,9 @@ ipython = "^7.31.1" [tool.poetry.dev-dependencies] pre-commit = "^2.19.0" twine = "^4.0.1" +pytest = "^5.4.2" +black = {version = "^22.6.0", allow-prereleases = true} +pytest-cov = "^3.0.0" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/test/test_multilabel_classification_explainer.py b/test/test_multilabel_classification_explainer.py index 3a5d53e..1b902e5 100644 --- a/test/test_multilabel_classification_explainer.py +++ b/test/test_multilabel_classification_explainer.py @@ -1,7 +1,10 @@ import pytest from transformers import AutoModelForSequenceClassification, AutoTokenizer from transformers_interpret import MultiLabelClassificationExplainer -from transformers_interpret.errors import AttributionTypeNotSupportedError, InputIdsNotCalculatedError +from transformers_interpret.errors import ( + AttributionTypeNotSupportedError, + InputIdsNotCalculatedError, +) DISTILBERT_MODEL = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased-finetuned-sst-2-english") DISTILBERT_TOKENIZER = AutoTokenizer.from_pretrained("distilbert-base-uncased-finetuned-sst-2-english") diff --git a/test/test_sequence_classification_explainer.py b/test/test_sequence_classification_explainer.py index 0febaf6..4d77cef 100644 --- a/test/test_sequence_classification_explainer.py +++ b/test/test_sequence_classification_explainer.py @@ -1,6 +1,6 @@ import pytest from transformers import AutoModelForSequenceClassification, AutoTokenizer -from transformers_interpret import SequenceClassificationExplainer +from transformers_interpret import SequenceClassificationExplainer, PairwiseSequenceClassificationExplainer from transformers_interpret.errors import ( AttributionTypeNotSupportedError, InputIdsNotCalculatedError, @@ -12,6 +12,9 @@ BERT_MODEL = AutoModelForSequenceClassification.from_pretrained("mrm8488/bert-mini-finetuned-age_news-classification") BERT_TOKENIZER = AutoTokenizer.from_pretrained("mrm8488/bert-mini-finetuned-age_news-classification") +CROSS_ENCODER_MODEL = AutoModelForSequenceClassification.from_pretrained("cross-encoder/ms-marco-TinyBERT-L-2-v2") +CROSS_ENCODER_TOKENIZER = AutoTokenizer.from_pretrained("cross-encoder/ms-marco-TinyBERT-L-2-v2") + def test_sequence_classification_explainer_init_distilbert(): seq_explainer = SequenceClassificationExplainer(DISTILBERT_MODEL, DISTILBERT_TOKENIZER) @@ -221,3 +224,68 @@ def sequence_classification_internal_batch_size(): explainer_string = "I love you , I like you" seq_explainer = SequenceClassificationExplainer(DISTILBERT_MODEL, DISTILBERT_TOKENIZER) seq_explainer(explainer_string, internal_batch_size=1) + + +def test_pairwise_sequence_classification(): + string1 = "How many people live in berlin?" + string2 = "there are 1000000 people living in berlin" + explainer = PairwiseSequenceClassificationExplainer(CROSS_ENCODER_MODEL, CROSS_ENCODER_TOKENIZER) + + attr = explainer(string1, string2) + assert explainer.text1 == string1 + assert explainer.text2 == string2 + assert attr + + +def test_pairwise_sequence_classification_flip_attribute_sign(): + string1 = "How many people live in berlin?" + string2 = "this string is not related to the question." + explainer = PairwiseSequenceClassificationExplainer(CROSS_ENCODER_MODEL, CROSS_ENCODER_TOKENIZER) + + original_sign_attr = explainer(string1, string2) + flipped_sign_attr = explainer(string1, string2, flip_sign=True) + + for flipped_wa, original_wa in zip(flipped_sign_attr, original_sign_attr): + assert flipped_wa[1] == -original_wa[1] + + +def test_pairwise_sequence_classification_viz(): + string1 = "How many people live in berlin?" + string2 = "there are 1000000 people living in berlin" + explainer = PairwiseSequenceClassificationExplainer(CROSS_ENCODER_MODEL, CROSS_ENCODER_TOKENIZER) + + explainer(string1, string2) + explainer.visualize() + + +def test_pairwise_sequence_classification_custom_steps(): + string1 = "How many people live in berlin?" + string2 = "there are 1000000 people living in berlin" + explainer = PairwiseSequenceClassificationExplainer(CROSS_ENCODER_MODEL, CROSS_ENCODER_TOKENIZER) + + explainer(string1, string2, n_steps=1) + + +def test_pairwise_sequence_classification_internal_batch_size(): + string1 = "How many people live in berlin?" + string2 = "there are 1000000 people living in berlin" + explainer = PairwiseSequenceClassificationExplainer(CROSS_ENCODER_MODEL, CROSS_ENCODER_TOKENIZER) + + explainer(string1, string2, internal_batch_size=1) + + +def test_pairwise_sequence_classification_position_embeddings(): + string1 = "How many people live in berlin?" + string2 = "there are 1000000 people living in berlin" + explainer = PairwiseSequenceClassificationExplainer(CROSS_ENCODER_MODEL, CROSS_ENCODER_TOKENIZER) + + explainer(string1, string2, embedding_type=1) + + +def test_pairwise_sequence_classification_position_embeddings_not_accepted(): + string1 = "How many people live in berlin?" + string2 = "there are 1000000 people living in berlin" + explainer = PairwiseSequenceClassificationExplainer(CROSS_ENCODER_MODEL, CROSS_ENCODER_TOKENIZER) + explainer.accepts_position_ids = False + + explainer(string1, string2, embedding_type=1) diff --git a/transformers_interpret/__init__.py b/transformers_interpret/__init__.py index 55f562f..93a1546 100644 --- a/transformers_interpret/__init__.py +++ b/transformers_interpret/__init__.py @@ -1,7 +1,7 @@ from .attributions import Attributions, LIGAttributions from .explainer import BaseExplainer from .explainers.question_answering import QuestionAnsweringExplainer -from .explainers.sequence_classification import SequenceClassificationExplainer +from .explainers.sequence_classification import SequenceClassificationExplainer, PairwiseSequenceClassificationExplainer from .explainers.zero_shot_classification import ZeroShotClassificationExplainer from .explainers.multilabel_classification import MultiLabelClassificationExplainer from .explainers.token_classification import TokenClassificationExplainer diff --git a/transformers_interpret/attributions.py b/transformers_interpret/attributions.py index 3b8ed26..8ca578f 100644 --- a/transformers_interpret/attributions.py +++ b/transformers_interpret/attributions.py @@ -1,4 +1,4 @@ -from typing import Callable, Tuple, List, Union, Optional +from typing import Callable, List, Optional, Tuple, Union import torch import torch.nn as nn @@ -109,8 +109,12 @@ def word_attributions(self) -> list: else: raise AttributionsNotCalculatedError("Attributions are not yet calculated") - def summarize(self, end_idx=None): - self.attributions_sum = self._attributions.sum(dim=-1).squeeze(0) + def summarize(self, end_idx=None, flip_sign: bool = False): + if flip_sign: + multiplier = -1 + else: + multiplier = 1 + self.attributions_sum = self._attributions.sum(dim=-1).squeeze(0) * multiplier self.attributions_sum = self.attributions_sum[:end_idx] / torch.norm(self.attributions_sum[:end_idx]) def visualize_attributions(self, pred_prob, pred_class, true_class, attr_class, all_tokens): diff --git a/transformers_interpret/explainer.py b/transformers_interpret/explainer.py index a6b6a9a..43937d2 100644 --- a/transformers_interpret/explainer.py +++ b/transformers_interpret/explainer.py @@ -30,12 +30,19 @@ def __init__( self.model_prefix = model.base_model_prefix - if self._model_forward_signature_accepts_parameter("position_ids"): + nonstandard_model_types = ["roberta"] + if ( + self._model_forward_signature_accepts_parameter("position_ids") + and self.model.config.model_type not in nonstandard_model_types + ): self.accepts_position_ids = True else: self.accepts_position_ids = False - if self._model_forward_signature_accepts_parameter("token_type_ids"): + if ( + self._model_forward_signature_accepts_parameter("token_type_ids") + and self.model.config.model_type not in nonstandard_model_types + ): self.accepts_token_type_ids = True else: self.accepts_token_type_ids = False @@ -169,6 +176,47 @@ def _make_input_reference_position_id_pair(self, input_ids: torch.Tensor) -> Tup def _make_attention_mask(self, input_ids: torch.Tensor) -> torch.Tensor: return torch.ones_like(input_ids) + def _get_preds( + self, + input_ids: torch.Tensor, + token_type_ids=None, + position_ids: torch.Tensor = None, + attention_mask: torch.Tensor = None, + ): + + if self.accepts_position_ids and self.accepts_token_type_ids: + preds = self.model( + input_ids=input_ids, + token_type_ids=token_type_ids, + position_ids=position_ids, + attention_mask=attention_mask, + ) + return preds + + elif self.accepts_position_ids: + preds = self.model( + input_ids=input_ids, + position_ids=position_ids, + attention_mask=attention_mask, + ) + + return preds + elif self.accepts_token_type_ids: + preds = self.model( + input_ids=input_ids, + token_type_ids=token_type_ids, + attention_mask=attention_mask, + ) + + return preds + else: + preds = self.model( + input_ids=input_ids, + attention_mask=attention_mask, + ) + + return preds + def _clean_text(self, text: str) -> str: text = re.sub("([.,!?()])", r" \1 ", text) text = re.sub("\s{2,}", " ", text) diff --git a/transformers_interpret/explainers/__init__.py b/transformers_interpret/explainers/__init__.py index ba167cd..d5c37c7 100644 --- a/transformers_interpret/explainers/__init__.py +++ b/transformers_interpret/explainers/__init__.py @@ -1,5 +1,5 @@ from .multilabel_classification import MultiLabelClassificationExplainer from .question_answering import QuestionAnsweringExplainer -from .sequence_classification import SequenceClassificationExplainer +from .sequence_classification import SequenceClassificationExplainer, PairwiseSequenceClassificationExplainer from .zero_shot_classification import ZeroShotClassificationExplainer from .token_classification import TokenClassificationExplainer diff --git a/transformers_interpret/explainers/sequence_classification.py b/transformers_interpret/explainers/sequence_classification.py index 31301e9..bfc507c 100644 --- a/transformers_interpret/explainers/sequence_classification.py +++ b/transformers_interpret/explainers/sequence_classification.py @@ -6,10 +6,7 @@ from torch.nn.modules.sparse import Embedding from transformers import PreTrainedModel, PreTrainedTokenizer from transformers_interpret import BaseExplainer, LIGAttributions -from transformers_interpret.errors import ( - AttributionTypeNotSupportedError, - InputIdsNotCalculatedError, -) +from transformers_interpret.errors import AttributionTypeNotSupportedError, InputIdsNotCalculatedError SUPPORTED_ATTRIBUTION_TYPES = ["lig"] @@ -32,7 +29,6 @@ class SequenceClassificationExplainer(BaseExplainer): If a model does not take position ids in its forward method (distilbert) a warning will occur and the default word_embeddings will be chosen instead. - """ def __init__( @@ -148,6 +144,7 @@ def visualize(self, html_filepath: str = None, true_class: str = None): true_class = round(float(self.pred_probs)) predicted_class = round(float(self.pred_probs)) attr_class = round(float(self.pred_probs)) + else: if true_class is None: true_class = self.selected_index @@ -172,20 +169,13 @@ def visualize(self, html_filepath: str = None, true_class: str = None): def _forward( # type: ignore self, input_ids: torch.Tensor, + token_type_ids=None, position_ids: torch.Tensor = None, attention_mask: torch.Tensor = None, ): - if self.accepts_position_ids: - preds = self.model( - input_ids, - position_ids=position_ids, - attention_mask=attention_mask, - ) - preds = preds[0] - - else: - preds = self.model(input_ids, attention_mask)[0] + preds = self._get_preds(input_ids, token_type_ids, position_ids, attention_mask) + preds = preds[0] # if it is a single output node if len(preds[0]) == 1: @@ -208,6 +198,11 @@ def _calculate_attributions(self, embeddings: Embedding, index: int = None, clas self.ref_position_ids, ) = self._make_input_reference_position_id_pair(self.input_ids) + ( + self.token_type_ids, + self.ref_token_type_ids, + ) = self._make_input_reference_token_type_pair(self.input_ids, self.sep_idx) + self.attention_mask = self._make_attention_mask(self.input_ids) if index is not None: @@ -225,18 +220,21 @@ def _calculate_attributions(self, embeddings: Embedding, index: int = None, clas reference_tokens = [token.replace("Ġ", "") for token in self.decode(self.input_ids)] lig = LIGAttributions( - self._forward, - embeddings, - reference_tokens, - self.input_ids, - self.ref_input_ids, - self.sep_idx, - self.attention_mask, + custom_forward=self._forward, + embeddings=embeddings, + tokens=reference_tokens, + input_ids=self.input_ids, + ref_input_ids=self.ref_input_ids, + sep_id=self.sep_idx, + attention_mask=self.attention_mask, position_ids=self.position_ids, ref_position_ids=self.ref_position_ids, + token_type_ids=self.token_type_ids, + ref_token_type_ids=self.ref_token_type_ids, internal_batch_size=self.internal_batch_size, n_steps=self.n_steps, ) + lig.summarize() self.attributions = lig @@ -285,7 +283,7 @@ def __call__( To do this provide either a valid `index` for the class label's output or if the outputs have provided labels you can pass a `class_name`. - This explainer also allows for attributions with respect to a particlar embedding type. + This explainer also allows for attributions with respect to a particular embedding type. This can be selected by passing a `embedding_type`. The default value is `0` which is for word_embeddings, if `1` is passed then attributions are w.r.t to position_embeddings. If a model does not take position ids in its forward method (distilbert) a warning will @@ -321,3 +319,199 @@ def __str__(self): s += ")" return s + + +class PairwiseSequenceClassificationExplainer(SequenceClassificationExplainer): + def _make_input_reference_pair( + self, text1: Union[List, str], text2: Union[List, str] + ) -> Tuple[torch.Tensor, torch.Tensor, int]: + + t1_ids = self.tokenizer.encode(text1, add_special_tokens=False) + t2_ids = self.tokenizer.encode(text2, add_special_tokens=False) + input_ids = self.tokenizer.encode([text1, text2], add_special_tokens=True) + if self.model.config.model_type == "roberta": + ref_input_ids = ( + [self.cls_token_id] + + [self.ref_token_id] * len(t1_ids) + + [self.sep_token_id] + + [self.sep_token_id] + + [self.ref_token_id] * len(t2_ids) + + [self.sep_token_id] + ) + + else: + + ref_input_ids = ( + [self.cls_token_id] + + [self.ref_token_id] * len(t1_ids) + + [self.sep_token_id] + + [self.ref_token_id] * len(t2_ids) + + [self.sep_token_id] + ) + + return ( + torch.tensor([input_ids], device=self.device), + torch.tensor([ref_input_ids], device=self.device), + len(t1_ids) + 1, # +1 for CLS token + ) + + def _calculate_attributions( + self, + embeddings: Embedding, + index: int = None, + class_name: str = None, + flip_sign: bool = False, + ): # type: ignore + ( + self.input_ids, + self.ref_input_ids, + self.sep_idx, + ) = self._make_input_reference_pair(self.text1, self.text2) + + ( + self.position_ids, + self.ref_position_ids, + ) = self._make_input_reference_position_id_pair(self.input_ids) + + ( + self.token_type_ids, + self.ref_token_type_ids, + ) = self._make_input_reference_token_type_pair(self.input_ids, self.sep_idx) + + self.attention_mask = self._make_attention_mask(self.input_ids) + + if index is not None: + self.selected_index = index + elif class_name is not None: + if class_name in self.label2id.keys(): + self.selected_index = int(self.label2id[class_name]) + else: + s = f"'{class_name}' is not found in self.label2id keys." + s += "Defaulting to predicted index instead." + warnings.warn(s) + self.selected_index = int(self.predicted_class_index) + else: + self.selected_index = int(self.predicted_class_index) + + reference_tokens = [token.replace("Ġ", "") for token in self.decode(self.input_ids)] + lig = LIGAttributions( + custom_forward=self._forward, + embeddings=embeddings, + tokens=reference_tokens, + input_ids=self.input_ids, + ref_input_ids=self.ref_input_ids, + sep_id=self.sep_idx, + attention_mask=self.attention_mask, + position_ids=self.position_ids, + ref_position_ids=self.ref_position_ids, + token_type_ids=self.token_type_ids, + ref_token_type_ids=self.ref_token_type_ids, + internal_batch_size=self.internal_batch_size, + n_steps=self.n_steps, + ) + if self._single_node_output: + lig.summarize(flip_sign=flip_sign) + else: + lig.summarize() + self.attributions = lig + + def _run( + self, + text1: str, + text2: str, + index: int = None, + class_name: str = None, + embedding_type: int = None, + flip_sign: bool = False, + ) -> list: # type: ignore + if embedding_type is None: + embeddings = self.word_embeddings + else: + if embedding_type == 0: + embeddings = self.word_embeddings + elif embedding_type == 1: + if self.accepts_position_ids and self.position_embeddings is not None: + embeddings = self.position_embeddings + else: + warnings.warn( + "This model doesn't support position embeddings for attributions. Defaulting to word embeddings" + ) + embeddings = self.word_embeddings + else: + embeddings = self.word_embeddings + + self.text1 = text1 + self.text2 = text2 + + self._calculate_attributions( + embeddings=embeddings, + index=index, + class_name=class_name, + flip_sign=flip_sign, + ) + return self.word_attributions # type: ignore + + def __call__( + self, + text1: str, + text2: str, + index: int = None, + class_name: str = None, + embedding_type: int = 0, + internal_batch_size: int = None, + n_steps: int = None, + flip_sign: bool = False, + ): + """ + Calculates pairwise attributions for two inputs `text1` and `text2` using the model + and tokenizer given in the constructor. Pairwise attributions are useful for models where + two distinct inputs separated by the model separator token are fed to the model, such as cross-encoder + models for similarity classification. + + Attributions can be forced along the axis of a particular output index or class name if there is more than one. + To do this provide either a valid `index` for the class label's output or if the outputs + have provided labels you can pass a `class_name`. + + This explainer also allows for attributions with respect to a particular embedding type. + This can be selected by passing a `embedding_type`. The default value is `0` which + is for word_embeddings, if `1` is passed then attributions are w.r.t to position_embeddings. + If a model does not take position ids in its forward method (distilbert) a warning will + occur and the default word_embeddings will be chosen instead. + + Additionally, this explainer allows for attributions signs to be flipped in cases where the model + only outputs a single node. By default for models that output a single node the attributions are + with respect to the inputs pushing the scores closer to 1.0, however if you want to see the + attributions with respect to scores closer to 0.0 you can pass `flip_sign=True`. For similarity + based models this is useful, as the model might predict a score closer to 0.0 for the two inputs + and in that case we would flip the attributions sign to explain why the two inputs are dissimilar. + + Args: + text1 (str): First text input to provide pairwise attributions for. + text2 (str): Second text to provide pairwise attributions for. + index (int, optional): Optional output index to provide attributions for. Defaults to None. + class_name (str, optional): Optional output class name to provide attributions for. Defaults to None. + embedding_type (int, optional):The embedding type word(0) or position(1) to calculate attributions for. Defaults to 0. + internal_batch_size (int, optional): Divides total #steps * #examples + data points into chunks of size at most internal_batch_size, + which are computed (forward / backward passes) + sequentially. If internal_batch_size is None, then all evaluations are + processed in one batch. + n_steps (int, optional): The number of steps used by the approximation + method. Default: 50. + flip_sign (bool, optional): Boolean flag determining whether to flip the sign of attributions. Defaults to False. + + Returns: + _type_: _description_ + """ + if n_steps: + self.n_steps = n_steps + if internal_batch_size: + self.internal_batch_size = internal_batch_size + return self._run( + text1=text1, + text2=text2, + embedding_type=embedding_type, + index=index, + class_name=class_name, + flip_sign=flip_sign, + ) From 27d7a4d6cfa48619d724382ae9ea6f93e382b15f Mon Sep 17 00:00:00 2001 From: Charles Date: Mon, 22 Aug 2022 10:17:28 +0100 Subject: [PATCH 2/2] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index b9e254d..ce51454 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,9 @@ + + +