Spaces:
Sleeping
Sleeping
Commit ·
145a95e
1
Parent(s): 44aae25
Add 1f analyze
Browse files- .gitignore +3 -1
- Dockerfile +1 -1
- lab_tool_webui.py +16 -0
- lab_tools/analyze1f.py +69 -0
- lab_tools/highpass.py +12 -10
- lab_tools/labutils.py +2 -1
- lab_tools/wavelet.py +1 -0
- poetry.lock +385 -90
- pyproject.toml +3 -2
- run.py +71 -0
- run.sh +6 -3
- test.py +14 -17
.gitignore
CHANGED
|
@@ -2,5 +2,7 @@
|
|
| 2 |
*.csv
|
| 3 |
*.xls
|
| 4 |
*.png
|
|
|
|
| 5 |
__pycache__
|
| 6 |
-
flagged
|
|
|
|
|
|
| 2 |
*.csv
|
| 3 |
*.xls
|
| 4 |
*.png
|
| 5 |
+
*.mp3
|
| 6 |
__pycache__
|
| 7 |
+
flagged
|
| 8 |
+
*.DS_Store
|
Dockerfile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
FROM python:3.10.15-slim-bullseye
|
| 2 |
|
| 3 |
-
RUN apt-get update && apt-get install -y git curl
|
| 4 |
RUN git config --global --add safe.directory /app
|
| 5 |
RUN python3 -m pip install --upgrade pip
|
| 6 |
RUN python3 -m pip install poetry \
|
|
|
|
| 1 |
FROM python:3.10.15-slim-bullseye
|
| 2 |
|
| 3 |
+
RUN apt-get update && apt-get install -y git curl ffmpeg
|
| 4 |
RUN git config --global --add safe.directory /app
|
| 5 |
RUN python3 -m pip install --upgrade pip
|
| 6 |
RUN python3 -m pip install poetry \
|
lab_tool_webui.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
from lab_tools import wavelet
|
| 3 |
from lab_tools import labutils
|
|
|
|
|
|
|
| 4 |
|
| 5 |
def update_slider_range(filepath):
|
| 6 |
timestamp = labutils.load_signal(filepath, "Timestamp")
|
|
@@ -33,5 +35,19 @@ with gr.Blocks() as main_ui:
|
|
| 33 |
signal_image = gr.Image(type="filepath", label="Signal")
|
| 34 |
|
| 35 |
submit_button.click(wavelet.wavelet_ui, inputs=[file_input, fs_slider, fmax_slider, column_dropdown, start_time, end_time], outputs=[wavelet_image, signal_image])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
if __name__ == "__main__":
|
| 37 |
main_ui.queue().launch(server_name="0.0.0.0")
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
from lab_tools import wavelet
|
| 3 |
from lab_tools import labutils
|
| 4 |
+
from lab_tools import analyze1f
|
| 5 |
+
|
| 6 |
|
| 7 |
def update_slider_range(filepath):
|
| 8 |
timestamp = labutils.load_signal(filepath, "Timestamp")
|
|
|
|
| 35 |
signal_image = gr.Image(type="filepath", label="Signal")
|
| 36 |
|
| 37 |
submit_button.click(wavelet.wavelet_ui, inputs=[file_input, fs_slider, fmax_slider, column_dropdown, start_time, end_time], outputs=[wavelet_image, signal_image])
|
| 38 |
+
|
| 39 |
+
with gr.Tab("1f Noise Search"):
|
| 40 |
+
with gr.Row():
|
| 41 |
+
with gr.Column():
|
| 42 |
+
file_input = gr.Text(label="YouTubeのリンクを貼り付けてください。")
|
| 43 |
+
submit_button = gr.Button("計算開始")
|
| 44 |
+
|
| 45 |
+
with gr.Column():
|
| 46 |
+
caption = gr.Text(label="動画タイトル")
|
| 47 |
+
result = gr.Image(type="filepath", label="Wavelet")
|
| 48 |
+
|
| 49 |
+
submit_button.click(analyze1f.analyze_1f_noise, inputs=[file_input], outputs=[caption, result])
|
| 50 |
+
|
| 51 |
+
|
| 52 |
if __name__ == "__main__":
|
| 53 |
main_ui.queue().launch(server_name="0.0.0.0")
|
lab_tools/analyze1f.py
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import numpy as np
|
| 2 |
+
import matplotlib.pyplot as plt
|
| 3 |
+
from pydub import AudioSegment
|
| 4 |
+
from scipy.fftpack import fft
|
| 5 |
+
import yt_dlp
|
| 6 |
+
import os
|
| 7 |
+
import tempfile
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def download_youtube(youtube_url: str) -> str:
|
| 11 |
+
ydl_opts = {
|
| 12 |
+
'postprocessors': [
|
| 13 |
+
{
|
| 14 |
+
'key': 'FFmpegExtractAudio',
|
| 15 |
+
'preferredcodec': 'mp3',
|
| 16 |
+
'preferredquality': '128',
|
| 17 |
+
}
|
| 18 |
+
],
|
| 19 |
+
'outtmpl': '%(title)s.%(ext)s'
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
| 23 |
+
info_dict = ydl.extract_info(youtube_url, download=True)
|
| 24 |
+
file_path = ydl.prepare_filename(info_dict)
|
| 25 |
+
filename, _ = os.path.splitext(file_path)
|
| 26 |
+
filename += ".mp3"
|
| 27 |
+
print(f"Downloaded file path: {filename}")
|
| 28 |
+
|
| 29 |
+
return filename
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
def analyze_1f_noise(youtube_url: str):
|
| 33 |
+
filename = download_youtube(youtube_url)
|
| 34 |
+
audio = AudioSegment.from_mp3(filename)
|
| 35 |
+
os.remove(filename)
|
| 36 |
+
data = np.array(audio.get_array_of_samples())
|
| 37 |
+
sample_rate = audio.frame_rate
|
| 38 |
+
|
| 39 |
+
if audio.channels > 1:
|
| 40 |
+
data = data.reshape((-1, audio.channels)).mean(axis=1)
|
| 41 |
+
|
| 42 |
+
N = len(data)
|
| 43 |
+
T = 1.0 / sample_rate
|
| 44 |
+
yf = fft(data)
|
| 45 |
+
xf = np.fft.fftfreq(N, T)[:N//2]
|
| 46 |
+
|
| 47 |
+
power_spectrum = 2.0/N * np.abs(yf[:N//2])
|
| 48 |
+
|
| 49 |
+
xf_log = xf[1:]
|
| 50 |
+
power_spectrum_log = power_spectrum[1:]
|
| 51 |
+
|
| 52 |
+
graphfile_path = tempfile.NamedTemporaryFile(delete=False, suffix='.png').name
|
| 53 |
+
|
| 54 |
+
# グラフの描画
|
| 55 |
+
plt.figure(figsize=(10, 6))
|
| 56 |
+
plt.plot(xf_log, power_spectrum_log)
|
| 57 |
+
plt.xscale('log')
|
| 58 |
+
plt.yscale('log')
|
| 59 |
+
|
| 60 |
+
plt.title('Power Spectrum (Log Scale)')
|
| 61 |
+
plt.xlabel('Frequency (Hz)')
|
| 62 |
+
plt.ylabel('Power')
|
| 63 |
+
plt.grid(True, which="both", ls="--")
|
| 64 |
+
plt.xlim([1, sample_rate // 2])
|
| 65 |
+
plt.savefig(graphfile_path)
|
| 66 |
+
|
| 67 |
+
filename, _ = os.path.splitext(filename)
|
| 68 |
+
|
| 69 |
+
return filename, graphfile_path
|
lab_tools/highpass.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
| 1 |
import numpy as np
|
| 2 |
from scipy import signal
|
| 3 |
from scipy import fftpack
|
| 4 |
-
from typing import
|
|
|
|
| 5 |
|
| 6 |
def highpass_filter(signal_data: np.ndarray, samplerate: float, fp: float, fs: float, gpass: float, gstop: float) -> np.ndarray:
|
| 7 |
fn = samplerate / 2
|
|
@@ -10,9 +11,9 @@ def highpass_filter(signal_data: np.ndarray, samplerate: float, fp: float, fs: f
|
|
| 10 |
|
| 11 |
N, Wn = signal.buttord(wp, ws, gpass, gstop)
|
| 12 |
b, a = signal.butter(N, Wn, "high")
|
| 13 |
-
|
| 14 |
filtered_signal = signal.filtfilt(b, a, signal_data)
|
| 15 |
-
|
| 16 |
return filtered_signal
|
| 17 |
|
| 18 |
|
|
@@ -20,25 +21,25 @@ def overlap_frames(signal_data: np.ndarray, samplerate: float, frame_size: int,
|
|
| 20 |
total_duration = len(signal_data) / samplerate
|
| 21 |
frame_duration = frame_size / samplerate
|
| 22 |
step_size = frame_size * (1 - overlap / 100)
|
| 23 |
-
|
| 24 |
num_frames = int((total_duration - (frame_duration * overlap / 100)) / (frame_duration * (1 - overlap / 100)))
|
| 25 |
-
|
| 26 |
frames = []
|
| 27 |
-
|
| 28 |
for i in range(num_frames):
|
| 29 |
start_idx = int(step_size * i)
|
| 30 |
frames.append(signal_data[start_idx:start_idx + frame_size])
|
| 31 |
-
|
| 32 |
return np.array(frames), num_frames
|
| 33 |
|
| 34 |
|
| 35 |
def hanning(signal_data: np.ndarray, frame_size: int, num_frames: int) -> Tuple[np.ndarray, float]:
|
| 36 |
han = signal.get_window('hann', frame_size)
|
| 37 |
acf = 1 / (sum(han) / frame_size)
|
| 38 |
-
|
| 39 |
for i in range(num_frames):
|
| 40 |
signal_data[i] *= han
|
| 41 |
-
|
| 42 |
return signal_data, acf
|
| 43 |
|
| 44 |
|
|
@@ -51,9 +52,10 @@ def fft_ave(signal_data: np.ndarray, samplerate: float, frame_size: int, num_fra
|
|
| 51 |
fft_axis = np.linspace(0, samplerate / 2, frame_size // 2)
|
| 52 |
fft_array = np.array(fft_array)[:, :frame_size // 2]
|
| 53 |
fft_mean = np.mean(fft_array, axis=0)
|
| 54 |
-
|
| 55 |
return fft_array, fft_mean, fft_axis
|
| 56 |
|
|
|
|
| 57 |
def linear_to_db(x: float, y: float) -> float:
|
| 58 |
if y == 0:
|
| 59 |
raise ValueError("y cannot be zero in logarithmic conversion")
|
|
|
|
| 1 |
import numpy as np
|
| 2 |
from scipy import signal
|
| 3 |
from scipy import fftpack
|
| 4 |
+
from typing import Tuple
|
| 5 |
+
|
| 6 |
|
| 7 |
def highpass_filter(signal_data: np.ndarray, samplerate: float, fp: float, fs: float, gpass: float, gstop: float) -> np.ndarray:
|
| 8 |
fn = samplerate / 2
|
|
|
|
| 11 |
|
| 12 |
N, Wn = signal.buttord(wp, ws, gpass, gstop)
|
| 13 |
b, a = signal.butter(N, Wn, "high")
|
| 14 |
+
|
| 15 |
filtered_signal = signal.filtfilt(b, a, signal_data)
|
| 16 |
+
|
| 17 |
return filtered_signal
|
| 18 |
|
| 19 |
|
|
|
|
| 21 |
total_duration = len(signal_data) / samplerate
|
| 22 |
frame_duration = frame_size / samplerate
|
| 23 |
step_size = frame_size * (1 - overlap / 100)
|
| 24 |
+
|
| 25 |
num_frames = int((total_duration - (frame_duration * overlap / 100)) / (frame_duration * (1 - overlap / 100)))
|
| 26 |
+
|
| 27 |
frames = []
|
| 28 |
+
|
| 29 |
for i in range(num_frames):
|
| 30 |
start_idx = int(step_size * i)
|
| 31 |
frames.append(signal_data[start_idx:start_idx + frame_size])
|
| 32 |
+
|
| 33 |
return np.array(frames), num_frames
|
| 34 |
|
| 35 |
|
| 36 |
def hanning(signal_data: np.ndarray, frame_size: int, num_frames: int) -> Tuple[np.ndarray, float]:
|
| 37 |
han = signal.get_window('hann', frame_size)
|
| 38 |
acf = 1 / (sum(han) / frame_size)
|
| 39 |
+
|
| 40 |
for i in range(num_frames):
|
| 41 |
signal_data[i] *= han
|
| 42 |
+
|
| 43 |
return signal_data, acf
|
| 44 |
|
| 45 |
|
|
|
|
| 52 |
fft_axis = np.linspace(0, samplerate / 2, frame_size // 2)
|
| 53 |
fft_array = np.array(fft_array)[:, :frame_size // 2]
|
| 54 |
fft_mean = np.mean(fft_array, axis=0)
|
| 55 |
+
|
| 56 |
return fft_array, fft_mean, fft_axis
|
| 57 |
|
| 58 |
+
|
| 59 |
def linear_to_db(x: float, y: float) -> float:
|
| 60 |
if y == 0:
|
| 61 |
raise ValueError("y cannot be zero in logarithmic conversion")
|
lab_tools/labutils.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
import sys
|
| 2 |
import pandas as pd
|
| 3 |
|
|
|
|
| 4 |
# CSVファイルから信号データを読み込む
|
| 5 |
def load_signal(file_path, column_name):
|
| 6 |
try:
|
|
@@ -10,7 +11,7 @@ def load_signal(file_path, column_name):
|
|
| 10 |
if 'Timestamp' in line:
|
| 11 |
header_line = i
|
| 12 |
break
|
| 13 |
-
|
| 14 |
# 見つけたヘッダー行からデータを読み込む
|
| 15 |
df = pd.read_csv(file_path, skiprows=header_line)
|
| 16 |
signal = df[column_name].values
|
|
|
|
| 1 |
import sys
|
| 2 |
import pandas as pd
|
| 3 |
|
| 4 |
+
|
| 5 |
# CSVファイルから信号データを読み込む
|
| 6 |
def load_signal(file_path, column_name):
|
| 7 |
try:
|
|
|
|
| 11 |
if 'Timestamp' in line:
|
| 12 |
header_line = i
|
| 13 |
break
|
| 14 |
+
|
| 15 |
# 見つけたヘッダー行からデータを読み込む
|
| 16 |
df = pd.read_csv(file_path, skiprows=header_line)
|
| 17 |
signal = df[column_name].values
|
lab_tools/wavelet.py
CHANGED
|
@@ -5,6 +5,7 @@ import tempfile
|
|
| 5 |
|
| 6 |
from lab_tools import labutils
|
| 7 |
|
|
|
|
| 8 |
# モルレーウェーブレット関数
|
| 9 |
def morlet(x, f, width):
|
| 10 |
sf = f / width
|
|
|
|
| 5 |
|
| 6 |
from lab_tools import labutils
|
| 7 |
|
| 8 |
+
|
| 9 |
# モルレーウェーブレット関数
|
| 10 |
def morlet(x, f, width):
|
| 11 |
sf = f / width
|
poetry.lock
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
# This file is automatically @generated by Poetry 1.8.
|
| 2 |
|
| 3 |
[[package]]
|
| 4 |
name = "aiofiles"
|
|
@@ -22,9 +22,6 @@ files = [
|
|
| 22 |
{file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
|
| 23 |
]
|
| 24 |
|
| 25 |
-
[package.dependencies]
|
| 26 |
-
typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""}
|
| 27 |
-
|
| 28 |
[[package]]
|
| 29 |
name = "anyio"
|
| 30 |
version = "4.5.0"
|
|
@@ -47,6 +44,179 @@ doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)",
|
|
| 47 |
test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"]
|
| 48 |
trio = ["trio (>=0.26.1)"]
|
| 49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
[[package]]
|
| 51 |
name = "certifi"
|
| 52 |
version = "2024.8.30"
|
|
@@ -58,6 +228,85 @@ files = [
|
|
| 58 |
{file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"},
|
| 59 |
]
|
| 60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
[[package]]
|
| 62 |
name = "charset-normalizer"
|
| 63 |
version = "3.4.0"
|
|
@@ -197,68 +446,6 @@ files = [
|
|
| 197 |
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
| 198 |
]
|
| 199 |
|
| 200 |
-
[[package]]
|
| 201 |
-
name = "contourpy"
|
| 202 |
-
version = "1.1.0"
|
| 203 |
-
description = "Python library for calculating contours of 2D quadrilateral grids"
|
| 204 |
-
optional = false
|
| 205 |
-
python-versions = ">=3.8"
|
| 206 |
-
files = [
|
| 207 |
-
{file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"},
|
| 208 |
-
{file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"},
|
| 209 |
-
{file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"},
|
| 210 |
-
{file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"},
|
| 211 |
-
{file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"},
|
| 212 |
-
{file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"},
|
| 213 |
-
{file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"},
|
| 214 |
-
{file = "contourpy-1.1.0-cp310-cp310-win32.whl", hash = "sha256:9b2dd2ca3ac561aceef4c7c13ba654aaa404cf885b187427760d7f7d4c57cff8"},
|
| 215 |
-
{file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"},
|
| 216 |
-
{file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"},
|
| 217 |
-
{file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"},
|
| 218 |
-
{file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"},
|
| 219 |
-
{file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"},
|
| 220 |
-
{file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"},
|
| 221 |
-
{file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"},
|
| 222 |
-
{file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"},
|
| 223 |
-
{file = "contourpy-1.1.0-cp311-cp311-win32.whl", hash = "sha256:edb989d31065b1acef3828a3688f88b2abb799a7db891c9e282df5ec7e46221b"},
|
| 224 |
-
{file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"},
|
| 225 |
-
{file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"},
|
| 226 |
-
{file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"},
|
| 227 |
-
{file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"},
|
| 228 |
-
{file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"},
|
| 229 |
-
{file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"},
|
| 230 |
-
{file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"},
|
| 231 |
-
{file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"},
|
| 232 |
-
{file = "contourpy-1.1.0-cp38-cp38-win32.whl", hash = "sha256:108dfb5b3e731046a96c60bdc46a1a0ebee0760418951abecbe0fc07b5b93b27"},
|
| 233 |
-
{file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"},
|
| 234 |
-
{file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"},
|
| 235 |
-
{file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"},
|
| 236 |
-
{file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"},
|
| 237 |
-
{file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"},
|
| 238 |
-
{file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"},
|
| 239 |
-
{file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"},
|
| 240 |
-
{file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"},
|
| 241 |
-
{file = "contourpy-1.1.0-cp39-cp39-win32.whl", hash = "sha256:71551f9520f008b2950bef5f16b0e3587506ef4f23c734b71ffb7b89f8721999"},
|
| 242 |
-
{file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"},
|
| 243 |
-
{file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"},
|
| 244 |
-
{file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"},
|
| 245 |
-
{file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"},
|
| 246 |
-
{file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"},
|
| 247 |
-
{file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"},
|
| 248 |
-
{file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"},
|
| 249 |
-
{file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"},
|
| 250 |
-
]
|
| 251 |
-
|
| 252 |
-
[package.dependencies]
|
| 253 |
-
numpy = ">=1.16"
|
| 254 |
-
|
| 255 |
-
[package.extras]
|
| 256 |
-
bokeh = ["bokeh", "selenium"]
|
| 257 |
-
docs = ["furo", "sphinx-copybutton"]
|
| 258 |
-
mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"]
|
| 259 |
-
test = ["Pillow", "contourpy[test-no-images]", "matplotlib"]
|
| 260 |
-
test-no-images = ["pytest", "pytest-cov", "wurlitzer"]
|
| 261 |
-
|
| 262 |
[[package]]
|
| 263 |
name = "contourpy"
|
| 264 |
version = "1.1.1"
|
|
@@ -693,9 +880,6 @@ files = [
|
|
| 693 |
{file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"},
|
| 694 |
]
|
| 695 |
|
| 696 |
-
[package.dependencies]
|
| 697 |
-
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
|
| 698 |
-
|
| 699 |
[package.extras]
|
| 700 |
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
|
| 701 |
cover = ["pytest-cov"]
|
|
@@ -997,7 +1181,6 @@ files = [
|
|
| 997 |
contourpy = ">=1.0.1"
|
| 998 |
cycler = ">=0.10"
|
| 999 |
fonttools = ">=4.22.0"
|
| 1000 |
-
importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""}
|
| 1001 |
kiwisolver = ">=1.0.1"
|
| 1002 |
numpy = ">=1.20,<2"
|
| 1003 |
packaging = ">=20.0"
|
|
@@ -1016,6 +1199,17 @@ files = [
|
|
| 1016 |
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
|
| 1017 |
]
|
| 1018 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1019 |
[[package]]
|
| 1020 |
name = "numpy"
|
| 1021 |
version = "1.24.4"
|
|
@@ -1166,9 +1360,8 @@ files = [
|
|
| 1166 |
|
| 1167 |
[package.dependencies]
|
| 1168 |
numpy = [
|
| 1169 |
-
{version = ">=1.20.3", markers = "python_version < \"3.10\""},
|
| 1170 |
-
{version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""},
|
| 1171 |
{version = ">=1.23.2", markers = "python_version >= \"3.11\""},
|
|
|
|
| 1172 |
]
|
| 1173 |
python-dateutil = ">=2.8.2"
|
| 1174 |
pytz = ">=2020.1"
|
|
@@ -1294,6 +1487,58 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
|
|
| 1294 |
typing = ["typing-extensions"]
|
| 1295 |
xmp = ["defusedxml"]
|
| 1296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1297 |
[[package]]
|
| 1298 |
name = "pydantic"
|
| 1299 |
version = "2.9.2"
|
|
@@ -1308,10 +1553,7 @@ files = [
|
|
| 1308 |
[package.dependencies]
|
| 1309 |
annotated-types = ">=0.6.0"
|
| 1310 |
pydantic-core = "2.23.4"
|
| 1311 |
-
typing-extensions =
|
| 1312 |
-
{version = ">=4.6.1", markers = "python_version < \"3.13\""},
|
| 1313 |
-
{version = ">=4.12.2", markers = "python_version >= \"3.13\""},
|
| 1314 |
-
]
|
| 1315 |
|
| 1316 |
[package.extras]
|
| 1317 |
email = ["email-validator (>=2.0.0)"]
|
|
@@ -1622,6 +1864,48 @@ files = [
|
|
| 1622 |
{file = "ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2"},
|
| 1623 |
]
|
| 1624 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1625 |
[[package]]
|
| 1626 |
name = "semantic-version"
|
| 1627 |
version = "2.10.0"
|
|
@@ -1683,7 +1967,6 @@ files = [
|
|
| 1683 |
|
| 1684 |
[package.dependencies]
|
| 1685 |
anyio = ">=3.4.0,<5"
|
| 1686 |
-
typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""}
|
| 1687 |
|
| 1688 |
[package.extras]
|
| 1689 |
full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"]
|
|
@@ -1876,25 +2159,37 @@ files = [
|
|
| 1876 |
]
|
| 1877 |
|
| 1878 |
[[package]]
|
| 1879 |
-
name = "
|
| 1880 |
-
version = "
|
| 1881 |
-
description = "
|
| 1882 |
optional = false
|
| 1883 |
python-versions = ">=3.8"
|
| 1884 |
files = [
|
| 1885 |
-
{file = "
|
| 1886 |
-
{file = "
|
| 1887 |
]
|
| 1888 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1889 |
[package.extras]
|
| 1890 |
-
|
| 1891 |
-
|
| 1892 |
-
|
| 1893 |
-
|
| 1894 |
-
|
| 1895 |
-
|
|
|
|
|
|
|
| 1896 |
|
| 1897 |
[metadata]
|
| 1898 |
lock-version = "2.0"
|
| 1899 |
-
python-versions = "
|
| 1900 |
-
content-hash = "
|
|
|
|
| 1 |
+
# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand.
|
| 2 |
|
| 3 |
[[package]]
|
| 4 |
name = "aiofiles"
|
|
|
|
| 22 |
{file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
|
| 23 |
]
|
| 24 |
|
|
|
|
|
|
|
|
|
|
| 25 |
[[package]]
|
| 26 |
name = "anyio"
|
| 27 |
version = "4.5.0"
|
|
|
|
| 44 |
test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"]
|
| 45 |
trio = ["trio (>=0.26.1)"]
|
| 46 |
|
| 47 |
+
[[package]]
|
| 48 |
+
name = "brotli"
|
| 49 |
+
version = "1.1.0"
|
| 50 |
+
description = "Python bindings for the Brotli compression library"
|
| 51 |
+
optional = false
|
| 52 |
+
python-versions = "*"
|
| 53 |
+
files = [
|
| 54 |
+
{file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"},
|
| 55 |
+
{file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"},
|
| 56 |
+
{file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"},
|
| 57 |
+
{file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"},
|
| 58 |
+
{file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"},
|
| 59 |
+
{file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"},
|
| 60 |
+
{file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"},
|
| 61 |
+
{file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"},
|
| 62 |
+
{file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"},
|
| 63 |
+
{file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"},
|
| 64 |
+
{file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5dab0844f2cf82be357a0eb11a9087f70c5430b2c241493fc122bb6f2bb0917c"},
|
| 65 |
+
{file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e4fe605b917c70283db7dfe5ada75e04561479075761a0b3866c081d035b01c1"},
|
| 66 |
+
{file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1e9a65b5736232e7a7f91ff3d02277f11d339bf34099a56cdab6a8b3410a02b2"},
|
| 67 |
+
{file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:58d4b711689366d4a03ac7957ab8c28890415e267f9b6589969e74b6e42225ec"},
|
| 68 |
+
{file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"},
|
| 69 |
+
{file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"},
|
| 70 |
+
{file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"},
|
| 71 |
+
{file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"},
|
| 72 |
+
{file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"},
|
| 73 |
+
{file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"},
|
| 74 |
+
{file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"},
|
| 75 |
+
{file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"},
|
| 76 |
+
{file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"},
|
| 77 |
+
{file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"},
|
| 78 |
+
{file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"},
|
| 79 |
+
{file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"},
|
| 80 |
+
{file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c247dd99d39e0338a604f8c2b3bc7061d5c2e9e2ac7ba9cc1be5a69cb6cd832f"},
|
| 81 |
+
{file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1b2c248cd517c222d89e74669a4adfa5577e06ab68771a529060cf5a156e9757"},
|
| 82 |
+
{file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2a24c50840d89ded6c9a8fdc7b6ed3692ed4e86f1c4a4a938e1e92def92933e0"},
|
| 83 |
+
{file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f31859074d57b4639318523d6ffdca586ace54271a73ad23ad021acd807eb14b"},
|
| 84 |
+
{file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"},
|
| 85 |
+
{file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"},
|
| 86 |
+
{file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28"},
|
| 87 |
+
{file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f"},
|
| 88 |
+
{file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"},
|
| 89 |
+
{file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"},
|
| 90 |
+
{file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"},
|
| 91 |
+
{file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"},
|
| 92 |
+
{file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"},
|
| 93 |
+
{file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"},
|
| 94 |
+
{file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"},
|
| 95 |
+
{file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"},
|
| 96 |
+
{file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"},
|
| 97 |
+
{file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"},
|
| 98 |
+
{file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9"},
|
| 99 |
+
{file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb"},
|
| 100 |
+
{file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111"},
|
| 101 |
+
{file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839"},
|
| 102 |
+
{file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"},
|
| 103 |
+
{file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"},
|
| 104 |
+
{file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5"},
|
| 105 |
+
{file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8"},
|
| 106 |
+
{file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f"},
|
| 107 |
+
{file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648"},
|
| 108 |
+
{file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0"},
|
| 109 |
+
{file = "Brotli-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089"},
|
| 110 |
+
{file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368"},
|
| 111 |
+
{file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c"},
|
| 112 |
+
{file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284"},
|
| 113 |
+
{file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7"},
|
| 114 |
+
{file = "Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0"},
|
| 115 |
+
{file = "Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b"},
|
| 116 |
+
{file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"},
|
| 117 |
+
{file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"},
|
| 118 |
+
{file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"},
|
| 119 |
+
{file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"},
|
| 120 |
+
{file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"},
|
| 121 |
+
{file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"},
|
| 122 |
+
{file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"},
|
| 123 |
+
{file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"},
|
| 124 |
+
{file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"},
|
| 125 |
+
{file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:aea440a510e14e818e67bfc4027880e2fb500c2ccb20ab21c7a7c8b5b4703d75"},
|
| 126 |
+
{file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:6974f52a02321b36847cd19d1b8e381bf39939c21efd6ee2fc13a28b0d99348c"},
|
| 127 |
+
{file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:a7e53012d2853a07a4a79c00643832161a910674a893d296c9f1259859a289d2"},
|
| 128 |
+
{file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:d7702622a8b40c49bffb46e1e3ba2e81268d5c04a34f460978c6b5517a34dd52"},
|
| 129 |
+
{file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"},
|
| 130 |
+
{file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"},
|
| 131 |
+
{file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"},
|
| 132 |
+
{file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"},
|
| 133 |
+
{file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"},
|
| 134 |
+
{file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"},
|
| 135 |
+
{file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"},
|
| 136 |
+
{file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"},
|
| 137 |
+
{file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"},
|
| 138 |
+
{file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"},
|
| 139 |
+
{file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"},
|
| 140 |
+
{file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:cb1dac1770878ade83f2ccdf7d25e494f05c9165f5246b46a621cc849341dc01"},
|
| 141 |
+
{file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:3ee8a80d67a4334482d9712b8e83ca6b1d9bc7e351931252ebef5d8f7335a547"},
|
| 142 |
+
{file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5e55da2c8724191e5b557f8e18943b1b4839b8efc3ef60d65985bcf6f587dd38"},
|
| 143 |
+
{file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:d342778ef319e1026af243ed0a07c97acf3bad33b9f29e7ae6a1f68fd083e90c"},
|
| 144 |
+
{file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"},
|
| 145 |
+
{file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"},
|
| 146 |
+
{file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"},
|
| 147 |
+
{file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"},
|
| 148 |
+
{file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"},
|
| 149 |
+
{file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"},
|
| 150 |
+
{file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"},
|
| 151 |
+
{file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"},
|
| 152 |
+
{file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"},
|
| 153 |
+
{file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"},
|
| 154 |
+
{file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"},
|
| 155 |
+
{file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"},
|
| 156 |
+
{file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d2b35ca2c7f81d173d2fadc2f4f31e88cc5f7a39ae5b6db5513cf3383b0e0ec7"},
|
| 157 |
+
{file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:af6fa6817889314555aede9a919612b23739395ce767fe7fcbea9a80bf140fe5"},
|
| 158 |
+
{file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:2feb1d960f760a575dbc5ab3b1c00504b24caaf6986e2dc2b01c09c87866a943"},
|
| 159 |
+
{file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4410f84b33374409552ac9b6903507cdb31cd30d2501fc5ca13d18f73548444a"},
|
| 160 |
+
{file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"},
|
| 161 |
+
{file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"},
|
| 162 |
+
{file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"},
|
| 163 |
+
{file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"},
|
| 164 |
+
{file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"},
|
| 165 |
+
{file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"},
|
| 166 |
+
{file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"},
|
| 167 |
+
{file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"},
|
| 168 |
+
{file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"},
|
| 169 |
+
{file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"},
|
| 170 |
+
{file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"},
|
| 171 |
+
{file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"},
|
| 172 |
+
{file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419"},
|
| 173 |
+
{file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2"},
|
| 174 |
+
{file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f"},
|
| 175 |
+
{file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb"},
|
| 176 |
+
{file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"},
|
| 177 |
+
{file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"},
|
| 178 |
+
{file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"},
|
| 179 |
+
]
|
| 180 |
+
|
| 181 |
+
[[package]]
|
| 182 |
+
name = "brotlicffi"
|
| 183 |
+
version = "1.1.0.0"
|
| 184 |
+
description = "Python CFFI bindings to the Brotli library"
|
| 185 |
+
optional = false
|
| 186 |
+
python-versions = ">=3.7"
|
| 187 |
+
files = [
|
| 188 |
+
{file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"},
|
| 189 |
+
{file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"},
|
| 190 |
+
{file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9feb210d932ffe7798ee62e6145d3a757eb6233aa9a4e7db78dd3690d7755814"},
|
| 191 |
+
{file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84763dbdef5dd5c24b75597a77e1b30c66604725707565188ba54bab4f114820"},
|
| 192 |
+
{file = "brotlicffi-1.1.0.0-cp37-abi3-win32.whl", hash = "sha256:1b12b50e07c3911e1efa3a8971543e7648100713d4e0971b13631cce22c587eb"},
|
| 193 |
+
{file = "brotlicffi-1.1.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:994a4f0681bb6c6c3b0925530a1926b7a189d878e6e5e38fae8efa47c5d9c613"},
|
| 194 |
+
{file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2e4aeb0bd2540cb91b069dbdd54d458da8c4334ceaf2d25df2f4af576d6766ca"},
|
| 195 |
+
{file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b7b0033b0d37bb33009fb2fef73310e432e76f688af76c156b3594389d81391"},
|
| 196 |
+
{file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54a07bb2374a1eba8ebb52b6fafffa2afd3c4df85ddd38fcc0511f2bb387c2a8"},
|
| 197 |
+
{file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7901a7dc4b88f1c1475de59ae9be59799db1007b7d059817948d8e4f12e24e35"},
|
| 198 |
+
{file = "brotlicffi-1.1.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce01c7316aebc7fce59da734286148b1d1b9455f89cf2c8a4dfce7d41db55c2d"},
|
| 199 |
+
{file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:246f1d1a90279bb6069de3de8d75a8856e073b8ff0b09dcca18ccc14cec85979"},
|
| 200 |
+
{file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc4bc5d82bc56ebd8b514fb8350cfac4627d6b0743382e46d033976a5f80fab6"},
|
| 201 |
+
{file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c26ecb14386a44b118ce36e546ce307f4810bc9598a6e6cb4f7fca725ae7e6"},
|
| 202 |
+
{file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca72968ae4eaf6470498d5c2887073f7efe3b1e7d7ec8be11a06a79cc810e990"},
|
| 203 |
+
{file = "brotlicffi-1.1.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:add0de5b9ad9e9aa293c3aa4e9deb2b61e99ad6c1634e01d01d98c03e6a354cc"},
|
| 204 |
+
{file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b6068e0f3769992d6b622a1cd2e7835eae3cf8d9da123d7f51ca9c1e9c333e5"},
|
| 205 |
+
{file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8557a8559509b61e65083f8782329188a250102372576093c88930c875a69838"},
|
| 206 |
+
{file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a7ae37e5d79c5bdfb5b4b99f2715a6035e6c5bf538c3746abc8e26694f92f33"},
|
| 207 |
+
{file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391151ec86bb1c683835980f4816272a87eaddc46bb91cbf44f62228b84d8cca"},
|
| 208 |
+
{file = "brotlicffi-1.1.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2f3711be9290f0453de8eed5275d93d286abe26b08ab4a35d7452caa1fef532f"},
|
| 209 |
+
{file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a807d760763e398bbf2c6394ae9da5815901aa93ee0a37bca5efe78d4ee3171"},
|
| 210 |
+
{file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa8ca0623b26c94fccc3a1fdd895be1743b838f3917300506d04aa3346fd2a14"},
|
| 211 |
+
{file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3de0cf28a53a3238b252aca9fed1593e9d36c1d116748013339f0949bfc84112"},
|
| 212 |
+
{file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6be5ec0e88a4925c91f3dea2bb0013b3a2accda6f77238f76a34a1ea532a1cb0"},
|
| 213 |
+
{file = "brotlicffi-1.1.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d9eb71bb1085d996244439154387266fd23d6ad37161f6f52f1cd41dd95a3808"},
|
| 214 |
+
{file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"},
|
| 215 |
+
]
|
| 216 |
+
|
| 217 |
+
[package.dependencies]
|
| 218 |
+
cffi = ">=1.0.0"
|
| 219 |
+
|
| 220 |
[[package]]
|
| 221 |
name = "certifi"
|
| 222 |
version = "2024.8.30"
|
|
|
|
| 228 |
{file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"},
|
| 229 |
]
|
| 230 |
|
| 231 |
+
[[package]]
|
| 232 |
+
name = "cffi"
|
| 233 |
+
version = "1.17.1"
|
| 234 |
+
description = "Foreign Function Interface for Python calling C code."
|
| 235 |
+
optional = false
|
| 236 |
+
python-versions = ">=3.8"
|
| 237 |
+
files = [
|
| 238 |
+
{file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"},
|
| 239 |
+
{file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"},
|
| 240 |
+
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"},
|
| 241 |
+
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"},
|
| 242 |
+
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"},
|
| 243 |
+
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"},
|
| 244 |
+
{file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"},
|
| 245 |
+
{file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"},
|
| 246 |
+
{file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"},
|
| 247 |
+
{file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"},
|
| 248 |
+
{file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"},
|
| 249 |
+
{file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"},
|
| 250 |
+
{file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"},
|
| 251 |
+
{file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"},
|
| 252 |
+
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"},
|
| 253 |
+
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"},
|
| 254 |
+
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"},
|
| 255 |
+
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"},
|
| 256 |
+
{file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"},
|
| 257 |
+
{file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"},
|
| 258 |
+
{file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"},
|
| 259 |
+
{file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"},
|
| 260 |
+
{file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"},
|
| 261 |
+
{file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"},
|
| 262 |
+
{file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"},
|
| 263 |
+
{file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"},
|
| 264 |
+
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"},
|
| 265 |
+
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"},
|
| 266 |
+
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"},
|
| 267 |
+
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"},
|
| 268 |
+
{file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"},
|
| 269 |
+
{file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"},
|
| 270 |
+
{file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"},
|
| 271 |
+
{file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"},
|
| 272 |
+
{file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"},
|
| 273 |
+
{file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"},
|
| 274 |
+
{file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"},
|
| 275 |
+
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"},
|
| 276 |
+
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"},
|
| 277 |
+
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"},
|
| 278 |
+
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"},
|
| 279 |
+
{file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"},
|
| 280 |
+
{file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"},
|
| 281 |
+
{file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"},
|
| 282 |
+
{file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"},
|
| 283 |
+
{file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"},
|
| 284 |
+
{file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"},
|
| 285 |
+
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"},
|
| 286 |
+
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"},
|
| 287 |
+
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"},
|
| 288 |
+
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"},
|
| 289 |
+
{file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"},
|
| 290 |
+
{file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"},
|
| 291 |
+
{file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"},
|
| 292 |
+
{file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"},
|
| 293 |
+
{file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"},
|
| 294 |
+
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"},
|
| 295 |
+
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"},
|
| 296 |
+
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"},
|
| 297 |
+
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"},
|
| 298 |
+
{file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"},
|
| 299 |
+
{file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"},
|
| 300 |
+
{file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"},
|
| 301 |
+
{file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"},
|
| 302 |
+
{file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"},
|
| 303 |
+
{file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"},
|
| 304 |
+
{file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"},
|
| 305 |
+
]
|
| 306 |
+
|
| 307 |
+
[package.dependencies]
|
| 308 |
+
pycparser = "*"
|
| 309 |
+
|
| 310 |
[[package]]
|
| 311 |
name = "charset-normalizer"
|
| 312 |
version = "3.4.0"
|
|
|
|
| 446 |
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
| 447 |
]
|
| 448 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 449 |
[[package]]
|
| 450 |
name = "contourpy"
|
| 451 |
version = "1.1.1"
|
|
|
|
| 880 |
{file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"},
|
| 881 |
]
|
| 882 |
|
|
|
|
|
|
|
|
|
|
| 883 |
[package.extras]
|
| 884 |
check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"]
|
| 885 |
cover = ["pytest-cov"]
|
|
|
|
| 1181 |
contourpy = ">=1.0.1"
|
| 1182 |
cycler = ">=0.10"
|
| 1183 |
fonttools = ">=4.22.0"
|
|
|
|
| 1184 |
kiwisolver = ">=1.0.1"
|
| 1185 |
numpy = ">=1.20,<2"
|
| 1186 |
packaging = ">=20.0"
|
|
|
|
| 1199 |
{file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"},
|
| 1200 |
]
|
| 1201 |
|
| 1202 |
+
[[package]]
|
| 1203 |
+
name = "mutagen"
|
| 1204 |
+
version = "1.47.0"
|
| 1205 |
+
description = "read and write audio tags for many formats"
|
| 1206 |
+
optional = false
|
| 1207 |
+
python-versions = ">=3.7"
|
| 1208 |
+
files = [
|
| 1209 |
+
{file = "mutagen-1.47.0-py3-none-any.whl", hash = "sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719"},
|
| 1210 |
+
{file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"},
|
| 1211 |
+
]
|
| 1212 |
+
|
| 1213 |
[[package]]
|
| 1214 |
name = "numpy"
|
| 1215 |
version = "1.24.4"
|
|
|
|
| 1360 |
|
| 1361 |
[package.dependencies]
|
| 1362 |
numpy = [
|
|
|
|
|
|
|
| 1363 |
{version = ">=1.23.2", markers = "python_version >= \"3.11\""},
|
| 1364 |
+
{version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""},
|
| 1365 |
]
|
| 1366 |
python-dateutil = ">=2.8.2"
|
| 1367 |
pytz = ">=2020.1"
|
|
|
|
| 1487 |
typing = ["typing-extensions"]
|
| 1488 |
xmp = ["defusedxml"]
|
| 1489 |
|
| 1490 |
+
[[package]]
|
| 1491 |
+
name = "pycparser"
|
| 1492 |
+
version = "2.22"
|
| 1493 |
+
description = "C parser in Python"
|
| 1494 |
+
optional = false
|
| 1495 |
+
python-versions = ">=3.8"
|
| 1496 |
+
files = [
|
| 1497 |
+
{file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
|
| 1498 |
+
{file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
|
| 1499 |
+
]
|
| 1500 |
+
|
| 1501 |
+
[[package]]
|
| 1502 |
+
name = "pycryptodomex"
|
| 1503 |
+
version = "3.21.0"
|
| 1504 |
+
description = "Cryptographic library for Python"
|
| 1505 |
+
optional = false
|
| 1506 |
+
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
|
| 1507 |
+
files = [
|
| 1508 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:dbeb84a399373df84a69e0919c1d733b89e049752426041deeb30d68e9867822"},
|
| 1509 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:a192fb46c95489beba9c3f002ed7d93979423d1b2a53eab8771dbb1339eb3ddd"},
|
| 1510 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:1233443f19d278c72c4daae749872a4af3787a813e05c3561c73ab0c153c7b0f"},
|
| 1511 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbb07f88e277162b8bfca7134b34f18b400d84eac7375ce73117f865e3c80d4c"},
|
| 1512 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:e859e53d983b7fe18cb8f1b0e29d991a5c93be2c8dd25db7db1fe3bd3617f6f9"},
|
| 1513 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27m-win32.whl", hash = "sha256:ef046b2e6c425647971b51424f0f88d8a2e0a2a63d3531817968c42078895c00"},
|
| 1514 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27m-win_amd64.whl", hash = "sha256:da76ebf6650323eae7236b54b1b1f0e57c16483be6e3c1ebf901d4ada47563b6"},
|
| 1515 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:c07e64867a54f7e93186a55bec08a18b7302e7bee1b02fd84c6089ec215e723a"},
|
| 1516 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:56435c7124dd0ce0c8bdd99c52e5d183a0ca7fdcd06c5d5509423843f487dd0b"},
|
| 1517 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65d275e3f866cf6fe891411be9c1454fb58809ccc5de6d3770654c47197acd65"},
|
| 1518 |
+
{file = "pycryptodomex-3.21.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:5241bdb53bcf32a9568770a6584774b1b8109342bd033398e4ff2da052123832"},
|
| 1519 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:34325b84c8b380675fd2320d0649cdcbc9cf1e0d1526edbe8fce43ed858cdc7e"},
|
| 1520 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:103c133d6cd832ae7266feb0a65b69e3a5e4dbbd6f3a3ae3211a557fd653f516"},
|
| 1521 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77ac2ea80bcb4b4e1c6a596734c775a1615d23e31794967416afc14852a639d3"},
|
| 1522 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aa0cf13a1a1128b3e964dc667e5fe5c6235f7d7cfb0277213f0e2a783837cc2"},
|
| 1523 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46eb1f0c8d309da63a2064c28de54e5e614ad17b7e2f88df0faef58ce192fc7b"},
|
| 1524 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:cc7e111e66c274b0df5f4efa679eb31e23c7545d702333dfd2df10ab02c2a2ce"},
|
| 1525 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-musllinux_1_2_i686.whl", hash = "sha256:770d630a5c46605ec83393feaa73a9635a60e55b112e1fb0c3cea84c2897aa0a"},
|
| 1526 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:52e23a0a6e61691134aa8c8beba89de420602541afaae70f66e16060fdcd677e"},
|
| 1527 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-win32.whl", hash = "sha256:a3d77919e6ff56d89aada1bd009b727b874d464cb0e2e3f00a49f7d2e709d76e"},
|
| 1528 |
+
{file = "pycryptodomex-3.21.0-cp36-abi3-win_amd64.whl", hash = "sha256:b0e9765f93fe4890f39875e6c90c96cb341767833cfa767f41b490b506fa9ec0"},
|
| 1529 |
+
{file = "pycryptodomex-3.21.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:feaecdce4e5c0045e7a287de0c4351284391fe170729aa9182f6bd967631b3a8"},
|
| 1530 |
+
{file = "pycryptodomex-3.21.0-pp27-pypy_73-win32.whl", hash = "sha256:365aa5a66d52fd1f9e0530ea97f392c48c409c2f01ff8b9a39c73ed6f527d36c"},
|
| 1531 |
+
{file = "pycryptodomex-3.21.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3efddfc50ac0ca143364042324046800c126a1d63816d532f2e19e6f2d8c0c31"},
|
| 1532 |
+
{file = "pycryptodomex-3.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0df2608682db8279a9ebbaf05a72f62a321433522ed0e499bc486a6889b96bf3"},
|
| 1533 |
+
{file = "pycryptodomex-3.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5823d03e904ea3e53aebd6799d6b8ec63b7675b5d2f4a4bd5e3adcb512d03b37"},
|
| 1534 |
+
{file = "pycryptodomex-3.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:27e84eeff24250ffec32722334749ac2a57a5fd60332cd6a0680090e7c42877e"},
|
| 1535 |
+
{file = "pycryptodomex-3.21.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8ef436cdeea794015263853311f84c1ff0341b98fc7908e8a70595a68cefd971"},
|
| 1536 |
+
{file = "pycryptodomex-3.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1058e6dfe827f4209c5cae466e67610bcd0d66f2f037465daa2a29d92d952b"},
|
| 1537 |
+
{file = "pycryptodomex-3.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ba09a5b407cbb3bcb325221e346a140605714b5e880741dc9a1e9ecf1688d42"},
|
| 1538 |
+
{file = "pycryptodomex-3.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8a9d8342cf22b74a746e3c6c9453cb0cfbb55943410e3a2619bd9164b48dc9d9"},
|
| 1539 |
+
{file = "pycryptodomex-3.21.0.tar.gz", hash = "sha256:222d0bd05381dd25c32dd6065c071ebf084212ab79bab4599ba9e6a3e0009e6c"},
|
| 1540 |
+
]
|
| 1541 |
+
|
| 1542 |
[[package]]
|
| 1543 |
name = "pydantic"
|
| 1544 |
version = "2.9.2"
|
|
|
|
| 1553 |
[package.dependencies]
|
| 1554 |
annotated-types = ">=0.6.0"
|
| 1555 |
pydantic-core = "2.23.4"
|
| 1556 |
+
typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""}
|
|
|
|
|
|
|
|
|
|
| 1557 |
|
| 1558 |
[package.extras]
|
| 1559 |
email = ["email-validator (>=2.0.0)"]
|
|
|
|
| 1864 |
{file = "ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2"},
|
| 1865 |
]
|
| 1866 |
|
| 1867 |
+
[[package]]
|
| 1868 |
+
name = "scipy"
|
| 1869 |
+
version = "1.14.0"
|
| 1870 |
+
description = "Fundamental algorithms for scientific computing in Python"
|
| 1871 |
+
optional = false
|
| 1872 |
+
python-versions = ">=3.10"
|
| 1873 |
+
files = [
|
| 1874 |
+
{file = "scipy-1.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7e911933d54ead4d557c02402710c2396529540b81dd554fc1ba270eb7308484"},
|
| 1875 |
+
{file = "scipy-1.14.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:687af0a35462402dd851726295c1a5ae5f987bd6e9026f52e9505994e2f84ef6"},
|
| 1876 |
+
{file = "scipy-1.14.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:07e179dc0205a50721022344fb85074f772eadbda1e1b3eecdc483f8033709b7"},
|
| 1877 |
+
{file = "scipy-1.14.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a9c9a9b226d9a21e0a208bdb024c3982932e43811b62d202aaf1bb59af264b1"},
|
| 1878 |
+
{file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076c27284c768b84a45dcf2e914d4000aac537da74236a0d45d82c6fa4b7b3c0"},
|
| 1879 |
+
{file = "scipy-1.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42470ea0195336df319741e230626b6225a740fd9dce9642ca13e98f667047c0"},
|
| 1880 |
+
{file = "scipy-1.14.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:176c6f0d0470a32f1b2efaf40c3d37a24876cebf447498a4cefb947a79c21e9d"},
|
| 1881 |
+
{file = "scipy-1.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:ad36af9626d27a4326c8e884917b7ec321d8a1841cd6dacc67d2a9e90c2f0359"},
|
| 1882 |
+
{file = "scipy-1.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d056a8709ccda6cf36cdd2eac597d13bc03dba38360f418560a93050c76a16e"},
|
| 1883 |
+
{file = "scipy-1.14.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f0a50da861a7ec4573b7c716b2ebdcdf142b66b756a0d392c236ae568b3a93fb"},
|
| 1884 |
+
{file = "scipy-1.14.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:94c164a9e2498e68308e6e148646e486d979f7fcdb8b4cf34b5441894bdb9caf"},
|
| 1885 |
+
{file = "scipy-1.14.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a7d46c3e0aea5c064e734c3eac5cf9eb1f8c4ceee756262f2c7327c4c2691c86"},
|
| 1886 |
+
{file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eee2989868e274aae26125345584254d97c56194c072ed96cb433f32f692ed8"},
|
| 1887 |
+
{file = "scipy-1.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3154691b9f7ed73778d746da2df67a19d046a6c8087c8b385bc4cdb2cfca74"},
|
| 1888 |
+
{file = "scipy-1.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c40003d880f39c11c1edbae8144e3813904b10514cd3d3d00c277ae996488cdb"},
|
| 1889 |
+
{file = "scipy-1.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:5b083c8940028bb7e0b4172acafda6df762da1927b9091f9611b0bcd8676f2bc"},
|
| 1890 |
+
{file = "scipy-1.14.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff2438ea1330e06e53c424893ec0072640dac00f29c6a43a575cbae4c99b2b9"},
|
| 1891 |
+
{file = "scipy-1.14.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:bbc0471b5f22c11c389075d091d3885693fd3f5e9a54ce051b46308bc787e5d4"},
|
| 1892 |
+
{file = "scipy-1.14.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:64b2ff514a98cf2bb734a9f90d32dc89dc6ad4a4a36a312cd0d6327170339eb0"},
|
| 1893 |
+
{file = "scipy-1.14.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:7d3da42fbbbb860211a811782504f38ae7aaec9de8764a9bef6b262de7a2b50f"},
|
| 1894 |
+
{file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d91db2c41dd6c20646af280355d41dfa1ec7eead235642178bd57635a3f82209"},
|
| 1895 |
+
{file = "scipy-1.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a01cc03bcdc777c9da3cfdcc74b5a75caffb48a6c39c8450a9a05f82c4250a14"},
|
| 1896 |
+
{file = "scipy-1.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:65df4da3c12a2bb9ad52b86b4dcf46813e869afb006e58be0f516bc370165159"},
|
| 1897 |
+
{file = "scipy-1.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:4c4161597c75043f7154238ef419c29a64ac4a7c889d588ea77690ac4d0d9b20"},
|
| 1898 |
+
{file = "scipy-1.14.0.tar.gz", hash = "sha256:b5923f48cb840380f9854339176ef21763118a7300a88203ccd0bdd26e58527b"},
|
| 1899 |
+
]
|
| 1900 |
+
|
| 1901 |
+
[package.dependencies]
|
| 1902 |
+
numpy = ">=1.23.5,<2.3"
|
| 1903 |
+
|
| 1904 |
+
[package.extras]
|
| 1905 |
+
dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"]
|
| 1906 |
+
doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"]
|
| 1907 |
+
test = ["Cython", "array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
|
| 1908 |
+
|
| 1909 |
[[package]]
|
| 1910 |
name = "semantic-version"
|
| 1911 |
version = "2.10.0"
|
|
|
|
| 1967 |
|
| 1968 |
[package.dependencies]
|
| 1969 |
anyio = ">=3.4.0,<5"
|
|
|
|
| 1970 |
|
| 1971 |
[package.extras]
|
| 1972 |
full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"]
|
|
|
|
| 2159 |
]
|
| 2160 |
|
| 2161 |
[[package]]
|
| 2162 |
+
name = "yt-dlp"
|
| 2163 |
+
version = "2024.7.7"
|
| 2164 |
+
description = "A feature-rich command-line audio/video downloader"
|
| 2165 |
optional = false
|
| 2166 |
python-versions = ">=3.8"
|
| 2167 |
files = [
|
| 2168 |
+
{file = "yt_dlp-2024.7.7-py3-none-any.whl", hash = "sha256:2e90abeadc0199c787b1b4a3e0a1c8ed9d7c9f824f58da88467a1b30ed745e07"},
|
| 2169 |
+
{file = "yt_dlp-2024.7.7.tar.gz", hash = "sha256:2a0f89423d25d47db949925db5bd2c6f651960ae93dbbf5b3ed61cf3a4078ce5"},
|
| 2170 |
]
|
| 2171 |
|
| 2172 |
+
[package.dependencies]
|
| 2173 |
+
brotli = {version = "*", markers = "implementation_name == \"cpython\""}
|
| 2174 |
+
brotlicffi = {version = "*", markers = "implementation_name != \"cpython\""}
|
| 2175 |
+
certifi = "*"
|
| 2176 |
+
mutagen = "*"
|
| 2177 |
+
pycryptodomex = "*"
|
| 2178 |
+
requests = ">=2.32.2,<3"
|
| 2179 |
+
urllib3 = ">=1.26.17,<3"
|
| 2180 |
+
websockets = ">=12.0"
|
| 2181 |
+
|
| 2182 |
[package.extras]
|
| 2183 |
+
build = ["build", "hatchling", "pip", "setuptools", "wheel"]
|
| 2184 |
+
curl-cffi = ["curl-cffi (==0.5.10)"]
|
| 2185 |
+
dev = ["autopep8 (>=2.0,<3.0)", "pre-commit", "pytest (>=8.1,<9.0)", "ruff (>=0.5.0,<0.6.0)"]
|
| 2186 |
+
py2exe = ["py2exe (>=0.12)"]
|
| 2187 |
+
pyinstaller = ["pyinstaller (>=6.7.0)"]
|
| 2188 |
+
secretstorage = ["cffi", "secretstorage"]
|
| 2189 |
+
static-analysis = ["autopep8 (>=2.0,<3.0)", "ruff (>=0.5.0,<0.6.0)"]
|
| 2190 |
+
test = ["pytest (>=8.1,<9.0)"]
|
| 2191 |
|
| 2192 |
[metadata]
|
| 2193 |
lock-version = "2.0"
|
| 2194 |
+
python-versions = ">=3.10,<3.12"
|
| 2195 |
+
content-hash = "2bb4e05993ac956f9ed0c7c5eb5ac3c87c4ceb9bfa3506347ca2e6a7a296b550"
|
pyproject.toml
CHANGED
|
@@ -5,9 +5,10 @@ description = "research"
|
|
| 5 |
authors = ["Taiga Takano <ttttghghnb554z@outlook.jp>"]
|
| 6 |
|
| 7 |
[tool.poetry.dependencies]
|
| 8 |
-
python = "
|
| 9 |
gradio = "4.44.0"
|
| 10 |
-
|
|
|
|
| 11 |
|
| 12 |
[build-system]
|
| 13 |
requires = ["poetry-core>=1.0.0"]
|
|
|
|
| 5 |
authors = ["Taiga Takano <ttttghghnb554z@outlook.jp>"]
|
| 6 |
|
| 7 |
[tool.poetry.dependencies]
|
| 8 |
+
python = ">=3.10,<3.12"
|
| 9 |
gradio = "4.44.0"
|
| 10 |
+
yt-dlp = "2024.07.07"
|
| 11 |
+
scipy = "1.14.0"
|
| 12 |
|
| 13 |
[build-system]
|
| 14 |
requires = ["poetry-core>=1.0.0"]
|
run.py
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import numpy as np
|
| 2 |
+
import matplotlib.pyplot as plt
|
| 3 |
+
from pydub import AudioSegment
|
| 4 |
+
from scipy.fftpack import fft
|
| 5 |
+
import yt_dlp
|
| 6 |
+
import os
|
| 7 |
+
|
| 8 |
+
url = "https://youtu.be/Ci_zad39Uhw?si=AhB9ArgrWUvbPiv5"
|
| 9 |
+
|
| 10 |
+
ydl_opts = {
|
| 11 |
+
'postprocessors': [
|
| 12 |
+
{
|
| 13 |
+
'key': 'FFmpegExtractAudio',
|
| 14 |
+
'preferredcodec': 'mp3',
|
| 15 |
+
'preferredquality': '128',
|
| 16 |
+
}
|
| 17 |
+
],
|
| 18 |
+
'outtmpl': '%(title)s.%(ext)s' # ファイル名のテンプレート
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
| 22 |
+
info_dict = ydl.extract_info(url, download=True)
|
| 23 |
+
file_path = ydl.prepare_filename(info_dict)
|
| 24 |
+
filename, ext = os.path.splitext(file_path)
|
| 25 |
+
filename += ".mp3"
|
| 26 |
+
print(f"Downloaded file path: {filename}")
|
| 27 |
+
|
| 28 |
+
# MP3ファイルの読み込みとWAV形式への変換
|
| 29 |
+
audio = AudioSegment.from_mp3(filename)
|
| 30 |
+
os.remove(filename)
|
| 31 |
+
data = np.array(audio.get_array_of_samples())
|
| 32 |
+
sample_rate = audio.frame_rate
|
| 33 |
+
|
| 34 |
+
# モノラル変換(ステレオの場合)
|
| 35 |
+
if audio.channels > 1:
|
| 36 |
+
data = data.reshape((-1, audio.channels)).mean(axis=1)
|
| 37 |
+
|
| 38 |
+
# フーリエ変換の実行
|
| 39 |
+
N = len(data)
|
| 40 |
+
T = 1.0 / sample_rate
|
| 41 |
+
yf = fft(data)
|
| 42 |
+
xf = np.fft.fftfreq(N, T)[:N//2]
|
| 43 |
+
|
| 44 |
+
# パワースペクトルの計算
|
| 45 |
+
power_spectrum = 2.0/N * np.abs(yf[:N//2])
|
| 46 |
+
|
| 47 |
+
# プロット用に周波数とパワーを制限
|
| 48 |
+
xf_log = xf[1:] # 0Hzを除去 (ログスケールでは0が扱えないため)
|
| 49 |
+
power_spectrum_log = power_spectrum[1:]
|
| 50 |
+
|
| 51 |
+
# 縦軸の範囲を指定(例: 0から100まで)
|
| 52 |
+
y_min = 0
|
| 53 |
+
y_max = 1000
|
| 54 |
+
|
| 55 |
+
# グラフの描画
|
| 56 |
+
plt.figure(figsize=(10, 6))
|
| 57 |
+
plt.plot(xf_log, power_spectrum_log)
|
| 58 |
+
plt.xscale('log')
|
| 59 |
+
plt.yscale('log')
|
| 60 |
+
|
| 61 |
+
plt.title('Power Spectrum (Log Scale)')
|
| 62 |
+
plt.xlabel('Frequency (Hz)')
|
| 63 |
+
plt.ylabel('Power')
|
| 64 |
+
plt.grid(True, which="both", ls="--")
|
| 65 |
+
plt.xlim([1, sample_rate // 2]) # 1Hz から Nyquist周波数 (sample_rate/2) まで
|
| 66 |
+
|
| 67 |
+
# 縦軸の範囲を指定
|
| 68 |
+
# plt.ylim([y_min, y_max])
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
plt.show()
|
run.sh
CHANGED
|
@@ -8,7 +8,7 @@ ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|
| 8 |
if [[ $(id -u) -eq 0 ]]; then
|
| 9 |
echo "This script cannot be executed with root privileges."
|
| 10 |
echo "Please re-run without sudo and follow instructions to configure docker for non-root user if needed."
|
| 11 |
-
exit 1
|
| 12 |
fi
|
| 13 |
|
| 14 |
# Check if user can run docker without root.
|
|
@@ -17,14 +17,14 @@ if [[ ! $(groups $USER) =~ $RE ]]; then
|
|
| 17 |
echo "User |$USER| is not a member of the 'docker' group and cannot run docker commands without sudo."
|
| 18 |
echo "Run 'sudo usermod -aG docker \$USER && newgrp docker' to add user to 'docker' group, then re-run this script."
|
| 19 |
echo "See: https://docs.docker.com/engine/install/linux-postinstall/"
|
| 20 |
-
exit 1
|
| 21 |
fi
|
| 22 |
|
| 23 |
# Check if able to run docker commands.
|
| 24 |
if [[ -z "$(docker ps)" ]] ; then
|
| 25 |
echo "Unable to run docker commands. If you have recently added |$USER| to 'docker' group, you may need to log out and log back in for it to take effect."
|
| 26 |
echo "Otherwise, please check your Docker installation."
|
| 27 |
-
exit 1
|
| 28 |
fi
|
| 29 |
|
| 30 |
PLATFORM="$(uname -m)"
|
|
@@ -35,4 +35,7 @@ if [ $PLATFORM = "x86_64" ]; then
|
|
| 35 |
docker run -it --rm -v $ROOT:/app -w /app --network host ghcr.io/moriyalab/lab_tool:latest /bin/bash
|
| 36 |
else
|
| 37 |
echo "Not Support Platform. Only support x86."
|
|
|
|
|
|
|
|
|
|
| 38 |
fi
|
|
|
|
| 8 |
if [[ $(id -u) -eq 0 ]]; then
|
| 9 |
echo "This script cannot be executed with root privileges."
|
| 10 |
echo "Please re-run without sudo and follow instructions to configure docker for non-root user if needed."
|
| 11 |
+
# exit 1
|
| 12 |
fi
|
| 13 |
|
| 14 |
# Check if user can run docker without root.
|
|
|
|
| 17 |
echo "User |$USER| is not a member of the 'docker' group and cannot run docker commands without sudo."
|
| 18 |
echo "Run 'sudo usermod -aG docker \$USER && newgrp docker' to add user to 'docker' group, then re-run this script."
|
| 19 |
echo "See: https://docs.docker.com/engine/install/linux-postinstall/"
|
| 20 |
+
# exit 1
|
| 21 |
fi
|
| 22 |
|
| 23 |
# Check if able to run docker commands.
|
| 24 |
if [[ -z "$(docker ps)" ]] ; then
|
| 25 |
echo "Unable to run docker commands. If you have recently added |$USER| to 'docker' group, you may need to log out and log back in for it to take effect."
|
| 26 |
echo "Otherwise, please check your Docker installation."
|
| 27 |
+
# exit 1
|
| 28 |
fi
|
| 29 |
|
| 30 |
PLATFORM="$(uname -m)"
|
|
|
|
| 35 |
docker run -it --rm -v $ROOT:/app -w /app --network host ghcr.io/moriyalab/lab_tool:latest /bin/bash
|
| 36 |
else
|
| 37 |
echo "Not Support Platform. Only support x86."
|
| 38 |
+
docker pull ghcr.io/moriyalab/lab_tool:latest
|
| 39 |
+
docker run -it --rm -v $ROOT:/app -w /app --network host ghcr.io/moriyalab/lab_tool:latest /bin/bash
|
| 40 |
+
|
| 41 |
fi
|
test.py
CHANGED
|
@@ -1,11 +1,9 @@
|
|
| 1 |
import pandas as pd
|
| 2 |
import sys
|
| 3 |
-
import numpy as np
|
| 4 |
import matplotlib.pyplot as plt
|
| 5 |
-
import sys
|
| 6 |
-
|
| 7 |
from lab_tools import highpass
|
| 8 |
|
|
|
|
| 9 |
def load_signal(file_path, column_name):
|
| 10 |
try:
|
| 11 |
with open(file_path, 'r') as file:
|
|
@@ -14,7 +12,7 @@ def load_signal(file_path, column_name):
|
|
| 14 |
if 'Timestamp' in line:
|
| 15 |
header_line = i
|
| 16 |
break
|
| 17 |
-
|
| 18 |
# 見つけたヘッダー行からデータを読み込む
|
| 19 |
df = pd.read_csv(file_path, skiprows=header_line)
|
| 20 |
signal = df[column_name].values
|
|
@@ -25,8 +23,7 @@ def load_signal(file_path, column_name):
|
|
| 25 |
except KeyError as e:
|
| 26 |
print(f"Column '{column_name}' not found in the file. ({e})", file=sys.stderr)
|
| 27 |
return []
|
| 28 |
-
|
| 29 |
-
# print(load_signal("./test1_103313.csv", "Fp2"))
|
| 30 |
|
| 31 |
samplerate = 1000
|
| 32 |
time_data = load_signal("./test2_143809.csv", "Timestamp")
|
|
@@ -36,16 +33,16 @@ fs = 10 # 阻止域端周波数[Hz]※ベクトル
|
|
| 36 |
gpass = 5 # 通過域端最大損失[dB]
|
| 37 |
gstop = 40 # 阻止域端最小損失[dB]
|
| 38 |
Fs = 4096 # フレームサイズ
|
| 39 |
-
overlap = 90
|
| 40 |
|
| 41 |
data_filt = highpass.highpass_filter(signal_data, samplerate, fp, fs, gpass, gstop)
|
| 42 |
|
| 43 |
t_array_org, N_ave_org = highpass.overlap_frames(signal_data, samplerate, Fs, overlap)
|
| 44 |
t_array_filt, N_ave_filt = highpass.overlap_frames(signal_data, samplerate, Fs, overlap)
|
| 45 |
-
|
| 46 |
t_array_org, acf_org = highpass.hanning(t_array_org, Fs, N_ave_org)
|
| 47 |
t_array_filt, acf_filt = highpass.hanning(t_array_filt, Fs, N_ave_filt)
|
| 48 |
-
|
| 49 |
fft_array_org, fft_mean_org, fft_axis_org = highpass.fft_ave(t_array_org, samplerate, Fs, N_ave_org, acf_org)
|
| 50 |
fft_array_filt, fft_mean_filt, fft_axis_filt = highpass.fft_ave(t_array_filt, samplerate, Fs, N_ave_filt, acf_filt)
|
| 51 |
|
|
@@ -55,20 +52,20 @@ fft_mean_filt = highpass.linear_to_db(fft_mean_filt, 2e-5)
|
|
| 55 |
# フォントの種類とサイズを設定する。
|
| 56 |
# plt.rcParams['font.size'] = 14
|
| 57 |
# plt.rcParams['font.family'] = 'Times New Roman'
|
| 58 |
-
|
| 59 |
# 目盛を内側にする。
|
| 60 |
plt.rcParams['xtick.direction'] = 'in'
|
| 61 |
plt.rcParams['ytick.direction'] = 'in'
|
| 62 |
-
|
| 63 |
# グラフの上下左右に目盛線を付ける。
|
| 64 |
-
fig = plt.figure(figsize=(20,10))
|
| 65 |
ax1 = fig.add_subplot(211)
|
| 66 |
ax1.yaxis.set_ticks_position('both')
|
| 67 |
ax1.xaxis.set_ticks_position('both')
|
| 68 |
ax2 = fig.add_subplot(212)
|
| 69 |
ax2.yaxis.set_ticks_position('both')
|
| 70 |
ax2.xaxis.set_ticks_position('both')
|
| 71 |
-
|
| 72 |
# 軸のラベルを設定する。
|
| 73 |
ax1.set_xlabel('Time [s]')
|
| 74 |
ax1.set_ylabel('V[μV]')
|
|
@@ -81,16 +78,16 @@ ax1.plot(time_data, data_filt, label='filtered', lw=1)
|
|
| 81 |
ax2.plot(fft_axis_org, fft_mean_org, label='original', lw=1)
|
| 82 |
ax2.plot(fft_axis_filt, fft_mean_filt, label='filtered', lw=1)
|
| 83 |
plt.legend()
|
| 84 |
-
|
| 85 |
# 軸のリミットを設定する。
|
| 86 |
# ax1.set_xlim(0,1200)
|
| 87 |
# ax1.set_xticks(np.arange(0,1201,100))
|
| 88 |
# ax2.set_xlim(0, max(fft_axis_org)/2)
|
| 89 |
# ax2.set_xticks(np.arange(0,501,10))
|
| 90 |
# ax2.set_ylim(-50, 150)
|
| 91 |
-
|
| 92 |
# レイアウト設定
|
| 93 |
fig.tight_layout()
|
| 94 |
-
|
| 95 |
# グラフを表示する。
|
| 96 |
-
plt.savefig("./out.png")
|
|
|
|
| 1 |
import pandas as pd
|
| 2 |
import sys
|
|
|
|
| 3 |
import matplotlib.pyplot as plt
|
|
|
|
|
|
|
| 4 |
from lab_tools import highpass
|
| 5 |
|
| 6 |
+
|
| 7 |
def load_signal(file_path, column_name):
|
| 8 |
try:
|
| 9 |
with open(file_path, 'r') as file:
|
|
|
|
| 12 |
if 'Timestamp' in line:
|
| 13 |
header_line = i
|
| 14 |
break
|
| 15 |
+
|
| 16 |
# 見つけたヘッダー行からデータを読み込む
|
| 17 |
df = pd.read_csv(file_path, skiprows=header_line)
|
| 18 |
signal = df[column_name].values
|
|
|
|
| 23 |
except KeyError as e:
|
| 24 |
print(f"Column '{column_name}' not found in the file. ({e})", file=sys.stderr)
|
| 25 |
return []
|
| 26 |
+
|
|
|
|
| 27 |
|
| 28 |
samplerate = 1000
|
| 29 |
time_data = load_signal("./test2_143809.csv", "Timestamp")
|
|
|
|
| 33 |
gpass = 5 # 通過域端最大損失[dB]
|
| 34 |
gstop = 40 # 阻止域端最小損失[dB]
|
| 35 |
Fs = 4096 # フレームサイズ
|
| 36 |
+
overlap = 90
|
| 37 |
|
| 38 |
data_filt = highpass.highpass_filter(signal_data, samplerate, fp, fs, gpass, gstop)
|
| 39 |
|
| 40 |
t_array_org, N_ave_org = highpass.overlap_frames(signal_data, samplerate, Fs, overlap)
|
| 41 |
t_array_filt, N_ave_filt = highpass.overlap_frames(signal_data, samplerate, Fs, overlap)
|
| 42 |
+
|
| 43 |
t_array_org, acf_org = highpass.hanning(t_array_org, Fs, N_ave_org)
|
| 44 |
t_array_filt, acf_filt = highpass.hanning(t_array_filt, Fs, N_ave_filt)
|
| 45 |
+
|
| 46 |
fft_array_org, fft_mean_org, fft_axis_org = highpass.fft_ave(t_array_org, samplerate, Fs, N_ave_org, acf_org)
|
| 47 |
fft_array_filt, fft_mean_filt, fft_axis_filt = highpass.fft_ave(t_array_filt, samplerate, Fs, N_ave_filt, acf_filt)
|
| 48 |
|
|
|
|
| 52 |
# フォントの種類とサイズを設定する。
|
| 53 |
# plt.rcParams['font.size'] = 14
|
| 54 |
# plt.rcParams['font.family'] = 'Times New Roman'
|
| 55 |
+
|
| 56 |
# 目盛を内側にする。
|
| 57 |
plt.rcParams['xtick.direction'] = 'in'
|
| 58 |
plt.rcParams['ytick.direction'] = 'in'
|
| 59 |
+
|
| 60 |
# グラフの上下左右に目盛線を付ける。
|
| 61 |
+
fig = plt.figure(figsize=(20, 10))
|
| 62 |
ax1 = fig.add_subplot(211)
|
| 63 |
ax1.yaxis.set_ticks_position('both')
|
| 64 |
ax1.xaxis.set_ticks_position('both')
|
| 65 |
ax2 = fig.add_subplot(212)
|
| 66 |
ax2.yaxis.set_ticks_position('both')
|
| 67 |
ax2.xaxis.set_ticks_position('both')
|
| 68 |
+
|
| 69 |
# 軸のラベルを設定する。
|
| 70 |
ax1.set_xlabel('Time [s]')
|
| 71 |
ax1.set_ylabel('V[μV]')
|
|
|
|
| 78 |
ax2.plot(fft_axis_org, fft_mean_org, label='original', lw=1)
|
| 79 |
ax2.plot(fft_axis_filt, fft_mean_filt, label='filtered', lw=1)
|
| 80 |
plt.legend()
|
| 81 |
+
|
| 82 |
# 軸のリミットを設定する。
|
| 83 |
# ax1.set_xlim(0,1200)
|
| 84 |
# ax1.set_xticks(np.arange(0,1201,100))
|
| 85 |
# ax2.set_xlim(0, max(fft_axis_org)/2)
|
| 86 |
# ax2.set_xticks(np.arange(0,501,10))
|
| 87 |
# ax2.set_ylim(-50, 150)
|
| 88 |
+
|
| 89 |
# レイアウト設定
|
| 90 |
fig.tight_layout()
|
| 91 |
+
|
| 92 |
# グラフを表示する。
|
| 93 |
+
plt.savefig("./out.png")
|