diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..9b540ab Binary files /dev/null and b/.DS_Store differ diff --git a/code/anim.py b/code/anim.py new file mode 100644 index 0000000..b1a9ec4 --- /dev/null +++ b/code/anim.py @@ -0,0 +1,128 @@ +import numpy as np +import plotly.graph_objects as go + +""" +Interactive 3D Plotly animation of the scalar line integral + ∮_C f(x, y) ds with f(x, y) = x · y +along the unit circle C, plotted on the surface z = f(x,y). +No files are written; the animation is displayed with interactive controls. +""" + +# Parameters +t_frame = np.linspace(0.0, 2 * np.pi, 120) + + +# Scalar field definition +def scalar_field(x, y): + return x * y + + +# Surface mesh for scalar field +lin = np.linspace(-1.2, 1.2, 50) +X, Y = np.meshgrid(lin, lin) +Z = scalar_field(X, Y) + +# Compute running integral along circle +# Midpoint rule +mid_ts = (t_frame[1:] + t_frame[:-1]) / 2 +f_mid = scalar_field(np.cos(mid_ts), np.sin(mid_ts)) +dt = t_frame[1:] - t_frame[:-1] +running = np.concatenate([[0], np.cumsum(f_mid * dt)]) + +# Prepare static surface trace +surface = go.Surface( + x=X, y=Y, z=Z, colorscale="RdBu", cmin=-1, cmax=1, opacity=0.6, showscale=False +) + +# Full path on surface +curve_x = np.cos(t_frame) +curve_y = np.sin(t_frame) +curve_z = scalar_field(curve_x, curve_y) +path = go.Scatter3d( + x=curve_x, y=curve_y, z=curve_z, mode="lines", line=dict(color="black", width=2) +) + +# Initial marker at t=0 +t0 = t_frame[0] +marker = go.Scatter3d( + x=[np.cos(t0)], + y=[np.sin(t0)], + z=[scalar_field(np.cos(t0), np.sin(t0))], + mode="markers", + marker=dict(size=5, color="black"), +) + +# Build frames for animation +frames = [] +for i, t in enumerate(t_frame): + x0, y0 = np.cos(t), np.sin(t) + z0 = scalar_field(x0, y0) + frame = go.Frame( + data=[marker.update(x=[x0], y=[y0], z=[z0])], + layout=go.Layout(title_text=f"Running integral: {running[i]:.3f}"), + name=f"frame{i}", + ) + frames.append(frame) + +# Layout with sliders and buttons +graph = go.Figure( + data=[surface, path, marker], + layout=go.Layout( + title="Running integral: 0.000", + scene=dict( + xaxis=dict(range=[-1.3, 1.3]), + yaxis=dict(range=[-1.3, 1.3]), + zaxis=dict(range=[Z.min(), Z.max()]), + ), + updatemenus=[ + dict( + type="buttons", + showactive=False, + buttons=[ + dict( + label="Play", + method="animate", + args=[ + None, + dict( + frame=dict(duration=50, redraw=True), + fromcurrent=True, + transition=dict(duration=0), + ), + ], + ) + ], + ) + ], + ), + frames=frames, +) + +# Add slider +sliders = [ + dict( + steps=[ + dict( + method="animate", + args=[ + [f.name], + dict( + mode="immediate", + frame=dict(duration=50, redraw=True), + transition=dict(duration=0), + ), + ], + label=str(i), + ) + for i, f in enumerate(frames) + ], + transition=dict(duration=0), + x=0, + y=0, + currentvalue=dict(prefix="Frame: "), + len=1.0, + ) +] +graph.update_layout(sliders=sliders) + +graph.show() diff --git a/code/shadertoy.glsl b/code/shadertoy.glsl new file mode 100644 index 0000000..8db891f --- /dev/null +++ b/code/shadertoy.glsl @@ -0,0 +1,18 @@ +/* Pixel unit conversion function */ +vec2 pos(in float x, in float y) { return st + vec2(x * rx, y * rx); } +vec2 pos(in float x) { return pos(x, x); } +vec2 pos(in vec2 p) { return pos(p.x, p.y); } +float size(in float x) { return x * rx; } +vec2 size(in float x, in float y) { return vec2(x * rx, y * rx); } + +void mainImage( out vec4 fragColor, in vec2 fragCoord ) +{ + // Normalized pixel coordinates (from 0 to 1) + vec2 uv = fragCoord/iResolution.xy; + + // Time varying pixel color + vec3 col = 0.5 + 0.5*cos(iTime+uv.xyx+vec3(0,2,4)); + + // Output to screen + fragColor = vec4(col,1.0); +} diff --git a/formulas/Formelsammlung.md b/formulas/Formelsammlung.md new file mode 100644 index 0000000..dde8aa8 --- /dev/null +++ b/formulas/Formelsammlung.md @@ -0,0 +1,228 @@ + +## Woche 1 +- Ich kenne die Begriffe Integral, Stammfunktion, lineare Substitution und deren wichtigste Eigenschaften. +- Ich kenne die Begriffe komplexe Zahl, Realteil, Imaginärteil, Betrag und komplex konjugiert und deren wichtigste Eigenschaften. +- Ich kenne die elementaren Rechenregeln für die komplexe Konjugation. +- Ich kann die Methode der linearen Substitution anwenden, um bestimmte und unbestimmte Integrale von linear substituierten Elementarfunktionen zu berechnen. +- Ich kann den Flächeninhalt zwischen einer Funktion und den Koordinatenachsen bestimmen. +- Ich kann den Flächeninhalt zwischen zwei sich schneidenden Funktionen bestimmen. +- Ich kann das Volumen von Rotationskörpern bestimmen. +- Ich kann für jede komplexe Zahl ihren Realteil, Imaginärteil, Betrag und ihre komplex Konjugierte bestimmen. +- Ich kann Summe, Differenz, Produkt und Quotient von komplexen Zahlen berechnen. +- Ich kann einfache Brüche und Potenzen von komplexen Zahlen durch Anwenden der Rechenregeln vereinfachen. + + +## Woche 2 +- Ich kenne die Begriffe Integral, Stammfunktion, Substitution, Trapezformel und deren wichtigste Eigenschaften. +- Ich kenne die Begriffe Gaußsche Zahlenebene, arithmetische und trigonometrische Form einer komplexen Zahl und Arg-Funktion und deren Eigenschaften. +- Ich kann die Methode der Substitution anwenden, um bestimmte und unbestimmte Integrale zu berechnen. +- Ich kann bestimmte Integrale näherungsweise auf eine vorgegebene Anzahl Dezimalstellen mit Python/Numpy berechnen. + +- Ich kann komplexe Zahlen in der Gaußschen Zahlenebene darstellen. +- Ich kann komplexe Zahlen von der arithmetischen in die trigonometrische Form und umgekehrt umwandeln. +- Ich kann einfache Brüche und Potenzen von komplexen Zahlen durch Anwenden der Rechenregeln vereinfachen. +- Ich kann quadratische Gleichungen mit reellen Koeffizienten lösen. + +## Woche 3 + +- Ich kenne die Begriffe Integral, Stammfunktion, partielle Integration und deren wichtigste Eigenschaften. +- Ich kenne die Begriffe Exponentialform einer komplexen Zahl, Eulersche Formel, Potenzgleichungen und deren Eigenschaften. +- Ich kann die partielle Integration anwenden, um bestimmte und unbestimmte Integrale zu berechnen. +- Ich kann unbestimmte Integrale mit Python/Sympy berechnen. +- Ich kann komplexe Zahlen in der arithmetischen, trigonometrischen und Exponentialform darstellen und von einer in die andere Form umwandeln. +- Ich kann die Grundrechenarten für die komplexen Zahlen anwenden. +- Ich kann komplexe Zahlen sowohl potenzieren als auch aus ihnen die Wurzel ziehen. + +## Woche 4 +- Ich kenne den Begriff uneigentliches Integral und dessen wichtigste Eigenschaften. +- Ich kenne die Begriffe Matrix, symmetrische/schiefsymmetrische Matrix, Einheitsmatrix, inverse Matrix, Transposition und deren wichtigste Eigenschaften. + +- Ich kann die Existenz eines uneigentlichen Integrals beurteilen und gegebenenfalls seinen Wert berechnen. +- Ich kann Matrizen addieren, subtrahieren und mit einem Skalar bzw. mit einer anderen Matrix multiplizieren und bestimmen, ob diese Operationen für gegebene Matrizen durchführbar sind oder nicht. + +## Woche 5 +- Ich kenne die Begriffe Bogenlänge, Mantelfläche von Rotationskörpern, Massenmittelpunkt, Schwerpunkt, Flächenschwerpunkt und deren wichtigste Eigenschaften. +- Ich kenne die Begriffe Matrix, inverse Matrix, Drehmatrix, lineare Abbildung und deren wichtigste Eigenschaften. +- Ich kenne die 2x2 Standardmatrizen und die dadurch beschriebenen linearen Abbildungen in 2D. +- Ich kann mit Hilfe der Integration die Bogenlänge einer ebenen Kurve, die Mantelfläche, den Flächenschwerpunkt und das Volumen von Rotationskörpern berechnen. +- Ich kann lineare Gleichungssysteme mit Hilfe von Matrizen darstellen. +- Ich kann bestimmen, ob eine Matrix invertierbar ist oder nicht und gegebenenfalls die inverse Matrix bestimmen. +- Ich kann Verknüpfungen von linearen Abbildungen durch Matrix-Produkte ausdrücken. + +## Woche 6 +- Ich kenne die Begriffe Polarkoordinaten, Zylinderkoordinaten, Schwerpunkt, Flächenschwerpunkt und deren wichtigste Eigenschaften. +- Ich kenne die Begriffe orthogonale Matrix, Drehmatrix, Spiegelmatrix und deren wichtigste Eigenschaften. +- Ich kenne diejenigen der 2x2 Standardmatrizen, die orthogonal sind. +- Ich kenne das Spaltenvektor Konstruktionsverfahren zur Bestimmung von Matrizen und kann dieses anwenden. +- Ich kann mit Hilfe der Integration den Schwerpunkt homogener Flächen und von Rotationskörpern berechnen. +- Ich kann kartesische Koordinaten in Polar- bzw. Zylinderkoordinaten umwandeln und umgekehrt. +- Ich kann Dreh- und Spiegelmatrizen zur Lösung konkreter Fragestellungen anwenden. + +## Woche 7 +- Ich kenne die Begriffe Mehrfachintegral, Integrationsgebiet und deren wichtigste Eigenschaften. +- Ich kenne die Begriffe Spur, Determinante, Regel von Sarrus und deren wichtigste Eigenschaften. +- Ich kann - z. B. für die Vereinfachung von Zweifach- und Dreifachintegralen - kartesische Koordinaten in Polar- bzw. Zylinderkoordinaten umwandeln. +- Ich kann Mehrfachintegrale auf einfachen Gebieten in 2D und 3D berechnen und die Integrationsreihenfolge vertauschen. +- Ich kann Masse, Volumen und Schwerpunkt mittels Mehrfachintegralen bestimmen. +- Ich kann die Eigenschaften einer Matrix anhand ihrer Spur und Determinante beurteilen. +- Ich kann die Determinante quadratischer Matrizen in 2D und 3D berechnen. +- Ich kann die Determinante einer quadratischen Matrix mit Hilfe des Gaußschen Verfahrens berechnen + +## Woche 8 +- Ich kenne die Begriffe Skalarfeld, Vektorfeld, Kurve, eindimensionale Schnittkurve, Höhenlinie, Niveaufläche, Niveaumenge und deren wichtigste Eigenschaften. +- Ich kenne die Begriffe charakteristisches Polynom, Eigenwert, Eigenvektor, Eigenraum, Spektrum sowie deren wichtigste Eigenschaften. +- Ich kann die natürliche Definitionsmenge und Wertemenge einer Funktion mehrerer Variabler bestimmen. +- Ich kann Höhenlinien und Niveauflächen von Funktionen von zwei bzw. drei Variablen bestimmen und skizzieren. +- Ich kann das charakteristische Polynom, die Eigenwerte und Eigenvektoren einer quadratischen Matrix berechnen. +- Ich kann die Eigenschaften einer Matrix bzw. linearen Abbildung anhand ihrer Eigenwerte und Eigenvektoren beurteilen und umgekehrt. + +## Woche 9 +- Ich kenne die Begriffe partielle Ableitung, Tangentialebene, Gradient, totales Differential und deren wichtigste Eigenschaften. +- Ich kenne die Begriffe Axiom, Skalarkörper, Vektorraum, Linearkombination, lineare Hülle, linear abhängig, linear unabhängig, erzeugend, Basis, Dimension und deren wichtigste Eigenschaften. +- Ich kann die partiellen Ableitungen von Funktionen in mehreren Variablen berechnen. +- Ich kann die Tangentialebene in einem Punkt an ein Skalarfeld bestimmen. +- Ich kann den Gradienten und das totale Differential von Skalarfeldern bestimmen. +- Ich kann  beurteilen, ob gegebene Mengen eine Vektorraumstruktur bilden. +- Ich kann beurteilen, ob die Vektoren einer Teilmenge von ℝ𝑛Rn  linear abhängig, linear unabhängig oder erzeugend sind und ob sie eine Basis bilden. + +## Woche 10 +- Ich kenne die Begriffe Satz von Schwarz, Hesse-Matrix, Richtungsableitung, lokale/globale Extrema, Sattelpunkt, Extrema unter Nebenbedingungen, Lagrange´scher Multiplikator und deren wichtigste Eigenschaften. +- Ich kenne die Begriffe Bild, Kern, algebraische und geometrische Vielfachheit, ähnliche Matrix, Diagonalisierbarkeit einer Matrix und deren wichtigste Eigenschaften. +- Ich kann die Hesse-Matrix von Skalarfeldern bestimmen. +- Ich kann die Richtungsableitung berechnen. +- Ich kann lokale Extrema und Sattelpunkte bestimmen. +- Ich kann Extrema einer Funktion unter Nebenbedingungen bestimmen. +- Ich kann Bild und Kern einer linearen Abbildung berechnen. +- Ich kann bestimmen, ob eine Matrix diagonalisierbar ist oder nicht und die Diagonalmatrix angeben. + +## Woche 11 +- Ich kenne die Begriffe Kurve, Spur, Geschwindigkeits-/Tangentenvektor, Beschleunigungsvektor, Tangenteneinheitsvektor, Hauptnormalenvektor, Binormalenvektor, Parametrisierung, Bogenlänge, Kurven-/Linienintegral, Vektorfeld und deren wichtigste Eigenschaften. +- Ich kann die Spur einer parametrisierten Kurve in 2D skizzieren. +- Ich kann ein Vektorfeld in 2D skizzieren. +- Ich kann die Bogenlänge einer Kurve berechnen. +- Ich kann Linienintegrale berechnen. + +## Woche 12 +- Ich kenne die Begriffe Laplace Operator, Divergenz und Rotation eines Vektorfeldes, quellenfrei, wirbelfrei, konservativ, Potential-/Gradientenfeld und deren wichtigste Eigenschaften. +- Ich kann die Rotation und Divergenz von Vektorfeldern bestimmen. +- Ich kann bestimmen, ob ein Vektorfeld quellen- bzw. wirbelfrei ist. + + +## Probeprüfung Themen + +--- + +#### **Aufgabe 1 – Aussagen zu Integralen** + +- Begriff und Eigenschaften von Integral, Stammfunktion, (linearer) Substitution (1 | 2) + +- Anwendung der linearen Substitution auf bestimmte/unbestimmte Integrale (1 | 2) + +- Beurteilung & Berechnung eines uneigentlichen Integrals (4) + +- Zusammenhang zwischen Flächeninhalt in 2 D und (Doppel-)Integral (7) + + +--- + +#### **Aufgabe 2 – Aussagen über eine Funktion** + +- Begriff Skalarfeld, Niveau-/Höhen­linien, Niveau­mengen (8) + +- Bestimmung des Funktionswertes in einem Punkt (grundlegend, 8) + +- Interpretation des Graphen einer Funktion zweier Variablen im 3 D-Raum (8) + + +--- + +#### **Aufgabe 3 – Aussagen über ein Vektorfeld** + +- Rotation, Divergenz, konservative (= wirbel- & quellenfreie) Vektorfelder, Potentialfeld (12) + +- Prüfen, ob ∇ × **v** = 0 bzw. ∇·**v** = 0 und Existenz eines Potentials (12) + + +--- + +#### **Aufgabe 4 – Aussagen über zwei Matrizen** + +- Begriffe Matrix, symmetrisch, orthogonal, regulär (invertierbar), Bild (img) und Kern (ker) (4 | 5 | 6 | 7) + +- Bestimmen von Invertierbarkeit und Rang über Determinante oder Gauß-Verfahren (5 | 7) + +- Eigenschaften orthogonaler bzw. symmetrischer Matrizen (4 | 6) + + +--- + +#### **Aufgabe 5 – Weitere Aussagen zu Matrizen** + +- Produkte invertierbarer Matrizen und deren Invertierbarkeit (5) + +- Zusammenhang Matrixpotenz A³ – Eigenwerte λ³ (8) + +- Existenz unabhängiger Eigenvektoren zu verschiedenen Eigenwerten (8 | 10) + + +--- + +#### **Aufgabe 6 – Diverse Einzelaussagen** + +- Komplexe Zahlen: Konjugation, Potenzgleichungen, trigono­metrische Form (1 | 2 | 3) + +- Gradient und seine Orthogonalität zu Höhenlinien (9 | 10 | 12) + +- Lineare Unabhängigkeit & Basisbegriffe in Vektorräumen (9) + +- Definition einer linearen Abbildung (Homogenität & Additivität) (9) + + +--- + +#### **Aufgabe 7 – Gemischte Rechenaufgaben** + +a) **z⁴ = 16 e^{iπ}** lösen + +- Potenz- & Wurzelziehen komplexer Zahlen in Exponential-/Trig- & arithmetischer Form (3) + b) **A¹⁵** berechnen + +- Dreh- bzw. orthogonale 2×2-Matrizen erkennen, Potenzen mittels Diagonalisierung/Rotor-Eigenschaften bilden (6 | 8 | 10) + c) Integrationsreihenfolge vertauschen + +- Mehrfachintegrale, Gebietsskizze, Reihenfolgenwechsel (7) + d) Richtungsableitung an P(1, 2) in Richtung **v** + +- Gradient, Richtungsableitung, Normierung des Richtungsvektors (10) + e) Skalares Kurvenintegral längs **γ(t)** + +- Bogenlänge-Parameter t, Kurvenintegral eines Skalarfeldes (11) + + +--- + +#### **Aufgabe 8 – Lokale Extrema & Sattelpunkte** + +- Partielle Ableitungen, Gradient = 0 setzen (9) + +- Hesse-Matrix, Eigenwerte-Kriterium für Extrema/Sattel (10) + + +--- + +#### **Aufgabe 9 – Flächenschwerpunkt eines Trapezes** + +- Flächenschwerpunkt mittels Doppelintegration berechnen (5) + +- Anwendung von Mehrfachintegralen auf Masse/Schwerpunkt (7) + + +--- + +#### **Aufgabe 10 – Diagonalisierung einer 3×3-Matrix** + +- Charakteristisches Polynom, Eigenwerte, Eigenvektoren (8) + +- Bild, Kern, algebraische / geometrische Vielfachheit, Diagonalisierbarkeit & Transformationsmatrix (10) + + diff --git a/formulas/Formulas.pur b/formulas/Formulas.pur new file mode 100644 index 0000000..e67c3df Binary files /dev/null and b/formulas/Formulas.pur differ diff --git a/formulas/Schemas.md b/formulas/Schemas.md new file mode 100644 index 0000000..1410d2a --- /dev/null +++ b/formulas/Schemas.md @@ -0,0 +1,565 @@ +# WIP Konzept - Uneigentliches Integral +# WIP Konzept - Komplexe Zahlen + +# 10. Diagonalisierung und Transformationsmatrix +# 9. Schwerpunkt +1. **Gebiet $\mathcal A$ festlegen** + Wähle Integrationsgrenzen, z. B. + $$ + x\in[a,b],\quad y\in\bigl[y_{\mathrm{unten}}(x),\,y_{\mathrm{oben}}(x)\bigr] + $$ + oder umgekehrt + $$ + y\in[c,d],\quad x\in\bigl[x_{\mathrm{links}}(y),\,x_{\mathrm{rechts}}(y)\bigr]. + $$ + +2. **Dichtefunktion $\rho(x,y)$ angeben** + - Allgemein beliebig. + - Regelfall homogen: $\rho(x,y)\equiv 1$. + +3. **Gesamtmasse \(M\) berechnen** + $$ + M \;=\;\iint_{\mathcal A}\rho(x,y)\,dA + \;=\;\int_{x=a}^{b}\!\int_{y=y_{\mathrm{unten}}(x)}^{y_{\mathrm{oben}}(x)} + \rho(x,y)\,dy\,dx. + $$ + +4. **Erstes Moment zur \(y\)-Achse (\(x_S\))** + $$ + M_y + \;=\;\iint_{\mathcal A} x\,\rho(x,y)\,dA + \;=\;\int_{x=a}^{b}\!\int_{y=y_{\mathrm{unten}}(x)}^{y_{\mathrm{oben}}(x)} + x\,\rho(x,y)\,dy\,dx. + $$ + +5. **Erstes Moment zur \(x\)-Achse ($y_S$)** + $$ + M_x + \;=\;\iint_{\mathcal A} y\,\rho(x,y)\,dA + \;=\;\int_{x=a}^{b}\!\int_{y=y_{\mathrm{unten}}(x)}^{y_{\mathrm{oben}}(x)} + y\,\rho(x,y)\,dy\,dx. + $$ + +6. **Schwerpunktkoordinaten** + $$ + x_S \;=\;\frac{M_y}{M}, + \qquad + y_S \;=\;\frac{M_x}{M}. + $$ + +--- + +### Beispiel für $\rho(x,y)\equiv1$ und $0\le x\le2a,\;0\le y\le a+x$ + +- Gebiet: + $$ + x\in[0,2a],\quad y\in[0,\;a+x]. + $$ +- Gesamtmasse: + $$ + M = \int_{0}^{2a}\!\int_{0}^{a+x}1\,dy\,dx = 4a^2. + $$ +- Erste Momente: + $$ + M_y = \int_{0}^{2a}\!\int_{0}^{a+x} x\,dy\,dx, + \quad + M_x = \int_{0}^{2a}\!\int_{0}^{a+x} y\,dy\,dx. + $$ +- Schwerpunkt: + $$ + x_S = \frac{M_y}{M} = \frac{7}{6}a, + \quad + y_S = \frac{M_x}{M} = \frac{13}{12}a. + $$ + + + +# 8. Extrema - Mehrdimensional + +| **Baustein** | **Was es ist / tut** | **Warum es wichtig ist** | +|--------------|----------------------|--------------------------| +| **1. Funktion** $f(x,y)$ | Die „Höhenlandschaft“, die untersucht wird. | Ohne Funktion keine Analyse. | +| **2. Gradient** $\nabla f=(f_x,f_y)$ | Erste partielle Ableitungen → zeigt stärksten Anstieg. | Setze $\nabla f = \mathbf 0$, um **kritische Punkte** zu finden. | +| **3. Gleichungssystem** $\;f_x=0,\;f_y=0\;$ | Zwei Gleichungen. | Liefert die Koordinaten aller kritischen Punkte. | +| **4. Hesse-Matrix** $$H=\begin{pmatrix}f_{xx}&f_{xy}\\f_{yx}&f_{yy}\end{pmatrix}$$ | Matrix der zweiten Ableitungen. | Enthält Krümmungs-Info der Fläche. | +| **5. Determinante** $$D=\det H=f_{xx}f_{yy}-f_{xy}^{2}$$ | Eine Zahl pro Punkt. | Entscheidet schnell über Punktart:
• $D>0$ ⇒ Extremum
• $D<0$ ⇒ Sattel
• $D=0$ ⇒ Test unentschieden | +| **6. Vorzeichen von** $f_{xx}$ | Nur wenn $D>0$. | Unterscheidet Minimum ($f_{xx}>0$) vs. Maximum ($f_{xx}<0$). | +| **7. Funktionswert** $f(x_0,y_0)$ *(optional)* | Höhe des Punktes. | Rein informativ, z. B. tiefstes Minimum. | +| **8. Sonderfälle**
• Eigenwerte von $H$
• Lagrange-Multiplikatoren | Alternativen/Erweiterungen. | Eigenwerte geben gleiche Entscheidung; Lagrange bei Nebenbedingungen. | + +--- + +## Ablauf in Kurzform + +1. **Aufschreiben:** $f(x,y)$ +2. **Gradient bilden:** $f_x,\;f_y$ +3. **Kritische Punkte:** Löse $f_x=0,\;f_y=0$ → $\{P_i\}$ +4. **Hesse-Matrix:** $f_{xx},f_{xy},f_{yy}$ in jedem $P_i$ +5. **Klassifikation:** + * $D<0$ ⇒ Sattel + * $D>0$ & $f_{xx}>0$ ⇒ Minimum + * $D>0$ & $f_{xx}<0$ ⇒ Maximum + * $D=0$ ⇒ weiterer Test nötig +1. **(Optional) Funktionswerte** $f(P_i)$ einsetzen, um Höhen/Tiefen zu vergleichen. + + +# 7. e) Skalares Kurvenintegral +**Allgemeines Schema zur Berechnung eines skalaren Kurvenintegrals** + +1. **Parameterdarstellung** + $$\gamma(t) = \bigl(x(t),\,y(t)\bigr),\quad t\in[a,b]$$ + +2. **Einsetzen in die skalare Feldfunktion** + $$f\bigl(\gamma(t)\bigr) = f\bigl(x(t),\,y(t)\bigr)$$ + +3. **Berechnung des Bogenelements** + - Ableitung: + $$\gamma'(t) = \bigl(x'(t),\,y'(t)\bigr)$$ + - Norm (Geschwindigkeit): + $$\|\gamma'(t)\| = \sqrt{x'(t)^2 + y'(t)^2}$$ + +4. **Formulierung des Kurvenintegrals** + $$ + \int_{K} f\,\mathrm{d}s + = \int_{a}^{b} f\bigl(\gamma(t)\bigr)\,\|\gamma'(t)\|\,\mathrm{d}t + $$ + +5. **Auswertung des Integrals** + - Ggf. Substitution wählen, z. B. $u = g(t)$ + - $\mathrm{d}u$ bestimmen und $t\,\mathrm{d}t$ umschreiben + - Grenzen anpassen: + $$t=a\mapsto u=u(a),\quad t=b\mapsto u=u(b)$$ + - Stammfunktion finden und einsetzen + - Ergebnis vereinfachen + +6. **Interpretation** + - Physikalisch: Gesamtmasse, Arbeit, Energie, … + - Mathematisch: Konvergenz prüfen (bei offenen Endpunkten) + +## Richtungsableitung + +1. **Gradient berechnen** + $$ + \nabla f(x) + = + \begin{pmatrix} + \displaystyle \frac{\partial f}{\partial x_{1}}(x) \\[6pt] + \vdots \\[4pt] + \displaystyle \frac{\partial f}{\partial x_{n}}(x) + \end{pmatrix}. + $$ + +2. **Einheitsvektor bilden** + Sei $\vec v = (v_{1},\dots,v_{n})^\top\in\mathbb{R}^{n}$. Dann + $$ + \|\vec v\| = \sqrt{v_{1}^{2} + \dots + v_{n}^{2}}, + \qquad + \vec u = \frac{\vec v}{\|\vec v\|}. + $$ + +3. **Richtungsableitung** + $$ + D_{\vec v}f(P) + = \lim_{h\to 0}\frac{f\bigl(P + h\,\vec u\bigr) - f(P)}{h} + = \nabla f(P)\,\bullet\,\vec u + = \nabla f(P)\,\bullet\,\frac{\vec v}{\|\vec v\|}. + $$ + +**Kurzgefasst:** +$$ +D_{\vec v}f(P) += \nabla f(P)\,\bullet\,\frac{\vec v}{\|\vec v\|}. +$$ + + +# 7. d) Integrationsreihenfolge ändern + +| **Vorher** – Typ I | **Nachher** – Typ II | **Was wohin ?** | +|--------------------|----------------------|-----------------| +| $$\int_{x=a}^{b}\;\int_{y=l(x)}^{u(x)} f(x,y)\,dy\,dx$$ | $$\int_{y=l(a)}^{u(b)}\;\int_{x=l^{-1}(y)}^{u^{-1}(y)} f(x,y)\,dx\,dy$$ | 1. äußere Variable wechselt $x\to y$
2. **äußere Grenzen** = tiefster / höchster $y$-Wert des Gebiets (hier $l(a),u(b)$)
3. **innere Grenzen** = Umkehrfunktionen der alten Kurven $l,u$ (links / rechts) | +| *(Spezialfall $l(x)=0$)* | | | + +#### Idiotensicheres Beispiel +Gegeben +$$ +\int_{x=a}^{b}\;\int_{y=0}^{x^{2}} f(x,y)\,dy\,dx +$$ + +➜ Tauschen + +$$ +\int_{y=0}^{b^{2}}\;\int_{x=\sqrt{y}}^{b} f(x,y)\,dx\,dy +$$ + +* drag-and-drop-Mapping: + * $0$ bleibt $0$ (äußere unten) + * $x^{2}$ → Umkehr $\sqrt{y}$ (innere links) + * $a,b$ bleiben Konstanten, landen als innere/rechte Grenze ($x=b$) und sorgen für $y$-Max $=b^{2}$ + +### Matrixpotenz $A^{15}$ – idiotensicher + +1. **Faktor ausrechnen** + $$A=\tfrac12\begin{pmatrix}\sqrt3&-1\\[2pt]1&\sqrt3\end{pmatrix} + =\begin{pmatrix}\tfrac{\sqrt3}{2}&-\tfrac12\\[4pt]\tfrac12&\tfrac{\sqrt3}{2}\end{pmatrix}$$ + +2. **Erkennen: Rotationsmatrix** + Form $\bigl(\!\begin{smallmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{smallmatrix}\!\bigr)$ + ⇒ $\cos\theta=\sqrt3/2,\ \sin\theta=1/2 \;\Longrightarrow\; \theta=\pi/6$ (30°). + +3. **Potenzregel für Rotationsmatrizen** + $$A^n=\begin{pmatrix}\cos(n\theta)&-\sin(n\theta)\\\sin(n\theta)&\cos(n\theta)\end{pmatrix}$$ + +4. **Hier $n=15$** + $$n\theta=15\cdot\frac{\pi}{6}= \frac{5\pi}{2}=2\pi+\frac{\pi}{2}$$ + (Rotation um $450^\circ$ ≙ $90^\circ$). + +5. **Kosinus/Sinus auslesen** + $$\cos\!\bigl(\tfrac{\pi}{2}\bigr)=0,\qquad + \sin\!\bigl(\tfrac{\pi}{2}\bigr)=1.$$ + +6. **Ergebnis** + $$\boxed{A^{15}= \begin{pmatrix}0&-1\\[4pt]1&0\end{pmatrix}}$$ + + +# WIP 7. c Vertauschen Integrationsreihenfolge +# WIP 7. b) Matrix Potenz +Diagonalmatrix oder Drehmatrix. + +# 7. a) Komplexe Zahl Polarform gleichung +$$ +z^{\,n}=R\,e^{i\Phi},\qquad R>0,\;n\in\mathbb N +$$ + +| Schritt | Was tun? | Formel / Erläuterung | +|---------|-----------|----------------------| +| **1. Polar-/Exponentialform herstellen** | Schreibe die rechte Seite als $R\,e^{i\Phi}$ mit Betrag $R$ und (Haupt-)Argument $\Phi$.
Falls sie in kartesischer Form $a+ib$ vorliegt: $$R=\sqrt{a^{2}+b^{2}},\qquad \Phi=\operatorname{atan2}(b,a).$$ | +| **2. n-te-Wurzel-Formel anwenden** | Für $$z^{n}=R\,e^{i\Phi}$$ lauten alle Lösungen $$z_k=\sqrt[n]{R}\,e^{\,i(\Phi+2k\pi)/n},\qquad k=0,1,\dots,n-1.$$ | +| **3. Winkel berechnen** | Definiere $$\theta_k=\frac{\Phi+2k\pi}{n}.$$ Diese $n$ Winkel liegen äquidistant auf dem Kreis (Abstand $2\pi/n$). | +| **4. Arithmetische (kartesische) Form** | Nutze Euler $e^{i\theta_k}=\cos\theta_k+i\sin\theta_k$:
$$z_k=\sqrt[n]{R}\,(\cos\theta_k+i\sin\theta_k).$$ | +| **5. (Optional) Prüfen** | Einsetzen zeigt $$z_k^{\,n}=R\,e^{i\Phi}.$$ | + +#### Kurzform der Lösungsmengen-Formel +$$ +\boxed{\,z_k=\sqrt[n]{R}\,e^{\,i(\Phi+2k\pi)/n},\;k=0,\dots,n-1\,} +$$ + +**Merke** +1. Betrag der Wurzeln: $\sqrt[n]{R}$. +2. Winkel: $\theta_k=\dfrac{\Phi+2k\pi}{n}$. +3. $n$ Lösungen liegen gleichmäßig verteilt auf einem Kreis mit Radius $\sqrt[n]{R}$. + +# Vektorfelder + + + +# Matrizen Eigenschaften + + +--- +## Singular vs. Regulär +>Check: Deteminante berechnen +- **Singular** ⇔ $\det A=0$ → nicht invertierbar. +- **Regulär** ⇔ $\det A\neq0$ → Inverse $A^{-1}$ existiert. + +--- +## Diagonalmatrix +Matrix +$$ +D=\begin{pmatrix}4&0&0\\0&-2&0\\0&0&7\end{pmatrix} +$$ + +Eigenschaften +- **Besteht typischerweise aus den Eigenwerten** einer Matrix entlang der Hauptdiagonalen, wenn man $A=PDP^{-1}$ diagonalisiert. +- Kommutiert mit jeder anderen Diagonalmatrix +- **Leicht zu potenzieren/invertieren**: + $D^k=\operatorname{diag}(4^k,-2^k,7^k)$, + $D^{-1}=\operatorname{diag}\!\bigl(\tfrac14,-\tfrac12,\tfrac17\bigr)$ +- **Orthogonal** genau dann, wenn $|d_i|=1$ (dann $DD^\top=I$) +--- +## Orthogonale Matrix +Matrix +$$ +Q=\frac1{\sqrt2}\begin{pmatrix}1&-1\\1&1\end{pmatrix} +$$ + +Eigenschaften +- **$Q^\top Q=I$**, also $Q^{-1}=Q^\top$ +- **Determinante = ±1**, erhält Länge & Winkel + + + +--- +## Rotationsmatrix (Ebene) +Matrix +$$ +R(\theta)=\begin{pmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{pmatrix} +$$ + +Eigenschaften +- Orthogonal mit **$\det=1$** +- **Potenzregel**: $R(\theta)^n=R(n\theta)$ +--- +## Nullmatrix +Matrix +$$ +O_2=\begin{pmatrix}0&0\\0&0\end{pmatrix} +$$ +Eigenschaften +- **Additives Neutrum**: $A+O=A$ +- **Rang = 0**, **Spur = 0** + +--- + +## Einheits-/Identitätsmatrix +Matrix +$$ +I_2=\begin{pmatrix}1&0\\0&1\end{pmatrix} +$$ + +Eigenschaften +- **Multiplikatives Neutrum**: $AI_2=I_2A=A$ +- **Eigenwerte alle 1**, $I_2^\top=I_2^{-1}=I_2$ + +--- + +## Skalarmatrix +Matrix +$$ +2I_2=\begin{pmatrix}2&0\\0&2\end{pmatrix} +$$ + +Eigenschaften +- Spezialfall Diagonalmatrix, **alle Eigenwerte = 2** +- Orthogonal/unitär ⇔ $|2|=1$ (hier also **nicht** orthogonal) + +--- +## Symmetrische Matrix ( +Transformationsmatrix) +Matrix +$$ +S=\begin{pmatrix}2&3&-1\\3&5&0\\-1&0&4\end{pmatrix} +$$ + +Eigenschaften +- $S^\top=S$ +- **Reelle Eigenwerte**, **orthogonal diagonal­isierbar**: + $$S = Q\,D\,Q^\top$$ +- **Transformationsmatrix** $Q$: + $$Q=\begin{pmatrix}v_1 & v_2 & v_3\end{pmatrix},$$ + wobei $v_i$ die normierten Eigenvektoren von $S$ sind (Spalten von $Q$). + + +--- + +## Schiefsymmetrische Matrix +Matrix +$$ +K=\begin{pmatrix}0&-2&1\\2&0&4\\-1&-4&0\end{pmatrix} +$$ + +Eigenschaften +- $K^\top=-K$, **Diagonale = 0** +- **Spur = 0**, Eigenwerte rein imaginär oder 0 + + +--- + +## Projektionsmatrix (idempotent) +Matrix +$$ +P=\begin{pmatrix}1&0\\0&0\end{pmatrix} +$$ + +Eigenschaften +- **$P^2=P$**, projiziert auf $x$-Achse +- Eigenwerte **0 oder 1** + +--- + +## Involutorische Matrix +Matrix +$$ +J=\begin{pmatrix}0&1\\1&0\end{pmatrix} +$$ + +Eigenschaften +- **$J^2=I$**, also $J^{-1}=J$ +- Eigenwerte **±1** (tauscht Koordinaten­achsen) + +--- + +## Nilpotente Matrix +Matrix +$$ +N=\begin{pmatrix}0&1\\0&0\end{pmatrix} +\quad\text{mit}\quad N^2=O_2 +$$ + +Eigenschaften +- **Alle Eigenwerte = 0**, Spur = 0 +- $N^k=O$ für $k\ge2$ + + +--- + +## Reflexionsmatrix (Householder-Typ) +Matrix (Spiegelung an $x$-Achse) +$$ +H=\begin{pmatrix}1&0\\0&-1\end{pmatrix} +$$ + +Eigenschaften +- Orthogonal, **$H^2=I$**, $\det=-1$ +- Spiegelt $y\to -y$ + +--- + +## Obere Dreiecksmatrix +Matrix +$$ +U=\begin{pmatrix}3&-2&1\\0&5&4\\0&0&-1\end{pmatrix} +$$ + +Eigenschaften +- **$\det=\prod$ Diagonal = $3\cdot5\cdot(-1)=-15$** +- **Eigenwerte = Diagonalelemente** (hier 3, 5, −1) + +--- + +## Positiv definite Matrix +Matrix +$$ +A=\begin{pmatrix}2&1\\1&2\end{pmatrix} +$$ + +Eigenschaften +- **$x^\top A x>0$ für alle $x\neq0$** +- Alle Eigenwerte positiv (hier 1 und 3) +- **Cholesky-Zerlegung** existiert: $A=LL^\top$ + + + +# Formeln - Ableitung - Integration + +### Potenz- und Wurzelfunktionen + +| Funktion $f(x)$ | Stammfunktion $F(x)$ | | | | +| :--------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | --- | --- | --- | +| $0$ | $0$ | | | | +| $k \quad (k \in \mathbb{R})$ | $kx$ | | | | +| $$x^n$$ | $$F(x)=\begin{cases} \frac{1}{n+1}x^{n+1} & , \text{if}\quad \,n \neq -1,\\ \ln\lvert x\rvert, & ,\text{if}\quad n = -1. \end{cases}$$ | | | | +| $nx^{n-1}$ | $x^n$ | | | | +| $x$ | $\tfrac12 x^2$ | | | | +| $2x$ | $x^2$ | | | | +| $x^2$ | $\tfrac13 x^3$ | | | | +| $3x^2$ | $x^3$ | | | | +| $\sqrt{x}$ | $\tfrac23 x^{\tfrac32}$ | | | | +| $\sqrt[n]{x}$ | $\displaystyle \frac{n}{n+1},\bigl(\sqrt[n]{x}\bigr)^{n+1}\quad(n\neq -1)$ | | | | +| $\frac1{\sqrt{x}}$ | $2\sqrt{x}$ | | | | +| $\frac{1}{n,(\sqrt[n]{x^{,n-1}})}$ | $\sqrt[n]{x}$ | | | | +| $-\frac{2}{x^3}$ | $\frac{1}{x^2}$ | | | | +| $-\frac{1}{x^2}$ | $\frac{1}{x}$ | | | | + +--- + +### Exponential- und Logarithmusfunktionen + +| Funktion $f(x)$ | Stammfunktion $F(x)$ | +| :-----------------------------------------------------: | :----------------------------------------------------------------: | +| $\mathrm e^x$ | $\mathrm e^x$ | +| $\mathrm e^{kx}$ | $\displaystyle \frac{1}{k},\mathrm e^{kx}$ | +| $a^x\ln a \quad (a>0)$ | $a^x$ | +| $a^x$ | $\displaystyle \frac{a^x}{\ln a}$ | +| $x^x,(1+\ln x)$ | $x^x \quad (x>0)$ | +| $\mathrm e^{x\ln\lvert x\rvert},(\ln\lvert x\rvert +1)$ | $\lvert x\rvert^x = \mathrm e^{x\ln\lvert x\rvert}\quad (x\neq0)$ | +| $\frac{1}{x}$ | $\ln\lvert x\rvert$ Sonderfall von $x^n$ für $n=-1$, siehe oben | +| $\ln x$ | $x\ln x - x$ | +| $x^n\ln x$ | $\frac{x^{n+1}}{n+1}\Bigl(\ln x - \frac{1}{n+1}\Bigr)\quad(n\ge0)$ | +| $u'(x),\ln u(x)$ | $u(x)\ln u(x) - u(x)$ | +| $\displaystyle \frac{1}{x},\ln^{n}x\quad(n\neq -1)$ | $\displaystyle \frac{1}{n+1},\ln^{n+1}x$ | +| $\displaystyle \frac{1}{x},\ln x^n\quad(n\neq 0)$ | $\displaystyle \frac{1}{2n},\ln^2 x^n = \frac{n}{2}\ln^2 x$ | +| $\frac{1}{x}\,\frac{1}{\ln a}$ | $\log_a x$ | +| $\frac{1}{x\ln x}$ | $\displaystyle \ln\lvert\ln x\rvert\quad(x>0, \,x\neq1)$ | +| $\log_a x$ | $\displaystyle \frac{1}{\ln a}\,(x\ln x - x)$ | + +--- + +## Trigonometrische Funktionen und Hyperbelfunktionen + +### Trigonometrische Funktionen + +| Funktion $f(x)$ | Stammfunktion $F(x)$ | | | +| :-------------------------------------: | :---------------------------------------------------------------------------------------: | --- | --- | +| $\sin x$ | $-\cos x$ | | | +| $\cos x$ | $\sin x$ | | | +| $\tan x = \frac{\sin x}{\cos x}$ | $\ln\bigl[\sec x\bigr]$ | | | +| $\cot x = \frac{\cos x}{\sin x}$ | $-\ln\bigl[\csc x\bigr]$ | | | +| $\sec x = \frac1{\cos x}$ | $\operatorname{artanh}[\sin x]$ | | | +| $\csc x = \frac1{\sin x}$ | $-\operatorname{artanh}[\cos x]$ | | | +| $\sec^2 x = 1+\tan^2 x$ | $\tan x$ | | | +| $-\csc^2 x = -\bigl(1+\cot^2 x\bigr)$ | $\cot x$ | | | +| $\sin^2 x$ | $\frac{1}{2}[x−sin⁡x\,cos⁡x]=\frac{1}{2}x− \frac{1}{4} sin⁡(2x)$ | | | +| $\cos^2 x$ | $\frac{1}{2}[x+sin⁡x\,cos⁡x]=\frac{1}{2}x+ \frac{1}{4} sin⁡(2x)$ | | | +| $\sin(kx)\cos(kx)$ | $-\displaystyle \frac{1}{4k}\cos(2kx)$ | | | +| $\sin(kx)\cos(kx)$ | $\displaystyle \frac{1}{2k}\sin^2(kx)$ | | | +| $\displaystyle \frac{\sin(ax)}{e^{bx}}$ | $\displaystyle \frac{a\,e^{bx} - a\cos(ax) - b\sin(ax)}{(a^2+b^2)\,e^{bx}}$ | | | +| $\displaystyle \frac{\cos(ax)}{e^{bx}}$ | $\displaystyle \frac{a\sin(ax) - b\cos(ax) + b\,e^{bx}}{(a^2+b^2)\,e^{bx}}$ | | | +| $\arcsin x$ | $x\arcsin x + \sqrt{1-x^2}$ | | | +| $\arccos x$ | $x\arccos x - \sqrt{1-x^2}$ | | | +| $\arctan x$ | $x\arctan x - \tfrac12\ln\bigl(1+x^2\bigr)$ | | | +| $\arccot x$ | $x\arccot x + \tfrac12\ln\bigl(1+x^2\bigr)$ | | | +| $\displaystyle \frac{1}{\sqrt{1-x^2}}$ | $\arcsin x$ | | | +| $\displaystyle \frac{-1}{\sqrt{1-x^2}}$ | $\arccos x$ | | | +| $\displaystyle \frac{1}{x^2+1}$ | $\arctan x$ | | | +| $\displaystyle -\frac{1}{x^2+1}$ | $\arccot x$ | | | +| $\displaystyle \frac{x^2}{x^2+1}$ | $x - \arctan x$ | | | +| $\displaystyle \frac{1}{(x^2+1)^2}$ | $\displaystyle \tfrac12\Bigl(\frac{x}{x^2+1} + \arctan x\Bigr)$ | | | +| $\sqrt{a^2 - x^2}$ | $\displaystyle \frac{a^2}{2}\arcsin\Bigl(\frac{x}{a}\Bigr) + \frac{x}{2}\sqrt{a^2 - x^2}$ | | | +| $\displaystyle \frac{1}{ax^2+bx+c}$ | $\frac{2}{\sqrt{4ac - b^2}}\;\arctan\!\Bigl(\frac{2ax + b}{\sqrt{4ac - b^2}}\Bigr)$ | | | + +### Hyperbelfunktionen + +| Funktion $f(x)$ | Stammfunktion $F(x)$ | +| :----------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: | +| $\sinh x$ | $\cosh x$ | +| $\cosh x$ | $\sinh x$ | +| $\tanh x$ | $\ln\bigl[\cosh x\bigr]$ | +| $\coth x$ | $\ln\lvert\sinh x\rvert$ | +| $\operatorname{sech} x$ | $\operatorname{gd} x = \arctan[\sinh x]$ | +| $\operatorname{csch} x$ | $-\operatorname{arcoth}[\cosh x]$ | +| $\displaystyle \frac{1}{\cosh^2 x} = 1-\tanh^2 x$ | $\tanh x$ | +| $\displaystyle \frac{-1}{\sinh^2 x} = 1-\coth^2 x$ | $\coth x$ | +| $\operatorname{arsinh} x$ | $x\,\operatorname{arsinh} x - \sqrt{x^2+1}$ | +| $\operatorname{arcosh} x$ | $x\,\operatorname{arcosh} x - \sqrt{x^2-1}$ | +| $\operatorname{artanh} x$ | $x\,\operatorname{artanh} x + \tfrac12\ln\bigl(1-x^2\bigr)$ | +| $\operatorname{arcoth} x$ | $x\,\operatorname{arcoth} x + \tfrac12\ln\bigl(x^2-1\bigr)$ | +| $\displaystyle \frac{1}{\sqrt{x^2+1}}$ | $\operatorname{arsinh} x$ | +| $\displaystyle \frac{1}{\sqrt{x^2-1}}\quad(x>1)$ | $\operatorname{arcosh} x$ | +| $\sqrt{a^2 + x^2}$ | $\displaystyle \frac{a^2}{2}\,\operatorname{arsinh}\Bigl(\frac{x}{a}\Bigr) + \frac{x}{2}\sqrt{a^2 + x^2}$ | +| $\displaystyle \frac{1}{\sqrt{ax^2+bx+c}}$ | $\displaystyle \frac{1}{\sqrt{a}}\operatorname{arsinh}\Bigl(\frac{2ax + b}{\sqrt{4ac - b^2}}\Bigr)$ | +| $\displaystyle \frac{1}{1-x^2}\quad(\lvert x\rvert<1)$ | $\operatorname{artanh} x$ | +| $\displaystyle \frac{1}{1-x^2}\quad(\lvert x\rvert>1)$ | $\operatorname{arcoth} x$ | + +# Regeln - Ableiten +### Produktregel +$$u(x) \cdot v(x) \Longrightarrow u'v + u\,v'$$ +### Quotientenregel +$$\frac{u(x)}{v(x)} \Longrightarrow \frac{u'v + u\,v'}{v^2}$$ +### Kettenregel +Äußere Funktion abgeleitet, mal innere Funktion abgeleitet. +$$u[v(x)] \Longrightarrow u'[v(x)] \cdot v'(x)$$ + + +# Regeln - Integrieren +### Partielle Integration +>**Idee**: +>Ein Teil herausziehen, dass später etwas Integrierbares herauskommt. $u$ wird abgeleitet. $v$ wird integriert. +$$ +\int{u \, v} \Longrightarrow u\, V - \int{V\, u' \,dx} +$$ +### U-Substitution +Substituieren: +$$\int{\frac{1}{u'}u}\, du$$ +> **Wichtig:** +> 1/Ableitung von u, muss sich mit dem Variablen Faktor vorne kürzen. Also es darf bei $du$ kein $x$ mehr übrig bleiben. +> Beispiel: +> $$\int{\frac{1}{x}}2x\cdot u \, \, du \longrightarrow \int{2u} \,\,du$$ diff --git a/notes/Komplexe Zahlen.md b/notes/Komplexe Zahlen.md new file mode 100644 index 0000000..2a24588 --- /dev/null +++ b/notes/Komplexe Zahlen.md @@ -0,0 +1,54 @@ +# Komplexe Zahlen + +## Eulersche Gleichung & Formel +Die Eulersche Gleichung lautet: +$$e^{i\varphi} = \cos(\varphi) + i\sin(\varphi)$$ + +Daraus folgt die Darstellung einer komplexen Zahl in Exponentialform: +$$z = r \Bigl(\cos(\varphi) + i\sin(\varphi)\Bigr) = r \cdot e^{i\varphi}$$ + +> **Exponentialform:** +$$z = r \cdot e^{i(\varphi + 2\pi k)}$$ + +### Beispiel: Arithmetische in Exponentialform +Für die arithmetische Darstellung: +$$z = -2 + 2i$$ + +Berechnung des Betrags: +$$r = |z| = \sqrt{(-2)^2 + 2^2} = \sqrt{8}$$ + +Berechnung des Winkels: +$$\varphi = \arctan\left(\frac{2}{-2}\right) + \pi = \frac{3\pi}{4}$$ + +Somit ergibt sich: +$$z = \sqrt{8} \cdot e^{i\frac{3\pi}{4}}$$ + +## Multiplikation +Gegeben sind: +$$z_1 = 2 \cdot e^{i\frac{\pi}{6}}$$ +$$z_2 = 3 \cdot e^{i\frac{4\pi}{3}}$$ + +Multiplikation: +$$z_1 \cdot z_2 = 2 \cdot 3 \cdot e^{i\left(\frac{\pi}{6} + \frac{4\pi}{3}\right)} = 6 \cdot e^{i\frac{3\pi}{2}}$$ + +### Division +Gegeben: +$$z_1 = 2 \cdot e^{i\frac{\pi}{6}}$$ +$$z_2 = 3 \cdot e^{i\frac{4\pi}{3}}$$ + +Division: +$$\frac{z_1}{z_2} = \frac{2}{3} \cdot e^{i\left(\frac{\pi}{6} - \frac{4\pi}{3}\right)} = \frac{2}{3} \cdot e^{-i\frac{7\pi}{6}} = \frac{2}{3} \cdot e^{i\frac{5\pi}{6}}$$ + +#### Umwandeln in Arithmetische Form +$$\frac{2}{3} \cdot e^{i\frac{5\pi}{6}} = \frac{2}{3} \cdot \Bigl(\cos\left(\frac{5\pi}{6}\right) + i \sin\left(\frac{5\pi}{6}\right)\Bigr)$$ + +**Bemerkungen:** +- $|e^{i\varphi}| =\sqrt{\cos^2(\varphi) + \sin^2(\varphi)} = 1$ +- $e^{i \ 0} = 1 = e^{i 2k\pi}$ +- $e^{i\pi} = -1$ +- $\sinh(i x) = \sin x$ +- $\cosh(i x) = \cos x$ + + +### Potenzieren + diff --git a/notes/Matrizen.md b/notes/Matrizen.md new file mode 100644 index 0000000..cd82804 --- /dev/null +++ b/notes/Matrizen.md @@ -0,0 +1,52 @@ + +**Menge der Matrizen**: +- $\mathbb{M}(m, n, \mathbb{R}) = \mathbb{R}^{m\times n}$ + +> **Anwendungen**: +> - Beschreibung linearer Gleichungssysteme +> - Lineare Abbildungen zwischen Vektorräumen +> - Transformationen in der Geometrie (z. B. Drehungen, Spiegelungen, Skalierungen) +> - Darstellung von Netzwerken oder Graphen +> - Datenrepräsentation in maschinellem Lernen und Statistik + +--- + +## Zeilen, Spaltenvektoren + +- Eine Matrix $A \in \mathbb{R}^{m \times n}$ besteht aus $m$ Zeilen und $n$ Spalten. +- Zeilenvektoren: $A_{i*} \in \mathbb{R}^{1 \times n}$ +- Spaltenvektoren: $A_{*j} \in \mathbb{R}^{m \times 1}$ +- Jeder Eintrag $a_{ij}$ steht an der Kreuzung von Zeile $i$ und Spalte $j$. + +--- + +## Transponieren + +- Zeilen- und Spaltenindex vertauschen: + +$$ A \longrightarrow A^T $$ +$$(A^T)^T = A$$ + +- Eigenschaften: + - $(A + B)^T = A^T + B^T$ + - $(\lambda A)^T = \lambda A^T$ für $\lambda \in \mathbb{R}$ + - $(AB)^T = B^T A^T$ + +--- + +## Matrizenmultiplikation + +- Definition: $(AB)_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}$ +- Voraussetzung: Spaltenanzahl von $A$ muss gleich der Zeilenanzahl von $B$ sein + +$$(A \in \mathbb{R}^{m \times n},\ B \in \mathbb{R}^{n \times p}) \Rightarrow AB \in \mathbb{R}^{m \times p}$$ + +- **Shape des Outputs**: $m_A \times n_B$ + +- **Eigenschaften**: + - Assoziativ: $A(BC) = (AB)C$ + + + + - Distributiv: $A(B + C) = AB + AC$ + - Im Allgemeinen **nicht kommutativ**: $AB \neq BA$ diff --git a/notes/Prompts.md b/notes/Prompts.md new file mode 100644 index 0000000..bbf46d3 --- /dev/null +++ b/notes/Prompts.md @@ -0,0 +1,6 @@ + +## Für Aufgaben +1. Wie berechnet man das? Schritt für schritt +2. Bitte einmal das Schema allgemein Formuliert. Also für aufgaben in dem Format. +3. Kannst du mir den Hintergrund erklären, was wir hier berechnen und wie man sich das ganze Vorstellen kann? +4. Ok, das Allgemeine Schema jetzt bitte als Markdown code, mit dollar als inline latex delimiter anstatt \( \) und zwei dollar für multiline/block anstatt \[ \] (Katex) diff --git a/notes/Vektorfelder.md b/notes/Vektorfelder.md new file mode 100644 index 0000000..e0709c0 --- /dev/null +++ b/notes/Vektorfelder.md @@ -0,0 +1,107 @@ +**Menge der Vektorfelder** +Für eine offene Teilmenge $U\subseteq \mathbb{R}^n$ bezeichnet +$$ + \mathfrak{X}(U) = \{\,F : U \to \mathbb{R}^n \mid F \text{ ist (stetig) differenzierbar}\}. +$$ + +> **Anwendungen** +> - Beschreibung von Strömungsfeldern in Fluiddynamik +> - Elektromagnetische Felder (Maxwell-Gleichungen) +> - Kraftfelder in der Mechanik +> - Computergrafik: Beleuchtung und Verformung +> - Kontinuumsmechanik und Materialwissenschaften + +--- + +## Definition und Notation + +Ein Vektorfeld $F\in\mathfrak{X}(U)$ schreibt man komponentenweise: +$$ + F(x) = \bigl(F_1(x),\,F_2(x),\,\dots,\,F_n(x)\bigr),\quad x\in U. +$$ +Jeder $F_i$ ist eine skalare Funktion $F_i:U\to\mathbb{R}$. +Für $n=3$ oft: +$$ + F = F_x\,\mathbf{i} + F_y\,\mathbf{j} + F_z\,\mathbf{k}. +$$ + +--- + +## Lineare Operationen + +- **Addition**: + $$ + (F + G)(x) = F(x) + G(x). + $$ +- **Skalarmultiplikation** ($\lambda\in\mathbb{R}$): + $$ + (\lambda F)(x) = \lambda\,F(x). + $$ +$\mathfrak{X}(U)$ ist damit ein Vektorraum. + +--- + +## Differentialoperatoren + +- **Gradient** (für Skalarfeld $\phi:U\to\mathbb{R}$): + $$ + \nabla\phi = \bigl(\tfrac{\partial\phi}{\partial x_1},\dots,\tfrac{\partial\phi}{\partial x_n}\bigr). + $$ +- **Divergenz** (für $F\in\mathfrak{X}(U)$): + $$ + \mathrm{div}\,F = \nabla\cdot F + = \sum_{i=1}^n \frac{\partial F_i}{\partial x_i}. + $$ +- **Rotation** / **Wirbel** ($\mathbb{R}^3$): + $$ + \nabla\times F + = \bigl(\tfrac{\partial F_z}{\partial y}-\tfrac{\partial F_y}{\partial z},\; + \tfrac{\partial F_x}{\partial z}-\tfrac{\partial F_z}{\partial x},\; + \tfrac{\partial F_y}{\partial x}-\tfrac{\partial F_x}{\partial y}\bigr). + $$ +- **Laplacian** (auf Skalarfeld $\phi$): + $$ + \Delta \phi = \nabla\cdot(\nabla\phi) + = \sum_{i=1}^n \frac{\partial^2 \phi}{\partial x_i^2}. + $$ + +--- + +## Integrale und klassische Sätze + +- **Linien­integral** entlang einer Kurve $C$ mit Parametrisierung $\gamma(t)$: + $$ + \int_C F\cdot \mathrm{d}r + = \int_a^b F\bigl(\gamma(t)\bigr)\cdot \gamma'(t)\,\mathrm{d}t. + $$ +- **Fluss** durch eine Fläche $S$: + $$ + \Phi = \iint_S F\cdot \mathrm{d}S + = \iint_D F\bigl(\mathbf{r}(u,v)\bigr)\cdot\bigl(\mathbf{r}_u\times\mathbf{r}_v\bigr)\,\mathrm{d}u\,\mathrm{d}v. + $$ +- **Green’scher Satz** ($\mathbb{R}^2$): + $$ + \oint_{\partial D} P\,\mathrm{d}x + Q\,\mathrm{d}y + = \iint_D \bigl(\tfrac{\partial Q}{\partial x} - \tfrac{\partial P}{\partial y}\bigr)\,\mathrm{d}A. + $$ +- **Divergenzsatz** (Gauß): + $$ + \iint_{\partial V} F\cdot \mathrm{d}S + = \iiint_V \mathrm{div}\,F\,\mathrm{d}V. + $$ +- **Stokes’ Theorem** ($\mathbb{R}^3$): + $$ + \oint_{\partial S} F\cdot \mathrm{d}r + = \iint_S (\nabla\times F)\cdot \mathrm{d}S. + $$ + +--- + +## Spezielle Feldtypen + +- **Konservatives Feld**: $\exists\,\phi$ mit $F=\nabla\phi$ + $\Longrightarrow$ curl $F=0$ und Linienintegral nur von Endpunkten abhängig. +- **Solenoidales Feld**: $\mathrm{div}\,F=0$ + $\Longrightarrow$ kein Netto-Fluss durch geschlossene Oberfläche. +- **Potentialfeld**: Synonym zu konservativem Feld in Mechanik/Elektrostatik. +- **Wirbelfreies Feld**: curl $F=0$. diff --git a/notes/Zusammenfassung.md b/notes/Zusammenfassung.md new file mode 100644 index 0000000..caee4e9 --- /dev/null +++ b/notes/Zusammenfassung.md @@ -0,0 +1,27 @@ +# 1.1 Gleitkommaarithmetik + +- Reele Zahlen in der Informatik +- Hauptproblem: **Auslöschung** + +**Symbolik**: +- Simpy +- Wolfram Alpha +- Brüche + +# 1.2 Fixpunkt Iteration + +**Fixpunkt**: +Funktionen: +>Ein Fixpunkt ist ein punkt an dem x = y + +**Stabilisator (i.e. Fixpunkt einer rekursiven Folge)**: +> In einer Folge würde dieser *einrasten*, das heisst das nächste Folgeglied ist gleich dem aktuellen. Sie steckt fest. +$$f(x) = x$$ + +**Aussagen**: +- Grenzwert $\implies$ Fixpunkt. +- Fixpunkt $\centernot\implies$ Grenzwert. + +- Kein Stabilisator? $\implies$ Divergiert +- Stabilisator $\centernot\implies$ Konvergent + diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..a0807f9 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,11 @@ +[project] +name = "cds402-mathematics-ii" +version = "0.1.0" +requires-python = ">=3.12" +dependencies = [ + "imageio>=2.37.0", + "matplotlib>=3.10.3", + "numpy>=2.2.5", + "pandas>=2.2.3", + "plotly>=6.1.0", +] diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..ea513eb --- /dev/null +++ b/uv.lock @@ -0,0 +1,392 @@ +version = 1 +revision = 1 +requires-python = ">=3.12" + +[[package]] +name = "cds402-mathematics-ii" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "imageio" }, + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, + { name = "plotly" }, +] + +[package.metadata] +requires-dist = [ + { name = "imageio", specifier = ">=2.37.0" }, + { name = "matplotlib", specifier = ">=3.10.3" }, + { name = "numpy", specifier = ">=2.2.5" }, + { name = "pandas", specifier = ">=2.2.3" }, + { name = "plotly", specifier = ">=6.1.0" }, +] + +[[package]] +name = "contourpy" +version = "1.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/f7/44785876384eff370c251d58fd65f6ad7f39adce4a093c934d4a67a7c6b6/contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2", size = 271580 }, + { url = "https://files.pythonhosted.org/packages/93/3b/0004767622a9826ea3d95f0e9d98cd8729015768075d61f9fea8eeca42a8/contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15", size = 255530 }, + { url = "https://files.pythonhosted.org/packages/e7/bb/7bd49e1f4fa805772d9fd130e0d375554ebc771ed7172f48dfcd4ca61549/contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92", size = 307688 }, + { url = "https://files.pythonhosted.org/packages/fc/97/e1d5dbbfa170725ef78357a9a0edc996b09ae4af170927ba8ce977e60a5f/contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87", size = 347331 }, + { url = "https://files.pythonhosted.org/packages/6f/66/e69e6e904f5ecf6901be3dd16e7e54d41b6ec6ae3405a535286d4418ffb4/contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415", size = 318963 }, + { url = "https://files.pythonhosted.org/packages/a8/32/b8a1c8965e4f72482ff2d1ac2cd670ce0b542f203c8e1d34e7c3e6925da7/contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe", size = 323681 }, + { url = "https://files.pythonhosted.org/packages/30/c6/12a7e6811d08757c7162a541ca4c5c6a34c0f4e98ef2b338791093518e40/contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441", size = 1308674 }, + { url = "https://files.pythonhosted.org/packages/2a/8a/bebe5a3f68b484d3a2b8ffaf84704b3e343ef1addea528132ef148e22b3b/contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e", size = 1380480 }, + { url = "https://files.pythonhosted.org/packages/34/db/fcd325f19b5978fb509a7d55e06d99f5f856294c1991097534360b307cf1/contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912", size = 178489 }, + { url = "https://files.pythonhosted.org/packages/01/c8/fadd0b92ffa7b5eb5949bf340a63a4a496a6930a6c37a7ba0f12acb076d6/contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73", size = 223042 }, + { url = "https://files.pythonhosted.org/packages/2e/61/5673f7e364b31e4e7ef6f61a4b5121c5f170f941895912f773d95270f3a2/contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb", size = 271630 }, + { url = "https://files.pythonhosted.org/packages/ff/66/a40badddd1223822c95798c55292844b7e871e50f6bfd9f158cb25e0bd39/contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08", size = 255670 }, + { url = "https://files.pythonhosted.org/packages/1e/c7/cf9fdee8200805c9bc3b148f49cb9482a4e3ea2719e772602a425c9b09f8/contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c", size = 306694 }, + { url = "https://files.pythonhosted.org/packages/dd/e7/ccb9bec80e1ba121efbffad7f38021021cda5be87532ec16fd96533bb2e0/contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f", size = 345986 }, + { url = "https://files.pythonhosted.org/packages/dc/49/ca13bb2da90391fa4219fdb23b078d6065ada886658ac7818e5441448b78/contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85", size = 318060 }, + { url = "https://files.pythonhosted.org/packages/c8/65/5245ce8c548a8422236c13ffcdcdada6a2a812c361e9e0c70548bb40b661/contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841", size = 322747 }, + { url = "https://files.pythonhosted.org/packages/72/30/669b8eb48e0a01c660ead3752a25b44fdb2e5ebc13a55782f639170772f9/contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422", size = 1308895 }, + { url = "https://files.pythonhosted.org/packages/05/5a/b569f4250decee6e8d54498be7bdf29021a4c256e77fe8138c8319ef8eb3/contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef", size = 1379098 }, + { url = "https://files.pythonhosted.org/packages/19/ba/b227c3886d120e60e41b28740ac3617b2f2b971b9f601c835661194579f1/contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f", size = 178535 }, + { url = "https://files.pythonhosted.org/packages/12/6e/2fed56cd47ca739b43e892707ae9a13790a486a3173be063681ca67d2262/contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9", size = 223096 }, + { url = "https://files.pythonhosted.org/packages/54/4c/e76fe2a03014a7c767d79ea35c86a747e9325537a8b7627e0e5b3ba266b4/contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f", size = 285090 }, + { url = "https://files.pythonhosted.org/packages/7b/e2/5aba47debd55d668e00baf9651b721e7733975dc9fc27264a62b0dd26eb8/contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739", size = 268643 }, + { url = "https://files.pythonhosted.org/packages/a1/37/cd45f1f051fe6230f751cc5cdd2728bb3a203f5619510ef11e732109593c/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823", size = 310443 }, + { url = "https://files.pythonhosted.org/packages/8b/a2/36ea6140c306c9ff6dd38e3bcec80b3b018474ef4d17eb68ceecd26675f4/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5", size = 349865 }, + { url = "https://files.pythonhosted.org/packages/95/b7/2fc76bc539693180488f7b6cc518da7acbbb9e3b931fd9280504128bf956/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532", size = 321162 }, + { url = "https://files.pythonhosted.org/packages/f4/10/76d4f778458b0aa83f96e59d65ece72a060bacb20cfbee46cf6cd5ceba41/contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b", size = 327355 }, + { url = "https://files.pythonhosted.org/packages/43/a3/10cf483ea683f9f8ab096c24bad3cce20e0d1dd9a4baa0e2093c1c962d9d/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52", size = 1307935 }, + { url = "https://files.pythonhosted.org/packages/78/73/69dd9a024444489e22d86108e7b913f3528f56cfc312b5c5727a44188471/contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd", size = 1372168 }, + { url = "https://files.pythonhosted.org/packages/0f/1b/96d586ccf1b1a9d2004dd519b25fbf104a11589abfd05484ff12199cca21/contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1", size = 189550 }, + { url = "https://files.pythonhosted.org/packages/b0/e6/6000d0094e8a5e32ad62591c8609e269febb6e4db83a1c75ff8868b42731/contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69", size = 238214 }, +] + +[[package]] +name = "cycler" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, +] + +[[package]] +name = "fonttools" +version = "4.58.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/cf/4d037663e2a1fe30fddb655d755d76e18624be44ad467c07412c2319ab97/fonttools-4.58.0.tar.gz", hash = "sha256:27423d0606a2c7b336913254bf0b1193ebd471d5f725d665e875c5e88a011a43", size = 3514522 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/4e/1c6b35ec7c04d739df4cf5aace4b7ec284d6af2533a65de21972e2f237d9/fonttools-4.58.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:aa8316798f982c751d71f0025b372151ea36405733b62d0d94d5e7b8dd674fa6", size = 2737502 }, + { url = "https://files.pythonhosted.org/packages/fc/72/c6fcafa3c9ed2b69991ae25a1ba7a3fec8bf74928a96e8229c37faa8eda2/fonttools-4.58.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c6db489511e867633b859b11aefe1b7c0d90281c5bdb903413edbb2ba77b97f1", size = 2307214 }, + { url = "https://files.pythonhosted.org/packages/52/11/1015cedc9878da6d8d1758049749eef857b693e5828d477287a959c8650f/fonttools-4.58.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:107bdb2dacb1f627db3c4b77fb16d065a10fe88978d02b4fc327b9ecf8a62060", size = 4811136 }, + { url = "https://files.pythonhosted.org/packages/32/b9/6a1bc1af6ec17eead5d32e87075e22d0dab001eace0b5a1542d38c6a9483/fonttools-4.58.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba7212068ab20f1128a0475f169068ba8e5b6e35a39ba1980b9f53f6ac9720ac", size = 4876598 }, + { url = "https://files.pythonhosted.org/packages/d8/46/b14584c7ea65ad1609fb9632251016cda8a2cd66b15606753b9f888d3677/fonttools-4.58.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f95ea3b6a3b9962da3c82db73f46d6a6845a6c3f3f968f5293b3ac1864e771c2", size = 4872256 }, + { url = "https://files.pythonhosted.org/packages/05/78/b2105a7812ca4ef9bf180cd741c82f4522316c652ce2a56f788e2eb54b62/fonttools-4.58.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:874f1225cc4ccfeac32009887f722d7f8b107ca5e867dcee067597eef9d4c80b", size = 5028710 }, + { url = "https://files.pythonhosted.org/packages/8c/a9/a38c85ffd30d1f2c7a5460c8abfd1aa66e00c198df3ff0b08117f5c6fcd9/fonttools-4.58.0-cp312-cp312-win32.whl", hash = "sha256:5f3cde64ec99c43260e2e6c4fa70dfb0a5e2c1c1d27a4f4fe4618c16f6c9ff71", size = 2173593 }, + { url = "https://files.pythonhosted.org/packages/66/48/29752962a74b7ed95da976b5a968bba1fe611a4a7e50b9fefa345e6e7025/fonttools-4.58.0-cp312-cp312-win_amd64.whl", hash = "sha256:2aee08e2818de45067109a207cbd1b3072939f77751ef05904d506111df5d824", size = 2223230 }, + { url = "https://files.pythonhosted.org/packages/0c/d7/d77cae11c445916d767cace93ba8283b3f360197d95d7470b90a9e984e10/fonttools-4.58.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4809790f2371d8a08e59e1ce2b734c954cf09742e75642d7f4c46cfdac488fdd", size = 2728320 }, + { url = "https://files.pythonhosted.org/packages/77/48/7d8b3c519ef4b48081d40310262224a38785e39a8610ccb92a229a6f085d/fonttools-4.58.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b00f240280f204ce4546b05ff3515bf8ff47a9cae914c718490025ea2bb9b324", size = 2302570 }, + { url = "https://files.pythonhosted.org/packages/2c/48/156b83eb8fb7261056e448bfda1b495b90e761b28ec23cee10e3e19f1967/fonttools-4.58.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a62015ad463e1925544e9159dd6eefe33ebfb80938d5ab15d8b1c4b354ff47b", size = 4790066 }, + { url = "https://files.pythonhosted.org/packages/60/49/aaecb1b3cea2b9b9c7cea6240d6bc8090feb5489a6fbf93cb68003be979b/fonttools-4.58.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ceef6f6ab58061a811967e3e32e630747fcb823dcc33a9a2c80e2d0d17cb292", size = 4861076 }, + { url = "https://files.pythonhosted.org/packages/dc/c8/97cbb41bee81ea9daf6109e0f3f70a274a3c69418e5ac6b0193f5dacf506/fonttools-4.58.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c7be21ac52370b515cdbdd0f400803fd29432a4fa4ddb4244ac8b322e54f36c0", size = 4858394 }, + { url = "https://files.pythonhosted.org/packages/4d/23/c2c231457361f869a7d7374a557208e303b469d48a4a697c0fb249733ea1/fonttools-4.58.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:85836be4c3c4aacf6fcb7a6f263896d0e9ce431da9fa6fe9213d70f221f131c9", size = 5002160 }, + { url = "https://files.pythonhosted.org/packages/a9/e0/c2262f941a43b810c5c192db94b5d1ce8eda91bec2757f7e2416398f4072/fonttools-4.58.0-cp313-cp313-win32.whl", hash = "sha256:2b32b7130277bd742cb8c4379a6a303963597d22adea77a940343f3eadbcaa4c", size = 2171919 }, + { url = "https://files.pythonhosted.org/packages/8f/ee/e4aa7bb4ce510ad57a808d321df1bbed1eeb6e1dfb20aaee1a5d9c076849/fonttools-4.58.0-cp313-cp313-win_amd64.whl", hash = "sha256:75e68ee2ec9aaa173cf5e33f243da1d51d653d5e25090f2722bc644a78db0f1a", size = 2222972 }, + { url = "https://files.pythonhosted.org/packages/9b/1f/4417c26e26a1feab85a27e927f7a73d8aabc84544be8ba108ce4aa90eb1e/fonttools-4.58.0-py3-none-any.whl", hash = "sha256:c96c36880be2268be409df7b08c5b5dacac1827083461a6bc2cb07b8cbcec1d7", size = 1111440 }, +] + +[[package]] +name = "imageio" +version = "2.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "pillow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0c/47/57e897fb7094afb2d26e8b2e4af9a45c7cf1a405acdeeca001fdf2c98501/imageio-2.37.0.tar.gz", hash = "sha256:71b57b3669666272c818497aebba2b4c5f20d5b37c81720e5e1a56d59c492996", size = 389963 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/bd/b394387b598ed84d8d0fa90611a90bee0adc2021820ad5729f7ced74a8e2/imageio-2.37.0-py3-none-any.whl", hash = "sha256:11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed", size = 315796 }, +] + +[[package]] +name = "kiwisolver" +version = "1.4.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152 }, + { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067 }, + { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443 }, + { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728 }, + { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388 }, + { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849 }, + { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533 }, + { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898 }, + { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605 }, + { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801 }, + { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077 }, + { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410 }, + { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853 }, + { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424 }, + { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 }, + { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 }, + { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 }, + { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 }, + { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 }, + { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 }, + { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 }, + { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 }, + { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 }, + { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 }, + { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 }, + { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 }, + { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 }, + { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 }, + { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 }, + { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 }, + { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 }, + { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 }, + { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 }, + { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 }, + { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 }, + { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 }, + { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 }, + { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 }, + { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 }, + { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 }, +] + +[[package]] +name = "matplotlib" +version = "3.10.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/91/d49359a21893183ed2a5b6c76bec40e0b1dcbf8ca148f864d134897cfc75/matplotlib-3.10.3.tar.gz", hash = "sha256:2f82d2c5bb7ae93aaaa4cd42aca65d76ce6376f83304fa3a630b569aca274df0", size = 34799811 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/43/6b80eb47d1071f234ef0c96ca370c2ca621f91c12045f1401b5c9b28a639/matplotlib-3.10.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ab1affc11d1f495ab9e6362b8174a25afc19c081ba5b0775ef00533a4236eea", size = 8179689 }, + { url = "https://files.pythonhosted.org/packages/0f/70/d61a591958325c357204870b5e7b164f93f2a8cca1dc6ce940f563909a13/matplotlib-3.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a818d8bdcafa7ed2eed74487fdb071c09c1ae24152d403952adad11fa3c65b4", size = 8050466 }, + { url = "https://files.pythonhosted.org/packages/e7/75/70c9d2306203148cc7902a961240c5927dd8728afedf35e6a77e105a2985/matplotlib-3.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748ebc3470c253e770b17d8b0557f0aa85cf8c63fd52f1a61af5b27ec0b7ffee", size = 8456252 }, + { url = "https://files.pythonhosted.org/packages/c4/91/ba0ae1ff4b3f30972ad01cd4a8029e70a0ec3b8ea5be04764b128b66f763/matplotlib-3.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed70453fd99733293ace1aec568255bc51c6361cb0da94fa5ebf0649fdb2150a", size = 8601321 }, + { url = "https://files.pythonhosted.org/packages/d2/88/d636041eb54a84b889e11872d91f7cbf036b3b0e194a70fa064eb8b04f7a/matplotlib-3.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dbed9917b44070e55640bd13419de83b4c918e52d97561544814ba463811cbc7", size = 9406972 }, + { url = "https://files.pythonhosted.org/packages/b1/79/0d1c165eac44405a86478082e225fce87874f7198300bbebc55faaf6d28d/matplotlib-3.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:cf37d8c6ef1a48829443e8ba5227b44236d7fcaf7647caa3178a4ff9f7a5be05", size = 8067954 }, + { url = "https://files.pythonhosted.org/packages/3b/c1/23cfb566a74c696a3b338d8955c549900d18fe2b898b6e94d682ca21e7c2/matplotlib-3.10.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9f2efccc8dcf2b86fc4ee849eea5dcaecedd0773b30f47980dc0cbeabf26ec84", size = 8180318 }, + { url = "https://files.pythonhosted.org/packages/6c/0c/02f1c3b66b30da9ee343c343acbb6251bef5b01d34fad732446eaadcd108/matplotlib-3.10.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3ddbba06a6c126e3301c3d272a99dcbe7f6c24c14024e80307ff03791a5f294e", size = 8051132 }, + { url = "https://files.pythonhosted.org/packages/b4/ab/8db1a5ac9b3a7352fb914133001dae889f9fcecb3146541be46bed41339c/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:748302b33ae9326995b238f606e9ed840bf5886ebafcb233775d946aa8107a15", size = 8457633 }, + { url = "https://files.pythonhosted.org/packages/f5/64/41c4367bcaecbc03ef0d2a3ecee58a7065d0a36ae1aa817fe573a2da66d4/matplotlib-3.10.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a80fcccbef63302c0efd78042ea3c2436104c5b1a4d3ae20f864593696364ac7", size = 8601031 }, + { url = "https://files.pythonhosted.org/packages/12/6f/6cc79e9e5ab89d13ed64da28898e40fe5b105a9ab9c98f83abd24e46d7d7/matplotlib-3.10.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:55e46cbfe1f8586adb34f7587c3e4f7dedc59d5226719faf6cb54fc24f2fd52d", size = 9406988 }, + { url = "https://files.pythonhosted.org/packages/b1/0f/eed564407bd4d935ffabf561ed31099ed609e19287409a27b6d336848653/matplotlib-3.10.3-cp313-cp313-win_amd64.whl", hash = "sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93", size = 8068034 }, + { url = "https://files.pythonhosted.org/packages/3e/e5/2f14791ff69b12b09e9975e1d116d9578ac684460860ce542c2588cb7a1c/matplotlib-3.10.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c26dd9834e74d164d06433dc7be5d75a1e9890b926b3e57e74fa446e1a62c3e2", size = 8218223 }, + { url = "https://files.pythonhosted.org/packages/5c/08/30a94afd828b6e02d0a52cae4a29d6e9ccfcf4c8b56cc28b021d3588873e/matplotlib-3.10.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:24853dad5b8c84c8c2390fc31ce4858b6df504156893292ce8092d190ef8151d", size = 8094985 }, + { url = "https://files.pythonhosted.org/packages/89/44/f3bc6b53066c889d7a1a3ea8094c13af6a667c5ca6220ec60ecceec2dabe/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68f7878214d369d7d4215e2a9075fef743be38fa401d32e6020bab2dfabaa566", size = 8483109 }, + { url = "https://files.pythonhosted.org/packages/ba/c7/473bc559beec08ebee9f86ca77a844b65747e1a6c2691e8c92e40b9f42a8/matplotlib-3.10.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6929fc618cb6db9cb75086f73b3219bbb25920cb24cee2ea7a12b04971a4158", size = 8618082 }, + { url = "https://files.pythonhosted.org/packages/d8/e9/6ce8edd264c8819e37bbed8172e0ccdc7107fe86999b76ab5752276357a4/matplotlib-3.10.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c7818292a5cc372a2dc4c795e5c356942eb8350b98ef913f7fda51fe175ac5d", size = 9413699 }, + { url = "https://files.pythonhosted.org/packages/1b/92/9a45c91089c3cf690b5badd4be81e392ff086ccca8a1d4e3a08463d8a966/matplotlib-3.10.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5", size = 8139044 }, +] + +[[package]] +name = "narwhals" +version = "1.39.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/e6/66682dd5ffe656358e07194fa9551b1d41e33952831a40553e791dd98dfc/narwhals-1.39.1.tar.gz", hash = "sha256:cf15389e6f8c5321e8cd0ca8b5bace3b1aea5f5622fa59dfd64821998741d836", size = 484444 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/c4/b83520ecc27840a4d58bd585ae0ec0f8a4f2b0c5a965b66749254a54de0e/narwhals-1.39.1-py3-none-any.whl", hash = "sha256:68d0f29c760f1a9419ada537f35f21ff202b0be1419e6d22135a0352c6d96deb", size = 355009 }, +] + +[[package]] +name = "numpy" +version = "2.2.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/b2/ce4b867d8cd9c0ee84938ae1e6a6f7926ebf928c9090d036fc3c6a04f946/numpy-2.2.5.tar.gz", hash = "sha256:a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291", size = 20273920 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/f7/1fd4ff108cd9d7ef929b8882692e23665dc9c23feecafbb9c6b80f4ec583/numpy-2.2.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ee461a4eaab4f165b68780a6a1af95fb23a29932be7569b9fab666c407969051", size = 20948633 }, + { url = "https://files.pythonhosted.org/packages/12/03/d443c278348371b20d830af155ff2079acad6a9e60279fac2b41dbbb73d8/numpy-2.2.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ec31367fd6a255dc8de4772bd1658c3e926d8e860a0b6e922b615e532d320ddc", size = 14176123 }, + { url = "https://files.pythonhosted.org/packages/2b/0b/5ca264641d0e7b14393313304da48b225d15d471250376f3fbdb1a2be603/numpy-2.2.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:47834cde750d3c9f4e52c6ca28a7361859fcaf52695c7dc3cc1a720b8922683e", size = 5163817 }, + { url = "https://files.pythonhosted.org/packages/04/b3/d522672b9e3d28e26e1613de7675b441bbd1eaca75db95680635dd158c67/numpy-2.2.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2c1a1c6ccce4022383583a6ded7bbcda22fc635eb4eb1e0a053336425ed36dfa", size = 6698066 }, + { url = "https://files.pythonhosted.org/packages/a0/93/0f7a75c1ff02d4b76df35079676b3b2719fcdfb39abdf44c8b33f43ef37d/numpy-2.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d75f338f5f79ee23548b03d801d28a505198297534f62416391857ea0479571", size = 14087277 }, + { url = "https://files.pythonhosted.org/packages/b0/d9/7c338b923c53d431bc837b5b787052fef9ae68a56fe91e325aac0d48226e/numpy-2.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a801fef99668f309b88640e28d261991bfad9617c27beda4a3aec4f217ea073", size = 16135742 }, + { url = "https://files.pythonhosted.org/packages/2d/10/4dec9184a5d74ba9867c6f7d1e9f2e0fb5fe96ff2bf50bb6f342d64f2003/numpy-2.2.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:abe38cd8381245a7f49967a6010e77dbf3680bd3627c0fe4362dd693b404c7f8", size = 15581825 }, + { url = "https://files.pythonhosted.org/packages/80/1f/2b6fcd636e848053f5b57712a7d1880b1565eec35a637fdfd0a30d5e738d/numpy-2.2.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a0ac90e46fdb5649ab6369d1ab6104bfe5854ab19b645bf5cda0127a13034ae", size = 17899600 }, + { url = "https://files.pythonhosted.org/packages/ec/87/36801f4dc2623d76a0a3835975524a84bd2b18fe0f8835d45c8eae2f9ff2/numpy-2.2.5-cp312-cp312-win32.whl", hash = "sha256:0cd48122a6b7eab8f06404805b1bd5856200e3ed6f8a1b9a194f9d9054631beb", size = 6312626 }, + { url = "https://files.pythonhosted.org/packages/8b/09/4ffb4d6cfe7ca6707336187951992bd8a8b9142cf345d87ab858d2d7636a/numpy-2.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:ced69262a8278547e63409b2653b372bf4baff0870c57efa76c5703fd6543282", size = 12645715 }, + { url = "https://files.pythonhosted.org/packages/e2/a0/0aa7f0f4509a2e07bd7a509042967c2fab635690d4f48c6c7b3afd4f448c/numpy-2.2.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:059b51b658f4414fff78c6d7b1b4e18283ab5fa56d270ff212d5ba0c561846f4", size = 20935102 }, + { url = "https://files.pythonhosted.org/packages/7e/e4/a6a9f4537542912ec513185396fce52cdd45bdcf3e9d921ab02a93ca5aa9/numpy-2.2.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:47f9ed103af0bc63182609044b0490747e03bd20a67e391192dde119bf43d52f", size = 14191709 }, + { url = "https://files.pythonhosted.org/packages/be/65/72f3186b6050bbfe9c43cb81f9df59ae63603491d36179cf7a7c8d216758/numpy-2.2.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:261a1ef047751bb02f29dfe337230b5882b54521ca121fc7f62668133cb119c9", size = 5149173 }, + { url = "https://files.pythonhosted.org/packages/e5/e9/83e7a9432378dde5802651307ae5e9ea07bb72b416728202218cd4da2801/numpy-2.2.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4520caa3807c1ceb005d125a75e715567806fed67e315cea619d5ec6e75a4191", size = 6684502 }, + { url = "https://files.pythonhosted.org/packages/ea/27/b80da6c762394c8ee516b74c1f686fcd16c8f23b14de57ba0cad7349d1d2/numpy-2.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d14b17b9be5f9c9301f43d2e2a4886a33b53f4e6fdf9ca2f4cc60aeeee76372", size = 14084417 }, + { url = "https://files.pythonhosted.org/packages/aa/fc/ebfd32c3e124e6a1043e19c0ab0769818aa69050ce5589b63d05ff185526/numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba321813a00e508d5421104464510cc962a6f791aa2fca1c97b1e65027da80d", size = 16133807 }, + { url = "https://files.pythonhosted.org/packages/bf/9b/4cc171a0acbe4666f7775cfd21d4eb6bb1d36d3a0431f48a73e9212d2278/numpy-2.2.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4cbdef3ddf777423060c6f81b5694bad2dc9675f110c4b2a60dc0181543fac7", size = 15575611 }, + { url = "https://files.pythonhosted.org/packages/a3/45/40f4135341850df48f8edcf949cf47b523c404b712774f8855a64c96ef29/numpy-2.2.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54088a5a147ab71a8e7fdfd8c3601972751ded0739c6b696ad9cb0343e21ab73", size = 17895747 }, + { url = "https://files.pythonhosted.org/packages/f8/4c/b32a17a46f0ffbde8cc82df6d3daeaf4f552e346df143e1b188a701a8f09/numpy-2.2.5-cp313-cp313-win32.whl", hash = "sha256:c8b82a55ef86a2d8e81b63da85e55f5537d2157165be1cb2ce7cfa57b6aef38b", size = 6309594 }, + { url = "https://files.pythonhosted.org/packages/13/ae/72e6276feb9ef06787365b05915bfdb057d01fceb4a43cb80978e518d79b/numpy-2.2.5-cp313-cp313-win_amd64.whl", hash = "sha256:d8882a829fd779f0f43998e931c466802a77ca1ee0fe25a3abe50278616b1471", size = 12638356 }, + { url = "https://files.pythonhosted.org/packages/79/56/be8b85a9f2adb688e7ded6324e20149a03541d2b3297c3ffc1a73f46dedb/numpy-2.2.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e8b025c351b9f0e8b5436cf28a07fa4ac0204d67b38f01433ac7f9b870fa38c6", size = 20963778 }, + { url = "https://files.pythonhosted.org/packages/ff/77/19c5e62d55bff507a18c3cdff82e94fe174957bad25860a991cac719d3ab/numpy-2.2.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dfa94b6a4374e7851bbb6f35e6ded2120b752b063e6acdd3157e4d2bb922eba", size = 14207279 }, + { url = "https://files.pythonhosted.org/packages/75/22/aa11f22dc11ff4ffe4e849d9b63bbe8d4ac6d5fae85ddaa67dfe43be3e76/numpy-2.2.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:97c8425d4e26437e65e1d189d22dff4a079b747ff9c2788057bfb8114ce1e133", size = 5199247 }, + { url = "https://files.pythonhosted.org/packages/4f/6c/12d5e760fc62c08eded0394f62039f5a9857f758312bf01632a81d841459/numpy-2.2.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:352d330048c055ea6db701130abc48a21bec690a8d38f8284e00fab256dc1376", size = 6711087 }, + { url = "https://files.pythonhosted.org/packages/ef/94/ece8280cf4218b2bee5cec9567629e61e51b4be501e5c6840ceb593db945/numpy-2.2.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b4c0773b6ada798f51f0f8e30c054d32304ccc6e9c5d93d46cb26f3d385ab19", size = 14059964 }, + { url = "https://files.pythonhosted.org/packages/39/41/c5377dac0514aaeec69115830a39d905b1882819c8e65d97fc60e177e19e/numpy-2.2.5-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55f09e00d4dccd76b179c0f18a44f041e5332fd0e022886ba1c0bbf3ea4a18d0", size = 16121214 }, + { url = "https://files.pythonhosted.org/packages/db/54/3b9f89a943257bc8e187145c6bc0eb8e3d615655f7b14e9b490b053e8149/numpy-2.2.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:02f226baeefa68f7d579e213d0f3493496397d8f1cff5e2b222af274c86a552a", size = 15575788 }, + { url = "https://files.pythonhosted.org/packages/b1/c4/2e407e85df35b29f79945751b8f8e671057a13a376497d7fb2151ba0d290/numpy-2.2.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c26843fd58f65da9491165072da2cccc372530681de481ef670dcc8e27cfb066", size = 17893672 }, + { url = "https://files.pythonhosted.org/packages/29/7e/d0b44e129d038dba453f00d0e29ebd6eaf2f06055d72b95b9947998aca14/numpy-2.2.5-cp313-cp313t-win32.whl", hash = "sha256:1a161c2c79ab30fe4501d5a2bbfe8b162490757cf90b7f05be8b80bc02f7bb8e", size = 6377102 }, + { url = "https://files.pythonhosted.org/packages/63/be/b85e4aa4bf42c6502851b971f1c326d583fcc68227385f92089cf50a7b45/numpy-2.2.5-cp313-cp313t-win_amd64.whl", hash = "sha256:d403c84991b5ad291d3809bace5e85f4bbf44a04bdc9a88ed2bb1807b3360bb8", size = 12750096 }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, +] + +[[package]] +name = "pandas" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, + { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, + { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, + { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, + { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, + { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, +] + +[[package]] +name = "pillow" +version = "11.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/cb/bb5c01fcd2a69335b86c22142b2bccfc3464087efb7fd382eee5ffc7fdf7/pillow-11.2.1.tar.gz", hash = "sha256:a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6", size = 47026707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/40/052610b15a1b8961f52537cc8326ca6a881408bc2bdad0d852edeb6ed33b/pillow-11.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:78afba22027b4accef10dbd5eed84425930ba41b3ea0a86fa8d20baaf19d807f", size = 3190185 }, + { url = "https://files.pythonhosted.org/packages/e5/7e/b86dbd35a5f938632093dc40d1682874c33dcfe832558fc80ca56bfcb774/pillow-11.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78092232a4ab376a35d68c4e6d5e00dfd73454bd12b230420025fbe178ee3b0b", size = 3030306 }, + { url = "https://files.pythonhosted.org/packages/a4/5c/467a161f9ed53e5eab51a42923c33051bf8d1a2af4626ac04f5166e58e0c/pillow-11.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25a5f306095c6780c52e6bbb6109624b95c5b18e40aab1c3041da3e9e0cd3e2d", size = 4416121 }, + { url = "https://files.pythonhosted.org/packages/62/73/972b7742e38ae0e2ac76ab137ca6005dcf877480da0d9d61d93b613065b4/pillow-11.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c7b29dbd4281923a2bfe562acb734cee96bbb129e96e6972d315ed9f232bef4", size = 4501707 }, + { url = "https://files.pythonhosted.org/packages/e4/3a/427e4cb0b9e177efbc1a84798ed20498c4f233abde003c06d2650a6d60cb/pillow-11.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3e645b020f3209a0181a418bffe7b4a93171eef6c4ef6cc20980b30bebf17b7d", size = 4522921 }, + { url = "https://files.pythonhosted.org/packages/fe/7c/d8b1330458e4d2f3f45d9508796d7caf0c0d3764c00c823d10f6f1a3b76d/pillow-11.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b2dbea1012ccb784a65349f57bbc93730b96e85b42e9bf7b01ef40443db720b4", size = 4612523 }, + { url = "https://files.pythonhosted.org/packages/b3/2f/65738384e0b1acf451de5a573d8153fe84103772d139e1e0bdf1596be2ea/pillow-11.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:da3104c57bbd72948d75f6a9389e6727d2ab6333c3617f0a89d72d4940aa0443", size = 4587836 }, + { url = "https://files.pythonhosted.org/packages/6a/c5/e795c9f2ddf3debb2dedd0df889f2fe4b053308bb59a3cc02a0cd144d641/pillow-11.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:598174aef4589af795f66f9caab87ba4ff860ce08cd5bb447c6fc553ffee603c", size = 4669390 }, + { url = "https://files.pythonhosted.org/packages/96/ae/ca0099a3995976a9fce2f423166f7bff9b12244afdc7520f6ed38911539a/pillow-11.2.1-cp312-cp312-win32.whl", hash = "sha256:1d535df14716e7f8776b9e7fee118576d65572b4aad3ed639be9e4fa88a1cad3", size = 2332309 }, + { url = "https://files.pythonhosted.org/packages/7c/18/24bff2ad716257fc03da964c5e8f05d9790a779a8895d6566e493ccf0189/pillow-11.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:14e33b28bf17c7a38eede290f77db7c664e4eb01f7869e37fa98a5aa95978941", size = 2676768 }, + { url = "https://files.pythonhosted.org/packages/da/bb/e8d656c9543276517ee40184aaa39dcb41e683bca121022f9323ae11b39d/pillow-11.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:21e1470ac9e5739ff880c211fc3af01e3ae505859392bf65458c224d0bf283eb", size = 2415087 }, + { url = "https://files.pythonhosted.org/packages/36/9c/447528ee3776e7ab8897fe33697a7ff3f0475bb490c5ac1456a03dc57956/pillow-11.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fdec757fea0b793056419bca3e9932eb2b0ceec90ef4813ea4c1e072c389eb28", size = 3190098 }, + { url = "https://files.pythonhosted.org/packages/b5/09/29d5cd052f7566a63e5b506fac9c60526e9ecc553825551333e1e18a4858/pillow-11.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b0e130705d568e2f43a17bcbe74d90958e8a16263868a12c3e0d9c8162690830", size = 3030166 }, + { url = "https://files.pythonhosted.org/packages/71/5d/446ee132ad35e7600652133f9c2840b4799bbd8e4adba881284860da0a36/pillow-11.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bdb5e09068332578214cadd9c05e3d64d99e0e87591be22a324bdbc18925be0", size = 4408674 }, + { url = "https://files.pythonhosted.org/packages/69/5f/cbe509c0ddf91cc3a03bbacf40e5c2339c4912d16458fcb797bb47bcb269/pillow-11.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d189ba1bebfbc0c0e529159631ec72bb9e9bc041f01ec6d3233d6d82eb823bc1", size = 4496005 }, + { url = "https://files.pythonhosted.org/packages/f9/b3/dd4338d8fb8a5f312021f2977fb8198a1184893f9b00b02b75d565c33b51/pillow-11.2.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:191955c55d8a712fab8934a42bfefbf99dd0b5875078240943f913bb66d46d9f", size = 4518707 }, + { url = "https://files.pythonhosted.org/packages/13/eb/2552ecebc0b887f539111c2cd241f538b8ff5891b8903dfe672e997529be/pillow-11.2.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:ad275964d52e2243430472fc5d2c2334b4fc3ff9c16cb0a19254e25efa03a155", size = 4610008 }, + { url = "https://files.pythonhosted.org/packages/72/d1/924ce51bea494cb6e7959522d69d7b1c7e74f6821d84c63c3dc430cbbf3b/pillow-11.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:750f96efe0597382660d8b53e90dd1dd44568a8edb51cb7f9d5d918b80d4de14", size = 4585420 }, + { url = "https://files.pythonhosted.org/packages/43/ab/8f81312d255d713b99ca37479a4cb4b0f48195e530cdc1611990eb8fd04b/pillow-11.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fe15238d3798788d00716637b3d4e7bb6bde18b26e5d08335a96e88564a36b6b", size = 4667655 }, + { url = "https://files.pythonhosted.org/packages/94/86/8f2e9d2dc3d308dfd137a07fe1cc478df0a23d42a6c4093b087e738e4827/pillow-11.2.1-cp313-cp313-win32.whl", hash = "sha256:3fe735ced9a607fee4f481423a9c36701a39719252a9bb251679635f99d0f7d2", size = 2332329 }, + { url = "https://files.pythonhosted.org/packages/6d/ec/1179083b8d6067a613e4d595359b5fdea65d0a3b7ad623fee906e1b3c4d2/pillow-11.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:74ee3d7ecb3f3c05459ba95eed5efa28d6092d751ce9bf20e3e253a4e497e691", size = 2676388 }, + { url = "https://files.pythonhosted.org/packages/23/f1/2fc1e1e294de897df39fa8622d829b8828ddad938b0eaea256d65b84dd72/pillow-11.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:5119225c622403afb4b44bad4c1ca6c1f98eed79db8d3bc6e4e160fc6339d66c", size = 2414950 }, + { url = "https://files.pythonhosted.org/packages/c4/3e/c328c48b3f0ead7bab765a84b4977acb29f101d10e4ef57a5e3400447c03/pillow-11.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8ce2e8411c7aaef53e6bb29fe98f28cd4fbd9a1d9be2eeea434331aac0536b22", size = 3192759 }, + { url = "https://files.pythonhosted.org/packages/18/0e/1c68532d833fc8b9f404d3a642991441d9058eccd5606eab31617f29b6d4/pillow-11.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9ee66787e095127116d91dea2143db65c7bb1e232f617aa5957c0d9d2a3f23a7", size = 3033284 }, + { url = "https://files.pythonhosted.org/packages/b7/cb/6faf3fb1e7705fd2db74e070f3bf6f88693601b0ed8e81049a8266de4754/pillow-11.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9622e3b6c1d8b551b6e6f21873bdcc55762b4b2126633014cea1803368a9aa16", size = 4445826 }, + { url = "https://files.pythonhosted.org/packages/07/94/8be03d50b70ca47fb434a358919d6a8d6580f282bbb7af7e4aa40103461d/pillow-11.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63b5dff3a68f371ea06025a1a6966c9a1e1ee452fc8020c2cd0ea41b83e9037b", size = 4527329 }, + { url = "https://files.pythonhosted.org/packages/fd/a4/bfe78777076dc405e3bd2080bc32da5ab3945b5a25dc5d8acaa9de64a162/pillow-11.2.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:31df6e2d3d8fc99f993fd253e97fae451a8db2e7207acf97859732273e108406", size = 4549049 }, + { url = "https://files.pythonhosted.org/packages/65/4d/eaf9068dc687c24979e977ce5677e253624bd8b616b286f543f0c1b91662/pillow-11.2.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:062b7a42d672c45a70fa1f8b43d1d38ff76b63421cbbe7f88146b39e8a558d91", size = 4635408 }, + { url = "https://files.pythonhosted.org/packages/1d/26/0fd443365d9c63bc79feb219f97d935cd4b93af28353cba78d8e77b61719/pillow-11.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4eb92eca2711ef8be42fd3f67533765d9fd043b8c80db204f16c8ea62ee1a751", size = 4614863 }, + { url = "https://files.pythonhosted.org/packages/49/65/dca4d2506be482c2c6641cacdba5c602bc76d8ceb618fd37de855653a419/pillow-11.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f91ebf30830a48c825590aede79376cb40f110b387c17ee9bd59932c961044f9", size = 4692938 }, + { url = "https://files.pythonhosted.org/packages/b3/92/1ca0c3f09233bd7decf8f7105a1c4e3162fb9142128c74adad0fb361b7eb/pillow-11.2.1-cp313-cp313t-win32.whl", hash = "sha256:e0b55f27f584ed623221cfe995c912c61606be8513bfa0e07d2c674b4516d9dd", size = 2335774 }, + { url = "https://files.pythonhosted.org/packages/a5/ac/77525347cb43b83ae905ffe257bbe2cc6fd23acb9796639a1f56aa59d191/pillow-11.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:36d6b82164c39ce5482f649b437382c0fb2395eabc1e2b1702a6deb8ad647d6e", size = 2681895 }, + { url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 }, +] + +[[package]] +name = "plotly" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "narwhals" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/e3/66eabba0b35095027e1ae5cb2e091cd168d44362242b5496baac9a460697/plotly-6.1.0.tar.gz", hash = "sha256:f13f497ccc2d97f06f771a30b27fab0cbd220f2975865f4ecbc75057135521de", size = 7545417 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/11/83ae52318353f9da4a88cc23e7f9dbc3d449b3f0fd6158fba15eb3c3b816/plotly-6.1.0-py3-none-any.whl", hash = "sha256:a29d3ed523c9d7960095693af1ee52689830df0f9c6bae3e5e92c20c4f5684c3", size = 16118476 }, +] + +[[package]] +name = "pyparsing" +version = "3.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "tzdata" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 }, +]