From da7e881311ea967224a29d4770ab8198dbd34ad8 Mon Sep 17 00:00:00 2001 From: John Ahlroos Date: Tue, 31 Mar 2026 19:09:37 +0200 Subject: [PATCH] Initial import --- .dockerignore | 7 + .gitea/workflows/build.yaml | 72 + .gitignore | 6 + .streamlit/config.toml | 23 + Dockerfile | 34 + README.md | 36 + alembic.ini | 36 + app/enums.py | 40 + app/logger.py | 8 + app/pages/counters.py | 96 + app/pages/stats.py | 44 + app/sql.py | 229 ++ app/streamlit_app.py | 20 + app/styles.py | 25 + css/theme.css | 56 + data/.keep | 0 docs/counters.png | Bin 0 -> 77817 bytes docs/statistics.png | Bin 0 -> 38447 bytes entrypoint.sh | 21 + migrations/env.py | 37 + migrations/script.py.mako | 28 + .../versions/20260405181328_initial_.py | 63 + poetry.lock | 2083 +++++++++++++++++ pyproject.toml | 26 + 24 files changed, 2990 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitea/workflows/build.yaml create mode 100644 .gitignore create mode 100644 .streamlit/config.toml create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 alembic.ini create mode 100644 app/enums.py create mode 100644 app/logger.py create mode 100644 app/pages/counters.py create mode 100644 app/pages/stats.py create mode 100644 app/sql.py create mode 100644 app/streamlit_app.py create mode 100644 app/styles.py create mode 100644 css/theme.css create mode 100644 data/.keep create mode 100644 docs/counters.png create mode 100644 docs/statistics.png create mode 100755 entrypoint.sh create mode 100644 migrations/env.py create mode 100644 migrations/script.py.mako create mode 100644 migrations/versions/20260405181328_initial_.py create mode 100644 poetry.lock create mode 100644 pyproject.toml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..1578cef --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.git +.venv +.ollamassist +**/*.db +Dockerfile +**/__pycache__/** +.streamlit/secrets.toml \ No newline at end of file diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..51c88e3 --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,72 @@ +name: Build & Release +on: + push: + tags: + - '[0-9]+.[0-9]+.[0-9]+' + +env: + ENDPOINT: services-3 + STACK: misc + IMAGE: john/daily-counter + TAG: ${{ gitea.ref_name }} + CACHE_NAME: cache-python-dependencies-daily-counter + RUNNER_TOOL_CACHE: /toolcache + +jobs: + + build-docker-image: + runs-on: node20 + container: + image: catthehacker/ubuntu:act-24.04 + steps: + - name: Checkout Docker file + uses: actions/checkout@v4 + with: + ssh-key: ${{ secrets.SSH_JOHN_PRIVATE_KEY }} + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to Devsoap Container Registry + uses: docker/login-action@v2 + with: + registry: ${{ secrets.DOCKER_REGISTRY }} + username: ${{ secrets.DOCKER_REGISTRY_USER }} + password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }} + scope: ${{secrets.DOCKER_REGISTRY}}/${{env.IMAGE}}@push + logout: true + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile + push: true + build-args: | + version=${{env.TAG}} + tags: | + ${{secrets.DOCKER_REGISTRY}}/${{env.IMAGE}}:${{env.TAG}} + ${{secrets.DOCKER_REGISTRY}}/${{env.IMAGE}}:latest + + deploy-to-production: + if: ${{ always() && needs.build-docker-image.result == 'success' }} + needs: build-docker-image + runs-on: node20 + steps: + - name: Checkout infrastructure config + run: | + git clone -v --depth=1 ${{ env.REPOSITORY_URL }} infra + env: + REPOSITORY_URL: ${{ env.GIT_REPO_USER }}@${{ env.GIT_REPO_INTERNAL }}:${{ env.DEVSOAP_INFRA_GIT_REPO }} + - name: Setup Git config + working-directory: infra + run: | + git config user.email "code@devsoap.com" + git config user.name "Devsoap Code CI/CD" + - name: Update image version + working-directory: infra + run: | + sed -i -r "s|/$IMAGE:(.*?)|/$IMAGE:$TAG|g" $ENDPOINT/$STACK/docker-compose.yml + git diff -U0 + - name: Push changes + working-directory: infra + run: | + git commit -am "Updated $ENDPOINT/$STACK/$IMAGE to $TAG" + git push origin master \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4613a3d --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.idea +.ollamassist +.venv +**/*.db +**/__pycache__/** +.streamlit/secrets.toml \ No newline at end of file diff --git a/.streamlit/config.toml b/.streamlit/config.toml new file mode 100644 index 0000000..627038c --- /dev/null +++ b/.streamlit/config.toml @@ -0,0 +1,23 @@ +[server] +port = 8501 +address = "0.0.0.0" + +[browser] +gatherUsageStats = false + +[logger] +level = "info" + +[client] +toolbarMode = "viewer" +showSidebarNavigation = false + +[theme] +base="light" +backgroundColor = "#eee" +secondaryBackgroundColor = "#fff" +primaryColor = "black" +baseRadius = "none" + +[runner] +magicEnabled = false \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..343d393 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +ARG PYTHON_VERSION=3.13 +FROM python:${PYTHON_VERSION}-alpine +LABEL author="John Ahlroos " +ARG POETRY_VERSION=2.3.3 +ENV PYTHONFAULTHANDLER=1 \ + PYTHONUNBUFFERED=1 \ + PYTHONHASHSEED=random \ + PIP_NO_CACHE_DIR=off \ + PIP_DISABLE_PIP_VERSION_CHECK=on \ + PIP_DEFAULT_TIMEOUT=100 \ + POETRY_NO_INTERACTION=1 \ + POETRY_VIRTUALENVS_CREATE=false \ + POETRY_CACHE_DIR='/var/cache/pypoetry' \ + POETRY_HOME='/usr/local' + +RUN apk add --no-cache tini +RUN pip install -Iv --no-cache-dir "poetry==${POETRY_VERSION}" + +WORKDIR /app + +COPY poetry.lock pyproject.toml ./ +RUN poetry install --only=main --no-interaction --no-ansi + +COPY . /app +VOLUME /app/data + +RUN touch .streamlit/secrets.toml \ + && toml add_section --toml-path='.streamlit/secrets.toml' 'connections.sqlite' \ + && toml set --toml-path='.streamlit/secrets.toml' 'connections.sqlite.type' 'sql' \ + && toml set --toml-path='.streamlit/secrets.toml' 'connections.sqlite.url' 'sqlite:///data/daily-counter.db' + +HEALTHCHECK --interval=60s --retries=5 CMD wget -qO- http://127.0.0.1:8501/_stcore/health || exit 1 +ENTRYPOINT ["/sbin/tini", "--"] +CMD ["/app/entrypoint.sh"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..94065c1 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +markdown +# Daily Habit Counter App + +This is a simple habit tracking web app that allows the user to track occurrences of events in a day. + +## Screenshots + +| | | +|:----------------------:|:------------------------:| +| ![](docs/counters.png) | ![](docs/statistics.png) | +| Main Page | Statistics page | + +## Features + +* Create any numbers of counters for tracking events +* Color encode every counter +* View statistics about how often each event occurs + +## Run project (Locally with Python ) + +**Pre-requisites:** [Pip](https://pypi.org/project/pip/) and [Poetry](https://pypi.org/project/poetry/) + +1. Clone this repository +2. Install Poetry ``pip install -Iv --no-cache-dir "poetry==2.3.3"`` +3. Install project dependencies ``poetry install`` +4. Run database migrations ``alembic upgrade head`` +5. Run project ``streamlit run app`` +6. Project will be running at http://localhost:8501 + +## Run project (Locally with Docker) + +**Pre-requisites:** [Docker](https://www.docker.com) + +1. Clone this repository +2. Build Docker Image ``docker build -t habit-counter:latest .`` +3. Run Docker container ``docker run habit-counter`` or to preserve the data ``docker run -v ./data:/app/data habit-counter`` \ No newline at end of file diff --git a/alembic.ini b/alembic.ini new file mode 100644 index 0000000..a69ebc5 --- /dev/null +++ b/alembic.ini @@ -0,0 +1,36 @@ +[alembic] +sqlalchemy.url = sqlite:///data/daily-counter.db + +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARNING +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARNING +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S \ No newline at end of file diff --git a/app/enums.py b/app/enums.py new file mode 100644 index 0000000..905e470 --- /dev/null +++ b/app/enums.py @@ -0,0 +1,40 @@ +from enum import IntEnum, Enum + + +class CounterType(IntEnum): + SIMPLE = 1 + DAILY = 2 + WEEKLY = 3 + MONTHLY = 4 + YEARLY = 5 + + def current_unit_text(self): + match self: + case CounterType.DAILY: + return 'today' + case CounterType.WEEKLY: + return 'this week' + case CounterType.MONTHLY: + return 'this month' + case CounterType.YEARLY: + return 'this year' + case _: + return 'times' + + def previous_unit_text(self): + match self: + case CounterType.DAILY: + return 'yesterday' + case CounterType.WEEKLY: + return 'last week' + case CounterType.MONTHLY: + return 'last month' + case CounterType.YEARLY: + return 'last year' + case _: + return 'times' + + +class Tabs(Enum): + COUNTERS ="Counters" + STATISTICS = "Stats" \ No newline at end of file diff --git a/app/logger.py b/app/logger.py new file mode 100644 index 0000000..78c409b --- /dev/null +++ b/app/logger.py @@ -0,0 +1,8 @@ +import logging +import sys + +def init_logger() -> None: + logging.basicConfig( + level=logging.INFO, + format="%(asctime)s %(levelname)s %(name)s: %(message)s", + stream=sys.stdout) \ No newline at end of file diff --git a/app/pages/counters.py b/app/pages/counters.py new file mode 100644 index 0000000..fe0808d --- /dev/null +++ b/app/pages/counters.py @@ -0,0 +1,96 @@ +import streamlit as st + +import sql +from enums import CounterType + +@st.dialog("Add New Counter", icon=":material/add_box:") +def _add_counter(): + colors = sql.get_colors(1) + with st.form(key="add_counter", border=False, clear_on_submit=True): + title = st.text_input("Title:") + counter_type_name = st.selectbox("Type", options=[e.name for e in CounterType]) + color = st.radio("Color", + key="color-selector", + width="stretch", + options=[colors[key][0] for key in colors], + format_func=lambda c: f"#{c}") + with st.container(horizontal=True, width="stretch", horizontal_alignment="center"): + if st.form_submit_button(label="Create", icon=":material/save:"): + sql.create_counter(title, CounterType[counter_type_name], color) + st.rerun() + + +@st.dialog("Remove Counter", icon=":material/delete:") +def _remove_counter(counter_id:int): + with st.form(key="remove_counter", border=False, clear_on_submit=True): + st.subheader("Are you sure?") + with st.container(horizontal=True, width="stretch", horizontal_alignment="center"): + if st.form_submit_button("Confirm", icon=":material/delete:"): + sql.remove_counter(counter_id) + st.rerun() + +df = sql.get_counters() + +with st.container(key="counter-table"): + for counter_id, name, counter_type_str, color in zip(df['id'], df['name'], df['type'], df['color']): + with st.container(width="stretch", key=f"counter_{counter_id}"): + with st.container(horizontal=True, width="stretch"): + st.header(f":material/calendar_clock: {name}", width="stretch") + + if st.button("", icon=":material/exposure_plus_1:", key=f"increment_counter_{counter_id}"): + sql.increment_counter(counter_id) + st.rerun() + + if st.button("", icon=":material/delete_forever:", key=f"remove_counter_{counter_id}"): + _remove_counter(counter_id) + + with st.container(horizontal=True, width="stretch"): + + counter_type = CounterType(counter_type_str) + stats_current_unit = counter_type.current_unit_text() + stats_prev_unit = counter_type.previous_unit_text() + match counter_type: + case CounterType.DAILY.value | CounterType.SIMPLE.value: + stats = sql.get_daily_analytics(counter_id) + stats_current = stats.iloc[0]["count"] + stats_prev = stats.iloc[1]["count"] + + case CounterType.WEEKLY.value: + stats = sql.get_weekly_analytics(counter_id) + stats_current = stats.iloc[-1]["count"] + stats_prev = stats.iloc[-2]["count"] + + case CounterType.MONTHLY.value: + stats = sql.get_monthly_analytics(counter_id) + stats_current = stats.iloc[-1]["count"] + stats_prev = stats.iloc[-2]["count"] + + case CounterType.YEARLY.value: + stats = sql.get_yearly_analytics(counter_id) + stats_current = stats.iloc[-1]["count"] + stats_prev = stats.iloc[-2]["count"] + + if counter_type is CounterType.SIMPLE.value: + st.markdown(f"**{stats_current} {stats_current_unit}**") + else: + st.markdown(f""" + **{stats_current} {stats_current_unit}** + *{stats_prev} {stats_prev_unit}* + """) + + with st.container(horizontal=True, width="stretch", horizontal_alignment="right"): + st.page_link("pages/stats.py", icon=":material/bar_chart:", icon_position="right", label="", query_params={"counter_id": str(counter_id)}) + + st.html(f""" + + """) + +if st.button("Add Counter", width="stretch", icon=":material/add_box:"): + _add_counter() + + + diff --git a/app/pages/stats.py b/app/pages/stats.py new file mode 100644 index 0000000..3f9d889 --- /dev/null +++ b/app/pages/stats.py @@ -0,0 +1,44 @@ +import logging +import streamlit as st +import json +import sql +import pandas as pd + +from enums import CounterType + +logger = logging.getLogger(__name__) + +if "counter_id" in st.query_params.keys(): + counter_id = int(st.query_params["counter_id"]) + df = sql.get_counter(counter_id) + + st.header('Counter: ' + df['name']) + + color ='#' + df['color'] + match df['type']: + case CounterType.DAILY.value | CounterType.SIMPLE.value: + st.bar_chart(sql.get_daily_analytics(int(df['id'])), x="date", y="count", color=color) + case CounterType.WEEKLY.value: + st.bar_chart(sql.get_weekly_analytics(int(df['id'])), x="week", y="count", color=color) + case CounterType.MONTHLY.value: + st.bar_chart(sql.get_monthly_analytics(int(df['id'])), x="month", y="count", color=color) + case CounterType.YEARLY.value: + st.bar_chart(sql.get_yearly_analytics(int(df['id'])), x="year", y="count", color=color) + +else: + + st.header("Statistics") + + entries = sql.get_analytics() + entries_norm = pd.json_normalize(entries.counters.apply(json.loads)).fillna(0) + entries_full = pd.concat([entries, entries_norm], axis=1).drop(['counters'], axis=1) + + selected_counters = [c for c in entries_full.columns if c != "date"] + all_counters = sql.get_counters() + colors = all_counters.loc[all_counters['name'].isin(selected_counters), ["name", "color"]] + colors.name = colors.name.astype("category") + colors.name = colors.name.cat.set_categories(selected_counters) + colors = colors.sort_values(["name"]) + colors = colors.color.apply(lambda c: "#" + c).tolist() + + st.bar_chart(entries_full, x="date", x_label="Date", y_label="Count", color=colors) diff --git a/app/sql.py b/app/sql.py new file mode 100644 index 0000000..ee0be62 --- /dev/null +++ b/app/sql.py @@ -0,0 +1,229 @@ +import logging + +import streamlit as st + +from sqlalchemy.sql import text +from enums import CounterType + +logger = logging.getLogger(__name__) + +connection = st.connection("sqlite") +with connection.session as configure_session: + configure_session.execute(text('PRAGMA foreign_keys=ON')) + + +def create_counter(title:str, counter_type:CounterType, counter_color) -> None: + with connection.session as session: + try: + query = text('INSERT INTO counters (name, type, color) VALUES (:title, :type, :color)') + session.execute(query, {'title': title, 'type': counter_type, 'color': counter_color}) + session.commit() + except Exception as e: + logger.error(e) + session.rollback() + + +def get_counters(): + try: + return connection.query('SELECT id, name, type, color FROM counters', ttl=0) + except Exception as e: + logger.error(e) + return st.dataframe() + +def increment_counter(counter_id:int) -> None: + with connection.session as session: + try: + query = text('INSERT INTO entries (counter_id) VALUES (:id)') + session.execute(query, {'id': counter_id}) + session.commit() + except Exception as e: + logger.error(e) + session.rollback() + + +def remove_counter(counter_id:int) -> None: + with connection.session as session: + try: + query = text('DELETE FROM counters WHERE id = :id') + session.execute(query, {'id': counter_id}) + session.commit() + except Exception as e: + logger.error(e) + session.rollback() + + +def get_counter(counter_id:int): + try: + return connection.query('SELECT * FROM counters WHERE id = :id', params={'id': counter_id}, ttl=0).iloc[0] + except Exception as e: + logger.error(e) + return None + + +def get_analytics(end_date:str = 'now'): + try: + return connection.query(''' + WITH RECURSIVE timeseries(d) AS ( + VALUES(date(:end_date)) + UNION ALL + SELECT date(d, '-1 day') as d + FROM timeseries + WHERE d > date(:end_date, '-30 days') + ), + stats AS ( + SELECT + date(timestamp) as d, + counter_id, + sum(increment) as count + FROM entries + group by counter_id, date(timestamp) + ) + select + s.d as date, + case + when counter_id is null then json_object() + else json_group_object(name, count) + end as counters + FROM timeseries s + left outer join stats t on s.d = t.d + left join counters c on t.counter_id = c.id + GROUP by s.d + ''', params={"end_date": end_date}, ttl=0) + except Exception as e: + logger.error(e) + return None + +def get_daily_analytics(counter_id:int, end_date:str = 'now'): + try: + return connection.query(''' + WITH RECURSIVE timeseries(d) AS ( + VALUES(date(:end_date)) + UNION ALL + SELECT date(d, '-1 day') as d + FROM timeseries + WHERE d > date(:end_date, '-7 days') + ), + stats AS ( + SELECT + date(timestamp) as d, + sum(increment) as count + FROM entries + where counter_id = :id + group by date(timestamp) + ) + SELECT + t.d as "date", + coalesce(s.count, 0) as count + FROM timeseries as t + LEFT JOIN stats as s on s.d = t.d + ''', params={'id': counter_id, "end_date": end_date}, ttl=0) + except Exception as e: + logger.error(e) + return None + + +def get_weekly_analytics(counter_id:int, end_date:str = 'now'): + try: + return connection.query(''' + WITH RECURSIVE timeseries(d) AS ( + VALUES(date(:end_date, 'weekday 0')) + UNION ALL + SELECT date(d, '-7 day') + FROM timeseries + WHERE d > date(:end_date, '-30 days') + ), + weeks AS ( + SELECT strftime('%W',d) as w + FROM timeseries + ), + stats AS ( + SELECT + strftime('%W', timestamp) as w, + sum(increment) as count + FROM entries + where counter_id = :id + group by strftime('%W', timestamp) + ) + SELECT + w.w as "week", + coalesce(s.count, 0) as count + FROM weeks as w + LEFT JOIN stats as s on s.w = w.w + ''', params={'id': counter_id, "end_date": end_date}, ttl=0) + except Exception as e: + logger.error(e) + return None + +def get_monthly_analytics(counter_id:int, end_date:str = 'now'): + try: + return connection.query(''' + WITH RECURSIVE timeseries(d) AS ( + VALUES( date(:end_date, 'start of year')) + UNION ALL + SELECT date(d, '+1 month') + FROM timeseries + WHERE d < date(:end_date, '-1 month') + ), + months AS ( + SELECT + strftime('%m',d) as m, + strftime('%Y',d) as y + FROM timeseries + ), + stats AS ( + SELECT + strftime('%m', timestamp) as m, + strftime('%Y', timestamp) as y, + sum(increment) as count + FROM entries + where counter_id = :id + group by strftime('%m', timestamp), strftime('%Y', timestamp) + ) + SELECT + concat(m.m,', ',m.y) as "month", + coalesce(s.count, 0) as count + FROM months as m + LEFT JOIN stats as s on s.m = m.m and s.y = m.y + ''', params={'id': counter_id, "end_date": end_date}, ttl=0) + except Exception as e: + logger.error(e) + return None + +def get_yearly_analytics(counter_id:int, end_date:str = 'now'): + try: + return connection.query(''' + WITH RECURSIVE timeseries(d) AS ( + VALUES( date(:end_date, 'start of year', '-4 years')) + UNION ALL + SELECT date(d, '+1 year') + FROM timeseries + WHERE d < date(:end_date, '-1 year') + ), + years AS ( + SELECT strftime('%Y',d) as y + FROM timeseries + ), + stats AS ( + SELECT + strftime('%Y', timestamp) as y, + sum(increment) as count + FROM entries + where counter_id = :id + group by strftime('%Y', timestamp) + ) + SELECT + m.y as "year", + coalesce(s.count, 0) as count + FROM years as m + LEFT JOIN stats as s on s.y = m.y + ''', params={'id': counter_id, "end_date": end_date}, ttl=0) + except Exception as e: + logger.error(e) + return None + +def get_colors(palette_id:int): + try: + return connection.query('''SELECT color1,color2,color3,color4,color5 FROM color_palettes WHERE id = :id''', params={'id': palette_id}) + except Exception as e: + logger.error(e) + return None diff --git a/app/streamlit_app.py b/app/streamlit_app.py new file mode 100644 index 0000000..bf3a574 --- /dev/null +++ b/app/streamlit_app.py @@ -0,0 +1,20 @@ +import streamlit as st + +from logger import init_logger +from styles import init_styles + +init_logger() +init_styles() + +if st.user and not st.user.is_logged_in: + with st.container(width="stretch", height="stretch", horizontal_alignment="center"): + st.title("Daily Counter", width="stretch", text_alignment="center") + st.text("Please log in to use this app", width="stretch", text_alignment="center") + st.space() + if st.button("Log in"): + st.login() +else: + counters = st.Page("pages/counters.py", title="Counters", icon=":material/update:") + stats = st.Page("pages/stats.py", title="Statistics", icon=":material/chart_data:") + pg = st.navigation(position="top", pages=[counters, stats]) + pg.run() \ No newline at end of file diff --git a/app/styles.py b/app/styles.py new file mode 100644 index 0000000..e497a18 --- /dev/null +++ b/app/styles.py @@ -0,0 +1,25 @@ +import streamlit as st +import sql + + +def _load_css(filepath): + with open(filepath) as file: + st.html(f"") + + +def _load_color_selector_styles(): + colors = sql.get_colors(1) #FIXME Change to use user profile color palette + for idx, c in enumerate(colors.keys()): + css_color = '#' + colors[c][0] + st.html(f""" + + """) + + +def init_styles(): + _load_css("css/theme.css") + _load_color_selector_styles() \ No newline at end of file diff --git a/css/theme.css b/css/theme.css new file mode 100644 index 0000000..d6ed2ee --- /dev/null +++ b/css/theme.css @@ -0,0 +1,56 @@ +#MainMenu { + #display: none; +} +.stApp { + min-width: 360px; +} +.stAppHeader { + width: 100%; + max-width: 736px; + margin-left: auto; + margin-right: auto; +} +.stMainBlockContainer{ + padding-top: 4rem; +} + +.stPageLink a { + background: whitesmoke; + height: 40px; + width: 45px; + border: 1px solid silver; + padding-left: 12px; +} + +.stPageLink a > span:first-child { + display: none; +} + +.st-key-selected_tab div[role="tablist"] > button{ + width: 100%; +} + +.st-key-counter-table > div { + border: 1px solid gray; + padding: 10px; + border-radius: 5px; + background-color: whitesmoke; +} + +.st-key-color-selector div[role = "radiogroup"] { + display: flex; + flex-direction: row; +} +.st-key-color-selector div[role = "radiogroup"] > label { + flex: 1 +} +.st-key-color-selector div[role = "radiogroup"] > label > div:first-child { + display: none; +} +.st-key-color-selector div[role = "radiogroup"] > label:has(> input[tabindex="0"]) { + outline: 3px solid blue; +} +.st-key-color-selector div[role = "radiogroup"] p { + visibility: hidden; +} + diff --git a/data/.keep b/data/.keep new file mode 100644 index 0000000..e69de29 diff --git a/docs/counters.png b/docs/counters.png new file mode 100644 index 0000000000000000000000000000000000000000..86660aecf58d3d35a924bec5c9b94d50accbdba6 GIT binary patch literal 77817 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 QM@Oe~+du=Sc0b~O07Yu0E&u=k literal 0 HcmV?d00001 diff --git a/docs/statistics.png b/docs/statistics.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca74254e13ea52b495d2f5237ddac400e448460 GIT binary patch literal 38447 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 Gzx^M)h(|U6 literal 0 HcmV?d00001 diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..e54e18f --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env sh + +STREAMLIT_SECRETS_LOCATION=".streamlit/secrets.toml" + +if [ "$OIDC_ENABLED" = "true" ]; then + echo "INFO [entrypoint] OIDC configuration detected. Configuring app..." + toml add_section --toml-path=$STREAMLIT_SECRETS_LOCATION 'auth' + toml set --toml-path=$STREAMLIT_SECRETS_LOCATION 'auth.redirect_uri' "$OIDC_PUBLIC_URL/oauth2callback" + toml set --toml-path=$STREAMLIT_SECRETS_LOCATION 'auth.cookie_secret' "$OIDC_COOKIE_SECRET" + toml set --toml-path=$STREAMLIT_SECRETS_LOCATION 'auth.client_id' "$OIDC_CLIENT_ID" + toml set --toml-path=$STREAMLIT_SECRETS_LOCATION 'auth.client_secret' "$OIDC_CLIENT_SECRET" + toml set --toml-path=$STREAMLIT_SECRETS_LOCATION 'auth.server_metadata_url' "$OIDC_METADATA_URL" +else + echo "INFO [entrypoint] No OIDC configuration detected." +fi + +echo "INFO [entrypoint] Running database migrations..." +alembic upgrade head + +echo "INFO [entrypoint] Running application..." +streamlit run app \ No newline at end of file diff --git a/migrations/env.py b/migrations/env.py new file mode 100644 index 0000000..0fbae30 --- /dev/null +++ b/migrations/env.py @@ -0,0 +1,37 @@ +from logging.config import fileConfig +from sqlalchemy import engine_from_config +from sqlalchemy import pool +from alembic import context + +config = context.config +if config.config_file_name is not None: + fileConfig(config.config_file_name, disable_existing_loggers=False) + +target_metadata = None + +def run_migrations_offline() -> None: + url = config.get_main_option("sqlalchemy.url") + context.configure( + url=url, + target_metadata=target_metadata, + literal_binds=True, + dialect_opts={"paramstyle": "named"}, + ) + with context.begin_transaction(): + context.run_migrations() + +def run_migrations_online() -> None: + connectable = engine_from_config( + config.get_section(config.config_ini_section, {}), + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) + with connectable.connect() as connection: + context.configure(connection=connection, target_metadata=target_metadata) + with context.begin_transaction(): + context.run_migrations() + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/migrations/script.py.mako b/migrations/script.py.mako new file mode 100644 index 0000000..1101630 --- /dev/null +++ b/migrations/script.py.mako @@ -0,0 +1,28 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision: str = ${repr(up_revision)} +down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)} +branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} +depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} + + +def upgrade() -> None: + """Upgrade schema.""" + ${upgrades if upgrades else "pass"} + + +def downgrade() -> None: + """Downgrade schema.""" + ${downgrades if downgrades else "pass"} diff --git a/migrations/versions/20260405181328_initial_.py b/migrations/versions/20260405181328_initial_.py new file mode 100644 index 0000000..2fdf7f7 --- /dev/null +++ b/migrations/versions/20260405181328_initial_.py @@ -0,0 +1,63 @@ +"""initial version + +Revision ID: 4ee21f978e6c +Revises: +Create Date: 2026-04-05 18:13:28.735859 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +from sqlalchemy import ForeignKeyConstraint + + +# revision identifiers, used by Alembic. +revision: str = '4ee21f978e6c' +down_revision: Union[str, Sequence[str], None] = None +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + op.create_table( + "counters", + sa.Column('id', sa.Integer, primary_key=True, autoincrement=True), + sa.Column('name', sa.String(20), nullable=False, unique=True), + sa.Column('type', sa.Integer(), nullable=False, server_default=sa.text("1")), + sa.Column('color', sa.String(6), nullable=False) + ) + + op.create_table( + "entries", + sa.Column('id', sa.Integer, primary_key=True, autoincrement=True), + sa.Column('timestamp', sa.DateTime, nullable=False, server_default=sa.func.now()), + sa.Column('counter_id', sa.Integer, nullable=False,), + sa.Column('increment', sa.Integer, nullable=False, server_default=sa.text("1")), + ForeignKeyConstraint(["counter_id"], ["counters.id"], onupdate="CASCADE", ondelete="CASCADE") + ) + + table = op.create_table( + "color_palettes", + sa.Column('id', sa.Integer, primary_key=True, autoincrement=True), + sa.Column('color1', sa.String(6), nullable=False), + sa.Column('color2', sa.String(6), nullable=False), + sa.Column('color3', sa.String(6), nullable=False), + sa.Column('color4', sa.String(6), nullable=False), + sa.Column('color5', sa.String(6), nullable=False), + ) + + op.bulk_insert(table, [ + {"color1": "F2F3AE", "color2": "EDD382", "color3": "FC9E4F", "color4": "FF521B", "color5": "020122"}, + {"color1": "2B4141", "color2": "0EB1D2", "color3": "34E4EA", "color4": "8AB9B5", "color5": "C8C2AE"}, + {"color1": "181F1C", "color2": "274029", "color3": "315C2B", "color4": "60712F", "color5": "9EA93F"}, + {"color1": "A3A380", "color2": "D6CE93", "color3": "EFEBCE", "color4": "D8A48F", "color5": "BB8588"}, + {"color1": "32292F", "color2": "99E1D9", "color3": "F0F7F4", "color4": "70ABAF", "color5": "705D56"} + ]) + +def downgrade() -> None: + op.drop_table("color_palettes") + op.drop_table("entries") + op.drop_table("counters") + + diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..8a52065 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,2083 @@ +# This file is automatically @generated by Poetry 2.3.3 and should not be changed by hand. + +[[package]] +name = "alembic" +version = "1.18.4" +description = "A database migration tool for SQLAlchemy." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "alembic-1.18.4-py3-none-any.whl", hash = "sha256:a5ed4adcf6d8a4cb575f3d759f071b03cd6e5c7618eb796cb52497be25bfe19a"}, + {file = "alembic-1.18.4.tar.gz", hash = "sha256:cb6e1fd84b6174ab8dbb2329f86d631ba9559dd78df550b57804d607672cedbc"}, +] + +[package.dependencies] +Mako = "*" +SQLAlchemy = ">=1.4.23" +tomli = {version = "*", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.12" + +[package.extras] +tz = ["tzdata"] + +[[package]] +name = "altair" +version = "6.0.0" +description = "Vega-Altair: A declarative statistical visualization library for Python." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "altair-6.0.0-py3-none-any.whl", hash = "sha256:09ae95b53d5fe5b16987dccc785a7af8588f2dca50de1e7a156efa8a461515f8"}, + {file = "altair-6.0.0.tar.gz", hash = "sha256:614bf5ecbe2337347b590afb111929aa9c16c9527c4887d96c9bc7f6640756b4"}, +] + +[package.dependencies] +jinja2 = "*" +jsonschema = ">=3.0" +narwhals = ">=1.27.1" +packaging = "*" +typing-extensions = {version = ">=4.12.0", markers = "python_version < \"3.15\""} + +[package.extras] +all = ["altair-tiles (>=0.3.0)", "anywidget (>=0.9.0)", "numpy", "pandas (>=1.1.3)", "pyarrow (>=11)", "vegafusion (>=2.0.3)", "vl-convert-python (>=1.8.0)"] +dev = ["duckdb (>=1.0) ; python_version < \"3.14\"", "geopandas (>=0.14.3) ; python_version < \"3.14\"", "hatch (>=1.13.0)", "ipykernel", "ipython", "mistune", "mypy", "pandas (>=1.1.3)", "pandas-stubs", "polars (>=0.20.3)", "pyarrow-stubs", "pytest", "pytest-cov", "pytest-xdist[psutil] (>=3.5,<4.0)", "ruff (>=0.9.5)", "taskipy (>=1.14.1)", "tomli (>=2.2.1)", "types-jsonschema", "types-setuptools"] +doc = ["docutils", "jinja2", "myst-parser", "numpydoc", "pillow", "pydata-sphinx-theme (>=0.14.1)", "scipy", "scipy-stubs ; python_version >= \"3.10\"", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinxext-altair"] +save = ["vl-convert-python (>=1.8.0)"] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +description = "Document parameters, class attributes, return types, and variables inline, with Annotated." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"}, + {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"}, +] + +[[package]] +name = "attrs" +version = "26.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309"}, + {file = "attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32"}, +] + +[[package]] +name = "authlib" +version = "1.6.9" +description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "authlib-1.6.9-py2.py3-none-any.whl", hash = "sha256:f08b4c14e08f0861dc18a32357b33fbcfd2ea86cfe3fe149484b4d764c4a0ac3"}, + {file = "authlib-1.6.9.tar.gz", hash = "sha256:d8f2421e7e5980cc1ddb4e32d3f5fa659cfaf60d8eaf3281ebed192e4ab74f04"}, +] + +[package.dependencies] +cryptography = "*" + +[[package]] +name = "blinker" +version = "1.9.0" +description = "Fast, simple object-to-object and broadcast signaling" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, + {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, +] + +[[package]] +name = "cachetools" +version = "7.0.5" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114"}, + {file = "cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990"}, +] + +[[package]] +name = "certifi" +version = "2026.2.25" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa"}, + {file = "certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7"}, +] + +[[package]] +name = "cffi" +version = "2.0.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "platform_python_implementation != \"PyPy\"" +files = [ + {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, + {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, + {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, + {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, + {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, + {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, + {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, + {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, + {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, + {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, + {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, + {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, + {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, + {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, + {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, + {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, + {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, + {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, + {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, + {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, + {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, + {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, +] + +[package.dependencies] +pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} + +[[package]] +name = "charset-normalizer" +version = "3.4.6" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "charset_normalizer-3.4.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-win32.whl", hash = "sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-win32.whl", hash = "sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-win32.whl", hash = "sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-win32.whl", hash = "sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-win32.whl", hash = "sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-win32.whl", hash = "sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux_2_31_armv7l.whl", hash = "sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-win32.whl", hash = "sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-win_amd64.whl", hash = "sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-win32.whl", hash = "sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-win_amd64.whl", hash = "sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-win_arm64.whl", hash = "sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8"}, + {file = "charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69"}, + {file = "charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6"}, +] + +[[package]] +name = "click" +version = "8.3.1" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6"}, + {file = "click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main"] +markers = "platform_system == \"Windows\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "cryptography" +version = "46.0.6" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = "!=3.9.0,!=3.9.1,>=3.8" +groups = ["main"] +files = [ + {file = "cryptography-46.0.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8"}, + {file = "cryptography-46.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30"}, + {file = "cryptography-46.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a"}, + {file = "cryptography-46.0.6-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175"}, + {file = "cryptography-46.0.6-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463"}, + {file = "cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97"}, + {file = "cryptography-46.0.6-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c"}, + {file = "cryptography-46.0.6-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507"}, + {file = "cryptography-46.0.6-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19"}, + {file = "cryptography-46.0.6-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738"}, + {file = "cryptography-46.0.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c"}, + {file = "cryptography-46.0.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f"}, + {file = "cryptography-46.0.6-cp311-abi3-win32.whl", hash = "sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2"}, + {file = "cryptography-46.0.6-cp311-abi3-win_amd64.whl", hash = "sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124"}, + {file = "cryptography-46.0.6-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275"}, + {file = "cryptography-46.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4"}, + {file = "cryptography-46.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b"}, + {file = "cryptography-46.0.6-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707"}, + {file = "cryptography-46.0.6-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361"}, + {file = "cryptography-46.0.6-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b"}, + {file = "cryptography-46.0.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca"}, + {file = "cryptography-46.0.6-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013"}, + {file = "cryptography-46.0.6-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4"}, + {file = "cryptography-46.0.6-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a"}, + {file = "cryptography-46.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d"}, + {file = "cryptography-46.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736"}, + {file = "cryptography-46.0.6-cp314-cp314t-win32.whl", hash = "sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed"}, + {file = "cryptography-46.0.6-cp314-cp314t-win_amd64.whl", hash = "sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4"}, + {file = "cryptography-46.0.6-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a"}, + {file = "cryptography-46.0.6-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8"}, + {file = "cryptography-46.0.6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77"}, + {file = "cryptography-46.0.6-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290"}, + {file = "cryptography-46.0.6-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410"}, + {file = "cryptography-46.0.6-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d"}, + {file = "cryptography-46.0.6-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70"}, + {file = "cryptography-46.0.6-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d"}, + {file = "cryptography-46.0.6-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa"}, + {file = "cryptography-46.0.6-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58"}, + {file = "cryptography-46.0.6-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb"}, + {file = "cryptography-46.0.6-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72"}, + {file = "cryptography-46.0.6-cp38-abi3-win32.whl", hash = "sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c"}, + {file = "cryptography-46.0.6-cp38-abi3-win_amd64.whl", hash = "sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f"}, + {file = "cryptography-46.0.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead"}, + {file = "cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8"}, + {file = "cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0"}, + {file = "cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b"}, + {file = "cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a"}, + {file = "cryptography-46.0.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e"}, + {file = "cryptography-46.0.6.tar.gz", hash = "sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759"}, +] + +[package.dependencies] +cffi = {version = ">=2.0.0", markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\""} +typing-extensions = {version = ">=4.13.2", markers = "python_full_version < \"3.11.0\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-inline-tabs", "sphinx-rtd-theme (>=3.0.0)"] +docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] +nox = ["nox[uv] (>=2024.4.15)"] +pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.14)", "ruff (>=0.11.11)"] +sdist = ["build (>=1.0.0)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi (>=2024)", "cryptography-vectors (==46.0.6)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "gitdb" +version = "4.0.12" +description = "Git Object Database" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"}, + {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"}, +] + +[package.dependencies] +smmap = ">=3.0.1,<6" + +[[package]] +name = "gitpython" +version = "3.1.46" +description = "GitPython is a Python library used to interact with Git repositories" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "gitpython-3.1.46-py3-none-any.whl", hash = "sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058"}, + {file = "gitpython-3.1.46.tar.gz", hash = "sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f"}, +] + +[package.dependencies] +gitdb = ">=4.0.1,<5" + +[package.extras] +doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy (==1.18.2) ; python_version >= \"3.9\"", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""] + +[[package]] +name = "greenlet" +version = "3.3.2" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\"" +files = [ + {file = "greenlet-3.3.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9bc885b89709d901859cf95179ec9f6bb67a3d2bb1f0e88456461bd4b7f8fd0d"}, + {file = "greenlet-3.3.2-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b568183cf65b94919be4438dc28416b234b678c608cafac8874dfeeb2a9bbe13"}, + {file = "greenlet-3.3.2-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:527fec58dc9f90efd594b9b700662ed3fb2493c2122067ac9c740d98080a620e"}, + {file = "greenlet-3.3.2-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:508c7f01f1791fbc8e011bd508f6794cb95397fdb198a46cb6635eb5b78d85a7"}, + {file = "greenlet-3.3.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ad0c8917dd42a819fe77e6bdfcb84e3379c0de956469301d9fd36427a1ca501f"}, + {file = "greenlet-3.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:97245cc10e5515dbc8c3104b2928f7f02b6813002770cfaffaf9a6e0fc2b94ef"}, + {file = "greenlet-3.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8c1fdd7d1b309ff0da81d60a9688a8bd044ac4e18b250320a96fc68d31c209ca"}, + {file = "greenlet-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:5d0e35379f93a6d0222de929a25ab47b5eb35b5ef4721c2b9cbcc4036129ff1f"}, + {file = "greenlet-3.3.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:c56692189a7d1c7606cb794be0a8381470d95c57ce5be03fb3d0ef57c7853b86"}, + {file = "greenlet-3.3.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ebd458fa8285960f382841da585e02201b53a5ec2bac6b156fc623b5ce4499f"}, + {file = "greenlet-3.3.2-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a443358b33c4ec7b05b79a7c8b466f5d275025e750298be7340f8fc63dff2a55"}, + {file = "greenlet-3.3.2-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4375a58e49522698d3e70cc0b801c19433021b5c37686f7ce9c65b0d5c8677d2"}, + {file = "greenlet-3.3.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e2cd90d413acbf5e77ae41e5d3c9b3ac1d011a756d7284d7f3f2b806bbd6358"}, + {file = "greenlet-3.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:442b6057453c8cb29b4fb36a2ac689382fc71112273726e2423f7f17dc73bf99"}, + {file = "greenlet-3.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:45abe8eb6339518180d5a7fa47fa01945414d7cca5ecb745346fc6a87d2750be"}, + {file = "greenlet-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e692b2dae4cc7077cbb11b47d258533b48c8fde69a33d0d8a82e2fe8d8531d5"}, + {file = "greenlet-3.3.2-cp311-cp311-win_arm64.whl", hash = "sha256:02b0a8682aecd4d3c6c18edf52bc8e51eacdd75c8eac52a790a210b06aa295fd"}, + {file = "greenlet-3.3.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:ac8d61d4343b799d1e526db579833d72f23759c71e07181c2d2944e429eb09cd"}, + {file = "greenlet-3.3.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ceec72030dae6ac0c8ed7591b96b70410a8be370b6a477b1dbc072856ad02bd"}, + {file = "greenlet-3.3.2-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2a5be83a45ce6188c045bcc44b0ee037d6a518978de9a5d97438548b953a1ac"}, + {file = "greenlet-3.3.2-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ae9e21c84035c490506c17002f5c8ab25f980205c3e61ddb3a2a2a2e6c411fcb"}, + {file = "greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43e99d1749147ac21dde49b99c9abffcbc1e2d55c67501465ef0930d6e78e070"}, + {file = "greenlet-3.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c956a19350e2c37f2c48b336a3afb4bff120b36076d9d7fb68cb44e05d95b79"}, + {file = "greenlet-3.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6c6f8ba97d17a1e7d664151284cb3315fc5f8353e75221ed4324f84eb162b395"}, + {file = "greenlet-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:34308836d8370bddadb41f5a7ce96879b72e2fdfb4e87729330c6ab52376409f"}, + {file = "greenlet-3.3.2-cp312-cp312-win_arm64.whl", hash = "sha256:d3a62fa76a32b462a97198e4c9e99afb9ab375115e74e9a83ce180e7a496f643"}, + {file = "greenlet-3.3.2-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:aa6ac98bdfd716a749b84d4034486863fd81c3abde9aa3cf8eff9127981a4ae4"}, + {file = "greenlet-3.3.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab0c7e7901a00bc0a7284907273dc165b32e0d109a6713babd04471327ff7986"}, + {file = "greenlet-3.3.2-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d248d8c23c67d2291ffd47af766e2a3aa9fa1c6703155c099feb11f526c63a92"}, + {file = "greenlet-3.3.2-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ccd21bb86944ca9be6d967cf7691e658e43417782bce90b5d2faeda0ff78a7dd"}, + {file = "greenlet-3.3.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b6997d360a4e6a4e936c0f9625b1c20416b8a0ea18a8e19cabbefc712e7397ab"}, + {file = "greenlet-3.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:64970c33a50551c7c50491671265d8954046cb6e8e2999aacdd60e439b70418a"}, + {file = "greenlet-3.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1a9172f5bf6bd88e6ba5a84e0a68afeac9dc7b6b412b245dd64f52d83c81e55b"}, + {file = "greenlet-3.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:a7945dd0eab63ded0a48e4dcade82939783c172290a7903ebde9e184333ca124"}, + {file = "greenlet-3.3.2-cp313-cp313-win_arm64.whl", hash = "sha256:394ead29063ee3515b4e775216cb756b2e3b4a7e55ae8fd884f17fa579e6b327"}, + {file = "greenlet-3.3.2-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:8d1658d7291f9859beed69a776c10822a0a799bc4bfe1bd4272bb60e62507dab"}, + {file = "greenlet-3.3.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18cb1b7337bca281915b3c5d5ae19f4e76d35e1df80f4ad3c1a7be91fadf1082"}, + {file = "greenlet-3.3.2-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2e47408e8ce1c6f1ceea0dffcdf6ebb85cc09e55c7af407c99f1112016e45e9"}, + {file = "greenlet-3.3.2-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e3cb43ce200f59483eb82949bf1835a99cf43d7571e900d7c8d5c62cdf25d2f9"}, + {file = "greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63d10328839d1973e5ba35e98cccbca71b232b14051fd957b6f8b6e8e80d0506"}, + {file = "greenlet-3.3.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e4ab3cfb02993c8cc248ea73d7dae6cec0253e9afa311c9b37e603ca9fad2ce"}, + {file = "greenlet-3.3.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94ad81f0fd3c0c0681a018a976e5c2bd2ca2d9d94895f23e7bb1af4e8af4e2d5"}, + {file = "greenlet-3.3.2-cp314-cp314-win_amd64.whl", hash = "sha256:8c4dd0f3997cf2512f7601563cc90dfb8957c0cff1e3a1b23991d4ea1776c492"}, + {file = "greenlet-3.3.2-cp314-cp314-win_arm64.whl", hash = "sha256:cd6f9e2bbd46321ba3bbb4c8a15794d32960e3b0ae2cc4d49a1a53d314805d71"}, + {file = "greenlet-3.3.2-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:e26e72bec7ab387ac80caa7496e0f908ff954f31065b0ffc1f8ecb1338b11b54"}, + {file = "greenlet-3.3.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b466dff7a4ffda6ca975979bab80bdadde979e29fc947ac3be4451428d8b0e4"}, + {file = "greenlet-3.3.2-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b8bddc5b73c9720bea487b3bffdb1840fe4e3656fba3bd40aa1489e9f37877ff"}, + {file = "greenlet-3.3.2-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:59b3e2c40f6706b05a9cd299c836c6aa2378cabe25d021acd80f13abf81181cf"}, + {file = "greenlet-3.3.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b26b0f4428b871a751968285a1ac9648944cea09807177ac639b030bddebcea4"}, + {file = "greenlet-3.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1fb39a11ee2e4d94be9a76671482be9398560955c9e568550de0224e41104727"}, + {file = "greenlet-3.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:20154044d9085151bc309e7689d6f7ba10027f8f5a8c0676ad398b951913d89e"}, + {file = "greenlet-3.3.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c04c5e06ec3e022cbfe2cd4a846e1d4e50087444f875ff6d2c2ad8445495cf1a"}, + {file = "greenlet-3.3.2.tar.gz", hash = "sha256:2eaf067fc6d886931c7962e8c6bede15d2f01965560f3359b27c80bde2d151f2"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil", "setuptools"] + +[[package]] +name = "idna" +version = "3.11" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, + {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "jinja2" +version = "3.1.6" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jmespath" +version = "1.1.0" +description = "JSON Matching Expressions" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64"}, + {file = "jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d"}, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce"}, + {file = "jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +jsonschema-specifications = ">=2023.3.6" +referencing = ">=0.28.4" +rpds-py = ">=0.25.0" + +[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)", "rfc3987-syntax (>=1.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, + {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + +[[package]] +name = "mako" +version = "1.3.10" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "mako-1.3.10-py3-none-any.whl", hash = "sha256:baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59"}, + {file = "mako-1.3.10.tar.gz", hash = "sha256:99579a6f39583fa7e5630a28c3c1f440e4e97a414b80372649c0ce338da2ea28"}, +] + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[package.extras] +babel = ["Babel"] +lingua = ["lingua"] +testing = ["pytest"] + +[[package]] +name = "markdown-it-py" +version = "4.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147"}, + {file = "markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "markdown-it-pyrs", "mistletoe (>=1.0,<2.0)", "mistune (>=3.0,<4.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins (>=0.5.0)"] +profiling = ["gprof2dot"] +rtd = ["ipykernel", "jupyter_sphinx", "mdit-py-plugins (>=0.5.0)", "myst-parser", "pyyaml", "sphinx", "sphinx-book-theme (>=1.0,<2.0)", "sphinx-copybutton", "sphinx-design"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions", "requests"] + +[[package]] +name = "markupsafe" +version = "3.0.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, + {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"}, + {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"}, + {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"}, + {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"}, + {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"}, + {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"}, + {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"}, + {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "narwhals" +version = "2.18.1" +description = "Extremely lightweight compatibility layer between dataframe libraries" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "narwhals-2.18.1-py3-none-any.whl", hash = "sha256:a0a8bb80205323851338888ba3a12b4f65d352362c8a94be591244faf36504ad"}, + {file = "narwhals-2.18.1.tar.gz", hash = "sha256:652a1fcc9d432bbf114846688884c215f17eb118aa640b7419295d2f910d2a8b"}, +] + +[package.extras] +cudf = ["cudf-cu12 (>=24.10.0)"] +dask = ["dask[dataframe] (>=2024.8)"] +duckdb = ["duckdb (>=1.1)"] +ibis = ["ibis-framework (>=6.0.0)", "packaging", "pyarrow-hotfix", "rich"] +modin = ["modin"] +pandas = ["pandas (>=1.1.3)"] +polars = ["polars (>=0.20.4)"] +pyarrow = ["pyarrow (>=13.0.0)"] +pyspark = ["pyspark (>=3.5.0)"] +pyspark-connect = ["pyspark[connect] (>=3.5.0)"] +sql = ["duckdb (>=1.1)", "sqlparse"] +sqlframe = ["sqlframe (>=3.22.0,!=3.39.3)"] + +[[package]] +name = "numpy" +version = "2.2.6" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version == \"3.10\"" +files = [ + {file = "numpy-2.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b412caa66f72040e6d268491a59f2c43bf03eb6c96dd8f0307829feb7fa2b6fb"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e41fd67c52b86603a91c1a505ebaef50b3314de0213461c7a6e99c9a3beff90"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:37e990a01ae6ec7fe7fa1c26c55ecb672dd98b19c3d0e1d1f326fa13cb38d163"}, + {file = "numpy-2.2.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:5a6429d4be8ca66d889b7cf70f536a397dc45ba6faeb5f8c5427935d9592e9cf"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efd28d4e9cd7d7a8d39074a4d44c63eda73401580c5c76acda2ce969e0a38e83"}, + {file = "numpy-2.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc7b73d02efb0e18c000e9ad8b83480dfcd5dfd11065997ed4c6747470ae8915"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74d4531beb257d2c3f4b261bfb0fc09e0f9ebb8842d82a7b4209415896adc680"}, + {file = "numpy-2.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8fc377d995680230e83241d8a96def29f204b5782f371c532579b4f20607a289"}, + {file = "numpy-2.2.6-cp310-cp310-win32.whl", hash = "sha256:b093dd74e50a8cba3e873868d9e93a85b78e0daf2e98c6797566ad8044e8363d"}, + {file = "numpy-2.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:f0fd6321b839904e15c46e0d257fdd101dd7f530fe03fd6359c1ea63738703f3"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f9f1adb22318e121c5c69a09142811a201ef17ab257a1e66ca3025065b7f53ae"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c820a93b0255bc360f53eca31a0e676fd1101f673dda8da93454a12e23fc5f7a"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3d70692235e759f260c3d837193090014aebdf026dfd167834bcba43e30c2a42"}, + {file = "numpy-2.2.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:481b49095335f8eed42e39e8041327c05b0f6f4780488f61286ed3c01368d491"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b64d8d4d17135e00c8e346e0a738deb17e754230d7e0810ac5012750bbd85a5a"}, + {file = "numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bd48227a919f1bafbdda0583705e547892342c26fb127219d60a5c36882609d1"}, + {file = "numpy-2.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9551a499bf125c1d4f9e250377c1ee2eddd02e01eac6644c080162c0c51778ab"}, + {file = "numpy-2.2.6-cp311-cp311-win32.whl", hash = "sha256:0678000bb9ac1475cd454c6b8c799206af8107e310843532b04d49649c717a47"}, + {file = "numpy-2.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:e8213002e427c69c45a52bbd94163084025f533a55a59d6f9c5b820774ef3303"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3"}, + {file = "numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87"}, + {file = "numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49"}, + {file = "numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de"}, + {file = "numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4"}, + {file = "numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d"}, + {file = "numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f"}, + {file = "numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868"}, + {file = "numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d"}, + {file = "numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd"}, + {file = "numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40"}, + {file = "numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f"}, + {file = "numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571"}, + {file = "numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1"}, + {file = "numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff"}, + {file = "numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0b605b275d7bd0c640cad4e5d30fa701a8d59302e127e5f79138ad62762c3e3d"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:7befc596a7dc9da8a337f79802ee8adb30a552a94f792b9c9d18c840055907db"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce47521a4754c8f4593837384bd3424880629f718d87c5d44f8ed763edd63543"}, + {file = "numpy-2.2.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d042d24c90c41b54fd506da306759e06e568864df8ec17ccc17e9e884634fd00"}, + {file = "numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd"}, +] + +[[package]] +name = "numpy" +version = "2.4.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.11" +groups = ["main"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "numpy-2.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f983334aea213c99992053ede6168500e5f086ce74fbc4acc3f2b00f5762e9db"}, + {file = "numpy-2.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72944b19f2324114e9dc86a159787333b77874143efcf89a5167ef83cfee8af0"}, + {file = "numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:86b6f55f5a352b48d7fbfd2dbc3d5b780b2d79f4d3c121f33eb6efb22e9a2015"}, + {file = "numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:ba1f4fc670ed79f876f70082eff4f9583c15fb9a4b89d6188412de4d18ae2f40"}, + {file = "numpy-2.4.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a87ec22c87be071b6bdbd27920b129b94f2fc964358ce38f3822635a3e2e03d"}, + {file = "numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502"}, + {file = "numpy-2.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d4e437e295f18ec29bc79daf55e8a47a9113df44d66f702f02a293d93a2d6dd"}, + {file = "numpy-2.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6aa3236c78803afbcb255045fbef97a9e25a1f6c9888357d205ddc42f4d6eba5"}, + {file = "numpy-2.4.4-cp311-cp311-win32.whl", hash = "sha256:30caa73029a225b2d40d9fae193e008e24b2026b7ee1a867b7ee8d96ca1a448e"}, + {file = "numpy-2.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e"}, + {file = "numpy-2.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:fcfe2045fd2e8f3cb0ce9d4ba6dba6333b8fa05bb8a4939c908cd43322d14c7e"}, + {file = "numpy-2.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15716cfef24d3a9762e3acdf87e27f58dc823d1348f765bbea6bef8c639bfa1b"}, + {file = "numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23cbfd4c17357c81021f21540da84ee282b9c8fba38a03b7b9d09ba6b951421e"}, + {file = "numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842"}, + {file = "numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8"}, + {file = "numpy-2.4.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9e75681b59ddaa5e659898085ae0eaea229d054f2ac0c7e563a62205a700121"}, + {file = "numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e"}, + {file = "numpy-2.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:62d6b0f03b694173f9fcb1fb317f7222fd0b0b103e784c6549f5e53a27718c44"}, + {file = "numpy-2.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbc356aae7adf9e6336d336b9c8111d390a05df88f1805573ebb0807bd06fd1d"}, + {file = "numpy-2.4.4-cp312-cp312-win32.whl", hash = "sha256:0d35aea54ad1d420c812bfa0385c71cd7cc5bcf7c65fed95fc2cd02fe8c79827"}, + {file = "numpy-2.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a"}, + {file = "numpy-2.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:846300f379b5b12cc769334464656bc882e0735d27d9726568bc932fdc49d5ec"}, + {file = "numpy-2.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08f2e31ed5e6f04b118e49821397f12767934cfdd12a1ce86a058f91e004ee50"}, + {file = "numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e823b8b6edc81e747526f70f71a9c0a07ac4e7ad13020aa736bb7c9d67196115"}, + {file = "numpy-2.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4a19d9dba1a76618dd86b164d608566f393f8ec6ac7c44f0cc879011c45e65af"}, + {file = "numpy-2.4.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d2a8490669bfe99a233298348acc2d824d496dee0e66e31b66a6022c2ad74a5c"}, + {file = "numpy-2.4.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45dbed2ab436a9e826e302fcdcbe9133f9b0006e5af7168afb8963a6520da103"}, + {file = "numpy-2.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c901b15172510173f5cb310eae652908340f8dede90fff9e3bf6c0d8dfd92f83"}, + {file = "numpy-2.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:99d838547ace2c4aace6c4f76e879ddfe02bb58a80c1549928477862b7a6d6ed"}, + {file = "numpy-2.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0aec54fd785890ecca25a6003fd9a5aed47ad607bbac5cd64f836ad8666f4959"}, + {file = "numpy-2.4.4-cp313-cp313-win32.whl", hash = "sha256:07077278157d02f65c43b1b26a3886bce886f95d20aabd11f87932750dfb14ed"}, + {file = "numpy-2.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:5c70f1cc1c4efbe316a572e2d8b9b9cc44e89b95f79ca3331553fbb63716e2bf"}, + {file = "numpy-2.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:ef4059d6e5152fa1a39f888e344c73fdc926e1b2dd58c771d67b0acfbf2aa67d"}, + {file = "numpy-2.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4bbc7f303d125971f60ec0aaad5e12c62d0d2c925f0ab1273debd0e4ba37aba5"}, + {file = "numpy-2.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:4d6d57903571f86180eb98f8f0c839fa9ebbfb031356d87f1361be91e433f5b7"}, + {file = "numpy-2.4.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:4636de7fd195197b7535f231b5de9e4b36d2c440b6e566d2e4e4746e6af0ca93"}, + {file = "numpy-2.4.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad2e2ef14e0b04e544ea2fa0a36463f847f113d314aa02e5b402fdf910ef309e"}, + {file = "numpy-2.4.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a285b3b96f951841799528cd1f4f01cd70e7e0204b4abebac9463eecfcf2a40"}, + {file = "numpy-2.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f8474c4241bc18b750be2abea9d7a9ec84f46ef861dbacf86a4f6e043401f79e"}, + {file = "numpy-2.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4e874c976154687c1f71715b034739b45c7711bec81db01914770373d125e392"}, + {file = "numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008"}, + {file = "numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8"}, + {file = "numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233"}, + {file = "numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0"}, + {file = "numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a"}, + {file = "numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a"}, + {file = "numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b"}, + {file = "numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a"}, + {file = "numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d"}, + {file = "numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252"}, + {file = "numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f"}, + {file = "numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc"}, + {file = "numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74"}, + {file = "numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb"}, + {file = "numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e"}, + {file = "numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113"}, + {file = "numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d"}, + {file = "numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d"}, + {file = "numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f"}, + {file = "numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0"}, + {file = "numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150"}, + {file = "numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871"}, + {file = "numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e"}, + {file = "numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:58c8b5929fcb8287cbd6f0a3fae19c6e03a5c48402ae792962ac465224a629a4"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eea7ac5d2dce4189771cedb559c738a71512768210dc4e4753b107a2048b3d0e"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:51fc224f7ca4d92656d5a5eb315f12eb5fe2c97a66249aa7b5f562528a3be38c"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:28a650663f7314afc3e6ec620f44f333c386aad9f6fc472030865dc0ebb26ee3"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19710a9ca9992d7174e9c52f643d4272dcd1558c5f7af7f6f8190f633bd651a7"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b2aec6af35c113b05695ebb5749a787acd63cafc83086a05771d1e1cd1e555f"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f2cf083b324a467e1ab358c105f6cad5ea950f50524668a80c486ff1db24e119"}, + {file = "numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0"}, +] + +[[package]] +name = "packaging" +version = "26.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529"}, + {file = "packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4"}, +] + +[[package]] +name = "pandas" +version = "2.3.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, + {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4"}, + {file = "pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151"}, + {file = "pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"}, + {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493"}, + {file = "pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3"}, + {file = "pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9"}, + {file = "pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa"}, + {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "pillow" +version = "12.1.1" +description = "Python Imaging Library (fork)" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "pillow-12.1.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f1625b72740fdda5d77b4def688eb8fd6490975d06b909fd19f13f391e077e0"}, + {file = "pillow-12.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:178aa072084bd88ec759052feca8e56cbb14a60b39322b99a049e58090479713"}, + {file = "pillow-12.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b66e95d05ba806247aaa1561f080abc7975daf715c30780ff92a20e4ec546e1b"}, + {file = "pillow-12.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89c7e895002bbe49cdc5426150377cbbc04767d7547ed145473f496dfa40408b"}, + {file = "pillow-12.1.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a5cbdcddad0af3da87cb16b60d23648bc3b51967eb07223e9fed77a82b457c4"}, + {file = "pillow-12.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9f51079765661884a486727f0729d29054242f74b46186026582b4e4769918e4"}, + {file = "pillow-12.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:99c1506ea77c11531d75e3a412832a13a71c7ebc8192ab9e4b2e355555920e3e"}, + {file = "pillow-12.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:36341d06738a9f66c8287cf8b876d24b18db9bd8740fa0672c74e259ad408cff"}, + {file = "pillow-12.1.1-cp310-cp310-win32.whl", hash = "sha256:6c52f062424c523d6c4db85518774cc3d50f5539dd6eed32b8f6229b26f24d40"}, + {file = "pillow-12.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:c6008de247150668a705a6338156efb92334113421ceecf7438a12c9a12dab23"}, + {file = "pillow-12.1.1-cp310-cp310-win_arm64.whl", hash = "sha256:1a9b0ee305220b392e1124a764ee4265bd063e54a751a6b62eff69992f457fa9"}, + {file = "pillow-12.1.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e879bb6cd5c73848ef3b2b48b8af9ff08c5b71ecda8048b7dd22d8a33f60be32"}, + {file = "pillow-12.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:365b10bb9417dd4498c0e3b128018c4a624dc11c7b97d8cc54effe3b096f4c38"}, + {file = "pillow-12.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d4ce8e329c93845720cd2014659ca67eac35f6433fd3050393d85f3ecef0dad5"}, + {file = "pillow-12.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc354a04072b765eccf2204f588a7a532c9511e8b9c7f900e1b64e3e33487090"}, + {file = "pillow-12.1.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e7976bf1910a8116b523b9f9f58bf410f3e8aa330cd9a2bb2953f9266ab49af"}, + {file = "pillow-12.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:597bd9c8419bc7c6af5604e55847789b69123bbe25d65cc6ad3012b4f3c98d8b"}, + {file = "pillow-12.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2c1fc0f2ca5f96a3c8407e41cca26a16e46b21060fe6d5b099d2cb01412222f5"}, + {file = "pillow-12.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:578510d88c6229d735855e1f278aa305270438d36a05031dfaae5067cc8eb04d"}, + {file = "pillow-12.1.1-cp311-cp311-win32.whl", hash = "sha256:7311c0a0dcadb89b36b7025dfd8326ecfa36964e29913074d47382706e516a7c"}, + {file = "pillow-12.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:fbfa2a7c10cc2623f412753cddf391c7f971c52ca40a3f65dc5039b2939e8563"}, + {file = "pillow-12.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:b81b5e3511211631b3f672a595e3221252c90af017e399056d0faabb9538aa80"}, + {file = "pillow-12.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab323b787d6e18b3d91a72fc99b1a2c28651e4358749842b8f8dfacd28ef2052"}, + {file = "pillow-12.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984"}, + {file = "pillow-12.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bb66b7cc26f50977108790e2456b7921e773f23db5630261102233eb355a3b79"}, + {file = "pillow-12.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aee2810642b2898bb187ced9b349e95d2a7272930796e022efaf12e99dccd293"}, + {file = "pillow-12.1.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a0b1cd6232e2b618adcc54d9882e4e662a089d5768cd188f7c245b4c8c44a397"}, + {file = "pillow-12.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0"}, + {file = "pillow-12.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ab174cd7d29a62dd139c44bf74b698039328f45cb03b4596c43473a46656b2f3"}, + {file = "pillow-12.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:339ffdcb7cbeaa08221cd401d517d4b1fe7a9ed5d400e4a8039719238620ca35"}, + {file = "pillow-12.1.1-cp312-cp312-win32.whl", hash = "sha256:5d1f9575a12bed9e9eedd9a4972834b08c97a352bd17955ccdebfeca5913fa0a"}, + {file = "pillow-12.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:21329ec8c96c6e979cd0dfd29406c40c1d52521a90544463057d2aaa937d66a6"}, + {file = "pillow-12.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:af9a332e572978f0218686636610555ae3defd1633597be015ed50289a03c523"}, + {file = "pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d242e8ac078781f1de88bf823d70c1a9b3c7950a44cdf4b7c012e22ccbcd8e4e"}, + {file = "pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:02f84dfad02693676692746df05b89cf25597560db2857363a208e393429f5e9"}, + {file = "pillow-12.1.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:e65498daf4b583091ccbb2556c7000abf0f3349fcd57ef7adc9a84a394ed29f6"}, + {file = "pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60"}, + {file = "pillow-12.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b7e5304e34942bf62e15184219a7b5ad4ff7f3bb5cca4d984f37df1a0e1aee2"}, + {file = "pillow-12.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:18e5bddd742a44b7e6b1e773ab5db102bd7a94c32555ba656e76d319d19c3850"}, + {file = "pillow-12.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc44ef1f3de4f45b50ccf9136999d71abb99dca7706bc75d222ed350b9fd2289"}, + {file = "pillow-12.1.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a8eb7ed8d4198bccbd07058416eeec51686b498e784eda166395a23eb99138e"}, + {file = "pillow-12.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47b94983da0c642de92ced1702c5b6c292a84bd3a8e1d1702ff923f183594717"}, + {file = "pillow-12.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:518a48c2aab7ce596d3bf79d0e275661b846e86e4d0e7dec34712c30fe07f02a"}, + {file = "pillow-12.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a550ae29b95c6dc13cf69e2c9dc5747f814c54eeb2e32d683e5e93af56caa029"}, + {file = "pillow-12.1.1-cp313-cp313-win32.whl", hash = "sha256:a003d7422449f6d1e3a34e3dd4110c22148336918ddbfc6a32581cd54b2e0b2b"}, + {file = "pillow-12.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:344cf1e3dab3be4b1fa08e449323d98a2a3f819ad20f4b22e77a0ede31f0faa1"}, + {file = "pillow-12.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c0dd1636633e7e6a0afe7bf6a51a14992b7f8e60de5789018ebbdfae55b040a"}, + {file = "pillow-12.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0330d233c1a0ead844fc097a7d16c0abff4c12e856c0b325f231820fee1f39da"}, + {file = "pillow-12.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5dae5f21afb91322f2ff791895ddd8889e5e947ff59f71b46041c8ce6db790bc"}, + {file = "pillow-12.1.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e0c664be47252947d870ac0d327fea7e63985a08794758aa8af5b6cb6ec0c9c"}, + {file = "pillow-12.1.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:691ab2ac363b8217f7d31b3497108fb1f50faab2f75dfb03284ec2f217e87bf8"}, + {file = "pillow-12.1.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9e8064fb1cc019296958595f6db671fba95209e3ceb0c4734c9baf97de04b20"}, + {file = "pillow-12.1.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:472a8d7ded663e6162dafdf20015c486a7009483ca671cece7a9279b512fcb13"}, + {file = "pillow-12.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:89b54027a766529136a06cfebeecb3a04900397a3590fd252160b888479517bf"}, + {file = "pillow-12.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:86172b0831b82ce4f7877f280055892b31179e1576aa00d0df3bb1bbf8c3e524"}, + {file = "pillow-12.1.1-cp313-cp313t-win32.whl", hash = "sha256:44ce27545b6efcf0fdbdceb31c9a5bdea9333e664cda58a7e674bb74608b3986"}, + {file = "pillow-12.1.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a285e3eb7a5a45a2ff504e31f4a8d1b12ef62e84e5411c6804a42197c1cf586c"}, + {file = "pillow-12.1.1-cp313-cp313t-win_arm64.whl", hash = "sha256:cc7d296b5ea4d29e6570dabeaed58d31c3fea35a633a69679fb03d7664f43fb3"}, + {file = "pillow-12.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:417423db963cb4be8bac3fc1204fe61610f6abeed1580a7a2cbb2fbda20f12af"}, + {file = "pillow-12.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:b957b71c6b2387610f556a7eb0828afbe40b4a98036fc0d2acfa5a44a0c2036f"}, + {file = "pillow-12.1.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:097690ba1f2efdeb165a20469d59d8bb03c55fb6621eb2041a060ae8ea3e9642"}, + {file = "pillow-12.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2815a87ab27848db0321fb78c7f0b2c8649dee134b7f2b80c6a45c6831d75ccd"}, + {file = "pillow-12.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f7ed2c6543bad5a7d5530eb9e78c53132f93dfa44a28492db88b41cdab885202"}, + {file = "pillow-12.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:652a2c9ccfb556235b2b501a3a7cf3742148cd22e04b5625c5fe057ea3e3191f"}, + {file = "pillow-12.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d6e4571eedf43af33d0fc233a382a76e849badbccdf1ac438841308652a08e1f"}, + {file = "pillow-12.1.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b574c51cf7d5d62e9be37ba446224b59a2da26dc4c1bb2ecbe936a4fb1a7cb7f"}, + {file = "pillow-12.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a37691702ed687799de29a518d63d4682d9016932db66d4e90c345831b02fb4e"}, + {file = "pillow-12.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f95c00d5d6700b2b890479664a06e754974848afaae5e21beb4d83c106923fd0"}, + {file = "pillow-12.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:559b38da23606e68681337ad74622c4dbba02254fc9cb4488a305dd5975c7eeb"}, + {file = "pillow-12.1.1-cp314-cp314-win32.whl", hash = "sha256:03edcc34d688572014ff223c125a3f77fb08091e4607e7745002fc214070b35f"}, + {file = "pillow-12.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:50480dcd74fa63b8e78235957d302d98d98d82ccbfac4c7e12108ba9ecbdba15"}, + {file = "pillow-12.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:5cb1785d97b0c3d1d1a16bc1d710c4a0049daefc4935f3a8f31f827f4d3d2e7f"}, + {file = "pillow-12.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:1f90cff8aa76835cba5769f0b3121a22bd4eb9e6884cfe338216e557a9a548b8"}, + {file = "pillow-12.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1f1be78ce9466a7ee64bfda57bdba0f7cc499d9794d518b854816c41bf0aa4e9"}, + {file = "pillow-12.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:42fc1f4677106188ad9a55562bbade416f8b55456f522430fadab3cef7cd4e60"}, + {file = "pillow-12.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98edb152429ab62a1818039744d8fbb3ccab98a7c29fc3d5fcef158f3f1f68b7"}, + {file = "pillow-12.1.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d470ab1178551dd17fdba0fef463359c41aaa613cdcd7ff8373f54be629f9f8f"}, + {file = "pillow-12.1.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6408a7b064595afcab0a49393a413732a35788f2a5092fdc6266952ed67de586"}, + {file = "pillow-12.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5d8c41325b382c07799a3682c1c258469ea2ff97103c53717b7893862d0c98ce"}, + {file = "pillow-12.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c7697918b5be27424e9ce568193efd13d925c4481dd364e43f5dff72d33e10f8"}, + {file = "pillow-12.1.1-cp314-cp314t-win32.whl", hash = "sha256:d2912fd8114fc5545aa3a4b5576512f64c55a03f3ebcca4c10194d593d43ea36"}, + {file = "pillow-12.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:4ceb838d4bd9dab43e06c363cab2eebf63846d6a4aeaea283bbdfd8f1a8ed58b"}, + {file = "pillow-12.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:7b03048319bfc6170e93bd60728a1af51d3dd7704935feb228c4d4faab35d334"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:600fd103672b925fe62ed08e0d874ea34d692474df6f4bf7ebe148b30f89f39f"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:665e1b916b043cef294bc54d47bf02d87e13f769bc4bc5fa225a24b3a6c5aca9"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:495c302af3aad1ca67420ddd5c7bd480c8867ad173528767d906428057a11f0e"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8fd420ef0c52c88b5a035a0886f367748c72147b2b8f384c9d12656678dfdfa9"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f975aa7ef9684ce7e2c18a3aa8f8e2106ce1e46b94ab713d156b2898811651d3"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8089c852a56c2966cf18835db62d9b34fef7ba74c726ad943928d494fa7f4735"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:cb9bb857b2d057c6dfc72ac5f3b44836924ba15721882ef103cecb40d002d80e"}, + {file = "pillow-12.1.1.tar.gz", hash = "sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-autobuild", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +test-arrow = ["arro3-compute", "arro3-core", "nanoarrow", "pyarrow"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma (>=5)", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "trove-classifiers (>=2024.10.12)"] +xmp = ["defusedxml"] + +[[package]] +name = "protobuf" +version = "6.33.6" +description = "" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "protobuf-6.33.6-cp310-abi3-win32.whl", hash = "sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3"}, + {file = "protobuf-6.33.6-cp310-abi3-win_amd64.whl", hash = "sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326"}, + {file = "protobuf-6.33.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a"}, + {file = "protobuf-6.33.6-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2"}, + {file = "protobuf-6.33.6-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3"}, + {file = "protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593"}, + {file = "protobuf-6.33.6-cp39-cp39-win32.whl", hash = "sha256:bd56799fb262994b2c2faa1799693c95cc2e22c62f56fb43af311cae45d26f0e"}, + {file = "protobuf-6.33.6-cp39-cp39-win_amd64.whl", hash = "sha256:f443a394af5ed23672bc6c486be138628fbe5c651ccbc536873d7da23d1868cf"}, + {file = "protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901"}, + {file = "protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135"}, +] + +[[package]] +name = "pyarrow" +version = "23.0.1" +description = "Python library for Apache Arrow" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "pyarrow-23.0.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:3fab8f82571844eb3c460f90a75583801d14ca0cc32b1acc8c361650e006fd56"}, + {file = "pyarrow-23.0.1-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:3f91c038b95f71ddfc865f11d5876c42f343b4495535bd262c7b321b0b94507c"}, + {file = "pyarrow-23.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:d0744403adabef53c985a7f8a082b502a368510c40d184df349a0a8754533258"}, + {file = "pyarrow-23.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:c33b5bf406284fd0bba436ed6f6c3ebe8e311722b441d89397c54f871c6863a2"}, + {file = "pyarrow-23.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ddf743e82f69dcd6dbbcb63628895d7161e04e56794ef80550ac6f3315eeb1d5"}, + {file = "pyarrow-23.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e052a211c5ac9848ae15d5ec875ed0943c0221e2fcfe69eee80b604b4e703222"}, + {file = "pyarrow-23.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5abde149bb3ce524782d838eb67ac095cd3fd6090eba051130589793f1a7f76d"}, + {file = "pyarrow-23.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:6f0147ee9e0386f519c952cc670eb4a8b05caa594eeffe01af0e25f699e4e9bb"}, + {file = "pyarrow-23.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:0ae6e17c828455b6265d590100c295193f93cc5675eb0af59e49dbd00d2de350"}, + {file = "pyarrow-23.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:fed7020203e9ef273360b9e45be52a2a47d3103caf156a30ace5247ffb51bdbd"}, + {file = "pyarrow-23.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:26d50dee49d741ac0e82185033488d28d35be4d763ae6f321f97d1140eb7a0e9"}, + {file = "pyarrow-23.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3c30143b17161310f151f4a2bcfe41b5ff744238c1039338779424e38579d701"}, + {file = "pyarrow-23.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db2190fa79c80a23fdd29fef4b8992893f024ae7c17d2f5f4db7171fa30c2c78"}, + {file = "pyarrow-23.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:f00f993a8179e0e1c9713bcc0baf6d6c01326a406a9c23495ec1ba9c9ebf2919"}, + {file = "pyarrow-23.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f4b0dbfa124c0bb161f8b5ebb40f1a680b70279aa0c9901d44a2b5a20806039f"}, + {file = "pyarrow-23.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:7707d2b6673f7de054e2e83d59f9e805939038eebe1763fe811ee8fa5c0cd1a7"}, + {file = "pyarrow-23.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:86ff03fb9f1a320266e0de855dee4b17da6794c595d207f89bba40d16b5c78b9"}, + {file = "pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:813d99f31275919c383aab17f0f455a04f5a429c261cc411b1e9a8f5e4aaaa05"}, + {file = "pyarrow-23.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bf5842f960cddd2ef757d486041d57c96483efc295a8c4a0e20e704cbbf39c67"}, + {file = "pyarrow-23.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564baf97c858ecc03ec01a41062e8f4698abc3e6e2acd79c01c2e97880a19730"}, + {file = "pyarrow-23.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:07deae7783782ac7250989a7b2ecde9b3c343a643f82e8a4df03d93b633006f0"}, + {file = "pyarrow-23.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6b8fda694640b00e8af3c824f99f789e836720aa8c9379fb435d4c4953a756b8"}, + {file = "pyarrow-23.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:8ff51b1addc469b9444b7c6f3548e19dc931b172ab234e995a60aea9f6e6025f"}, + {file = "pyarrow-23.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:71c5be5cbf1e1cb6169d2a0980850bccb558ddc9b747b6206435313c47c37677"}, + {file = "pyarrow-23.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9b6f4f17b43bc39d56fec96e53fe89d94bac3eb134137964371b45352d40d0c2"}, + {file = "pyarrow-23.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fc13fc6c403d1337acab46a2c4346ca6c9dec5780c3c697cf8abfd5e19b6b37"}, + {file = "pyarrow-23.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5c16ed4f53247fa3ffb12a14d236de4213a4415d127fe9cebed33d51671113e2"}, + {file = "pyarrow-23.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:cecfb12ef629cf6be0b1887f9f86463b0dd3dc3195ae6224e74006be4736035a"}, + {file = "pyarrow-23.0.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:29f7f7419a0e30264ea261fdc0e5fe63ce5a6095003db2945d7cd78df391a7e1"}, + {file = "pyarrow-23.0.1-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:33d648dc25b51fd8055c19e4261e813dfc4d2427f068bcecc8b53d01b81b0500"}, + {file = "pyarrow-23.0.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:cd395abf8f91c673dd3589cadc8cc1ee4e8674fa61b2e923c8dd215d9c7d1f41"}, + {file = "pyarrow-23.0.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:00be9576d970c31defb5c32eb72ef585bf600ef6d0a82d5eccaae96639cf9d07"}, + {file = "pyarrow-23.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c2139549494445609f35a5cda4eb94e2c9e4d704ce60a095b342f82460c73a83"}, + {file = "pyarrow-23.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7044b442f184d84e2351e5084600f0d7343d6117aabcbc1ac78eb1ae11eb4125"}, + {file = "pyarrow-23.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a35581e856a2fafa12f3f54fce4331862b1cfb0bef5758347a858a4aa9d6bae8"}, + {file = "pyarrow-23.0.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:5df1161da23636a70838099d4aaa65142777185cc0cdba4037a18cee7d8db9ca"}, + {file = "pyarrow-23.0.1-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:fa8e51cb04b9f8c9c5ace6bab63af9a1f88d35c0d6cbf53e8c17c098552285e1"}, + {file = "pyarrow-23.0.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b95a3994f015be13c63148fef8832e8a23938128c185ee951c98908a696e0eb"}, + {file = "pyarrow-23.0.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4982d71350b1a6e5cfe1af742c53dfb759b11ce14141870d05d9e540d13bc5d1"}, + {file = "pyarrow-23.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c250248f1fe266db627921c89b47b7c06fee0489ad95b04d50353537d74d6886"}, + {file = "pyarrow-23.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f4763b83c11c16e5f4c15601ba6dfa849e20723b46aa2617cb4bffe8768479f"}, + {file = "pyarrow-23.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:3a4c85ef66c134161987c17b147d6bffdca4566f9a4c1d81a0a01cdf08414ea5"}, + {file = "pyarrow-23.0.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:17cd28e906c18af486a499422740298c52d7c6795344ea5002a7720b4eadf16d"}, + {file = "pyarrow-23.0.1-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:76e823d0e86b4fb5e1cf4a58d293036e678b5a4b03539be933d3b31f9406859f"}, + {file = "pyarrow-23.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a62e1899e3078bf65943078b3ad2a6ddcacf2373bc06379aac61b1e548a75814"}, + {file = "pyarrow-23.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:df088e8f640c9fae3b1f495b3c64755c4e719091caf250f3a74d095ddf3c836d"}, + {file = "pyarrow-23.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:46718a220d64677c93bc243af1d44b55998255427588e400677d7192671845c7"}, + {file = "pyarrow-23.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a09f3876e87f48bc2f13583ab551f0379e5dfb83210391e68ace404181a20690"}, + {file = "pyarrow-23.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:527e8d899f14bd15b740cd5a54ad56b7f98044955373a17179d5956ddb93d9ce"}, + {file = "pyarrow-23.0.1.tar.gz", hash = "sha256:b8c5873e33440b2bc2f4a79d2b47017a89c5a24116c055625e6f2ee50523f019"}, +] + +[[package]] +name = "pycparser" +version = "3.0" +description = "C parser in Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"" +files = [ + {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, + {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, +] + +[[package]] +name = "pydeck" +version = "0.9.1" +description = "Widget for deck.gl maps" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pydeck-0.9.1-py2.py3-none-any.whl", hash = "sha256:b3f75ba0d273fc917094fa61224f3f6076ca8752b93d46faf3bcfd9f9d59b038"}, + {file = "pydeck-0.9.1.tar.gz", hash = "sha256:f74475ae637951d63f2ee58326757f8d4f9cd9f2a457cf42950715003e2cb605"}, +] + +[package.dependencies] +jinja2 = ">=2.10.1" +numpy = ">=1.16.4" + +[package.extras] +carto = ["pydeck-carto"] +jupyter = ["ipykernel (>=5.1.2) ; python_version >= \"3.4\"", "ipython (>=5.8.0) ; python_version < \"3.4\"", "ipywidgets (>=7,<8)", "traitlets (>=4.3.2)"] + +[[package]] +name = "pygments" +version = "2.20.0" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"}, + {file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2026.1.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a"}, + {file = "pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1"}, +] + +[[package]] +name = "referencing" +version = "0.37.0" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, + {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" +typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} + +[[package]] +name = "regex" +version = "2026.4.4" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "regex-2026.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:74fa82dcc8143386c7c0392e18032009d1db715c25f4ba22d23dc2e04d02a20f"}, + {file = "regex-2026.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a85b620a388d6c9caa12189233109e236b3da3deffe4ff11b84ae84e218a274f"}, + {file = "regex-2026.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2895506ebe32cc63eeed8f80e6eae453171cfccccab35b70dc3129abec35a5b8"}, + {file = "regex-2026.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6780f008ee81381c737634e75c24e5a6569cc883c4f8e37a37917ee79efcafd9"}, + {file = "regex-2026.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:88e9b048345c613f253bea4645b2fe7e579782b82cac99b1daad81e29cc2ed8e"}, + {file = "regex-2026.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:be061028481186ba62a0f4c5f1cc1e3d5ab8bce70c89236ebe01023883bc903b"}, + {file = "regex-2026.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d2228c02b368d69b724c36e96d3d1da721561fb9cc7faa373d7bf65e07d75cb5"}, + {file = "regex-2026.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0540e5b733618a2f84e9cb3e812c8afa82e151ca8e19cf6c4e95c5a65198236f"}, + {file = "regex-2026.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cf9b1b2e692d4877880388934ac746c99552ce6bf40792a767fd42c8c99f136d"}, + {file = "regex-2026.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:011bb48bffc1b46553ac704c975b3348717f4e4aa7a67522b51906f99da1820c"}, + {file = "regex-2026.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8512fcdb43f1bf18582698a478b5ab73f9c1667a5b7548761329ef410cd0a760"}, + {file = "regex-2026.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:867bddc63109a0276f5a31999e4c8e0eb7bbbad7d6166e28d969a2c1afeb97f9"}, + {file = "regex-2026.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1b9a00b83f3a40e09859c78920571dcb83293c8004079653dd22ec14bbfa98c7"}, + {file = "regex-2026.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e355be718caf838aa089870259cf1776dc2a4aa980514af9d02c59544d9a8b22"}, + {file = "regex-2026.4.4-cp310-cp310-win32.whl", hash = "sha256:33bfda9684646d323414df7abe5692c61d297dbb0530b28ec66442e768813c59"}, + {file = "regex-2026.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:0709f22a56798457ae317bcce42aacee33c680068a8f14097430d9f9ba364bee"}, + {file = "regex-2026.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:ee9627de8587c1a22201cb16d0296ab92b4df5cdcb5349f4e9744d61db7c7c98"}, + {file = "regex-2026.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4c36a85b00fadb85db9d9e90144af0a980e1a3d2ef9cd0f8a5bef88054657c6"}, + {file = "regex-2026.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dcb5453ecf9cd58b562967badd1edbf092b0588a3af9e32ee3d05c985077ce87"}, + {file = "regex-2026.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6aa809ed4dc3706cc38594d67e641601bd2f36d5555b2780ff074edfcb136cf8"}, + {file = "regex-2026.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33424f5188a7db12958246a54f59a435b6cb62c5cf9c8d71f7cc49475a5fdada"}, + {file = "regex-2026.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7d346fccdde28abba117cc9edc696b9518c3307fbfcb689e549d9b5979018c6d"}, + {file = "regex-2026.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:415a994b536440f5011aa77e50a4274d15da3245e876e5c7f19da349caaedd87"}, + {file = "regex-2026.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21e5eb86179b4c67b5759d452ea7c48eb135cd93308e7a260aa489ed2eb423a4"}, + {file = "regex-2026.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:312ec9dd1ae7d96abd8c5a36a552b2139931914407d26fba723f9e53c8186f86"}, + {file = "regex-2026.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a0d2b28aa1354c7cd7f71b7658c4326f7facac106edd7f40eda984424229fd59"}, + {file = "regex-2026.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:349d7310eddff40429a099c08d995c6d4a4bfaf3ff40bd3b5e5cb5a5a3c7d453"}, + {file = "regex-2026.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:e7ab63e9fe45a9ec3417509e18116b367e89c9ceb6219222a3396fa30b147f80"}, + {file = "regex-2026.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fe896e07a5a2462308297e515c0054e9ec2dd18dfdc9427b19900b37dfe6f40b"}, + {file = "regex-2026.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eb59c65069498dbae3c0ef07bbe224e1eaa079825a437fb47a479f0af11f774f"}, + {file = "regex-2026.4.4-cp311-cp311-win32.whl", hash = "sha256:2a5d273181b560ef8397c8825f2b9d57013de744da9e8257b8467e5da8599351"}, + {file = "regex-2026.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:9542ccc1e689e752594309444081582f7be2fdb2df75acafea8a075108566735"}, + {file = "regex-2026.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:b5f9fb784824a042be3455b53d0b112655686fdb7a91f88f095f3fee1e2a2a54"}, + {file = "regex-2026.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c07ab8794fa929e58d97a0e1796b8b76f70943fa39df225ac9964615cf1f9d52"}, + {file = "regex-2026.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c785939dc023a1ce4ec09599c032cc9933d258a998d16ca6f2b596c010940eb"}, + {file = "regex-2026.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b1ce5c81c9114f1ce2f9288a51a8fd3aeea33a0cc440c415bf02da323aa0a76"}, + {file = "regex-2026.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:760ef21c17d8e6a4fe8cf406a97cf2806a4df93416ccc82fc98d25b1c20425be"}, + {file = "regex-2026.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7088fcdcb604a4417c208e2169715800d28838fefd7455fbe40416231d1d47c1"}, + {file = "regex-2026.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:07edca1ba687998968f7db5bc355288d0c6505caa7374f013d27356d93976d13"}, + {file = "regex-2026.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:993f657a7c1c6ec51b5e0ba97c9817d06b84ea5fa8d82e43b9405de0defdc2b9"}, + {file = "regex-2026.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2b69102a743e7569ebee67e634a69c4cb7e59d6fa2e1aa7d3bdbf3f61435f62d"}, + {file = "regex-2026.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dac006c8b6dda72d86ea3d1333d45147de79a3a3f26f10c1cf9287ca4ca0ac3"}, + {file = "regex-2026.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:50a766ee2010d504554bfb5f578ed2e066898aa26411d57e6296230627cdefa0"}, + {file = "regex-2026.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9e2f5217648f68e3028c823df58663587c1507a5ba8419f4fdfc8a461be76043"}, + {file = "regex-2026.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:39d8de85a08e32632974151ba59c6e9140646dcc36c80423962b1c5c0a92e244"}, + {file = "regex-2026.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55d9304e0e7178dfb1e106c33edf834097ddf4a890e2f676f6c5118f84390f73"}, + {file = "regex-2026.4.4-cp312-cp312-win32.whl", hash = "sha256:04bb679bc0bde8a7bfb71e991493d47314e7b98380b083df2447cda4b6edb60f"}, + {file = "regex-2026.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:db0ac18435a40a2543dbb3d21e161a6c78e33e8159bd2e009343d224bb03bb1b"}, + {file = "regex-2026.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:4ce255cc05c1947a12989c6db801c96461947adb7a59990f1360b5983fab4983"}, + {file = "regex-2026.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:62f5519042c101762509b1d717b45a69c0139d60414b3c604b81328c01bd1943"}, + {file = "regex-2026.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3790ba9fb5dd76715a7afe34dbe603ba03f8820764b1dc929dd08106214ed031"}, + {file = "regex-2026.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8fae3c6e795d7678963f2170152b0d892cf6aee9ee8afc8c45e6be38d5107fe7"}, + {file = "regex-2026.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:298c3ec2d53225b3bf91142eb9691025bab610e0c0c51592dde149db679b3d17"}, + {file = "regex-2026.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e9638791082eaf5b3ac112c587518ee78e083a11c4b28012d8fe2a0f536dfb17"}, + {file = "regex-2026.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ae3e764bd4c5ff55035dc82a8d49acceb42a5298edf6eb2fc4d328ee5dd7afae"}, + {file = "regex-2026.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ffa81f81b80047ba89a3c69ae6a0f78d06f4a42ce5126b0eb2a0a10ad44e0b2e"}, + {file = "regex-2026.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f56ebf9d70305307a707911b88469213630aba821e77de7d603f9d2f0730687d"}, + {file = "regex-2026.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:773d1dfd652bbffb09336abf890bfd64785c7463716bf766d0eb3bc19c8b7f27"}, + {file = "regex-2026.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d51d20befd5275d092cdffba57ded05f3c436317ee56466c8928ac32d960edaf"}, + {file = "regex-2026.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:0a51cdb3c1e9161154f976cb2bef9894bc063ac82f31b733087ffb8e880137d0"}, + {file = "regex-2026.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ae5266a82596114e41fb5302140e9630204c1b5f325c770bec654b95dd54b0aa"}, + {file = "regex-2026.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c882cd92ec68585e9c1cf36c447ec846c0d94edd706fe59e0c198e65822fd23b"}, + {file = "regex-2026.4.4-cp313-cp313-win32.whl", hash = "sha256:05568c4fbf3cb4fa9e28e3af198c40d3237cf6041608a9022285fe567ec3ad62"}, + {file = "regex-2026.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:3384df51ed52db0bea967e21458ab0a414f67cdddfd94401688274e55147bb81"}, + {file = "regex-2026.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:acd38177bd2c8e69a411d6521760806042e244d0ef94e2dd03ecdaa8a3c99427"}, + {file = "regex-2026.4.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f94a11a9d05afcfcfa640e096319720a19cc0c9f7768e1a61fceee6a3afc6c7c"}, + {file = "regex-2026.4.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:36bcb9d6d1307ab629edc553775baada2aefa5c50ccc0215fbfd2afcfff43141"}, + {file = "regex-2026.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261c015b3e2ed0919157046d768774ecde57f03d8fa4ba78d29793447f70e717"}, + {file = "regex-2026.4.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c228cf65b4a54583763645dcd73819b3b381ca8b4bb1b349dee1c135f4112c07"}, + {file = "regex-2026.4.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dd2630faeb6876fb0c287f664d93ddce4d50cd46c6e88e60378c05c9047e08ca"}, + {file = "regex-2026.4.4-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6a50ab11b7779b849472337191f3a043e27e17f71555f98d0092fa6d73364520"}, + {file = "regex-2026.4.4-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0734f63afe785138549fbe822a8cfeaccd1bae814c5057cc0ed5b9f2de4fc883"}, + {file = "regex-2026.4.4-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c4ee50606cb1967db7e523224e05f32089101945f859928e65657a2cbb3d278b"}, + {file = "regex-2026.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6c1818f37be3ca02dcb76d63f2c7aaba4b0dc171b579796c6fbe00148dfec6b1"}, + {file = "regex-2026.4.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f5bfc2741d150d0be3e4a0401a5c22b06e60acb9aa4daa46d9e79a6dcd0f135b"}, + {file = "regex-2026.4.4-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:504ffa8a03609a087cad81277a629b6ce884b51a24bd388a7980ad61748618ff"}, + {file = "regex-2026.4.4-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:70aadc6ff12e4b444586e57fc30771f86253f9f0045b29016b9605b4be5f7dfb"}, + {file = "regex-2026.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f4f83781191007b6ef43b03debc35435f10cad9b96e16d147efe84a1d48bdde4"}, + {file = "regex-2026.4.4-cp313-cp313t-win32.whl", hash = "sha256:e014a797de43d1847df957c0a2a8e861d1c17547ee08467d1db2c370b7568baa"}, + {file = "regex-2026.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:b15b88b0d52b179712632832c1d6e58e5774f93717849a41096880442da41ab0"}, + {file = "regex-2026.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:586b89cdadf7d67bf86ae3342a4dcd2b8d70a832d90c18a0ae955105caf34dbe"}, + {file = "regex-2026.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2da82d643fa698e5e5210e54af90181603d5853cf469f5eedf9bfc8f59b4b8c7"}, + {file = "regex-2026.4.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:54a1189ad9d9357760557c91103d5e421f0a2dabe68a5cdf9103d0dcf4e00752"}, + {file = "regex-2026.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:76d67d5afb1fe402d10a6403bae668d000441e2ab115191a804287d53b772951"}, + {file = "regex-2026.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e7cd3e4ee8d80447a83bbc9ab0c8459781fa77087f856c3e740d7763be0df27f"}, + {file = "regex-2026.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e19e18c568d2866d8b6a6dfad823db86193503f90823a8f66689315ba28fbe8"}, + {file = "regex-2026.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7698a6f38730fd1385d390d1ed07bb13dce39aa616aca6a6d89bea178464b9a4"}, + {file = "regex-2026.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:173a66f3651cdb761018078e2d9487f4cf971232c990035ec0eb1cdc6bf929a9"}, + {file = "regex-2026.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa7922bbb2cc84fa062d37723f199d4c0cd200245ce269c05db82d904db66b83"}, + {file = "regex-2026.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:59f67cd0a0acaf0e564c20bbd7f767286f23e91e2572c5703bf3e56ea7557edb"}, + {file = "regex-2026.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:475e50f3f73f73614f7cba5524d6de49dee269df00272a1b85e3d19f6d498465"}, + {file = "regex-2026.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:a1c0c7d67b64d85ac2e1879923bad2f08a08f3004055f2f406ef73c850114bd4"}, + {file = "regex-2026.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:1371c2ccbb744d66ee63631cc9ca12aa233d5749972626b68fe1a649dd98e566"}, + {file = "regex-2026.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:59968142787042db793348a3f5b918cf24ced1f23247328530e063f89c128a95"}, + {file = "regex-2026.4.4-cp314-cp314-win32.whl", hash = "sha256:59efe72d37fd5a91e373e5146f187f921f365f4abc1249a5ab446a60f30dd5f8"}, + {file = "regex-2026.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:e0aab3ff447845049d676827d2ff714aab4f73f340e155b7de7458cf53baa5a4"}, + {file = "regex-2026.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:a7a5bb6aa0cf62208bb4fa079b0c756734f8ad0e333b425732e8609bd51ee22f"}, + {file = "regex-2026.4.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:97850d0638391bdc7d35dc1c1039974dcb921eaafa8cc935ae4d7f272b1d60b3"}, + {file = "regex-2026.4.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ee7337f88f2a580679f7bbfe69dc86c043954f9f9c541012f49abc554a962f2e"}, + {file = "regex-2026.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7429f4e6192c11d659900c0648ba8776243bf396ab95558b8c51a345afeddde6"}, + {file = "regex-2026.4.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4f10fbd5dd13dcf4265b4cc07d69ca70280742870c97ae10093e3d66000359"}, + {file = "regex-2026.4.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a152560af4f9742b96f3827090f866eeec5becd4765c8e0d3473d9d280e76a5a"}, + {file = "regex-2026.4.4-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54170b3e95339f415d54651f97df3bff7434a663912f9358237941bbf9143f55"}, + {file = "regex-2026.4.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:07f190d65f5a72dcb9cf7106bfc3d21e7a49dd2879eda2207b683f32165e4d99"}, + {file = "regex-2026.4.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9a2741ce5a29d3c84b0b94261ba630ab459a1b847a0d6beca7d62d188175c790"}, + {file = "regex-2026.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b26c30df3a28fd9793113dac7385a4deb7294a06c0f760dd2b008bd49a9139bc"}, + {file = "regex-2026.4.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:421439d1bee44b19f4583ccf42670ca464ffb90e9fdc38d37f39d1ddd1e44f1f"}, + {file = "regex-2026.4.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:b40379b53ecbc747fd9bdf4a0ea14eb8188ca1bd0f54f78893a39024b28f4863"}, + {file = "regex-2026.4.4-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:08c55c13d2eef54f73eeadc33146fb0baaa49e7335eb1aff6ae1324bf0ddbe4a"}, + {file = "regex-2026.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9776b85f510062f5a75ef112afe5f494ef1635607bf1cc220c1391e9ac2f5e81"}, + {file = "regex-2026.4.4-cp314-cp314t-win32.whl", hash = "sha256:385edaebde5db5be103577afc8699fea73a0e36a734ba24870be7ffa61119d74"}, + {file = "regex-2026.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:5d354b18839328927832e2fa5f7c95b7a3ccc39e7a681529e1685898e6436d45"}, + {file = "regex-2026.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:af0384cb01a33600c49505c27c6c57ab0b27bf84a74e28524c92ca897ebdac9d"}, + {file = "regex-2026.4.4.tar.gz", hash = "sha256:e08270659717f6973523ce3afbafa53515c4dc5dcad637dc215b6fd50f689423"}, +] + +[[package]] +name = "requests" +version = "2.33.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "requests-2.33.0-py3-none-any.whl", hash = "sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b"}, + {file = "requests-2.33.0.tar.gz", hash = "sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652"}, +] + +[package.dependencies] +certifi = ">=2023.5.7" +charset_normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.26,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +test = ["PySocks (>=1.5.6,!=1.5.7)", "pytest (>=3)", "pytest-cov", "pytest-httpbin (==2.1.0)", "pytest-mock", "pytest-xdist"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<8)"] + +[[package]] +name = "rich" +version = "14.3.3" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.8.0" +groups = ["main"] +files = [ + {file = "rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d"}, + {file = "rich-14.3.3.tar.gz", hash = "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rpds-py" +version = "0.30.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288"}, + {file = "rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221"}, + {file = "rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7"}, + {file = "rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff"}, + {file = "rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7"}, + {file = "rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139"}, + {file = "rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464"}, + {file = "rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169"}, + {file = "rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425"}, + {file = "rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d"}, + {file = "rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038"}, + {file = "rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7"}, + {file = "rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed"}, + {file = "rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85"}, + {file = "rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c"}, + {file = "rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825"}, + {file = "rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229"}, + {file = "rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad"}, + {file = "rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6"}, + {file = "rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51"}, + {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5"}, + {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e"}, + {file = "rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394"}, + {file = "rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf"}, + {file = "rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b"}, + {file = "rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e"}, + {file = "rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2"}, + {file = "rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e"}, + {file = "rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d"}, + {file = "rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7"}, + {file = "rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31"}, + {file = "rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95"}, + {file = "rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d"}, + {file = "rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15"}, + {file = "rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1"}, + {file = "rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a"}, + {file = "rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9"}, + {file = "rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0"}, + {file = "rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94"}, + {file = "rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08"}, + {file = "rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27"}, + {file = "rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6"}, + {file = "rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d"}, + {file = "rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0"}, + {file = "rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07"}, + {file = "rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f"}, + {file = "rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65"}, + {file = "rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f"}, + {file = "rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53"}, + {file = "rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed"}, + {file = "rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950"}, + {file = "rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6"}, + {file = "rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb"}, + {file = "rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8"}, + {file = "rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5"}, + {file = "rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404"}, + {file = "rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856"}, + {file = "rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40"}, + {file = "rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0"}, + {file = "rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4"}, + {file = "rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e"}, + {file = "rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84"}, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "smmap" +version = "5.0.3" +description = "A pure Python implementation of a sliding window memory map manager" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f"}, + {file = "smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c"}, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.48" +description = "Database Abstraction Library" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "sqlalchemy-2.0.48-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7001dc9d5f6bb4deb756d5928eaefe1930f6f4179da3924cbd95ee0e9f4dce89"}, + {file = "sqlalchemy-2.0.48-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1a89ce07ad2d4b8cfc30bd5889ec40613e028ed80ef47da7d9dd2ce969ad30e0"}, + {file = "sqlalchemy-2.0.48-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10853a53a4a00417a00913d270dddda75815fcb80675874285f41051c094d7dd"}, + {file = "sqlalchemy-2.0.48-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fac0fa4e4f55f118fd87177dacb1c6522fe39c28d498d259014020fec9164c29"}, + {file = "sqlalchemy-2.0.48-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3713e21ea67bca727eecd4a24bf68bcd414c403faae4989442be60994301ded0"}, + {file = "sqlalchemy-2.0.48-cp310-cp310-win32.whl", hash = "sha256:d404dc897ce10e565d647795861762aa2d06ca3f4a728c5e9a835096c7059018"}, + {file = "sqlalchemy-2.0.48-cp310-cp310-win_amd64.whl", hash = "sha256:841a94c66577661c1f088ac958cd767d7c9bf507698f45afffe7a4017049de76"}, + {file = "sqlalchemy-2.0.48-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b4c575df7368b3b13e0cebf01d4679f9a28ed2ae6c1cd0b1d5beffb6b2007dc"}, + {file = "sqlalchemy-2.0.48-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e83e3f959aaa1c9df95c22c528096d94848a1bc819f5d0ebf7ee3df0ca63db6c"}, + {file = "sqlalchemy-2.0.48-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f7b7243850edd0b8b97043f04748f31de50cf426e939def5c16bedb540698f7"}, + {file = "sqlalchemy-2.0.48-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:82745b03b4043e04600a6b665cb98697c4339b24e34d74b0a2ac0a2488b6f94d"}, + {file = "sqlalchemy-2.0.48-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e5e088bf43f6ee6fec7dbf1ef7ff7774a616c236b5c0cb3e00662dd71a56b571"}, + {file = "sqlalchemy-2.0.48-cp311-cp311-win32.whl", hash = "sha256:9c7d0a77e36b5f4b01ca398482230ab792061d243d715299b44a0b55c89fe617"}, + {file = "sqlalchemy-2.0.48-cp311-cp311-win_amd64.whl", hash = "sha256:583849c743e0e3c9bb7446f5b5addeacedc168d657a69b418063dfdb2d90081c"}, + {file = "sqlalchemy-2.0.48-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:348174f228b99f33ca1f773e85510e08927620caa59ffe7803b37170df30332b"}, + {file = "sqlalchemy-2.0.48-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53667b5f668991e279d21f94ccfa6e45b4e3f4500e7591ae59a8012d0f010dcb"}, + {file = "sqlalchemy-2.0.48-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34634e196f620c7a61d18d5cf7dc841ca6daa7961aed75d532b7e58b309ac894"}, + {file = "sqlalchemy-2.0.48-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:546572a1793cc35857a2ffa1fe0e58571af1779bcc1ffa7c9fb0839885ed69a9"}, + {file = "sqlalchemy-2.0.48-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:07edba08061bc277bfdc772dd2a1a43978f5a45994dd3ede26391b405c15221e"}, + {file = "sqlalchemy-2.0.48-cp312-cp312-win32.whl", hash = "sha256:908a3fa6908716f803b86896a09a2c4dde5f5ce2bb07aacc71ffebb57986ce99"}, + {file = "sqlalchemy-2.0.48-cp312-cp312-win_amd64.whl", hash = "sha256:68549c403f79a8e25984376480959975212a670405e3913830614432b5daa07a"}, + {file = "sqlalchemy-2.0.48-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e3070c03701037aa418b55d36532ecb8f8446ed0135acb71c678dbdf12f5b6e4"}, + {file = "sqlalchemy-2.0.48-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2645b7d8a738763b664a12a1542c89c940daa55196e8d73e55b169cc5c99f65f"}, + {file = "sqlalchemy-2.0.48-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b19151e76620a412c2ac1c6f977ab1b9fa7ad43140178345136456d5265b32ed"}, + {file = "sqlalchemy-2.0.48-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b193a7e29fd9fa56e502920dca47dffe60f97c863494946bd698c6058a55658"}, + {file = "sqlalchemy-2.0.48-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:36ac4ddc3d33e852da9cb00ffb08cea62ca05c39711dc67062ca2bb1fae35fd8"}, + {file = "sqlalchemy-2.0.48-cp313-cp313-win32.whl", hash = "sha256:389b984139278f97757ea9b08993e7b9d1142912e046ab7d82b3fbaeb0209131"}, + {file = "sqlalchemy-2.0.48-cp313-cp313-win_amd64.whl", hash = "sha256:d612c976cbc2d17edfcc4c006874b764e85e990c29ce9bd411f926bbfb02b9a2"}, + {file = "sqlalchemy-2.0.48-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69f5bc24904d3bc3640961cddd2523e361257ef68585d6e364166dfbe8c78fae"}, + {file = "sqlalchemy-2.0.48-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd08b90d211c086181caed76931ecfa2bdfc83eea3cfccdb0f82abc6c4b876cb"}, + {file = "sqlalchemy-2.0.48-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1ccd42229aaac2df431562117ac7e667d702e8e44afdb6cf0e50fa3f18160f0b"}, + {file = "sqlalchemy-2.0.48-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f0dcbc588cd5b725162c076eb9119342f6579c7f7f55057bb7e3c6ff27e13121"}, + {file = "sqlalchemy-2.0.48-cp313-cp313t-win32.whl", hash = "sha256:9764014ef5e58aab76220c5664abb5d47d5bc858d9debf821e55cfdd0f128485"}, + {file = "sqlalchemy-2.0.48-cp313-cp313t-win_amd64.whl", hash = "sha256:e2f35b4cccd9ed286ad62e0a3c3ac21e06c02abc60e20aa51a3e305a30f5fa79"}, + {file = "sqlalchemy-2.0.48-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e2d0d88686e3d35a76f3e15a34e8c12d73fc94c1dea1cd55782e695cc14086dd"}, + {file = "sqlalchemy-2.0.48-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49b7bddc1eebf011ea5ab722fdbe67a401caa34a350d278cc7733c0e88fecb1f"}, + {file = "sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:426c5ca86415d9b8945c7073597e10de9644802e2ff502b8e1f11a7a2642856b"}, + {file = "sqlalchemy-2.0.48-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:288937433bd44e3990e7da2402fabc44a3c6c25d3704da066b85b89a85474ae0"}, + {file = "sqlalchemy-2.0.48-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8183dc57ae7d9edc1346e007e840a9f3d6aa7b7f165203a99e16f447150140d2"}, + {file = "sqlalchemy-2.0.48-cp314-cp314-win32.whl", hash = "sha256:1182437cb2d97988cfea04cf6cdc0b0bb9c74f4d56ec3d08b81e23d621a28cc6"}, + {file = "sqlalchemy-2.0.48-cp314-cp314-win_amd64.whl", hash = "sha256:144921da96c08feb9e2b052c5c5c1d0d151a292c6135623c6b2c041f2a45f9e0"}, + {file = "sqlalchemy-2.0.48-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5aee45fd2c6c0f2b9cdddf48c48535e7471e42d6fb81adfde801da0bd5b93241"}, + {file = "sqlalchemy-2.0.48-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7cddca31edf8b0653090cbb54562ca027c421c58ddde2c0685f49ff56a1690e0"}, + {file = "sqlalchemy-2.0.48-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7a936f1bb23d370b7c8cc079d5fce4c7d18da87a33c6744e51a93b0f9e97e9b3"}, + {file = "sqlalchemy-2.0.48-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e004aa9248e8cb0a5f9b96d003ca7c1c0a5da8decd1066e7b53f59eb8ce7c62b"}, + {file = "sqlalchemy-2.0.48-cp314-cp314t-win32.whl", hash = "sha256:b8438ec5594980d405251451c5b7ea9aa58dda38eb7ac35fb7e4c696712ee24f"}, + {file = "sqlalchemy-2.0.48-cp314-cp314t-win_amd64.whl", hash = "sha256:d854b3970067297f3a7fbd7a4683587134aa9b3877ee15aa29eea478dc68f933"}, + {file = "sqlalchemy-2.0.48-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8649a14caa5f8a243628b1d61cf530ad9ae4578814ba726816adb1121fc493e"}, + {file = "sqlalchemy-2.0.48-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6bb85c546591569558571aa1b06aba711b26ae62f111e15e56136d69920e1616"}, + {file = "sqlalchemy-2.0.48-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a6b764fb312bd35e47797ad2e63f0d323792837a6ac785a4ca967019357d2bc7"}, + {file = "sqlalchemy-2.0.48-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:7c998f2ace8bf76b453b75dbcca500d4f4b9dd3908c13e89b86289b37784848b"}, + {file = "sqlalchemy-2.0.48-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d64177f443594c8697369c10e4bbcac70ef558e0f7921a1de7e4a3d1734bcf67"}, + {file = "sqlalchemy-2.0.48-cp38-cp38-win32.whl", hash = "sha256:01f6bbd4308b23240cf7d3ef117557c8fd097ec9549d5d8a52977544e35b40ad"}, + {file = "sqlalchemy-2.0.48-cp38-cp38-win_amd64.whl", hash = "sha256:858e433f12b0e5b3ed2f8da917433b634f4937d0e8793e5cb33c54a1a01df565"}, + {file = "sqlalchemy-2.0.48-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4599a95f9430ae0de82b52ff0d27304fe898c17cb5f4099f7438a51b9998ac77"}, + {file = "sqlalchemy-2.0.48-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f27f9da0a7d22b9f981108fd4b62f8b5743423388915a563e651c20d06c1f457"}, + {file = "sqlalchemy-2.0.48-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d8fcccbbc0c13c13702c471da398b8cd72ba740dca5859f148ae8e0e8e0d3e7e"}, + {file = "sqlalchemy-2.0.48-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a5b429eb84339f9f05e06083f119ad814e6d85e27ecbdf9c551dfdbb128eaf8a"}, + {file = "sqlalchemy-2.0.48-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bcb8ebbf2e2c36cfe01a94f2438012c6a9d494cf80f129d9753bcdf33bfc35a6"}, + {file = "sqlalchemy-2.0.48-cp39-cp39-win32.whl", hash = "sha256:e214d546c8ecb5fc22d6e6011746082abf13a9cf46eefb45769c7b31407c97b5"}, + {file = "sqlalchemy-2.0.48-cp39-cp39-win_amd64.whl", hash = "sha256:b8fc3454b4f3bd0a368001d0e968852dad45a873f8b4babd41bc302ec851a099"}, + {file = "sqlalchemy-2.0.48-py3-none-any.whl", hash = "sha256:a66fe406437dd65cacd96a72689a3aaaecaebbcd62d81c5ac1c0fdbeac835096"}, + {file = "sqlalchemy-2.0.48.tar.gz", hash = "sha256:5ca74f37f3369b45e1f6b7b06afb182af1fd5dde009e4ffd831830d98cbe5fe7"}, +] + +[package.dependencies] +greenlet = {version = ">=1", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +typing-extensions = ">=4.6.0" + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (>=1)"] +aioodbc = ["aioodbc", "greenlet (>=1)"] +aiosqlite = ["aiosqlite", "greenlet (>=1)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (>=1)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (>=1)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (>=1)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "streamlit" +version = "1.56.0" +description = "A faster way to build and share data apps" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "streamlit-1.56.0-py3-none-any.whl", hash = "sha256:8677a335734a30a51bc57ad0ec910e365d95f7c456fc02c60032927cd0729dc5"}, + {file = "streamlit-1.56.0.tar.gz", hash = "sha256:1176acfa89ae1318b79078e8efe689a9d02e8d58e325c00fc0e55fa2f3fe8d6a"}, +] + +[package.dependencies] +altair = ">=4.0,<5.4.0 || >5.4.0,<5.4.1 || >5.4.1,<7" +blinker = ">=1.5.0,<2" +cachetools = ">=5.5,<8" +click = ">=7.0,<9" +gitpython = ">=3.0.7,<3.1.19 || >3.1.19,<4" +numpy = ">=1.23,<3" +packaging = ">=20" +pandas = ">=1.4.0,<4" +pillow = ">=7.1.0,<13" +protobuf = ">=3.20,<8" +pyarrow = ">=7.0" +pydeck = ">=0.8.0b4,<1" +requests = ">=2.27,<3" +tenacity = ">=8.1.0,<10" +toml = ">=0.10.1,<2" +tornado = ">=6.0.3,<6.5.0 || >6.5.0,<7" +typing-extensions = ">=4.10.0,<5" +watchdog = {version = ">=2.1.5,<7", markers = "platform_system != \"Darwin\""} + +[package.extras] +all = ["rich (>=11.0.0)", "streamlit[auth,charts,pdf,performance,snowflake,sql]"] +auth = ["Authlib (>=1.3.2)"] +charts = ["graphviz (>=0.19.0)", "matplotlib (>=3.0.0)", "orjson (>=3.5.0)", "plotly (>=4.0.0)"] +pdf = ["streamlit-pdf (>=1.0.0)"] +performance = ["httptools (>=0.6.3)", "orjson (>=3.5.0)", "uvloop (>=0.15.2) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\""] +snowflake = ["snowflake-connector-python (>=3.3.0) ; python_version < \"3.12\"", "snowflake-snowpark-python[modin] (>=1.17.0) ; python_version < \"3.12\""] +sql = ["SQLAlchemy (>=2.0.0)"] +starlette = ["anyio (>=4.0.0)", "itsdangerous (>=2.1.2)", "python-multipart (>=0.0.10)", "starlette (>=0.40.0)", "uvicorn (>=0.30.0)", "websockets (>=12.0.0)"] + +[[package]] +name = "tenacity" +version = "9.1.4" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "tenacity-9.1.4-py3-none-any.whl", hash = "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55"}, + {file = "tenacity-9.1.4.tar.gz", hash = "sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a"}, +] + +[package.extras] +doc = ["reno", "sphinx"] +test = ["pytest", "tornado (>=4.5)", "typeguard"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main"] +files = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] + +[[package]] +name = "toml-cli" +version = "0.8.2" +description = "Command line interface to read and write keys/values to/from toml files" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "toml_cli-0.8.2-py3-none-any.whl", hash = "sha256:7af4679ca04c53ad0f6d300dab26f45a78fedf88e8310305bfe0a8ead37fd000"}, + {file = "toml_cli-0.8.2.tar.gz", hash = "sha256:ec61fbfe5f0d6f2d6bfd9e1127cad38a797b8685a93589f2e22efd168b0cc866"}, +] + +[package.dependencies] +jmespath = ">=1.0.1" +regex = ">=2020.7.14" +tomlkit = ">=0.13.3" +typer = ">=0.16.0" + +[[package]] +name = "tomli" +version = "2.4.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.10\"" +files = [ + {file = "tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30"}, + {file = "tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a"}, + {file = "tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076"}, + {file = "tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9"}, + {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c"}, + {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc"}, + {file = "tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049"}, + {file = "tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e"}, + {file = "tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece"}, + {file = "tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a"}, + {file = "tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085"}, + {file = "tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9"}, + {file = "tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5"}, + {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585"}, + {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1"}, + {file = "tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917"}, + {file = "tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9"}, + {file = "tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257"}, + {file = "tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54"}, + {file = "tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a"}, + {file = "tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897"}, + {file = "tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f"}, + {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d"}, + {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5"}, + {file = "tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd"}, + {file = "tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36"}, + {file = "tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd"}, + {file = "tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf"}, + {file = "tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac"}, + {file = "tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662"}, + {file = "tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853"}, + {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15"}, + {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba"}, + {file = "tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6"}, + {file = "tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7"}, + {file = "tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232"}, + {file = "tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4"}, + {file = "tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c"}, + {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d"}, + {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41"}, + {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c"}, + {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f"}, + {file = "tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8"}, + {file = "tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26"}, + {file = "tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396"}, + {file = "tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe"}, + {file = "tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f"}, +] + +[[package]] +name = "tomlkit" +version = "0.14.0" +description = "Style preserving TOML library" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "tomlkit-0.14.0-py3-none-any.whl", hash = "sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680"}, + {file = "tomlkit-0.14.0.tar.gz", hash = "sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064"}, +] + +[[package]] +name = "tornado" +version = "6.5.5" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa"}, + {file = "tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521"}, + {file = "tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5"}, + {file = "tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07"}, + {file = "tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e"}, + {file = "tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca"}, + {file = "tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7"}, + {file = "tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b"}, + {file = "tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6"}, + {file = "tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9"}, +] + +[[package]] +name = "typer" +version = "0.24.1" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "typer-0.24.1-py3-none-any.whl", hash = "sha256:112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e"}, + {file = "typer-0.24.1.tar.gz", hash = "sha256:e39b4732d65fbdcde189ae76cf7cd48aeae72919dea1fdfc16593be016256b45"}, +] + +[package.dependencies] +annotated-doc = ">=0.0.2" +click = ">=8.2.1" +rich = ">=12.3.0" +shellingham = ">=1.3.0" + +[[package]] +name = "typing-extensions" +version = "4.15.0" +description = "Backported and Experimental Type Hints for Python 3.9+" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, + {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, +] + +[[package]] +name = "tzdata" +version = "2025.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +groups = ["main"] +files = [ + {file = "tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1"}, + {file = "tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7"}, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4"}, + {file = "urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed"}, +] + +[package.extras] +brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] + +[[package]] +name = "watchdog" +version = "6.0.0" +description = "Filesystem events monitoring" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "platform_system != \"Darwin\"" +files = [ + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, + {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, + {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, + {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, + {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + +[metadata] +lock-version = "2.1" +python-versions = ">= 3.10" +content-hash = "5bb901294eb6442a052f56fd79487ffaf75b5ca5df9e07876c7542bda16fef96" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..2a95266 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,26 @@ +[project] +name = "daily-counter" +description = "A daily counter for any habbit tracking" +version = "0.1" +dynamic = ["version"] +requires-python = ">= 3.10" +dependencies = [ + "alembic (==1.18.4)", + "streamlit (==1.56.0)", + "toml-cli (==0.8.2)", + "authlib (==1.6.9)" +] + +[virtualenvs] +in-project = true + +[tool.alembic] +script_location = "%(here)s/migrations" +truncate_slug_length = 10 +file_template = "%%(year)d%%(month).2d%%(day).2d%%(hour)2d%%(minute)2d%%(second).2d_%%(slug)s" +prepend_sys_path = [ + "." +] + +[tool.poetry] +package-mode = false \ No newline at end of file