diff --git a/.stignore b/.stignore new file mode 100644 index 0000000000000000000000000000000000000000..f770f4c124ac029fe693f10cbf8febc7de972b7c --- /dev/null +++ b/.stignore @@ -0,0 +1,101 @@ +.git +# Byte-compiled / optimized / DLL files +__pycache__ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build +develop-eggs +dist +downloads +eggs +.eggs +lib +lib64 +parts +sdist +var +wheels +pip-wheel-metadata +share/python-wheels +*.egg-info +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build + +# PyBuilder +target + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default +ipython_config.py + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env +venv +ENV +env.bak +venv.bak + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mypy +.mypy_cache +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre diff --git a/app_mlbee.py b/app_mlbee.py new file mode 100644 index 0000000000000000000000000000000000000000..c149d43c8c12b92a5740e4856f6b0975326743af --- /dev/null +++ b/app_mlbee.py @@ -0,0 +1,164 @@ +"""Prep for streamlit run app_mlbee.py. + +Based on app.py in lit-bee + +https://docs.streamlit.io/knowledge-base/using-streamlit/hide-row-indices-displaying-dataframe + Hide row indices when displaying a dataframe +# CSS to inject contained in a string +hide_table_row_index = ''' + + ''' +# Inject CSS with Markdown +st.markdown(hide_table_row_index, unsafe_allow_html=True) + +# Display a static table +st.table(df) + +# Hide row indices with st.dataframe +# CSS to inject contained in a string +hide_dataframe_row_index = ''' + + ''' +# Inject CSS with Markdown +st.markdown(hide_dataframe_row_index, unsafe_allow_html=True) + +# Display an interactive table +st.dataframe(df) + +https://medium.com/@avra42/streamlit-python-cool-tricks-to-make-your-web-application-look-better-8abfc3763a5b +hide_menu_style = ''' + + ''' +st.markdown(hide_menu_style, unsafe_allow_html=True) +""" +# pylint: disable=invalid-name +import os +import sys +import time +from pathlib import Path +from types import SimpleNamespace +from typing import Optional + +import loguru +import logzero +import pandas as pd + +import streamlit as st +from loguru import logger as loggu +from logzero import logger +from set_loglevel import set_loglevel +from streamlit import session_state as state + +from mlbee import __version__ +from mlbee.utils import menu_items +from mlbee.multipage import Multipage + +from mlbee.home import home +from mlbee.settings import settings +from mlbee.info import info +from mlbee.utils import style_css + +# curr_py = sys.version[:3] +# msg = f"Some packages mlbee depends on can only run with Python 3.8, current python is **{curr_py}**, sorry..." +# assert curr_py == "3.8", msg + +os.environ["TZ"] = "Asia/Shanghai" +try: + time.tzset() # type: ignore +except Exception as _: + logger.warning("time.tzset() error: %s. Probably running Windows, we let it pass.", _) + +# uncomment this in dev oe set/export LOGLEVEL=10 +# os.environ["LOGLEVEL"] = "10" + +logzero.loglevel(set_loglevel()) + +loggu.remove() +_ = ( + "{time:YY-MM-DD HH:mm:ss} | " + "{level: <5} | {message} " + "{module}.{name}:{line}" +) +loggu.add( + sys.stderr, + format=_, + level=set_loglevel(), + colorize=True, +) + +# from PIL import Image +# page_icon=Image.open("icon.ico"), +st.set_page_config( # type: ignore + page_title=f"mlbee v{__version__}", + # page_icon="🧊", + page_icon="🐝", + # layout="wide", + initial_sidebar_state="auto", # "auto" or "expanded" or "collapsed", + menu_items=menu_items, +) + +# pd.set_option("precision", 2) +pd.set_option("display.precision", 2) +pd.options.display.float_format = "{:,.2f}".format + +beetype = "mlbee" +sourcetype = "upload" +if set_loglevel() <= 10: + sourcetype = "urls" + +_ = dict( + beetype=beetype, + sourcetype=sourcetype, + sourcecount=2, + sentali=None, + src_filename="", + tgt_filename="", + src_fileio=b"", + tgt_fileio=b"", + src_file="", + tgt_file="", + list1=[""], + list2=[""], + df=None, + df_a=None, + df_s_a=None, + count=1, + updated=False, +) +if "ns" not in state: + state.ns = SimpleNamespace(**_) +state.ns.list = [*_] + + +def main(): + """Bootstrap.""" + # options() + + st.markdown(f"", unsafe_allow_html=True) + + app = Multipage() + + app.add_page("Home", "house", home) + app.add_page("Settings", "gear", settings) + app.add_page("Info", "info", info) + + app.run() + + if set_loglevel() <= 10: + st.markdown(state.ns.count) + loggu.debug(f" run: {state.ns.count}") + logger.debug(f" run: {state.ns.count}") + state.ns.count += 1 + state.ns.updated = False + + +main() diff --git a/data/king-later01-de.txt b/data/king-later01-de.txt new file mode 100644 index 0000000000000000000000000000000000000000..00b9080465042ab23c5fdce327af879fa5490f5d --- /dev/null +++ b/data/king-later01-de.txt @@ -0,0 +1,107 @@ + + +1 + + + Ich war gerade mit meiner Mutter auf dem Heimweg von der Schule. Sie hatte mich an die Hand genommen, und in der anderen hielt ich meinen Truthahn, den wir ErstklĂ€ssler in der Woche vor Thanksgiving angefertigt hatten. Ich war stolz wie Oskar. Wir machten das folgendermaßen: Man legte eine Hand auf ein Blatt Tonpapier und umfuhr sie mit einem Wachsmalstift. So entstanden der Schwanz und der Rumpf. Was den Kopf anging, war man auf sich selbst gestellt. + + Als ich Mama meinen Truthahn zeigte, sagte sie ja, ja, ja, genau, genau, genau, total super, aber ich glaube nicht, dass sie ihn sich richtig angesehen hat. Wahrscheinlich dachte sie stattdessen an eines der BĂŒcher, die sie verkaufen wollte. »Das Produkt an den Mann bringen«, wie sie es nannte. Mama war nĂ€mlich Literaturagentin. FrĂŒher hat das ihr Bruder gemacht, mein Onkel Harry, aber ein Jahr vor der Zeit, von der ich hier erzĂ€hle, hatte Mama seine Agentur ĂŒbernommen. Das ist eine lange, ziemlich traurige Geschichte. + + »Ich hab DunkelgrĂŒn genommen, weil das meine Lieblingsfarbe ist«, sagte ich. »Das weißt du doch, oder?« Inzwischen waren wir fast da. Unsere Wohnung lag nur drei Straßen von meiner Schule entfernt. + + Ja, ja, ja, hat Mama gesagt. Außerdem: »Wenn wir zu Hause sind, spielst du was oder schaust dir Barney und den Zauberschulbus an, Kleiner. Ich muss massenhaft Anrufe erledigen.« + + Worauf ich ja, ja, ja von mir gegeben habe, was mir einen Knuff in die Seite und ein Grinsen einbrachte. Ich fand es immer toll, wenn ich meine Mutter zum Grinsen bringen konnte. Schon mit sechs wusste ich nĂ€mlich, dass sie das Leben Ă€ußerst ernst nahm. SpĂ€ter stellte ich fest, dass das teilweise an mir lag. Sie ging irgendwie davon aus, dass sie ein ziemlich gestörtes Kind aufziehen wĂŒrde. Der Tag, von dem ich gerade erzĂ€hle, war jedenfalls der, wo sie definitiv zu dem Schluss kam, dass ich doch nicht gestört war. Was fĂŒr sie einerseits eine Erleichterung und andererseits keine gewesen sein muss. + + »Du sprichst mit keinem darĂŒber, ja?«, sagte sie spĂ€ter an jenem Tag zu mir. »Außer mit mir. Und vielleicht nicht mal mit mir, Kleiner. Okay?« + + Ich sagte okay. Wenn man klein ist und es sich um die eigene Mama handelt, sagt man zu allem okay. Außer natĂŒrlich, sie erklĂ€rt einem, dass es Zeit fĂŒrs Bett ist. Oder sie befiehlt, bloß ja den ganzen Brokkoli aufzuessen. + + Als wir zu Hause ankamen, war der Aufzug immer noch kaputt. Theoretisch könnte man sagen, das Ganze wĂ€re vielleicht anders gelaufen, wenn das Ding funktioniert hĂ€tte, aber das glaube ich nicht. Leute, die behaupten, im Leben gehe es nur um die Entscheidungen, die wir treffen, und um die Wege, die wir wĂ€hlen, haben meiner Meinung nach keinen blassen Schimmer. Egal ob Treppe oder Aufzug, wir wĂ€ren in jedem Fall im zweiten Stock gelandet. Wenn der flatterhafte Finger des Schicksals auf einen zeigt, fĂŒhren alle Wege zum selben Ort, meiner Meinung nach jedenfalls. Eventuell werde ich meine Meinung Ă€ndern, wenn ich Ă€lter bin, aber das glaube ich eigentlich nicht. + + »Was fĂŒr ein Scheißaufzug«, sagte Mama. Und dann: »Das hast du nicht gehört, Kleiner.« + + »Was denn?«, sagte ich, was mir ein weiteres Grinsen einbrachte. Es sollte das letzte an jenem Nachmittag sein, so viel kann ich verraten. Ich fragte, ob ich ihre Tasche tragen solle, in der wie immer ein Manuskript steckte. An jenem Tag war es ein dickes, das nach circa fĂŒnfhundert Seiten aussah (wenn das Wetter gut war, saß Mama immer auf einer Bank und las, wĂ€hrend sie darauf wartete, dass ich aus der Schule kam). »Lieb von dir«, sagte sie. »Aber was erklĂ€re ich dir immer?« + + »Jeder muss im Leben seine eigene Last tragen«, sagte ich. + + »Haargenau.« + + »Ist es von Regis Thomas?«, fragte ich. + + »Richtig geraten. Von dem guten alten Regis, der unsere Miete bezahlt.« + + »Geht es um Roanoke?« + + »Musst du das wirklich fragen, Jamie?« Was mich zum Kichern brachte. Alles, was der gute alte Regis schrieb, spielte in Roanoke. Das war die Last, die er im Leben trug. + + Wir stiegen die Treppe hinauf in den zweiten Stock, wo sich außer unserer noch zwei weitere Wohnungen befanden. Unsere hinten im Flur war die schickste. Vor der TĂŒr von 3A standen Mr. und Mrs. Burkett, und mir war sofort klar, dass etwas nicht stimmte. Mr. Burkett rauchte eine Zigarette, was ich bei ihm noch nie gesehen hatte und was in unserem Haus außerdem verboten war. Seine Augen waren blutunterlaufen, und die Haare standen ihm in wirren grauen BĂŒscheln vom Kopf ab. Ich sagte immer Mister zu ihm, aber eigentlich war er Professor Burkett und lehrte an der New York University irgendetwas Kluges. Englische und europĂ€ische Dichtung, wie ich spĂ€ter erfuhr. Mrs. Burkett stand barfuß nur im Nachthemd da. Das Nachthemd war ziemlich dĂŒnn. Ich konnte durch es hindurch fast alles von ihr sehen. + + »Was ist denn passiert, Marty?«, fragte meine Mutter. + + Bevor er etwas erwidern konnte, zeigte ich ihm meinen Truthahn. Weil Mr. Burkett traurig wirkte und ich ihn aufmuntern wollte, aber auch weil ich so stolz darauf war. »Schauen Sie mal, Mr. Burkett! Ich hab einen Truthahn gemalt! Schauen Sie mal, Mrs. Burkett!« Beim Hinhalten hob ich ihn vors Gesicht, weil sie nicht denken sollte, dass ich auf ihren Busen glotzte. + + Mr. Burkett achtete nicht auf mich. Ich glaube, er hatte mich nicht mal gehört. »Tia, ich habe eine schreckliche Nachricht. Heute Morgen ist Mona gestorben.« + + Meine Mutter ließ die Tasche mit dem Manuskript zwischen ihre FĂŒĂŸe fallen und schlug sich die Hand vor den Mund. »O nein! Das ist nicht wahr!« + + Er brach in TrĂ€nen aus. »Sie ist nachts aufgestanden und hat gesagt, sie will ein Glas Wasser trinken. Ich bin wieder eingeschlafen, und heute Morgen lag sie auf dem Sofa und hatte eine Steppdecke bis zum Kinn gezogen. Da bin ich auf Zehenspitzen in die KĂŒche gegangen und hab Kaffee aufgesetzt, weil ich dachte, der Duft wĂŒrde sie auf-auf-w-w-w
 wĂŒrde sie aufwecken  « + + Dann brach er wirklich zusammen. Mama nahm ihn in die Arme, wie sie es mit mir tat, wenn ich mir wehgetan hatte, obwohl Mr. Burkett ungefĂ€hr hundert Jahre alt war (vierundsiebzig, wie ich spĂ€ter erfuhr). + + Und da sagte Mrs. Burkett etwas zu mir. Sie war schwer zu verstehen, wenn auch nicht so schwer wie manche anderen, weil sie noch ziemlich frisch war. »TruthĂ€hne sind nicht grĂŒn, James«, sagte sie. + + »Meiner schon«, sagte ich. + + Meine Mutter hielt Mr. Burkett immer noch in den Armen und wiegte ihn irgendwie hin und her. Die beiden hörten Mrs. Burkett nicht, und mich hörten sie auch nicht, weil sie erwachsene Dinge taten: Mama spendete Trost, Mr. Burkett heulte. + + »Ich hab Doktor Allen angerufen«, sagte Mr. Burkett. »Als er dann da war, meinte er, dass sie wahrscheinlich einen Schlag hatte.« Wenigstens glaube ich, dass er das gesagt hat. Er weinte so sehr, dass er nicht gut zu verstehen war. »Er hat fĂŒr mich beim Bestattungsinstitut angerufen. Die haben sie weggebracht. Ich weiß gar nicht, was ich ohne sie tun soll.« + + Mrs. Burkett sagte: »Wenn mein Mann nicht aufpasst, wird er deiner Mutter mit seiner Zigarette noch das Haar versengen.« + + Was er tatsĂ€chlich tat. Ich konnte die schmorenden Haare riechen, ein Gestank wie beim Damenfriseur. Mama war zu höflich, etwas zu sagen, aber sie sorgte dafĂŒr, dass er sie losließ, und dann nahm sie ihm die Zigarette ab, warf sie auf den Boden und trat darauf. Das fand ich richtig eklig, eine echte Schweinerei, aber ich hielt den Mund. Ich kapierte, dass es sich um eine besondere Situation handelte. + + Außerdem kapierte ich, dass er durchdrehen wĂŒrde, wenn ich weiter mit Mrs. Burkett sprach. Mama ebenfalls. Selbst ein kleiner Junge weiß gewisse grundlegende Dinge, wenn er nicht weich in der Birne ist. Man sagt bitte, man sagt danke, man wedelt in der Öffentlichkeit nicht mit dem Schniedel herum, man kaut nicht mit offenem Mund, und man spricht nicht mit toten Leuten, wenn sie neben lebenden Leuten stehen, die gerade erst anfangen, sie zu vermissen. Zu meiner Verteidigung will ich nur sagen: Beim ersten Anblick war mir noch nicht bewusst gewesen, dass sie tot war. SpĂ€ter wurde ich besser darin, den Unterschied zu beurteilen, aber damals musste ich das erst noch lernen. Durch das Nachthemd von Mrs. Burkett konnte ich hindurchschauen, durch sie selbst nicht. Tote sehen genauso aus wie Lebende, nur dass sie immer die Kleidung wie beim Sterben tragen. + + WĂ€hrenddessen kaute Mr. Burkett die ganze Sache noch einmal durch. Er erzĂ€hlte meiner Mutter, wie er neben dem Sofa auf dem Boden gesessen und die Hand seiner Frau gehalten hatte, bis der Arzt kam, und dann wieder, bis die Leute vom Bestattungsinstitut gekommen waren, um sie wegzuschaffen. Eigentlich sagte er: »Um sie von dannen zu bringen«, was ich nicht verstand, bis Mama es mir erklĂ€rte. Das Weinen hatte zwischendurch nachgelassen, nahm jetzt jedoch wieder Fahrt auf. »Ihre Ringe sind weg«, sagte er unter TrĂ€nen. »Nicht nur ihr Hochzeitsring, sondern auch der Verlobungsring mit dem großen Diamanten. Ich hab auf dem Nachttisch auf ihrer Bettseite nachgeschaut, wo sie die Dinger immer hinlegt, wenn sie sich die HĂ€nde mit der scheußlich riechenden Arthritissalbe einreibt  « + + »Die riecht tatsĂ€chlich erbĂ€rmlich«, bestĂ€tigte Mrs. Burkett. »Das Lanolin da drin ist im Grunde nur Schaffett, aber irgendwie hilft’s.« + + Ich nickte, um auszudrĂŒcken, dass ich verstanden hĂ€tte, sagte aber nichts. + + »  und auf dem Waschbecken im Bad, weil sie die Ringe manchmal da liegen lĂ€sst 
 Überall hab ich nachgeschaut.« + + »Die werden schon wieder auftauchen«, sagte meine Mutter besĂ€nftigend, und da ihre Haare jetzt nicht mehr gefĂ€hrdet waren, nahm sie Mr. Burkett wieder in die Arme. »Sie tauchen bestimmt wieder auf, Marty, mach dir darĂŒber keine Sorgen.« + + »Ich vermisse sie so sehr! Ich vermisse sie jetzt schon!« + + Mrs. Burkett wedelte mit der Hand vor dem Gesicht. »Wahrscheinlich dauert es nicht mal sechs Wochen, bis er Dolores Magowan zum Mittagessen ausfĂŒhrt.« + + Mr. Burkett flennte, und meine Mutter tröstete ihn, so wie sie mich tröstete, wenn ich mir mal das Knie aufschĂŒrfte oder wie damals, als ich ihr eine Tasse Tee machen wollte und mir heißes Wasser auf die Hand geschwappt ist. Es herrschte also irgendwie ein ziemlich hoher LĂ€rmpegel, weshalb ich es riskierte, wenn auch nur mit leiser Stimme. + + »Wo sind Ihre Ringe denn, Mrs. Burkett? Wissen Sie das?« + + Wenn sie tot sind, mĂŒssen sie die Wahrheit sagen. Im Alter von sechs Jahren wusste ich das allerdings noch nicht; ich nahm einfach an, dass alle Erwachsenen, ob nun lebendig oder tot, stets die Wahrheit sagten. NatĂŒrlich glaubte ich damals auch, Goldlöckchen wĂ€re ein echtes MĂ€dchen. Man darf mich gern als dĂ€mlich bezeichnen, aber immerhin glaubte ich wenigstens nicht, dass die drei BĂ€ren auch wirklich sprechen konnten. + + »Im obersten Fach vom Flurschrank«, sagte sie. »Ganz hinten, hinter den Fotoalben.« + + »Warum da?«, fragte ich, worauf meine Mutter mir einen seltsamen Blick zuwarf. Soweit sie sehen konnte, unterhielt ich mich mit dem leeren Wohnungseingang 
 obwohl sie eigentlich lĂ€ngst wusste, dass ich ein bisschen anders als andere Kinder tickte. Nach einem nicht gerade schönen Vorfall im Central Park – dazu bald mehr – bekam ich mit, wie sie einer von ihren Verlagsfreundinnen am Telefon erzĂ€hlte, ich hĂ€tte eine besondere Beziehung zur Geisterwelt. Was mir einen gewaltigen Schrecken einjagte. Geister setzte ich nĂ€mlich mit Gespenstern gleich, und vor denen hatte ich furchtbare Angst. + + »Ich habe nicht die leiseste Ahnung«, sagte Mrs. Burkett. »Aber da hatte ich wahrscheinlich schon den Schlaganfall. Das heißt, meine Gedanken sind in Blut ertrunken.« + + In Blut ertrunkene Gedanken. Das habe ich nie vergessen. + + Mama fragte Mr. Burkett, ob er mit in unsere Wohnung kommen wolle, zu einer Tasse Tee (»oder etwas StĂ€rkerem«), aber er lehnte ab, weil er noch einmal nach den verschwundenen Ringen seiner Frau suchen wollte. Daraufhin fragte sie ihn, ob wir ihm was vom Chinesen mitbringen sollten, wenn wir dort unser Abendessen holten, und er sagte: »Das wĂ€re schön, vielen Dank, Tia.« + + »De nada«, sagte meine Mutter (das verwendete sie beinah so oft wie ja, ja, ja und genau, genau, genau), und dann erklĂ€rte sie ihm, wir wĂŒrden ihm das Essen gegen sechs in die Wohnung bringen, falls er nicht bei uns essen wolle, wozu er gern eingeladen sei. Nein, sagte er, er wĂŒrde lieber bei sich essen, aber er fĂ€nde es nett, wenn wir uns dann zu ihm gesellen wĂŒrden. Nur dass er zu uns sagte, als wĂ€re Mrs. Burkett noch am Leben. Was sie ja nicht war, obwohl sie dastand. + + »Bis dahin hast du die Ringe bestimmt gefunden«, sagte Mama. Sie nahm mich an die Hand. »Komm, Jamie. Wir besuchen Mr. Burkett spĂ€ter wieder. Jetzt lassen wir ihn erst mal lieber fĂŒr sich allein.« + + »TruthĂ€hne sind nicht grĂŒn, Jamie«, sagte Mrs. Burkett. »Und das da sieht sowieso nicht wie ein Truthahn aus. Das sieht aus wie ein Klecks, aus dem Finger ragen. Ein Rembrandt bist du nicht gerade.« + + Tote Leute mussten die Wahrheit sagen, was okay war, solange man die Antwort auf eine Frage erfahren wollte, aber wie schon gesagt, die Wahrheit war halt manchmal echt beschissen. Weshalb ich irgendwie wĂŒtend auf Mrs. Burkett wurde, wenn auch nur kurz, weil sie auf einmal zu weinen anfing. Sie wandte sich Mr. Burkett zu und sagte: »Wer wird jetzt dafĂŒr sorgen, dass du die GĂŒrtelschlaufe hinten an deiner Hose nicht vergisst? Dolores Magowan? Da fress ich doch ’nen Besen!« Sie kĂŒsste seine Wange 
 oder kĂŒsste in deren Richtung, das war mir nicht ganz klar. »Ich habe dich geliebt, Marty. Das tu ich immer noch.« + + Mr. Burkett hob die Hand und kratzte sich an der Stelle, wo ihre Lippen ihn berĂŒhrt hatten, als wĂŒrde es ihn da jucken. Das hat er wohl jedenfalls gedacht. + + + diff --git a/data/king-later01-en.txt b/data/king-later01-en.txt new file mode 100644 index 0000000000000000000000000000000000000000..617711f39b4eb73262741a0499b01a8a2cd06939 --- /dev/null +++ b/data/king-later01-en.txt @@ -0,0 +1,106 @@ + + +1 + + +I was coming home from school with my mother. She was holding my hand. In the other hand I clutched my turkey, the ones we made in first grade the week before Thanksgiving. I was so proud of mine I was practically shitting nickels. What you did, see, was put your hand on a piece of construction paper and then trace around it with a crayon. That made the tail and body. When it came to the head, you were on your own. + +I showed mine to Mom and she’s all yeah yeah yeah, right right right, totally great, but I don’t think she ever really saw it. She was probably thinking about one of the books she was trying to sell. “Flogging the product,” she called it. Mom was a literary agent, see. It used to be her brother, my Uncle Harry, but Mom took over his business a year before the time I’m telling you about. It’s a long story and kind of a bummer. + +I said, “I used Forest Green because it’s my favorite color. You knew that, right?” We were almost to our building by then. It was only three blocks from my school. + +She’s all yeah yeah yeah. Also, “You play or watch Barney and The Magic Schoolbus when we get home, kiddo, I’ve got like a zillion calls to make.” + +So I go yeah yeah yeah, which earned me a poke and a grin. I loved it when I could make my mother grin because even at six I knew that she took the world very serious. Later on I found out part of the reason was me. She thought she might be raising a crazy kid. The day I’m telling you about was the one when she decided for sure I wasn’t crazy after all. Which must have been sort of a relief and sort of not. + +“You don’t talk to anybody about this,” she said to me later that day. “Except to me. And maybe not even me, kiddo. Okay?” + +I said okay. When you’re little and it’s your mom, you say okay to everything. Unless she says it’s bedtime, of course. Or to finish your broccoli. + +We got to our building and the elevator was still broken. You could say things might have been different if it had been working, but I don’t think so. I think that people who say life is all about the choices we make and the roads we go down are full of shit. Because check it, stairs or elevator, we still would have come out on the third floor. When the fickle finger of fate points at you, all roads lead to the same place, that’s what I think. I may change my mind when I’m older, but I really don’t think so. + +“Fuck this elevator,” Mom said. Then, “You didn’t hear that, kiddo.” + +“Hear what?” I said, which got me another grin. Last grin for her that afternoon, I can tell you. I asked her if she wanted me to carry her bag, which had a manuscript in it like always, that day a big one, looked like a five-hundred-pager (Mom always sat on a bench reading while she waited for me to get out of school, if the weather was nice). She said, “Sweet offer, but what do I always tell you?” + +“You have to tote your own burden in life,” I said. + +“Correctamundo.” + +“Is it Regis Thomas?” I asked. + +“Yes indeed. Good old Regis, who pays our rent.” + +“Is it about Roanoke?” + +“Do you even have to ask, Jamie?” Which made me snicker. Everything good old Regis wrote was about Roanoke. That was the burden he toted in life. + +We went up the stairs to the third floor, where there were two other apartments plus ours at the end of the hall. Ours was the fanciest one. Mr. and Mrs. Burkett were standing outside 3A, and I knew right away something was wrong because Mr. Burkett was smoking a cigarette, which I hadn’t seen him do before and was illegal in our building anyway. His eyes were bloodshot and his hair was all crazied up in gray spikes. I always called him mister, but he was actually Professor Burkett, and taught something smart at NYU. English and European Literature, I later found out. Mrs. Burkett was dressed in a nightgown and her feet were bare. That nightgown was pretty thin. I could see most of her stuff right through it. + +My mother said, “Marty, what’s wrong?” + +Before he could say anything back, I showed him my turkey. Because he looked sad and I wanted to cheer him up, but also because I was so proud of it. “Look, Mr. Burkett! I made a turkey! Look, Mrs. Burkett!” I held it up for her in front of my face because I didn’t want her to think I was looking at her stuff. + +Mr. Burkett paid no attention. I don’t think he even heard me. “Tia, I have some awful news. Mona died this morning.” + +My mother dropped her bag with the manuscript inside it between her feet and put her hand over her mouth. “Oh, no! Tell me that’s not true!” + +He began to cry. “She got up in the night and said she wanted a drink of water. I went back to sleep and she was on the couch this morning with a comforter pulled up to her chin and so I tiptoed to the kitchen and put on the coffee because I thought the pleasant smell would w-w-wake
 would wake
” + +He really broke down then. Mom took him in her arms the way she did me when I hurt myself, even though Mr. Burkett was about a hundred (seventy-four, I found out later). + +That was when Mrs. Burkett spoke to me. She was hard to hear, but not as hard as some of them because she was still pretty fresh. She said, “Turkeys aren’t green, James.” + +“Well mine is,” I said. + +My mother was still holding Mr. Burkett and kind of rocking him. They didn’t hear her because they couldn’t, and they didn’t hear me because they were doing adult things: comforting for Mom, blubbering for Mr. Burkett. + +Mr. Burkett said, “I called Dr. Allen and he came and said she probably had a soak.” At least that’s what I thought he said. He was crying so much it was hard to tell. “He called the funeral parlor. They took her away. I don’t know what I’ll do without her.” + +Mrs. Burkett said, “My husband is going to burn your mother’s hair with his cigarette if he doesn’t look out.” + +And sure enough, he did. I could smell the singeing hair, a kind of beauty shop smell. Mom was too polite to say anything about it, but she made him let go of her, and then she took the cigarette from him and dropped it on the floor and stepped on it. I thought that was a groady thing to do, extreme litterbugging, but I didn’t say anything. I got that it was a special situation. + +I also knew that talking to Mrs. Burkett any more would freak him out. Mom, too. Even a little kid knows certain basic things if he’s not soft in the attic. You said please, you said thank you, you didn’t flap your weenie around in public or chew with your mouth open, and you didn’t talk to dead folks when they were standing next to living folks who were just starting to miss them. I only want to say, in my own defense, that when I saw her I didn’t know she was dead. Later on I got better at telling the difference, but back then I was just learning. It was her nightgown I could see through, not her. Dead people look just like living people, except they’re always wearing the clothes they died in. + +Meanwhile, Mr. Burkett was rehashing the whole thing. He told my mother how he sat on the floor beside the couch and held his wife’s hand till that doctor guy came and again till the mortician guy came to take her away. “Conveyed her hence” was what he actually said, which I didn’t understand until Mom explained it to me. And at first I thought he said beautician, maybe because of the smell when he burned Mom’s hair. His crying had tapered off, but now it ramped up again. “Her rings are gone,” he said through his tears. “Both her wedding ring and her engagement ring, that big diamond. I looked on the night table by her side of the bed, where she puts them when she rubs that awful-smelling arthritis cream into her hands—” + +“It does smell bad,” Mrs. Burkett admitted. “Lanolin is basically sheep dip, but it really helps.” + +I nodded to show I understood but didn’t say anything. + +“—and on the bathroom sink, because sometimes she leaves them there
I’ve looked everywhere.” + +“They’ll turn up,” my mother soothed, and now that her hair was safe, she took Mr. Burkett in her arms again. “They’ll turn up, Marty, don’t you worry about that.” + +“I miss her so much! I miss her already!” + +Mrs. Burkett flapped a hand in front of her face. “I give him six weeks before he’s asking Dolores Magowan out to lunch.” + +Mr. Burkett was blubbing, and my mother was doing her soothing thing like she did to me whenever I scraped my knee or this one time when I tried to make her a cup of tea and slopped hot water on my hand. Lots of noise, in other words, so I took a chance but kept my voice low. + +“Where are your rings, Mrs. Burkett? Do you know?” + +They have to tell you the truth when they’re dead. I didn’t know that at the age of six; I just assumed all grownups told the truth, living or dead. Of course back then I also believed Goldilocks was a real girl. Call me stupid if you want to. At least I didn’t believe the three bears actually talked. + +“Top shelf of the hall closet,” she said. “Way in the back, behind the scrapbooks.” + +“Why there?” I asked, and my mother gave me a strange look. As far as she could see, I was talking to the empty doorway
although by then she knew I wasn’t quite the same as other kids. After a thing that happened in Central Park, not a nice thing—I’ll get to it—I overheard her telling one of her editor friends on the phone that I was “fey.” That scared the shit out of me, because I thought she meant she was changing my name to Fay, which is a girl’s name. + +“I don’t have the slightest idea,” Mrs. Burkett said. “By then I suppose I was having the stroke. My thoughts would have been drowning in blood.” + +Thoughts drowning in blood. I never forgot that. + +Mom asked Mr. Burkett if he wanted to come down to our apartment for a cup of tea (“or something stronger”), but he said no, he was going to have another hunt for his wife’s missing rings. She asked him if he would like us to bring him some Chinese take-out, which my mother was planning for dinner, and he said that would be good, thank you Tia. + +My mother said de nada (which she used almost as much as yeah yeah yeah and right right right), then said we’d bring it to his apartment around six, unless he wanted to eat with us in ours, which he was welcome to do. He said no, he’d like to eat in his place but he would like us to eat with him. Except what he actually said was our place, like Mrs. Burkett was still alive. Which she wasn’t, even though she was there. + +“By then you’ll have found her rings,” Mom said. She took my hand. “Come on, Jamie. We’ll see Mr. Burkett later, but for now let’s leave him alone.” + +Mrs. Burkett said, “Turkeys aren’t green, Jamie, and that doesn’t look like a turkey anyway. It looks like a blob with fingers sticking out of it. You’re no Rembrandt.” + +Dead people have to tell the truth, which is okay when you want to know the answer to a question, but as I said, the truth can really suck. I started to be mad at her, but just then she started to cry and I couldn’t be. She turned to Mr. Burkett and said, “Who’ll make sure you don’t miss the belt loop in the back of your pants now? Dolores Magowan? I should smile and kiss a pig.” She kissed his cheek
or kissed at it, I couldn’t really tell which. “I loved you, Marty. Still do.” + +Mr. Burkett raised his hand and scratched the spot where her lips had touched him, as if he had an itch. I suppose that’s what he thought it was. + + diff --git a/data/sternstunden04-de.txt b/data/sternstunden04-de.txt new file mode 100644 index 0000000000000000000000000000000000000000..95b886b219d5de1f04b0798ce6ea8bf355702ae5 --- /dev/null +++ b/data/sternstunden04-de.txt @@ -0,0 +1,57 @@ +ï»żDas Genie einer Nacht + +Die Marseillaise, 25. April 1792 + +Das Genie einer Nacht + +1792. Zwei Monate, drei Monate schon schwankt in der französischen Nationalversammlung die Entscheidung: Krieg gegen die Koalition der Kaiser und Könige oder Frieden. Ludwig XVI. ist selbst unentschlossen; er ahnt die Gefahr eines Sieges der RevolutionĂ€re, er ahnt die Gefahr ihrer Niederlage. Ungewiß sind auch die Parteien. Die Girondisten drĂ€ngen zum Kriege, um die Macht zu behalten, Robespierre und die Jakobiner fechten fĂŒr den Frieden, um inzwischen selbst die Macht an sich zu reißen. Von Tag zu Tag wird die Lage gespannter, die Journale lĂ€rmen, die Klubs diskutieren, immer wilder schwirren die GerĂŒchte, und immer mehr wird die öffentliche Meinung durch sie erregt. Wie immer eine Entscheidung, wird es darum eine Art von Befreiung, wie am 20. April der König von Frankreich endlich den Krieg an den Kaiser von Österreich und den König von Preußen erklĂ€rt. + +Lastend und seelenverstörend hat in diesen Wochen und Wochen die elektrische Spannung ĂŒber Paris gelegen; aber noch drĂŒckender, noch drohender schwĂŒlt die Erregung in den GrenzstĂ€dten. In allen Biwaks sind schon die Truppen versammelt, in jedem Dorf, in jeder Stadt werden Freiwillige und Nationalgarden ausgerĂŒstet, ĂŒberall die Festungen instand gesetzt, und vor allem im Elsaß weiß man, daß auf seiner Scholle, wie immer zwischen Frankreich und Deutschland, die erste Entscheidung fallen wird. An den Ufern des Rheins ist der Feind, der Gegner, nicht wie in Paris ein verschwommener, ein pathetisch-rhetorischer Begriff, sondern sichtbare, sinnliche Gegenwart; denn an dem befestigten BrĂŒckenkopf, von dem Turm der Kathedrale, kann man die heranrĂŒckenden Regimenter der Preußen mit freiem Auge wahrnehmen. Nachts trĂ€gt der Wind das Rollen der feindlichen Artilleriewagen, das Klirren der Waffen, die Trompetensignale ĂŒber den gleichgĂŒltig im Mondlicht glitzernden Strom. Und alle wissen: nur ein einziges Wort, nur ein einziges Dekret ist vonnöten, und aus dem schweigenden Mund der preußischen Kanonen fĂ€hrt Donner und Blitz, und der tausendjĂ€hrige Kampf zwischen Deutschland und Frankreich hat abermals begonnen – diesmal im Namen der neuen Freiheit auf der einen Seite und im Namen der alten Ordnung auf der andern. + +Unvergleichlicher Tag darum, da am 25. April 1792 Stafetten die Nachricht der erfolgten KriegserklĂ€rung aus Paris nach Straßburg bringen. Sofort strömt aus allen Gassen und HĂ€usern das Volk auf die offenen PlĂ€tze, kriegsbereit marschiert die ganze Garnison zur letzten Parade, Regiment nach Regiment. Auf dem Hauptplatz erwartet sie der BĂŒrgermeister Dietrich, die dreifarbige SchĂ€rpe um den Leib, die Kokarde auf dem Hut, den er grĂŒĂŸend den Soldaten entgegenschwenkt. Fanfarenruf und Trommelwirbel mahnt zur Stille. Mit lauter Stimme liest Dietrich an diesem und allen andern PlĂ€tzen der Stadt französisch und deutsch den Wortlaut der KriegserklĂ€rung vor. Nach seinen letzten Worten intonieren die Regimentsmusiker das erste, das vorlĂ€ufige Kriegslied der Revolution, das Ȃa ira«, eigentlich eine prickelnde, ĂŒbermĂŒtige, spöttische Tanzmelodie, aber die klirrenden, die donnernden Schritte der ausmarschierenden Regimenter geben ihr martialischen Takt. Dann zerstreut sich die Menge und trĂ€gt die angefachte Begeisterung in alle Gassen und HĂ€user; in den CafĂ©s, in den Klubs werden zĂŒndende Ansprachen gehalten und Proklamationen verteilt. »Aux armes, citoyens! L'Ă©tendard de la guerre est dĂ©ployĂ©! Le signal est donnĂ©!«; so und mit Ă€hnlichen Anrufen beginnen sie, und ĂŒberall, in allen Reden, in allen Zeitungen, auf allen Plakaten, auf allen Lippen wiederholen sich solche schlagkrĂ€ftige, rhythmische Rufe wie »Aux armes, citoyens! Qu'ils tremblent donc, les despotes couronnĂ©s! Marchons, enfants de la libertĂ©!«, und jedesmal jubelt und jubelt die Masse den feurigen Worten zu. + +Immer jubelt die große Masse auf den Straßen und PlĂ€tzen bei einer KriegserklĂ€rung, immer aber regen sich in solchen Augenblicken des Straßenjubels auch andere Stimmen, leisere, abseitige; auch die Angst, auch die Sorge wacht auf bei einer KriegserklĂ€rung, nur daß sie heimlich in den Stuben flĂŒstert oder mit blasser Lippe schweigt. Ewig und ĂŒberall sind MĂŒtter, die sich sagen: Werden die fremden Soldaten nicht meine Kinder hinmorden, in allen LĂ€ndern sind die Bauern, die um ihre Habe sorgen, ihre Felder, ihre HĂŒtten, ihr Vieh und ihre Ernte. Wird ihre Saat nicht zerstampft werden, ihr Haus nicht geplĂŒndert von den brutalen Horden, nicht mit Blut die Felder ihrer Arbeit gedĂŒngt? Aber der BĂŒrgermeister von Straßburg, Friedrich Baron Dietrich, eigentlich ein Aristokrat, aber wie die beste Aristokratie Frankreichs damals der Sache der neuen Freiheit mit ganzer Seele hingegeben, will nur die lauten, die klingenden Stimmen der Zuversicht zu Wort kommen lassen; bewußt verwandelt er den Tag der KriegserklĂ€rung in ein öffentliches Fest. Die SchĂ€rpe quer um die Brust, eilt er von einer Versammlung zur andern, um die Bevölkerung anzufeuern. Er lĂ€ĂŸt Wein und Zehrung an die abmarschierenden Soldaten verteilen, und am Abend versammelt er in seinem gerĂ€umigen Hause auf der Place de Broglie die GeneralitĂ€t, die Offiziere und wichtigsten Amtspersonen zu einem Abschiedsfest, dem Begeisterung schon im vornherein den Charakter eines Siegesfestes gibt. Die GenerĂ€le, siegessicher wie immer GenerĂ€le, prĂ€sidieren, die jungen Offiziere, die im Krieg den Sinn ihres Lebens erfĂŒllt sehen, haben freies Wort. Einer feuert den andern an. Man schwingt die SĂ€bel, man umarmt sich, man trinkt sich zu, man hĂ€lt bei gutem Wein leidenschaftliche und immer leidenschaftlichere Reden. Und abermals kehren dieselben stimulierenden Worte der Journale und Proklamationen in allen Ansprachen wieder: »Auf zu den Waffen, BĂŒrger! Marschieren wir! Retten wir das Vaterland! Bald werden sie zittern, die gekrönten Despoten. Jetzt, da sich die Fahne des Sieges entrollt hat, ist der Tag gekommen, die Trikolore ĂŒber die Welt zu tragen! Jeder muß jetzt sein Bestes geben, fĂŒr den König, fĂŒr die Fahne, fĂŒr die Freiheit!« Das ganze Volk, das ganze Land will in solchen Augenblicken eine heilige Einheit werden durch den Glauben an den Sieg und durch Begeisterung fĂŒr die Sache der Freiheit. + +Plötzlich, mitten im Reden und Toastieren, wendet sich der BĂŒrgermeister Dietrich einem jungen Hauptmann vom Festungskorps, namens Rouget, zu, der an seiner Seite sitzt. Er hat sich erinnert, daß dieser nette, nicht gerade hĂŒbsche, aber sympathische Offizier vor einem halben Jahr anlĂ€ĂŸlich der Proklamierung der Konstitution eine recht nette Hymne an die Freiheit geschrieben hat, die der Regimentsmusikus Pleyel gleich vertonte. Die anspruchslose Arbeit hatte sich sangbar erwiesen, die MilitĂ€rkapelle hatte sie eingelernt, man hatte sie am öffentlichen Platz gespielt und im Chor gesungen. WĂ€ren jetzt die KriegserklĂ€rung und der Abmarsch nicht gegebener Anlaß, eine Ă€hnliche Feier zu inszenieren? So fragt BĂŒrgermeister Dietrich ganz lĂ€ssig, wie man eben einen guten Bekannten um eine GefĂ€lligkeit bittet, den KapitĂ€n Rouget (der sich völlig unberechtigterweise selbst geadelt hat und Rouget de Lisle nennt), ob er nicht den patriotischen Anlaß wahrnehmen wolle und fĂŒr die ausmarschierenden Truppen etwas dichten, ein Kriegslied fĂŒr die Rheinarmee, die morgen gegen den Feind ausrĂŒcken soll. + +Rouget, ein bescheidener, unbedeutender Mann, der sich nie fĂŒr einen großen Komponisten hielt – seine Verse wurden nie gedruckt, seine Opern refĂŒsiert –, weiß, daß ihm Gelegenheitsverse leicht in die Feder fließen. Um der hohen Amtsperson und dem guten Freunde gefĂ€llig zu sein, erklĂ€rt er sich bereit. Ja, er wolle es versuchen. »Bravo, Rouget«, trinkt ein General von gegenĂŒber ihm zu und mahnt ihn, er solle ihm dann gleich das Lied ins Feld nachschicken; irgendeinen schrittbeflĂŒgelnden, patriotischen Marschgesang könne die Rheinarmee wirklich brauchen. Inzwischen beginnt ein anderer eine Rede zu schwingen. Wieder wird toastiert, gelĂ€rmt, getrunken. Mit starker Woge geht die allgemeine Begeisterung ĂŒber die kleine zufĂ€llige Zwiesprache hinweg. Immer ekstatischer, immer lauter, immer frenetischer wird das Gelage, und die Stunde steht schon bedenklich spĂ€t nach Mitternacht, da die GĂ€ste das Haus des BĂŒrgermeisters verlassen. + +Es ist spĂ€t nach Mitternacht. Der 25. April, der fĂŒr Straßburg so erregende Tag der KriegserklĂ€rung, ist zu Ende, eigentlich hat der 26. April schon begonnen. NĂ€chtliches Dunkel liegt ĂŒber den HĂ€usern; aber trĂŒgerisch ist dieses Dunkel, denn noch fiebert die Stadt vor Erregung. In den Kasernen rĂŒsten die Soldaten zum Ausmarsch und manche der Vorsichtigen hinter verschlossenen LĂ€den vielleicht schon heimlich zur Flucht. Auf den Straßen marschieren einzelne Peletons, dazwischen jagen die klappernden Hufe der Meldereiter, dann rasselt wieder ein schwerer Zug Artillerie heran, und immer wieder hallt monoton der Ruf der Schildwache von Posten zu Posten. Zu nahe ist der Feind, zu unsicher und zu erregt die Seele der Stadt, als daß sie Schlaf fĂ€nde in so entscheidendem Augenblick. + +Auch Rouget, der jetzt in sein bescheidenes Zimmerchen in der Grande Rue 126 die runde Treppe hinaufgeklettert ist, fĂŒhlt sich merkwĂŒrdig erregt. Er hat sein Versprechen nicht vergessen, möglichst rasch ein Marschlied, ein Kriegslied fĂŒr die Rheinarmee zu versuchen. Unruhig stapft er in seinem engen Zimmer auf und nieder. Wie beginnen? Wie beginnen? Noch schwirren ihm alle die anfeuernden Rufe der Proklamationen, der Reden, der Toaste chaotisch durch den Sinn. »Aux armes, citoyens! ... Marchons, enfants de la libertĂ©! ... Ecrasons la tyrannie! ... L'Ă©tendard de la guerre est dĂ©ployĂ©! ...« Aber auch der andern Worte entsinnt er sich, die er im VorĂŒbergehen gehört, die Stimmen der Frauen, die um ihre Söhne zittern, die Sorge der Bauern, Frankreichs Felder könnten zerstampft werden und mit Blut gedĂŒngt von den fremden Kohorten. Halb unbewußt schreibt er die ersten beiden Zeilen hin, die nur Widerhall, Widerklang, Wiederholung sind jener Anrufe. + +»Allons, enfants de la patrie, + +Le jour de gloire est arrivĂ©!« + +Dann hĂ€lt er inne und stutzt. Das sitzt. Der Ansatz ist gut. Jetzt nur gleich den rechten Rhythmus finden, die Melodie zu den Worten. Er nimmt seine Geige vom Schrank, er probiert. Und wunderbar: gleich in den ersten Takten paßt sich der Rhythmus vollkommen den Worten an. Hastig schreibt er weiter, nun schon getragen, nun schon mitgerissen von der Kraft, die in ihn gefahren ist. Und mit einemmal strömt alles zusammen: alle die GefĂŒhle, die sich in dieser Stunde entladen, alle die Worte, die er auf der Straße, die er bei dem Bankett gehört, der Haß gegen die Tyrannen, die Angst um die Heimaterde, das Vertrauen zum Siege, die Liebe zur Freiheit. Rouget braucht gar nicht zu dichten, zu erfinden, er braucht nur in Reime zu bringen, in den hinreißenden Rhythmus seiner Melodie die Worte zu setzen, die heute, an diesem einzigen Tage, von Mund zu Mund gegangen, und er hat alles ausgesprochen, alles ausgesagt, alles ausgesungen, was die Nation in innerster Seele empfand. Und er braucht nicht zu komponieren, denn durch die verschlossenen FensterlĂ€den dringt der Rhythmus der Straße, der Stunde herein, dieser Rhythmus des Trotzes und der Herausforderung, der in dem Marschtritt der Soldaten, dem Schmettern der Trompeten, dem Rasseln der Kanonen liegt. Vielleicht vernimmt er ihn nicht selbst, nicht sein eigenes waches Ohr, aber der Genius der Stunde, der fĂŒr diese einzige Nacht Hausung genommen hat in seinem sterblichen Leibe, hat ihn vernommen. Und immer fĂŒgsamer gehorcht die Melodie dem hĂ€mmernden, dem jubelnden Takt, der Herzschlag eines ganzen Volkes ist. Wie unter fremdem Diktat schreibt hastig und immer hastiger Rouget die Worte, die Noten hin – ein Sturm ist ĂŒber ihn gekommen, wie er nie seine enge bĂŒrgerliche Seele durchbrauste. Eine Exaltation, eine Begeisterung, die nicht die seine ist, sondern magische Gewalt, zusammengeballt in eine einzige explosive Sekunde, reißt den armen Dilettanten hunderttausendfach ĂŒber sein eigenes Maß hinaus und schleudert ihn wie eine Rakete – eine Sekunde lang Licht und strahlende Flamme – bis zu den Sternen. Eine Nacht ist es dem KapitĂ€nleutnant Rouget de Lisle gegönnt, Bruder der Unsterblichen zu sein: aus den ĂŒbernommenen, der Straße, den Journalen abgeborgten Rufen des Anfangs formt sich ihm schöpferisches Wort und steigt empor zu einer Strophe, die in ihrer dichterischen Formulierung so unvergĂ€nglich ist wie die Melodie unsterblich. + +»Amour sacrĂ© de la patrie, + +Conduis, soutiens nos bras vengeurs, + +LibertĂ©, libertĂ© chĂ©rie, + +Combats avec tes dĂ©fenseurs.« + +Dann noch eine fĂŒnfte Strophe, die letzte, und aus einer Erregung und in einem Guß gestaltet, vollkommen das Wort der Melodie verbindend, ist noch vor dem Morgengrauen das unsterbliche Lied vollendet. Rouget löscht das Licht und wirft sich hin auf sein Bett. Irgend etwas, er weiß nicht was, hat ihn aufgehoben in eine nie gefĂŒhlte Helligkeit seiner Sinne, irgend etwas schleudert ihn jetzt nieder in eine dumpfe Erschöpfung. Er schlĂ€ft einen abgrĂŒndigen Schlaf, der wie ein Tod ist. Und tatsĂ€chlich ist schon wieder der Schöpfer, der Dichter, der Genius in ihm gestorben. Auf dem Tische aber liegt, losgelöst von dem Schlafenden, den dies Wunder wahrhaft im heiligen Rausch ĂŒberkommen, das vollendete Werk. Kaum ein zweites Mal in der Geschichte aller Völker und Zeiten ist ein Lied so rasch und so vollkommen gleichzeitig Wort und Musik geworden. + +Dieselben Glocken vom MĂŒnster wie immer verkĂŒnden den neuen Morgen. Ab und zu trĂ€gt der Wind vom Rhein her SchĂŒsse herĂŒber, die ersten GeplĂ€nkel haben begonnen. Rouget erwacht. Mit MĂŒhe tastet er sich aus dem Abgrund seines Schlafes empor. Etwas ist geschehen, fĂŒhlt er dumpf, etwas mit ihm geschehen, an das er nur dumpf sich erinnert. Dann erst bemerkt er auf dem Tisch das frischbeschriebene Blatt. Verse? Wann habe ich die geschrieben? Musik, in meiner eigenen Handschrift? Wann habe ich das komponiert? Ach ja, das Lied, das Freund Dietrich gestern erbeten, das Marschlied fĂŒr die Rheinarmee! Rouget liest seine Verse, summt dazu die Melodie, fĂŒhlt aber, wie immer der Schöpfer vor dem eben geschaffenen Werk, sich völlig ungewiß. Aber nebenan wohnt ein Regimentskamerad, dem zeigt und singt er es vor. Der Freund scheint zufrieden und schlĂ€gt nur einige kleine Änderungen vor. An dieser ersten Zustimmung gewinnt Rouget ein gewisses Zutrauen. Mit der ganzen Ungeduld eines Autors und stolz auf sein rasch erfĂŒlltes Versprechen, fĂ€llt er gleich dem BĂŒrgermeister Dietrich ins Haus, der im Garten seinen Morgenspaziergang macht und dabei eine neue Rede meditiert. Wie, Rouget? Schon fertig? Nun, da wollen wir gleich eine Probe abhalten. Die beiden gehen aus dem Garten in den Salon des Hauses, Dietrich setzt sich ans Klavier und spielt die Begleitung, Rouget singt den Text. Angelockt von der unerwarteten morgendlichen Musik kommt die Frau des BĂŒrgermeisters ins Zimmer und verspricht, Kopien von dem neuen Lied zu machen und als gelernte Musikerin, die sie ist, gleich die Begleitung auszuarbeiten, damit man schon heute nacht bei der Abendgesellschaft es den Freunden des Hauses zwischen allerhand andern Liedern vorsingen könne. Der BĂŒrgermeister Dietrich, stolz auf seine nette Tenorstimme, ĂŒbernimmt es, das Lied nun grĂŒndlicher zu studieren, und am 26. April, am Abend desselben Tages, in dessen Morgenstunden das Lied gedichtet und komponiert war, wird es zum erstenmal einer zufĂ€llig gewĂ€hlten Gesellschaft im Salon des BĂŒrgermeisters vorgesungen. + +Die Zuhörer scheinen freundlich applaudiert zu haben, und wahrscheinlich hat es an allerhand höflichen Komplimenten fĂŒr den anwesenden Autor nicht gefehlt. Aber selbstverstĂ€ndlich hat nicht die leiseste Ahnung die GĂ€ste des HĂŽtel de Broglie an dem großen Platz von Straßburg ĂŒberkommen, daß mit unsichtbaren FlĂŒgeln eine ewige Melodie sich niedergeschwungen in ihre irdische Gegenwart. Selten begreifen die Zeitgenossen auf den ersten Blick die GrĂ¶ĂŸe eines Menschen oder die GrĂ¶ĂŸe eines Werkes, und wie wenig sich die Frau BĂŒrgermeisterin jenes erstaunlichen Augenblicks bewußt wurde, beweist sie mit dem Brief an ihren Bruder, in dem sie ein Wunder zu einem gesellschaftlichen Ereignis banalisiert. »Du weißt, daß wir viele Leute im Haus empfangen und man immer etwas erfinden muß, um Abwechslung in die Unterhaltung zu bringen. Und so hat mein Mann die Idee gehabt, irgendein Gelegenheitslied komponieren zu lassen. Der KapitĂ€n vom Ingenieurkorps, Rouget de Lisle, ein liebenswĂŒrdiger Dichter und Kompositeur, hat sehr schnell diese Musik eines Kriegsliedes gemacht. Mein Mann, der eine gute Tenorstimme hat, hat das StĂŒck gleich gesungen, das sehr anziehend ist und eine gewisse Eigenart zeigt. Es ist ein besserer Gluck, lebendiger und belebter. Ich fĂŒr mein Teil habe meine Begabung fĂŒr Orchestrierung dabei angewandt und arrangierte die Partitur fĂŒr Klavier und andere Instrumente, so daß ich viel zu arbeiten habe. Das StĂŒck ist bei uns gespielt worden, zur großen Zufriedenheit der ganzen Gesellschaft.« + +»Zur großen Zufriedenheit der ganzen Gesellschaft« – das scheint uns heute ĂŒberraschend kĂŒhl. Aber der bloß freundliche Eindruck, die bloß laue Zustimmung ist verstĂ€ndlich, denn noch hat sich bei dieser ersten Darbietung die Marseillaise nicht wahrhaft in ihrer Kraft enthĂŒllen können. Die Marseillaise ist kein VortragsstĂŒck fĂŒr eine behagliche Tenorstimme und nicht bestimmt, in einem kleinbĂŒrgerlichen Salon zwischen Romanzen und italienischen Arien mit einer einzelnen Singstimme vorgetragen zu werden. Ein Lied, das aufrauscht zu den hĂ€mmernden, federnden, fordernden Takten »Aux armes, citoyens«, wendet sich an eine Masse, eine Menge, und seine wahre Orchestrierung sind klirrende Waffen, schmetternde Fanfaren, marschierende Regimenter. Nicht fĂŒr Zuhörer, fĂŒr kĂŒhl sitzende und behaglich genießende, war sie gedacht, sondern fĂŒr MittĂ€ter, MitkĂ€mpfer. Nicht einem einzelnen Sopran, einem Tenor ist sie zugesungen, sondern der tausendkehligen Masse, das vorbildliche Marschlied, Siegeslied, Todeslied, Heimatlied, Nationallied eines ganzen Volkes. Erst Begeisterung, aus der es zuerst geboren ward, wird dem Lied Rougets die begeisternde Gewalt verleihen. Noch hat das Lied nicht gezĂŒndet, noch haben in magischer Resonanz nicht die Worte, nicht die Melodie die Seele der Nation erreicht, noch kennt die Armee nicht ihr Marschlied, ihr Siegeslied, noch kennt die Revolution nicht ihren ewigen PĂ€an. + +Auch er selbst, dem ĂŒber Nacht dieses Wunder geschehen, Rouget de Lisle, ahnt ebensowenig wie die andern, was er traumwandlerisch und von einem treulosen Genius gefĂŒhrt, in jener einen Nacht geschaffen. Er freut sich natĂŒrlich herzhaft, der brave, liebenswĂŒrdige Dilettant, daß die eingeladenen GĂ€ste krĂ€ftig applaudieren, daß man ihn als Autor höflich komplimentiert. Mit der kleinen Eitelkeit eines kleinen Menschen sucht er diesen kleinen Erfolg in seinem kleinen Provinzkreise fleißig auszunĂŒtzen. Er singt in den KaffeehĂ€usern seinen Kameraden die neue Melodie vor, er lĂ€ĂŸt Abschriften herstellen und schickt sie an die GenerĂ€le der Rheinarmee. Inzwischen hat auf Befehl des BĂŒrgermeisters und Empfehlung der MilitĂ€rbehörden das Straßburger Musikkorps das »Kriegslied fĂŒr die Rheinarmee« einstudiert, und vier Tage spĂ€ter, beim Abmarsch der Truppen, spielt das Musikkorps der Straßburger Nationalgarde auf dem großen Platz den neuen Marsch. In patriotischer Weise erklĂ€rt sich auch der Straßburger Verleger bereit, den »Chant de guerre pour l'armĂ©e du Rhin« zu drucken, der respektvoll dem General Luckner von seinem militĂ€rischen Untergebenen gewidmet wird. Aber nicht ein einziger der GenerĂ€le der Rheinarmee denkt daran, die neue Weise beim Vormarsch wirklich spielen oder singen zu lassen, und so scheint, wie alle bisherigen Versuche Rougets, der Salonerfolg des »Allons, enfants de la patrie« ein Eintagserfolg, eine Provinzangelegenheit zu bleiben und als solche vergessen zu werden. + +Aber nie lĂ€ĂŸt sich die eingeborene Kraft eines Werkes auf die Dauer verbergen oder verschließen. Ein Kunstwerk kann vergessen werden von der Zeit, es kann verboten werden und versargt, immer aber erzwingt sich das Elementare den Sieg ĂŒber das Ephemere. Einen Monat, zwei Monate hört man nichts vom Kriegslied der Rheinarmee. Die gedruckten und handgeschriebenen Exemplare liegen und wandern herum in gleichgĂŒltigen HĂ€nden. Aber immer genĂŒgt es, wenn ein Werk auch nur einen einzigen Menschen wirklich begeistert, denn jede echte Begeisterung wird selber schöpferisch. Am andern Ende von Frankreich, in Marseille, gibt der Klub der Verfassungsfreunde am 22. Juni ein Bankett fĂŒr die abmarschierenden Freiwilligen. An langer Tafel sitzen fĂŒnfhundert junge, feurige Menschen in ihren neuen Uniformen der Nationalgarde; in ihrem Kreise fiebert genau die gleiche Stimmung wie an dem 25. April in Straßburg, nur noch heißer, hitziger und leidenschaftlicher, dank dem sĂŒdlichen Temperament der Marseiller, und nicht mehr so eitel siegesgewiß wie in jener ersten Stunde der KriegserklĂ€rung. Denn nicht wie jene GenerĂ€le flunkerten, sind die revolutionĂ€ren französischen Truppen gleich ĂŒber den Rhein marschiert und ĂŒberall mit offenen Armen empfangen worden. Im Gegenteil, der Feind ist tief ins französische Land vorgestoßen, die Freiheit ist bedroht, die Sache der Freiheit in Gefahr. + +Plötzlich, inmitten des Festmahls, schlĂ€gt einer – er heißt Mireur und ist ein Medizinstudent von der UniversitĂ€t in Montpellier – an sein Glas und erhebt sich. Alle verstummen und blicken auf ihn. Man erwartet eine Rede und eine Ansprache. Aber statt dessen schwingt der junge Mensch die Rechte empor und stimmt ein Lied an, ein neues Lied, das sie alle nicht kennen und von dem niemand weiß, wie es in seine Hand geraten ist, »Allons, enfants de la patrie«. Und nun zĂŒndet der Funke, als wĂ€re er in ein Pulverfaß gefallen. GefĂŒhl und GefĂŒhl, die ewigen Pole, haben sich berĂŒhrt. Alle diese jungen Menschen, die morgen ausrĂŒcken, die fĂŒr die Freiheit kĂ€mpfen wollen und fĂŒr das Vaterland zu sterben bereit sind, empfinden ihren innersten Willen, ihren ureigensten Gedanken in diesen Worten ausgedrĂŒckt; unwiderstehlich reißt der Rhythmus sie auf in eine einhellige, ekstatische Begeisterung. Strophe um Strophe wird bejubelt, noch einmal, noch ein zweites Mal muß das Lied wiederholt werden, und schon ist die Melodie ihr eigen geworden, schon singen sie, erregt aufgesprungen, die GlĂ€ser erhoben, den Refrain donnernd mit. »Aux armes, citoyens! Formez vos bataillons!« Neugierig drĂ€ngen von der Straße Menschen heran, um zu hören, was hier mit solcher Begeisterung gesungen wird, und schon singen sie selber mit; am nĂ€chsten Tage ist die Melodie auf tausend und zehntausend Lippen. Ein Neudruck verbreitet sie, und wie die fĂŒnfhundert Freiwilligen am 2. Juli abmarschieren, wandert das Lied mit ihnen. Wenn sie mĂŒde werden auf der Landstraße, wenn ihr Schritt schlapp wird, braucht nur einer die Hymne anzustimmen, und schon gibt ihr mitreißender, ihr vorwĂ€rtsreißender Takt ihnen allen erneuten Schwung. Wenn sie durch ein Dorf marschieren und staunend die Bauern, neugierig die Einwohner sich versammeln, stimmen sie es im Chore an. Es ist ihr Lied geworden, sie haben, ohne es zu wissen, daß es fĂŒr die Rheinarmee bestimmt war, ohne zu ahnen, von wem und wann es gedichtet war, den Hymnus als den ihres Bataillons, als Bekenntnis ihres Lebens und Sterbens ĂŒbernommen. Es gehört zu ihnen wie die Fahne, und in leidenschaftlichem Vormarsch wollen sie ihn ĂŒber die Welt tragen. + +Der erste große Sieg der Marseillaise – denn so wird die Hymne Rougets bald sich nennen – ist Paris. Am 30. Juni marschiert das Bataillon durch die Faubourgs ein, die Fahne voran und das Lied. Tausende und Zehntausende stehen und warten in den Straßen, um sie festlich zu empfangen, und wie die Marseiller nun anrĂŒcken, fĂŒnfhundert MĂ€nner, gleichsam aus einer Kehle zum Taktschritt das Lied singend und immer wieder singend, horcht die Menge auf. Was ist das fĂŒr eine herrliche, hinreißende Hymne, welche die Marseiller da singen? Was fĂŒr ein Fanfarenruf dies, der in alle Herzen fĂ€hrt, begleitet vom prasselnden Trommelschlag, dies »Aux armes, citoyens!« Zwei Stunden spĂ€ter, drei Stunden spĂ€ter, und schon klingt der Refrain in allen Gassen wieder. Vergessen ist das Ȃa ira«, vergessen die alten MĂ€rsche, die abgebrauchten Couplets: die Revolution hat ihre eigne Stimme erkannt, die Revolution hat ihr Lied gefunden. + +Lawinenhaft wird nun die Verbreitung, unaufhaltsam der Siegeslauf. Auf den Banketten wird die Hymne gesungen, in den Theatern und Klubs, dann sogar in den Kirchen nach dem Tedeum und bald anstatt des Tedeum. In einem, in zwei Monaten ist die Marseillaise das Lied des Volkes geworden und der ganzen Armee. Servan, der erste republikanische Kriegsminister, erkennt mit klugem Blick die tonische, die exaltierende Kraft eines so einzigartigen nationalen Schlachtgesanges. In eiliger Ordre befiehlt er, daß hunderttausend Exemplare an alle Kommandos ĂŒberstellt werden sollen, und in zwei oder drei NĂ€chten ist das Lied des Unbekannten mehr verbreitet als alle Werke MoliĂšres, Racines und Voltaires. Kein Fest, das nicht mit der Marseillaise schließt, keine Schlacht, wo nicht vorerst die Regimentsmusiker das Kriegslied der Freiheit intonieren. Bei Jemappes und Nerwinden ordnen sich die Regimenter im Chorgesang zum entscheidenden Sturme, und die feindlichen GenerĂ€le, die nur mit dem alten Rezept der verdoppelten Branntweinration ihre Soldaten stimulieren können, sehen erschreckt, daß sie nichts der explosiven Kraft dieser »fĂŒrchterlichen« Hymne entgegenzusetzen haben, wenn sie, gleichzeitig von Tausenden und Tausenden gesungen, wie eine klingende, klirrende Welle gegen ihre eigenen Reihen stĂŒrmt. Über allen Schlachten Frankreichs schwebt nun, UnzĂ€hlige mitreißend in Begeisterung und Tod, die Marseillaise, wie Nike, die geflĂŒgelte Göttin des Sieges. + +Unterdessen sitzt in der kleinen Garnison von HĂŒningen ein höchst unbekannter Hauptmann des Festungswesens, Rouget, und entwirft brav WĂ€lle und Verschanzungen. Vielleicht hat er schon das »Kriegslied der Rheinarmee« vergessen, das er in jener verschollenen Nacht des 26. April 1792 geschaffen, und wagt gar nicht zu ahnen, wenn er in den Gazetten von jener andern Hymne, jenem andern Kriegslied liest, das im Sturm Paris erobert, daß dieses sieghafte »Lied der Marseiller« Wort fĂŒr Wort und Takt fĂŒr Takt nichts anderes ist als das in ihm und an ihm geschehene Wunder jener Nacht. Denn grausame Ironie des Schicksals – in alle Himmel rauschend, zu den Sternen brausend, trĂ€gt diese Melodie nur einen einzigen Menschen nicht hoch, nĂ€mlich den Menschen, der sie ersonnen. Niemand in ganz Frankreich kĂŒmmert sich um den Hauptmann Rouget de Lisle, der riesigste Ruhm, den je ein Lied gekannt, bleibt dem Liede, und nicht ein Schatten davon fĂ€llt auf seinen Schöpfer Rouget. Sein Name wird nicht mitgedruckt auf den Texten, und er selbst bliebe völlig unbeachtet bei den Herren der Stunde, brĂ€chte er sich nicht selbst in Ă€rgerliche Erinnerung. Denn – geniale Paradoxie, wie sie nur die Geschichte erfinden kann – der Schöpfer der Revolutionshymne ist kein RevolutionĂ€r; im Gegenteil: der wie kein anderer die Revolution durch sein unsterbliches Lied fortgetrieben, möchte sie mit allen KrĂ€ften nun wieder zurĂŒckdĂ€mmen. Als die Marseiller und der Pariser Pöbel – seinen Gesang auf den Lippen – die Tuilerien stĂŒrmen und man den König absetzt, hat Rouget de Lisle genug von der Revolution. Er weigert sich, den Eid auf die Republik zu leisten, und quittiert lieber seinen Dienst, als den Jakobinern zu dienen. Das Wort von der »libertĂ© chĂ©rie«, der geliebten Freiheit, in seiner Hymne ist diesem aufrechten Manne kein leeres Wort: er verabscheut die neuen Tyrannen und Despoten im Konvent nicht minder, als er die gekrönten und gesalbten jenseits der Grenzen haßte. Offen macht er seinem Unmut gegen den Wohlfahrtsausschuß Luft, als sein Freund, der BĂŒrgermeister Dietrich, der Pate der Marseillaise, als der General Luckner, dem sie gewidmet war, als alle die Offiziere und Adeligen, die an jenem Abend ihre ersten Zuhörer waren, auf die Guillotine geschleppt werden, und bald ereignet sich die groteske Situation, daß der Dichter der Revolution als KonterrevolutionĂ€r gefangengesetzt wird, daß man ihm, und gerade ihm den Prozeß macht mit der Anschuldigung, sein Vaterland verraten zu haben. Nur der 9. Thermidor, der mit dem Sturz Robespierres die GefĂ€ngnisse öffnet, hat der Französischen Revolution die Schmach erspart, den Dichter ihres unsterblichsten Liedes dem »nationalen Rasiermesser« ĂŒberantwortet zu haben. + +Immerhin, es wĂ€re ein heldischer Tod gewesen und nicht ein so klĂ€gliches VerdĂ€mmern im Dunkel, wie es Rouget verhĂ€ngt ist. Denn um mehr als vierzig Jahre, um Tausende und Tausende von Tagen ĂŒberlebt der unglĂŒckliche Rouget den einzigen wirklich schöpferischen Tag seines Lebens. Man hat ihm die Uniform ausgezogen, man hat ihm die Pension gestrichen; die Gedichte, die Opern, die Texte, die er schreibt, werden nicht gedruckt, nicht gespielt. Das Schicksal verzeiht es dem Dilettanten nicht, sich unberufen in die Reihe der Unsterblichen eingedrĂ€ngt zu haben. Mit allerhand kleinen und nicht immer sauberen GeschĂ€ften fristet der kleine Mann sein kleines Leben. Vergebens versuchen aus Mitleid Carnot und spĂ€ter Bonaparte, ihm zu helfen. Aber etwas in dem Charakter Rougets ist rettungslos vergiftet und verschroben geworden durch die Grausamkeit jenes Zufalls, der ihn Gott und Genius sein ließ drei Stunden lang und dann verĂ€chtlich wieder zurĂŒckwarf in die eigene Nichtigkeit. Er zankt und queruliert mit allen MĂ€chten, er schreibt an Bonaparte, der ihm helfen wollte, freche und pathetische Briefe, er rĂŒhmt sich öffentlich, bei der Volksabstimmung gegen ihn gestimmt zu haben. Seine GeschĂ€fte verwickeln ihn in dunkle AffĂ€ren, und wegen eines unbezahlten Wechsels muß er sogar mit dem SchuldgefĂ€ngnis St. Pelargie Bekanntschaft machen. Unbeliebt an allen Stellen, von Schuldnern gejagt, von der Polizei stĂ€ndig bespitzelt, verkriecht er sich schließlich irgendwo in der Provinz, und wie aus einem Grabe, abgeschieden und vergessen, lauscht er von dort dem Schicksal seines unsterblichen Liedes; er erlebt es noch, daß die Marseillaise mit den siegreichen Armeen ĂŒber alle LĂ€nder Europas stĂŒrmt, dann noch, daß Napoleon, kaum Kaiser geworden, sie als zu revolutionĂ€r aus allen Programmen streichen lĂ€ĂŸt, daß die Bourbonen sie dann gĂ€nzlich verbieten. Nur ein Staunen kommt den verbitterten Greis an, wie nach einem Menschenalter die Julirevolution 1830 seine Worte, seine Melodie in alter Kraft auferstehen lĂ€ĂŸt an den Barrikaden von Paris und der BĂŒrgerkönig Louis Philippe ihm als dem Dichter ein kleines Pensiönchen verleiht. Wie ein Traum scheint es dem Verschollenen, dem Vergessenen, daß man sich seiner ĂŒberhaupt noch erinnert, aber es ist nur ein kleines Erinnern mehr, und als der SechsundsiebzigjĂ€hrige endlich in Choisy-le-Roi 1836 stirbt, nennt und kennt niemand seinen Namen mehr. Abermals muß ein Menschenalter vergehen: erst im Weltkrieg, da die Marseillaise, lĂ€ngst Nationalhymnus geworden, an allen Fronten Frankreichs wieder kriegerisch erklingt, wird angeordnet, daß der Leichnam des kleinen Hauptmanns Rouget an derselben Stelle im Invalidendom bestattet werde wie der des kleinen Leutnants Bonaparte, und so ruht endlich der höchst unberĂŒhmte Schöpfer eines ewigen Liedes in der Ruhmeskrypta seines Vaterlandes von der EnttĂ€uschung aus, nichts gewesen zu sein als der Dichter einer einzigen Nacht. diff --git a/data/sternstunden04-en.txt b/data/sternstunden04-en.txt new file mode 100644 index 0000000000000000000000000000000000000000..9754300bc885e9c2b8b2e98dd479ab3337749b58 --- /dev/null +++ b/data/sternstunden04-en.txt @@ -0,0 +1,61 @@ +ï»żhttps://www.deepl.com/translator machine translated + +The genius of a night + +The Marseillaise, April 25, 1792 + +The genius of one night + +In 1792, two months, three months already, the French National Assembly is wavering over the decision: war against the coalition of emperors and kings or peace. Louis XVI is himself undecided; he senses the danger of a victory for the revolutionaries, he senses the danger of their defeat. The parties are also uncertain. The Girondists are pushing for war to retain power, Robespierre and the Jacobins are fighting for peace to seize power themselves in the meantime. Day by day the situation becomes more tense, the journals clamor, the clubs discuss, ever wilder the rumors buzz, and ever more public opinion is aroused by them. As always a decision, it therefore becomes a kind of liberation, as on April 20 the King of France finally declares war on the Emperor of Austria and the King of Prussia. + +During these weeks and weeks the electric tension has lain over Paris, weighing heavily and disturbing the soul; but the excitement in the border towns is even more oppressive, even more threatening. Troops are already assembled in all bivouacs, volunteers and national guards are being equipped in every village, in every town, fortifications are being repaired everywhere, and especially in Alsace it is known that on its soil, as always between France and Germany, the first decision will be made. On the banks of the Rhine, the enemy, the adversary, is not, as in Paris, a blurred, a pathetic-rhetorical concept, but a visible, sensuous presence; for at the fortified bridgehead, from the tower of the cathedral, the approaching Prussian regiments can be perceived with the naked eye. At night the wind carries the rolling of the enemy artillery wagons, the clanking of weapons, the trumpet signals across the stream glittering indifferently in the moonlight. And everyone knows: only one word, only one decree is needed, and from the silent mouth of the Prussian cannons thunder and lightning will fly, and the thousand-year struggle between Germany and France will have begun once again - this time in the name of the new freedom on the one side and in the name of the old order on the other. + +It was an incomparable day when, on April 25, 1792, the news of the declaration of war was brought from Paris to Strasbourg by convoys. Immediately the people streamed out of all the streets and houses into the open squares, ready for war the whole garrison marched to the last parade, regiment after regiment. On the main square, Mayor Dietrich awaits them, the tricolor sash around his body, the cockade on his hat, which he waves in greeting to the soldiers. The call of the fanfare and the roll of the drums call for silence. In a loud voice, Dietrich reads the text of the declaration of war in French and German in this and all other places in the city. After his last words the regimental musicians intoned the first, the preliminary war song of the revolution, the "Ça ira", actually a sparkling, high-spirited, mocking dance melody, but the clashing, the thundering steps of the marching out regiments gave it a martial beat. Then the crowd disperses, carrying the fanned enthusiasm into all the alleys and houses; in the cafes, in the clubs, inflammatory speeches are made and proclamations distributed. "Aux armes, citoyens! L'Ă©tendard de la guerre est dĂ©ployĂ©! Le signal est donnĂ©!"; thus and with similar calls they begin, and everywhere, in all the speeches, in all the newspapers, on all the posters, on all the lips, are repeated such punchy, rhythmic cries as "Aux armes, citoyens!". Qu'ils tremblent donc, les despotes couronnĂ©s! Marchons, enfants de la libertĂ©!", and each time the masses cheer and cheer to the fiery words. + +The great masses in the streets and squares always cheer when war is declared, but other voices, quieter, more distant voices, always stir in such moments of street jubilation; fear, too, worry, too, wakes up at a declaration of war, only it whispers secretly in the parlors or remains silent with a pale lip. Eternally and everywhere are mothers who say to themselves: Will the foreign soldiers not murder my children; in all countries are the peasants who worry about their possessions, their fields, their huts, their cattle and their harvest. Will not their seed be trampled, their house plundered by the brutal hordes, not fertilized with blood the fields of their labors? But the mayor of Strasbourg, Frederick Baron Dietrich, actually an aristocrat, but like the best aristocracy of France at that time devoted to the cause of the new freedom with all his soul, wants only the loud, the ringing voices of confidence to speak; consciously he turns the day of the declaration of war into a public celebration. With his sash across his chest, he hurried from one meeting to another to cheer the people. He distributes wine and food to the departing soldiers, and in the evening he gathers the generals, the officers and the most important officials in his spacious house on the Place de Broglie for a farewell party, to which the enthusiasm already gives the character of a victory celebration. The generals, confident of victory as always generals, preside, the young officers, who see in the war the meaning of their lives fulfilled, have free word. One cheers the other. They swing their sabers, they embrace, they drink to each other, they make passionate and increasingly passionate speeches over good wine. And again the same stimulating words of the journals and proclamations recur in all the speeches: "To arms, citizens! Let us march! Let us save the fatherland! Soon they will tremble, the crowned despots. Now that the flag of victory has unfurled, the day has come to carry the tricolor over the world! Everyone must give his best now, for the king, for the flag, for freedom!" The whole people, the whole country at such moments wants to become a sacred unity through faith in victory and enthusiasm for the cause of freedom. + +Suddenly, in the midst of talking and toasting, Mayor Dietrich turned to a young captain from the fortress corps, named Rouget, sitting at his side. He remembered that half a year ago, on the occasion of the proclamation of the Constitution, this nice officer, not exactly handsome but sympathetic, had written a rather nice hymn to liberty, which the regimental musician Pleyel immediately set to music. The unpretentious work had proved to be singable, the military band had learned it, it had been played in the public square and sung in the choir. Wouldn't the declaration of war and the departure be a good occasion to stage a similar celebration? So Mayor Dietrich casually asks, as one would ask a good acquaintance for a favor, Captain Rouget (who has quite unjustifiably ennobled himself and calls himself Rouget de Lisle), whether he would not like to take advantage of the patriotic occasion and compose something for the marching troops, a war song for the Rhine army, which is to march out against the enemy tomorrow. + +Rouget, a modest, insignificant man who never considered himself a great composer - his verses were never printed, his operas refĂŒsiert - knows that occasional verses flow easily into his pen. To please the high official and the good friend, he declares himself ready. Yes, he wants to try. "Bravo, Rouget," a general from across the street drinks to him and admonishes him that he should then immediately send the song after him into the field; the Rhine Army could really use some step-winging, patriotic marching song. In the meantime, someone else begins to make a speech. Again there is toasting, noise, drinking. With a strong wave the general enthusiasm goes over the small coincidental dialogue. The revelry becomes more and more ecstatic, louder and louder, more and more frenetic, and the hour is already precariously late after midnight, when the guests leave the mayor's house. + +It is late after midnight. April 25, the day of the declaration of war, which was so exciting for Strasbourg, has come to an end; in fact, April 26 has already begun. Nightly darkness lies over the houses; but this darkness is deceptive, for the city is still feverish with excitement. In the barracks, the soldiers are preparing to march out, and some of the cautious ones are perhaps already secretly fleeing behind closed shutters. In the streets, individual peletons march, the clattering hooves of the dispatch riders hunt between them, then another heavy platoon of artillery rattles up, and again and again the call of the shield guard echoes monotonously from post to post. The enemy is too close, the soul of the city too uncertain and too excited to find sleep at such a decisive moment. + +Rouget, who has now climbed the circular staircase to his modest little room at 126 Grande Rue, also feels strangely aroused. He has not forgotten his promise to attempt as quickly as possible a marching song, a war song for the Rhine Army. Restlessly he trudges up and down his narrow room. How to begin? How to begin? All the cheering shouts of the proclamations, the speeches, the toasts are still whirring chaotically through his mind. "Aux armes, citoyens! ... Marchons, enfants de la libertĂ©! ... Ecrasons la tyrannie! ... L'Ă©tendard de la guerre est dĂ©ployĂ©! ..." But he also remembers the other words he heard in passing, the voices of women trembling for their sons, the concern of the peasants that France's fields might be trampled and fertilized with blood by the foreign cohorts. Half unconsciously, he writes down the first two lines, which are only echoes, reverberations, repetitions of those calls. + +"Allons, enfants de la patrie, + +Le jour de gloire est arrivĂ©!" + +Then he pauses and pauses. It sits. The approach is good. Now just find the right rhythm, the melody to the words. He takes his violin from the cabinet, tries it out. And wonderful: in the very first bars, the rhythm adapts perfectly to the words. Hastily he continues to write, now already carried along, now already carried away by the power that has entered him. And all at once everything flows together: all the feelings that are discharged in this hour, all the words that he heard on the street, that he heard at the banquet, the hatred against the tyrants, the fear for the native soil, the confidence for victory, the love for freedom. Rouget does not even need to write poetry, to invent, he only needs to put into rhyme, into the ravishing rhythm of his melody, the words that today, on this single day, have passed from mouth to mouth, and he has spoken everything, said everything, sung everything that the nation felt in its innermost soul. And he does not need to compose, because through the closed shutters penetrates the rhythm of the street, of the hour, this rhythm of defiance and challenge, which lies in the marching of the soldiers, the blare of the trumpets, the rattle of the cannons. Perhaps he does not hear it himself, not his own alert ear, but the genius of the hour, who has taken up residence in his mortal body for this single night, has heard it. And more and more docilely the melody obeys the hammering, the jubilant beat, which is the heartbeat of a whole people. As if under foreign dictation, Rouget hastily and ever more hastily writes down the words, the notes - a storm has come over him, such as has never raged through his narrow bourgeois soul. An exaltation, an enthusiasm that is not his own, but magical force, concentrated into a single explosive second, sweeps the poor dilettante a hundred thousand times beyond his own measure and hurls him like a rocket - for a second light and radiant flame - to the stars. One night it is granted to Lieutenant-Captain Rouget de Lisle to be brother of the immortals: from the adopted shouts of the beginning, borrowed from the street, from the journals, creative word forms itself to him and rises to a stanza which in its poetic formulation is as immortal as the melody is immortal. + +"Amour sacrĂ© de la patrie, + +Conduis, soutiens nos bras vengeurs, + +LibertĂ©, libertĂ© chĂ©rie, + +Combats avec tes dĂ©fenseurs." + +Then a fifth stanza, the last, and formed from one excitement and in one cast, perfectly uniting the word of the melody, the immortal song is completed before dawn. Rouget extinguishes the light and lies down on his bed. Something, he does not know what, has lifted him up into a never felt brightness of his senses, something now hurls him down into a dull exhaustion. He sleeps an abysmal sleep, which is like a death. And indeed the creator, the poet, the genius in him has died again. But on the table, detached from the sleeper, whom this miracle truly overcomes in holy intoxication, lies the completed work. Hardly a second time in the history of all peoples and times has a song become word and music so quickly and so perfectly at the same time. + +The same bells from the minster as always announce the new morning. Now and then the wind carries shots from the Rhine, the first skirmishes have begun. Rouget wakes up. With difficulty he gropes his way up from the abyss of his sleep. Something has happened, he feels dully, something has happened to him that he remembers only dully. Only then does he notice the freshly written page on the table. Verses? When did I write these? Music, in my own handwriting? When did I compose that? Oh yes, the song that friend Dietrich asked for yesterday, the marching song for the Rhine army! Rouget reads his verses, hums the melody to it, but feels, as always the creator before the just created work, completely uncertain. But next door lives a regimental comrade, to whom he shows and sings it. The friend seems satisfied and suggests only a few minor changes. Rouget gains a certain confidence from this first approval. With all the impatience of an author and proud of his quickly fulfilled promise, he immediately falls in with Mayor Dietrich, who is taking his morning walk in the garden, meditating on a new speech. How, Rouget? Already ready? Well, let's have a rehearsal right away. The two walk out of the garden into the parlor of the house, Dietrich sits down at the piano and plays the accompaniment, Rouget sings the text. Attracted by the unexpected morning music, the mayor's wife comes into the room and promises to make copies of the new song and, being a trained musician, to work out the accompaniment right away, so that it can be sung to the friends of the house among all sorts of other songs at the evening party tonight. The mayor Dietrich, proud of his nice tenor voice, took it upon himself to study the song more thoroughly, and on April 26, in the evening of the same day, in the morning hours of which the song was composed, it was sung for the first time to a randomly chosen company in the mayor's salon. + +The audience seems to have applauded kindly, and probably there was no lack of all kinds of polite compliments for the present author. But, of course, not the slightest inkling came over the guests of the HĂŽtel de Broglie in the great square of Strasbourg that with invisible wings an eternal melody had swooped down into their earthly presence. Rarely do contemporaries comprehend at first sight the greatness of a man or the greatness of a work, and how little the Lady Mayoress became aware of that amazing moment she proves with the letter to her brother in which she trivializes a miracle into a social event. "You know that we receive many people in the house and it is always necessary to invent something to bring variety to the entertainment. And so my husband had the idea of having some occasional song composed. The captain of the Corps of Engineers, Rouget de Lisle, a kind poet and composer, very quickly made this music of a war song. My husband, who has a good tenor voice, immediately sang the piece, which is very attractive and shows a certain peculiarity. It is a better Gluck, more lively and animated. For my part, I applied my talent for orchestration to it and arranged the score for piano and other instruments, so I have a lot to work with. The piece has been played in our house, to the great satisfaction of the whole company." + +"To the great satisfaction of the whole society" - that seems surprisingly cool to us today. But the merely friendly impression, the merely lukewarm approval is understandable, for the Marseillaise has not yet been able to truly reveal its power in this first performance. The Marseillaise is not a recital piece for a comfortable tenor voice and is not meant to be performed in a petty bourgeois salon between romances and Italian arias with a single singing voice. A song that roars to the pounding, bouncing, demanding bars of "Aux armes, citoyens" addresses a mass, a crowd, and its true orchestration is clashing arms, blaring fanfares, marching regiments. It was not meant for listeners, for the coolly seated and comfortably enjoying, but for accomplices, fellow fighters. It was not sung to a single soprano or tenor, but to the thousand-throated masses, the exemplary marching song, victory song, death song, homeland song, national song of an entire people. Only enthusiasm, from which it was first born, will give Rouget's song its inspiring power. The song has not yet ignited, the words have not yet magically resonated, the melody has not yet reached the soul of the nation, the army does not yet know its marching song, its victory song, the revolution does not yet know its eternal paean. + +Even he himself, to whom this miracle happened overnight, Rouget de Lisle, has as little idea as the others what he created in that one night, somnambulistically and guided by a faithless genius. He is of course heartily pleased, the good, amiable dilettante, that the invited guests applaud vigorously, that he is politely complimented as an author. With the small vanity of a small person, he seeks to make diligent use of this small success in his small provincial circle. He sings the new melody to his comrades in the coffee houses, he has copies made and sends them to the generals of the Rhine army. In the meantime, on the order of the mayor and the recommendation of the military authorities, the Strasbourg music corps rehearsed the "War Song for the Army of the Rhine", and four days later, at the departure of the troops, the music corps of the Strasbourg National Guard played the new march in the large square. In patriotic fashion, the Strasbourg publisher also agrees to print the "Chant de guerre pour l'armĂ©e du Rhin", which is respectfully dedicated to General Luckner by his military subordinate. But not a single one of the generals of the Rhine army thinks of actually having the new tune played or sung during the advance, and so, like all Rouget's previous attempts, the salon success of "Allons, enfants de la patrie" seems to remain a one-day success, a provincial affair, and to be forgotten as such. + +But the innate power of a work can never be concealed or closed off in the long run. A work of art can be forgotten by time, it can be forbidden and become stale, but the elemental always forces its way to victory over the ephemeral. One month, two months nothing is heard of the war song of the Rhine army. The printed and handwritten copies lie and wander around in indifferent hands. But it is always enough if a work really inspires even a single person, for every genuine enthusiasm itself becomes creative. At the other end of France, in Marseille, the Club of the Friends of the Constitution held a banquet for the marching volunteers on June 22. Five hundred young, fiery people in their new uniforms of the National Guard were seated at a long table; in their circle exactly the same mood as on April 25 in Strasbourg, only even hotter, more heated and more passionate, thanks to the southern temperament of the people of Marseilles, and no longer so vainly confident of victory as in that first hour of the declaration of war. For not, as those generals fibbed, have the revolutionary French troops marched straight across the Rhine and been welcomed everywhere with open arms. On the contrary, the enemy has advanced deep into the French countryside, freedom is threatened, the cause of liberty is in danger. + +Suddenly, in the midst of the feast, one - his name is Mireur and he is a medical student from the University of Montpellier - strikes his glass and rises. Everyone falls silent and looks at him. One expects a speech and an address. But instead, the young man swings up his right hand and intones a song, a new song that they all don't know and no one knows how it got into his hand, "Allons, enfants de la patrie." And now the spark ignites as if it had fallen into a powder keg. Feeling and emotion, the eternal poles, have touched. All these young people who are going out tomorrow, who want to fight for freedom and are ready to die for the fatherland, feel their innermost will, their very own thoughts expressed in these words; irresistibly the rhythm sweeps them up into a unanimous, ecstatic enthusiasm. Verse after verse is cheered, once again, a second time the song must be repeated, and already the melody has become their own, already they sing, excitedly jumping up, glasses raised, the refrain thundering along. "Aux armes, citoyens! Formez vos bataillons!" Curious people crowd in from the street to hear what is being sung here with such enthusiasm, and already they are singing along themselves; the next day the melody is on a thousand and ten thousand lips. A reprint spreads it, and as the five hundred volunteers march off on July 2, the song travels with them. When they get tired on the road, when their step becomes slack, only one person needs to sing the hymn, and its rousing, its forward-rushing beat gives them all renewed momentum. When they march through a village and the peasants gather in amazement, the inhabitants curious, they sing it in chorus. It has become their song, they have, without knowing that it was intended for the Rhine Army, without suspecting by whom and when it was composed, adopted the hymn as that of their battalion, as a confession of their life and death. It belongs to them like the flag, and in passionate advance they want to carry it over the world. + +The first great victory of the Marseillaise - for that is what Rouget's anthem will soon call itself - is Paris. On June 30, the battalion marches in through the faubourgs, flag in front and song. Thousands and tens of thousands stand and wait in the streets to receive them festively, and as the Marseillers now approach, five hundred men, singing as it were from one throat to the beat of the song and singing it again and again, the crowd listens. What is this magnificent, ravishing hymn that the people of Marseilles are singing? What a fanfare this, driving into all hearts, accompanied by the pattering drumbeat, this "Aux armes, citoyens!" Two hours later, three hours later, and already the refrain resounds in all alleys again. Forgotten is the "Ça ira," forgotten the old marches, the worn-out couplets: the revolution has recognized its own voice, the revolution has found its song. + + +The spread of the hymn became avalanche-like, the triumphant run unstoppable. The hymn is sung at banquets, in theaters and clubs, then even in churches after the Tedeum and soon instead of the Tedeum. In one, in two months the Marseillaise has become the song of the people and of the whole army. Servan, the first republican minister of war, recognizes with a wise eye the tonic, the exalting power of such a unique national battle song. In hasty order he commands that a hundred thousand copies be sent to all commands, and in two or three nights the Song of the Unknown is more widespread than all the works of MoliĂšre, Racine, and Voltaire. No feast that does not close with the Marseillaise, no battle where regimental musicians do not for the time being intone the war song of freedom. At Jemappes and Nerwinden, the regiments arrange themselves in choral song for the decisive storm, and the enemy generals, who can only stimulate their soldiers with the old recipe of doubled brandy rations, see with fright that they have nothing to oppose the explosive force of this "terrible" hymn when, sung simultaneously by thousands and thousands, it rushes against their own ranks like a ringing, clashing wave. Over all the battles of France now floats, sweeping countless into enthusiasm and death, the Marseillaise, like Nike, the winged goddess of victory. + +Meanwhile, in the small garrison of HĂŒningen, a most unknown captain of fortifications, Rouget, sits dutifully designing ramparts and entrenchments. Perhaps he has already forgotten the "War Song of the Rhine Army" that he created on that lost night of April 26, 1792, and does not even dare to suspect, when he reads in the gazettes about that other hymn, that other war song that takes Paris by storm, that this victorious "Song of the Marseilles" is word for word and measure for measure nothing other than the miracle of that night that happened in him and to him. For cruel irony of fate - rushing to all heavens, roaring to the stars, this melody does not carry high only one person, namely the person who devised it. Nobody in all France cares about Captain Rouget de Lisle, the most enormous fame ever known to a song remains to the song, and not a shadow of it falls on its creator Rouget. His name is not printed on the texts, and he himself would remain completely unnoticed by the masters of the hour, if he did not bring himself into annoying memory. For - ingenious paradox as only history can invent it - the creator of the revolutionary hymn is not a revolutionary; on the contrary: he who, like no other, drove the revolution on through his immortal song, now wants to curb it back with all his might. When the people of Marseilles and the Parisian mob - his song on their lips - storm the Tuileries and the king is deposed, Rouget de Lisle has had enough of the revolution. He refuses to take the oath of allegiance to the Republic and resigns rather than serve the Jacobins. The word of "libertĂ© chĂ©rie", the beloved liberty, in his hymn is not an empty word to this upright man: he detests the new tyrants and despots in the Convention no less than he hated those crowned and anointed beyond the borders. He openly gives vent to his displeasure against the Welfare Committee when his friend, Mayor Dietrich, the godfather of the Marseillaise, when General Luckner, to whom it was dedicated, when all the officers and nobles who were their first listeners that evening are dragged to the guillotine, and soon the grotesque situation occurs that the poet of the Revolution is imprisoned as a counter-revolutionary, that he, and he of all people, is put on trial with the accusation of having betrayed his fatherland. Only the 9th Thermidor, which opened the prisons with the fall of Robespierre, spared the French Revolution the ignominy of having handed over the poet of its most immortal song to the "national razor". + +At least, it would have been a heroic death and not such a miserable twilight in the darkness as Rouget is imposed. For by more than forty years, by thousands and thousands of days, the unfortunate Rouget survives the only truly creative day of his life. His uniform has been taken off, his pension has been cancelled; the poems, the operas, the texts he writes are not printed, not performed. The fate does not forgive the dilettante for having entered the ranks of the immortals without being called. With all kinds of small and not always clean business the little man ekes out his small life. In vain, Carnot and later Bonaparte try to help him out of pity. But something in Rouget's character has become irredeemably poisoned and twisted by the cruelty of that coincidence which let him be God and genius for three hours and then contemptuously threw him back into his own nothingness. He quarrels and crosses with all powers, he writes insolent and pathetic letters to Bonaparte, who wanted to help him, he boasts publicly that he voted against him in the referendum. His business entangles him in dark affairs, and because of an unpaid bill of exchange he even has to make acquaintance with the debtors' prison St. Pelargie. Unpopular in all places, hounded by debtors, constantly spied on by the police, he finally holes up somewhere in the provinces, and as if from a grave, secluded and forgotten, he listens from there to the fate of his immortal song; he still experiences that the Marseillaise storms with the victorious armies over all the countries of Europe, then still that Napoleon, hardly emperor, has it deleted from all programs as too revolutionary, that the Bourbons then ban it completely. The embittered old man is only amazed when, after an age, the July Revolution of 1830 resurrects his words and his melody in their old strength at the barricades of Paris, and the bourgeois king Louis Philippe grants him a small pensium as a poet. It seems like a dream to the lost, the forgotten, that he is remembered at all, but it is only a small remembrance, and when the seventy-six-year-old finally dies in Choisy-le-Roi in 1836, no one calls or knows his name anymore. Once again, an age must pass: Only in the World War, when the Marseillaise, which had long since become the national anthem, resounds again in war on all fronts of France, is it ordered that the body of the little Captain Rouget be buried in the same place in the Invalides Cathedral as that of the little Lieutenant Bonaparte, and so at last the most unfamous creator of an eternal song rests in the crypt of glory of his fatherland from the disappointment of having been nothing but the poet of a single night. + diff --git a/install-sw.sh b/install-sw.sh new file mode 100644 index 0000000000000000000000000000000000000000..1691e162f7189b38472e1e1a9b04b411089d3b01 --- /dev/null +++ b/install-sw.sh @@ -0,0 +1,24 @@ +# pip install pipx +# pipx install poetry +# pipx ensurepath +# source ~/.bashrc + +# curl -sSL https://install.python-poetry.org | python3 - +# -C- continue -S show error -o output +curl -sSL -C- -o install-poetry.py https://install.python-poetry.org +python install-poetry.py +rm install-poetry.py +echo export PATH=~/.local/bin:$PATH > ~/.bashrc +source ~/.bashrc +# ~/.local/bin/poetry install + +wget -c https://deb.nodesource.com/setup_12.x +bash setup_12.x +apt-get install -y nodejs +npm install -g npm@latest +npm install -g nodemon +rm setup_12.x + +# apt upate # alerady done in apt-get install -y nodejs +apt install byobu -y > /dev/null 2>&1 + diff --git a/mlbee/__init__.py b/mlbee/__init__.py index db0ab108623b837109f7c1b401b8312b615575ad..b5e991271ca0fea9ced14591ecaddbb7253284b9 100644 --- a/mlbee/__init__.py +++ b/mlbee/__init__.py @@ -1,5 +1,5 @@ """Init.""" -__version__ = "0.1.0" +__version__ = "0.1.0a1" from .mlbee import mlbee __all__ = ("mlbee",) diff --git a/mlbee/app-litbee.py- b/mlbee/app-litbee.py- new file mode 100644 index 0000000000000000000000000000000000000000..bcbf607d855b474d5a7a07f1f6d98e18a89a7ba3 --- /dev/null +++ b/mlbee/app-litbee.py- @@ -0,0 +1,202 @@ +"""Prep __main__.py. + +https://share.streamlit.io/deploy + Advanced settings... + Python version + 3.7 + 3.8 + 3.9* + 3.10 + +https://docs.streamlit.io/knowledge-base/using-streamlit/hide-row-indices-displaying-dataframe + Hide row indices when displaying a dataframe +# CSS to inject contained in a string +hide_table_row_index = ''' + + ''' +# Inject CSS with Markdown +st.markdown(hide_table_row_index, unsafe_allow_html=True) + +# Display a static table +st.table(df) + +# Hide row indices with st.dataframe +# CSS to inject contained in a string +hide_dataframe_row_index = ''' + + ''' +# Inject CSS with Markdown +st.markdown(hide_dataframe_row_index, unsafe_allow_html=True) + +# Display an interactive table +st.dataframe(df) + +https://medium.com/@avra42/streamlit-python-cool-tricks-to-make-your-web-application-look-better-8abfc3763a5b +hide_menu_style = ''' + + ''' +st.markdown(hide_menu_style, unsafe_allow_html=True) + +""" +# pylint: disable=invalid-name +import os +import sys +import time +from pathlib import Path +from types import SimpleNamespace +from typing import Optional + +import loguru +import logzero +import pandas as pd +import ezbee +import dzbee +import debee + +import streamlit as st +from loguru import logger as loggu +from logzero import logger +from set_loglevel import set_loglevel +from streamlit import session_state as state + +from litbee import __version__ +# from litbee.options import options + +# from litbee.files2df import files2df +# from litbee.utils import sb_front_cover, instructions, menu_items +# from litbee.ezbee_page import ezbee_page +# from litbee.dzbee_page import dzbee_page +# from litbee.xbee_page import xbee_page +from litbee.utils import menu_items + +from litbee.multipage import Multipage + +# from litbee.fetch_upload import fetch_upload +# from litbee.fetch_paste import fetch_paste +# from litbee.fetch_urls import fetch_urls + +from litbee.home import home +from litbee.settings import settings +from litbee.info import info +from litbee.utils import style_css + +# from ezbee import ezbee + +curr_py = sys.version[:3] +msg = f"Some packages litbee depends on can only run with Python 3.8, current python is **{curr_py}**, sorry..." +assert curr_py == "3.8", msg + +os.environ["TZ"] = "Asia/Shanghai" +try: + time.tzset() # type: ignore +except Exception as _: + logger.warning("time.tzset() error: %s. Probably running Windows, we let it pass.", _) + +# uncomment this in dev oe set/export LOGLEVEL=10 +# os.environ["LOGLEVEL"] = "10" + +logzero.loglevel(set_loglevel()) + +loggu.remove() +_ = ( + "{time:YY-MM-DD HH:mm:ss} | " + "{level: <5} | {message} " + "{module}.{name}:{line}" +) +loggu.add( + sys.stderr, + format=_, + level=set_loglevel(), + colorize=True, +) + +# from PIL import Image +# page_icon=Image.open("icon.ico"), +st.set_page_config( # type: ignore + page_title=f"litbee v{__version__}", + # page_icon="🧊", + page_icon="🐝", + # layout="wide", + initial_sidebar_state="auto", # "auto" or "expanded" or "collapsed", + menu_items=menu_items, +) + +# pd.set_option("precision", 2) +pd.set_option("display.precision", 2) +pd.options.display.float_format = "{:,.2f}".format + +sourcetype = "upload" +if set_loglevel() <= 10: + sourcetype = "urls" + +_ = dict( + beetype="ezbee", + sourcetype=sourcetype, + sourcecount=2, + sentali=None, + src_filename="", + tgt_filename="", + src_fileio=b"", + tgt_fileio=b"", + src_file="", + tgt_file="", + list1=[""], + list2=[""], + df=None, + df_a=None, + df_s_a=None, + count=1, + updated=False, +) +if "ns" not in state: + state.ns = SimpleNamespace(**_) +state.ns.list = [*_] + +logger.info( + "versions ezbee dzbee debee: %s, %s, %s", + ezbee.__version__, + dzbee.__version__, + debee.__version__, +) + + +def main(): + """Bootstrap.""" + # options() + + st.markdown(f"", unsafe_allow_html=True) + + app = Multipage() + + # app.add_page("Home", "house", ask.app) + # app.add_page("Settings", "gear", settings.app) + # app.add_page("Info", "info", info.app) + + # app.add_page("Home", "house", fetch_upload) + app.add_page("Home", "house", home) + app.add_page("Settings", "gear", settings) + app.add_page("Info", "info", info) + + # The main app + app.run() + + # st.markdown(f"""
run: {state.ns.count}
""", unsafe_allow_html=True) + + if set_loglevel() <= 10: + st.markdown(state.ns.count) + loggu.debug(f" run: {state.ns.count}") + logger.debug(f" run: {state.ns.count}") + state.ns.count += 1 + state.ns.updated = False + + +main() diff --git a/mlbee/color_map.py b/mlbee/color_map.py new file mode 100644 index 0000000000000000000000000000000000000000..7107ecca1c33c24f411d03c973bc4e0158d622c3 --- /dev/null +++ b/mlbee/color_map.py @@ -0,0 +1,49 @@ +"""Map cell background color for pandas.DataFrame. + +palette = sns.blend_palette( + # ["pink", "palegreen", 'green'], N_COLORS).as_hex() + # ["pink", "palegreen"], N_COLORS).as_hex() + ["red", "palegreen"], N_COLORS).as_hex() +Refer to color_table_applymap.py + +Taken from vizbee color_map +""" +# pylint: disable=invalid-name, broad-except +palette = [ + # "#f00000", + # "#f02315", + "#e2482c", + "#d36b41", + "#c49057", + "#b5b36c", + "#a7d883", + "#98fb98", +] +ncolors = len(palette) + + +def color_map(v, min_: float = 0, max_: float = 1): + """Map cell background color. + + e.g. s_df = df.style.applymap(color_map, min_=min_, max_=max_, subset=["B"]) + or s_df = df.style.applymap(color_map, subset=['likelihood']) + + or + s_df = df.style.applymap(color_map, subset=[2,]) + + or + s_df = df.style.applymap(color_map, subset=[df.columns[2]) + + or + s_df = df.style.applymap(color_map, subset=[*df.columns[1:3]] + [*df.columns[0:1]]) + """ + wd = (max_ - min_) / ncolors + try: + v = float(v) # !!! + pal = palette[min(ncolors - 1, int((v - min_) / wd))] + except Exception: # as e: # wont style str etc. + # logger.debug("%s", e) + # return None + return "wrap_text: true" + + return f"background-color: {pal}" diff --git a/mlbee/cos_matrix2.py b/mlbee/cos_matrix2.py new file mode 100644 index 0000000000000000000000000000000000000000..0a071969cdcea803a6465f7e45a15636ff1a117c --- /dev/null +++ b/mlbee/cos_matrix2.py @@ -0,0 +1,47 @@ +"""Compute the cosine similarity matrix of A. + +https://stackoverflow.com/questions/17627219/whats-the-fastest-way-in-python-to-calculate-cosine-similarity-given-sparse-mat +""" +from typing import Optional +import numpy as np + + +def cos_matrix2(mat1: np.ndarray, mat2: Optional[np.ndarray] = None) -> np.ndarray: + """Compute the cosine similarity matrix of mat1, mat2: mat1 * mat2.T. + + Args: + mat1: np.asarray + mat2: [Optional], if not present mat2 = mat1 + Returns + cosine similarity + """ + if not isinstance(mat1, np.ndarray): + mat1 = np.asarray(mat1, dtype=np.float32) + + if mat2 is None: + mat2 = mat1.copy() + + if not isinstance(mat2, np.ndarray): + mat2 = np.asarray(mat2, dtype=np.float32) + + if mat1.shape[1] != mat2.shape[1]: + print("shape mismatch: %s, %s", mat1.shape, mat2.shape) + raise SystemError(1) + cosine = np.dot(mat1, mat2.T) + + norm1 = np.linalg.norm(mat1, axis=1) + norm2 = np.linalg.norm(mat2, axis=1) + + # if not (norm1 and norm2): return 0 + + size1 = norm1.size + size2 = norm2.size + norm_mat = np.dot(norm1.reshape(size1, 1), norm2.reshape(1, size2)) + + for idx in range(size1): + for jdx in range(size2): + if norm_mat[idx, jdx] == 0: + cosine[idx, jdx] = 0.0 + else: + cosine[idx, jdx] = cosine[idx, jdx] / norm_mat[idx, jdx] + return cosine diff --git a/mlbee/fetch_paste.py b/mlbee/fetch_paste.py new file mode 100644 index 0000000000000000000000000000000000000000..f78809d34ec1eb0454f9d0b0e090504d3eeb7c8c --- /dev/null +++ b/mlbee/fetch_paste.py @@ -0,0 +1,48 @@ +"""Fetch pasted text and convert to state.ns.list1/list2.""" +# pylint: disable=invalid-name +import streamlit as st +from logzero import logger +from streamlit import session_state as state + + +def fetch_paste(): + """Fetch from clipboard.""" + # st.write("Coming soon") + text1 = "" + text2 = "" + with st.form(key="paste_in_form"): + _ = st.expander(f"{state.ns.beetype}: Paste text", expanded=True) + with _: + col1, col2 = st.columns(2) + with col1: + text1 = st.text_area( + label="Paste your stuff here", + key="paste_text1", + # help="" + height=500, + ) + + with col2: + text2 = st.text_area( + label="Paste your stuff here", + # help="" + key="paste_text2", + height=500, + ) + + submitted = st.form_submit_button("Submit") + + logger.debug("text1[:10]: %s, text2[:10]: %s", text1[:10], text2[:10]) + + list1 = [_.strip() for _ in text1.splitlines() if _.strip()] + list2 = [_.strip() for _ in text2.splitlines() if _.strip()] + + state.ns.list1 = list1[:] + state.ns.list2 = list2[:] + + logger.debug("len(list1): %s, len(list2): %s", len(list1), len(list2)) + + logger.debug("state.ns.updated: %s", state.ns.updated) + + state.ns.src_filename = "" + state.ns.updated = True diff --git a/mlbee/fetch_upload.py b/mlbee/fetch_upload.py new file mode 100644 index 0000000000000000000000000000000000000000..48b2f8bb40c0eb6a509bbd3d1f2347fcc3447490 --- /dev/null +++ b/mlbee/fetch_upload.py @@ -0,0 +1,129 @@ +"""Fetch upload and convert to list1/list2.""" +import streamlit as st +from logzero import logger +from streamlit import session_state as state + + +def fetch_upload(): + """Fetch upload and convert to list1/list2.""" + src_fileio = b"" + tgt_fileio = b"" + with st.form(key="upload_in_form"): + _ = st.expander(f"{state.ns.beetype}: Pick two files", expanded=True) + with _: + col1, col2 = st.columns(2) + with col1: + src_fileio = st.file_uploader( + "Choose source file (utf8 txt)", + type=[ + "txt", + ], + key="src_text", + # accept_multiple_files=True, + # accept_multiple_files=False, + ) + + with col2: + tgt_fileio = st.file_uploader( + "Choose target file (utf8 txt)", + type=[ + "txt", + ], + key="tgt_text", + # accept_multiple_files=True, + ) + submitted = st.form_submit_button("Submit") + + # logger.debug(" len(src_fileio): %s", len(src_fileio)) + # logger.debug(" len(tgt_fileio): %s", len(tgt_fileio)) + + filename1 = "" + if src_fileio: + logger.debug(" type(src_fileio): %s", type(src_fileio)) + + # for st.file_uploade accept_multiple_files=True + if isinstance(src_fileio, list): + logger.debug(" len(src_fileio): %s", len(src_fileio)) + filenames = [] + try: + filenames = [elm.name for elm in src_fileio] # type: ignore + except Exception as exc: + logger.error(exc) + logger.debug("src_fileio names: *%s*", filenames) + + # state.ns.src_fileio = src_fileio + state.ns.src_file = src_fileio[-1].getvalue().decode() + state.ns.src_filename = src_fileio[-1].name + else: + logger.debug("src_fileio.name: [%s]", src_fileio.name) + filenames = [src_fileio.name] + logger.debug("src_fileio names: %s", filenames) + + # state.ns.src_fileio = src_fileio + state.ns.src_file = src_fileio.getvalue().decode() + state.ns.src_filename = src_fileio.name + filename1 = state.ns.src_filename + + filename2 = "" + if tgt_fileio: + if isinstance(tgt_fileio, list): + logger.warning("not set to handle multiple files") + logger.warning("set accept_multiple_files=False in the meantime") + else: + state.ns.tgt_file = tgt_fileio.getvalue().decode() + state.ns.tgt_filename = tgt_fileio.name + filename2 = tgt_fileio.name + + # proceed when Submit is clicked + msg1 = "" + if filename1: + msg1 += f" file1 {filename1}" + msg2 = "" + if filename2: + msg2 += f" file2 {filename2}" + glue = "" + if filename1 and filename2: + glue = ", " + + upload_placeholder = st.empty() + prefix = f" Upload submitted: {msg1}{glue}{msg2}" + upload_placeholder.write(prefix) + + # st.write(f" Submitted upload: {msg1}{glue}{msg2}") + if not submitted: + return None + + if not (filename1 or filename2): + # st.write("| no file uploaded") + upload_placeholder.write(f"{prefix} no file uploaded") + return None + + if not filename1: + # st.write("| file1 not ready") + upload_placeholder.write(f"{prefix}, file1 not ready") + return None + + if not filename2: + # st.write("| file2 not ready") + upload_placeholder.write(f"{prefix}, file2 not ready") + return None + + try: + _ = state.ns.src_file.splitlines() + list1 = [elm.strip() for elm in _ if elm.strip()] + _ = state.ns.tgt_file.splitlines() + list2 = [elm.strip() for elm in _ if elm.strip()] + except Exception as exc: + logger.error(exc) + list1 = [""] + list2 = [""] + + logger.debug("len(list1): %s, len(list2): %s", len(list1), len(list2)) + + state.ns.list1 = list1[:] + state.ns.list2 = list2[:] + + state.ns.updated = True + logger.debug("state.ns.updated: %s", state.ns.updated) + + return None diff --git a/mlbee/fetch_urls.py b/mlbee/fetch_urls.py new file mode 100644 index 0000000000000000000000000000000000000000..545432fa95905e57ee34c115012a384f9a1e8467 --- /dev/null +++ b/mlbee/fetch_urls.py @@ -0,0 +1,173 @@ +"""Fetch text from urls and convert to state.ns.list1/list2.""" +# pylint: disable=invalid-name +import streamlit as st +from icecream import ic +from logzero import logger +from streamlit import session_state as state + +from mlbee.url2txt import url2txt + +ic.configureOutput( + includeContext=True, + outputFunction=logger.debug, # outputFunction=logger.info, +) + + +def fetch_urls(): + """Fetch text from urls and convert to state.ns.list1/list2.""" + beetype = state.ns.beetype + sourcecount = state.ns.sourcecount + value = "" + if beetype == "ezbee" or beetype == "mlbee": + url1 = ( + "https://raw.githubusercontent.com/ffreemt/en-de-zh-txt/master/test_en.txt" + ) + url2 = ( + "https://raw.githubusercontent.com/ffreemt/en-de-zh-txt/master/test_zh.txt" + ) + value = f"{url1} {url2}" + if beetype == "dzbee": + url1 = "https://raw.githubusercontent.com/ffreemt/en-de-zh-txt/master/sternstunden04-de.txt" + url2 = "https://raw.githubusercontent.com/ffreemt/en-de-zh-txt/master/sternstunden04-zh.txt" + value = f"{url1} {url2}" + if beetype == "debee": + url1 = "https://raw.githubusercontent.com/ffreemt/en-de-zh-txt/master/sternstunden04-de.txt" + url2 = "https://raw.githubusercontent.com/ffreemt/en-de-zh-txt/master/sternstunden04-en.txt" + value = f"{url1} {url2}" + + dict_ = dict(text1="", text2="") + + def fetch_cb(): + """Fetch text (dict_["text1"|"text2"]) from urls.""" + ic("fetch_cb") + urls = [elm.strip() for elm in text_inp.split(" ") if elm.strip()] + + # supply http:// if not startswith http + urls = [elm if elm.startswith("http") else "http://" + elm for elm in urls] + + _ = "\n\t" + # st.markdown(f" urls submitted: \n{_.join(urls)}") + ic(f" urls submitted: \n{_.join(urls)}") + + # st.write(" TODO: fetch text from urls.") + + if state.ns.sourcecount == 2: # 2-sep + for idx, url in enumerate(urls[:2]): + try: + _ = url2txt(url) + except Exception as e: + logger.error(e) + _ = str(e) + dict_[f"text{idx + 1}"] = _ + ic(f"{idx + 1}: [{url}] {dict_['text' + str(idx + 1)][:100]}") + + ic(dict_["text1"][:10]) + ic(dict_["text2"][:10]) + else: # 1-mix + text1 = "" + for url in urls: + try: + _ = url2txt(url) + except Exception as e: + logger.error(e) + _ = str(e) + text1 += _ + ic(text1[:10]) + dict_["text1"] = text1[:] + + _ = [elm.strip() for elm in dict_["text1"].splitlines() if elm.strip()] + state.ns.list1 = _ + _ = [elm.strip() for elm in dict_["text2"].splitlines() if elm.strip()] + state.ns.list2 = _ + + list1 = state.ns.list1 + list2 = state.ns.list2 + ic(len(list1), len(list2)) + + state.fetched_text1 = dict_["text1"] + state.fetched_text2 = dict_["text2"] + + # streamlit complains if an initial value of + # a widget with this key is set + # state.text_area_urls = text_inp + + # with st.form(key="urls_in_form"): + # _ = st.expander(f"{beetype}: Paste urls below and press Ctl+Enter or Space Ctl+Enter to testdrive", expanded=True) + # with _: + label = f"{beetype}: Paste urls below and press Ctl+Enter or Space Ctl+Enter to testdrive" + text_inp = st.text_area( + label=label, + value=value, + key="text_area_urls", + height=25, + help=" URLs separated by at least a space or a newlineïŒˆèŽŽçœ‘ć€ïŒŒç©șæ Œćˆ†ćŒ€æˆ–ćŠè”·äž€èĄŒ, Ctrl+ć›žèœŠæäș€ïŒ‰", + on_change=fetch_cb, + # args=(text_inp,), + ) + + # st.button("Fetch", on_click=fetch_cb, args=(text_inp,)) + + def text2lists(): + """Convert text(s) to list(s).""" + if text1: + try: + list1 = [elm.strip() for elm in text1.splitlines() if elm.strip()] + state.ns.list1 = list1[:] + except Exception as e: + logger.warning("text1 to list1 errors: %s", e) + + if text2: + try: + list2 = [elm.strip() for elm in text2.splitlines() if elm.strip()] + state.ns.list2 = list2[:] + except Exception as e: + logger.warning("text2 to list2 errors: %s", e) + + # show fetch text(s) + text1 = dict_["text1"] + text2 = dict_["text2"] + if state.ns.sourcecount == 2: # 2-sep + with st.form(key="fetched_2texts_in_form"): + _ = st.expander(f"{state.ns.beetype}: fetched text", expanded=True) + with _: + col1, col2 = st.columns(2) + with col1: + text1 = st.text_area( + label="Edit when necessary, click Submit when ready", + key="fetched_text1", + # help="" + height=500, + value=text1, + ) + + with col2: + text2 = st.text_area( + label="Edit when necessary, click Submit when ready", + # help="" + key="fetched_text2", + height=500, + value=text2, + ) + + submitted = st.form_submit_button("Submit", on_click=text2lists) + + else: # 1-mix + with st.form(key="fetched_1_text_in_form"): + _ = st.expander(f"{state.ns.beetype}: fetched mixed text", expanded=True) + with _: + text1 = st.text_area( + label="Edit when necessary, click Submit when ready", + key="fetched_mixed_text1", + height=500, + value=text1, + ) + submitted = st.form_submit_button("Submit", on_click=text2lists) + + # _ = """ + if not submitted: + ic("Submit not yet clicked") + return + # """ + + state.ns.src_filename = "" + state.ns.updated = True diff --git a/mlbee/gen_cmat.py b/mlbee/gen_cmat.py new file mode 100644 index 0000000000000000000000000000000000000000..06250653adc48f330d2773486939c8b87b071b1e --- /dev/null +++ b/mlbee/gen_cmat.py @@ -0,0 +1,75 @@ +"""Gen cmat for de/en text.""" +# pylint: disable=invalid-name, too-many-branches + +from typing import List, Optional + +import more_itertools as mit +import numpy as np + +from tqdm import tqdm +from model_pool import load_model_s +from logzero import logger + +from mlbee.cos_matrix2 import cos_matrix2 + +try: + model_s = load_model_s() +except Exception as _: + logger.exception(_) + raise + + +def gen_cmat( + text1: List[str], + text2: List[str], + bsize: int = 50 +) -> np.ndarray: + """Gen corr matrix for texts. + + Args: + text1: typically '''...''' splitlines() + text2: typically '''...''' splitlines() + bsize: batch size, default 50 + text1 = 'this is a test' + text2 = 'another test' + """ + bsize = int(bsize) + if bsize <= 0: + bsize = 50 + + if isinstance(text1, str): + text1 = [text1] + if isinstance(text2, str): + text1 = [text2] + + vec1 = [] + vec2 = [] + len1 = len(text1) + len2 = len(text2) + tot = len1 // bsize + bool(len1 % bsize) + tot += len2 // bsize + bool(len2 % bsize) + with tqdm(total=tot) as pbar: + for chunk in mit.chunked(text1, bsize): + try: + vec = model_s.encode(chunk) + except Exception as exc: + logger.error(exc) + raise + vec1.extend(vec) + pbar.update() + for chunk in mit.chunked(text2, bsize): + try: + vec = model_s.encode(chunk) + except Exception as exc: + logger.error(exc) + raise + vec2.extend(vec) + pbar.update() + try: + # note the order vec2, vec1 + _ = cos_matrix2(np.array(vec2), np.array(vec1)) + except Exception as exc: + logger.exception(exc) + raise + + return _ diff --git a/mlbee/home.py b/mlbee/home.py new file mode 100644 index 0000000000000000000000000000000000000000..4ac6ff18cb47240e63974418035cd9e7b33664c7 --- /dev/null +++ b/mlbee/home.py @@ -0,0 +1,288 @@ +"""Fetch content from upload. + +org ezbee_page.py. +""" +# pylint: disable=invalid-name +# pylint: disable=too-many-locals, too-many-return-statements, too-many-branches, too-many-statements +import base64 +import inspect +import io + +# pylint: disable=invalid-name +from functools import partial +from itertools import zip_longest + +import hanzidentifier +import logzero +import numpy as np +import pandas as pd +import pendulum +import streamlit as st +from about_time import about_time + +# from ezbee.gen_pairs import gen_pairs # aset2pairs? +from aset2pairs import aset2pairs +from icecream import ic +from loguru import logger as loggu +from logzero import logger +from set_loglevel import set_loglevel +from st_aggrid import AgGrid, GridOptionsBuilder, GridUpdateMode + +# from st_aggrid.grid_options_builder import GridOptionsBuilder +from streamlit import session_state as state + +from mlbee.color_map import color_map +from mlbee.fetch_paste import fetch_paste +from mlbee.fetch_upload import fetch_upload +from mlbee.fetch_urls import fetch_urls +# from mlbee.t2s import t2s +from mlbee import mlbee + + +def home(): # noqa + """Run tasks. + + beetype + + sourcetype + fetch_upload/fetch_paste, fetch_url + sourcecount + + align: para-align/sent-align + + save xlsx/tsv + """ + if state.ns.sourcetype not in ["upload", "paste", "urls"]: + st.write("Coming soooooooon...") + return None + + # if state.ns.beetype not in ["ezbee", "dzbee", "debee"]: + if state.ns.beetype not in ["mlbee", ]: + st.write("Coming soon...") + return None + + # process sourcetype and fetch list1/list2 + list1 = list2 = [] + # fetch_upload/fetch_paste + if state.ns.sourcetype in ["upload"]: + fetch_upload() + elif state.ns.sourcetype in ["paste"]: + fetch_paste() + elif state.ns.sourcetype in ["urls"]: + fetch_urls() + else: + st.warning(f"{state.ns.sourcetype}: Not implemented") + return None + + logger.debug("state.ns.updated: %s", state.ns.updated) + + # if not updated, quit: this does not quite work + # only prevents the first run/missing upload + if not state.ns.updated: + logger.debug(" not updated, early exit.") + return None + + list1 = state.ns.list1[:] + list2 = state.ns.list2[:] + + logger.debug("list1[:3]: %s", list1[:3]) + logger.debug("list2[:3]: %s", list2[:3]) + + df = pd.DataFrame(zip_longest(list1, list2, fillvalue="")) + try: + # df.columns = ["text1", "text2"] + df.columns = [f"text{i + 1}" for i in range(len(df.columns))] + except Exception as exc: + logger.debug("df: \n%s", df) + logger.error("%s", exc) + + state.ns.df = df + logger.debug("df: %s", df) + + # st.table(df) # looks alright + # equiv to st.markdown(df.to_markdown())? + + # stlyed pd dataframe? + # bigger, no pagination + # st.markdown(df.to_html(), unsafe_allow_html=True) + + # ag_grid smallish, editable, probably slower + + # if "df" not in globals() or "df" not in locals(): + if "df" not in locals(): + logger.debug(" df not defined, return") + + if df.empty: + logger.debug(" df.empty, return") + return None + + # only show this for upload + if state.ns.sourcetype in ["upload"]: + len1 = len([elm.strip() for elm in list1 if elm.strip()]) + len2 = len([elm.strip() for elm in list2 if elm.strip()]) + len12 = len1 + len2 + time0 = len12 * 0.4 + time1 = len12 * 1 + eta = pendulum.now() + pendulum.duration(seconds=len12 * 0.66) + + in_words0 = pendulum.duration(seconds=time0).in_words() + in_words1 = pendulum.duration(seconds=time1).in_words() + diff_for_humans = eta.diff_for_humans() + dt_str = eta.to_datetime_string() + timezone_name = eta.timezone_name + _ = ( + f"Estimated time to complete: {in_words0} to {in_words1}; " + f"ETA: {diff_for_humans} ({dt_str} {timezone_name}) " + ) + st.info(_) + _ = st.expander("to be aligned", expanded=False) + with _: + st.write(df) + + logger.info("Processing data... %s", state.ns.beetype) + + # if state.ns.beetype in ["ezbee", "dzbee", "debee"]: + if state.ns.beetype in ["mlbee"]: + with about_time() as t: + with st.spinner(" diggin..."): + try: + aset = globals()[state.ns.beetype]( + list1, + list2, + # eps=eps, + # min_samples=min_samples, + ) + except Exception as e: + logger.exception( + "aset = globals()[state.ns.beetype](...) exc: %s", e + ) + aset = "" + st.write("Collecting inputs...") + logger.debug("Collecting inputs...") + return None + + st.success(f"Done, took {t.duration_human}") + else: + try: + filename = inspect.currentframe().f_code.co_filename # type: ignore + except Exception as e: + logger.error(e) + filename = "" + try: + lineno = inspect.currentframe().f_lineno # type: ignore + except Exception as e: + logger.error(e) + lineno = "" + st.write(f"{state.ns.beetype} coming soon...{filename}:{lineno}") + return None + + if aset: + logger.debug("aset: %s...%s", aset[:3], aset[-3:]) + # logger.debug("aset[:10]: %s", aset[:10]) + + if set_loglevel() <= 10: + st.write(aset) + + # aligned_pairs = gen_pairs(list1, list2, aset) + aligned_pairs = aset2pairs(list1, list2, aset) + if aligned_pairs: + # logger.debug("%s...%s", aligned_pairs[:1], aligned_pairs[-1:]) + logger.debug("%s...s", aligned_pairs[:1]) + + df_a = pd.DataFrame( + aligned_pairs, columns=["text1", "text2", "llh"], dtype="object" + ) + + if set_loglevel() <= 10: + _ = st.expander("done aligned") + with _: + st.table(df_a.astype(str)) + # st.markdown(df_a.astype(str).to_markdown()) + # st.markdown(df_a.astype(str).to_numpy().tolist()) + + # insert seq no + df_a.insert(0, "sn", range(len(df_a))) + + gb = GridOptionsBuilder.from_dataframe(df_a) + gb.configure_pagination(paginationAutoPageSize=True) + options = { + "resizable": True, + "autoHeight": True, + "wrapText": True, + "editable": True, + } + gb.configure_default_column(**options) + gridOptions = gb.build() + + # st.write("editable aligned (double-click a cell to edit, drag column header to adjust widths)") + _ = "editable aligned (double-click a cell to edit, drag column header to adjust widths)" + with st.expander(_, expanded=False): + ag_df = AgGrid( + # df, + df_a, + gridOptions=gridOptions, + key="outside", + reload_data=True, + editable=True, + # width="100%", # width parameter is deprecated + height=750, + # fit_columns_on_grid_load=True, + update_mode=GridUpdateMode.MODEL_CHANGED, + ) + + # ### prep download + + # taken from vizbee cb_save_xlsx + # subset = list(df_a.columns[2:3]) # 3rd col + subset = list(df_a.columns[2:]) # 3rd col + + # pop("sn"): remove sn column + df_a.pop("sn") + s_df = df_a.astype(str).style.applymap(color_map, subset=subset) + + if set_loglevel() <= 10: + logger.debug(" showing styled aligned") + with st.expander("styled aligned"): + # st.dataframe(s_df) # can't handle styleddf + st.table(s_df) + + output = io.BytesIO() + with pd.ExcelWriter( + output, engine="xlsxwriter" + ) as writer: # pylint: disable=abstract-class-instantiated + s_df.to_excel(writer, index=False, header=False, sheet_name="Sheet1") + writer.sheets["Sheet1"].set_column("A:A", 70) + writer.sheets["Sheet1"].set_column("B:B", 70) + output.seek(0) + + val = output.getvalue() + b64 = base64.b64encode(val) + filename = "" + if state.ns.src_filename: + filename = f"{state.ns.src_filename}-" + + dl_xlsx = f'Download aligned paras xlsx' + + _ = """ + output = io.BytesIO() + # df_a.astype(str).to_csv(output, sep="\t", index=False, header=False, encoding="gbk") + df_a.astype(object).to_csv(output, sep="\t", index=False, header=False, encoding="gbk") + output.seek(0) + + val = output.getvalue() + b64 = base64.b64encode(val) + dl_tsv = f'Download aligned paras tsv' + # """ + + col1_dl, col2_dl = st.columns(2) + with col1_dl: + st.markdown(dl_xlsx, unsafe_allow_html=True) + _ = """ + with col2_dl: + st.markdown(dl_tsv, unsafe_allow_html=True) + # """ + + # reset + state.ns.updated = False + + return None diff --git a/mlbee/info.py b/mlbee/info.py new file mode 100644 index 0000000000000000000000000000000000000000..9a2ba5e9fcc2874cf91dbf999618ff7c12e5d483 --- /dev/null +++ b/mlbee/info.py @@ -0,0 +1,16 @@ +"""Present info about mlbee.""" +from textwrap import dedent + +import streamlit as st + +from mlbee import __version__ + +from mlbee.utils import msg + + +def info(): + """Prep info page.""" + + st.subheader(f"mlbee {__version__}") + + st.markdown(msg, unsafe_allow_html=True) diff --git a/mlbee/loadtext.py b/mlbee/loadtext.py new file mode 100644 index 0000000000000000000000000000000000000000..93463ae8ce0ceb5a0cce47884772c48f88a85f0e --- /dev/null +++ b/mlbee/loadtext.py @@ -0,0 +1,126 @@ +"""Load file content to text. + +Check encoding and load a file to text. + +Win +Linux + apt install libmagic1 + +py -3.8 -m pip install python-magic-bin +py -3.8 -m pip install python-magic + +import magic +magic.from_file("testdata/test.pdf") + +original load_textrev +refer to load_paras.py +""" +# pylint: disable=line-too-long, unused-variable, unused-import + +from typing import List, Optional, Union # noqa +from pathlib import Path +import cchardet + +import pytest +from logzero import logger + +# from detect_file import detect_file + + +def loadtext(filepath: Union[Path, str] = "") -> str: + """Load file context to text. + + Check encoding and load a file to text. + """ + filepath = Path(filepath) + if not filepath.is_file(): + logger.error(" file [%s] does not exist or is not a file.", filepath) + # return None + raise Exception(f" file [{filepath}] does not exist or is not a file.") + + # encoding = detect_file(filepath) + encoding = cchardet.detect(filepath.read_bytes()).get("encoding", "utf8") + + if encoding is None: + raise Exception("cchardet.detect says it's not a text file.") + + # cchardet: 'GB18030', no need for errors="ignore" + try: + text = filepath.read_text(encoding=encoding, errors="ignore") + except Exception as exc: + logger.error(" Opening %s resulted in errors: %s", filepath, exc) + raise + + return text + + +def text2paras(text: str) -> List[str]: + """Convert text to list/paras, remove blank lines.""" + _ = text.splitlines() + + return [elm.strip() for elm in _ if elm.strip()] + + +def loadparas(filepath: Path) -> List[str]: + """Load file as paras list.""" + try: + _ = loadtext(filepath) + except Exception as exc: + logger.error(exc) + raise + + try: + _ = text2paras(_) + except Exception as exc: + logger.error(exc) + raise + + return _ + + +@pytest.mark.xfail(reason="no file provided, trying to open ’.‘.") +def test1(): + r"""Tests default file.""" + text = loadtext() + # eq_(2283, len(text)) + # eq_(2283, len(text)) + + # del text + if text: + assert len(text) == 86423 + + +def testgb(): + r"""Tests shuangyu_ku\txt-books\19éƒšäž–ç•Œćè‘—äž­è‹±æ–‡ćŻč照版TXT.""" + file = ( + r"C:\dl\Dropbox\shuangyu_ku\txt-books\19éƒšäž–ç•Œćè‘—äž­è‹±æ–‡ćŻč照版TXT" + r"\çˆ±äžœäžæŒ«æžžć„‡ćąƒèź°.txt" + ) + text = loadtext(file) + if text: + # assert len(text) == 190913 + assert len(text) >= 188760 + + text0 = "ALICE'S ADVENTURES IN WONDERLAND\n CHAPTER 01 Down the Rabbit-Hole\n CHAPTER 02 The Pool of Tears\n CHAPTER 03 A Caucus-Race and a Long Tale\n CHAPTER 04 The Rabbit Sends in a Little Bill\n CHAPTER 05 Advice from a Caterpillar\n CHAPTER 06 Pig and Pepper\n CHAPTER 07 A Mad Tea-Party\n CHAPTER 08 The Queen's Croquet-Ground\n CHAPTER 09 The Mock Turtle's Story \n CHAPTER 10 The Lobster Quadrille\n CHAPTER 11 Who Stole the Tarts?\n CHAPTER 12 Alice's Evidence\n\n\n 爱 äžœ 䞝 挫 æžž 愇 湃 èź° \n\n 珏01ç«  " # NOQA + + if text: + assert text0 == text[:500] + + +def test_utf_16le(): + r"""Test 'E:\\beta_final_version\\build\\test_files\\files_for_testing_import\\Folding_Beijing_12.txt'.""" + # file = 'E:\\beta_final_version\\build\\test_files\\files_for_testing_import\\Folding_Beijing_12.txt' # NOQA + file = r"C:\dl\Dropbox\mat-dir\snippets-mat\pyqt\Sandbox\hp_beta-version_files\test_files\files_for_testing_import\Folding_Beijing_12.txt" # NOQA + file = r"C:\dl\Dropbox\mat-dir\pyqt\Sandbox\hp_beta-version_files\test_files\files_for_testing_import\Folding_Beijing_12.txt" + + text = loadtext(file) + if text: + assert len(text) == 117871 + + # text0 = '\ufeffFolding Beijing\t挗äșŹæŠ˜ć \n"by Hao Jingfang, translated by Ken Liu"\téƒæ™ŻèŠł\n# 1.\t# 1\n"At ten of five in the m' # NOQA + text0 = r'Folding Beijing\t挗äșŹæŠ˜ć \n"by Hao Jingfang, translated by Ken Liu"\téƒæ™ŻèŠł\n# 1.\t# 1\n"At ten of five in the mo' # NOQA + text2 = 'Folding Beijing\t\xe5\x8c\x97\xe4\xba\xac\xe6\x8a\x98\xe5\x8f\xa0\r\n"by Hao Jingfang, translated by Ken Liu"\t\xe9\x83\x9d\xe6\x99\xaf\xe8\x8a\xb3\r\n# 1.\t# 1\r\n"At ten of five in the mo' + + del text2 + + # if text: assert text0 == text[:100] diff --git a/mlbee/mlbee.py b/mlbee/mlbee.py index b6fa17540266c02e9bc9da78585501192a6ff2db..1ecdd72d3720f967d99190ea7311099d419034db 100644 --- a/mlbee/mlbee.py +++ b/mlbee/mlbee.py @@ -1,7 +1,53 @@ """Define mlbee.""" +# pylint: disable=invalid-name +from typing import List + +from cmat2aset import cmat2aset from logzero import logger +from mlbee.gen_cmat import gen_cmat + + +def mlbee( + text1: List[str], + text2: List[str], + eps: float = 10, + min_samples: int = 6, + # show_plot: bool = True, +): + """Align multilingual texts. + + Args: + text1: list of strings + text2: list of strings + eps: epsilon + min_samples: minimum number of points to be considered as a cluster + x show_plot: whether to show plots, refactored to cmat2html's show_plot + Returns: + Aligned text pairs. + """ + if not ( + [elm for elm in text1 if elm.strip()] and [elm for elm in text2 if elm.strip()] + ): + logger.warning("One or both inputs are empty") + raise Exception("Nothing to do...exiting") + + try: + # from json_de2zh.gen_cmat import gen_cmat # noqa # pylint: disable=import-outside-toplevel + cmat = gen_cmat(text1, text2) + # logger.level is reset to 20 in fastlid + mlbee.cmat = cmat + except Exception as e: + logger.exception(e) + raise + + try: + # aset = cmat2aset(cmat.T) + aset = cmat2aset(cmat, eps=eps, min_samples=min_samples) + mlbee.aset = aset + except Exception as e: + logger.exception(e) + raise -def mlbee(): - """Define mlbee.""" - logger.debug(" entry ") + # paired texts or aset? + return aset diff --git a/mlbee/multipage.py b/mlbee/multipage.py new file mode 100644 index 0000000000000000000000000000000000000000..ba3e3324bbb6698d2f45606c64d9d052ba955882 --- /dev/null +++ b/mlbee/multipage.py @@ -0,0 +1,68 @@ +"""Credit to https://huggingface.co/spaces/lfqa/lfqa. + +This file is the framework for generating multiple Streamlit +applications through an object oriented framework. +""" +# Import necessary libraries +import streamlit as st +from streamlit_option_menu import option_menu + + +# Define the multipage class to manage the multiple apps in our program +class Multipage: + """Framework for combining multiple streamlit applications.""" + + def __init__(self) -> None: + """Construct class to generate a list which will store all our applications as an instance variable.""" # noqa + self.pages = [] + + def add_page(self, title, icon, func) -> None: + """Class Method to Add pages to the project. + + Args: + title ([str]): The title of page which we are + adding to the list of apps + icon: icon from streamlit-menu-option + func: Python function to render this page in Streamlit + """ + self.pages.append({"title": title, "icon": icon, "function": func}) + + def run(self): + """Dropdown to select the page to run.""" + # Dropdown to select the page to run + st.markdown( + """ + + """, + unsafe_allow_html=True, + ) + + selected = None + with st.sidebar: + selected = option_menu( + None, + [page["title"] for page in self.pages], + icons=[page["icon"] for page in self.pages], + menu_icon="cast", + default_index=0, + ) + + # Run the selected page + for index, item in enumerate(self.pages): + if item["title"] == selected: + self.pages[index]["function"]() + break diff --git a/mlbee/settings.py b/mlbee/settings.py new file mode 100644 index 0000000000000000000000000000000000000000..aa20faf07b6aab345cdae7e985b136ebf1e30dbe --- /dev/null +++ b/mlbee/settings.py @@ -0,0 +1,98 @@ +"""Prep Settings/Options page.""" +# pylint: disable=invalid-name +from functools import partial + +import streamlit as st +from loguru import logger as loggu +from logzero import logger +from streamlit import session_state as state + + +def settings(): + """Prep Settings/Options page. + + Refer to options.py + """ + # horizotal radio + st.write( + "", + unsafe_allow_html=True, + ) + + sourcetype_list = ["upload", "paste", "urls"] + beetype_list = ["mlbee", "ezbee", "dzbee", "debee", "xbee"] + + _ = """ + _ = "ezbee: english-chinese; dzbee: german-chinese, debee: german-english; xbee: other language pairs (slow, approx.1000 pairs/3 min) | ezbee: 英/äž­; dzbee: ćŸ·/äž­, debee: ćŸ·/英; xbee: ć…¶ä»–èŻ­èš€ćŻčïŒˆæ…ą, çșŠ1000ćŻč/3ćˆ†é’ŸïŒ‰" + try: + index = beetype_list.index(state.ns.beetype) + except Exception as e: + logger.error("beetype index error: %s, setting to 0", e) + index = 0 + beetype = st.radio( + "Pick a bee", + beetype_list, + index=index, + format_func=lambda x: f"{x:<7} |", + help=_, + ) + state.ns.beetype = beetype + # """ + + try: + index = sourcetype_list.index(state.ns.sourcetype) + except Exception as e: + logger.error("sourcetype index error: %s, setting to 0", e) + index = 0 + sourcetype = st.radio( + "Source", + sourcetype_list, + index=index, + format_func=lambda x: f"{x:<8} |", + help="upload: one or two files; paste: from clipboard; urls: from the net", + # disabled=True, + ) + state.ns.sourcetype = sourcetype + + sourcecount_list = [2, 1] + try: + index = sourcecount_list.index(state.ns.sourcecount) + except Exception as e: + logger.error("sourcecount index error: %s, setting to 0", e) + index = 0 + sourcecount = st.radio( + "Source Count", + sourcecount_list, + index=index, + format_func=lambda x: f"{x:<3} |", + help="2: two separate sources (files/pastes/urls), each containing one language; 1: one mixed source (file/paste/url) containing both languages", + disabled=True, + ) + state.ns.sourcecount = sourcecount + + # sentali used for sent split + sentali_list = [None, "yes"] + try: + index = sentali_list.index(state.ns.sentali) + except Exception as e: + logger.error("sentali sindex error: %s, setting to 0", e) + index = 0 + sentali = st.radio( + "Split to Sents", + sentali_list, + index=index, + format_func=lambda x: f"{str(x):<4} |", + help="None: leave it as it is; yes: attempt to split to sents in a sensible manner.", + disabled=True, + ) + state.ns.sentali = sentali + + # show state.ns[:6] + loggu.debug(f" state.ns.list: {state.ns.list}") + + # beetype, sourcetype, sourcecount, filename1, filename2 + _ = map(partial(getattr, state.ns), state.ns.list[:6]) + logger.debug(" state.ns.list[:3]: %s", str([*_])) + + # st.write(f"run: {state.ns.count}") + # loggu.debug(f"run: {state.ns.count}") diff --git a/mlbee/text2lists.py b/mlbee/text2lists.py new file mode 100644 index 0000000000000000000000000000000000000000..ae406cc4f3d0f37ef7d428bb805e01b36c8f3c3b --- /dev/null +++ b/mlbee/text2lists.py @@ -0,0 +1,167 @@ +"""Separate text to zh en lists.""" +# pylint: disable=unused-import, too-many-locals, invalid-name, too-many-branches, too-many-statements, + +# from typing import Tuple, +from typing import Iterable, List, Optional, Tuple, Union # noqa + +import numpy as np +from logzero import logger + +# from fastlid import fastlid +from polyglot.text import Detector + +# from dzbee.detect import detect +from debee.detect import detect + +# from json_de2zh.gen_cmat import gen_cmat +from debee.gen_cmat import gen_cmat + +# from radiobee.lists2cmat import lists2cmat # use fast_scores +# from radiobee.detect import detect +# from fast_scores.gen_cmat import gen_cmat # pylint: disable=import-error + + +def text2lists( + text: Union[Iterable[str], str], + set_languages: Optional[List[str]] = None, +) -> Tuple[List[str], List[str]]: + """Separate text to zh en lists. + + Args: + text: mixed text + set_languages: no default (open-end) + use polyglot.text.Detector to pick two languages + + Attributes: + cmat: correlation matrix (len(list_l) x len(list_r)) + before adjusting (shifting) + offset: plus, [""] * offset + list2 + minus, [""] * (-offset) + list1 + Returns: + two lists, best effort alignment + """ + if not isinstance(text, str) and isinstance(text, Iterable): + try: + text = "\n".join(text) + except Exception as e: + logger.error(e) + raise + + # set_languages default to ["en", "zh"] + if set_languages is None: + lang12 = [elm.code for elm in Detector(text).languages] + + # set_languages = ["en", "zh"] + + # set 'un' to 'en' + # set_languages = ['en' if elm in ['un'] else elm for elm in lang12[:2]] + set_languages = [] + for elm in lang12[:2]: + if elm in ["un"]: + logger.warning(" Unknown language, set to en") + set_languages.append("en") + else: + set_languages.append(elm) + + # fastlid.set_languages = set_languages + + list1 = [] + list2 = [] + + # lang0, _ = fastlid(text[:15000]) + lang0 = detect(text, set_languages) + + res = [] + left = True # start with left list1 + + for elm in [_ for _ in text.splitlines() if _.strip()]: + # lang, _ = fastlid(elm) + try: + lang = detect(elm, set_languages) + except Exception: + lang = "en" + logger.warning("Cant detect: %s[20]...setting to %s", elm[:20], lang) + + if lang == lang0: + res.append(elm) + else: + if left: + # list1.append("\n".join(res)) + list1.extend(res) + else: + # list2.append("\n".join(res)) + list2.extend(res) + left = not left + + res = [elm] + lang0 = lang + + # process the last + if left: + list1.extend(res) + else: + list2.extend(res) + + try: + # lang1, _ = fastlid(' '.join(list1)) + lang1 = detect(" ".join(list1), set_languages) + except Exception as exc: + logger.error(exc) + lang1 = "en" + try: + # lang2, _ = fastlid(' '.join(list2)) + lang2 = detect(" ".join(list2), set_languages) + except Exception as exc: + logger.error(exc) + lang2 = "en" + + # find offset via diagonal(k), + len1, len2 = len(list1), len(list2) + + # ylim, xlim = cmat.shape + ylim, xlim = len2, len1 # check + + # cmat dim: len1 x len2 or ylim x xlim + # cmat = lists2cmat(list1, list2, lang1, lang2) + # cmat.shape: len(list1)xlen(list2) or ylim x xlim + cmat = gen_cmat(list1, list2) + + # sq_mean_pair = [(elm, np.square(cmat.diagonal(elm)).mean()) for elm in range(2 - ylim, xlim + 1)] + # df = pd.DataFrame(sq_mean_pair, columns=['offset', 'sq_mean']) + # df.plot.scatter('offset', 'sq_mean') + # optimum_offset = df.offset[df.sq_mean.argmax()] + + # equiv to np.argmax(sq_mean) - (ylim - 2) + # locate max, -ylim + 2 ...xlim: range(1 - ylim, xlim) + # sqare sum + + sq_mean = [ + np.square(cmat.diagonal(elm)).mean() for elm in range(1 - ylim, xlim - 1) + ] + # tot: xlim + ylim - 1 + + # temp = [np.square(cmat.diagonal(elm)) for elm in range(2 - ylim, xlim + 1)] + # sq_mean = [elm.mean() if np.any(elm) else 0.0 for elm in temp] + + # plt.figure() + # plt.scatter(range(1 - ylim, xlim), sq_mean) + + offset = np.argmax(sq_mean) - (ylim - 1) + + text2lists.cmat = cmat + text2lists.offset = offset + text2lists.lang1 = lang1 + text2lists.lang2 = lang2 + + # shift list1 if offsset >= 0, else shift list2 + if offset > -1: + # list1a = list1[:] + # list2a = [""] * offset + list2 + list2 = [""] * offset + list2 + else: + list1 = [""] * (-offset) + list1 + # list1a = [""] * (-offset) + list1 + # list2a = list2[:] + + # return list1, list2 + return [elm.strip() for elm in list1], [elm.strip() for elm in list2] diff --git a/mlbee/url2txt.py b/mlbee/url2txt.py new file mode 100644 index 0000000000000000000000000000000000000000..7287025f47e7c465704f2e4367c3a852429ab800 --- /dev/null +++ b/mlbee/url2txt.py @@ -0,0 +1,97 @@ +"""Fetch text from url.""" +from typing import Optional +from urllib.parse import urlparse + +import html2text +import httpx +import streamlit as st +from logzero import logger +from readability import Document + + +# @st.cache +def url2txt( + url: str, + bodywidth: Optional[int] = 5000, + remove: bool = False, + show_url: bool = True, + ignore_links: bool = True, +) -> str: + """Fetch text from url. + + Args: + url: netloc from which to fetch text + bodywidth: if set to None, fall back to default bodywidth of + html2text.HTML2Text + remove: remove blank lines if set to True + show_url: prepend url if set to True + ignore_links: remove [ur](url) + + Return: + main body in text + + bodywidth: Optional[int] = 5000 + remove: bool = False + show_url: bool = True + ignore_links: bool = True + """ + url = url.strip() + if not url.startswith("http"): + url = "http://" + url + + logger.info("url: %s", url) + + parsed = urlparse(url) + if not parsed.scheme or not parsed.netloc: # no scheme or netloc present + raise Exception(f"Invalid url: {url}") + + try: + resp = httpx.get(url, timeout=30) + resp.raise_for_status() + except Exception as exc: + logger.error(exc) + raise + + try: + content_type = resp.headers["content-type"] + except Exception as e: + logger.error(e) + content_type = "" + # output text if text/plain + if "text/plain" in content_type: + return resp.text + + # handle html and the rest + try: + doc = Document(resp.text) + except Exception as exc: + logger.error(exc) + raise + + if not doc.summary().strip(): + raise Exception("No content for some reason...") + + if bodywidth is not None: + handle = html2text.HTML2Text(bodywidth=bodywidth) + else: + handle = html2text.HTML2Text() + + handle.ignore_links = ignore_links + + try: + res = handle.handle(doc.summary()) + except Exception as exc: + logger.error(exc) + raise + + # remove double blank lines + if remove: + res = "\n".join(elm for elm in res.splitlines() if elm.strip()) + + if not res.strip(): # warn if empty output + logger.warning("Output seems to be empty...") + + if show_url: + return f"{url}\n# {doc.title()}\n{res}" + + return f"# {doc.title()}\n{res}" diff --git a/mlbee/utils.py b/mlbee/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..b9475d5fc163b5e47e60546d872c688b0405a592 --- /dev/null +++ b/mlbee/utils.py @@ -0,0 +1,321 @@ +"""Prep front cover for sidebar (based on st-bumblebee-st_app.py).""" +import base64 +from io import BytesIO +from textwrap import dedent + +import logzero +import pandas as pd +import streamlit as st +from logzero import logger +from set_loglevel import set_loglevel + +from mlbee import __version__ + +logzero.loglevel(set_loglevel()) + +msg = dedent( + """ + What would you like to do? + The following alignment engines are available. + + **UFast-Engine**: ultra-fast, based on a home-brewed algorithm, faster than blazing fast but can only process en-zh para/sent pairs, not as sophisticated as DL-Engine; + + **SFast-Engine**: super-fast, based on machine translation; + + **Fast-Engine**: based on yet another home-brewed algorithm, blazing fast but can only process en-zh para/sent pairs; + + **DL-Engin**: based on machine learning, multilingual, one para/sent takes about 1s. + """ +).strip() +msg = dedent( + """ + a multilingual (about 100 luanguage pairs) dualtext + aligner based on machine learning + + It takes about 1-2 s to process a pair of blocks (be it + sents, paras of docus). + Extremely long blocks will likely have a negative impact + on aligning. + """ +).strip() + + +def sb_front_cover(): + """Prep front cover for sidebar.""" + st.sidebar.markdown(f"### mlbee {__version__} ") + + _ = "More info (click to toggle)" + sb_tit_expander = st.sidebar.expander(_, expanded=False) + with sb_tit_expander: + st.markdown(msg) + + +intructins = dedent( + f""" + * Set up options in the left sidebar + + * Click expanders / +: to reveal more details; -: to hide them + + * Press '**Click to start aligning**' to get + the ball rolling. (The button will appear when + everything is ready.) + + * mlbee v.{__version__} from mu@qq41947782's + keyboard in cyberspace. Join **qq group 316287378** + for feedback and questions or to be kept updated. + mlbee is a member of the bee family. + """ +).strip() + + +def instructions(): + """Prep msg.""" + logger.debug("instructions entry") + back_cover_expander = st.expander("Instructions") + with back_cover_expander: + st.markdown(intructins) + + logger.debug("instructions exit") + + +about_msg = dedent( + f""" + # mlbee {__version__} + + https://bumblebee.freeforums.net/thread/6/mlbee + or head to æĄƒèŠ±ć…ƒ qq group 316287378 + """ +).strip() + +menu_items = { + "Get Help": "https://bumblebee.freeforums.net/thread/6/mlbee", + "Report a bug": "https://github.com/ffreemt/mlbee/issues", + "About": about_msg, +} + +style_css = """ +.row-widget.stTextInput > div:first-of-type { + background: #fff; + display: flex; + border: 1px solid #dfe1e5; + box-shadow: none; + border-radius: 24px; + height: 50px; + width: auto; + margin: 10px auto 30px; +} + +.row-widget.stTextInput > div:first-of-type:hover, +.row-widget.stTextInput > div:first-of-type:focus { + box-shadow: 1px 1px 2px 1px rgba(0, 0, 0, 0.2); +} + +.row-widget.stTextInput .st-bq { + background-color: #fff; +} + +.row-widget.stTextInput > label { + color: #b3b3b3; +} + +.row-widget.stButton > button { + border-radius: 24px; + background-color: #B6C9B1; + color: #fff; + border: none; + padding: 6px 20px; + float: right; + background-image: none; +} + +.row-widget.stButton > button:hover { + box-shadow: 1px 1px 2px 1px rgba(0, 0, 0, 0.2); +} + +.row-widget.stButton > button:focus { + border: none; + color: #fff; +} + +.footer-custom { + position: fixed; + bottom: 0; + width: 100%; + color: var(--text-color); + max-width: 698px; + font-size: 14px; + height: 50px; + padding: 10px 0; + z-index: 50; +} + +.main { + padding: 20px; +} + +footer { + display: none !important; +} + +.footer-custom a { + color: var(--text-color); +} + +#wikipedia-assistant { + font-size: 36px; +} + +.generated-answer p { + font-size: 16px; + font-weight: bold; +} + +.react-json-view { + margin: 40px 0 80px; +} + +.tooltip { + text-align: center; + line-height: 20px; + display: table-caption; + font-size: 10px; + border-radius: 50%; + height: 20px; + width: 20px; + position: relative; + cursor: pointer; + color:#000; +} + +.tooltip .tooltiptext { + visibility: hidden; + width: 280px; + text-align: center; + border-radius: 6px; + padding: 10px; + position: absolute; + z-index: 1; + top: 25px; + left: 50%; + margin-left: -140px; + font-size: 14px; + background-color: #fff; + border: 1px solid #ccc; + box-shadow: 0px 0px 3px 1px rgba(0, 0, 0, 0.16); + color: #000; +} + +.tooltip:hover .tooltiptext { + visibility: visible; +} + +.sentence-wrapper { + border-left: 4px solid #ffc423; + padding-left: 20px; + margin-bottom: 40px; +} + +#context { + padding: 2rem 0 1rem; +} + +hr { + margin: 2em 0 1em; +} + +.technical-details-info { + margin-bottom: 100px; +} + +.loader-wrapper { + display: flex; + align-items: center; + background-color: rgba(250, 202, 43, 0.2); + padding: 15px 20px; + border-radius: 6px; +} + +.loader-wrapper p { + margin-bottom: 0; + margin-left: 20px; +} + +.loader { + width: 30px; + height: 30px; + border: dotted 5px #868686; + border-radius: 100%; + animation: spin 1s linear infinite; +} + +.loader-note { + font-size: 14px; + color: #b3b3b3; + margin-left: 5px; +} + +@keyframes spin { + 0% { + transform: rotate(0deg) scale(0.8); + border-top-color: transparent; + border-right-color: transparent; + } + 50% { transform: rotate(180deg) scale(1.2); + border-color: #949494; + border-top-color: transparent; + border-right-color: transparent; + } + 100% { transform: rotate(360deg) scale(0.8); + border-color: #bbbbbb; + border-top-color: transparent; + border-right-color: transparent; + } +} +""" + + +def to_excel(df): + """Convert df to excel. + + ref. st-bumblebee st_app.py + """ + output = BytesIO() + writer = pd.ExcelWriter(output, engine="xlsxwriter") + df.to_excel(writer, sheet_name="Sheet1") + writer.save() + processed_data = output.getvalue() + return processed_data + + +def get_table_download_link(df): + """Generates a link. + + Allowing the data in a given panda dataframe + to be downloaded. + + Args: + df: pandas.dataframe + + Returns: + href string + """ + val = to_excel(df) + b64 = base64.b64encode(val) # val looks like b'...' + return f'Download aligned paras xlsx file' # decode b'abc' => abc + + +def get_table_download_link_sents(df): + """Generates a link. + + Allowing the data in a given panda dataframe to be + downloaded for sents aligned. + + Args: + df: pandas.dataframe + + Returns: + href string + """ + val = to_excel(df) + b64 = base64.b64encode(val) # val looks like b'...' + return f'Download aligned sents xlsx file' # decode b'abc' => abc # noqa diff --git a/okteto.yml b/okteto.yml new file mode 100644 index 0000000000000000000000000000000000000000..38b02009c20d747fc51e1547772de985c777956b --- /dev/null +++ b/okteto.yml @@ -0,0 +1,44 @@ +name: gradio-cmat + +# The build section defines how to build the images of +# your development environment +# More info: https://www.okteto.com/docs/reference/manifest/#build +# build: +# my-service: +# context: . + +# The deploy section defines how to deploy your development environment +# More info: https://www.okteto.com/docs/reference/manifest/#deploy +# deploy: + # commands: + # - name: Deploy + # command: echo 'Replace this line with the proper 'helm' + +# or 'kubectl' commands to deploy your development environment' + +# The dependencies section defines other git repositories to be +# deployed as part of your development environment +# More info: https://www.okteto.com/docs/reference/manifest/#dependencies +# dependencies: +# - https://github.com/okteto/sample +# The dev section defines how to activate a development container +# More info: https://www.okteto.com/docs/reference/manifest/#dev +dev: + gradio-cmat: + # image: okteto/dev:latest + # image: python:3.8.13-bullseye + # image: simbachain/poetry-3.8 + image: python:3.8 + command: bash + workdir: /usr/src/app + sync: + - .:/usr/src/app + environment: + - name=$USER + forward: + - 7861:7861 + - 7860:7860 + - 8501:8501 + reverse: + - 9000:9000 + autocreate: true diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000000000000000000000000000000000000..4a128f916de98c1a4fab4f3c09af4933bed8dbc1 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,3442 @@ +[[package]] +name = "about-time" +version = "3.1.1" +description = "Easily measure timing and throughput of code blocks, with beautiful human friendly representations." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "alive-progress" +version = "2.4.1" +description = "A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!" +category = "main" +optional = false +python-versions = ">=3.7, <4" + +[package.dependencies] +about-time = "3.1.1" +grapheme = "0.6.0" + +[[package]] +name = "altair" +version = "4.2.0" +description = "Altair: A declarative statistical visualization library for Python." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +entrypoints = "*" +jinja2 = "*" +jsonschema = ">=3.0" +numpy = "*" +pandas = ">=0.18" +toolz = "*" + +[package.extras] +dev = ["black", "docutils", "ipython", "flake8", "pytest", "sphinx", "mistune (<2.0.0)", "m2r", "vega-datasets", "recommonmark"] + +[[package]] +name = "anyio" +version = "3.6.1" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] +trio = ["trio (>=0.16)"] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "argon2-cffi" +version = "21.3.0" +description = "The secure Argon2 password hashing algorithm." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["pre-commit", "cogapp", "tomli", "coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "sphinx-notfound-page", "furo"] +docs = ["sphinx", "sphinx-notfound-page", "furo"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["pytest", "cogapp", "pre-commit", "wheel"] +tests = ["pytest"] + +[[package]] +name = "aset2pairs" +version = "0.1.0" +description = "Convert aset to block pairs" +category = "main" +optional = false +python-versions = ">=3.8.3,<4.0.0" + +[package.dependencies] +logzero = ">=1.7.0,<2.0.0" + +[[package]] +name = "asttokens" +version = "2.0.5" +description = "Annotate AST trees with source code positions" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = "*" + +[package.extras] +test = ["astroid", "pytest"] + +[[package]] +name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "21.4.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "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"] + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "backports.zoneinfo" +version = "0.2.1" +description = "Backport of the standard library zoneinfo module" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +tzdata = ["tzdata"] + +[[package]] +name = "beautifulsoup4" +version = "4.11.1" +description = "Screen-scraping library" +category = "main" +optional = false +python-versions = ">=3.6.0" + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "bleach" +version = "5.0.0" +description = "An easy safelist-based HTML-sanitizing tool." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +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)"] + +[[package]] +name = "blinker" +version = "1.4" +description = "Fast, simple object-to-object and broadcast signaling" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "cachetools" +version = "5.2.0" +description = "Extensible memoizing collections and decorators" +category = "main" +optional = false +python-versions = "~=3.7" + +[[package]] +name = "certifi" +version = "2022.5.18.1" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "cffi" +version = "1.15.0" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "chardet" +version = "4.0.0" +description = "Universal encoding detector for Python 2 and 3" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "charset-normalizer" +version = "2.0.12" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "cmat2aset" +version = "0.1.0a7" +description = "correlation matrix to align set " +category = "main" +optional = false +python-versions = ">=3.8.3,<4.0" + +[package.dependencies] +icecream = ">=2.1.1,<3.0.0" +install = ">=1.3.5,<2.0.0" +logzero = ">=1.7.0,<2.0.0" +numpy = ">=1.22.3,<2.0.0" +pandas = ">=1.4.1,<2.0.0" +sklearn = ">=0.0,<0.1" + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "commonmark" +version = "0.9.1" +description = "Python parser for the CommonMark Markdown spec" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] + +[[package]] +name = "cssselect" +version = "1.1.0" +description = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "debugpy" +version = "1.6.0" +description = "An implementation of the Debug Adapter Protocol for Python" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "entrypoints" +version = "0.4" +description = "Discover and load entry points from installed packages." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "environs" +version = "9.5.0" +description = "simplified environment variable parsing" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +marshmallow = ">=3.0.0" +python-dotenv = "*" + +[package.extras] +dev = ["pytest", "dj-database-url", "dj-email-url", "django-cache-url", "flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)", "tox"] +django = ["dj-database-url", "dj-email-url", "django-cache-url"] +lint = ["flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)"] +tests = ["pytest", "dj-database-url", "dj-email-url", "django-cache-url"] + +[[package]] +name = "executing" +version = "0.8.3" +description = "Get the currently executing AST node of a frame, and other information" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "fastjsonschema" +version = "2.15.3" +description = "Fastest Python implementation of JSON schema" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "filelock" +version = "3.7.1" +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)"] + +[[package]] +name = "flake8" +version = "3.9.2" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +mccabe = ">=0.6.0,<0.7.0" +pycodestyle = ">=2.7.0,<2.8.0" +pyflakes = ">=2.3.0,<2.4.0" + +[[package]] +name = "gitdb" +version = "4.0.9" +description = "Git Object Database" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.27" +description = "GitPython is a python library used to interact with Git repositories" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[[package]] +name = "grapheme" +version = "0.6.0" +description = "Unicode grapheme helpers" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +test = ["pytest", "sphinx", "sphinx-autobuild", "wheel", "twine"] + +[[package]] +name = "h11" +version = "0.12.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "html2text" +version = "2020.1.16" +description = "Turn HTML into equivalent Markdown-structured text." +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "httpcore" +version = "0.15.0" +description = "A minimal low-level HTTP client." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +anyio = ">=3.0.0,<4.0.0" +certifi = "*" +h11 = ">=0.11,<0.13" +sniffio = ">=1.0.0,<2.0.0" + +[package.extras] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] + +[[package]] +name = "httpx" +version = "0.23.0" +description = "The next generation HTTP client." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +certifi = "*" +httpcore = ">=0.15.0,<0.16.0" +rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]} +sniffio = "*" + +[package.extras] +brotli = ["brotlicffi", "brotli"] +cli = ["click (>=8.0.0,<9.0.0)", "rich (>=10,<13)", "pygments (>=2.0.0,<3.0.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] + +[[package]] +name = "huggingface-hub" +version = "0.4.0" +description = "Client library to download and publish models on the huggingface.co hub" +category = "main" +optional = false +python-versions = ">=3.6.0" + +[package.dependencies] +filelock = "*" +packaging = ">=20.9" +pyyaml = "*" +requests = "*" +tqdm = "*" +typing-extensions = ">=3.7.4.3" + +[package.extras] +tensorflow = ["tensorflow"] +testing = ["pytest", "datasets"] +torch = ["torch"] +all = ["pytest", "datasets", "black (>=20.8b1)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] +dev = ["pytest", "datasets", "black (>=20.8b1)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] +quality = ["black (>=20.8b1)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] + +[[package]] +name = "icecream" +version = "2.1.2" +description = "Never use print() to debug again; inspect variables, expressions, and program execution with a single, simple function call." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +asttokens = ">=2.0.1" +colorama = ">=0.3.9" +executing = ">=0.3.1" +pygments = ">=2.2.0" + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "importlib-metadata" +version = "4.11.4" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +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)"] + +[[package]] +name = "importlib-resources" +version = "5.7.1" +description = "Read resources from Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[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)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] + +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "install" +version = "1.3.5" +description = "Install packages from within code" +category = "main" +optional = false +python-versions = ">=2.7, >=3.5" + +[[package]] +name = "ipykernel" +version = "6.13.1" +description = "IPython Kernel for Jupyter" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +debugpy = ">=1.0" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +tornado = ">=6.1" +traitlets = ">=5.1.0" + +[package.extras] +test = ["flaky", "ipyparallel", "pre-commit", "pytest-cov", "pytest-timeout", "pytest (>=6.0)"] + +[[package]] +name = "ipython" +version = "8.4.0" +description = "IPython: Productive Interactive Computing" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" + +[package.extras] +all = ["black", "Sphinx (>=1.3)", "ipykernel", "nbconvert", "nbformat", "ipywidgets", "notebook", "ipyparallel", "qtconsole", "pytest (<7.1)", "pytest-asyncio", "testpath", "curio", "matplotlib (!=3.2.0)", "numpy (>=1.19)", "pandas", "trio"] +black = ["black"] +doc = ["Sphinx (>=1.3)"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] +test_extra = ["pytest (<7.1)", "pytest-asyncio", "testpath", "curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.19)", "pandas", "trio"] + +[[package]] +name = "ipython-genutils" +version = "0.2.0" +description = "Vestigial utilities from IPython" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "ipywidgets" +version = "7.7.0" +description = "IPython HTML widgets for Jupyter" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +ipykernel = ">=4.5.1" +ipython = {version = ">=4.0.0", markers = "python_version >= \"3.3\""} +ipython-genutils = ">=0.2.0,<0.3.0" +jupyterlab-widgets = {version = ">=1.0.0", markers = "python_version >= \"3.6\""} +nbformat = ">=4.2.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=3.6.0,<3.7.0" + +[package.extras] +test = ["pytest (>=3.6.0)", "pytest-cov", "mock"] + +[[package]] +name = "jedi" +version = "0.18.1" +description = "An autocompletion tool for Python that can be used for text editors." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +parso = ">=0.8.0,<0.9.0" + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "joblib" +version = "1.1.0" +description = "Lightweight pipelining with Python functions" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "jsonschema" +version = "4.6.0" +description = "An implementation of JSON Schema validation for Python" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +attrs = ">=17.4.0" +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jupyter-client" +version = "7.3.4" +description = "Jupyter protocol implementation and client libraries" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +entrypoints = "*" +jupyter-core = ">=4.9.2" +nest-asyncio = ">=1.5.4" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.0" +traitlets = "*" + +[package.extras] +doc = ["ipykernel", "myst-parser", "sphinx-rtd-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt"] +test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-core" +version = "4.10.0" +description = "Jupyter core package. A base package on which Jupyter projects rely." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = "*" + +[package.extras] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.2.2" +description = "Pygments theme using JupyterLab CSS variables" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "jupyterlab-widgets" +version = "1.1.0" +description = "A JupyterLab extension." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "loguru" +version = "0.6.0" +description = "Python logging made (stupidly) simple" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["colorama (>=0.3.4)", "docutils (==0.16)", "flake8 (>=3.7.7)", "tox (>=3.9.0)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "black (>=19.10b0)", "isort (>=5.1.1)", "Sphinx (>=4.1.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)"] + +[[package]] +name = "logzero" +version = "1.7.0" +description = "Robust and effective logging for Python 2 and 3" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} + +[[package]] +name = "lxml" +version = "4.9.0" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["beautifulsoup4"] +source = ["Cython (>=0.29.7)"] + +[[package]] +name = "markupsafe" +version = "2.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "marshmallow" +version = "3.16.0" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +packaging = ">=17.0" + +[package.extras] +dev = ["pytest", "pytz", "simplejson", "mypy (==0.960)", "flake8 (==4.0.1)", "flake8-bugbear (==22.4.25)", "pre-commit (>=2.4,<3.0)", "tox"] +docs = ["sphinx (==4.5.0)", "sphinx-issues (==3.0.1)", "alabaster (==0.7.12)", "sphinx-version-warning (==1.1.2)", "autodocsumm (==0.2.8)"] +lint = ["mypy (==0.960)", "flake8 (==4.0.1)", "flake8-bugbear (==22.4.25)", "pre-commit (>=2.4,<3.0)"] +tests = ["pytest", "pytz", "simplejson"] + +[[package]] +name = "matplotlib-inline" +version = "0.1.3" +description = "Inline Matplotlib backend for Jupyter" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mccabe" +version = "0.6.1" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "mistune" +version = "0.8.4" +description = "The fastest markdown parser in pure Python" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "model-pool" +version = "0.1.3" +description = "pack_name descr " +category = "main" +optional = false +python-versions = ">=3.7.9,<4.0.0" + +[package.dependencies] +alive-progress = ">=2.3.1,<3.0.0" +huggingface-hub = ">=0.4.0,<0.5.0" +icecream = ">=2.1.1,<3.0.0" +install = ">=1.3.5,<2.0.0" +joblib = ">=1.1.0,<2.0.0" +logzero = ">=1.7.0,<2.0.0" +sentence-transformers = ">=2.2.0,<3.0.0" + +[[package]] +name = "more-itertools" +version = "8.13.0" +description = "More routines for operating on iterables, beyond itertools" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "nbclient" +version = "0.6.4" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +category = "main" +optional = false +python-versions = ">=3.7.0" + +[package.dependencies] +jupyter-client = ">=6.1.5" +nbformat = ">=5.0" +nest-asyncio = "*" +traitlets = ">=5.2.2" + +[package.extras] +sphinx = ["autodoc-traits", "mock", "moto", "myst-parser", "Sphinx (>=1.7)", "sphinx-book-theme"] +test = ["black", "check-manifest", "flake8", "ipykernel", "ipython (<8.0.0)", "ipywidgets (<8.0.0)", "mypy", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "6.5.0" +description = "Converting Jupyter Notebooks" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "*" +defusedxml = "*" +entrypoints = ">=0.2.2" +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +MarkupSafe = ">=2.0" +mistune = ">=0.8.1,<2" +nbclient = ">=0.5.0" +nbformat = ">=5.1" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.0" + +[package.extras] +all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "tornado (>=6.1)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] +docs = ["sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"] +serve = ["tornado (>=6.1)"] +test = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)"] +webpdf = ["pyppeteer (>=1,<1.1)"] + +[[package]] +name = "nbformat" +version = "5.4.0" +description = "The Jupyter Notebook format" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +fastjsonschema = "*" +jsonschema = ">=2.6" +jupyter-core = "*" +traitlets = ">=5.1" + +[package.extras] +test = ["check-manifest", "testpath", "pytest", "pre-commit"] + +[[package]] +name = "nest-asyncio" +version = "1.5.5" +description = "Patch asyncio to allow nested event loops" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "nltk" +version = "3.7" +description = "Natural Language Toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +click = "*" +joblib = "*" +regex = ">=2021.8.3" +tqdm = "*" + +[package.extras] +all = ["numpy", "pyparsing", "scipy", "matplotlib", "twython", "requests", "scikit-learn", "python-crfsuite"] +corenlp = ["requests"] +machine_learning = ["numpy", "python-crfsuite", "scikit-learn", "scipy"] +plot = ["matplotlib"] +tgrep = ["pyparsing"] +twitter = ["twython"] + +[[package]] +name = "notebook" +version = "6.4.12" +description = "A web-based notebook environment for interactive computing" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=5.3.4" +jupyter-core = ">=4.6.1" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] +json-logging = ["json-logging"] +test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] + +[[package]] +name = "numpy" +version = "1.22.4" +description = "NumPy is the fundamental package for array computing with Python." +category = "main" +optional = false +python-versions = ">=3.8" + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pandas" +version = "1.4.2" +description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +numpy = [ + {version = ">=1.18.5", markers = "platform_machine != \"aarch64\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.19.2", markers = "platform_machine == \"aarch64\" and python_version < \"3.10\""}, + {version = ">=1.20.0", markers = "platform_machine == \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, +] +python-dateutil = ">=2.8.1" +pytz = ">=2020.1" + +[package.extras] +test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] + +[[package]] +name = "pandocfilters" +version = "1.5.0" +description = "Utilities for writing pandoc filters in python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pastel" +version = "0.2.1" +description = "Bring colors to your terminal." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pendulum" +version = "2.1.2" +description = "Python datetimes made easy" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +python-dateutil = ">=2.6,<3.0" +pytzdata = ">=2020.1" + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pillow" +version = "9.1.1" +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"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "poethepoet" +version = "0.10.0" +description = "A task runner that works well with poetry." +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" + +[package.dependencies] +pastel = ">=0.2.0,<0.3.0" +tomlkit = ">=0.6.0,<1.0.0" + +[[package]] +name = "prometheus-client" +version = "0.14.1" +description = "Python client for the Prometheus monitoring system." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.29" +description = "Library for building powerful interactive command lines in Python" +category = "main" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "protobuf" +version = "3.20.1" +description = "Protocol Buffers" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "psutil" +version = "5.9.1" +description = "Cross-platform lib for process and system monitoring in Python." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +test = ["ipaddress", "mock", "enum34", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pyarrow" +version = "8.0.0" +description = "Python library for Apache Arrow" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +numpy = ">=1.16.6" + +[[package]] +name = "pycodestyle" +version = "2.7.0" +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pydeck" +version = "0.7.1" +description = "Widget for deck.gl maps" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +ipykernel = {version = ">=5.1.2", markers = "python_version >= \"3.4\""} +ipywidgets = ">=7.0.0" +jinja2 = ">=2.10.1" +numpy = ">=1.16.4" +traitlets = ">=4.3.2" + +[package.extras] +testing = ["pytest"] + +[[package]] +name = "pydocstyle" +version = "6.1.1" +description = "Python docstring style checker" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +snowballstemmer = "*" + +[package.extras] +toml = ["toml"] + +[[package]] +name = "pyflakes" +version = "2.3.1" +description = "passive checker of Python programs" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pygments" +version = "2.12.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pympler" +version = "1.0.1" +description = "A development tool to measure, monitor and analyze the memory behavior of Python objects." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" + +[package.extras] +diagrams = ["railroad-diagrams", "jinja2"] + +[[package]] +name = "pyrsistent" +version = "0.18.1" +description = "Persistent/Functional/Immutable data structures" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "pytest" +version = "7.1.2" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +tomli = ">=1.0.0" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "0.20.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pytz" +version = "2022.1" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pytz-deprecation-shim" +version = "0.1.0.post0" +description = "Shims to make deprecation of pytz easier" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" + +[package.dependencies] +"backports.zoneinfo" = {version = "*", markers = "python_version >= \"3.6\" and python_version < \"3.9\""} +tzdata = {version = "*", markers = "python_version >= \"3.6\""} + +[[package]] +name = "pytzdata" +version = "2020.1" +description = "The Olson timezone database for Python." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pywin32" +version = "304" +description = "Python for Window Extensions" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pywinpty" +version = "2.0.5" +description = "Pseudo terminal support for Windows from Python." +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pyzmq" +version = "23.1.0" +description = "Python bindings for 0MQ" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} +py = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "readability-lxml" +version = "0.8.1" +description = "fast html to text parser (article readability tool) with python 3 support" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +chardet = "*" +cssselect = "*" +lxml = "*" + +[package.extras] +test = ["timeout-decorator"] + +[[package]] +name = "regex" +version = "2022.6.2" +description = "Alternative regular expression module, to replace re." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.27.1" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] + +[[package]] +name = "rfc3986" +version = "1.5.0" +description = "Validating URI References per RFC 3986" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +idna = {version = "*", optional = true, markers = "extra == \"idna2008\""} + +[package.extras] +idna2008 = ["idna"] + +[[package]] +name = "rich" +version = "12.4.4" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "main" +optional = false +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 = "scikit-learn" +version = "1.1.1" +description = "A set of python modules for machine learning and data mining" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +joblib = ">=1.0.0" +numpy = ">=1.17.3" +scipy = ">=1.3.2" +threadpoolctl = ">=2.0.0" + +[package.extras] +benchmark = ["matplotlib (>=3.1.2)", "pandas (>=1.0.5)", "memory-profiler (>=0.57.0)"] +docs = ["matplotlib (>=3.1.2)", "scikit-image (>=0.14.5)", "pandas (>=1.0.5)", "seaborn (>=0.9.0)", "memory-profiler (>=0.57.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "numpydoc (>=1.2.0)", "Pillow (>=7.1.2)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +examples = ["matplotlib (>=3.1.2)", "scikit-image (>=0.14.5)", "pandas (>=1.0.5)", "seaborn (>=0.9.0)"] +tests = ["matplotlib (>=3.1.2)", "scikit-image (>=0.14.5)", "pandas (>=1.0.5)", "pytest (>=5.0.1)", "pytest-cov (>=2.9.0)", "flake8 (>=3.8.2)", "black (>=22.3.0)", "mypy (>=0.770)", "pyamg (>=4.0.0)", "numpydoc (>=1.2.0)"] + +[[package]] +name = "scipy" +version = "1.6.1" +description = "SciPy: Scientific Library for Python" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +numpy = ">=1.16.5" + +[[package]] +name = "semver" +version = "2.13.0" +description = "Python helper for Semantic Versioning (http://semver.org/)" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "send2trash" +version = "1.8.0" +description = "Send file to trash natively under Mac OS X, Windows and Linux." +category = "main" +optional = false +python-versions = "*" + +[package.extras] +nativelib = ["pyobjc-framework-cocoa", "pywin32"] +objc = ["pyobjc-framework-cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "sentence-transformers" +version = "2.2.0" +description = "Multilingual text embeddings" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +huggingface-hub = "*" +nltk = "*" +numpy = "*" +scikit-learn = "*" +scipy = "*" +sentencepiece = "*" +torch = ">=1.6.0" +torchvision = "*" +tqdm = "*" +transformers = ">=4.6.0,<5.0.0" + +[[package]] +name = "sentencepiece" +version = "0.1.96" +description = "SentencePiece python wrapper" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "set-loglevel" +version = "0.1.2" +description = "Return a loglevel (10, 20, etc.) taking ENV LOGLEVEL into account" +category = "main" +optional = false +python-versions = ">=3.8.3,<4.0.0" + +[package.dependencies] +environs = ">=9.5.0,<10.0.0" +logzero = ">=1.7.0,<2.0.0" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "sklearn" +version = "0.0" +description = "A set of python modules for machine learning and data mining" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +scikit-learn = "*" + +[[package]] +name = "smmap" +version = "5.0.0" +description = "A pure Python implementation of a sliding window memory map manager" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "sniffio" +version = "1.2.0" +description = "Sniff out which async library your code is running under" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "soupsieve" +version = "2.3.2.post1" +description = "A modern CSS selector implementation for Beautiful Soup." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "stack-data" +version = "0.2.0" +description = "Extract data from python stack frames and tracebacks for informative displays" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +asttokens = "*" +executing = "*" +pure-eval = "*" + +[package.extras] +tests = ["pytest", "typeguard", "pygments", "littleutils", "cython"] + +[[package]] +name = "streamlit" +version = "1.10.0" +description = "The fastest way to build data apps in Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +altair = ">=3.2.0" +attrs = "*" +blinker = "*" +cachetools = ">=4.0" +click = ">=7.0" +gitpython = "!=3.1.19" +importlib-metadata = ">=1.4" +numpy = "*" +packaging = "*" +pandas = ">=0.21.0" +pillow = ">=6.2.0" +protobuf = ">=3.12,<4" +pyarrow = "*" +pydeck = ">=0.1.dev5" +pympler = ">=0.9" +python-dateutil = "*" +requests = "*" +rich = "*" +semver = "*" +toml = "*" +tornado = ">=5.0" +typing-extensions = "*" +tzlocal = "*" +validators = "*" +watchdog = {version = "*", markers = "platform_system != \"Darwin\""} + +[[package]] +name = "streamlit-option-menu" +version = "0.3.2" +description = "streamlit-option-menu is a simple Streamlit component that allows users to select a single item from a list of options in a menu." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +streamlit = ">=0.63" + +[[package]] +name = "terminado" +version = "0.15.0" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +test = ["pre-commit", "pytest-timeout", "pytest (>=6.0)"] + +[[package]] +name = "threadpoolctl" +version = "3.1.0" +description = "threadpoolctl" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "tinycss2" +version = "1.1.1" +description = "A tiny CSS parser" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx-rtd-theme"] +test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"] + +[[package]] +name = "tokenizers" +version = "0.12.1" +description = "Fast and Customizable Tokenizers" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +docs = ["sphinx", "sphinx-rtd-theme", "setuptools-rust"] +testing = ["pytest", "requests", "numpy", "datasets"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "tomlkit" +version = "0.11.0" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.6,<4.0" + +[[package]] +name = "toolz" +version = "0.11.2" +description = "List processing tools and functional utilities" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "torch" +version = "1.11.0" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +category = "main" +optional = false +python-versions = ">=3.7.0" + +[package.dependencies] +typing-extensions = "*" + +[[package]] +name = "torchvision" +version = "0.12.0" +description = "image and video datasets and models for torch deep learning" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +numpy = "*" +pillow = ">=5.3.0,<8.3.0 || >=8.4.0" +requests = "*" +torch = "*" +typing-extensions = "*" + +[package.extras] +scipy = ["scipy"] + +[[package]] +name = "tornado" +version = "6.1" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "main" +optional = false +python-versions = ">= 3.5" + +[[package]] +name = "tqdm" +version = "4.64.0" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "traitlets" +version = "5.2.2.post1" +description = "" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +test = ["pre-commit", "pytest"] + +[[package]] +name = "transformers" +version = "4.19.2" +description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" +category = "main" +optional = false +python-versions = ">=3.7.0" + +[package.dependencies] +filelock = "*" +huggingface-hub = ">=0.1.0,<1.0" +numpy = ">=1.17" +packaging = ">=20.0" +pyyaml = ">=5.1" +regex = "!=2019.12.17" +requests = "*" +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", "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"] +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)", "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", "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)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf", "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)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "torch (>=1.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf", "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", "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"] +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"] +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)"] +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)"] +ray = ["ray"] +retrieval = ["faiss-cpu", "datasets"] +sagemaker = ["sagemaker (>=2.31.0)"] +sentencepiece = ["sentencepiece (>=0.1.91,!=0.1.92)", "protobuf"] +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)", "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"] +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", "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)"] +vision = ["pillow"] + +[[package]] +name = "typing-extensions" +version = "4.2.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "tzdata" +version = "2022.1" +description = "Provider of IANA time zone data" +category = "main" +optional = false +python-versions = ">=2" + +[[package]] +name = "tzlocal" +version = "4.2" +description = "tzinfo object for the local timezone" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} +pytz-deprecation-shim = "*" +tzdata = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"] +test = ["pytest-mock (>=3.3)", "pytest (>=4.3)"] + +[[package]] +name = "urllib3" +version = "1.26.9" +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" + +[package.extras] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "validators" +version = "0.20.0" +description = "Python Data Validation for Humansℱ." +category = "main" +optional = false +python-versions = ">=3.4" + +[package.dependencies] +decorator = ">=3.4.0" + +[package.extras] +test = ["pytest (>=2.2.3)", "flake8 (>=2.4.0)", "isort (>=4.2.2)"] + +[[package]] +name = "watchdog" +version = "2.1.8" +description = "Filesystem events monitoring" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[[package]] +name = "wcwidth" +version = "0.2.5" +description = "Measures the displayed width of unicode strings in a terminal" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "widgetsnbextension" +version = "3.6.0" +description = "IPython HTML widgets for Jupyter" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +notebook = ">=4.4.1" + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] + +[[package]] +name = "zipp" +version = "3.8.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +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)"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.8.3" +content-hash = "5cac6b87e64544c9217fa2c47b067d8ab6148dab146896deed8fbd9e8bf9d882" + +[metadata.files] +about-time = [ + {file = "about-time-3.1.1.tar.gz", hash = "sha256:586b329450c9387d1ae8c42d2db4f5b4c57a54508d0f1b7bb00322ffd5ce9f9b"}, + {file = "about_time-3.1.1-py3-none-any.whl", hash = "sha256:96841beb3f9b5de1cbb323d2bdb0fa9abdecbc46f2d546b9b3c2483d23daa17a"}, +] +alive-progress = [ + {file = "alive-progress-2.4.1.tar.gz", hash = "sha256:089757c8197f27ad972ba27e1060f6db92368d83c736884e159034fd74865323"}, + {file = "alive_progress-2.4.1-py3-none-any.whl", hash = "sha256:5503ffca0a0607d5f0d24d3b10a718fe50e375470fa07602b246333eb7ec88ee"}, +] +altair = [ + {file = "altair-4.2.0-py3-none-any.whl", hash = "sha256:0c724848ae53410c13fa28be2b3b9a9dcb7b5caa1a70f7f217bd663bb419935a"}, + {file = "altair-4.2.0.tar.gz", hash = "sha256:d87d9372e63b48cd96b2a6415f0cf9457f50162ab79dc7a31cd7e024dd840026"}, +] +anyio = [ + {file = "anyio-3.6.1-py3-none-any.whl", hash = "sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be"}, + {file = "anyio-3.6.1.tar.gz", hash = "sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b"}, +] +appnope = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] +argon2-cffi = [ + {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, + {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, +] +argon2-cffi-bindings = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] +aset2pairs = [ + {file = "aset2pairs-0.1.0-py3-none-any.whl", hash = "sha256:a7137c7492566933198eebcef8df8c77ffda2f239f0865ae28c2afaf2a252550"}, + {file = "aset2pairs-0.1.0.tar.gz", hash = "sha256:ee8d69f5ddce401f4999182678b108d9580edcc19374e44ed698c2171a17b483"}, +] +asttokens = [ + {file = "asttokens-2.0.5-py2.py3-none-any.whl", hash = "sha256:0844691e88552595a6f4a4281a9f7f79b8dd45ca4ccea82e5e05b4bbdb76705c"}, + {file = "asttokens-2.0.5.tar.gz", hash = "sha256:9a54c114f02c7a9480d56550932546a3f1fe71d8a02f1bc7ccd0ee3ee35cf4d5"}, +] +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"}, +] +backcall = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] +"backports.zoneinfo" = [ + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, + {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, +] +beautifulsoup4 = [ + {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, + {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, +] +bleach = [ + {file = "bleach-5.0.0-py3-none-any.whl", hash = "sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1"}, + {file = "bleach-5.0.0.tar.gz", hash = "sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565"}, +] +blinker = [ + {file = "blinker-1.4.tar.gz", hash = "sha256:471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"}, +] +cachetools = [ + {file = "cachetools-5.2.0-py3-none-any.whl", hash = "sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db"}, + {file = "cachetools-5.2.0.tar.gz", hash = "sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757"}, +] +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"}, +] +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"}, +] +chardet = [ + {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"}, + {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"}, +] +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"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +cmat2aset = [ + {file = "cmat2aset-0.1.0a7-py3-none-any.whl", hash = "sha256:53d9f514b99ed4735994ffc73213b53172fea10cec7633da3c2cb20fb8ce8426"}, + {file = "cmat2aset-0.1.0a7.tar.gz", hash = "sha256:1d6d494c7658e648eb88e601e69b198e3ce076b34594593db2318fe9e9b466b8"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +commonmark = [ + {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, + {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, +] +cssselect = [ + {file = "cssselect-1.1.0-py2.py3-none-any.whl", hash = "sha256:f612ee47b749c877ebae5bb77035d8f4202c6ad0f0fc1271b3c18ad6c4468ecf"}, + {file = "cssselect-1.1.0.tar.gz", hash = "sha256:f95f8dedd925fd8f54edb3d2dfb44c190d9d18512377d3c1e2388d16126879bc"}, +] +debugpy = [ + {file = "debugpy-1.6.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:eb1946efac0c0c3d411cea0b5ac772fbde744109fd9520fb0c5a51979faf05ad"}, + {file = "debugpy-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e3513399177dd37af4c1332df52da5da1d0c387e5927dc4c0709e26ee7302e8f"}, + {file = "debugpy-1.6.0-cp310-cp310-win32.whl", hash = "sha256:5c492235d6b68f879df3bdbdb01f25c15be15682665517c2c7d0420e5658d71f"}, + {file = "debugpy-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:40de9ba137d355538432209d05e0f5fe5d0498dce761c39119ad4b950b51db31"}, + {file = "debugpy-1.6.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:0d383b91efee57dbb923ba20801130cf60450a0eda60bce25bccd937de8e323a"}, + {file = "debugpy-1.6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1ff853e60e77e1c16f85a31adb8360bb2d98ca588d7ed645b7f0985b240bdb5e"}, + {file = "debugpy-1.6.0-cp37-cp37m-win32.whl", hash = "sha256:8e972c717d95f56b6a3a7a29a5ede1ee8f2c3802f6f0e678203b0778eb322bf1"}, + {file = "debugpy-1.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a8aaeb53e87225141fda7b9081bd87155c1debc13e2f5a532d341112d1983b65"}, + {file = "debugpy-1.6.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:132defb585b518955358321d0f42f6aa815aa15b432be27db654807707c70b2f"}, + {file = "debugpy-1.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8ee75844242b4537beb5899f3e60a578454d1f136b99e8d57ac424573797b94a"}, + {file = "debugpy-1.6.0-cp38-cp38-win32.whl", hash = "sha256:a65a2499761d47df3e9ea9567109be6e73d412e00ac3ffcf74839f3ddfcdf028"}, + {file = "debugpy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:bd980d533d0ddfc451e03a3bb32acb2900049fec39afc3425b944ebf0889be62"}, + {file = "debugpy-1.6.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:245c7789a012f86210847ec7ee9f38c30a30d4c2223c3e111829a76c9006a5d0"}, + {file = "debugpy-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e3aa2368883e83e7b689ddff3cafb595f7b711f6a065886b46a96a7fef874e7"}, + {file = "debugpy-1.6.0-cp39-cp39-win32.whl", hash = "sha256:72bcfa97f3afa0064afc77ab811f48ad4a06ac330f290b675082c24437730366"}, + {file = "debugpy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:30abefefd2ff5a5481162d613cb70e60e2fa80a5eb4c994717c0f008ed25d2e1"}, + {file = "debugpy-1.6.0-py2.py3-none-any.whl", hash = "sha256:4de7777842da7e08652f2776c552070bbdd758557fdec73a15d7be0e4aab95ce"}, + {file = "debugpy-1.6.0.zip", hash = "sha256:7b79c40852991f7b6c3ea65845ed0f5f6b731c37f4f9ad9c61e2ab4bd48a9275"}, +] +decorator = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] +defusedxml = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] +entrypoints = [ + {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, + {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, +] +environs = [ + {file = "environs-9.5.0-py2.py3-none-any.whl", hash = "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124"}, + {file = "environs-9.5.0.tar.gz", hash = "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9"}, +] +executing = [ + {file = "executing-0.8.3-py2.py3-none-any.whl", hash = "sha256:d1eef132db1b83649a3905ca6dd8897f71ac6f8cac79a7e58a1a09cf137546c9"}, + {file = "executing-0.8.3.tar.gz", hash = "sha256:c6554e21c6b060590a6d3be4b82fb78f8f0194d809de5ea7df1c093763311501"}, +] +fastjsonschema = [ + {file = "fastjsonschema-2.15.3-py3-none-any.whl", hash = "sha256:ddb0b1d8243e6e3abb822bd14e447a89f4ab7439342912d590444831fa00b6a0"}, + {file = "fastjsonschema-2.15.3.tar.gz", hash = "sha256:0a572f0836962d844c1fc435e200b2e4f4677e4e6611a2e3bdd01ba697c275ec"}, +] +filelock = [ + {file = "filelock-3.7.1-py3-none-any.whl", hash = "sha256:37def7b658813cda163b56fc564cdc75e86d338246458c4c28ae84cabefa2404"}, + {file = "filelock-3.7.1.tar.gz", hash = "sha256:3a0fd85166ad9dbab54c9aec96737b744106dc5f15c0b09a6744a445299fcf04"}, +] +flake8 = [ + {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, + {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, +] +gitdb = [ + {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, + {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, +] +gitpython = [ + {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, + {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, +] +grapheme = [ + {file = "grapheme-0.6.0.tar.gz", hash = "sha256:44c2b9f21bbe77cfb05835fec230bd435954275267fea1858013b102f8603cca"}, +] +h11 = [ + {file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"}, + {file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"}, +] +html2text = [ + {file = "html2text-2020.1.16-py3-none-any.whl", hash = "sha256:c7c629882da0cf377d66f073329ccf34a12ed2adf0169b9285ae4e63ef54c82b"}, + {file = "html2text-2020.1.16.tar.gz", hash = "sha256:e296318e16b059ddb97f7a8a1d6a5c1d7af4544049a01e261731d2d5cc277bbb"}, +] +httpcore = [ + {file = "httpcore-0.15.0-py3-none-any.whl", hash = "sha256:1105b8b73c025f23ff7c36468e4432226cbb959176eab66864b8e31c4ee27fa6"}, + {file = "httpcore-0.15.0.tar.gz", hash = "sha256:18b68ab86a3ccf3e7dc0f43598eaddcf472b602aba29f9aa6ab85fe2ada3980b"}, +] +httpx = [ + {file = "httpx-0.23.0-py3-none-any.whl", hash = "sha256:42974f577483e1e932c3cdc3cd2303e883cbfba17fe228b0f63589764d7b9c4b"}, + {file = "httpx-0.23.0.tar.gz", hash = "sha256:f28eac771ec9eb4866d3fb4ab65abd42d38c424739e80c08d8d20570de60b0ef"}, +] +huggingface-hub = [ + {file = "huggingface_hub-0.4.0-py3-none-any.whl", hash = "sha256:808021af1ce1111104973ae54d81738eaf40be6d1e82fc6bdedb82f81c6206e7"}, + {file = "huggingface_hub-0.4.0.tar.gz", hash = "sha256:f0e3389f8988eb7781b17de520ae7fd0aa50d9823534e3ae55344d943a88ac87"}, +] +icecream = [ + {file = "icecream-2.1.2-py2.py3-none-any.whl", hash = "sha256:04b9cea4d9931cf6960db0430ebf11fa34464ce7152e384ddf50f96d25b201b4"}, + {file = "icecream-2.1.2.tar.gz", hash = "sha256:09300b2d1c678712410cbd47c95198eb1b580f66f311a554ccd6b9e758ece0ee"}, +] +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"}, +] +importlib-resources = [ + {file = "importlib_resources-5.7.1-py3-none-any.whl", hash = "sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8"}, + {file = "importlib_resources-5.7.1.tar.gz", hash = "sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] +install = [ + {file = "install-1.3.5-py3-none-any.whl", hash = "sha256:0d3fadf4aa62c95efe8d34757c8507eb46177f86c016c21c6551eafc6a53d5a9"}, + {file = "install-1.3.5.tar.gz", hash = "sha256:e67c8a0be5ccf8cb4ffa17d090f3a61b6e820e6a7e21cd1d2c0f7bc59b18e647"}, +] +ipykernel = [ + {file = "ipykernel-6.13.1-py3-none-any.whl", hash = "sha256:fedc79bebd8a438162d056e0c7662d5ac8a47d1f6ef33a702e8460248dc4517f"}, + {file = "ipykernel-6.13.1.tar.gz", hash = "sha256:6f42070a5d87ecbf4a2fc27a7faae8d690fd3794825a090ddf6b00b9678a5b69"}, +] +ipython = [ + {file = "ipython-8.4.0-py3-none-any.whl", hash = "sha256:7ca74052a38fa25fe9bedf52da0be7d3fdd2fb027c3b778ea78dfe8c212937d1"}, + {file = "ipython-8.4.0.tar.gz", hash = "sha256:f2db3a10254241d9b447232cec8b424847f338d9d36f9a577a6192c332a46abd"}, +] +ipython-genutils = [ + {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, + {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, +] +ipywidgets = [ + {file = "ipywidgets-7.7.0-py2.py3-none-any.whl", hash = "sha256:e58ff58bc94d481e91ecb6e13a5cb96a87b6b8ade135e055603d0ca24593df38"}, + {file = "ipywidgets-7.7.0.tar.gz", hash = "sha256:ab4a5596855a88b83761921c768707d65e5847068139bc1729ddfe834703542a"}, +] +jedi = [ + {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, + {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, +] +jinja2 = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] +joblib = [ + {file = "joblib-1.1.0-py2.py3-none-any.whl", hash = "sha256:f21f109b3c7ff9d95f8387f752d0d9c34a02aa2f7060c2135f465da0e5160ff6"}, + {file = "joblib-1.1.0.tar.gz", hash = "sha256:4158fcecd13733f8be669be0683b96ebdbbd38d23559f54dca7205aea1bf1e35"}, +] +jsonschema = [ + {file = "jsonschema-4.6.0-py3-none-any.whl", hash = "sha256:1c92d2db1900b668201f1797887d66453ab1fbfea51df8e4b46236689c427baf"}, + {file = "jsonschema-4.6.0.tar.gz", hash = "sha256:9d6397ba4a6c0bf0300736057f649e3e12ecbc07d3e81a0dacb72de4e9801957"}, +] +jupyter-client = [ + {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, + {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, +] +jupyter-core = [ + {file = "jupyter_core-4.10.0-py3-none-any.whl", hash = "sha256:e7f5212177af7ab34179690140f188aa9bf3d322d8155ed972cbded19f55b6f3"}, + {file = "jupyter_core-4.10.0.tar.gz", hash = "sha256:a6de44b16b7b31d7271130c71a6792c4040f077011961138afed5e5e73181aec"}, +] +jupyterlab-pygments = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] +jupyterlab-widgets = [ + {file = "jupyterlab_widgets-1.1.0-py3-none-any.whl", hash = "sha256:c2a9bd3789f120f64d73268c066ed3b000c56bc1dda217be5cdc43e7b4ebad3f"}, + {file = "jupyterlab_widgets-1.1.0.tar.gz", hash = "sha256:d5f41bc1713795385f718d44dcba47e1e1473c6289f28a95aa6b2c0782ee372a"}, +] +loguru = [ + {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, + {file = "loguru-0.6.0.tar.gz", hash = "sha256:066bd06758d0a513e9836fd9c6b5a75bfb3fd36841f4b996bc60b547a309d41c"}, +] +logzero = [ + {file = "logzero-1.7.0-py2.py3-none-any.whl", hash = "sha256:23eb1f717a2736f9ab91ca0d43160fd2c996ad49ae6bad34652d47aba908769d"}, + {file = "logzero-1.7.0.tar.gz", hash = "sha256:7f73ddd3ae393457236f081ffebd044a3aa2e423a47ae6ddb5179ab90d0ad082"}, +] +lxml = [ + {file = "lxml-4.9.0-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:b5031d151d6147eac53366d6ec87da84cd4d8c5e80b1d9948a667a7164116e39"}, + {file = "lxml-4.9.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5d52e1173f52020392f593f87a6af2d4055dd800574a5cb0af4ea3878801d307"}, + {file = "lxml-4.9.0-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3af00ee88376022589ceeb8170eb67dacf5f7cd625ea59fa0977d719777d4ae8"}, + {file = "lxml-4.9.0-cp27-cp27m-win32.whl", hash = "sha256:1057356b808d149bc14eb8f37bb89129f237df488661c1e0fc0376ca90e1d2c3"}, + {file = "lxml-4.9.0-cp27-cp27m-win_amd64.whl", hash = "sha256:f6d23a01921b741774f35e924d418a43cf03eca1444f3fdfd7978d35a5aaab8b"}, + {file = "lxml-4.9.0-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56e19fb6e4b8bd07fb20028d03d3bc67bcc0621347fbde64f248e44839771756"}, + {file = "lxml-4.9.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4cd69bca464e892ea4ed544ba6a7850aaff6f8d792f8055a10638db60acbac18"}, + {file = "lxml-4.9.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:94b181dd2777890139e49a5336bf3a9a3378ce66132c665fe8db4e8b7683cde2"}, + {file = "lxml-4.9.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:607224ffae9a0cf0a2f6e14f5f6bce43e83a6fbdaa647891729c103bdd6a5593"}, + {file = "lxml-4.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:11d62c97ceff9bab94b6b29c010ea5fb6831743459bb759c917f49ba75601cd0"}, + {file = "lxml-4.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:70a198030d26f5e569367f0f04509b63256faa76a22886280eea69a4f535dd40"}, + {file = "lxml-4.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3cf816aed8125cfc9e6e5c6c31ff94278320d591bd7970c4a0233bee0d1c8790"}, + {file = "lxml-4.9.0-cp310-cp310-win32.whl", hash = "sha256:65b3b5f12c6fb5611e79157214f3cd533083f9b058bf2fc8a1c5cc5ee40fdc5a"}, + {file = "lxml-4.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:0aa4cce579512c33373ca4c5e23c21e40c1aa1a33533a75e51b654834fd0e4f2"}, + {file = "lxml-4.9.0-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63419db39df8dc5564f6f103102c4665f7e4d9cb64030e98cf7a74eae5d5760d"}, + {file = "lxml-4.9.0-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d8e5021e770b0a3084c30dda5901d5fce6d4474feaf0ced8f8e5a82702502fbb"}, + {file = "lxml-4.9.0-cp35-cp35m-win32.whl", hash = "sha256:f17b9df97c5ecdfb56c5e85b3c9df9831246df698f8581c6e111ac664c7c656e"}, + {file = "lxml-4.9.0-cp35-cp35m-win_amd64.whl", hash = "sha256:75da29a0752c8f2395df0115ac1681cefbdd4418676015be8178b733704cbff2"}, + {file = "lxml-4.9.0-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:e4d020ecf3740b7312bacab2cb966bb720fd4d3490562d373b4ad91dd1857c0d"}, + {file = "lxml-4.9.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b71c52d69b91af7d18c13aef1b0cc3baee36b78607c711eb14a52bf3aa7c815e"}, + {file = "lxml-4.9.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28cf04a1a38e961d4a764d2940af9b941b66263ed5584392ef875ee9c1e360a3"}, + {file = "lxml-4.9.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:915ecf7d486df17cc65aeefdb680d5ad4390cc8c857cf8db3fe241ed234f856a"}, + {file = "lxml-4.9.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e564d5a771b4015f34166a05ea2165b7e283635c41b1347696117f780084b46d"}, + {file = "lxml-4.9.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c2a57755e366e0ac7ebdb3e9207f159c3bf1afed02392ab18453ce81f5ee92ee"}, + {file = "lxml-4.9.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:00f3a6f88fd5f4357844dd91a1abac5f466c6799f1b7f1da2df6665253845b11"}, + {file = "lxml-4.9.0-cp36-cp36m-win32.whl", hash = "sha256:9093a359a86650a3dbd6532c3e4d21a6f58ba2cb60d0e72db0848115d24c10ba"}, + {file = "lxml-4.9.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d1690c4d37674a5f0cdafbc5ed7e360800afcf06928c2a024c779c046891bf09"}, + {file = "lxml-4.9.0-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:6af7f51a6010748fc1bb71917318d953c9673e4ae3f6d285aaf93ef5b2eb11c1"}, + {file = "lxml-4.9.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:eabdbe04ee0a7e760fa6cd9e799d2b020d098c580ba99107d52e1e5e538b1ecb"}, + {file = "lxml-4.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:b1e22f3ee4d75ca261b6bffbf64f6f178cb194b1be3191065a09f8d98828daa9"}, + {file = "lxml-4.9.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:53b0410b220766321759f7f9066da67b1d0d4a7f6636a477984cbb1d98483955"}, + {file = "lxml-4.9.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d76da27f5e3e9bc40eba6ed7a9e985f57547e98cf20521d91215707f2fb57e0f"}, + {file = "lxml-4.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:686565ac77ff94a8965c11829af253d9e2ce3bf0d9225b1d2eb5c4d4666d0dca"}, + {file = "lxml-4.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b62d1431b4c40cda43cc986f19b8c86b1d2ae8918cfc00f4776fdf070b65c0c4"}, + {file = "lxml-4.9.0-cp37-cp37m-win32.whl", hash = "sha256:4becd16750ca5c2a1b1588269322b2cebd10c07738f336c922b658dbab96a61c"}, + {file = "lxml-4.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e35a298691b9e10e5a5631f8f0ba605b30ebe19208dc8f58b670462f53753641"}, + {file = "lxml-4.9.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:aa7447bf7c1a15ef24e2b86a277b585dd3f055e8890ac7f97374d170187daa97"}, + {file = "lxml-4.9.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:612ef8f2795a89ba3a1d4c8c1af84d8453fd53ee611aa5ad460fdd2cab426fc2"}, + {file = "lxml-4.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1bfb791a8fcdbf55d1d41b8be940393687bec0e9b12733f0796668086d1a23ff"}, + {file = "lxml-4.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:024684e0c5cfa121c22140d3a0898a3a9b2ea0f0fd2c229b6658af4bdf1155e5"}, + {file = "lxml-4.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:81c29c8741fa07ecec8ec7417c3d8d1e2f18cf5a10a280f4e1c3f8c3590228b2"}, + {file = "lxml-4.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6467626fa74f96f4d80fc6ec2555799e97fff8f36e0bfc7f67769f83e59cff40"}, + {file = "lxml-4.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9cae837b988f44925d14d048fa6a8c54f197c8b1223fd9ee9c27084f84606143"}, + {file = "lxml-4.9.0-cp38-cp38-win32.whl", hash = "sha256:5a49ad78543925e1a4196e20c9c54492afa4f1502c2a563f73097e2044c75190"}, + {file = "lxml-4.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:bb7c1b029e54e26e01b1d1d912fc21abb65650d16ea9a191d026def4ed0859ed"}, + {file = "lxml-4.9.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d0d03b9636f1326772e6854459728676354d4c7731dae9902b180e2065ba3da6"}, + {file = "lxml-4.9.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:9af19eb789d674b59a9bee5005779757aab857c40bf9cc313cb01eafac55ce55"}, + {file = "lxml-4.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:dd00d28d1ab5fa7627f5abc957f29a6338a7395b724571a8cbff8fbed83aaa82"}, + {file = "lxml-4.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:754a1dd04bff8a509a31146bd8f3a5dc8191a8694d582dd5fb71ff09f0722c22"}, + {file = "lxml-4.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7679344f2270840dc5babc9ccbedbc04f7473c1f66d4676bb01680c0db85bcc"}, + {file = "lxml-4.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d882c2f3345261e898b9f604be76b61c901fbfa4ac32e3f51d5dc1edc89da3cb"}, + {file = "lxml-4.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4e97c8fc761ad63909198acc892f34c20f37f3baa2c50a62d5ec5d7f1efc68a1"}, + {file = "lxml-4.9.0-cp39-cp39-win32.whl", hash = "sha256:cf9ec915857d260511399ab87e1e70fa13d6b2972258f8e620a3959468edfc32"}, + {file = "lxml-4.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:1254a79f8a67a3908de725caf59eae62d86738f6387b0a34b32e02abd6ae73db"}, + {file = "lxml-4.9.0-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:03370ec37fe562238d385e2c53089076dee53aabf8325cab964fdb04a9130fa0"}, + {file = "lxml-4.9.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f386def57742aacc3d864169dfce644a8c396f95aa35b41b69df53f558d56dd0"}, + {file = "lxml-4.9.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ea3f2e9eb41f973f73619e88bf7bd950b16b4c2ce73d15f24a11800ce1eaf276"}, + {file = "lxml-4.9.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2d10659e6e5c53298e6d718fd126e793285bff904bb71d7239a17218f6a197b7"}, + {file = "lxml-4.9.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fcdf70191f0d1761d190a436db06a46f05af60e1410e1507935f0332280c9268"}, + {file = "lxml-4.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:2b9c2341d96926b0d0e132e5c49ef85eb53fa92ae1c3a70f9072f3db0d32bc07"}, + {file = "lxml-4.9.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:615886ee84b6f42f1bdf1852a9669b5fe3b96b6ff27f1a7a330b67ad9911200a"}, + {file = "lxml-4.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:94f2e45b054dd759bed137b6e14ae8625495f7d90ddd23cf62c7a68f72b62656"}, + {file = "lxml-4.9.0.tar.gz", hash = "sha256:520461c36727268a989790aef08884347cd41f2d8ae855489ccf40b50321d8d7"}, +] +markupsafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] +marshmallow = [ + {file = "marshmallow-3.16.0-py3-none-any.whl", hash = "sha256:53a1e0ee69f79e1f3e80d17393b25cfc917eda52f859e8183b4af72c3390c1f1"}, + {file = "marshmallow-3.16.0.tar.gz", hash = "sha256:a762c1d8b2bcb0e5c8e964850d03f9f3bffd6a12b626f3c14b9d6b1841999af5"}, +] +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"}, +] +mccabe = [ + {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, + {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, +] +mistune = [ + {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, + {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, +] +model-pool = [ + {file = "model_pool-0.1.3-py3-none-any.whl", hash = "sha256:827846b6f44821ccdf668a9e90c0b5bda08728fb7f1df4f67e9934ed279e9310"}, + {file = "model_pool-0.1.3.tar.gz", hash = "sha256:7a61c283d15433714ff9091e33cc8ac6eff29671cede0b4dbc9f333944214189"}, +] +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"}, +] +nbclient = [ + {file = "nbclient-0.6.4-py3-none-any.whl", hash = "sha256:f251bba200a2b401a061dfd700a7a70b5772f664fb49d4a2d3e5536ec0e98c76"}, + {file = "nbclient-0.6.4.tar.gz", hash = "sha256:cdef7757cead1735d2c70cc66095b072dced8a1e6d1c7639ef90cd3e04a11f2e"}, +] +nbconvert = [ + {file = "nbconvert-6.5.0-py3-none-any.whl", hash = "sha256:c56dd0b8978a1811a5654f74c727ff16ca87dd5a43abd435a1c49b840fcd8360"}, + {file = "nbconvert-6.5.0.tar.gz", hash = "sha256:223e46e27abe8596b8aed54301fadbba433b7ffea8196a68fd7b1ff509eee99d"}, +] +nbformat = [ + {file = "nbformat-5.4.0-py3-none-any.whl", hash = "sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad"}, + {file = "nbformat-5.4.0.tar.gz", hash = "sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"}, +] +nest-asyncio = [ + {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, + {file = "nest_asyncio-1.5.5.tar.gz", hash = "sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65"}, +] +nltk = [ + {file = "nltk-3.7-py3-none-any.whl", hash = "sha256:ba3de02490308b248f9b94c8bc1ac0683e9aa2ec49ee78536d8667afb5e3eec8"}, + {file = "nltk-3.7.zip", hash = "sha256:d6507d6460cec76d70afea4242a226a7542f85c669177b9c7f562b7cf1b05502"}, +] +notebook = [ + {file = "notebook-6.4.12-py3-none-any.whl", hash = "sha256:8c07a3bb7640e371f8a609bdbb2366a1976c6a2589da8ef917f761a61e3ad8b1"}, + {file = "notebook-6.4.12.tar.gz", hash = "sha256:6268c9ec9048cff7a45405c990c29ac9ca40b0bc3ec29263d218c5e01f2b4e86"}, +] +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"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pandas = [ + {file = "pandas-1.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be67c782c4f1b1f24c2f16a157e12c2693fd510f8df18e3287c77f33d124ed07"}, + {file = "pandas-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5a206afa84ed20e07603f50d22b5f0db3fb556486d8c2462d8bc364831a4b417"}, + {file = "pandas-1.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0010771bd9223f7afe5f051eb47c4a49534345dfa144f2f5470b27189a4dd3b5"}, + {file = "pandas-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3228198333dd13c90b6434ddf61aa6d57deaca98cf7b654f4ad68a2db84f8cfe"}, + {file = "pandas-1.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b79af3a69e5175c6fa7b4e046b21a646c8b74e92c6581a9d825687d92071b51"}, + {file = "pandas-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:5586cc95692564b441f4747c47c8a9746792e87b40a4680a2feb7794defb1ce3"}, + {file = "pandas-1.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:061609334a8182ab500a90fe66d46f6f387de62d3a9cb9aa7e62e3146c712167"}, + {file = "pandas-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b8134651258bce418cb79c71adeff0a44090c98d955f6953168ba16cc285d9f7"}, + {file = "pandas-1.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:df82739e00bb6daf4bba4479a40f38c718b598a84654cbd8bb498fd6b0aa8c16"}, + {file = "pandas-1.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:385c52e85aaa8ea6a4c600a9b2821181a51f8be0aee3af6f2dcb41dafc4fc1d0"}, + {file = "pandas-1.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:295872bf1a09758aba199992c3ecde455f01caf32266d50abc1a073e828a7b9d"}, + {file = "pandas-1.4.2-cp38-cp38-win32.whl", hash = "sha256:95c1e422ced0199cf4a34385ff124b69412c4bc912011ce895582bee620dfcaa"}, + {file = "pandas-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:5c54ea4ef3823108cd4ec7fb27ccba4c3a775e0f83e39c5e17f5094cb17748bc"}, + {file = "pandas-1.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c072c7f06b9242c855ed8021ff970c0e8f8b10b35e2640c657d2a541c5950f59"}, + {file = "pandas-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f549097993744ff8c41b5e8f2f0d3cbfaabe89b4ae32c8c08ead6cc535b80139"}, + {file = "pandas-1.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ff08a14ef21d94cdf18eef7c569d66f2e24e0bc89350bcd7d243dd804e3b5eb2"}, + {file = "pandas-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c5bf555b6b0075294b73965adaafb39cf71c312e38c5935c93d78f41c19828a"}, + {file = "pandas-1.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51649ef604a945f781105a6d2ecf88db7da0f4868ac5d45c51cb66081c4d9c73"}, + {file = "pandas-1.4.2-cp39-cp39-win32.whl", hash = "sha256:d0d4f13e4be7ce89d7057a786023c461dd9370040bdb5efa0a7fe76b556867a0"}, + {file = "pandas-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:09d8be7dd9e1c4c98224c4dfe8abd60d145d934e9fc1f5f411266308ae683e6a"}, + {file = "pandas-1.4.2.tar.gz", hash = "sha256:92bc1fc585f1463ca827b45535957815b7deb218c549b7c18402c322c7549a12"}, +] +pandocfilters = [ + {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] +parso = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] +pastel = [ + {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, + {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, +] +pendulum = [ + {file = "pendulum-2.1.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:b6c352f4bd32dff1ea7066bd31ad0f71f8d8100b9ff709fb343f3b86cee43efe"}, + {file = "pendulum-2.1.2-cp27-cp27m-win_amd64.whl", hash = "sha256:318f72f62e8e23cd6660dbafe1e346950281a9aed144b5c596b2ddabc1d19739"}, + {file = "pendulum-2.1.2-cp35-cp35m-macosx_10_15_x86_64.whl", hash = "sha256:0731f0c661a3cb779d398803655494893c9f581f6488048b3fb629c2342b5394"}, + {file = "pendulum-2.1.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:3481fad1dc3f6f6738bd575a951d3c15d4b4ce7c82dce37cf8ac1483fde6e8b0"}, + {file = "pendulum-2.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9702069c694306297ed362ce7e3c1ef8404ac8ede39f9b28b7c1a7ad8c3959e3"}, + {file = "pendulum-2.1.2-cp35-cp35m-win_amd64.whl", hash = "sha256:fb53ffa0085002ddd43b6ca61a7b34f2d4d7c3ed66f931fe599e1a531b42af9b"}, + {file = "pendulum-2.1.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:c501749fdd3d6f9e726086bf0cd4437281ed47e7bca132ddb522f86a1645d360"}, + {file = "pendulum-2.1.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:c807a578a532eeb226150d5006f156632df2cc8c5693d778324b43ff8c515dd0"}, + {file = "pendulum-2.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2d1619a721df661e506eff8db8614016f0720ac171fe80dda1333ee44e684087"}, + {file = "pendulum-2.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f888f2d2909a414680a29ae74d0592758f2b9fcdee3549887779cd4055e975db"}, + {file = "pendulum-2.1.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:e95d329384717c7bf627bf27e204bc3b15c8238fa8d9d9781d93712776c14002"}, + {file = "pendulum-2.1.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4c9c689747f39d0d02a9f94fcee737b34a5773803a64a5fdb046ee9cac7442c5"}, + {file = "pendulum-2.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1245cd0075a3c6d889f581f6325dd8404aca5884dea7223a5566c38aab94642b"}, + {file = "pendulum-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:db0a40d8bcd27b4fb46676e8eb3c732c67a5a5e6bfab8927028224fbced0b40b"}, + {file = "pendulum-2.1.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f5e236e7730cab1644e1b87aca3d2ff3e375a608542e90fe25685dae46310116"}, + {file = "pendulum-2.1.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:de42ea3e2943171a9e95141f2eecf972480636e8e484ccffaf1e833929e9e052"}, + {file = "pendulum-2.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7c5ec650cb4bec4c63a89a0242cc8c3cebcec92fcfe937c417ba18277d8560be"}, + {file = "pendulum-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:33fb61601083f3eb1d15edeb45274f73c63b3c44a8524703dc143f4212bf3269"}, + {file = "pendulum-2.1.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:29c40a6f2942376185728c9a0347d7c0f07905638c83007e1d262781f1e6953a"}, + {file = "pendulum-2.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:94b1fc947bfe38579b28e1cccb36f7e28a15e841f30384b5ad6c5e31055c85d7"}, + {file = "pendulum-2.1.2.tar.gz", hash = "sha256:b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207"}, +] +pexpect = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] +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"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] +poethepoet = [ + {file = "poethepoet-0.10.0-py3-none-any.whl", hash = "sha256:6fb3021603d4421c6fcc40072bbcf150a6c52ef70ff4d3be089b8b04e015ef5a"}, + {file = "poethepoet-0.10.0.tar.gz", hash = "sha256:70b97cb194b978dc464c70793e85e6f746cddf82b84a38bfb135946ad71ae19c"}, +] +prometheus-client = [ + {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, + {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, +] +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"}, +] +protobuf = [ + {file = "protobuf-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996"}, + {file = "protobuf-3.20.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"}, + {file = "protobuf-3.20.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde"}, + {file = "protobuf-3.20.1-cp310-cp310-win32.whl", hash = "sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c"}, + {file = "protobuf-3.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7"}, + {file = "protobuf-3.20.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153"}, + {file = "protobuf-3.20.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f"}, + {file = "protobuf-3.20.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20"}, + {file = "protobuf-3.20.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531"}, + {file = "protobuf-3.20.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e"}, + {file = "protobuf-3.20.1-cp37-cp37m-win32.whl", hash = "sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c"}, + {file = "protobuf-3.20.1-cp37-cp37m-win_amd64.whl", hash = "sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067"}, + {file = "protobuf-3.20.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf"}, + {file = "protobuf-3.20.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab"}, + {file = "protobuf-3.20.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c"}, + {file = "protobuf-3.20.1-cp38-cp38-win32.whl", hash = "sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7"}, + {file = "protobuf-3.20.1-cp38-cp38-win_amd64.whl", hash = "sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739"}, + {file = "protobuf-3.20.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7"}, + {file = "protobuf-3.20.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f"}, + {file = "protobuf-3.20.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9"}, + {file = "protobuf-3.20.1-cp39-cp39-win32.whl", hash = "sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8"}, + {file = "protobuf-3.20.1-cp39-cp39-win_amd64.whl", hash = "sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91"}, + {file = "protobuf-3.20.1-py2.py3-none-any.whl", hash = "sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388"}, + {file = "protobuf-3.20.1.tar.gz", hash = "sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9"}, +] +psutil = [ + {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"}, + {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"}, + {file = "psutil-5.9.1-cp27-cp27m-win32.whl", hash = "sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc"}, + {file = "psutil-5.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2"}, + {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0"}, + {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22"}, + {file = "psutil-5.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9"}, + {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8"}, + {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de"}, + {file = "psutil-5.9.1-cp310-cp310-win32.whl", hash = "sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329"}, + {file = "psutil-5.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021"}, + {file = "psutil-5.9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237"}, + {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453"}, + {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685"}, + {file = "psutil-5.9.1-cp36-cp36m-win32.whl", hash = "sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36"}, + {file = "psutil-5.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d"}, + {file = "psutil-5.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc"}, + {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676"}, + {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4"}, + {file = "psutil-5.9.1-cp37-cp37m-win32.whl", hash = "sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b"}, + {file = "psutil-5.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680"}, + {file = "psutil-5.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1"}, + {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4"}, + {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b"}, + {file = "psutil-5.9.1-cp38-cp38-win32.whl", hash = "sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689"}, + {file = "psutil-5.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0"}, + {file = "psutil-5.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81"}, + {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e"}, + {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537"}, + {file = "psutil-5.9.1-cp39-cp39-win32.whl", hash = "sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574"}, + {file = "psutil-5.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5"}, + {file = "psutil-5.9.1.tar.gz", hash = "sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954"}, +] +ptyprocess = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] +pure-eval = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] +py = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] +pyarrow = [ + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:d5ef4372559b191cafe7db8932801eee252bfc35e983304e7d60b6954576a071"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:863be6bad6c53797129610930794a3e797cb7d41c0a30e6794a2ac0e42ce41b8"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:69b043a3fce064ebd9fbae6abc30e885680296e5bd5e6f7353e6a87966cf2ad7"}, + {file = "pyarrow-8.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51e58778fcb8829fca37fbfaea7f208d5ce7ea89ea133dd13d8ce745278ee6f0"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:15511ce2f50343f3fd5e9f7c30e4d004da9134e9597e93e9c96c3985928cbe82"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea132067ec712d1b1116a841db1c95861508862b21eddbcafefbce8e4b96b867"}, + {file = "pyarrow-8.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:deb400df8f19a90b662babceb6dd12daddda6bb357c216e558b207c0770c7654"}, + {file = "pyarrow-8.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:3bd201af6e01f475f02be88cf1f6ee9856ab98c11d8bbb6f58347c58cd07be00"}, + {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:78a6ac39cd793582998dac88ab5c1c1dd1e6503df6672f064f33a21937ec1d8d"}, + {file = "pyarrow-8.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d6f1e1040413651819074ef5b500835c6c42e6c446532a1ddef8bc5054e8dba5"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c13b2e28a91b0fbf24b483df54a8d7814c074c2623ecef40dce1fa52f6539b"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c97c8e288847e091dfbcdf8ce51160e638346f51919a9e74fe038b2e8aee62"}, + {file = "pyarrow-8.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edad25522ad509e534400d6ab98cf1872d30c31bc5e947712bfd57def7af15bb"}, + {file = "pyarrow-8.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ece333706a94c1221ced8b299042f85fd88b5db802d71be70024433ddf3aecab"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:95c7822eb37663e073da9892f3499fe28e84f3464711a3e555e0c5463fd53a19"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25a5f7c7f36df520b0b7363ba9f51c3070799d4b05d587c60c0adaba57763479"}, + {file = "pyarrow-8.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ce64bc1da3109ef5ab9e4c60316945a7239c798098a631358e9ab39f6e5529e9"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:541e7845ce5f27a861eb5b88ee165d931943347eec17b9ff1e308663531c9647"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cd86e04a899bef43e25184f4b934584861d787cf7519851a8c031803d45c6d8"}, + {file = "pyarrow-8.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba2b7aa7efb59156b87987a06f5241932914e4d5bbb74a465306b00a6c808849"}, + {file = "pyarrow-8.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:42b7982301a9ccd06e1dd4fabd2e8e5df74b93ce4c6b87b81eb9e2d86dc79871"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:1dd482ccb07c96188947ad94d7536ab696afde23ad172df8e18944ec79f55055"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:81b87b782a1366279411f7b235deab07c8c016e13f9af9f7c7b0ee564fedcc8f"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03a10daad957970e914920b793f6a49416699e791f4c827927fd4e4d892a5d16"}, + {file = "pyarrow-8.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:65c7f4cc2be195e3db09296d31a654bb6d8786deebcab00f0e2455fd109d7456"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fee786259d986f8c046100ced54d63b0c8c9f7cdb7d1bbe07dc69e0f928141c"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ea2c54e6b5ecd64e8299d2abb40770fe83a718f5ddc3825ddd5cd28e352cce1"}, + {file = "pyarrow-8.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8392b9a1e837230090fe916415ed4c3433b2ddb1a798e3f6438303c70fbabcfc"}, + {file = "pyarrow-8.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:cb06cacc19f3b426681f2f6803cc06ff481e7fe5b3a533b406bc5b2138843d4f"}, + {file = "pyarrow-8.0.0.tar.gz", hash = "sha256:4a18a211ed888f1ac0b0ebcb99e2d9a3e913a481120ee9b1fe33d3fedb945d4e"}, +] +pycodestyle = [ + {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, + {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] +pydeck = [ + {file = "pydeck-0.7.1-py2.py3-none-any.whl", hash = "sha256:7fc49b00840608068b930f9269169c7c9f3198b8b4635c934ba6d887c4e54503"}, + {file = "pydeck-0.7.1.tar.gz", hash = "sha256:907601c99f7510e16d27d7cb62bfa145216d166a2b5c9c50cfe2b65b032ebd2e"}, +] +pydocstyle = [ + {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, + {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, +] +pyflakes = [ + {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, + {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, +] +pygments = [ + {file = "Pygments-2.12.0-py3-none-any.whl", hash = "sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519"}, + {file = "Pygments-2.12.0.tar.gz", hash = "sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb"}, +] +pympler = [ + {file = "Pympler-1.0.1-py3-none-any.whl", hash = "sha256:d260dda9ae781e1eab6ea15bacb84015849833ba5555f141d2d9b7b7473b307d"}, + {file = "Pympler-1.0.1.tar.gz", hash = "sha256:993f1a3599ca3f4fcd7160c7545ad06310c9e12f70174ae7ae8d4e25f6c5d3fa"}, +] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +pyrsistent = [ + {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, + {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, + {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, + {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, +] +pytest = [ + {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"}, + {file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"}, +] +python-dateutil = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] +python-dotenv = [ + {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"}, + {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"}, +] +pytz = [ + {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, + {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, +] +pytz-deprecation-shim = [ + {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"}, + {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"}, +] +pytzdata = [ + {file = "pytzdata-2020.1-py2.py3-none-any.whl", hash = "sha256:e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f"}, + {file = "pytzdata-2020.1.tar.gz", hash = "sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540"}, +] +pywin32 = [ + {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"}, + {file = "pywin32-304-cp310-cp310-win_amd64.whl", hash = "sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48"}, + {file = "pywin32-304-cp310-cp310-win_arm64.whl", hash = "sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f"}, + {file = "pywin32-304-cp311-cp311-win32.whl", hash = "sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269"}, + {file = "pywin32-304-cp311-cp311-win_amd64.whl", hash = "sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4"}, + {file = "pywin32-304-cp311-cp311-win_arm64.whl", hash = "sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43"}, + {file = "pywin32-304-cp36-cp36m-win32.whl", hash = "sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1"}, + {file = "pywin32-304-cp36-cp36m-win_amd64.whl", hash = "sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988"}, + {file = "pywin32-304-cp37-cp37m-win32.whl", hash = "sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5"}, + {file = "pywin32-304-cp37-cp37m-win_amd64.whl", hash = "sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df"}, + {file = "pywin32-304-cp38-cp38-win32.whl", hash = "sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96"}, + {file = "pywin32-304-cp38-cp38-win_amd64.whl", hash = "sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e"}, + {file = "pywin32-304-cp39-cp39-win32.whl", hash = "sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc"}, + {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"}, +] +pywinpty = [ + {file = "pywinpty-2.0.5-cp310-none-win_amd64.whl", hash = "sha256:f86c76e2881c37e69678cbbf178109f8da1fa8584db24d58e1b9369b0276cfcb"}, + {file = "pywinpty-2.0.5-cp37-none-win_amd64.whl", hash = "sha256:ff9b52f182650cfdf3db1b264a6fe0963eb9d996a7a1fa843ac406c1e32111f8"}, + {file = "pywinpty-2.0.5-cp38-none-win_amd64.whl", hash = "sha256:651ee1467bd7eb6f64d44dbc954b7ab7d15ab6d8adacc4e13299692c67c5d5d2"}, + {file = "pywinpty-2.0.5-cp39-none-win_amd64.whl", hash = "sha256:e59a508ae78374febada3e53b5bbc90b5ad07ae68cbfd72a2e965f9793ae04f3"}, + {file = "pywinpty-2.0.5.tar.gz", hash = "sha256:e125d3f1804d8804952b13e33604ad2ca8b9b2cac92b27b521c005d1604794f8"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +pyzmq = [ + {file = "pyzmq-23.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:6d346e551fa64b89d57a4ac74b9bc66703413f02f50093e089e861999ec5cccc"}, + {file = "pyzmq-23.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9c7fb691fb07ec7ab99fd173bb0e7e0248d31bf83d484a87b917a342f63812c9"}, + {file = "pyzmq-23.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cd82cca9c489e441574804dbda2dd8e114cf3be7935b03de11dade2c9478aea6"}, + {file = "pyzmq-23.1.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28f9164fb2658b7b414fa0894c75b1a9c61375774cdc1bdb7298beb042a2cd87"}, + {file = "pyzmq-23.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53b2c1326c2e484d450932d2be739f064b7cb572faabec38386098a28516a529"}, + {file = "pyzmq-23.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425ba851a6f9892bde1da2024d82e2fe6796bd77e3391fb96665c50fe9d4c6a5"}, + {file = "pyzmq-23.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38f778a74e3889392e949326cfd0e9b2eb37dcbb2980d98fad2c51703d523db2"}, + {file = "pyzmq-23.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ddf4ad1d651e6c9234945061e1a31fe27a4be0dea21c498b87b186fadf8f5919"}, + {file = "pyzmq-23.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b08774057ae7ce8a2eb4e7d54db05358234440706ce43a85814500c5d7bd22e"}, + {file = "pyzmq-23.1.0-cp310-cp310-win32.whl", hash = "sha256:67ec63ae3c9c1fa2e077fcb42e77035e2121a04f987464bdf9945a28535d30ad"}, + {file = "pyzmq-23.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:f4c7d370badc60ac94a554bc571a46d03e39d8aacfba8006b334512e184aed59"}, + {file = "pyzmq-23.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f6c9d30888503f2f5f87d6d41f016301352dd98da4a861bd10663c3a2d99d3b5"}, + {file = "pyzmq-23.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16b832adb5d8716f46051da5533c480250bf126984ce86804db6137a3a7f931b"}, + {file = "pyzmq-23.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:da72a384a1d7e87490ca71182f3ab469ed21d847adc16b70c34faac5a3b12801"}, + {file = "pyzmq-23.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ab4b6108e69f63c917cd7ef7217c5727955b1ac90600e44a13ed5312019a014"}, + {file = "pyzmq-23.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7626e8384275a7dea6f3d1f749fb5e00299042e9c895fc3dbe24cb154909c242"}, + {file = "pyzmq-23.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:cbc1184349ca6e5112898aa7fc3efa1b1bbae24ab1edc774cfd09cbfd3b091d7"}, + {file = "pyzmq-23.1.0-cp36-cp36m-win32.whl", hash = "sha256:d977df6f7c4109ed1d96ffb6795f6af77114be606ae4556efbfc9cac725db65d"}, + {file = "pyzmq-23.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2951c29b8649f3672af9dca8ff61d86310d3664d9629788b1c66422fb13b1239"}, + {file = "pyzmq-23.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bd2a13a0f8367e50347cbac87ae230ae1953935443240238f956bf10668bead6"}, + {file = "pyzmq-23.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bd7f18bd4cf51ea8d7e54825902cf36f9d2f35cc51ef618373988d5398b8dd0"}, + {file = "pyzmq-23.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fab8a7877275060f7b303e1f91c218069a2814a616b6a5ee2d8a3737deb15915"}, + {file = "pyzmq-23.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:894be7d17228e7328cc188096c0162697211ec91761f6812fff12790cbe11c66"}, + {file = "pyzmq-23.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bba54f97578943f48f621b4a7afb8eb022370da26a88b88ccc9fee9f3ef7ce45"}, + {file = "pyzmq-23.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:eb0ae5dfda83bbce660179d7b41c1c38fd833a54d2e6d9b258c644f3b75ef94d"}, + {file = "pyzmq-23.1.0-cp37-cp37m-win32.whl", hash = "sha256:523ba7fd4d8fe75ad09c1e574a648892b75a97d0cfc8005727681053ac19555b"}, + {file = "pyzmq-23.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6cd53e861bccc0bdc4620f68fb4a91d5bcfe9f4213cf8e200fa498044d33a6dc"}, + {file = "pyzmq-23.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:81623c67cb71b93b5f7e06c9107f3781738ae86866db830c950223d87af2a235"}, + {file = "pyzmq-23.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:83f1c76068faf62c32a36dd62dc4db642c2027bbbd960f8f6345b59e9d4dc472"}, + {file = "pyzmq-23.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:312e56799410c34797417a4060a8bd37d4db1f06d1ec0c54f7c8fd81e0d90376"}, + {file = "pyzmq-23.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ff8708fabc9f9bc2949f457d39b4088c9656c4c9ac15fbbbbaafce8f6d07833"}, + {file = "pyzmq-23.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8c3abf7eab5b76ae162c4fbb16d514a947fc57fd995b64e5ea8ef8ba3b888a69"}, + {file = "pyzmq-23.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4fbcd657cda75574fd1315a4c44bd322bc2e219039fb09f146bbe6f8aef039e9"}, + {file = "pyzmq-23.1.0-cp38-cp38-win32.whl", hash = "sha256:540d7146c3cdc9bbffab039ea067f494eba24d1abe5bd33eb9f963c01e3305d4"}, + {file = "pyzmq-23.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8679bb1dd723ecbea03b1f96c98972815775fd8ec756c440a14f289c436c472e"}, + {file = "pyzmq-23.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:cfee22e072a382b92ee0709dbb8203dabd52d54258051e770d9d2a81b162530b"}, + {file = "pyzmq-23.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:68e22c5d3be451e87d47f956b397a7823bfbde2176341bc902fba30f96831d7e"}, + {file = "pyzmq-23.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:97d6c676dc97d593625d9fc48154f2ffeabb619a1e6fe8d2a5b53f97e3e9bdee"}, + {file = "pyzmq-23.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b3bc3cf200aab74f3d758586ac50295214eda496ac6a6636e0c881c5958d9123"}, + {file = "pyzmq-23.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48bbc2db041ab28eeee4a3e8ada0ed336640946dd5a8e53dbd3805f9dbdcf0dc"}, + {file = "pyzmq-23.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67a049bcf967a39993858beed873ed3405536019820922d4efacfe35ab3da51a"}, + {file = "pyzmq-23.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3955dd5bbbe02f454655296ee36a66c334c7102a29b8458223d168c0380edfd5"}, + {file = "pyzmq-23.1.0-cp39-cp39-win32.whl", hash = "sha256:8a0f240bf43c29be1bd82d77e602a61c798e9de02e5f8bb7bb414cb814f43236"}, + {file = "pyzmq-23.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7e7346b2b33dcd4a2171dd8a9870ae283eec8f6231dcbcf237a0f41e74751a50"}, + {file = "pyzmq-23.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:99dd85f0ca1db8d17a01a25c2bbb7784d25a2d39497c6beddbe96bff74194e04"}, + {file = "pyzmq-23.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:563d4281c4dbdf647d93114420151d33f895afc4c46b7115a67a0aa5347e6624"}, + {file = "pyzmq-23.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:154de02b15422af28b53d29a02de72121ba503634955017255573fc1f995143d"}, + {file = "pyzmq-23.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8757c62f7960cd26122f7aaaf86eda1e016fa85734c3777b8054dd334d7dea4d"}, + {file = "pyzmq-23.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f6c378b435a26fda8996579c0e324b108d2ca0d01b4661503a75634e5155559f"}, + {file = "pyzmq-23.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2e2ac40f7a91c740ec68d6db07ae19ea9259c959333c68bee56ab2c799a67d66"}, + {file = "pyzmq-23.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ce8ba5ed8b0a7a203922d61cff45ee6001a41a9359f04f00d055a4e988755569"}, + {file = "pyzmq-23.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:93332c6972e4c91522c4810e907f3aea067424338071161b39cacded022559df"}, + {file = "pyzmq-23.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fc32e7d7f98cac3d8d5153ed2cb583158ae3d446a6efb8e28ccb1c54a09f4169"}, + {file = "pyzmq-23.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86fb683cb9a9c0bb7476988b7957393ecdd22777d87d804442c66e62c99197f9"}, + {file = "pyzmq-23.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:057176dd3f5ccf5aad4abd662d76b6a39bbf799baaf2f39cd4fdaf2eab326e43"}, + {file = "pyzmq-23.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05ec90a8da618f2398f9d1aa20b18a9ef332992c6ac23e8c866099faad6ef0d6"}, + {file = "pyzmq-23.1.0.tar.gz", hash = "sha256:1df26aa854bdd3a8341bf199064dd6aa6e240f2eaa3c9fa8d217e5d8b868c73e"}, +] +readability-lxml = [ + {file = "readability-lxml-0.8.1.tar.gz", hash = "sha256:e51fea56b5909aaf886d307d48e79e096293255afa567b7d08bca94d25b1a4e1"}, + {file = "readability_lxml-0.8.1-py3-none-any.whl", hash = "sha256:e0d366a21b1bd6cca17de71a4e6ea16fcfaa8b0a5b4004e39e2c7eff884e6305"}, +] +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.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, +] +rfc3986 = [ + {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, + {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, +] +rich = [ + {file = "rich-12.4.4-py3-none-any.whl", hash = "sha256:d2bbd99c320a2532ac71ff6a3164867884357da3e3301f0240090c5d2fdac7ec"}, + {file = "rich-12.4.4.tar.gz", hash = "sha256:4c586de507202505346f3e32d1363eb9ed6932f0c2f63184dea88983ff4971e2"}, +] +scikit-learn = [ + {file = "scikit-learn-1.1.1.tar.gz", hash = "sha256:3e77b71e8e644f86c8b5be7f1c285ef597de4c384961389ee3e9ca36c445b256"}, + {file = "scikit_learn-1.1.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:102f51797cd8944bf44a038d106848ddf2804f2c1edf7aea45fba81a4fdc4d80"}, + {file = "scikit_learn-1.1.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:723cdb278b1fa57a55f68945bc4e501a2f12abe82f76e8d21e1806cbdbef6fc5"}, + {file = "scikit_learn-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33cf061ed0b79d647a3e4c3f6c52c412172836718a7cd4d11c1318d083300133"}, + {file = "scikit_learn-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47464c110eaa9ed9d1fe108cb403510878c3d3a40f110618d2a19b2190a3e35c"}, + {file = "scikit_learn-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:542ccd2592fe7ad31f5c85fed3a3deb3e252383960a85e4b49a629353fffaba4"}, + {file = "scikit_learn-1.1.1-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:3be10d8d325821ca366d4fe7083d87c40768f842f54371a9c908d97c45da16fc"}, + {file = "scikit_learn-1.1.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b2db720e13e697d912a87c1a51194e6fb085dc6d8323caa5ca51369ca6948f78"}, + {file = "scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e851f8874398dcd50d1e174e810e9331563d189356e945b3271c0e19ee6f4d6f"}, + {file = "scikit_learn-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b928869072366dc138762fe0929e7dc88413f8a469aebc6a64adc10a9226180c"}, + {file = "scikit_learn-1.1.1-cp38-cp38-win32.whl", hash = "sha256:e9d228ced1214d67904f26fb820c8abbea12b2889cd4aa8cda20a4ca0ed781c1"}, + {file = "scikit_learn-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:f2d5b5d6e87d482e17696a7bfa03fe9515fdfe27e462a4ad37f3d7774a5e2fd6"}, + {file = "scikit_learn-1.1.1-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:0403ad13f283e27d43b0ad875f187ec7f5d964903d92d1ed06c51439560ecea0"}, + {file = "scikit_learn-1.1.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8fe80df08f5b9cee5dd008eccc672e543976198d790c07e5337f7dfb67eaac05"}, + {file = "scikit_learn-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ff56d07b9507fbe07ca0f4e5c8f3e171f74a429f998da03e308166251316b34"}, + {file = "scikit_learn-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2dad2bfc502344b869d4a3f4aa7271b2a5f4fe41f7328f404844c51612e2c58"}, + {file = "scikit_learn-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22145b60fef02e597a8e7f061ebc7c51739215f11ce7fcd2ca9af22c31aa9f86"}, + {file = "scikit_learn-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:45c0f6ae523353f1d99b85469d746f9c497410adff5ba8b24423705b6956a86e"}, +] +scipy = [ + {file = "scipy-1.6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a15a1f3fc0abff33e792d6049161b7795909b40b97c6cc2934ed54384017ab76"}, + {file = "scipy-1.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e79570979ccdc3d165456dd62041d9556fb9733b86b4b6d818af7a0afc15f092"}, + {file = "scipy-1.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a423533c55fec61456dedee7b6ee7dce0bb6bfa395424ea374d25afa262be261"}, + {file = "scipy-1.6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:33d6b7df40d197bdd3049d64e8e680227151673465e5d85723b3b8f6b15a6ced"}, + {file = "scipy-1.6.1-cp37-cp37m-win32.whl", hash = "sha256:6725e3fbb47da428794f243864f2297462e9ee448297c93ed1dcbc44335feb78"}, + {file = "scipy-1.6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:5fa9c6530b1661f1370bcd332a1e62ca7881785cc0f80c0d559b636567fab63c"}, + {file = "scipy-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bd50daf727f7c195e26f27467c85ce653d41df4358a25b32434a50d8870fc519"}, + {file = "scipy-1.6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:f46dd15335e8a320b0fb4685f58b7471702234cba8bb3442b69a3e1dc329c345"}, + {file = "scipy-1.6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0e5b0ccf63155d90da576edd2768b66fb276446c371b73841e3503be1d63fb5d"}, + {file = "scipy-1.6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:2481efbb3740977e3c831edfd0bd9867be26387cacf24eb5e366a6a374d3d00d"}, + {file = "scipy-1.6.1-cp38-cp38-win32.whl", hash = "sha256:68cb4c424112cd4be886b4d979c5497fba190714085f46b8ae67a5e4416c32b4"}, + {file = "scipy-1.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:5f331eeed0297232d2e6eea51b54e8278ed8bb10b099f69c44e2558c090d06bf"}, + {file = "scipy-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0c8a51d33556bf70367452d4d601d1742c0e806cd0194785914daf19775f0e67"}, + {file = "scipy-1.6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:83bf7c16245c15bc58ee76c5418e46ea1811edcc2e2b03041b804e46084ab627"}, + {file = "scipy-1.6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:794e768cc5f779736593046c9714e0f3a5940bc6dcc1dba885ad64cbfb28e9f0"}, + {file = "scipy-1.6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:5da5471aed911fe7e52b86bf9ea32fb55ae93e2f0fac66c32e58897cfb02fa07"}, + {file = "scipy-1.6.1-cp39-cp39-win32.whl", hash = "sha256:8e403a337749ed40af60e537cc4d4c03febddcc56cd26e774c9b1b600a70d3e4"}, + {file = "scipy-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:a5193a098ae9f29af283dcf0041f762601faf2e595c0db1da929875b7570353f"}, + {file = "scipy-1.6.1.tar.gz", hash = "sha256:c4fceb864890b6168e79b0e714c585dbe2fd4222768ee90bc1aa0f8218691b11"}, +] +semver = [ + {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"}, + {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, +] +send2trash = [ + {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, + {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, +] +sentence-transformers = [ + {file = "sentence-transformers-2.2.0.tar.gz", hash = "sha256:c7365228b6d24e4d73cf49d409421820887ca43c86d49f264b68cfa00d761f96"}, +] +sentencepiece = [ + {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc969e6694fb27fba7cee2953f350804faf03913f25ae1ee713a7b8a1bc08018"}, + {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36e9ff61e7b67c5b7ee96733613622620b4802fc8cf188a4dbc1f355b03dde02"}, + {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e9e9fe8094ca57549d801e9a2017ac5c24108bbf485ea4f8994a72e8e96ee135"}, + {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b77d27f59d515c43b61745b8173fbe7c7b3014b14b3702a75bf1793471e7def6"}, + {file = "sentencepiece-0.1.96-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dac8c2ad02b5ebc1179c0a14cbc7d7c6f4fd73d4dd51820626402d0aefc974e"}, + {file = "sentencepiece-0.1.96-cp310-cp310-win32.whl", hash = "sha256:3028699bdb2fb0230804f3b8a617fe3af22f5c5a56416419b31a7da5e7bf83bc"}, + {file = "sentencepiece-0.1.96-cp310-cp310-win_amd64.whl", hash = "sha256:203443a7bd4295b6a3695787235abe0e77d4c369d7156a6b9a397c540a38bd27"}, + {file = "sentencepiece-0.1.96-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:e8ec5bb6777e2060e1499750c50e1b69dca5a0f80f90f2c66656c5f3e5244593"}, + {file = "sentencepiece-0.1.96-cp36-cp36m-macosx_10_6_x86_64.whl", hash = "sha256:99ea2d9db19e63a2d17d5dc64f9ace83fb9308a735be05a1aaf98eb4b496fba7"}, + {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeb090ad462833df03af1debce4ae607a2766ef861f992003ad0c56d074ab805"}, + {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8c90df663cd9759b2cf8dd29998b63140ac39e51ada2e739dc13bdac0b4f001"}, + {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26d20d713b3ba1b7a19205336afb1e93a4327c372b2f795e907b8dc2315ac92e"}, + {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5388882bb24d083f6cc8cffc5c435f3694a7772b018e06ea6fd84d1044009efb"}, + {file = "sentencepiece-0.1.96-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a92e1932ee8fd500680ccbe1bf53eb33228f4c9d6524ed6f300bcc80ac359f27"}, + {file = "sentencepiece-0.1.96-cp36-cp36m-win32.whl", hash = "sha256:bedf0355117fb4e9b1fc9fc92b4d5ee743a7d468be9f6196e3b94447710ea589"}, + {file = "sentencepiece-0.1.96-cp36-cp36m-win_amd64.whl", hash = "sha256:4997c7ccf2ae462320250314aa5709a88d8a09fa271d073458a07bebf33f8e7c"}, + {file = "sentencepiece-0.1.96-cp37-cp37m-macosx_10_6_x86_64.whl", hash = "sha256:a697257a2cd7581732d7741a8d32a06927f0311c3d277dbc47fa1043350c9d17"}, + {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff7d752a7f82d87711ec1a95c2262cb74f98be5b457f0300d81a1aefe5be2a95"}, + {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e61e0757e49c306fff78ea75d6b75773418fe22214b4a460959203be934e834"}, + {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef59ba19340dc1d002ce5713b911c0ef23c577b08f8ed57998ee3c8e62c5bf6e"}, + {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89c038da7f827a6e2ca4c73aeb4e4b25b99d981ce47dd61b04d446c8200cba1e"}, + {file = "sentencepiece-0.1.96-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d954d25a8705f972e8bfc1dea5464d7e697dd6f4ade092f1a487387e6d6c829a"}, + {file = "sentencepiece-0.1.96-cp37-cp37m-win32.whl", hash = "sha256:fd907a8f744e5337de7fc532dd800c4416b571ea47f8c3c66be10cd1bc67c925"}, + {file = "sentencepiece-0.1.96-cp37-cp37m-win_amd64.whl", hash = "sha256:335bf84d72112cc91f3c3b691d61802fc963503b7772fd8280d20368048b8f3e"}, + {file = "sentencepiece-0.1.96-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:e811984b0908c14c56de7d8226fdd494d87a7ccb75af8ac3a07423037aaafc35"}, + {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8179785883b556cd517416cdbda6244745414b00ec83132cfe1d26000971f3ae"}, + {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:466e381f0a812da8fda97a9707498cef3210ea8385a3421bcbadcb5384063969"}, + {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8cb24d8d0b2f8b7463815a59183eb81ec1d7a06e3217bed456063f3303eddfb"}, + {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e88354b61f59dfdeb41023f7be8ae31dc627c2dc2dacbc2de8b2d82a0997135c"}, + {file = "sentencepiece-0.1.96-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a336575463d75d3aac1f7e32470b8998643ccd9a73786bd726f6b0470520b6b4"}, + {file = "sentencepiece-0.1.96-cp38-cp38-win32.whl", hash = "sha256:81bb77ba3651114943b2f8f77829cf764137dff06e38f4bf7fa43efea12c7f84"}, + {file = "sentencepiece-0.1.96-cp38-cp38-win_amd64.whl", hash = "sha256:eba0471ab0bb2e07ed06d91ecf5185d402c83d194155a41d8e2aa547d187712e"}, + {file = "sentencepiece-0.1.96-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:78e18d9106c36dcca929e18fd2c412378deac661d47fa3ee25defc55eef8a215"}, + {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c24c1d9405b2148184ff27c062493d5e3be5c144575f95b5a0d7c660a515af"}, + {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:940a6999c7d3f55e9d7b194fd5e1f41a7dbed26d3519fb95333216292a39599e"}, + {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:384148cead5cdab34a4d74fe1fb6a5a8abaafed25eaa4a7698b49dd9482e4c4e"}, + {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c703e68ea192e45b65c5d5836f6980849d828a18da4189899d7150fad82dc9e"}, + {file = "sentencepiece-0.1.96-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d501713a8396193883aa526f48dc609f5f031a5df1afbafa561cf9ab492ffc76"}, + {file = "sentencepiece-0.1.96-cp39-cp39-win32.whl", hash = "sha256:b8b1dd2712f8a7de5b4c8ec912e6c041d25750bf03e1ce325cdba43bae0944ae"}, + {file = "sentencepiece-0.1.96-cp39-cp39-win_amd64.whl", hash = "sha256:d45e3f78e746aa161bc9f5a31c6a2839c512101113a4065f4d2e7a3ab8198d8c"}, + {file = "sentencepiece-0.1.96-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5513298d62fe63dd0862d08a6eb52a9aa3537006f597f2386184e3f95bb88889"}, + {file = "sentencepiece-0.1.96-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dadccb2e49244b6e64b4527d13ec14d5e094a90b41cf9b963e457e64182f1941"}, + {file = "sentencepiece-0.1.96-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48c6d13b3bfff08060c138248e85df60f6fad11135ad7a8fc2ef6005aacca839"}, + {file = "sentencepiece-0.1.96.tar.gz", hash = "sha256:9bdf097d5bd1d8ce42dfee51f6ff05f5578b96e48c6f6006aa4eff69edfa3639"}, +] +set-loglevel = [ + {file = "set_loglevel-0.1.2-py3-none-any.whl", hash = "sha256:fcfe76ccd3791511e2cb51ec11ded6cc2186a727e441a934c547a211d0fdf773"}, + {file = "set_loglevel-0.1.2.tar.gz", hash = "sha256:4da23414a798cea918801b113e17af092f13ccda96345203b14042b6d6d3a896"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +sklearn = [ + {file = "sklearn-0.0.tar.gz", hash = "sha256:e23001573aa194b834122d2b9562459bf5ae494a2d59ca6b8aa22c85a44c0e31"}, +] +smmap = [ + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, +] +sniffio = [ + {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, + {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +soupsieve = [ + {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, + {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, +] +stack-data = [ + {file = "stack_data-0.2.0-py3-none-any.whl", hash = "sha256:999762f9c3132308789affa03e9271bbbe947bf78311851f4d485d8402ed858e"}, + {file = "stack_data-0.2.0.tar.gz", hash = "sha256:45692d41bd633a9503a5195552df22b583caf16f0b27c4e58c98d88c8b648e12"}, +] +streamlit = [ + {file = "streamlit-1.10.0-py2.py3-none-any.whl", hash = "sha256:4febd37144a62177e583d6970ab50f351a2bfd4eb112cf19e38c25b12246a4db"}, + {file = "streamlit-1.10.0.tar.gz", hash = "sha256:9479d623dd4bec1fc7bd27e85d5012672351210e640889022ee7b4631c4efb2c"}, +] +streamlit-option-menu = [ + {file = "streamlit-option-menu-0.3.2.tar.gz", hash = "sha256:69d1aef6f30f83f29eda3dc9667733bc2e28cd640eb17b4b6ca315f633484c52"}, + {file = "streamlit_option_menu-0.3.2-py3-none-any.whl", hash = "sha256:0b7eae3ffdb0276c81d15750465c72957d57d2f766cb027c586d053519731178"}, +] +terminado = [ + {file = "terminado-0.15.0-py3-none-any.whl", hash = "sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197"}, + {file = "terminado-0.15.0.tar.gz", hash = "sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"}, +] +threadpoolctl = [ + {file = "threadpoolctl-3.1.0-py3-none-any.whl", hash = "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b"}, + {file = "threadpoolctl-3.1.0.tar.gz", hash = "sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380"}, +] +tinycss2 = [ + {file = "tinycss2-1.1.1-py3-none-any.whl", hash = "sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"}, + {file = "tinycss2-1.1.1.tar.gz", hash = "sha256:b2e44dd8883c360c35dd0d1b5aad0b610e5156c2cb3b33434634e539ead9d8bf"}, +] +tokenizers = [ + {file = "tokenizers-0.12.1-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:d737df0f8f26e093a82bfb106b6cfb510a0e9302d35834568e5b20b73ddc5a9c"}, + {file = "tokenizers-0.12.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f1271224acafb27639c432e1ce4e7d38eab40305ba1c546e871d5c8a32f4f195"}, + {file = "tokenizers-0.12.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdeba37c2fb44e1aec8a72af4cb369655b59ba313181b1b4b8183f08e759c49c"}, + {file = "tokenizers-0.12.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53b5f4012ce3ffddd5b00827441b80dc7a0f6b41f4fc5248ae6d36e7d3920c6d"}, + {file = "tokenizers-0.12.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5188e13fc09edfe05712ca3ae5a44e7f2b0137927b1ca210d0fad90d3e58315a"}, + {file = "tokenizers-0.12.1-cp310-cp310-win32.whl", hash = "sha256:eff5ff411f18a201eec137b7b32fcb55e0c48b372d370bd24f965f5bad471fa4"}, + {file = "tokenizers-0.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:bdbca79726fe883c696088ea163715b2f902aec638a8e24bcf9790ff8fa45019"}, + {file = "tokenizers-0.12.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:28825dade9e52ad464164020758f9d49eb7251c32b6ae146601c506a23c67c0e"}, + {file = "tokenizers-0.12.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91906d725cb84d8ee71ce05fbb155d39d494849622b4f9349e5176a8eb01c49b"}, + {file = "tokenizers-0.12.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:230f51a0a82ca7b90077eaca2415f12ff9bd144607888b9c50c2ee543452322e"}, + {file = "tokenizers-0.12.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d4339c376b695de2ad8ccaebffa75e4dc1d7857be1103d80e7925b34af8cf78"}, + {file = "tokenizers-0.12.1-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:27d93b712aa2d4346aa506ecd4ec9e94edeebeaf2d484357b482cdeffc02b5f5"}, + {file = "tokenizers-0.12.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7f4cb68dc538b52240d1986d2034eb0a6373be2ab5f0787d1be3ad1444ce71b7"}, + {file = "tokenizers-0.12.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae6c04b629ac2cd2f695739988cb70b9bd8d5e7f849f5b14c4510e942bee5770"}, + {file = "tokenizers-0.12.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6a38b2019d4807d42afeff603a119094ee00f63bea2921136524c8814e9003f8"}, + {file = "tokenizers-0.12.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fde8dccb9033fa344ffce3ee1837939a50e7a210a768f1cf2059beeafa755481"}, + {file = "tokenizers-0.12.1-cp37-cp37m-win32.whl", hash = "sha256:38625595b2fd37bfcce64ff9bfb6868c07e9a7b7f205c909d94a615ce9472287"}, + {file = "tokenizers-0.12.1-cp37-cp37m-win_amd64.whl", hash = "sha256:01abe6fbfe55e4131ca0c4c3d1a9d7ef5df424a8d536e998d2a4fc0bc57935f4"}, + {file = "tokenizers-0.12.1-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:7c5c54080a7d5c89c990e0d478e0882dbac88926d43323a3aa236492a3c9455f"}, + {file = "tokenizers-0.12.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:419d113e3bcc4fe20a313afc47af81e62906306b08fe1601e1443d747d46af1f"}, + {file = "tokenizers-0.12.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9779944559cb7ace6a8516e402895f239b0d9d3c833c67dbaec496310e7e206"}, + {file = "tokenizers-0.12.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d43de14b4469b57490dbaf136a31c266cb676fa22320f01f230af9219ae9034"}, + {file = "tokenizers-0.12.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:258873634406bd1d438c799993a5e44bbc0132ff055985c03c4fe30f702e9a33"}, + {file = "tokenizers-0.12.1-cp38-cp38-win32.whl", hash = "sha256:3f2647cc256d6a53d18b9dcd71d377828e9f8991fbcbd6fcd8ca2ceb174552b0"}, + {file = "tokenizers-0.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:62a723bd4b18bc55121f5c34cd8efd6c651f2d3b81f81dd50e5351fb65b8a617"}, + {file = "tokenizers-0.12.1-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:411ebc89228f30218ffa9d9c49d414864b0df5026a47c24820431821c4360460"}, + {file = "tokenizers-0.12.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:619728df2551bdfe6f96ff177f9ded958e7ed9e2af94c8d5ac2834d1eb06d112"}, + {file = "tokenizers-0.12.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8cea98f3f9577d1541b7bb0f7a3308a911751067e1d83e01485c9d3411bbf087"}, + {file = "tokenizers-0.12.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:664f36f0a0d409c24f2201d495161fec4d8bc93e091fbb78814eb426f29905a3"}, + {file = "tokenizers-0.12.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0bf2380ad59c50222959a9b6f231339200a826fc5cb2be09ff96d8a59f65fc5e"}, + {file = "tokenizers-0.12.1-cp39-cp39-win32.whl", hash = "sha256:6a7a106d04154c2159db6cd7d042af2e2e0e53aee432f872fe6c8be45100436a"}, + {file = "tokenizers-0.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:2158baf80cbc09259bfd6e0e0fc4597b611e7a72ad5443dad63918a90f1dd304"}, + {file = "tokenizers-0.12.1.tar.gz", hash = "sha256:070746f86efa6c873db341e55cf17bb5e7bdd5450330ca8eca542f5c3dab2c66"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +tomlkit = [ + {file = "tomlkit-0.11.0-py3-none-any.whl", hash = "sha256:0f4050db66fd445b885778900ce4dd9aea8c90c4721141fde0d6ade893820ef1"}, + {file = "tomlkit-0.11.0.tar.gz", hash = "sha256:71ceb10c0eefd8b8f11fe34e8a51ad07812cb1dc3de23247425fbc9ddc47b9dd"}, +] +toolz = [ + {file = "toolz-0.11.2-py3-none-any.whl", hash = "sha256:a5700ce83414c64514d82d60bcda8aabfde092d1c1a8663f9200c07fdcc6da8f"}, + {file = "toolz-0.11.2.tar.gz", hash = "sha256:6b312d5e15138552f1bda8a4e66c30e236c831b612b2bf0005f8a1df10a4bc33"}, +] +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"}, +] +torchvision = [ + {file = "torchvision-0.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:693656e6790b6ab21e4a6e87e81c2982bad9e455b5eb24e14bb672382ec6130f"}, + {file = "torchvision-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0be4501ca0ba1b195644c9243f49a1c49a26e52a7f37924c4239d0bf5ecbd8d"}, + {file = "torchvision-0.12.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:ebfb47adf65bf3926b990b2c4767e291f135e259e03232e0e1a30ecdb05eb087"}, + {file = "torchvision-0.12.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:9771231639afb5973cdaea1d449b451e2982e1ef5410ca67bbdc2b465565573a"}, + {file = "torchvision-0.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:894dacdc64b6e35e3f330722db51c76f4de016c7bf7bd79cf02ed2f4c106e625"}, + {file = "torchvision-0.12.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:36dfdf6451fe3072ab15118982853b848896c0fd3b26cb8135e1e7981dbb0916"}, + {file = "torchvision-0.12.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:aac76d52c5ce4229cb0eaebb762f3391fa736565eb35a4184fa0f7be30b705cd"}, + {file = "torchvision-0.12.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:926666f0b893dce6619759c19b0dd3884af7a9d7022b10395653659d28e43c48"}, + {file = "torchvision-0.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c225f55c1bfce027a03f4ca46ddb9559c83f8087c2880bed3261a76c49bb7996"}, + {file = "torchvision-0.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d1ccb53836ba886320dcda12d00ee8b5f8f38b6c36d7906f141d25778cf74104"}, + {file = "torchvision-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9f42420f7f0b29cd3d61776df3157827257a0cf16b2c02776dc16c96abb1256d"}, + {file = "torchvision-0.12.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9017248c7e526c8cdcaaab8cf41d904a520a409d707398189a06d0757901d235"}, + {file = "torchvision-0.12.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0744902f2265d4c3e83c44a06b567df312e4a9faf8c92620016c7bed7056b5a7"}, + {file = "torchvision-0.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:a91db01496932350bf9c0ee8607ac8ef31c3ebfdaedefe5c5cda0515317f8b8e"}, + {file = "torchvision-0.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24d03fcaa28004c64a24124ac4a894c50f5948c8eb290e398d6c76fff2bc678f"}, + {file = "torchvision-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69d82f47b67bad6ddcbb87833ba5950a6c271ba97baae4c0955610071bf034f5"}, + {file = "torchvision-0.12.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:49ed7886b93b80c9733462edd06a07f8d4c6ea4d5bd2894e7268f7a3774f4f7d"}, + {file = "torchvision-0.12.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b93a767f44e3933cb3b01a6fe9727db54590f57b7dac09d5aaf15966c6c151dd"}, + {file = "torchvision-0.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:edab05f7ba9f648c00435b384ffdbd7bde79a3b8ea893813fb50f6ccf28b1e76"}, +] +tornado = [ + {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"}, + {file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"}, + {file = "tornado-6.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675"}, + {file = "tornado-6.1-cp35-cp35m-win32.whl", hash = "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5"}, + {file = "tornado-6.1-cp35-cp35m-win_amd64.whl", hash = "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68"}, + {file = "tornado-6.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb"}, + {file = "tornado-6.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c"}, + {file = "tornado-6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085"}, + {file = "tornado-6.1-cp36-cp36m-win32.whl", hash = "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575"}, + {file = "tornado-6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795"}, + {file = "tornado-6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f"}, + {file = "tornado-6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102"}, + {file = "tornado-6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d"}, + {file = "tornado-6.1-cp37-cp37m-win32.whl", hash = "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df"}, + {file = "tornado-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37"}, + {file = "tornado-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95"}, + {file = "tornado-6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a"}, + {file = "tornado-6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5"}, + {file = "tornado-6.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288"}, + {file = "tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f"}, + {file = "tornado-6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6"}, + {file = "tornado-6.1-cp38-cp38-win32.whl", hash = "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326"}, + {file = "tornado-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c"}, + {file = "tornado-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5"}, + {file = "tornado-6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe"}, + {file = "tornado-6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea"}, + {file = "tornado-6.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2"}, + {file = "tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0"}, + {file = "tornado-6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd"}, + {file = "tornado-6.1-cp39-cp39-win32.whl", hash = "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c"}, + {file = "tornado-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4"}, + {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, +] +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"}, +] +transformers = [ + {file = "transformers-4.19.2-py3-none-any.whl", hash = "sha256:1416315b7c5ff1f56d3915f416b67aa254a9907fbb73ef7f7bffc9210446b5fa"}, + {file = "transformers-4.19.2.tar.gz", hash = "sha256:e19a4ff07458eda143c738e5259caf48449fcf078a63d6b1bd1aa806543440a3"}, +] +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"}, +] +tzdata = [ + {file = "tzdata-2022.1-py2.py3-none-any.whl", hash = "sha256:238e70234214138ed7b4e8a0fab0e5e13872edab3be586ab8198c407620e2ab9"}, + {file = "tzdata-2022.1.tar.gz", hash = "sha256:8b536a8ec63dc0751342b3984193a3118f8fca2afe25752bb9b7fffd398552d3"}, +] +tzlocal = [ + {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"}, + {file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"}, +] +urllib3 = [ + {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, + {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, +] +validators = [ + {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, +] +watchdog = [ + {file = "watchdog-2.1.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:676263bee67b165f16b05abc52acc7a94feac5b5ab2449b491f1a97638a79277"}, + {file = "watchdog-2.1.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aa68d2d9a89d686fae99d28a6edf3b18595e78f5adf4f5c18fbfda549ac0f20c"}, + {file = "watchdog-2.1.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e2e51c53666850c3ecffe9d265fc5d7351db644de17b15e9c685dd3cdcd6f97"}, + {file = "watchdog-2.1.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7721ac736170b191c50806f43357407138c6748e4eb3e69b071397f7f7aaeedd"}, + {file = "watchdog-2.1.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ce7376aed3da5fd777483fe5ebc8475a440c6d18f23998024f832134b2938e7b"}, + {file = "watchdog-2.1.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f9ee4c6bf3a1b2ed6be90a2d78f3f4bbd8105b6390c04a86eb48ed67bbfa0b0b"}, + {file = "watchdog-2.1.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:68dbe75e0fa1ba4d73ab3f8e67b21770fbed0651d32ce515cd38919a26873266"}, + {file = "watchdog-2.1.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0c520009b8cce79099237d810aaa19bc920941c268578436b62013b2f0102320"}, + {file = "watchdog-2.1.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efcc8cbc1b43902571b3dce7ef53003f5b97fe4f275fe0489565fc6e2ebe3314"}, + {file = "watchdog-2.1.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:746e4c197ec1083581bb1f64d07d1136accf03437badb5ff8fcb862565c193b2"}, + {file = "watchdog-2.1.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ae17b6be788fb8e4d8753d8d599de948f0275a232416e16436363c682c6f850"}, + {file = "watchdog-2.1.8-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ddde157dc1447d8130cb5b8df102fad845916fe4335e3d3c3f44c16565becbb7"}, + {file = "watchdog-2.1.8-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4978db33fc0934c92013ee163a9db158ec216099b69fce5aec790aba704da412"}, + {file = "watchdog-2.1.8-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b962de4d7d92ff78fb2dbc6a0cb292a679dea879a0eb5568911484d56545b153"}, + {file = "watchdog-2.1.8-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1e5d0fdfaa265c29dc12621913a76ae99656cf7587d03950dfeb3595e5a26102"}, + {file = "watchdog-2.1.8-py3-none-manylinux2014_armv7l.whl", hash = "sha256:036ed15f7cd656351bf4e17244447be0a09a61aaa92014332d50719fc5973bc0"}, + {file = "watchdog-2.1.8-py3-none-manylinux2014_i686.whl", hash = "sha256:2962628a8777650703e8f6f2593065884c602df7bae95759b2df267bd89b2ef5"}, + {file = "watchdog-2.1.8-py3-none-manylinux2014_ppc64.whl", hash = "sha256:156ec3a94695ea68cfb83454b98754af6e276031ba1ae7ae724dc6bf8973b92a"}, + {file = "watchdog-2.1.8-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:47598fe6713fc1fee86b1ca85c9cbe77e9b72d002d6adeab9c3b608f8a5ead10"}, + {file = "watchdog-2.1.8-py3-none-manylinux2014_s390x.whl", hash = "sha256:fed4de6e45a4f16e4046ea00917b4fe1700b97244e5d114f594b4a1b9de6bed8"}, + {file = "watchdog-2.1.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:24dedcc3ce75e150f2a1d704661f6879764461a481ba15a57dc80543de46021c"}, + {file = "watchdog-2.1.8-py3-none-win32.whl", hash = "sha256:6ddf67bc9f413791072e3afb466e46cc72c6799ba73dea18439b412e8f2e3257"}, + {file = "watchdog-2.1.8-py3-none-win_amd64.whl", hash = "sha256:88ef3e8640ef0a64b7ad7394b0f23384f58ac19dd759da7eaa9bc04b2898943f"}, + {file = "watchdog-2.1.8-py3-none-win_ia64.whl", hash = "sha256:0fb60c7d31474b21acba54079ce9ff0136411183e9a591369417cddb1d7d00d7"}, + {file = "watchdog-2.1.8.tar.gz", hash = "sha256:6d03149126864abd32715d4e9267d2754cede25a69052901399356ad3bc5ecff"}, +] +wcwidth = [ + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, +] +webencodings = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] +widgetsnbextension = [ + {file = "widgetsnbextension-3.6.0-py2.py3-none-any.whl", hash = "sha256:4fd321cad39fdcf8a8e248a657202d42917ada8e8ed5dd3f60f073e0d54ceabd"}, + {file = "widgetsnbextension-3.6.0.tar.gz", hash = "sha256:e84a7a9fcb9baf3d57106e184a7389a8f8eb935bf741a5eb9d60aa18cc029a80"}, +] +win32-setctime = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] +zipp = [ + {file = "zipp-3.8.0-py3-none-any.whl", hash = "sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099"}, + {file = "zipp-3.8.0.tar.gz", hash = "sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad"}, +] diff --git a/pyproject.toml b/pyproject.toml index 6268a0516877dc52b6a8e389d3baaa754f05292a..e32c010d87823948da3b8a2a96baea4bcd4f0b3b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "mlbee" -version = "0.1.0-alpha.0" +version = "0.1.0-alpha.1" description = "mlbee" authors = ["ffreemt"] license = "MIT" @@ -13,6 +13,19 @@ logzero = "^1.7.0" set-loglevel = "^0.1.2" icecream = "^2.1.1" install = "^1.3.5" +model-pool = "^0.1.3" +tqdm = "^4.64.0" +about-time = "^3.1.1" +more-itertools = "^8.13.0" +cmat2aset = "^0.1.0-alpha.7" +aset2pairs = "^0.1.0" +pendulum = "^2.1.2" +streamlit = "^1.10.0" +loguru = "^0.6.0" +streamlit-option-menu = "^0.3.2" +httpx = "^0.23.0" +html2text = "^2020.1.16" +readability-lxml = "^0.8.1" [tool.poe.executor] type = "poetry" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..168aca8042734b43dc23cdf70373dc2c630e1cc6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,50 @@ +about-time==3.1.1 +alive-progress==2.4.1; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.7.9" and python_full_version < "4.0.0" +aset2pairs==0.1.0; python_full_version >= "3.8.3" and python_full_version < "4.0.0" +asttokens==2.0.5; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version < "4.0" +certifi==2022.5.18.1; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.6" +charset-normalizer==2.0.12; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3" +click==8.1.3; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.7" +cmat2aset==0.1.0a7; python_full_version >= "3.8.3" and python_version < "4.0" +colorama==0.4.4; python_full_version >= "3.8.3" and sys_platform == "win32" and platform_system == "Windows" and python_full_version < "4.0.0" and python_version < "4.0" and python_version >= "3.7" +environs==9.5.0; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version >= "3.6" +executing==0.8.3; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version < "4.0" +filelock==3.7.1; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.7" +grapheme==0.6.0; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.7.9" and python_full_version < "4.0.0" +huggingface-hub==0.4.0; python_full_version >= "3.7.9" and python_full_version < "4.0.0" +icecream==2.1.2 +idna==3.3; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.5" +install==1.3.5; python_version >= "3.5" +joblib==1.1.0; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version >= "3.8" and python_version < "4.0" +logzero==1.7.0 +marshmallow==3.16.0; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version >= "3.7" +model-pool==0.1.3; python_full_version >= "3.7.9" and python_full_version < "4.0.0" +more-itertools==8.13.0; python_version >= "3.5" +nltk==3.7; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.7" +numpy==1.22.4 +packaging==21.3; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version >= "3.7" +pandas==1.4.2; python_full_version >= "3.8.3" and python_version < "4.0" and python_version >= "3.8" +pillow==9.1.1; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.7" +pygments==2.12.0; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version < "4.0" and python_version >= "3.6" +pyparsing==3.0.9; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version >= "3.7" +python-dateutil==2.8.2; python_full_version >= "3.8.3" and python_version < "4.0" and python_version >= "3.8" +python-dotenv==0.20.0; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version >= "3.6" +pytz==2022.1; python_full_version >= "3.8.3" and python_version < "4.0" and python_version >= "3.8" +pyyaml==6.0; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.6" +regex==2022.6.2; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.7" +requests==2.27.1; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.7" +scikit-learn==1.1.1; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version >= "3.8" and python_version < "4.0" +scipy==1.6.1; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version >= "3.8" and python_version < "4.0" +sentence-transformers==2.2.0; python_full_version >= "3.7.9" and python_full_version < "4.0.0" +sentencepiece==0.1.96; python_full_version >= "3.7.9" and python_full_version < "4.0.0" +set-loglevel==0.1.2; python_full_version >= "3.8.3" and python_full_version < "4.0.0" +six==1.16.0; python_full_version >= "3.8.3" and python_version < "4.0" and python_version >= "3.8" +sklearn==0.0; python_full_version >= "3.8.3" and python_version < "4.0" +threadpoolctl==3.1.0; python_full_version >= "3.8.3" and python_full_version < "4.0.0" and python_version >= "3.8" and python_version < "4.0" +tokenizers==0.12.1; python_full_version >= "3.7.9" and python_full_version < "4.0.0" +torch==1.11.0; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.7" +torchvision==0.12.0; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.7" +tqdm==4.64.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") +transformers==4.19.2; python_full_version >= "3.7.9" and python_full_version < "4.0.0" +typing-extensions==4.2.0; python_full_version >= "3.7.9" and python_full_version < "4.0.0" and python_version >= "3.7" +urllib3==1.26.9; python_full_version >= "3.7.9" and python_version < "4" and python_full_version < "4.0.0" diff --git a/run-flake8.sh b/run-flake8.sh new file mode 100644 index 0000000000000000000000000000000000000000..df75374dfaf8fc649029874fc8ff7668615d1056 --- /dev/null +++ b/run-flake8.sh @@ -0,0 +1 @@ +flake8 --ignore F401,F841,E501 app_mlbee.py mlbee diff --git a/run-nodemon-streamlit-run-app_mlbee.sh b/run-nodemon-streamlit-run-app_mlbee.sh new file mode 100644 index 0000000000000000000000000000000000000000..9a4c5955c6e2fc5e10b9731dcf8268d50d86df85 --- /dev/null +++ b/run-nodemon-streamlit-run-app_mlbee.sh @@ -0,0 +1 @@ +nodemon -w app_mlbee.py -x python -m streamlit run app_mlbee.py diff --git a/tests/test_gen_cmat_aset2pairs.py b/tests/test_gen_cmat_aset2pairs.py new file mode 100644 index 0000000000000000000000000000000000000000..be3e28ed4ffc85e0e9f9ce13d8d817c7236b1ff3 --- /dev/null +++ b/tests/test_gen_cmat_aset2pairs.py @@ -0,0 +1,57 @@ +"""Test gen_cmat. + +king +In [21]: len(de) +Out[21]: 51 + +In [22]: len(en) +Out[22]: 51 + +In [23]: len(" ".join(en)) +Out[23]: 11208 + +In [24]: len(" ".join(de)) +Out[24]: 13532 + +In [25]: %time en_vec = model_s.encode(en) +CPU times: user 22 s, sys: 436 ms, total: 22.4 s +Wall time: 22.4 s + +In [26]: %time de_vec = model_s.encode(de) +CPU times: user 22.8 s, sys: 311 ms, total: 23.1 s +Wall time: 23.1 s + +en1 = loadparas("data/sternstunden04-en.txt") +en2 = loadparas("data/sternstunden04-de.txt") + +len(en1) # 30 + +len(" ".join(en1)) # 29718 +len(" ".join(en2)) # 31478 +""" +from cmat2aset import cmat2aset +from aset2pairs import aset2pairs +from mlbee.gen_cmat import gen_cmat +from mlbee.loadtext import loadparas + +paras1 = loadparas("data/sternstunden04-en.txt") +paras2 = loadparas("data/sternstunden04-de.txt") +cmat = gen_cmat(paras1, paras2) + + +def test_gen_cmat_sternstunden04(): + """Test gen_cmat sternstunden04.""" + len1, len2 = len(paras1), len(paras2) + + # note the order + assert cmat.shape == (len2, len1) + + +def test_aset2pairs(): + """Test aset2pairs.""" + aset = cmat2aset(cmat) + pairs = aset2pairs(paras1, paras2, aset) + + assert "Marseillaise" in pairs[2][0] + assert "Marseillaise" in pairs[2][1] + assert pairs[2][2] > 0.95 diff --git a/tests/test_time.py- b/tests/test_time.py- new file mode 100644 index 0000000000000000000000000000000000000000..53d5ad6ed4349f7c56f03d706155f3e525a6b380 --- /dev/null +++ b/tests/test_time.py- @@ -0,0 +1,37 @@ +""" +king +In [21]: len(de) +Out[21]: 51 + +In [22]: len(en) +Out[22]: 51 + +In [23]: len(" ".join(en)) +Out[23]: 11208 + +In [24]: len(" ".join(de)) +Out[24]: 13532 + +In [25]: %time en_vec = model_s.encode(en) +CPU times: user 22 s, sys: 436 ms, total: 22.4 s +Wall time: 22.4 s + +In [26]: %time de_vec = model_s.encode(de) +CPU times: user 22.8 s, sys: 311 ms, total: 23.1 s +Wall time: 23.1 s .5s/para +# .43-.45/paras + +en1 = loadparas("data/sternstunden04-en.txt") +en2 = loadparas("data/sternstunden04-de.txt") + +len(en1) # 30 + +len(" ".join(en1)) # 29718 990.6/para + len(" ".join(en1).split()) # 29718 990.6/para +len(" ".join(en2)) # 5148 words 171.6words/para +len(" ".join(en1)) # 29718 word.36words/para + +%time en_vec1 = model_s.encode(en1) # 19 s .66s/para +%time en_vec2 = model_s.encode(en2) # 0.56/para +%time en_vec12 = model_s.encode(en1 + en2) # 38/60 .63s/paras +""" \ No newline at end of file