From 0e9f2f80eb46b00d3da82af11695ea85b78932cd Mon Sep 17 00:00:00 2001 From: MrDiver Date: Tue, 5 Dec 2023 19:14:11 +0100 Subject: [PATCH 01/38] Adding a tour through manim --- docs/source/_static/AdventureManim.png | Bin 0 -> 164137 bytes docs/source/adventure.rst | 235 +++++++++++++++++++++++++ docs/source/index.rst | 1 + 3 files changed, 236 insertions(+) create mode 100644 docs/source/_static/AdventureManim.png create mode 100644 docs/source/adventure.rst diff --git a/docs/source/_static/AdventureManim.png b/docs/source/_static/AdventureManim.png new file mode 100644 index 0000000000000000000000000000000000000000..754145a9a8cc3dba7bfdc1f77fd23d3905bb27ad GIT binary patch literal 164137 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%0D0fqOUOzoPwf zgfRP&$eabEVj9(84HC9a14_#-a_23h-v+;z^M`Gz4+BJtLLR%vvx8dx~FaN9Amr5&ZF*&n)o?1dyb#TdI@Fe0=rZizKxcVBugcAxk>1Yw-*Y9>Q1QTxvNc zTarFu>Xev~`y3l{R&UFp8>;&iR?X5+cKoAxEyN?YEicHKq? zT>Llj9G1LZT{mn~$}>3b`Dyqpp_)}>!K1WzA37qO*l9FL>Z~FwY^KF!&aq$^CS~>1 zwxj`ZDYdB<+|DDvpOg&&ZGhoS*@eOEKDdXCgb|HHoLKx3Z9AfkNdq3>mt-5f(SV^j@Vmdbrx`0$XhPwXTIlX^ZbwP?1u zFLzYALGdKyzbkgY)jAeZD_B&uz{jr~?~0rXlfa!1Z0u~o;P#LK5+2`E&xrIg)hZYQ z;#uKBF!`D|Prn^SRZ-=o+VQ=dL3QH0>*NI;ciP1vlPi79)7AZ__X1g*p3+|jA5n>5 zp5uG4=1SBoT#i3;bHYCW#F0rYTTcjlU`Upo?SRbnAurDy{L6i9q-rqQ zsL`3COZ-A4gX+63^rw{_nNQuzIn$b*%Q}y|9{ZOUH0|3iz@6(Go1wLR z$Cr0Dt47scL*vQ1#yK1w$fO_vPVNXEyRQV%^}Yf$)>RkjER`kCtoqRl4ptu}a@2%| z9VCa1>fRIj`4k%WwDGV2zihGvas7QB$4%{50SVg`dy9`PtG*aD`4lwpr(zOxez=VQ zI~+cA#6USrVNZ@*y84s*UQuvWgBE{}ULT87u3)dI2VtbJm|$U==&M(xHG?T!p9CFpz2ix8P2H3_ABLLmGVAj(h*QbQ^!LBUz{ps1(egzKQx`X}^>P4j zw((&*03f03G=Xl$rWb>Z(8n$+bE^9Wx#sblUwY%(#~2-+;yKJq*c?peqpJo{9g(O1 zg01*rk-UcQC-m(o|F!7}9q15C1X38M)lCOi9EiUnEhVHiA{{y(v)Os$gT!l5_^P_Kkp}xoE87Eqm|I1+J9|JU>&b5|$+d?tcK^3#QMgu*a?I+olpOjkz0_ zqlSW)K5|ltQQc>m+4|)rXkjII+Mj6l?W)2y|AnH`CM!1eI`Zae_75&m!({)2ZiaXw|xrtN}{)0D-XVF zF5h$XEJ<@R&NY5*ZccMbEpH{N+#;;s&6?PU8&NTkbMJ)2M}6juKg(@!)zwvudSz`* z1({gY=%FZc@+A>f4Hp9 z%^8-Y=1N4i%*}3vMfphI=IL6Qd#j5)UUfU~zulL%y3K3M<(*(VF7oNEy!v$@Ik2Sw z0BVye6l7O8iCWGv@GU`gstQYA=Fx0)*O&wXI{Z>sC}~SvN7`JxrT#_B2(LFwG4V{* zo&@vECAof+y!q~hdfB|M#LP(l_pj5KQ{9plvDEXn-@9=Hz$8tJ1wNqC#jygo%twi(*vD10cq`QqAlt4?Hg_3lmmD1WbFcRk!1<$=SQnW17^E!H`NMZL~@x4)_~G$DaoV=sZ#j!L#Ik#5@#k$*>C3$S$iLLU3FYgX0FeB9fk|BGTkPsDxIusyk=gnn}xSh0a`ScC7>{>EVk5NT?DaJ~Ynm3Ph(ciw90pu`;F5l~MG zAq4y?8}GWO4fOC;-IPR6uzFl{E<={-q?hOD)A(F$k&hkX&pk&N>x;5s8mbr^M> z0b#_1r*Q};I#Or^DjJWsxYU7{%vBt;cKlXcOiW{adteN)cPRi&27#FlkeE9By76X+ zDU(yDkH5jQ@Y6QAe7`Ni7kr~>OJm;mSxxcOg44!9*YpS10OOxaMj+d6DRDv4v?ygp zH7Rn*TQ5l3X(gfFY&15@ficfR(};j!D$s5Ko`Vv|^3tI-d}Sk^iaYMm`&Fv$OQT0Z z#ttKR|A2B8ES=?X;B1$%WfAC$pUVC7K#r5AC&$dO&Rce!$Dh&&fnhS-WF@F54c#b0 zf9|&3>J=wH%^eB#8#m6PQ^pZp=18XN+oc`Mi(V(UdW_IAIWDTz6Ym{}- zDIbbp#itLenytEY(juKcpb9)u=I8dN&!7);b#-Mi3!{~Wdd+9v!1p_R0#+~JCC~o; z15lwlv~)WFb=I45o12>`bIo;vA~Rr?4I3e&-t)@}y((5#%PNCjSlcTmwhJ_gDSTZ? zr0gf|`?otxkwCc&_Eb51r~OL&;*!t= z7aw^di8xCa#U4v7Ou$bcysJr6OpRjZ(qh>@5+?X#{aW0aeIVU^OvO$|B}od9M`BN; zVs>DLkr2Dk-*_N{3NXz#s$&;Oa5t*tCj~%V1TqBYN;L*Pv&9s&n{AB~qzz1C((q^W z4m}E-zq_*niwZbH_hvFhc)l zIm(&`qA~^5Q2U`wrSEatP+|GVYd|0qs0V(UPQ%td9Ae9^?oJxmgQ#g37#NiKZJV6= zZTiXZWFWYyTowAlQlff$dq+9(Bq}&Q{k5rE>`6(I-X$i=NVz&VKFq)QXGn|^y&wj^yS z8_3h%3{nyOP37s_Y@}|gui?3+Ey?Lk3wXkCbEvgj`1RYKb>{8;T8m`>4D^z-cY^~^l*-Dk2m0)!>` zoYP#ryf~LdtMNI0e4j>!K|n3r%avEZ2Fx&GgFF_t^vr37qig9Ky&(mdfGTk+891_O zTgr8aTaTEr6b#TYQY#M-)N$bjj!kTKRi)W>s7Wb`;*C1vO!anBPtpr3Rgmi$#O2eT zkMY~L?@)_+udcNUV35u(7O{ve^`UQ} z6}E7L#OX_39Z}poS}1s*)1v6!i~REq>a2EkHOt;LYG5J|n-Y#a*5e5a*+oS~nZbA} zJf9xcOz@07Eo{M3ug`;_BGZ3#d}I-(a}ge6Q9 zQB;(iLp$eQ{-6UYSMx$BJrbzBf#qVB&?={%*}@?ApQAp=`6{Rpozz*UFWKKHe8wwh zzy=PG{^cl~W!3h#E^CIh>N zhJw;}AD7lUUy2{H@^C8OYl9f0@#OdYWu_by*<4Z>u9Eh zwXpZWhNi_p#Txa*679#E=(g`-7L-DFt(aiu`0wVSIe!600F*GeFwTFfU-sL?sLIGS1I!VB2l+3|YvSat^`zi7V!$r5|vhQEI8OWHXp#s$^^FL0b37j zXq5+C`8hrB0mk>PzaQU>@188caD(_1i{LC^cyxO=^^TceP0h$m97N%;PR-H?glESM z2M<)gH0+D&M@Z|p!T^dIcXx9u%}oaEVBV|2-9^#+Ijga9KJVRX>*}~s`Iw*~$p0FF z*@)<%C>OP=vEmgCz(<~1w`LID8Je>q`H#HS8y6ju8Uw%6wH&nZhha!@1>2@5tcuY7 z?=M(i`d}jUwc;v{PugW73(r#u*})cVJs6kYid}J#7-hqa2LRHhZYG9h$e0W?>PkHr za!8r2vJ>r9TF32#lM8i=NC-6-KY(;Jjn<@8sdCMIG@nFiGIjX&owDY<+joDU z)d~mu@n=EShVxH$z+=FYo5QtAbcgbX7N6&= zToWRcskrjj^`_;PM79I%pwf(6yZj*~(^92Lns=KSh+8 z6P@1&oV)i;yc|@!by-casO|o4x|*kGBf2_;fi@hF5`YL7UUJdII*PhzydvfcSe^a& zad9Cb^G)Jc0@fF@6Qnx~%3naE~t33X_*|FJf9XKQ@NJGxKa>44*3{R)iV7 z=>daf$?h*5$Nu}oQ)Eb{+NC3(~r{xJ{iQfg&ObhXIkNrE&T4M1_M#a^I+%MQ^n%)%XG zleezpV1wue)?R%G4gwOaMy!{-w;x!owkXM4+g6Kb2my3Mupw5CZzJcdkaQ1x(A%^` zr*SG8mAxW~m6uyrbMhN^KH*Gj>*NPzv9>MG--lH$60iK>m8Ht-(J6w-pzouUL$*2^ zC2WWdazjmUFd=TR{D3#uP=H}Nku%}&EZVk%;5NRA9gc8abFbz@Y+l5A|U$pD80+Gj;vXQ@FMa2yCU?c;|@@h{@pO}33 EKfZ3luK)l5 literal 0 HcmV?d00001 diff --git a/docs/source/adventure.rst b/docs/source/adventure.rst new file mode 100644 index 0000000000..8b7bfcb580 --- /dev/null +++ b/docs/source/adventure.rst @@ -0,0 +1,235 @@ +***************************************************** +An Adventure through Manims Features and Capabilities +***************************************************** + +.. image:: _static/AdventureManim.png + :align: center + + +**Author:** `Tristan Schulz `__ + +.. note:: This is a work in progress guide and might not be complete at this point + +############## +What to expect +############## +This guide will take you on a Tour through the features and capabilities of Manim. The goal is to give you a good overview of what Manim can do and how to use it. It is not meant to be a complete reference, but rather a starting point for your own explorations. + +The goal of this guide is to give you a clear path from the basics of Manim to a finished animation. It will not go into detail about the inner workings of Manim, but rather focus on the practical aspects of using it. +At the end of this guide you should be able to create your own animations and have a good understanding of how to use Manim. + +.. warning:: + Please note that this guide is only for Manim and expects basic knowledge about programming with Python. If you are new to Python you should first learn the basics of Python before you start with Manim. + You can find a full introduction to Python here: https://docs.python.org/3/tutorial/ + + You can still follow this guide with basic knowledge of Python, but you will have to learn some Python basics along the way in order to understand the code examples. + +################# +What are Mobjects +################# + +Mobjects are the basic building blocks of Manim. They are the objects that are animated and displayed on the screen. +Mobjects can be anything from simple shapes to complex 3D objects. They can be animated, moved, rotated, scaled and much more. +In this guide we will focus on the 2D Mobjects, but the same principles apply to 3D Mobjects as well. + +.. manim:: MobjectsFloating + :hide_source: + + class MobjectsFloating(Scene): + def construct(self): + c = Circle() + s = Square() + t = Triangle() + c.shift(UP) + t.shift(LEFT*3+DOWN) + s.shift(RIGHT*3+DOWN) + self.add(c, s, t) + timer = ValueTracker(0) + c.add_updater(lambda m: m.move_to(UP+0.2*DOWN*np.sin(timer.get_value()+1))) + s.add_updater(lambda m: m.move_to(RIGHT*3+DOWN+0.3*DOWN*np.sin(timer.get_value()+2))) + t.add_updater(lambda m: m.move_to(LEFT*3+DOWN+0.3*DOWN*np.sin(timer.get_value()+4))) + self.add(timer) + self.play(timer.animate.set_value(2*np.pi), run_time=5, rate_func=linear) + + + +For a list of all Mobjects you can look at the :doc:`/reference_index/mobjects` Documentation Page. There are many more to explore and you can even create your own Mobjects, which we will cover later. + + +.. manim:: PredefinedMobjects + :save_last_frame: + :hide_source: + + class PredefinedMobjects(Scene): + def construct(self): + c = Circle() + s = Square().set_color(GREEN) + t = Triangle() + graph = FunctionGraph(lambda x: np.sin(x)) + axis = Axes() + par = ParametricFunction(lambda t: np.array([np.cos(3*t), np.sin(2*t), 0]), [0, 2*np.pi]) + mat = Matrix([["\\pi", 0], [0, 1]]) + chart = BarChart( + values=[-5, 40, -10, 20, -3], + bar_names=["one", "two", "three", "four", "five"], + y_range=[-20, 50, 10], + y_length=6, + x_length=10, + x_axis_config={"font_size": 36}, + ).shift(RIGHT/2) + func = lambda pos: ((pos[0] * UR + pos[1] * LEFT) - pos) / 3 + vecfield = ArrowVectorField(func,x_range=[-3,3],y_range=[-3,3]) + cross = VGroup( + Line(UP + LEFT, DOWN + RIGHT), + Line(UP + RIGHT, DOWN + LEFT)) + a = Circle().set_color(RED).scale(0.5) + b = cross.set_color(BLUE).scale(0.5) + t3 = MobjectTable( + [[a.copy(),b.copy(),a.copy()], + [b.copy(),a.copy(),a.copy()], + [a.copy(),b.copy(),b.copy()]]) + t3.add(Line( + t3.get_corner(DL), t3.get_corner(UR) + ).set_color(RED)) + + group = [c, s, t, graph, axis, par, mat, chart, vecfield, t3] + names = ["Circle", "Square", "Triangle", "FunctionGraph", "Axes", "ParametricFunction", "Matrix", "BarChart" ,"ArrowVectorField", "MobjectTable"] + ziped = zip(group, names) + combined = [] + for mob, name in ziped: + square = Square() + name = Text(name).scale(0.5) + mob.scale_to_fit_width(square.get_width()) + square.scale(1.2) + name.next_to(square, DOWN) + group = VGroup(mob, name, square) + combined.append(group) + + all = VGroup(*combined).arrange_in_grid(buff=1,rows=2).scale(0.8).to_edge(UP) + dots = MathTex("\\dots").next_to(all, DOWN, buff=1) + self.add(all,dots) + +.. note:: + The type of Mobject that is used most of the time is the `VMobject`. This is a Mobject that is made up of `VectorizedPoints`. These are points that are defined by their coordinates and can be connected by lines or curves. + Everytime we talk about Mobjects in this guide we mean VMobjects, unless we state otherwise. + +============================= +Mobjects and their Attributes +============================= + +In order to display Mobjects in your animations you need to add them to the scene. You can do this by calling ``self.add(mobject)`` in the ``construct`` method of your scene. +Which will tell Manim that you want to display the Mobject in your scene. + +.. manim:: CreatingMobjects + :save_last_frame: + + class CreatingMobjects(Scene): + def construct(self): + c = Circle() + self.add(c) + +This will be the basic structure of all your animations. You will create Mobjects and add them to the scene. Then you can animate them and change their properties. +Try the "Make Interactive" Button and see if you can create a `Square` instead of a `Circle`. + +------------------ +Mobject Attributes +------------------ + +Mobjects also posses many attributes that you can change. For example you can change the color of a Mobject by calling ``mobject.set_color(color)`` or scale it by calling ``mobject.scale(factor)``. + +The Basic attributes are the ``points``, ``fill_color``, ``fill_opacity``, ``stroke_color``, ``stroke_opacity``, ``stroke_width``. +The ``points`` define the outline of the Mobject. Whereas the color attributes define how this outline is displayed. + +A full list of the attributes of :class:`VMobject` can be found in the :doc:`reference/manim.mobject.types.vectorized_mobject.VMobject` Documentation Page. Please note that depending on the Type of Mobject you are using, there might be additional attributes, which are listed on the corresponding Documentation Page. + +------------------- +Changing the Points +------------------- + +Most of the function that you will use in Manim will be functions that change the points of a Mobject. For example ``mobject.shift(direction)`` will move the Mobject in the given direction. Or ``mobject.rotate(angle)`` will rotate the Mobject by the given angle. + +.. manim:: MobjectPoints + :save_last_frame: + + class MobjectPoints(Scene): + def construct(self): + c = Circle() + s = Square() + t = Triangle() + + c.shift(3*LEFT) + s.rotate(PI/4) + t.shift(3*RIGHT) + + self.add(c, s, t) + +------------------ +Changing the Color +------------------ + +Changing the color works in the same way but instead of modifying it you can set it to a new value. For example ``mobject.set_fill(color)`` will set the fill color of the Mobject to the given color. + +You can also pass in attributes through the constructor of the Mobject. For example ``Circle(fill_color=RED)`` will create a circle with a red fill color. For a list of parameters that you can pass you can always visit the corresponding Documentation Page in the Reference Manual. + +.. manim:: MobjectColor + :save_last_frame: + + class MobjectColor(Scene): + def construct(self): + c = Circle(fill_color=YELLOW).shift(3*LEFT) + s = Square() + t = Triangle().shift(3*RIGHT) + + c.set_fill(color=RED).set_opacity(1) + s.set_stroke(color=GREEN) + t.set_color(color=BLUE).set_opacity(0.5) + + self.add(c, s, t) + + +------------------- +Test your Knowledge +------------------- + +Now that you saw the basic ways to change Mobjects, try to reproduce the following Image. You can use the "Make Interactive" Button of the above Scene to get started. + +.. manim:: TestYourKnowledge1 + :save_last_frame: + :hide_source: + + class TestYourKnowledge1(Scene): + def construct(self): + c = Circle(fill_color=RED,stroke_color=GREEN).shift(3*LEFT) + s = Square(fill_color=GREEN,stroke_color=BLUE).set_opacity(0.2) + t = Triangle(fill_color=RED,stroke_opacity=0).shift(RIGHT) + + c.set_fill(color=RED).set_opacity(1) + s.set_stroke(color=GREEN) + t.set_color(color=BLUE).set_opacity(0.5) + + self.add(c, s, t) + + +################### +Animations in Manim +################### + +Now that we looked long enough at static Images, let's get to the fun part of Manim. Animations! +Animations are at the core of Manim and are what makes it so powerful. You can animate almost anything in Manim and you can do it in many different ways. +In this section we will look at the different ways to animate Mobjects and how to control the animations. + +.. manim:: Manimations1 + :hide_source: + + class Manimations1(Scene): + def construct(self): + c = Circle().shift(UP).set_color(RED) + s = Square().shift(LEFT*3) + t = Triangle().shift(RIGHT*3) + l = MathTex(r"\mathbf{M}").shift(DOWN).set_fill(opacity=0).set_stroke(color=WHITE, opacity=1, width=5).scale(4) + self.play(AnimationGroup(Create(c), GrowFromCenter(s), Write(l), FadeIn(t), lag_ratio=0.2)) + group = VGroup(l,c, s, t) + self.play(group.animate.arrange(RIGHT)) + self.play(group.animate.arrange(DOWN)) + self.play(group.animate.arrange_in_grid(buff=1,rows=2)) + self.play(Unwrite(group)) diff --git a/docs/source/index.rst b/docs/source/index.rst index 8e6d8c2fb6..abcf48a816 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -100,6 +100,7 @@ Index examples installation tutorials_guides + adventure reference plugins changelog From 1a7cf2affa217047ccd81f32adc82ca377e3c44d Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Thu, 7 Dec 2023 14:04:34 -0500 Subject: [PATCH 02/38] Added introduction animations --- docs/source/adventure.rst | 85 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/docs/source/adventure.rst b/docs/source/adventure.rst index 8b7bfcb580..f7777c3b3c 100644 --- a/docs/source/adventure.rst +++ b/docs/source/adventure.rst @@ -1,6 +1,6 @@ -***************************************************** -An Adventure through Manims Features and Capabilities -***************************************************** +****************************************************** +An Adventure through Manim's Features and Capabilities +****************************************************** .. image:: _static/AdventureManim.png :align: center @@ -233,3 +233,82 @@ In this section we will look at the different ways to animate Mobjects and how t self.play(group.animate.arrange(DOWN)) self.play(group.animate.arrange_in_grid(buff=1,rows=2)) self.play(Unwrite(group)) + + + +================================ +Introduction to Basic Animations +================================ + +There are multiple ways to animate the addition and removal of mobjects from the scene. The most common ways to introduce mobjects is with ``FadeIn`` or ``Create``, +and the most common ways to remove objects from the scene are their counterparts: ``FadeOut`` and ``Uncreate``. + +.. manim:: BasicAnimations + + class BasicAnimations(Scene): + def construct(self): + c1 = Circle().shift(2*LEFT) + c2 = Circle().shift(2*RIGHT) + self.play(FadeIn(c1), Create(c2)) + self.play(FadeOut(c1), Uncreate(c2)) + + +You can adjust the duration of each animation individually, or you can set a duration for all in animations in a ``Scene.play`` call. + +.. manim:: AnimationRuntimes + + class AnimationRuntimes(Scene): + def construct(self): + c = Circle().shift(2*LEFT) + s = Square().shift(2*RIGHT) + # set animation runtimes individually + self.play(Create(c, run_time=2), Create(s, run_time=1)) + # in this call, the individual runtimes of each animation + # are overridden by the runtime in the self.play call + self.play(FadeOut(c, run_time=2), FadeOut(s, run_time=1), run_time=1.5) + +---------------------- +The ``Wait`` Animation +---------------------- + +Now all these animations seem a bit rushed. Luckily, Manim allows us to create periods of time where nothing is happening. +As an example, try rendering: + +.. manim:: BasicAnimationWithWait + + class BasicAnimationWithWait(Scene): + def construct(self): + c = Circle() + self.play(Create(c)) + self.wait() # wait for one second by default + self.play(FadeOut(c)) + self.wait(0.5) # wait half a second + +A little bit later on, we will learn how to leverage the ``stop_condition`` parameter to stop after a certain event happens. + +===================== +Transforming Mobjects +===================== + +Manim allows us to smoothly transform one ``Mobject`` into another using ``Trasnform`` (and in just a second, we'll talk about ``ReplacementTransform``). + +.. manim:: TransformAnimation + + class TransformAnimation(Scene): + def construct(self): + c = Circle() + self.add(c) + self.play(Transform(c, Square())) + self.wait(0.2) + +----------------------------------------- +``Transform`` vs ``ReplacementTransform`` +----------------------------------------- + +Stuff + + +------------------- +``.animate`` Syntax +------------------- + From cc06740f95e4ebea638ba7e063d27bfd2500bf6b Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Thu, 7 Dec 2023 14:14:03 -0500 Subject: [PATCH 03/38] Added Transform vs ReplacementTransform --- docs/source/adventure.rst | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/docs/source/adventure.rst b/docs/source/adventure.rst index f7777c3b3c..e8f501c44b 100644 --- a/docs/source/adventure.rst +++ b/docs/source/adventure.rst @@ -290,7 +290,8 @@ A little bit later on, we will learn how to leverage the ``stop_condition`` para Transforming Mobjects ===================== -Manim allows us to smoothly transform one ``Mobject`` into another using ``Trasnform`` (and in just a second, we'll talk about ``ReplacementTransform``). +Manim allows us to smoothly transform one ``Mobject`` into another using ``Transform`` (and in just a second, we'll talk about ``ReplacementTransform``). +``Transform(mob1, mob2)`` turns the attributes of ``mob1`` into the attributes of ``mob2``. .. manim:: TransformAnimation @@ -299,14 +300,26 @@ Manim allows us to smoothly transform one ``Mobject`` into another using ``Trasn c = Circle() self.add(c) self.play(Transform(c, Square())) - self.wait(0.2) + self.play(FadeOut(c)) ----------------------------------------- ``Transform`` vs ``ReplacementTransform`` ----------------------------------------- -Stuff +While ``Transform(mob1, mob2)`` changes the attributes of ``mob1`` to ``mob2``, ``ReplacementTransform(mob1, mob2)`` literally replaces ``mob1`` on the +scene with ``mob2``. + +Here is the same scene in the last section, but using ``ReplacementTransform``: + +.. manim:: ReplacementTransformAnimation + class ReplacementTransformAnimation(Scene): + def construct(self): + c = Circle() + s = Square() + self.add(c) + self.play(ReplacementTransform(c, s)) + self.play(FadeOut(s)) ------------------- ``.animate`` Syntax From 598828abfb922452d3ae5700618492b44f9dcd37 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Fri, 8 Dec 2023 11:59:43 -0500 Subject: [PATCH 04/38] Added Transform stuff and rate functions --- docs/source/adventure.rst | 81 +++++++++++++++++++++++++++++++++++---- 1 file changed, 74 insertions(+), 7 deletions(-) diff --git a/docs/source/adventure.rst b/docs/source/adventure.rst index e8f501c44b..009c40181c 100644 --- a/docs/source/adventure.rst +++ b/docs/source/adventure.rst @@ -94,9 +94,9 @@ For a list of all Mobjects you can look at the :doc:`/reference_index/mobjects` group = [c, s, t, graph, axis, par, mat, chart, vecfield, t3] names = ["Circle", "Square", "Triangle", "FunctionGraph", "Axes", "ParametricFunction", "Matrix", "BarChart" ,"ArrowVectorField", "MobjectTable"] - ziped = zip(group, names) + zipped = zip(group, names) combined = [] - for mob, name in ziped: + for mob, name in zipped: square = Square() name = Text(name).scale(0.5) mob.scale_to_fit_width(square.get_width()) @@ -107,11 +107,11 @@ For a list of all Mobjects you can look at the :doc:`/reference_index/mobjects` all = VGroup(*combined).arrange_in_grid(buff=1,rows=2).scale(0.8).to_edge(UP) dots = MathTex("\\dots").next_to(all, DOWN, buff=1) - self.add(all,dots) + self.add(all, dots) .. note:: The type of Mobject that is used most of the time is the `VMobject`. This is a Mobject that is made up of `VectorizedPoints`. These are points that are defined by their coordinates and can be connected by lines or curves. - Everytime we talk about Mobjects in this guide we mean VMobjects, unless we state otherwise. + Every time we talk about Mobjects in this guide we mean VMobjects, unless we state otherwise. ============================= Mobjects and their Attributes @@ -252,6 +252,9 @@ and the most common ways to remove objects from the scene are their counterparts self.play(FadeIn(c1), Create(c2)) self.play(FadeOut(c1), Uncreate(c2)) +--------------------------- +Runtimes and Rate Functions +--------------------------- You can adjust the duration of each animation individually, or you can set a duration for all in animations in a ``Scene.play`` call. @@ -267,12 +270,45 @@ You can adjust the duration of each animation individually, or you can set a dur # are overridden by the runtime in the self.play call self.play(FadeOut(c, run_time=2), FadeOut(s, run_time=1), run_time=1.5) +You can also adjust the speed at an animation proceeds at using rate functions. + +.. manim:: RateFunctionsExample + + class RateFunctionsExample(Scene): + def construct(self): + c1 = Circle().shift(2*LEFT) + c2 = Circle().shift(2*RIGHT) + self.play( + Create(c1, rate_func=rate_functions.linear), + Create(c2, rate_func=rate_functions.ease_in_sine), + run_time=5 + ) + +Alternatively, you can create your own. A rate function takes in a value between 0 and 1 representing the "progress" of the animation. You can think of this as the +ratio of the time passed since the animation started, to the runtime of the animation. It should return how much of the animation should have been completed by that time. + +As an example, check out the rate function below. + +.. manim:: CustomRateFunctions + + class CustomRateFunctions(Scene): + def construct(self): + def there_and_back_three(alpha: float): + if alpha <= 1/3: + return 3*alpha + elif alpha <= 2/3: + return 1-3*(alpha-1/3) + else: + return 3*(alpha-2/3) + + self.play(Create(Circle(), rate_func=there_and_back_three), run_time=4) + ---------------------- The ``Wait`` Animation ---------------------- Now all these animations seem a bit rushed. Luckily, Manim allows us to create periods of time where nothing is happening. -As an example, try rendering: +Let's look at an example: .. manim:: BasicAnimationWithWait @@ -300,7 +336,7 @@ Manim allows us to smoothly transform one ``Mobject`` into another using ``Trans c = Circle() self.add(c) self.play(Transform(c, Square())) - self.play(FadeOut(c)) + self.play(FadeOut(c)) # fadeout c ----------------------------------------- ``Transform`` vs ``ReplacementTransform`` @@ -319,9 +355,40 @@ Here is the same scene in the last section, but using ``ReplacementTransform``: s = Square() self.add(c) self.play(ReplacementTransform(c, s)) - self.play(FadeOut(s)) + self.play(FadeOut(s)) # fadeout s + +Ultimately, the choice of which to use is up to the programmer. However, some examples like the one below make the code simpler when using one over the other. + +.. manim:: CyclingShapesAnimation + + class CyclingShapesAnimation(Scene): + def construct(self): + mob = Circle() + shapes = (Square(), Triangle(), Circle().set_fill(color=RED, opacity=0.5)) + self.add(mob) + for shape in shapes: + self.play(Transform(mob, shape)) + self.wait(0.3) + ------------------- ``.animate`` Syntax ------------------- +One of the most powerful features of Manim is it's ``.animate`` syntax. It allows you to animate the changing of an attribute of a mobject. You can see an example below: + +.. manim:: AnimateSyntaxExample + + class AnimateSyntaxExample(Scene): + def construct(self): + c = Circle() + self.add(c) + self.play(c.animate.shift(RIGHT)) + self.play(c.animate.to_corner(DL).set_fill(color=RED, opacity=0.4)) + + + +.. note:: + + ``.animate`` works by interpolating between the initial and the final mobject. As such, beware when using ``.animate.rotate`` with angles greater than pi radians + as it may not produce the intended animation. From 6a74bc22ed38ce314f826098f127a84ad05d2e78 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Fri, 8 Dec 2023 12:34:09 -0500 Subject: [PATCH 05/38] Revert commits --- docs/source/adventure.rst | 175 ++------------------------------------ 1 file changed, 8 insertions(+), 167 deletions(-) diff --git a/docs/source/adventure.rst b/docs/source/adventure.rst index 009c40181c..d876558469 100644 --- a/docs/source/adventure.rst +++ b/docs/source/adventure.rst @@ -1,6 +1,6 @@ -****************************************************** -An Adventure through Manim's Features and Capabilities -****************************************************** +***************************************************** +An Adventure through Manims Features and Capabilities +***************************************************** .. image:: _static/AdventureManim.png :align: center @@ -94,9 +94,9 @@ For a list of all Mobjects you can look at the :doc:`/reference_index/mobjects` group = [c, s, t, graph, axis, par, mat, chart, vecfield, t3] names = ["Circle", "Square", "Triangle", "FunctionGraph", "Axes", "ParametricFunction", "Matrix", "BarChart" ,"ArrowVectorField", "MobjectTable"] - zipped = zip(group, names) + ziped = zip(group, names) combined = [] - for mob, name in zipped: + for mob, name in ziped: square = Square() name = Text(name).scale(0.5) mob.scale_to_fit_width(square.get_width()) @@ -107,11 +107,11 @@ For a list of all Mobjects you can look at the :doc:`/reference_index/mobjects` all = VGroup(*combined).arrange_in_grid(buff=1,rows=2).scale(0.8).to_edge(UP) dots = MathTex("\\dots").next_to(all, DOWN, buff=1) - self.add(all, dots) + self.add(all,dots) .. note:: The type of Mobject that is used most of the time is the `VMobject`. This is a Mobject that is made up of `VectorizedPoints`. These are points that are defined by their coordinates and can be connected by lines or curves. - Every time we talk about Mobjects in this guide we mean VMobjects, unless we state otherwise. + Everytime we talk about Mobjects in this guide we mean VMobjects, unless we state otherwise. ============================= Mobjects and their Attributes @@ -232,163 +232,4 @@ In this section we will look at the different ways to animate Mobjects and how t self.play(group.animate.arrange(RIGHT)) self.play(group.animate.arrange(DOWN)) self.play(group.animate.arrange_in_grid(buff=1,rows=2)) - self.play(Unwrite(group)) - - - -================================ -Introduction to Basic Animations -================================ - -There are multiple ways to animate the addition and removal of mobjects from the scene. The most common ways to introduce mobjects is with ``FadeIn`` or ``Create``, -and the most common ways to remove objects from the scene are their counterparts: ``FadeOut`` and ``Uncreate``. - -.. manim:: BasicAnimations - - class BasicAnimations(Scene): - def construct(self): - c1 = Circle().shift(2*LEFT) - c2 = Circle().shift(2*RIGHT) - self.play(FadeIn(c1), Create(c2)) - self.play(FadeOut(c1), Uncreate(c2)) - ---------------------------- -Runtimes and Rate Functions ---------------------------- - -You can adjust the duration of each animation individually, or you can set a duration for all in animations in a ``Scene.play`` call. - -.. manim:: AnimationRuntimes - - class AnimationRuntimes(Scene): - def construct(self): - c = Circle().shift(2*LEFT) - s = Square().shift(2*RIGHT) - # set animation runtimes individually - self.play(Create(c, run_time=2), Create(s, run_time=1)) - # in this call, the individual runtimes of each animation - # are overridden by the runtime in the self.play call - self.play(FadeOut(c, run_time=2), FadeOut(s, run_time=1), run_time=1.5) - -You can also adjust the speed at an animation proceeds at using rate functions. - -.. manim:: RateFunctionsExample - - class RateFunctionsExample(Scene): - def construct(self): - c1 = Circle().shift(2*LEFT) - c2 = Circle().shift(2*RIGHT) - self.play( - Create(c1, rate_func=rate_functions.linear), - Create(c2, rate_func=rate_functions.ease_in_sine), - run_time=5 - ) - -Alternatively, you can create your own. A rate function takes in a value between 0 and 1 representing the "progress" of the animation. You can think of this as the -ratio of the time passed since the animation started, to the runtime of the animation. It should return how much of the animation should have been completed by that time. - -As an example, check out the rate function below. - -.. manim:: CustomRateFunctions - - class CustomRateFunctions(Scene): - def construct(self): - def there_and_back_three(alpha: float): - if alpha <= 1/3: - return 3*alpha - elif alpha <= 2/3: - return 1-3*(alpha-1/3) - else: - return 3*(alpha-2/3) - - self.play(Create(Circle(), rate_func=there_and_back_three), run_time=4) - ----------------------- -The ``Wait`` Animation ----------------------- - -Now all these animations seem a bit rushed. Luckily, Manim allows us to create periods of time where nothing is happening. -Let's look at an example: - -.. manim:: BasicAnimationWithWait - - class BasicAnimationWithWait(Scene): - def construct(self): - c = Circle() - self.play(Create(c)) - self.wait() # wait for one second by default - self.play(FadeOut(c)) - self.wait(0.5) # wait half a second - -A little bit later on, we will learn how to leverage the ``stop_condition`` parameter to stop after a certain event happens. - -===================== -Transforming Mobjects -===================== - -Manim allows us to smoothly transform one ``Mobject`` into another using ``Transform`` (and in just a second, we'll talk about ``ReplacementTransform``). -``Transform(mob1, mob2)`` turns the attributes of ``mob1`` into the attributes of ``mob2``. - -.. manim:: TransformAnimation - - class TransformAnimation(Scene): - def construct(self): - c = Circle() - self.add(c) - self.play(Transform(c, Square())) - self.play(FadeOut(c)) # fadeout c - ------------------------------------------ -``Transform`` vs ``ReplacementTransform`` ------------------------------------------ - -While ``Transform(mob1, mob2)`` changes the attributes of ``mob1`` to ``mob2``, ``ReplacementTransform(mob1, mob2)`` literally replaces ``mob1`` on the -scene with ``mob2``. - -Here is the same scene in the last section, but using ``ReplacementTransform``: - -.. manim:: ReplacementTransformAnimation - - class ReplacementTransformAnimation(Scene): - def construct(self): - c = Circle() - s = Square() - self.add(c) - self.play(ReplacementTransform(c, s)) - self.play(FadeOut(s)) # fadeout s - -Ultimately, the choice of which to use is up to the programmer. However, some examples like the one below make the code simpler when using one over the other. - -.. manim:: CyclingShapesAnimation - - class CyclingShapesAnimation(Scene): - def construct(self): - mob = Circle() - shapes = (Square(), Triangle(), Circle().set_fill(color=RED, opacity=0.5)) - self.add(mob) - for shape in shapes: - self.play(Transform(mob, shape)) - self.wait(0.3) - - -------------------- -``.animate`` Syntax -------------------- - -One of the most powerful features of Manim is it's ``.animate`` syntax. It allows you to animate the changing of an attribute of a mobject. You can see an example below: - -.. manim:: AnimateSyntaxExample - - class AnimateSyntaxExample(Scene): - def construct(self): - c = Circle() - self.add(c) - self.play(c.animate.shift(RIGHT)) - self.play(c.animate.to_corner(DL).set_fill(color=RED, opacity=0.4)) - - - -.. note:: - - ``.animate`` works by interpolating between the initial and the final mobject. As such, beware when using ``.animate.rotate`` with angles greater than pi radians - as it may not produce the intended animation. + self.play(Unwrite(group)) as it may not produce the intended animation. From 59231a89c10143eaa7831f531af7fad730263055 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Fri, 8 Dec 2023 12:34:52 -0500 Subject: [PATCH 06/38] Added Transform and Rate functions --- docs/source/adventure.rst | 175 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 167 insertions(+), 8 deletions(-) diff --git a/docs/source/adventure.rst b/docs/source/adventure.rst index d876558469..009c40181c 100644 --- a/docs/source/adventure.rst +++ b/docs/source/adventure.rst @@ -1,6 +1,6 @@ -***************************************************** -An Adventure through Manims Features and Capabilities -***************************************************** +****************************************************** +An Adventure through Manim's Features and Capabilities +****************************************************** .. image:: _static/AdventureManim.png :align: center @@ -94,9 +94,9 @@ For a list of all Mobjects you can look at the :doc:`/reference_index/mobjects` group = [c, s, t, graph, axis, par, mat, chart, vecfield, t3] names = ["Circle", "Square", "Triangle", "FunctionGraph", "Axes", "ParametricFunction", "Matrix", "BarChart" ,"ArrowVectorField", "MobjectTable"] - ziped = zip(group, names) + zipped = zip(group, names) combined = [] - for mob, name in ziped: + for mob, name in zipped: square = Square() name = Text(name).scale(0.5) mob.scale_to_fit_width(square.get_width()) @@ -107,11 +107,11 @@ For a list of all Mobjects you can look at the :doc:`/reference_index/mobjects` all = VGroup(*combined).arrange_in_grid(buff=1,rows=2).scale(0.8).to_edge(UP) dots = MathTex("\\dots").next_to(all, DOWN, buff=1) - self.add(all,dots) + self.add(all, dots) .. note:: The type of Mobject that is used most of the time is the `VMobject`. This is a Mobject that is made up of `VectorizedPoints`. These are points that are defined by their coordinates and can be connected by lines or curves. - Everytime we talk about Mobjects in this guide we mean VMobjects, unless we state otherwise. + Every time we talk about Mobjects in this guide we mean VMobjects, unless we state otherwise. ============================= Mobjects and their Attributes @@ -232,4 +232,163 @@ In this section we will look at the different ways to animate Mobjects and how t self.play(group.animate.arrange(RIGHT)) self.play(group.animate.arrange(DOWN)) self.play(group.animate.arrange_in_grid(buff=1,rows=2)) - self.play(Unwrite(group)) as it may not produce the intended animation. + self.play(Unwrite(group)) + + + +================================ +Introduction to Basic Animations +================================ + +There are multiple ways to animate the addition and removal of mobjects from the scene. The most common ways to introduce mobjects is with ``FadeIn`` or ``Create``, +and the most common ways to remove objects from the scene are their counterparts: ``FadeOut`` and ``Uncreate``. + +.. manim:: BasicAnimations + + class BasicAnimations(Scene): + def construct(self): + c1 = Circle().shift(2*LEFT) + c2 = Circle().shift(2*RIGHT) + self.play(FadeIn(c1), Create(c2)) + self.play(FadeOut(c1), Uncreate(c2)) + +--------------------------- +Runtimes and Rate Functions +--------------------------- + +You can adjust the duration of each animation individually, or you can set a duration for all in animations in a ``Scene.play`` call. + +.. manim:: AnimationRuntimes + + class AnimationRuntimes(Scene): + def construct(self): + c = Circle().shift(2*LEFT) + s = Square().shift(2*RIGHT) + # set animation runtimes individually + self.play(Create(c, run_time=2), Create(s, run_time=1)) + # in this call, the individual runtimes of each animation + # are overridden by the runtime in the self.play call + self.play(FadeOut(c, run_time=2), FadeOut(s, run_time=1), run_time=1.5) + +You can also adjust the speed at an animation proceeds at using rate functions. + +.. manim:: RateFunctionsExample + + class RateFunctionsExample(Scene): + def construct(self): + c1 = Circle().shift(2*LEFT) + c2 = Circle().shift(2*RIGHT) + self.play( + Create(c1, rate_func=rate_functions.linear), + Create(c2, rate_func=rate_functions.ease_in_sine), + run_time=5 + ) + +Alternatively, you can create your own. A rate function takes in a value between 0 and 1 representing the "progress" of the animation. You can think of this as the +ratio of the time passed since the animation started, to the runtime of the animation. It should return how much of the animation should have been completed by that time. + +As an example, check out the rate function below. + +.. manim:: CustomRateFunctions + + class CustomRateFunctions(Scene): + def construct(self): + def there_and_back_three(alpha: float): + if alpha <= 1/3: + return 3*alpha + elif alpha <= 2/3: + return 1-3*(alpha-1/3) + else: + return 3*(alpha-2/3) + + self.play(Create(Circle(), rate_func=there_and_back_three), run_time=4) + +---------------------- +The ``Wait`` Animation +---------------------- + +Now all these animations seem a bit rushed. Luckily, Manim allows us to create periods of time where nothing is happening. +Let's look at an example: + +.. manim:: BasicAnimationWithWait + + class BasicAnimationWithWait(Scene): + def construct(self): + c = Circle() + self.play(Create(c)) + self.wait() # wait for one second by default + self.play(FadeOut(c)) + self.wait(0.5) # wait half a second + +A little bit later on, we will learn how to leverage the ``stop_condition`` parameter to stop after a certain event happens. + +===================== +Transforming Mobjects +===================== + +Manim allows us to smoothly transform one ``Mobject`` into another using ``Transform`` (and in just a second, we'll talk about ``ReplacementTransform``). +``Transform(mob1, mob2)`` turns the attributes of ``mob1`` into the attributes of ``mob2``. + +.. manim:: TransformAnimation + + class TransformAnimation(Scene): + def construct(self): + c = Circle() + self.add(c) + self.play(Transform(c, Square())) + self.play(FadeOut(c)) # fadeout c + +----------------------------------------- +``Transform`` vs ``ReplacementTransform`` +----------------------------------------- + +While ``Transform(mob1, mob2)`` changes the attributes of ``mob1`` to ``mob2``, ``ReplacementTransform(mob1, mob2)`` literally replaces ``mob1`` on the +scene with ``mob2``. + +Here is the same scene in the last section, but using ``ReplacementTransform``: + +.. manim:: ReplacementTransformAnimation + + class ReplacementTransformAnimation(Scene): + def construct(self): + c = Circle() + s = Square() + self.add(c) + self.play(ReplacementTransform(c, s)) + self.play(FadeOut(s)) # fadeout s + +Ultimately, the choice of which to use is up to the programmer. However, some examples like the one below make the code simpler when using one over the other. + +.. manim:: CyclingShapesAnimation + + class CyclingShapesAnimation(Scene): + def construct(self): + mob = Circle() + shapes = (Square(), Triangle(), Circle().set_fill(color=RED, opacity=0.5)) + self.add(mob) + for shape in shapes: + self.play(Transform(mob, shape)) + self.wait(0.3) + + +------------------- +``.animate`` Syntax +------------------- + +One of the most powerful features of Manim is it's ``.animate`` syntax. It allows you to animate the changing of an attribute of a mobject. You can see an example below: + +.. manim:: AnimateSyntaxExample + + class AnimateSyntaxExample(Scene): + def construct(self): + c = Circle() + self.add(c) + self.play(c.animate.shift(RIGHT)) + self.play(c.animate.to_corner(DL).set_fill(color=RED, opacity=0.4)) + + + +.. note:: + + ``.animate`` works by interpolating between the initial and the final mobject. As such, beware when using ``.animate.rotate`` with angles greater than pi radians + as it may not produce the intended animation. From ba7e90b3595423e24c6a54a6a8bf65361a453e66 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Sat, 9 Dec 2023 17:57:41 -0500 Subject: [PATCH 07/38] Added knowledge check --- docs/source/adventure.rst | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docs/source/adventure.rst b/docs/source/adventure.rst index 009c40181c..678c69e80f 100644 --- a/docs/source/adventure.rst +++ b/docs/source/adventure.rst @@ -367,6 +367,9 @@ Ultimately, the choice of which to use is up to the programmer. However, some ex shapes = (Square(), Triangle(), Circle().set_fill(color=RED, opacity=0.5)) self.add(mob) for shape in shapes: + # if we use transform, we avoid having to + # keep track of the previously transformed + # shape self.play(Transform(mob, shape)) self.wait(0.3) @@ -392,3 +395,33 @@ One of the most powerful features of Manim is it's ``.animate`` syntax. It allow ``.animate`` works by interpolating between the initial and the final mobject. As such, beware when using ``.animate.rotate`` with angles greater than pi radians as it may not produce the intended animation. + + +------------------- +Test Your Knowledge +------------------- + +Try to create the following animation! + +.. manim:: TestBasicAnimationKnowledge + :hide_source: + + class TestBasicAnimationKnowledge(Scene): + def construct(self): + c = Circle().set_fill(color=RED, opacity=0.5) + s = Star().set_stroke(color=YELLOW).set_fill(color=YELLOW, opacity=0.3) + t = Triangle().set_fill(color=BLUE, opacity=0.1) + VGroup(c, s, t).arrange(RIGHT).move_to(ORIGIN) # users will arrange manually + self.play( + DrawBorderThenFill(c), + GrowFromPoint(s, ORIGIN), + SpinInFromNothing(t) + ) + self.wait() + for mob in (s, t): + self.play(Transform(c, mob)) + self.remove(mob) + self.wait(0.2) + self.play(c.animate.move_to(ORIGIN)) + +Hint: you might need to look at different :doc:`/reference_index/animations`! From d261fd3d6fa2c4e9ced1a573d4f137673ffe60a3 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Wed, 20 Dec 2023 12:00:51 -0500 Subject: [PATCH 08/38] Added VGroup demo --- docs/source/adventure.rst | 50 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/docs/source/adventure.rst b/docs/source/adventure.rst index 678c69e80f..fa459141eb 100644 --- a/docs/source/adventure.rst +++ b/docs/source/adventure.rst @@ -6,7 +6,7 @@ An Adventure through Manim's Features and Capabilities :align: center -**Author:** `Tristan Schulz `__ +**Authors:** `Tristan Schulz `__ and `JasonGrace2282 `__ .. note:: This is a work in progress guide and might not be complete at this point @@ -415,7 +415,8 @@ Try to create the following animation! self.play( DrawBorderThenFill(c), GrowFromPoint(s, ORIGIN), - SpinInFromNothing(t) + SpinInFromNothing(t), + run_time=2 ) self.wait() for mob in (s, t): @@ -425,3 +426,48 @@ Try to create the following animation! self.play(c.animate.move_to(ORIGIN)) Hint: you might need to look at different :doc:`/reference_index/animations`! + +================= +Grouping Mobjects +================= + +Oftentimes it is convinient to animate the movement of several mobjects at once. To help accomplish this goal, manim provides two classes: ``Group`` and ``VGroup``. +99% of the time, ``VGroup``'s are used, but if you're dealing with some form of an ``ImageMobject`` you will have to use ``Group``. Here's an example of how groups can be useful: + +.. manim:: GroupingExample + + class GroupingExample(Scene): + def construct(self): + tri = Triangle() + sq = Square() + circ = Circle() + grp1 = VGroup(tri,sq,circ).arrange(RIGHT) + grp2 = VGroup(tri,circ) + self.add(tri,sq,circ) + self.play(grp1.animate.shift(UP)) + self.play(grp2.animate.shift(2*DOWN)) + self.play(tri.animate.next_to(circ,RIGHT)) + self.play(grp1.animate.shift(UP)) + self.wait() + +.. note:: + From now onwards, if we refer to a group we are referring to a ``VGroup``, unless specifically stated otherwise. + +Groups also have a bunch of methods to make your life easier. Take a look at some in the example below: + +.. manim:: GroupingMethodsExample + + class GroupingMethodsExample(Scene): + def construct(self): + group = VGroup( + Square(), + Star(color=YELLOW).set_fill(color=YELLOW, opacity=0.5), + Triangle(), + Circle().set_fill(color=RED, opacity=0.5) + ) + self.play(group.animate.arrange(DOWN), run_time=2) + self.play(group.animate.arrange_in_grid(cols=2), run_time=2) + for mob in group: + self.play(Uncreate(mob)) + self.wait(0.2) + From 636265ba51537cf241b8357677a230d4a2e41767 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 20 Dec 2023 17:01:48 +0000 Subject: [PATCH 09/38] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/source/adventure.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/adventure.rst b/docs/source/adventure.rst index fa459141eb..b8aa82525f 100644 --- a/docs/source/adventure.rst +++ b/docs/source/adventure.rst @@ -470,4 +470,3 @@ Groups also have a bunch of methods to make your life easier. Take a look at som for mob in group: self.play(Uncreate(mob)) self.wait(0.2) - From 8ebc17289b015d984753bf65c5474f5d6d646fe4 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Thu, 21 Dec 2023 12:06:35 -0500 Subject: [PATCH 10/38] Made into section --- docs/source/adventure/index.rst | 37 +++++++++++++++++++ .../introduction.rst} | 6 +-- docs/source/adventure/project.rst | 5 +++ docs/source/index.rst | 1 - docs/source/tutorials_guides.rst | 1 + 5 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 docs/source/adventure/index.rst rename docs/source/{adventure.rst => adventure/introduction.rst} (98%) create mode 100644 docs/source/adventure/project.rst diff --git a/docs/source/adventure/index.rst b/docs/source/adventure/index.rst new file mode 100644 index 0000000000..11151f2d29 --- /dev/null +++ b/docs/source/adventure/index.rst @@ -0,0 +1,37 @@ +############################## +Exploring Manim's Capabilities +############################## + +============= +What is this? +============= + +One of the hardest parts of learning how to use manim is to deviate from the quickstart and basic examples given in the documentation, +to carving your own path without anyones help. The goal of this guide is to give an example of how you might achieve that, with the help +of the documentation and your own brain. + +-------------------- +Part One: The Basics +-------------------- + +Here we talk about the basics: what are Mobjects, Animations, Groups, Updaters, etc. It gives many examples of the theoretical minimum amount of knowledge +one might need to start utilizing manim to create their own animations. It offers a cohesize guide of examples not provided elsewhere in the documentation, +and encourages you to test your understanding by recreating certain sequences of animations. Feel free to return to this section anytime you need a refresher +on something during part two, + +--------------------- +Part Two: The Project +--------------------- + +Here is the fun part. We go through and make our own creation from start to finish, explaining how to search the documentation, come up with coding logic +to make your ideas come alive and much more. By the end of this section, you should be fully prepared to tackle your own project. + +================= +Table of Contents +================= + +.. toctree:: + :maxdepth: 2 + + introduction + project diff --git a/docs/source/adventure.rst b/docs/source/adventure/introduction.rst similarity index 98% rename from docs/source/adventure.rst rename to docs/source/adventure/introduction.rst index b8aa82525f..a47d033374 100644 --- a/docs/source/adventure.rst +++ b/docs/source/adventure/introduction.rst @@ -2,7 +2,7 @@ An Adventure through Manim's Features and Capabilities ****************************************************** -.. image:: _static/AdventureManim.png +.. image:: ../_static/AdventureManim.png :align: center @@ -140,7 +140,7 @@ Mobjects also posses many attributes that you can change. For example you can ch The Basic attributes are the ``points``, ``fill_color``, ``fill_opacity``, ``stroke_color``, ``stroke_opacity``, ``stroke_width``. The ``points`` define the outline of the Mobject. Whereas the color attributes define how this outline is displayed. -A full list of the attributes of :class:`VMobject` can be found in the :doc:`reference/manim.mobject.types.vectorized_mobject.VMobject` Documentation Page. Please note that depending on the Type of Mobject you are using, there might be additional attributes, which are listed on the corresponding Documentation Page. +A full list of the attributes of :class:`VMobject` can be found in the :doc:`../reference/manim.mobject.types.vectorized_mobject.VMobject` Documentation Page. Please note that depending on the Type of Mobject you are using, there might be additional attributes, which are listed on the corresponding Documentation Page. ------------------- Changing the Points @@ -431,7 +431,7 @@ Hint: you might need to look at different :doc:`/reference_index/animations`! Grouping Mobjects ================= -Oftentimes it is convinient to animate the movement of several mobjects at once. To help accomplish this goal, manim provides two classes: ``Group`` and ``VGroup``. +Oftentimes it is convenient to animate the movement of several mobjects at once. To help accomplish this goal, manim provides two classes: ``Group`` and ``VGroup``. 99% of the time, ``VGroup``'s are used, but if you're dealing with some form of an ``ImageMobject`` you will have to use ``Group``. Here's an example of how groups can be useful: .. manim:: GroupingExample diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst new file mode 100644 index 0000000000..eac7f12605 --- /dev/null +++ b/docs/source/adventure/project.rst @@ -0,0 +1,5 @@ +############### +A Basic Project +############### + +By the end of this page, you will have been able to create your first project: a walkthrough of Gauss-Jordan Elimination! diff --git a/docs/source/index.rst b/docs/source/index.rst index abcf48a816..8e6d8c2fb6 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -100,7 +100,6 @@ Index examples installation tutorials_guides - adventure reference plugins changelog diff --git a/docs/source/tutorials_guides.rst b/docs/source/tutorials_guides.rst index 05b318230b..276bb489ab 100644 --- a/docs/source/tutorials_guides.rst +++ b/docs/source/tutorials_guides.rst @@ -7,4 +7,5 @@ Tutorials & Guides tutorials/index guides/index + adventure/index faq/index From a668648cb6c9254b7b90efd56dc1c6c31ed1a3f6 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Thu, 21 Dec 2023 16:00:31 -0500 Subject: [PATCH 11/38] grammer fixes --- docs/source/adventure/introduction.rst | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/docs/source/adventure/introduction.rst b/docs/source/adventure/introduction.rst index a47d033374..dedccfb03b 100644 --- a/docs/source/adventure/introduction.rst +++ b/docs/source/adventure/introduction.rst @@ -118,7 +118,7 @@ Mobjects and their Attributes ============================= In order to display Mobjects in your animations you need to add them to the scene. You can do this by calling ``self.add(mobject)`` in the ``construct`` method of your scene. -Which will tell Manim that you want to display the Mobject in your scene. +This tells Manim that you want to display the Mobject in your scene. .. manim:: CreatingMobjects :save_last_frame: @@ -131,22 +131,29 @@ Which will tell Manim that you want to display the Mobject in your scene. This will be the basic structure of all your animations. You will create Mobjects and add them to the scene. Then you can animate them and change their properties. Try the "Make Interactive" Button and see if you can create a `Square` instead of a `Circle`. +The first line is the name of your scene, in this case it is ``CreatingMobjects``. It inherits from ``Scene``: as we explore later, you'll find examples where we inherit from +class other than ``Scene`` to gain access to more specialized methods. Your animation must take place in the ``construct`` method of your scene, otherwise it will not render. + +You can run this scene on your local machine by saving it in a file called ``my_first_scene.py`` and running ``manim -pqm my_first_scene.py`` in the terminal. + ------------------ Mobject Attributes ------------------ Mobjects also posses many attributes that you can change. For example you can change the color of a Mobject by calling ``mobject.set_color(color)`` or scale it by calling ``mobject.scale(factor)``. -The Basic attributes are the ``points``, ``fill_color``, ``fill_opacity``, ``stroke_color``, ``stroke_opacity``, ``stroke_width``. -The ``points`` define the outline of the Mobject. Whereas the color attributes define how this outline is displayed. +The basic attributes are the ``points``, ``fill_color``, ``fill_opacity``, ``stroke_color``, ``stroke_opacity``, ``stroke_width``. +The ``points`` define the outline of the Mobject, whereas the color attributes define how this outline is displayed. -A full list of the attributes of :class:`VMobject` can be found in the :doc:`../reference/manim.mobject.types.vectorized_mobject.VMobject` Documentation Page. Please note that depending on the Type of Mobject you are using, there might be additional attributes, which are listed on the corresponding Documentation Page. +A full list of the attributes of :class:`VMobject` can be found in the :doc:`../reference/manim.mobject.types.vectorized_mobject.VMobject` Documentation Page. Please note that depending +on the type of Mobject you are using, there might be additional attributes, which are listed on the corresponding documentation page. ------------------- Changing the Points ------------------- -Most of the function that you will use in Manim will be functions that change the points of a Mobject. For example ``mobject.shift(direction)`` will move the Mobject in the given direction. Or ``mobject.rotate(angle)`` will rotate the Mobject by the given angle. +Most of the function that you will use in Manim will be functions that change the points of a Mobject. For example ``mobject.shift(direction)`` will move the Mobject in the given direction. +On the other hand, ``mobject.rotate(angle)`` will rotate the Mobject by the given angle. .. manim:: MobjectPoints :save_last_frame: @@ -167,9 +174,10 @@ Most of the function that you will use in Manim will be functions that change th Changing the Color ------------------ -Changing the color works in the same way but instead of modifying it you can set it to a new value. For example ``mobject.set_fill(color)`` will set the fill color of the Mobject to the given color. +Changing the color works in the same way but instead of modifying it you can set it to a new value. For example ``mobject.set_fill(color=color)`` will set the fill color of the Mobject to the given color. -You can also pass in attributes through the constructor of the Mobject. For example ``Circle(fill_color=RED)`` will create a circle with a red fill color. For a list of parameters that you can pass you can always visit the corresponding Documentation Page in the Reference Manual. +You can also pass in attributes through the constructor of the Mobject. For example ``Circle(fill_color=RED)`` will create a circle with a red fill color. +For a list of parameters that you can pass you can always visit the corresponding Documentation Page in the Reference Manual. .. manim:: MobjectColor :save_last_frame: From d8235da7767545d717ac70eaf73a7d8c26d98a85 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 21 Dec 2023 21:02:41 +0000 Subject: [PATCH 12/38] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/source/adventure/introduction.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/adventure/introduction.rst b/docs/source/adventure/introduction.rst index dedccfb03b..d9fd1b824c 100644 --- a/docs/source/adventure/introduction.rst +++ b/docs/source/adventure/introduction.rst @@ -145,7 +145,7 @@ Mobjects also posses many attributes that you can change. For example you can ch The basic attributes are the ``points``, ``fill_color``, ``fill_opacity``, ``stroke_color``, ``stroke_opacity``, ``stroke_width``. The ``points`` define the outline of the Mobject, whereas the color attributes define how this outline is displayed. -A full list of the attributes of :class:`VMobject` can be found in the :doc:`../reference/manim.mobject.types.vectorized_mobject.VMobject` Documentation Page. Please note that depending +A full list of the attributes of :class:`VMobject` can be found in the :doc:`../reference/manim.mobject.types.vectorized_mobject.VMobject` Documentation Page. Please note that depending on the type of Mobject you are using, there might be additional attributes, which are listed on the corresponding documentation page. ------------------- From 3c3f4d83e3522bb4b035d44f3aae464dd3510184 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Fri, 22 Dec 2023 13:01:35 -0500 Subject: [PATCH 13/38] Modified Authors --- docs/source/adventure/introduction.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/adventure/introduction.rst b/docs/source/adventure/introduction.rst index d9fd1b824c..b778733fbf 100644 --- a/docs/source/adventure/introduction.rst +++ b/docs/source/adventure/introduction.rst @@ -6,7 +6,7 @@ An Adventure through Manim's Features and Capabilities :align: center -**Authors:** `Tristan Schulz `__ and `JasonGrace2282 `__ +**Authors:** `Tristan Schulz `__ and `Aarush Deshpande `__ .. note:: This is a work in progress guide and might not be complete at this point From 12198f949bf479ec4d6e6dfa6a21308c8d3d40a4 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Thu, 28 Dec 2023 09:37:28 -0500 Subject: [PATCH 14/38] update docstring of ManimColor --- manim/utils/color/core.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/manim/utils/color/core.py b/manim/utils/color/core.py index cdd75ad9ae..042ed7555d 100644 --- a/manim/utils/color/core.py +++ b/manim/utils/color/core.py @@ -75,19 +75,33 @@ class ManimColor: Be careful when passing strings to ManimColor it can create a big overhead for the color processing. If you want to parse a list of colors use the function :meth:`parse` in :class:`ManimColor` which assumes that - you are going to pass a list of color so arrays will not bei interpreted as a single color. + you are going to pass a list of color so arrays will not be interpreted as a single color. .. warning:: If you pass an array of numbers to :meth:`parse` it will interpret the r,g,b,a numbers in that array as colors so instead of the expect singular color you get and array with 4 colors. - For conversion behaviors see the _internal functions for further documentation + For conversion behaviors see the ``_internal`` functions for further documentation + + You can create a ``ManimColor`` instance via its classmethods. See the respective methods for more info. + + .. code-block:: python + + mycolor = ManimColor.from_rgb((0, 1, 0.4, 0.5)) + myothercolor = ManimColor.from_rgb((153, 255, 255)) + + You can also convert between different color spaces: + + .. code-block:: python + + mycolor_hex = mycolor.to_hex() + myoriginalcolor = ManimColor.from_hex(mycolor_hex).to_hsv() Parameters ---------- value Some representation of a color (e.g., a string or - a suitable tuple). + a suitable tuple). The default ``None`` is ``BLACK``. alpha The opacity of the color. By default, colors are fully opaque (value 1.0). From 1c8b1c9481efd72bed73411f8e673d21cd0ae7bc Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Thu, 28 Dec 2023 14:43:24 -0500 Subject: [PATCH 15/38] Added rate functions animation --- docs/html | 0 .../{introduction.rst => basics.rst} | 83 ++++++++++++++++++- docs/source/adventure/index.rst | 2 +- 3 files changed, 80 insertions(+), 5 deletions(-) delete mode 100644 docs/html rename docs/source/adventure/{introduction.rst => basics.rst} (86%) diff --git a/docs/html b/docs/html deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/source/adventure/introduction.rst b/docs/source/adventure/basics.rst similarity index 86% rename from docs/source/adventure/introduction.rst rename to docs/source/adventure/basics.rst index b778733fbf..92de1de4cc 100644 --- a/docs/source/adventure/introduction.rst +++ b/docs/source/adventure/basics.rst @@ -260,9 +260,9 @@ and the most common ways to remove objects from the scene are their counterparts self.play(FadeIn(c1), Create(c2)) self.play(FadeOut(c1), Uncreate(c2)) ---------------------------- -Runtimes and Rate Functions ---------------------------- +-------- +Runtimes +-------- You can adjust the duration of each animation individually, or you can set a duration for all in animations in a ``Scene.play`` call. @@ -278,7 +278,10 @@ You can adjust the duration of each animation individually, or you can set a dur # are overridden by the runtime in the self.play call self.play(FadeOut(c, run_time=2), FadeOut(s, run_time=1), run_time=1.5) -You can also adjust the speed at an animation proceeds at using rate functions. +-------------- +Rate Functions +-------------- +A rate function allows you to adjust the speed at an animation proceeds. .. manim:: RateFunctionsExample @@ -292,6 +295,74 @@ You can also adjust the speed at an animation proceeds at using rate functions. run_time=5 ) +You can see all of the current ones below: + +.. manim:: AllRateFunctions + :hide_source: + + class AllRateFunctions(Scene): + def construct(self): + time_progress = ValueTracker(0) + func_grid = VGroup() + exclude = ["wraps", "bezier", "sigmoid", "unit_interval", "zero", "not_quite_there", "squish_rate_func"] + rate_funcs = list(filter( + lambda t: str(t[1])[:10] == " Date: Mon, 15 Jan 2024 12:25:50 -0500 Subject: [PATCH 16/38] Add Updater section --- docs/source/adventure/basics.rst | 140 +++++++++++++++++++++++++++++- docs/source/adventure/index.rst | 14 +-- docs/source/adventure/project.rst | 2 +- 3 files changed, 146 insertions(+), 10 deletions(-) diff --git a/docs/source/adventure/basics.rst b/docs/source/adventure/basics.rst index 92de1de4cc..15a3821bd1 100644 --- a/docs/source/adventure/basics.rst +++ b/docs/source/adventure/basics.rst @@ -550,6 +550,142 @@ Groups also have a bunch of methods to make your life easier. Take a look at som self.play(Uncreate(mob)) self.wait(0.2) -######## +################## +Syncing Animations +################## + +In many animations it makes sense to have things moving together at the same rate. +However, Manim gives you better ways to accomplish this task then by copying the same parameters +everywhere. + +========= Updaters -######## +========= +Manim allows you to "update" the attributes of a mobject every frame of an animation +via something called updaters. There are two types: normal updaters, and time-based updaters. + +.. note:: + The way manim works with time based updaters is going to be reworked at some point. Stay + up to date with the changelogs to make sure your code will work. + +--------------- +Normal Updaters +--------------- +You can attach an updater to a mobject via the `.add_updater` method. It takes a function whose +first parameter is the mobject itself, and you can modify the mobject however you want. + +For example, here we used ``lambda m: m.next_to(d, RIGHT)``. In this case, ``m`` is the Mobject ``Text("Hi!")``. + +.. manim:: UpdaterExample + :ref_classes: MoveAlongPath + + class UpdaterExample(Scene): + def construct(self): + t = Text("Hi!") + d = Dot(color=ORANGE) + trace = TracedPath(d.get_center, dissipating_time=1, stroke_color=RED) + t.add_updater(lambda m: m.next_to(d, RIGHT)) + self.add(t, trace) + self.play(MoveAlongPath(d, Square(), rate_func=linear, run_time=3)) + self.wait() + +------------------- +Time Based Updaters +------------------- +Time based updaters are just like normal updaters, but take an extra parameter ``dt``. +This represents how much time has passed between the last call of your updater. + +.. manim:: TimeBasedUpdater + + class TimeBasedUpdater(Scene): + def construct(self): + time = 0 + d = DecimalNumber(0) + def updater(m: VMobject, dt: float): + # access the time defined outside this function + nonlocal time + time+=dt + d.set_value(time) + d.add_updater(updater) + self.add(d) + self.wait(1.1) + + + +============= +ValueTrackers +============= + +``ValueTracker``s are the real things that allow you to synchronize multiple animations at once. +They are basically just stored values, but you can animate their ``.set_value`` to produce animations. + +.. manim:: ValueTrackerShowcase + + class ValueTrackerShowcase(Scene): + def construct(self): + line = Rectangle(height=1, width=4).set_stroke(color=WHITE, opacity=1).move_to(ORIGIN) + vt = ValueTracker(1e-2) # setting to zero creates bugs with stretch_to_fit_width + progress = Rectangle(height=1, width=vt.get_value()).set_stroke(color=RED,opacity=1) + progress.add_updater(lambda p: p.stretch_to_fit_width(vt.get_value()).align_to(line, LEFT)) + d = DecimalNumber(0).to_edge(UP) + d.add_updater(lambda d: d.set_value(vt.get_value())) + self.add(d,line,progress) + self.play(vt.animate.set_value(4), rate_func=linear, run_time=1.5) + self.wait(0.1) + +------------- +always_redraw +------------- +``always_redraw`` is a simple function that allows you to recreate a mobject at +every frame of the animation. As an example, check out this animation: + +.. manim:: AlwaysRedrawTangentAnimation + + class AlwaysRedrawTangentAnimation(Scene): + def construct(self): + ax = Axes() + sine = ax.plot(np.sin, color=RED) + alpha = ValueTracker(0) + point = always_redraw( + lambda: Dot( + sine.point_from_proportion(alpha.get_value()), + color=BLUE + ) + ) + tangent = always_redraw( + lambda: TangentLine( + sine, + alpha=alpha.get_value(), + color=YELLOW, + length=4 + ) + ) + self.add(ax, sine, point, tangent) + self.play(alpha.animate.set_value(1), rate_func=linear, run_time=2) + +------------------- +Test Your Knowledge +------------------- +Try to recreate the following animation! + +.. manim:: KnowledgeCheckUpdaters + :hide_source: + + class KnowledgeCheckUpdaters(Scene): + def construct(self): + l1 = Line(6*LEFT,6*RIGHT) + l2 = Line(4*DL,3*UR) + vt = ValueTracker(0) + d1, d2 = Dot(color=RED), Dot(color=ORANGE) + txt = MathTex(r"\Delta", color=RED).add_updater(lambda t: t.next_to(d2, LEFT)).scale(2) + bt = TracedPath(d1.get_center, stroke_color=RED) + tt = TracedPath(d2.get_center, stroke_color=ORANGE) + d1.add_updater(lambda d: d.move_to(l1.point_from_proportion(vt.get_value()))) + d2.add_updater(lambda d: d.move_to(l2.point_from_proportion(vt.get_value()))) + self.add(d1, d2, bt, tt, txt) + self.play(vt.animate.set_value(1), run_time=1.5) + self.play(vt.animate.set_value(0.8)) + self.play(Create(Line(d1.get_center(), d2.get_center(), color=YELLOW))) + vmob = VMobject(color=ORANGE).set_points_as_corners([ORIGIN, d1.get_center(), d2.get_center(), ORIGIN]).set_fill(color=[RED,ORANGE,YELLOW], opacity=1).set_z_index(-50) + txt.clear_updaters() + self.play(Create(vmob), txt.animate.move_to(vmob.get_center()).set_z_index(50).set_color(BLUE)) diff --git a/docs/source/adventure/index.rst b/docs/source/adventure/index.rst index 2d63720772..b19aadddf1 100644 --- a/docs/source/adventure/index.rst +++ b/docs/source/adventure/index.rst @@ -6,18 +6,16 @@ Exploring Manim's Capabilities What is this? ============= -One of the hardest parts of learning how to use manim is to deviate from the quickstart and basic examples given in the documentation, -to carving your own path without anyones help. The goal of this guide is to give an example of how you might achieve that, with the help -of the documentation and your own brain. +One of the hardest parts of learning how to use Manim is to deviate from the quickstart and basic examples given in the documentation, +and learning to carve your own path. The goal of this guide is to give an example of how you might achieve that as a first-timer. -------------------- Part One: The Basics -------------------- -Here we talk about the basics: what are Mobjects, Animations, Groups, Updaters, etc. It gives many examples of the theoretical minimum amount of knowledge -one might need to start utilizing manim to create their own animations. It offers a cohesize guide of examples not provided elsewhere in the documentation, -and encourages you to test your understanding by recreating certain sequences of animations. Feel free to return to this section anytime you need a refresher -on something during part two, +Here we talk about the basics: what are ``Mobject``s, Animations, ``Group``s, Updaters, and many more tips and tricks. It gives many examples and intends to +teach by example. It encourages you to test your understanding by recreating certain sequences of animations. +Feel free to return to this section anytime you need a refresher on something during part two. --------------------- Part Two: The Project @@ -26,6 +24,8 @@ Part Two: The Project Here is the fun part. We go through and make our own creation from start to finish, explaining how to search the documentation, come up with coding logic to make your ideas come alive and much more. By the end of this section, you should be fully prepared to tackle your own project. +.. note:: As of right now, this section is still under construction. + ================= Table of Contents ================= diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index eac7f12605..225b322411 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -2,4 +2,4 @@ A Basic Project ############### -By the end of this page, you will have been able to create your first project: a walkthrough of Gauss-Jordan Elimination! +This is currently a work in progress. From 59175d8d41da2f8d96a4f882d566376d15c370c6 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Mon, 15 Jan 2024 21:15:52 -0500 Subject: [PATCH 17/38] Added ref classes and fixed typos --- docs/skip-manim | 0 docs/source/adventure/basics.rst | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 docs/skip-manim diff --git a/docs/skip-manim b/docs/skip-manim deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/source/adventure/basics.rst b/docs/source/adventure/basics.rst index 15a3821bd1..c9b15a922e 100644 --- a/docs/source/adventure/basics.rst +++ b/docs/source/adventure/basics.rst @@ -577,7 +577,7 @@ first parameter is the mobject itself, and you can modify the mobject however yo For example, here we used ``lambda m: m.next_to(d, RIGHT)``. In this case, ``m`` is the Mobject ``Text("Hi!")``. .. manim:: UpdaterExample - :ref_classes: MoveAlongPath + :ref_classes: MoveAlongPath TracedPath class UpdaterExample(Scene): def construct(self): @@ -616,7 +616,7 @@ This represents how much time has passed between the last call of your updater. ValueTrackers ============= -``ValueTracker``s are the real things that allow you to synchronize multiple animations at once. +ValueTrackers are the real things that allow you to synchronize multiple animations at once. They are basically just stored values, but you can animate their ``.set_value`` to produce animations. .. manim:: ValueTrackerShowcase From c31e1b121f71a3db16c333f4ee25169d80286446 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Mon, 15 Jan 2024 21:17:40 -0500 Subject: [PATCH 18/38] Fix reST --- docs/source/adventure/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/adventure/index.rst b/docs/source/adventure/index.rst index b19aadddf1..b704156590 100644 --- a/docs/source/adventure/index.rst +++ b/docs/source/adventure/index.rst @@ -13,7 +13,7 @@ and learning to carve your own path. The goal of this guide is to give an exampl Part One: The Basics -------------------- -Here we talk about the basics: what are ``Mobject``s, Animations, ``Group``s, Updaters, and many more tips and tricks. It gives many examples and intends to +Here we talk about the basics: what are Mobjects, Animations, Groups, Updaters, and many more tips and tricks. It gives many examples and intends to teach by example. It encourages you to test your understanding by recreating certain sequences of animations. Feel free to return to this section anytime you need a refresher on something during part two. From 6d4b595949235d12efa84a4692ff7111da40bfc3 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Fri, 2 Feb 2024 16:34:46 -0500 Subject: [PATCH 19/38] Change typo from nonlocal var to local parameter --- docs/source/adventure/basics.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/adventure/basics.rst b/docs/source/adventure/basics.rst index c9b15a922e..91e1fce018 100644 --- a/docs/source/adventure/basics.rst +++ b/docs/source/adventure/basics.rst @@ -605,7 +605,7 @@ This represents how much time has passed between the last call of your updater. # access the time defined outside this function nonlocal time time+=dt - d.set_value(time) + m.set_value(time) d.add_updater(updater) self.add(d) self.wait(1.1) From ab042d37ac05b765de37fd3629f7adbfedac6690 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Mon, 11 Mar 2024 19:15:11 -0400 Subject: [PATCH 20/38] Reword adventure/index.rst --- docs/source/adventure/index.rst | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/source/adventure/index.rst b/docs/source/adventure/index.rst index b704156590..52e7a686ca 100644 --- a/docs/source/adventure/index.rst +++ b/docs/source/adventure/index.rst @@ -7,25 +7,26 @@ What is this? ============= One of the hardest parts of learning how to use Manim is to deviate from the quickstart and basic examples given in the documentation, -and learning to carve your own path. The goal of this guide is to give an example of how you might achieve that as a first-timer. +and coding your own animation. By the end of this, you should have had some experience learning how to go about with this! -------------------- Part One: The Basics -------------------- -Here we talk about the basics: what are Mobjects, Animations, Groups, Updaters, and many more tips and tricks. It gives many examples and intends to -teach by example. It encourages you to test your understanding by recreating certain sequences of animations. +Here we talk about the basics: what are Mobjects, Animations, Groups, Updaters, and many other basic aspects of Manim. It gives many examples +about each concept, and encourages you to test your understanding by recreating certain sequences of animations. Feel free to return to this section anytime you need a refresher on something during part two. --------------------- Part Two: The Project --------------------- -Here is the fun part. We go through and make our own creation from start to finish, explaining how to search the documentation, come up with coding logic -to make your ideas come alive and much more. By the end of this section, you should be fully prepared to tackle your own project. - .. note:: As of right now, this section is still under construction. + +Here is the fun part: We go through and make our own creation from start to finish, explaining how to effectively search the documentation, +and come up with the logic to make your ideas come to life. By the end of this section, you should be fully prepared to tackle your own project. + ================= Table of Contents ================= From 95f7d0cb2ce625d7f83c954f2545942b88dc1c83 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jan 2024 20:21:21 +0100 Subject: [PATCH 21/38] Bump github/codeql-action from 2 to 3 (#3567) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v2...v3) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 057d471a24..2ba46fee14 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -27,16 +27,16 @@ jobs: uses: actions/checkout@v4 - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} config-file: ./.github/codeql.yml queries: +security-and-quality - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 with: category: "/language:${{ matrix.language }}" From 716425247e6086bda056b9043ac44b2b8148faa6 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Sun, 31 Mar 2024 14:18:36 -0400 Subject: [PATCH 22/38] Add progress on project --- docs/rtd-requirements.txt | 1 + docs/source/adventure/project.rst | 110 ++++++++++++- docs/source/adventure/vector_addition.rst | 179 ++++++++++++++++++++++ poetry.lock | 27 +++- pyproject.toml | 1 + 5 files changed, 313 insertions(+), 5 deletions(-) create mode 100644 docs/source/adventure/vector_addition.rst diff --git a/docs/rtd-requirements.txt b/docs/rtd-requirements.txt index 3220975d34..083a9af9a7 100644 --- a/docs/rtd-requirements.txt +++ b/docs/rtd-requirements.txt @@ -1,2 +1,3 @@ jupyterlab sphinxcontrib-programoutput +sphinx-design diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index 225b322411..ebb61c9748 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -1,5 +1,109 @@ -############### +*************** A Basic Project -############### +*************** -This is currently a work in progress. +.. image:: ../_static/AdventureManim.png + :align: center + + +**Authors:** `Tristan Schulz `__ and `Aarush Deshpande `__ + +.. note:: This is a work in progress guide and might not be complete at this point + +############ +Introduction +############ +Throughout this guide, we'll walk you through how to create a simple 30 second video about vector addition. If you don't +already know what that is, it's recommended you watch `this`_ video +by the original creator of manim, 3Blue1Brown. + +The next step is figuring out how the project should look: what content should it cover, in what order, etc. In this +tutorial, we'll focus on two parts of vector addition: the algebraic way, and the geometric way. For the algebraic way, +we'll show two vectors (as matricies) being added, and give a short explanation. After that we'll show the typical tip-to-tail +method for adding vectors graphically. Of course, choosing good examples is very important to help the viewer understand. +In our case, we'll use the two vectors :math:`v_1\equiv\langle 2, 1\rangle` and :math:`v_2\equiv\langle 0,-3 \rangle`. + +######################### +Algebraic Vector Addition +######################### + +We'll start with the basic setup needed for every manim video. Create +a new file called `vector_addition.py`, and paste the contents here. + +.. code-block:: python + + from manim import * + + + class VectorAddition(Scene): + def construct(self) -> None: + self.play(Create(Circle())) + + + # if you're used to rendering from the terminal, + # this way you can just run the python file instead + # of doing manim -p vector_addition.py VectorAddition + with tempconfig({"preview": True}): + VectorAddition().render() + +If you did it correctly, running the python file (either through your IDE +or through the terminal with ``python3 vector_addition.py``) should render a scene +with a circle being created: + +.. manim:: CreateCircle + :hide_source: + + class CreateCircle(Scene): + def construct(self): + self.play(Create(Circle())) + +============ +Introduction +============ +First we need to introduce the viewer to what we're going to talk about. Ideally, +it would be an interesting hook, but for the sake of learning the library we will +stick with a simple text-based intro. Try to recreate the following: + +.. manim:: AdventureIntro + :hide_source: + :ref_classes: Tex Text Write Unwrite Create + + class AdventureIntro(Scene): + def construct(self): + intro = Text("Let's try to add two vectors!") + # put an r"" instead of a normal string so we don't have any special characters like \n + vec_txts = Tex(r"We'll use $\boldsymbol{\vec{v}_1}=(2, 2)$ and $\boldsymbol{\vec{v}_2}=(0, -3)$") + self.play(Create(intro)) + self.wait(1) + # "grey out" the intro and shift it upwards as we write the second line + self.play(intro.animate.shift(2*UP).set_opacity(0.5), Write(vec_txts)) + self.wait(1) + self.play(Unwrite(intro), Unwrite(vec_txts), run_time=.5) + self.wait(0.2) + +.. dropdown:: Authors Solution + + .. code-block:: python + + class AdventureIntro(Scene): + def construct(self): + intro = Text("Let's try to add two vectors!") + # put an r"" instead of a normal string so we don't have any special characters like \n + vec_txts = Tex( + r"We'll use $\boldsymbol{\vec{v}_1}=(2, 2)$ and $\boldsymbol{\vec{v}_2}=(0, -3)$" + ) + self.play(Create(intro)) + self.wait(1) + # "grey out" the intro and shift it upwards as we write the second line + self.play(intro.animate.shift(2 * UP).set_opacity(0.5), Write(vec_txts)) + self.wait(1) + self.play(Unwrite(intro), Unwrite(vec_txts), run_time=0.5) + self.wait(0.2) + + +################ +The Final Result +################ +Putting it all together, we can render the final result. + +.. include:: vector_addition.rst diff --git a/docs/source/adventure/vector_addition.rst b/docs/source/adventure/vector_addition.rst new file mode 100644 index 0000000000..7a4293e4e7 --- /dev/null +++ b/docs/source/adventure/vector_addition.rst @@ -0,0 +1,179 @@ +.. manim:: Adventure + :hide_source: + + class VectorGroup(VGroup): + def __init__( + self, start, end, labelname: str, + vector_color: ParsableManimColor, direction = RIGHT, + plane: NumberPlane | None = None, **kwargs + ) -> None: + if plane is not None: + # if using a plane convert from plane units + # to Munits + start = plane.c2p(*start) + end = plane.c2p(*end) + + self.vector = Arrow( + start, + end, + color=vector_color, + buff=0 + ) + self.label = MathTex(labelname, color=vector_color) + + def label_updater(m: MathTex, d=direction): + m.next_to(self.vector, direction=d, **kwargs) + + self.label.add_updater(label_updater, call_updater=True) + super().__init__(self.vector, self.label, **kwargs) + + @override_animation(Create) + def _create_vec_write_label(self) -> AnimationGroup: + return AnimationGroup( + Create(self.vector), + Write(self.label), + lag_ratio=0 + ) + + @override_animation(Uncreate) + def _uncreate_vec_unwrite_label(self) -> AnimationGroup: + return AnimationGroup( + Uncreate(self.vector), + Unwrite(self.label), + lag_ratio=0 + ) + class Adventure(Scene): + """Goal: Make an example showcasing manim's features""" + + def construct(self) -> None: + intro = Text("Let's try to add two vectors!") + vec_txts = Tex(r"We'll use $\boldsymbol{\vec{v}_1}=(2, 2)$ and $\boldsymbol{\vec{v}_2}=(0, -3)$") + self.play(Create(intro)) + self.wait(1) + self.play(intro.animate.shift(2*UP).set_opacity(0.5), Write(vec_txts)) + self.wait(1) + self.play(Unwrite(intro), Unwrite(vec_txts), run_time=.5) + self.wait(0.2) + + self.show_addition_math() + self.wait(0.2) + self.show_vector_addition() + + outro = Text("Thanks for watching!") + self.play(Create(outro)) + self.wait() + + def show_addition_math(self) -> None: + title = Title("Vector Addition Algebraically") + + v1x, v1y = (2, 2) + v2x, v2y = (0, -3) + math = MathTex(r""" + \begin{bmatrix} %(v1x)d \\ %(v1y)d \end{bmatrix} + +\begin{bmatrix} %(v2x)d \\ %(v2y)d \end{bmatrix} + """ % { + 'v1x': v1x, + 'v2x': v2x, + 'v1y': v1y, + 'v2y': v2y + }).shift(DOWN) + + resultant_vector = r"=\begin{bmatrix} %(x)d \\ %(y)d \end{bmatrix}" % { + 'x': v1x+v2x, + 'y': v1y+v2y + } + math_with_answer = MathTex( + math.get_tex_string()+resultant_vector + ).move_to(math.get_center()) + + self.play(Write(math), FadeIn(title)) + self.wait(2) + self.play( + math.animate.shift(2*UP).set_opacity(0.5), + Write(math_with_answer) + ) + conclusion = Paragraph("As you can see,\nYou add each component individually").to_edge(DOWN) + self.play(Write(conclusion)) + self.wait(2) + self.play(Unwrite(math), Unwrite(math_with_answer), Unwrite(conclusion), Unwrite(title)) + + def show_vector_addition(self) -> None: + title = Text("Now let's take a look at it geometrically") + self.play(Write(title)) + self.wait(2) + self.play(Unwrite(title)) + + plane = NumberPlane() + + sum_point = (2, -1, 0) + + v1 = VectorGroup( + ORIGIN, + (2, 2, 0), + r"\boldsymbol{\vec{v}_1}", + RED, + direction=UP, + plane=plane + ) + + v2 = VectorGroup( + ORIGIN, + (0, -3, 0), + r"\boldsymbol{\vec{v}_2}", + YELLOW, + direction=LEFT, + plane=plane + ) + + v1moved = VectorGroup( + (0, -3, 0), + sum_point, + r"\boldsymbol{\vec{v}_1}", + v1.vector.get_color(), + plane=plane + ) + + v2moved = VectorGroup( + (2, 2, 0), + sum_point, + r"\boldsymbol{\vec{v}_2}", + v2.vector.get_color(), + plane=plane + ) + + sum_vec = VectorGroup( + ORIGIN, + sum_point, + r"\boldsymbol{\vec{v}_1}+\boldsymbol{\vec{v}_2}", + ORANGE, + direction=DOWN, + plane=plane + ) + + self.play(Create(plane), Create(v1)) + self.wait(0.5) + self.play(Create(v2)) + self.wait() + + # animate movement of vectors + self.play( + Succession( + ReplacementTransform(v1.copy(), v1moved), + ReplacementTransform(v2.copy(), v2moved) + ) + ) + self.wait() + # draw sum vector + self.play(Create(sum_vec)) + self.wait() + self.play(*[ + Uncreate(x) + for x in ( + plane, + v1, + v2, + v1moved, + v2moved, + sum_vec + ) + ]) diff --git a/poetry.lock b/poetry.lock index e8de9ecdfe..b5397c4f3c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "alabaster" @@ -3942,6 +3942,29 @@ sphinx = ">=1.8" code-style = ["pre-commit (==2.12.1)"] rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] +[[package]] +name = "sphinx-design" +version = "0.5.0" +description = "A sphinx extension for designing beautiful, view size responsive web components." +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinx_design-0.5.0-py3-none-any.whl", hash = "sha256:1af1267b4cea2eedd6724614f19dcc88fe2e15aff65d06b2f6252cee9c4f4c1e"}, + {file = "sphinx_design-0.5.0.tar.gz", hash = "sha256:e8e513acea6f92d15c6de3b34e954458f245b8e761b45b63950f65373352ab00"}, +] + +[package.dependencies] +sphinx = ">=5,<8" + +[package.extras] +code-style = ["pre-commit (>=3,<4)"] +rtd = ["myst-parser (>=1,<3)"] +testing = ["myst-parser (>=1,<3)", "pytest (>=7.1,<8.0)", "pytest-cov", "pytest-regressions"] +theme-furo = ["furo (>=2023.7.0,<2023.8.0)"] +theme-pydata = ["pydata-sphinx-theme (>=0.13.0,<0.14.0)"] +theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] +theme-sbt = ["sphinx-book-theme (>=1.0,<2.0)"] + [[package]] name = "sphinxcontrib-applehelp" version = "1.0.8" @@ -4533,4 +4556,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "ee587c7e3241bf8bbd6334cd1de08bc53d3521978ccd68f9ac54a2cc7f61466f" +content-hash = "28e28a2361319583a060b20889be9470d479a49f4fca5775dc83bdbf490a5a41" diff --git a/pyproject.toml b/pyproject.toml index fcb3f20e52..b18509d9ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,6 +86,7 @@ Sphinx = "^7.2.6" sphinx-copybutton = "^0.5.2" sphinxcontrib-programoutput = "^0.17" sphinxext-opengraph = "^0.9.1" +sphinx-design = "^0.5.0" types-decorator = "^0.1.7" types-Pillow = "^10.1.0.2" types-Pygments = "^2.17.0.0" From 3c1a01ab44b3150231a1bdd30e060369a5b73140 Mon Sep 17 00:00:00 2001 From: adeshpande <110117391+JasonGrace2282@users.noreply.github.com> Date: Sun, 26 May 2024 14:10:31 -0400 Subject: [PATCH 23/38] Reword introduction of :class:`Transform` Co-authored-by: Tristan Schulz --- docs/source/adventure/basics.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/adventure/basics.rst b/docs/source/adventure/basics.rst index 91e1fce018..07e70754a8 100644 --- a/docs/source/adventure/basics.rst +++ b/docs/source/adventure/basics.rst @@ -405,7 +405,7 @@ A little bit later on, we will learn how to leverage the ``stop_condition`` para Transforming Mobjects ===================== -Manim allows us to smoothly transform one ``Mobject`` into another using ``Transform`` (and in just a second, we'll talk about ``ReplacementTransform``). +Manim allows us to smoothly transform one ``Mobject`` into another using ``Transform`` and ``ReplacementTransform``. ``Transform(mob1, mob2)`` turns the attributes of ``mob1`` into the attributes of ``mob2``. .. manim:: TransformAnimation From cd88ffd497b414273b617e5546b4d0375815385f Mon Sep 17 00:00:00 2001 From: adeshpande <110117391+JasonGrace2282@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:34:53 -0400 Subject: [PATCH 24/38] better explanation of Transform vs ReplacementTransform Co-authored-by: Tristan Schulz --- docs/source/adventure/basics.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/adventure/basics.rst b/docs/source/adventure/basics.rst index 07e70754a8..e435901adf 100644 --- a/docs/source/adventure/basics.rst +++ b/docs/source/adventure/basics.rst @@ -421,7 +421,7 @@ Manim allows us to smoothly transform one ``Mobject`` into another using ``Trans ``Transform`` vs ``ReplacementTransform`` ----------------------------------------- -While ``Transform(mob1, mob2)`` changes the attributes of ``mob1`` to ``mob2``, ``ReplacementTransform(mob1, mob2)`` literally replaces ``mob1`` on the +While ``Transform(mob1, mob2)`` changes the attributes of ``mob1`` into the attributes of ``mob2`` by copying the values, ``ReplacementTransform(mob1, mob2)`` instead replaces ``mob1`` in the scene with ``mob2``. Here is the same scene in the last section, but using ``ReplacementTransform``: From 527b68c272af9377efa32a64757f634131831025 Mon Sep 17 00:00:00 2001 From: adeshpande <110117391+JasonGrace2282@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:35:25 -0400 Subject: [PATCH 25/38] doing -> executing Co-authored-by: Tristan Schulz --- docs/source/adventure/project.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index ebb61c9748..512e9af412 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -42,7 +42,7 @@ a new file called `vector_addition.py`, and paste the contents here. # if you're used to rendering from the terminal, # this way you can just run the python file instead - # of doing manim -p vector_addition.py VectorAddition + # of executing manim -p vector_addition.py VectorAddition with tempconfig({"preview": True}): VectorAddition().render() From 5d29e2a24b2f35d2f9facaf087634b26d6829a02 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 12:38:43 +0000 Subject: [PATCH 26/38] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/source/adventure/project.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index 512e9af412..dc75794961 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -19,7 +19,7 @@ by the original creator of manim, 3Blue1Brown. The next step is figuring out how the project should look: what content should it cover, in what order, etc. In this tutorial, we'll focus on two parts of vector addition: the algebraic way, and the geometric way. For the algebraic way, -we'll show two vectors (as matricies) being added, and give a short explanation. After that we'll show the typical tip-to-tail +we'll show two vectors (as matrices) being added, and give a short explanation. After that we'll show the typical tip-to-tail method for adding vectors graphically. Of course, choosing good examples is very important to help the viewer understand. In our case, we'll use the two vectors :math:`v_1\equiv\langle 2, 1\rangle` and :math:`v_2\equiv\langle 0,-3 \rangle`. From fbd04a7472cfe82ed2f02537d02101c9d8387838 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Tue, 27 Aug 2024 20:27:27 -0400 Subject: [PATCH 27/38] some more hyperlinks --- docs/source/adventure/basics.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/source/adventure/basics.rst b/docs/source/adventure/basics.rst index e435901adf..1b1a8a6f21 100644 --- a/docs/source/adventure/basics.rst +++ b/docs/source/adventure/basics.rst @@ -405,7 +405,7 @@ A little bit later on, we will learn how to leverage the ``stop_condition`` para Transforming Mobjects ===================== -Manim allows us to smoothly transform one ``Mobject`` into another using ``Transform`` and ``ReplacementTransform``. +Manim allows us to smoothly transform one :class:`.Mobject` into another using :class:`.Transform` and :class:`.ReplacementTransform`. ``Transform(mob1, mob2)`` turns the attributes of ``mob1`` into the attributes of ``mob2``. .. manim:: TransformAnimation @@ -421,10 +421,10 @@ Manim allows us to smoothly transform one ``Mobject`` into another using ``Trans ``Transform`` vs ``ReplacementTransform`` ----------------------------------------- -While ``Transform(mob1, mob2)`` changes the attributes of ``mob1`` into the attributes of ``mob2`` by copying the values, ``ReplacementTransform(mob1, mob2)`` instead replaces ``mob1`` in the +While :class:`Transform(mob1, mob2)` changes the attributes of ``mob1`` into the attributes of ``mob2`` by copying the values, :class:`ReplacementTransform(mob1, mob2)` instead replaces ``mob1`` in the scene with ``mob2``. -Here is the same scene in the last section, but using ``ReplacementTransform``: +Here is the same scene in the last section, but using :class:`.ReplacementTransform`: .. manim:: ReplacementTransformAnimation @@ -457,7 +457,8 @@ Ultimately, the choice of which to use is up to the programmer. However, some ex ``.animate`` Syntax ------------------- -One of the most powerful features of Manim is it's ``.animate`` syntax. It allows you to animate the changing of an attribute of a mobject. You can see an example below: +One of the most powerful features of Manim is it's :attr:`~.Mobject.animate` syntax. +It allows you to animate the changing of an attribute of a mobject. You can see an example below: .. manim:: AnimateSyntaxExample From a866bb6e11b8943f071c620b9577b6fb9b5ae981 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Fri, 30 Aug 2024 16:39:17 -0400 Subject: [PATCH 28/38] Change to manim init --- docs/source/adventure/basics.rst | 4 ++++ docs/source/adventure/project.rst | 38 +++++++++++++++++-------------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/docs/source/adventure/basics.rst b/docs/source/adventure/basics.rst index 1b1a8a6f21..cfd5088605 100644 --- a/docs/source/adventure/basics.rst +++ b/docs/source/adventure/basics.rst @@ -382,6 +382,10 @@ As an example, check out the rate function below. self.play(Create(Circle(), rate_func=there_and_back_three), run_time=4) +This rate function will spend 1/3rd of the time finishing the animate, the next 1/3rd of the time "undoing" the animation, +and the final 1/3rd of the animation replaying the first 1/3rd. As you can see, it returns the amount of the animation +completed as a value between 0 to 1. + ---------------------- The ``Wait`` Animation ---------------------- diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index dc75794961..74c0c365f9 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -14,7 +14,7 @@ A Basic Project Introduction ############ Throughout this guide, we'll walk you through how to create a simple 30 second video about vector addition. If you don't -already know what that is, it's recommended you watch `this`_ video +already know what that is, it's recommended you watch `this `_ video by the original creator of manim, 3Blue1Brown. The next step is figuring out how the project should look: what content should it cover, in what order, etc. In this @@ -27,27 +27,22 @@ In our case, we'll use the two vectors :math:`v_1\equiv\langle 2, 1\rangle` and Algebraic Vector Addition ######################### -We'll start with the basic setup needed for every manim video. Create -a new file called `vector_addition.py`, and paste the contents here. +We'll start with the basic setup needed for every manim video. +To do this, we can use the manim cli to speed stuff up. In the terminal, +run:: -.. code-block:: python + manim init project VectorAddition - from manim import * +This should create a folder called ``VectorAddition`` with the basic setup. +.. hint:: - class VectorAddition(Scene): - def construct(self) -> None: - self.play(Create(Circle())) + You may want to open this folder in your IDE (like VS Code, or PyCharm). +You will have a ``manim.cfg`` file, where you configuration will be stored, and a ``main.py`` script. +The ``main.py`` script is where you will write your scenes. - # if you're used to rendering from the terminal, - # this way you can just run the python file instead - # of executing manim -p vector_addition.py VectorAddition - with tempconfig({"preview": True}): - VectorAddition().render() - -If you did it correctly, running the python file (either through your IDE -or through the terminal with ``python3 vector_addition.py``) should render a scene +If you did it correctly, running the python file with ``manim -p main.py`` should render a scene with a circle being created: .. manim:: CreateCircle @@ -55,7 +50,16 @@ with a circle being created: class CreateCircle(Scene): def construct(self): - self.play(Create(Circle())) + circle = Circle() + circle.set_fill(PINK, opacity=0.5) + + square = Square() + square.flip(RIGHT) + square.rotate(-3 * TAU / 8) + + self.play(Create(square)) + self.play(Transform(square, circle)) + self.play(FadeOut(square)) ============ Introduction From ccbb3d3f1e8ff028cbf211ae427376d4ca9e40f3 Mon Sep 17 00:00:00 2001 From: fnieri Date: Sun, 6 Oct 2024 00:20:09 +0200 Subject: [PATCH 29/38] Fixed dropdown not working in project adventure --- docs/source/adventure/project.rst | 5 +++-- docs/source/conf.py | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index 74c0c365f9..7e171c68bf 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -85,8 +85,9 @@ stick with a simple text-based intro. Try to recreate the following: self.play(Unwrite(intro), Unwrite(vec_txts), run_time=.5) self.wait(0.2) -.. dropdown:: Authors Solution - +.. admonition:: Authors solution + :class: dropdown + .. code-block:: python class AdventureIntro(Scene): diff --git a/docs/source/conf.py b/docs/source/conf.py index ed95eacfee..5ebefa2c39 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -51,6 +51,7 @@ "sphinx.ext.inheritance_diagram", "sphinxcontrib.programoutput", "myst_parser", + "sphinx_togglebutton" ] # Automatically generate stub pages when using the .. autosummary directive From e9fe3f81aec76e463f380968e9f09338770b6b72 Mon Sep 17 00:00:00 2001 From: fnieri Date: Thu, 10 Oct 2024 14:20:49 +0200 Subject: [PATCH 30/38] Added subsections for algebraic and geometric vector addition --- docs/source/adventure/project.rst | 392 +++++++++++++++++++++++++++++- 1 file changed, 389 insertions(+), 3 deletions(-) diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index 7e171c68bf..a442feb97d 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -23,9 +23,9 @@ we'll show two vectors (as matrices) being added, and give a short explanation. method for adding vectors graphically. Of course, choosing good examples is very important to help the viewer understand. In our case, we'll use the two vectors :math:`v_1\equiv\langle 2, 1\rangle` and :math:`v_2\equiv\langle 0,-3 \rangle`. -######################### -Algebraic Vector Addition -######################### +################ +Vector Addition +################ We'll start with the basic setup needed for every manim video. To do this, we can use the manim cli to speed stuff up. In the terminal, @@ -85,6 +85,7 @@ stick with a simple text-based intro. Try to recreate the following: self.play(Unwrite(intro), Unwrite(vec_txts), run_time=.5) self.wait(0.2) + .. admonition:: Authors solution :class: dropdown @@ -105,6 +106,391 @@ stick with a simple text-based intro. Try to recreate the following: self.play(Unwrite(intro), Unwrite(vec_txts), run_time=0.5) self.wait(0.2) +============================ +Algebraic vector addition +============================ + +Then, let's show the viewer how vector addition between two vectors is done algebraically. +Once again, try to recreate the following: + + +.. manim:: AlgebraicAddition + :hide_source: + :ref_classes: Title MathTex Paragraph Tex Text Write Unwrite Create FadeIn + + class AlgebraicAddition(Scene): + + def construct(self): + title = Title("Vector Addition Algebraically") + + v1x, v1y = (2, 2) + v2x, v2y = (0, -3) + math = MathTex(r""" + \begin{bmatrix} %(v1x)d \\ %(v1y)d \end{bmatrix} + +\begin{bmatrix} %(v2x)d \\ %(v2y)d \end{bmatrix} + """ % { + 'v1x': v1x, + 'v2x': v2x, + 'v1y': v1y, + 'v2y': v2y + }).shift(DOWN) + + resultant_vector = r"=\begin{bmatrix} %(x)d \\ %(y)d \end{bmatrix}" % { + 'x': v1x+v2x, + 'y': v1y+v2y + } + math_with_answer = MathTex( + math.get_tex_string()+resultant_vector + ).move_to(math.get_center()) + + self.play(Write(math), FadeIn(title)) + self.wait(2) + self.play( + math.animate.shift(2*UP).set_opacity(0.5), + Write(math_with_answer) + ) + conclusion = Paragraph("As you can see,\nYou add each component individually").to_edge(DOWN) + self.play(Write(conclusion)) + self.wait(2) + self.play(Unwrite(math), Unwrite(math_with_answer), Unwrite(conclusion), Unwrite(title)) + +Hints +----- + +Use :class:`.Title` to display the title at the top of the Scene. + +Use :class:`.MathTex` to represent the matrices, try not to hardcode the values into the LaTeX string, instead, use python string formatting, this will allow us to define the resultant vector dynamically. + +.. code-block:: python + + v1x, v1y = (2, 2) + v2x, v2y = ... + math = MathTex(r""" + ... %(v1x)d \\ %(v1y)d ... + + ... %(v2x)d \\ %(v2y)d ... + """ % { + 'v1x': v1x, + 'v2x': v2x, + 'v1y': v1y, + 'v2y': v2y + }) + +.. admonition:: Authors solution + :class: dropdown + + .. code-block:: python + + class AlgebraicAddition(Scene): + + def construct(self): + title = Title("Vector Addition Algebraically") + + v1x, v1y = (2, 2) + v2x, v2y = (0, -3) + math = MathTex(r""" + \begin{bmatrix} %(v1x)d \\ %(v1y)d \end{bmatrix} + +\begin{bmatrix} %(v2x)d \\ %(v2y)d \end{bmatrix} + """ % { + 'v1x': v1x, + 'v2x': v2x, + 'v1y': v1y, + 'v2y': v2y + }).shift(DOWN) + + resultant_vector = r"=\begin{bmatrix} %(x)d \\ %(y)d \end{bmatrix}" % { + 'x': v1x+v2x, + 'y': v1y+v2y + } + math_with_answer = MathTex( + math.get_tex_string()+resultant_vector + ).move_to(math.get_center()) + + self.play(Write(math), FadeIn(title)) + self.wait(2) + self.play( + math.animate.shift(2*UP).set_opacity(0.5), + Write(math_with_answer) + ) + conclusion = Paragraph("As you can see,\nYou add each component individually").to_edge(DOWN) + self.play(Write(conclusion)) + self.wait(2) + self.play(Unwrite(math), Unwrite(math_with_answer), Unwrite(conclusion), Unwrite(title)) + +============================ +Geometric vector addition +============================ + +Lastly, let's show the vector addition geometrically, let's reproduce the following: + + +.. manim:: GeometricAddition + :hide_source: + :ref_classes: Title MathTex Paragraph Tex Text Write Unwrite Create FadeIn NumberPlane Arrow AnimationGroup ReplacementTransform VGroup + + class VectorGroup(VGroup): + def __init__( + self, start, end, labelname: str, + vector_color: ParsableManimColor, direction = RIGHT, + plane: NumberPlane | None = None, **kwargs + ) -> None: + if plane is not None: + # if using a plane convert from plane units + # to Munits + start = plane.c2p(*start) + end = plane.c2p(*end) + + self.vector = Arrow( + start, + end, + color=vector_color, + buff=0 + ) + self.label = MathTex(labelname, color=vector_color) + + def label_updater(m: MathTex, d=direction): + m.next_to(self.vector, direction=d, **kwargs) + + self.label.add_updater(label_updater, call_updater=True) + super().__init__(self.vector, self.label, **kwargs) + + @override_animation(Create) + def _create_vec_write_label(self) -> AnimationGroup: + return AnimationGroup( + Create(self.vector), + Write(self.label), + lag_ratio=0 + ) + + @override_animation(Uncreate) + def _uncreate_vec_unwrite_label(self) -> AnimationGroup: + return AnimationGroup( + Uncreate(self.vector), + Unwrite(self.label), + lag_ratio=0 + ) + + class GeometricAddition(Scene): + def construct(self): + title = Text("Now let's take a look at it geometrically") + self.play(Write(title)) + self.wait(2) + self.play(Unwrite(title)) + + plane = NumberPlane() + + sum_point = (2, -1, 0) + + v1 = VectorGroup( + ORIGIN, + (2, 2, 0), + r"\boldsymbol{\vec{v}_1}", + RED, + direction=UP, + plane=plane + ) + + v2 = VectorGroup( + ORIGIN, + (0, -3, 0), + r"\boldsymbol{\vec{v}_2}", + YELLOW, + direction=LEFT, + plane=plane + ) + + v1moved = VectorGroup( + (0, -3, 0), + sum_point, + r"\boldsymbol{\vec{v}_1}", + v1.vector.get_color(), + plane=plane + ) + + v2moved = VectorGroup( + (2, 2, 0), + sum_point, + r"\boldsymbol{\vec{v}_2}", + v2.vector.get_color(), + plane=plane + ) + + sum_vec = VectorGroup( + ORIGIN, + sum_point, + r"\boldsymbol{\vec{v}_1}+\boldsymbol{\vec{v}_2}", + ORANGE, + direction=DOWN, + plane=plane + ) + + self.play(Create(plane), Create(v1)) + self.wait(0.5) + self.play(Create(v2)) + self.wait() + + # animate movement of vectors + self.play( + Succession( + ReplacementTransform(v1.copy(), v1moved), + ReplacementTransform(v2.copy(), v2moved) + ) + ) + self.wait() + # draw sum vector + self.play(Create(sum_vec)) + self.wait() + self.play(*[ + Uncreate(x) + for x in ( + plane, + v1, + v2, + v1moved, + v2moved, + sum_vec + ) + ]) + +Hints +----- + +Use :class:`.NumberPlane` to define the cartesian plane. + +Use :class:`.Arrow` for the vectors. + +To make sure the label of the vector and the vector shift together, you can define a custom :class:`.VGroup` class. + + +.. admonition:: Authors solution + :class: dropdown + + .. code-block:: python + + class VectorGroup(VGroup): + def __init__( + self, start, end, labelname: str, + vector_color: ParsableManimColor, direction = RIGHT, + plane: NumberPlane | None = None, **kwargs + ) -> None: + if plane is not None: + # if using a plane convert from plane units + # to Munits + start = plane.c2p(*start) + end = plane.c2p(*end) + + self.vector = Arrow( + start, + end, + color=vector_color, + buff=0 + ) + self.label = MathTex(labelname, color=vector_color) + + def label_updater(m: MathTex, d=direction): + m.next_to(self.vector, direction=d, **kwargs) + + self.label.add_updater(label_updater, call_updater=True) + super().__init__(self.vector, self.label, **kwargs) + + @override_animation(Create) + def _create_vec_write_label(self) -> AnimationGroup: + return AnimationGroup( + Create(self.vector), + Write(self.label), + lag_ratio=0 + ) + + @override_animation(Uncreate) + def _uncreate_vec_unwrite_label(self) -> AnimationGroup: + return AnimationGroup( + Uncreate(self.vector), + Unwrite(self.label), + lag_ratio=0 + ) + + class GeometricAddition(Scene): + def construct(self): + title = Text("Now let's take a look at it geometrically") + self.play(Write(title)) + self.wait(2) + self.play(Unwrite(title)) + + plane = NumberPlane() + + sum_point = (2, -1, 0) + + v1 = VectorGroup( + ORIGIN, + (2, 2, 0), + r"\boldsymbol{\vec{v}_1}", + RED, + direction=UP, + plane=plane + ) + + v2 = VectorGroup( + ORIGIN, + (0, -3, 0), + r"\boldsymbol{\vec{v}_2}", + YELLOW, + direction=LEFT, + plane=plane + ) + + v1moved = VectorGroup( + (0, -3, 0), + sum_point, + r"\boldsymbol{\vec{v}_1}", + v1.vector.get_color(), + plane=plane + ) + + v2moved = VectorGroup( + (2, 2, 0), + sum_point, + r"\boldsymbol{\vec{v}_2}", + v2.vector.get_color(), + plane=plane + ) + + sum_vec = VectorGroup( + ORIGIN, + sum_point, + r"\boldsymbol{\vec{v}_1}+\boldsymbol{\vec{v}_2}", + ORANGE, + direction=DOWN, + plane=plane + ) + + self.play(Create(plane), Create(v1)) + self.wait(0.5) + self.play(Create(v2)) + self.wait() + + # animate movement of vectors + self.play( + Succession( + ReplacementTransform(v1.copy(), v1moved), + ReplacementTransform(v2.copy(), v2moved) + ) + ) + self.wait() + # draw sum vector + self.play(Create(sum_vec)) + self.wait() + self.play(*[ + Uncreate(x) + for x in ( + plane, + v1, + v2, + v1moved, + v2moved, + sum_vec + ) + ]) + + ################ The Final Result From 03ae492e922734f3414d4dd4ca9e9443eebd2e1d Mon Sep 17 00:00:00 2001 From: fnieri Date: Tue, 15 Oct 2024 23:00:55 +0200 Subject: [PATCH 31/38] Added poetry dependency --- poetry.lock | 39 +++++++++++++++++++++++++++++++++++++-- pyproject.toml | 1 + 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index 404a2b8048..7ba4a513dd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2331,6 +2331,7 @@ description = "A cross platform helper library for ModernGL making window creati optional = false python-versions = ">=3.8" files = [ + {file = "moderngl-window-2.4.6.tar.gz", hash = "sha256:db9b4c27f35faa6f243b6d8cde6ada6da6e79541d62b8e536c0b20da29720c32"}, {file = "moderngl_window-2.4.6-py3-none-any.whl", hash = "sha256:cfa81c2b222536270a077e2901f5f7a18e317f7332026ae443662555ebf7a66d"}, ] @@ -3781,7 +3782,7 @@ win32 = ["pywin32"] name = "setuptools" version = "74.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "setuptools-74.0.0-py3-none-any.whl", hash = "sha256:0274581a0037b638b9fc1c6883cc71c0210865aaa76073f7882376b641b84e8f"}, @@ -3997,6 +3998,26 @@ theme-pydata = ["pydata-sphinx-theme (>=0.13.0,<0.14.0)"] theme-rtd = ["sphinx-rtd-theme (>=1.0,<2.0)"] theme-sbt = ["sphinx-book-theme (>=1.0,<2.0)"] +[[package]] +name = "sphinx-togglebutton" +version = "0.3.2" +description = "Toggle page content and collapse admonitions in Sphinx." +optional = false +python-versions = "*" +files = [ + {file = "sphinx-togglebutton-0.3.2.tar.gz", hash = "sha256:ab0c8b366427b01e4c89802d5d078472c427fa6e9d12d521c34fa0442559dc7a"}, + {file = "sphinx_togglebutton-0.3.2-py3-none-any.whl", hash = "sha256:9647ba7874b7d1e2d43413d8497153a85edc6ac95a3fea9a75ef9c1e08aaae2b"}, +] + +[package.dependencies] +docutils = "*" +setuptools = "*" +sphinx = "*" +wheel = "*" + +[package.extras] +sphinx = ["matplotlib", "myst-nb", "numpy", "sphinx-book-theme", "sphinx-design", "sphinx-examples"] + [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" @@ -4491,6 +4512,20 @@ docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] +[[package]] +name = "wheel" +version = "0.44.0" +description = "A built-package format for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "wheel-0.44.0-py3-none-any.whl", hash = "sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f"}, + {file = "wheel-0.44.0.tar.gz", hash = "sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49"}, +] + +[package.extras] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] + [[package]] name = "wrapt" version = "1.16.0" @@ -4596,4 +4631,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "45fc15c147b17909cef557a417fabb5412f83e5a917f669d1c8d462ab5491664" +content-hash = "664a8e2ee063b0846d12a3c9f2f4c2c4dd9a18dcf2aa6e0e8535f1dd5cb43864" diff --git a/pyproject.toml b/pyproject.toml index 07eb9ac874..fbebe8772c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,6 +55,7 @@ svgelements = ">=1.8.0" tqdm = ">=4.0.0" typing-extensions = ">=4.0.0" watchdog = ">=2.0.0" +sphinx-togglebutton = "^0.3.2" [tool.poetry.extras] jupyterlab = ["jupyterlab", "notebook"] From ae0509c02837a19dab51dd7024a8737744a4daa2 Mon Sep 17 00:00:00 2001 From: fnieri Date: Tue, 15 Oct 2024 23:02:50 +0200 Subject: [PATCH 32/38] Changed basic project to reflect feedback --- docs/source/adventure/project.rst | 57 ++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index a442feb97d..622360b578 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -159,7 +159,7 @@ Hints Use :class:`.Title` to display the title at the top of the Scene. -Use :class:`.MathTex` to represent the matrices, try not to hardcode the values into the LaTeX string, instead, use python string formatting, this will allow us to define the resultant vector dynamically. +Use :class:`.MathTex` to represent the matrices, and try not to hardcode the values into the LaTeX string. Instead, you can use python string formatting and numpy vector addition, which will make it easier to change the vectors later if we need to. .. code-block:: python @@ -220,8 +220,7 @@ Use :class:`.MathTex` to represent the matrices, try not to hardcode the values Geometric vector addition ============================ -Lastly, let's show the vector addition geometrically, let's reproduce the following: - +Lastly, let's show the vector addition geometrically. Try your best to reconstruct the following: .. manim:: GeometricAddition :hide_source: @@ -253,21 +252,21 @@ Lastly, let's show the vector addition geometrically, let's reproduce the follow self.label.add_updater(label_updater, call_updater=True) super().__init__(self.vector, self.label, **kwargs) - @override_animation(Create) - def _create_vec_write_label(self) -> AnimationGroup: - return AnimationGroup( - Create(self.vector), - Write(self.label), - lag_ratio=0 - ) + @override_animation(Create) + def _create_vec_write_label(self) -> AnimationGroup: + return AnimationGroup( + Create(self.vector), + Write(self.label), + lag_ratio=0 + ) - @override_animation(Uncreate) - def _uncreate_vec_unwrite_label(self) -> AnimationGroup: - return AnimationGroup( - Uncreate(self.vector), - Unwrite(self.label), - lag_ratio=0 - ) + @override_animation(Uncreate) + def _uncreate_vec_unwrite_label(self) -> AnimationGroup: + return AnimationGroup( + Uncreate(self.vector), + Unwrite(self.label), + lag_ratio=0 + ) class GeometricAddition(Scene): def construct(self): @@ -356,10 +355,30 @@ Hints Use :class:`.NumberPlane` to define the cartesian plane. -Use :class:`.Arrow` for the vectors. +Use :class:`.Arrow` for the vectors.: + +To make sure the label of the vector and the vector shift together, you can define a custom :class:`.VGroup` subclass. +Take a look at the decorator :meth:`override_animation` to override the :class:`.Create` and :class:`.Uncreate` animations, it will come in handy when animating the subclass. + +.. code-block:: python -To make sure the label of the vector and the vector shift together, you can define a custom :class:`.VGroup` class. + class VectorGroup(VGroup): + def __init__( + ... + ) -> None: + ... + @override_animation(Create) + def _create_vec_write_label(self) -> AnimationGroup: + return AnimationGroup( + ... + ) + + @override_animation(Uncreate) + def _uncreate_vec_unwrite_label(self) -> AnimationGroup: + return AnimationGroup( + ... + ) .. admonition:: Authors solution :class: dropdown From b7fc13ac8911d2e9e1283b62ecce645fc6338ef9 Mon Sep 17 00:00:00 2001 From: fnieri Date: Tue, 15 Oct 2024 23:24:58 +0200 Subject: [PATCH 33/38] Added dropdown admonition in "Adding Admonitions" section for contributing --- docs/source/contributing/docs/admonitions.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/source/contributing/docs/admonitions.rst b/docs/source/contributing/docs/admonitions.rst index c1b66bc258..a7a34c0e88 100644 --- a/docs/source/contributing/docs/admonitions.rst +++ b/docs/source/contributing/docs/admonitions.rst @@ -85,4 +85,22 @@ Attention .. attention:: A attention +Dropdown +~~~~~~~~~ + +.. code-block:: rest + + .. admonition:: A dropdown + :class: dropdown + + A dropdown + +Make sure you leave a line between ":class:" and the text below, otherwise the dropdown won't render. + +.. admonition:: A dropdown + :class: dropdown + + A dropdown + + You can find further information about Admonitions here: https://pradyunsg.me/furo/reference/admonitions/ From 83d5f9d4dcadfbc33e66af25eade01df5f8b33bb Mon Sep 17 00:00:00 2001 From: fnieri Date: Wed, 16 Oct 2024 16:09:45 +0200 Subject: [PATCH 34/38] Fixed override_animation reference from :meth: to :func: --- docs/source/adventure/project.rst | 2 +- docs/source/contributing/docs/admonitions.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index 622360b578..876d2d3427 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -358,7 +358,7 @@ Use :class:`.NumberPlane` to define the cartesian plane. Use :class:`.Arrow` for the vectors.: To make sure the label of the vector and the vector shift together, you can define a custom :class:`.VGroup` subclass. -Take a look at the decorator :meth:`override_animation` to override the :class:`.Create` and :class:`.Uncreate` animations, it will come in handy when animating the subclass. +Take a look at the decorator :func:`.override_animation` to override the :class:`.Create` and :class:`.Uncreate` animations, it will come in handy when animating the subclass. .. code-block:: python diff --git a/docs/source/contributing/docs/admonitions.rst b/docs/source/contributing/docs/admonitions.rst index a7a34c0e88..5c7f5e4a10 100644 --- a/docs/source/contributing/docs/admonitions.rst +++ b/docs/source/contributing/docs/admonitions.rst @@ -96,7 +96,7 @@ Dropdown A dropdown Make sure you leave a line between ":class:" and the text below, otherwise the dropdown won't render. - + .. admonition:: A dropdown :class: dropdown From e614b08077820ac9ee7b2161e7a8bae428a13b83 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Sat, 19 Oct 2024 10:00:05 -0400 Subject: [PATCH 35/38] Move sphinx-togglebutton into dev-dependencies --- poetry.lock | 1950 ++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 2 files changed, 988 insertions(+), 964 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7ba4a513dd..c3d87d15a5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "anyio" -version = "4.4.0" +version = "4.6.2.post1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, ] [package.dependencies] @@ -29,9 +29,9 @@ sniffio = ">=1.1" typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] [[package]] name = "appnope" @@ -173,60 +173,54 @@ tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "av" -version = "12.3.0" +version = "13.1.0" description = "Pythonic bindings for FFmpeg's libraries." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "av-12.3.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b3b1fe6b5ab9af2d09dcdcc5473a3523f7162c3fa0c6b3c379b697fede1e88a5"}, - {file = "av-12.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5f92ba67dca9bac8ce955b09d41e7e92977199adbd0f2aff02653bb40b0ac16"}, - {file = "av-12.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3389eebd1f5bb36ebfaa8441c65c14d7433b354d91f9dbb08a6e6225d16a7226"}, - {file = "av-12.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:385b27638bc56fd1560be3b9e86b5cc843cae931503a02e6e504c0357176873e"}, - {file = "av-12.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0220fce2a62d71cc5e89617419b6224ddb43f1753b00f68b5c9af8b5f41d38c9"}, - {file = "av-12.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:8328c90f783b3392279a2d3a79789267691f5e5f7c4a160990a41194d268ec59"}, - {file = "av-12.3.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:cc06a806419fddc7102150ffe353c7d96b99b95fd12864280c91c851603fd4cb"}, - {file = "av-12.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e2130ff622a574d3d5d6e88ac335efcdd98c375bb341f87d9fe540830a746f5"}, - {file = "av-12.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e8b9bd99f916ff4d1278654e94658e6ace7ca60f6321f254d09c8cd81d9095b"}, - {file = "av-12.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e375d1d89a5c6edfd9f66701fdb6cc9161cc1ff99d15ff0bda21ee1ad38e9e0"}, - {file = "av-12.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9066fd8d86548e12d587cbfe7b852159e48ff3c732271c3032668d4bd7c599"}, - {file = "av-12.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bfaa9864560e43d45d254ed95f70ab1aab24a2fa0cc35ac99eef362f1453bec0"}, - {file = "av-12.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5174e995772ebe33561980dca625f830aea8d39a4338728dedb41ae7dc2605af"}, - {file = "av-12.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:028d8b40308536f740dace3efd0178eb96825b414897c9594fb74136532901cb"}, - {file = "av-12.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b030791ecc6185776d832d19ce196f61daf3e17e591a9bb6fd181280e1754138"}, - {file = "av-12.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3703a35481fda5798a27bf6208c1ec3b61c18931625771fb3c9fd870539c7d7"}, - {file = "av-12.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32f3eef56b2df289db6105f9fe2ebc9a8134a8adbd62190daeb8e22c4ff47794"}, - {file = "av-12.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:62d036ee8321d67190887012c3dbcd1ad83248603cc29ea75fbb75835b8d6e6e"}, - {file = "av-12.3.0-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:d04d908febe4673311cae47b3f43d1c4858177fb5028fd3bb1b9fb46291e9748"}, - {file = "av-12.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f380ee818f28435daa5ffc10d7f6e3854f3019bafb210dea5977a7292ae2467"}, - {file = "av-12.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebbfe391ee4d4d4dd1f8ec3969ced65362a811d3edb210933ce46c946f6e9263"}, - {file = "av-12.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:20df6c5b71964adb05b353439f1e00b06e32526b2feaf1c5ff07a7a7f2feca38"}, - {file = "av-12.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1a6512a12ace56d17ffb8a4909db724e2b6cc968ab8370ae75e7743387e86d1"}, - {file = "av-12.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:7faadac791efee412f17309a3471d3a64f84a1761c3dfb360b8eda26dfc60f70"}, - {file = "av-12.3.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:6d29265257c1b6183d96c5e93ab563ecce029574d99b31d361eeb5bfcebe2a0b"}, - {file = "av-12.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:508dd1d104bc1e4df18949ab4100e3d7bedf302e21ea417e8b91e2f9abfa0612"}, - {file = "av-12.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecbf44b74490febb8ff3e5ca63c06c0e601f7633af6ec5308fe40431b3735ea1"}, - {file = "av-12.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f97fa62d97f5aa5312fb85e45374b878c81b9cda2a210f61cfd43f269895786"}, - {file = "av-12.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01115c2b53585e26d6764e2aa66e7a0f0d7b4ab80f96e3dc931cc9029a69f975"}, - {file = "av-12.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:410f49fa7f6d817b1a311b375fb9f8c7c8149607cb0f7ae82ec55dbf82ce85e8"}, - {file = "av-12.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e47ba817fcd46c9f2c94d638abcdeda120adedcd09605984a5cee844f739a833"}, - {file = "av-12.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b456cbb7ddd252f0f2db06a09dc10ade201e82e0eb8d3a7b609689907b2802df"}, - {file = "av-12.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50ccb92605d59732d2a2923786a5dba746a98c5fd6b4d30a5975785673c42c9e"}, - {file = "av-12.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:061b15203f22e95c60b1cc14702618acbf18e976cf3144298e2f6dc89b7aa993"}, - {file = "av-12.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65849ca4e54f2d50ed263ab488ef051bd973cbdbe2a7c947b31ff965bb7bfddd"}, - {file = "av-12.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:18e915ca9001f9491cb4091fe6ca0744a48da20412be44f71bbfc641efbf518f"}, - {file = "av-12.3.0-pp38-pypy38_pp73-macosx_10_13_x86_64.whl", hash = "sha256:9b93e1e4d8f5f46f3d21970a2d06b06fef8e36e3fd3fd78c2fed7c8f6b46a89c"}, - {file = "av-12.3.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:bc38c84afd5d38a5d6429dd687f69b09b563bca52c44d8cc44acea1dd6035184"}, - {file = "av-12.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf0cc3c665365a7c5bc4bfa83ad6096660648060cbf411466e69692eba6dde9d"}, - {file = "av-12.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:126426897852e974781755209747ed7f9888ad3ef17fe274e0fe98fd5659568d"}, - {file = "av-12.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3bdcd36bccf2d62655a4429c84855f0c99da42529c1ac8da391d8efe83d0afe"}, - {file = "av-12.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:db313fce97b1c3bb50eb1f9483c705c0e51733b105a81c61c9d0946552185f2b"}, - {file = "av-12.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:21303fa04cad5b21e6671d3ef54c80262be632efd79536ead8179f08529820c0"}, - {file = "av-12.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8bfaa314bc75d492acbe02592ea6bbcf8674776b645a941aeda00ebaf70c1a9"}, - {file = "av-12.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c0a34c2872a40daad6d9f43169caf977687b28c757dd49032797d2535c062db"}, - {file = "av-12.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15d2348be3db7432774febca59c6c5b92f292c521b586cdffbe3da2c9f2bde59"}, - {file = "av-12.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d858cd2a34e21e373be0bc4b79e996c32b2bc92ab7494d4cd26f33370e045fd"}, - {file = "av-12.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d39b24186794128da924e032f650a37f69ef2c7b10a66749426b655082d68a75"}, - {file = "av-12.3.0.tar.gz", hash = "sha256:04b1892562aff3277efc79f32bd8f1d0cbb64ed011241cb3e96f9ad471816c22"}, + {file = "av-13.1.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a2af44fae6d16c3a40dd1c85bda41b449be08a2c172d8f44fb63395ccf6e6fb4"}, + {file = "av-13.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0fea71fe06fd0dfe90a089200eb6468034797f860a321fa2d62e07d619c74749"}, + {file = "av-13.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:756997810dcca11811b598d209561cabd2071e5b472b867c295bb3e7022eecde"}, + {file = "av-13.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f432102edaec4ee90087a675acf486bff0c81b47d98b85eb3218afe84575b60"}, + {file = "av-13.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d568c4d7a36df52c0774d52e6d730148775ead16daed81c10dafc2569b5a38d"}, + {file = "av-13.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:aa6f76e7c5e77bc5f99a27ada29f78c64fd4e0d42da2c4d203badc650bc0a686"}, + {file = "av-13.1.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:867385e6701464a5c95903e24d2e0df1c7e0dbf211ed91d0ce639cd687373e10"}, + {file = "av-13.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cb7a3f319401a46b0017771268ff4928501e77cf00b1a2aa0721e20b2fd1146e"}, + {file = "av-13.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad904f860147bceaca65b0d3174a8153f35c570d465161d210f1879970b15559"}, + {file = "av-13.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a906e017b29d0eb80d9ccf7a98d19268122da792dbb68eb741cfebba156e6aed"}, + {file = "av-13.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ce894d7847897da7be63277a0875bd93c51327134ac226c67978de014c7979f"}, + {file = "av-13.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:384bcdb5fc3238a263a5a25cc9efc690859fa4148cc4b07e00fae927178db22a"}, + {file = "av-13.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:261dbc3f4b55f4f8f3375b10b2258fca7f2ab7a6365c01bc65e77a0d5327a195"}, + {file = "av-13.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83d259ef86b9054eb914bc7c6a7f6092a6d75cb939295e70ee979cfd92a67b99"}, + {file = "av-13.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3b4d3ca159eceab97e3c0fb08fe756520fb95508417f76e48198fda2a5b0806"}, + {file = "av-13.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40e8f757e373b73a2dc4640852a00cce4a4a92ef19b2e642a96d6994cd1fffbf"}, + {file = "av-13.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8aaec2c0bfd024359db3821d679009d4e637e1bee0321d20f61c54ed6b20f41"}, + {file = "av-13.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ea0deab0e6a739cb742fba2a3983d8102f7516a3cdf3c46669f3cac0ed1f351"}, + {file = "av-13.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:47642ebaebfe20519b2391bd5b7c38b596efcd052bfd09c8d33058f94ddd0fd6"}, + {file = "av-13.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2f079c2daa3ae06557b3f6e9bed4fb9c876e8012175bec645ccd007199a302db"}, + {file = "av-13.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f0de8252deeeb1887637e88d4d9d18514e5cfe276bdb9e6ca8e9eef89d1667a"}, + {file = "av-13.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ad0024f4def11b0cedfeee478fa6c6fd7ed3955e13387e0f27261fdda6121b4"}, + {file = "av-13.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb88e2590eaed45233eb117f1dfab1a43ed9a997b2c46da9f08468dd00f14895"}, + {file = "av-13.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:c927e4fa4f6aeed4340b3e3b16b237d7cb743e5c1a55b92307407590ca4112aa"}, + {file = "av-13.1.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fa398f0e0579bdeca4f0c31eb46e88c29562988e135e44972f73bb7525d1454e"}, + {file = "av-13.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd38601a0e83061af90106e5a312649cd04b1f0bba508f3895ac8dc7930bcf68"}, + {file = "av-13.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a18b67c5b4ad725c5cd4d0d6cd825d91e39f50654e4148cb179a02913b6bd42"}, + {file = "av-13.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c53917f326e460e784cf599da3e2b4d5c76c02c9fd2d32c4b8e24b86b159b6ba"}, + {file = "av-13.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5bc5e8a5f3811dab471c412c50b7850912d85c804f500b75358b6af93e8ee8b"}, + {file = "av-13.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:6d7ae8510ff011fb4df0e0a6c50ef495a980d70968db17d138a7ccca322896cd"}, + {file = "av-13.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fc5118f78ee712b2c396f345e4c51e60e61e28f1f606adbd4060c4dc44b0b652"}, + {file = "av-13.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:81bcbd3545e523e7a350613be1866b515a5ee3fafa1d9d257d7ed02531fc2636"}, + {file = "av-13.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83b2bc641e8e16bbf058de35f1ba79ebed358ac6fe3cb5a665366294774fdb18"}, + {file = "av-13.1.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d956ae3e68fabdc45eb2b986c2e842a31df084d8cfc90336509f07a727a9df62"}, + {file = "av-13.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef076fcdf172aafcb21ea3ef7bd68cc9151b050016a8ace13b3dae3d08a4427"}, + {file = "av-13.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bbf90397b7a466ff2879bd0944d55f796ad76c073fce50304315b83ad00113bd"}, + {file = "av-13.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3804b57d04dc512c7ae15da9499373f37b8af7a80631899a9b3afd4c9007433b"}, + {file = "av-13.1.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b94ee5ee160794c9874b4977e5c4d76d7250b2fd6f27202c66a4df4ad23e822"}, + {file = "av-13.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6073ff4202e4a0c3aecab35ef99f84a3c4b4414c4b8ae771c965a2b52394148c"}, + {file = "av-13.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5ab17663b783e112837fb1c5f67098a561627e4a542cdf5bf1524f48478b897"}, + {file = "av-13.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f422360f801a6f878d73aee4d404110ee6bb8f04846bf8815edb218da83bec49"}, + {file = "av-13.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:799cf56dc9399a1696e0445dcee6e17dfa67e2a76030934d678cfa7d7ae40172"}, + {file = "av-13.1.0.tar.gz", hash = "sha256:d3da736c55847d8596eb8c26c60e036f193001db3bc5c10da8665622d906c17e"}, ] [[package]] @@ -284,89 +278,89 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] name = "cffi" -version = "1.17.0" +version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" files = [ - {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, - {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, - {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, - {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, - {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, - {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, - {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, - {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, - {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, - {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, - {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, - {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, - {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, - {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, - {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, - {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, - {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, - {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, - {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, - {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, - {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, - {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, - {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, - {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, - {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, - {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, - {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, - {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, - {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, - {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, - {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, - {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, - {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, - {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, - {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, - {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, - {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] [package.dependencies] @@ -385,101 +379,116 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -624,83 +633,73 @@ test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist" [[package]] name = "coverage" -version = "7.6.1" +version = "7.6.3" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, - {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, - {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, - {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, - {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, - {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, - {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, - {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, - {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, - {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, - {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, - {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, - {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, - {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, - {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, - {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, - {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, - {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, + {file = "coverage-7.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6da42bbcec130b188169107ecb6ee7bd7b4c849d24c9370a0c884cf728d8e976"}, + {file = "coverage-7.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c222958f59b0ae091f4535851cbb24eb57fc0baea07ba675af718fb5302dddb2"}, + {file = "coverage-7.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab84a8b698ad5a6c365b08061920138e7a7dd9a04b6feb09ba1bfae68346ce6d"}, + {file = "coverage-7.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70a6756ce66cd6fe8486c775b30889f0dc4cb20c157aa8c35b45fd7868255c5c"}, + {file = "coverage-7.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c2e6fa98032fec8282f6b27e3f3986c6e05702828380618776ad794e938f53a"}, + {file = "coverage-7.6.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:921fbe13492caf6a69528f09d5d7c7d518c8d0e7b9f6701b7719715f29a71e6e"}, + {file = "coverage-7.6.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6d99198203f0b9cb0b5d1c0393859555bc26b548223a769baf7e321a627ed4fc"}, + {file = "coverage-7.6.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:87cd2e29067ea397a47e352efb13f976eb1b03e18c999270bb50589323294c6e"}, + {file = "coverage-7.6.3-cp310-cp310-win32.whl", hash = "sha256:a3328c3e64ea4ab12b85999eb0779e6139295bbf5485f69d42cf794309e3d007"}, + {file = "coverage-7.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:bca4c8abc50d38f9773c1ec80d43f3768df2e8576807d1656016b9d3eeaa96fd"}, + {file = "coverage-7.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c51ef82302386d686feea1c44dbeef744585da16fcf97deea2a8d6c1556f519b"}, + {file = "coverage-7.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ca37993206402c6c35dc717f90d4c8f53568a8b80f0bf1a1b2b334f4d488fba"}, + {file = "coverage-7.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c77326300b839c44c3e5a8fe26c15b7e87b2f32dfd2fc9fee1d13604347c9b38"}, + {file = "coverage-7.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e484e479860e00da1f005cd19d1c5d4a813324e5951319ac3f3eefb497cc549"}, + {file = "coverage-7.6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c6c0f4d53ef603397fc894a895b960ecd7d44c727df42a8d500031716d4e8d2"}, + {file = "coverage-7.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:37be7b5ea3ff5b7c4a9db16074dc94523b5f10dd1f3b362a827af66a55198175"}, + {file = "coverage-7.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:43b32a06c47539fe275106b376658638b418c7cfdfff0e0259fbf877e845f14b"}, + {file = "coverage-7.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee77c7bef0724165e795b6b7bf9c4c22a9b8468a6bdb9c6b4281293c6b22a90f"}, + {file = "coverage-7.6.3-cp311-cp311-win32.whl", hash = "sha256:43517e1f6b19f610a93d8227e47790722c8bf7422e46b365e0469fc3d3563d97"}, + {file = "coverage-7.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:04f2189716e85ec9192df307f7c255f90e78b6e9863a03223c3b998d24a3c6c6"}, + {file = "coverage-7.6.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27bd5f18d8f2879e45724b0ce74f61811639a846ff0e5c0395b7818fae87aec6"}, + {file = "coverage-7.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d546cfa78844b8b9c1c0533de1851569a13f87449897bbc95d698d1d3cb2a30f"}, + {file = "coverage-7.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9975442f2e7a5cfcf87299c26b5a45266ab0696348420049b9b94b2ad3d40234"}, + {file = "coverage-7.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:583049c63106c0555e3ae3931edab5669668bbef84c15861421b94e121878d3f"}, + {file = "coverage-7.6.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2341a78ae3a5ed454d524206a3fcb3cec408c2a0c7c2752cd78b606a2ff15af4"}, + {file = "coverage-7.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a4fb91d5f72b7e06a14ff4ae5be625a81cd7e5f869d7a54578fc271d08d58ae3"}, + {file = "coverage-7.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e279f3db904e3b55f520f11f983cc8dc8a4ce9b65f11692d4718ed021ec58b83"}, + {file = "coverage-7.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aa23ce39661a3e90eea5f99ec59b763b7d655c2cada10729ed920a38bfc2b167"}, + {file = "coverage-7.6.3-cp312-cp312-win32.whl", hash = "sha256:52ac29cc72ee7e25ace7807249638f94c9b6a862c56b1df015d2b2e388e51dbd"}, + {file = "coverage-7.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:40e8b1983080439d4802d80b951f4a93d991ef3261f69e81095a66f86cf3c3c6"}, + {file = "coverage-7.6.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9134032f5aa445ae591c2ba6991d10136a1f533b1d2fa8f8c21126468c5025c6"}, + {file = "coverage-7.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:99670790f21a96665a35849990b1df447993880bb6463a0a1d757897f30da929"}, + {file = "coverage-7.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc7d6b380ca76f5e817ac9eef0c3686e7834c8346bef30b041a4ad286449990"}, + {file = "coverage-7.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7b26757b22faf88fcf232f5f0e62f6e0fd9e22a8a5d0d5016888cdfe1f6c1c4"}, + {file = "coverage-7.6.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c59d6a4a4633fad297f943c03d0d2569867bd5372eb5684befdff8df8522e39"}, + {file = "coverage-7.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f263b18692f8ed52c8de7f40a0751e79015983dbd77b16906e5b310a39d3ca21"}, + {file = "coverage-7.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:79644f68a6ff23b251cae1c82b01a0b51bc40c8468ca9585c6c4b1aeee570e0b"}, + {file = "coverage-7.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:71967c35828c9ff94e8c7d405469a1fb68257f686bca7c1ed85ed34e7c2529c4"}, + {file = "coverage-7.6.3-cp313-cp313-win32.whl", hash = "sha256:e266af4da2c1a4cbc6135a570c64577fd3e6eb204607eaff99d8e9b710003c6f"}, + {file = "coverage-7.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:ea52bd218d4ba260399a8ae4bb6b577d82adfc4518b93566ce1fddd4a49d1dce"}, + {file = "coverage-7.6.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8d4c6ea0f498c7c79111033a290d060c517853a7bcb2f46516f591dab628ddd3"}, + {file = "coverage-7.6.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:331b200ad03dbaa44151d74daeb7da2cf382db424ab923574f6ecca7d3b30de3"}, + {file = "coverage-7.6.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54356a76b67cf8a3085818026bb556545ebb8353951923b88292556dfa9f812d"}, + {file = "coverage-7.6.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebec65f5068e7df2d49466aab9128510c4867e532e07cb6960075b27658dca38"}, + {file = "coverage-7.6.3-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d33a785ea8354c480515e781554d3be582a86297e41ccbea627a5c632647f2cd"}, + {file = "coverage-7.6.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f7ddb920106bbbbcaf2a274d56f46956bf56ecbde210d88061824a95bdd94e92"}, + {file = "coverage-7.6.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:70d24936ca6c15a3bbc91ee9c7fc661132c6f4c9d42a23b31b6686c05073bde5"}, + {file = "coverage-7.6.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c30e42ea11badb147f0d2e387115b15e2bd8205a5ad70d6ad79cf37f6ac08c91"}, + {file = "coverage-7.6.3-cp313-cp313t-win32.whl", hash = "sha256:365defc257c687ce3e7d275f39738dcd230777424117a6c76043459db131dd43"}, + {file = "coverage-7.6.3-cp313-cp313t-win_amd64.whl", hash = "sha256:23bb63ae3f4c645d2d82fa22697364b0046fbafb6261b258a58587441c5f7bd0"}, + {file = "coverage-7.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:da29ceabe3025a1e5a5aeeb331c5b1af686daab4ff0fb4f83df18b1180ea83e2"}, + {file = "coverage-7.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df8c05a0f574d480947cba11b947dc41b1265d721c3777881da2fb8d3a1ddfba"}, + {file = "coverage-7.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec1e3b40b82236d100d259854840555469fad4db64f669ab817279eb95cd535c"}, + {file = "coverage-7.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4adeb878a374126f1e5cf03b87f66279f479e01af0e9a654cf6d1509af46c40"}, + {file = "coverage-7.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43d6a66e33b1455b98fc7312b124296dad97a2e191c80320587234a77b1b736e"}, + {file = "coverage-7.6.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1990b1f4e2c402beb317840030bb9f1b6a363f86e14e21b4212e618acdfce7f6"}, + {file = "coverage-7.6.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:12f9515d875859faedb4144fd38694a761cd2a61ef9603bf887b13956d0bbfbb"}, + {file = "coverage-7.6.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99ded130555c021d99729fabd4ddb91a6f4cc0707df4b1daf912c7850c373b13"}, + {file = "coverage-7.6.3-cp39-cp39-win32.whl", hash = "sha256:c3a79f56dee9136084cf84a6c7c4341427ef36e05ae6415bf7d787c96ff5eaa3"}, + {file = "coverage-7.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:aac7501ae73d4a02f4b7ac8fcb9dc55342ca98ffb9ed9f2dfb8a25d53eda0e4d"}, + {file = "coverage-7.6.3-pp39.pp310-none-any.whl", hash = "sha256:b9853509b4bf57ba7b1f99b9d866c422c9c5248799ab20e652bbb8a184a38181"}, + {file = "coverage-7.6.3.tar.gz", hash = "sha256:bb7d5fe92bd0dc235f63ebe9f8c6e0884f7360f88f3411bfed1350c872ef2054"}, ] [package.dependencies] @@ -711,38 +710,38 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "43.0.0" +version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, - {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, - {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, - {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, - {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, - {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, - {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, - {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, - {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, - {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, - {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, - {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, - {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, + {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, + {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, + {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, + {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, + {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, + {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, + {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, ] [package.dependencies] @@ -755,7 +754,7 @@ nox = ["nox"] pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] @@ -850,60 +849,68 @@ files = [ [[package]] name = "dearpygui" -version = "1.11.1" +version = "2.0.0" description = "DearPyGui: A simple Python GUI Toolkit" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "dearpygui-1.11.1-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:b668f28aab63d8ad0b2768add4e689bedb7480e8c3390edcce7a0f5d296fd61f"}, - {file = "dearpygui-1.11.1-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:39d099b1ca97fd7d36934a5187fc4cd868d4772e504290a70fc95eda03c5125d"}, - {file = "dearpygui-1.11.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:3ba12334d993b653df2d07fe34c93c4ec65e54c022066ba245cd596a18b43a68"}, - {file = "dearpygui-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:6cf4c44db1f016ff3eab367f7bde7f169bad5f2f90b974c202808112a69a2b15"}, - {file = "dearpygui-1.11.1-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:cc15cd13c1aeae2847ed9c4b2201169add3efdedf564eb706f5b5896ddaa5d8a"}, - {file = "dearpygui-1.11.1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:9eb7d581863d39543b213252041ed25856acbfa58c57291e6acb6ccbf0c2727b"}, - {file = "dearpygui-1.11.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:564ff3af657f7becd059b6611e162cc9cd8148befaf8aadb10e4fb76d57df3ef"}, - {file = "dearpygui-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:ac6e9bde61dcb3cc253da59e70fe2b743d3c3b5791d415eaa8d307f4517048ca"}, - {file = "dearpygui-1.11.1-cp312-cp312-macosx_10_6_x86_64.whl", hash = "sha256:ccf576117ed2159cd66b419458d060923c9dcebe7fe57c65b4f4c4889287845d"}, - {file = "dearpygui-1.11.1-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:1d632e1acdaa986a8c32b57112b84685b92d9a41f18580e14d463d7ed7a52673"}, - {file = "dearpygui-1.11.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ca4f7ba667f64ee682dfcb3399d9d43df6821b2d962b96b4fa4535de5776f538"}, - {file = "dearpygui-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:8ce9881a629de72e05ca8b1ce7cefcdd77b624eb7eba6f7d6629848d84a797f6"}, - {file = "dearpygui-1.11.1-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:39011ccb3a3ecfe3ebccfd8c4211c2c1446abd2865cbe4ccb67dc50a7a812bfb"}, - {file = "dearpygui-1.11.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e1dde63d20ac062530debee001ad649190a7e09622762601454c4191799f13b8"}, - {file = "dearpygui-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:23ce7ce8e5ba24d31bd6468cc43b56f8f257ace4dce3bc5fe449c546c340893a"}, - {file = "dearpygui-1.11.1-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:d22285f9a5f1377d87effd1f27020eec3ae0386f7c15a4893809909b82c62b1b"}, - {file = "dearpygui-1.11.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f632bd94772e00313d0956bb9f9822c3ebcb7aa93f135f09e2fa187f3b06cea8"}, - {file = "dearpygui-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:0c7c4849bc674e825750be69ee480450c3589c7d159955032776aaef5e7fda58"}, + {file = "dearpygui-2.0.0-cp310-cp310-macosx_10_6_x86_64.whl", hash = "sha256:6126eec4217de6dfbe0aef4b96a0f4b385f85dab538ee806d51c5f9a5ba77c6b"}, + {file = "dearpygui-2.0.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:340ddc3884740aabcddf696f984c1ff2a06b91050bf5030ab264dc9908f1329a"}, + {file = "dearpygui-2.0.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:68f749fcd36ffc9cef399fb64b0dab5a4075c63574150a163208f8204f778859"}, + {file = "dearpygui-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:d287233603338a811b59da0af8194ff7cd7b8da768c1d056fe17b6d8a7b36a6f"}, + {file = "dearpygui-2.0.0-cp311-cp311-macosx_10_6_x86_64.whl", hash = "sha256:ee81dd58b06161b5098e11fce5514f621f1fe7670c63711a4397cb1bc108dfe5"}, + {file = "dearpygui-2.0.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:5802886d4c44362764882b9339a0dbe85f9b445a98560f791acb164febc4df32"}, + {file = "dearpygui-2.0.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:8d5049aa54835a51cc304752a0831ad71a6ca05ee7a33e0b82f7e7e8c8ecda21"}, + {file = "dearpygui-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:73643b3528dd4b03cb22ad64afe960dc8ddd3023f211fd405eabb861fc4dd129"}, + {file = "dearpygui-2.0.0-cp312-cp312-macosx_10_6_x86_64.whl", hash = "sha256:f0383d74f628ae4622863afff84ab262c9f5163a769836eb470c7243dc9ced0c"}, + {file = "dearpygui-2.0.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:52c32da6911881564b6cbd95e110d6956095f7a417d2e0c12dcda8274c4fbe72"}, + {file = "dearpygui-2.0.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:d27f7e64a282c7f0c1387003ec3b247b2c3c1583aea9427283633ad508aa2da6"}, + {file = "dearpygui-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:29881d01e5d0cce0980a8d8b9761c74ff2f30d16aa800e6002a244bbc894b34e"}, + {file = "dearpygui-2.0.0-cp313-cp313-macosx_10_6_x86_64.whl", hash = "sha256:3bf0aa19baedb4f130b8de636d4644740ffd9b7008481794c574bf59240808dc"}, + {file = "dearpygui-2.0.0-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:ae6fc9aa3390b29387c2bc2bf3ac7a92c10eae2b479818171864fc29a7de344e"}, + {file = "dearpygui-2.0.0-cp313-cp313-manylinux1_x86_64.whl", hash = "sha256:f02b0ab56700a775d7e6446e3c424d5bed3386efe721a04518d02461851daadf"}, + {file = "dearpygui-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e3d52057f49773b10808962806711c3b3119e829d36407afb84ad50522edc9b0"}, + {file = "dearpygui-2.0.0-cp38-cp38-macosx_10_6_x86_64.whl", hash = "sha256:3aaa549d7e9b4b9e591cd785f9cdbe3650fea724ee099f774e066ad97c374c55"}, + {file = "dearpygui-2.0.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:400b0a209674dfaf3e223b5465838e1d9fd25102203eed81518ff842f9caf7f1"}, + {file = "dearpygui-2.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:52cabe531449804b35e1ac36e48e1cf9b784b1c1752395dabf95df8d607fc2d8"}, + {file = "dearpygui-2.0.0-cp39-cp39-macosx_10_6_x86_64.whl", hash = "sha256:751f58355631924b17b543db1c366d69ca056f050556952c23e051ebd1a8ac76"}, + {file = "dearpygui-2.0.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:9a3f0562d47e664c044bcb75868d7f3cc22456866f32f6b4bad22e377d4eef3a"}, + {file = "dearpygui-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:ffe10b14f836cea82881fb9f66e464877429ce3ff2fbc3e33d239881cd52bada"}, ] [[package]] name = "debugpy" -version = "1.8.5" +version = "1.8.7" description = "An implementation of the Debug Adapter Protocol for Python" optional = true python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.5-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7"}, - {file = "debugpy-1.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a"}, - {file = "debugpy-1.8.5-cp310-cp310-win32.whl", hash = "sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed"}, - {file = "debugpy-1.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e"}, - {file = "debugpy-1.8.5-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a"}, - {file = "debugpy-1.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b"}, - {file = "debugpy-1.8.5-cp311-cp311-win32.whl", hash = "sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408"}, - {file = "debugpy-1.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3"}, - {file = "debugpy-1.8.5-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156"}, - {file = "debugpy-1.8.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb"}, - {file = "debugpy-1.8.5-cp312-cp312-win32.whl", hash = "sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7"}, - {file = "debugpy-1.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c"}, - {file = "debugpy-1.8.5-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:3df6692351172a42af7558daa5019651f898fc67450bf091335aa8a18fbf6f3a"}, - {file = "debugpy-1.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd04a73eb2769eb0bfe43f5bfde1215c5923d6924b9b90f94d15f207a402226"}, - {file = "debugpy-1.8.5-cp38-cp38-win32.whl", hash = "sha256:8f913ee8e9fcf9d38a751f56e6de12a297ae7832749d35de26d960f14280750a"}, - {file = "debugpy-1.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:a697beca97dad3780b89a7fb525d5e79f33821a8bc0c06faf1f1289e549743cf"}, - {file = "debugpy-1.8.5-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:0a1029a2869d01cb777216af8c53cda0476875ef02a2b6ff8b2f2c9a4b04176c"}, - {file = "debugpy-1.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84c276489e141ed0b93b0af648eef891546143d6a48f610945416453a8ad406"}, - {file = "debugpy-1.8.5-cp39-cp39-win32.whl", hash = "sha256:ad84b7cde7fd96cf6eea34ff6c4a1b7887e0fe2ea46e099e53234856f9d99a34"}, - {file = "debugpy-1.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:7b0fe36ed9d26cb6836b0a51453653f8f2e347ba7348f2bbfe76bfeb670bfb1c"}, - {file = "debugpy-1.8.5-py2.py3-none-any.whl", hash = "sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44"}, - {file = "debugpy-1.8.5.zip", hash = "sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0"}, + {file = "debugpy-1.8.7-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:95fe04a573b8b22896c404365e03f4eda0ce0ba135b7667a1e57bd079793b96b"}, + {file = "debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:628a11f4b295ffb4141d8242a9bb52b77ad4a63a2ad19217a93be0f77f2c28c9"}, + {file = "debugpy-1.8.7-cp310-cp310-win32.whl", hash = "sha256:85ce9c1d0eebf622f86cc68618ad64bf66c4fc3197d88f74bb695a416837dd55"}, + {file = "debugpy-1.8.7-cp310-cp310-win_amd64.whl", hash = "sha256:29e1571c276d643757ea126d014abda081eb5ea4c851628b33de0c2b6245b037"}, + {file = "debugpy-1.8.7-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:caf528ff9e7308b74a1749c183d6808ffbedbb9fb6af78b033c28974d9b8831f"}, + {file = "debugpy-1.8.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba1d078cf2e1e0b8402e6bda528bf8fda7ccd158c3dba6c012b7897747c41a0"}, + {file = "debugpy-1.8.7-cp311-cp311-win32.whl", hash = "sha256:171899588bcd412151e593bd40d9907133a7622cd6ecdbdb75f89d1551df13c2"}, + {file = "debugpy-1.8.7-cp311-cp311-win_amd64.whl", hash = "sha256:6e1c4ffb0c79f66e89dfd97944f335880f0d50ad29525dc792785384923e2211"}, + {file = "debugpy-1.8.7-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:4d27d842311353ede0ad572600c62e4bcd74f458ee01ab0dd3a1a4457e7e3706"}, + {file = "debugpy-1.8.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c1fd62ae0356e194f3e7b7a92acd931f71fe81c4b3be2c17a7b8a4b546ec2"}, + {file = "debugpy-1.8.7-cp312-cp312-win32.whl", hash = "sha256:2f729228430ef191c1e4df72a75ac94e9bf77413ce5f3f900018712c9da0aaca"}, + {file = "debugpy-1.8.7-cp312-cp312-win_amd64.whl", hash = "sha256:45c30aaefb3e1975e8a0258f5bbd26cd40cde9bfe71e9e5a7ac82e79bad64e39"}, + {file = "debugpy-1.8.7-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:d050a1ec7e925f514f0f6594a1e522580317da31fbda1af71d1530d6ea1f2b40"}, + {file = "debugpy-1.8.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f4349a28e3228a42958f8ddaa6333d6f8282d5edaea456070e48609c5983b7"}, + {file = "debugpy-1.8.7-cp313-cp313-win32.whl", hash = "sha256:11ad72eb9ddb436afb8337891a986302e14944f0f755fd94e90d0d71e9100bba"}, + {file = "debugpy-1.8.7-cp313-cp313-win_amd64.whl", hash = "sha256:2efb84d6789352d7950b03d7f866e6d180284bc02c7e12cb37b489b7083d81aa"}, + {file = "debugpy-1.8.7-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:4b908291a1d051ef3331484de8e959ef3e66f12b5e610c203b5b75d2725613a7"}, + {file = "debugpy-1.8.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da8df5b89a41f1fd31503b179d0a84a5fdb752dddd5b5388dbd1ae23cda31ce9"}, + {file = "debugpy-1.8.7-cp38-cp38-win32.whl", hash = "sha256:b12515e04720e9e5c2216cc7086d0edadf25d7ab7e3564ec8b4521cf111b4f8c"}, + {file = "debugpy-1.8.7-cp38-cp38-win_amd64.whl", hash = "sha256:93176e7672551cb5281577cdb62c63aadc87ec036f0c6a486f0ded337c504596"}, + {file = "debugpy-1.8.7-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:90d93e4f2db442f8222dec5ec55ccfc8005821028982f1968ebf551d32b28907"}, + {file = "debugpy-1.8.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6db2a370e2700557a976eaadb16243ec9c91bd46f1b3bb15376d7aaa7632c81"}, + {file = "debugpy-1.8.7-cp39-cp39-win32.whl", hash = "sha256:a6cf2510740e0c0b4a40330640e4b454f928c7b99b0c9dbf48b11efba08a8cda"}, + {file = "debugpy-1.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:6a9d9d6d31846d8e34f52987ee0f1a904c7baa4912bf4843ab39dadf9b8f3e0d"}, + {file = "debugpy-1.8.7-py2.py3-none-any.whl", hash = "sha256:57b00de1c8d2c84a61b90880f7e5b6deaf4c312ecbde3a0e8912f2a56c4ac9ae"}, + {file = "debugpy-1.8.7.zip", hash = "sha256:18b8f731ed3e2e1df8e9cdaa23fb1fc9c24e570cd0081625308ec51c82efe42e"}, ] [[package]] @@ -947,13 +954,13 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] [[package]] name = "distlib" -version = "0.3.8" +version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, ] [[package]] @@ -997,13 +1004,13 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] [[package]] name = "executing" -version = "2.0.1" +version = "2.1.0" description = "Get the currently executing AST node of a frame, and other information" optional = true -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, - {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, + {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, + {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, ] [package.extras] @@ -1025,19 +1032,19 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.15.4" +version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"}, - {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"}, + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"] -typing = ["typing-extensions (>=4.8)"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "flake8" @@ -1072,53 +1079,59 @@ pydocstyle = ">=2.1" [[package]] name = "fonttools" -version = "4.53.1" +version = "4.54.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.53.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0679a30b59d74b6242909945429dbddb08496935b82f91ea9bf6ad240ec23397"}, - {file = "fonttools-4.53.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8bf06b94694251861ba7fdeea15c8ec0967f84c3d4143ae9daf42bbc7717fe3"}, - {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b96cd370a61f4d083c9c0053bf634279b094308d52fdc2dd9a22d8372fdd590d"}, - {file = "fonttools-4.53.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c7c5aa18dd3b17995898b4a9b5929d69ef6ae2af5b96d585ff4005033d82f0"}, - {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e013aae589c1c12505da64a7d8d023e584987e51e62006e1bb30d72f26522c41"}, - {file = "fonttools-4.53.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9efd176f874cb6402e607e4cc9b4a9cd584d82fc34a4b0c811970b32ba62501f"}, - {file = "fonttools-4.53.1-cp310-cp310-win32.whl", hash = "sha256:c8696544c964500aa9439efb6761947393b70b17ef4e82d73277413f291260a4"}, - {file = "fonttools-4.53.1-cp310-cp310-win_amd64.whl", hash = "sha256:8959a59de5af6d2bec27489e98ef25a397cfa1774b375d5787509c06659b3671"}, - {file = "fonttools-4.53.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da33440b1413bad53a8674393c5d29ce64d8c1a15ef8a77c642ffd900d07bfe1"}, - {file = "fonttools-4.53.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ff7e5e9bad94e3a70c5cd2fa27f20b9bb9385e10cddab567b85ce5d306ea923"}, - {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6e7170d675d12eac12ad1a981d90f118c06cf680b42a2d74c6c931e54b50719"}, - {file = "fonttools-4.53.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee32ea8765e859670c4447b0817514ca79054463b6b79784b08a8df3a4d78e3"}, - {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6e08f572625a1ee682115223eabebc4c6a2035a6917eac6f60350aba297ccadb"}, - {file = "fonttools-4.53.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b21952c092ffd827504de7e66b62aba26fdb5f9d1e435c52477e6486e9d128b2"}, - {file = "fonttools-4.53.1-cp311-cp311-win32.whl", hash = "sha256:9dfdae43b7996af46ff9da520998a32b105c7f098aeea06b2226b30e74fbba88"}, - {file = "fonttools-4.53.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4d0096cb1ac7a77b3b41cd78c9b6bc4a400550e21dc7a92f2b5ab53ed74eb02"}, - {file = "fonttools-4.53.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d92d3c2a1b39631a6131c2fa25b5406855f97969b068e7e08413325bc0afba58"}, - {file = "fonttools-4.53.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3b3c8ebafbee8d9002bd8f1195d09ed2bd9ff134ddec37ee8f6a6375e6a4f0e8"}, - {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f029c095ad66c425b0ee85553d0dc326d45d7059dbc227330fc29b43e8ba60"}, - {file = "fonttools-4.53.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f5e6c3510b79ea27bb1ebfcc67048cde9ec67afa87c7dd7efa5c700491ac7f"}, - {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f677ce218976496a587ab17140da141557beb91d2a5c1a14212c994093f2eae2"}, - {file = "fonttools-4.53.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9e6ceba2a01b448e36754983d376064730690401da1dd104ddb543519470a15f"}, - {file = "fonttools-4.53.1-cp312-cp312-win32.whl", hash = "sha256:791b31ebbc05197d7aa096bbc7bd76d591f05905d2fd908bf103af4488e60670"}, - {file = "fonttools-4.53.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ed170b5e17da0264b9f6fae86073be3db15fa1bd74061c8331022bca6d09bab"}, - {file = "fonttools-4.53.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c818c058404eb2bba05e728d38049438afd649e3c409796723dfc17cd3f08749"}, - {file = "fonttools-4.53.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:651390c3b26b0c7d1f4407cad281ee7a5a85a31a110cbac5269de72a51551ba2"}, - {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e54f1bba2f655924c1138bbc7fa91abd61f45c68bd65ab5ed985942712864bbb"}, - {file = "fonttools-4.53.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9cd19cf4fe0595ebdd1d4915882b9440c3a6d30b008f3cc7587c1da7b95be5f"}, - {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2af40ae9cdcb204fc1d8f26b190aa16534fcd4f0df756268df674a270eab575d"}, - {file = "fonttools-4.53.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:35250099b0cfb32d799fb5d6c651220a642fe2e3c7d2560490e6f1d3f9ae9169"}, - {file = "fonttools-4.53.1-cp38-cp38-win32.whl", hash = "sha256:f08df60fbd8d289152079a65da4e66a447efc1d5d5a4d3f299cdd39e3b2e4a7d"}, - {file = "fonttools-4.53.1-cp38-cp38-win_amd64.whl", hash = "sha256:7b6b35e52ddc8fb0db562133894e6ef5b4e54e1283dff606fda3eed938c36fc8"}, - {file = "fonttools-4.53.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75a157d8d26c06e64ace9df037ee93a4938a4606a38cb7ffaf6635e60e253b7a"}, - {file = "fonttools-4.53.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4824c198f714ab5559c5be10fd1adf876712aa7989882a4ec887bf1ef3e00e31"}, - {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becc5d7cb89c7b7afa8321b6bb3dbee0eec2b57855c90b3e9bf5fb816671fa7c"}, - {file = "fonttools-4.53.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84ec3fb43befb54be490147b4a922b5314e16372a643004f182babee9f9c3407"}, - {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:73379d3ffdeecb376640cd8ed03e9d2d0e568c9d1a4e9b16504a834ebadc2dfb"}, - {file = "fonttools-4.53.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:02569e9a810f9d11f4ae82c391ebc6fb5730d95a0657d24d754ed7763fb2d122"}, - {file = "fonttools-4.53.1-cp39-cp39-win32.whl", hash = "sha256:aae7bd54187e8bf7fd69f8ab87b2885253d3575163ad4d669a262fe97f0136cb"}, - {file = "fonttools-4.53.1-cp39-cp39-win_amd64.whl", hash = "sha256:e5b708073ea3d684235648786f5f6153a48dc8762cdfe5563c57e80787c29fbb"}, - {file = "fonttools-4.53.1-py3-none-any.whl", hash = "sha256:f1f8758a2ad110bd6432203a344269f445a2907dc24ef6bccfd0ac4e14e0d71d"}, - {file = "fonttools-4.53.1.tar.gz", hash = "sha256:e128778a8e9bc11159ce5447f76766cefbd876f44bd79aff030287254e4752c4"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44"}, + {file = "fonttools-4.54.1-cp310-cp310-win32.whl", hash = "sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02"}, + {file = "fonttools-4.54.1-cp310-cp310-win_amd64.whl", hash = "sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d"}, + {file = "fonttools-4.54.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5419771b64248484299fa77689d4f3aeed643ea6630b2ea750eeab219588ba20"}, + {file = "fonttools-4.54.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:301540e89cf4ce89d462eb23a89464fef50915255ece765d10eee8b2bf9d75b2"}, + {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ae5091547e74e7efecc3cbf8e75200bc92daaeb88e5433c5e3e95ea8ce5aa7"}, + {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82834962b3d7c5ca98cb56001c33cf20eb110ecf442725dc5fdf36d16ed1ab07"}, + {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d26732ae002cc3d2ecab04897bb02ae3f11f06dd7575d1df46acd2f7c012a8d8"}, + {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58974b4987b2a71ee08ade1e7f47f410c367cdfc5a94fabd599c88165f56213a"}, + {file = "fonttools-4.54.1-cp311-cp311-win32.whl", hash = "sha256:ab774fa225238986218a463f3fe151e04d8c25d7de09df7f0f5fce27b1243dbc"}, + {file = "fonttools-4.54.1-cp311-cp311-win_amd64.whl", hash = "sha256:07e005dc454eee1cc60105d6a29593459a06321c21897f769a281ff2d08939f6"}, + {file = "fonttools-4.54.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d"}, + {file = "fonttools-4.54.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08"}, + {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263"}, + {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab"}, + {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d"}, + {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714"}, + {file = "fonttools-4.54.1-cp312-cp312-win32.whl", hash = "sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac"}, + {file = "fonttools-4.54.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e"}, + {file = "fonttools-4.54.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff"}, + {file = "fonttools-4.54.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb"}, + {file = "fonttools-4.54.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a"}, + {file = "fonttools-4.54.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c"}, + {file = "fonttools-4.54.1-cp313-cp313-win32.whl", hash = "sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58"}, + {file = "fonttools-4.54.1-cp313-cp313-win_amd64.whl", hash = "sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d"}, + {file = "fonttools-4.54.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ed2f80ca07025551636c555dec2b755dd005e2ea8fbeb99fc5cdff319b70b23b"}, + {file = "fonttools-4.54.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9dc080e5a1c3b2656caff2ac2633d009b3a9ff7b5e93d0452f40cd76d3da3b3c"}, + {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d152d1be65652fc65e695e5619e0aa0982295a95a9b29b52b85775243c06556"}, + {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8583e563df41fdecef31b793b4dd3af8a9caa03397be648945ad32717a92885b"}, + {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0d1d353ef198c422515a3e974a1e8d5b304cd54a4c2eebcae708e37cd9eeffb1"}, + {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fda582236fee135d4daeca056c8c88ec5f6f6d88a004a79b84a02547c8f57386"}, + {file = "fonttools-4.54.1-cp38-cp38-win32.whl", hash = "sha256:e7d82b9e56716ed32574ee106cabca80992e6bbdcf25a88d97d21f73a0aae664"}, + {file = "fonttools-4.54.1-cp38-cp38-win_amd64.whl", hash = "sha256:ada215fd079e23e060157aab12eba0d66704316547f334eee9ff26f8c0d7b8ab"}, + {file = "fonttools-4.54.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f5b8a096e649768c2f4233f947cf9737f8dbf8728b90e2771e2497c6e3d21d13"}, + {file = "fonttools-4.54.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e10d2e0a12e18f4e2dd031e1bf7c3d7017be5c8dbe524d07706179f355c5dac"}, + {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31c32d7d4b0958600eac75eaf524b7b7cb68d3a8c196635252b7a2c30d80e986"}, + {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c39287f5c8f4a0c5a55daf9eaf9ccd223ea59eed3f6d467133cc727d7b943a55"}, + {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a7a310c6e0471602fe3bf8efaf193d396ea561486aeaa7adc1f132e02d30c4b9"}, + {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d3b659d1029946f4ff9b6183984578041b520ce0f8fb7078bb37ec7445806b33"}, + {file = "fonttools-4.54.1-cp39-cp39-win32.whl", hash = "sha256:e96bc94c8cda58f577277d4a71f51c8e2129b8b36fd05adece6320dd3d57de8a"}, + {file = "fonttools-4.54.1-cp39-cp39-win_amd64.whl", hash = "sha256:e8a4b261c1ef91e7188a30571be6ad98d1c6d9fa2427244c545e2fa0a2494dd7"}, + {file = "fonttools-4.54.1-py3-none-any.whl", hash = "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd"}, + {file = "fonttools-4.54.1.tar.gz", hash = "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285"}, ] [package.extras] @@ -1281,13 +1294,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.5" +version = "1.0.6" description = "A minimal low-level HTTP client." optional = true python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, + {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, + {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, ] [package.dependencies] @@ -1298,7 +1311,7 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] +trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" @@ -1327,13 +1340,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "identify" -version = "2.6.0" +version = "2.6.1" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0"}, - {file = "identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf"}, + {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, + {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, ] [package.extras] @@ -1341,15 +1354,18 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.8" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" files = [ - {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"}, - {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "imagesize" version = "1.4.1" @@ -1363,32 +1379,36 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.4.0" +version = "8.5.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, - {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, + {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, + {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, ] [package.dependencies] -zipp = ">=0.5" +zipp = ">=3.20" [package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] [[package]] name = "importlib-resources" -version = "6.4.4" +version = "6.4.5" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.4.4-py3-none-any.whl", hash = "sha256:dda242603d1c9cd836c3368b1174ed74cb4049ecd209e7a1a0104620c18c5c11"}, - {file = "importlib_resources-6.4.4.tar.gz", hash = "sha256:20600c8b7361938dc0bb2d5ec0297802e575df486f5a544fa414da65e13721f7"}, + {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, + {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, ] [package.dependencies] @@ -1614,13 +1634,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.12.1" +version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, - {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, + {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, + {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, ] [package.dependencies] @@ -1628,13 +1648,13 @@ referencing = ">=0.31.0" [[package]] name = "jupyter-client" -version = "8.6.2" +version = "8.6.3" description = "Jupyter protocol implementation and client libraries" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.6.2-py3-none-any.whl", hash = "sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f"}, - {file = "jupyter_client-8.6.2.tar.gz", hash = "sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df"}, + {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, + {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, ] [package.dependencies] @@ -1838,140 +1858,155 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v [[package]] name = "kiwisolver" -version = "1.4.5" +version = "1.4.7" description = "A fast implementation of the Cassowary constraint solver" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, + {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, ] [[package]] name = "manimpango" -version = "0.5.0" +version = "0.6.0" description = "Bindings for Pango for using with Manim." optional = false python-versions = ">=3.8" files = [ - {file = "ManimPango-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b3309536038e11a4020bf5422d36b691e5583d38f616311c75527faa853fa948"}, - {file = "ManimPango-0.5.0-cp310-cp310-win32.whl", hash = "sha256:7e301f0d2ceeb05b82dbb5ddd1e2397b6de7ef4ab556d04c0765eb29f18be981"}, - {file = "ManimPango-0.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:26053a59e352c11e33fa224be6fde095a08c9db2665895ada7689fdeb225064c"}, - {file = "ManimPango-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8a866a03c8a569dfaf08035748aea5c56f5e729d12682aae5d25fbe837a6270"}, - {file = "ManimPango-0.5.0-cp311-cp311-win32.whl", hash = "sha256:5de05ac673b1ac597cc3e4e0e05756195b387f8f96b81cd03767a9f12f8af3f4"}, - {file = "ManimPango-0.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:86e68c085e455d4bd607c2f63fcce41d1496a873dde29c413a3fbd98ff99c258"}, - {file = "ManimPango-0.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bf4a09fe1989763ea041fcce044ce501d89678bcc14084949f6792fc3b204517"}, - {file = "ManimPango-0.5.0-cp312-cp312-win32.whl", hash = "sha256:0b5e47755cce7848fa268b5f77f17fc4fe363d30f5412fef845560df26dece82"}, - {file = "ManimPango-0.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:aef7151c210fce42518eff7a00e4b07d497a2516e13945d56b9b4a6427fae3f6"}, - {file = "ManimPango-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f1b614dc33b1cc012ef38a49b04def005e80a14592bdd389be91a9073a71be30"}, - {file = "ManimPango-0.5.0-cp38-cp38-win32.whl", hash = "sha256:d135fbc2049b3cb22fa941e7333c10a42b29aa080871dd4e80d169da2337b797"}, - {file = "ManimPango-0.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:9bb032625d5c663c4727bae61870e3c16696278c569c98a094b14953f22a70c8"}, - {file = "ManimPango-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d58e736ccf2afb3398c42ad1d478b84176785ad19cb994dfc9575030bfd040f"}, - {file = "ManimPango-0.5.0-cp39-cp39-win32.whl", hash = "sha256:8c453e9511d5888c92aa1f7b120b7f3318fc21fd7a4862156c9b094986f2e17d"}, - {file = "ManimPango-0.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:b81d815b1a5e78376ae9b6aa2d7606d38cc19e31eb89480471462bbdf0fcd3c7"}, - {file = "ManimPango-0.5.0.tar.gz", hash = "sha256:299913bbccb0f15954b64401cf9df24607e1a01edda589ea77de1ed4cc2bc284"}, + {file = "ManimPango-0.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:025605af4e789dad2d8895b0c820d4e5c8001929a2998a4a694518869f32e5f8"}, + {file = "ManimPango-0.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:72d70b8110f1fb5641fe0d1c9483d10aa7cd190c099490ce809acfab3dce6b69"}, + {file = "ManimPango-0.6.0-cp310-cp310-win32.whl", hash = "sha256:287205a4c82e35b84c259a5f03068295d544b105d387457cb670c167e2a13598"}, + {file = "ManimPango-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:b1e1a86ed9e814cdd230958f7c9bb874400f6808bff29e6b76abc55faa9b4899"}, + {file = "ManimPango-0.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:af1f631bc8fd925db351e0c9498aec8bf6639dcd3ad99ca5fce73766ad137640"}, + {file = "ManimPango-0.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:92d4c20845eb5920f5487e0929ac3dab517f623d1093ef1524ab7679b01b11fb"}, + {file = "ManimPango-0.6.0-cp311-cp311-win32.whl", hash = "sha256:f6ba4d65bbc157705a92cb7f07bad0d8a82a392cec8b23347fa2e2f756793fbb"}, + {file = "ManimPango-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:386c4ea41cfbab2d68b1ccc982510cdd2a9aef25e63c92f6ac7d0dee48e3513b"}, + {file = "ManimPango-0.6.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9d10bf902dbb66c98f28909ac9327296da141eaa696986a59b3459e3358d9a34"}, + {file = "ManimPango-0.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6ab751239d82233d9c9ea1aa8f9cb23257733ee0607e82a76abc0cd75dde66e5"}, + {file = "ManimPango-0.6.0-cp312-cp312-win32.whl", hash = "sha256:7a8e2c164e7f03e2152e94fd5bf597e977ef67fbbf1031c72f2254479fc892af"}, + {file = "ManimPango-0.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:061fd61a9f27df0c8ed75beb1fa4e5c06d5186eb37a5830a852aa3ac0737fcfe"}, + {file = "ManimPango-0.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5156dc1fa2a6321f64a4110aa9dbe0c5ba507839f947fa3dfc72b5c63d729c88"}, + {file = "ManimPango-0.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:67809f65ec10397361a2650069ccac9fcf64babf75daf58eb38d9bcfb49e968b"}, + {file = "ManimPango-0.6.0-cp313-cp313-win32.whl", hash = "sha256:ba6279fd087ac3ac0a64c24a8b47fa0bdf0c8351c177cd07e3e793252899bd2d"}, + {file = "ManimPango-0.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:bb13f56a41ba251f70fd57643dc42cee689a1ebbec5eaf305722c7100008e253"}, + {file = "ManimPango-0.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c88297f21091fb4031173f66bc55ea4e11d1df4412ba4edf3a5ccdb06dbf2c0f"}, + {file = "ManimPango-0.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5c0c1bb36588d4951d5560ce1ee6831f23f0f7d22c93b4fd9dcf0752908d9d57"}, + {file = "ManimPango-0.6.0-cp39-cp39-win32.whl", hash = "sha256:ff9e515f9a79f7010c68efd9da19d5c11ba33bd139d1c53b0a18b73d9f20ce7d"}, + {file = "ManimPango-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:93ae1b0f2fd4b4f1774dd5b2f4a3b834043d5ee42efc3dfb351755f4f548059d"}, + {file = "manimpango-0.6.0.tar.gz", hash = "sha256:d959708e5c05e87317b37df5f6c5258aa9d1ed694a0b25b19d6a4f861841e191"}, ] [[package]] @@ -2048,71 +2083,72 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.5" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] [[package]] @@ -2206,13 +2242,13 @@ files = [ [[package]] name = "mdit-py-plugins" -version = "0.4.1" +version = "0.4.2" description = "Collection of plugins for markdown-it-py" optional = false python-versions = ">=3.8" files = [ - {file = "mdit_py_plugins-0.4.1-py3-none-any.whl", hash = "sha256:1020dfe4e6bfc2c79fb49ae4e3f5b297f5ccd20f010187acc52af2921e27dc6a"}, - {file = "mdit_py_plugins-0.4.1.tar.gz", hash = "sha256:834b8ac23d1cd60cec703646ffd22ae97b7955a6d596eb1d304be1e251ae499c"}, + {file = "mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"}, + {file = "mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5"}, ] [package.dependencies] @@ -2247,75 +2283,60 @@ files = [ [[package]] name = "moderngl" -version = "5.11.1" +version = "5.12.0" description = "ModernGL: High performance rendering for Python 3" optional = false python-versions = ">=3.7" files = [ - {file = "moderngl-5.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8754cc7783b14c3617533b82028cb9addb93c48569a6f994e1be0087306bcb31"}, - {file = "moderngl-5.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9719302fed84f3887ec2fa1bb5a5115977396c2140234b45a269a6a0a5222bee"}, - {file = "moderngl-5.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ef433f9f76346750c1bbfad16028f60c31cef9a35e12a1ce28265dd3eb8582d"}, - {file = "moderngl-5.11.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:37aa24fe5fca3e6fefe28e1d0fc15f182ded6a840e086d540a691db2a1ec27d7"}, - {file = "moderngl-5.11.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e20b599fb1d484b7ad354cf454c603a8d5ecdf38702592c5653bb4a840f77a20"}, - {file = "moderngl-5.11.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0c6e70210fdfd29ce2ab1660a3e6f51ce2fbbec03b446bba260c758ab51c4a1"}, - {file = "moderngl-5.11.1-cp310-cp310-win32.whl", hash = "sha256:49a7ad002c8df945fc143a386ed08689aae9ae9c18d66731c60d51c7a1727833"}, - {file = "moderngl-5.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:6627709ffdb5636705ac34b2a669ae76c463c275c821487972c73ad9c2302b47"}, - {file = "moderngl-5.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fa88450d7519dedcd448564ca80ceed130b8d64e044d50783e5796f29fa0c1bf"}, - {file = "moderngl-5.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:760d75e83519138dedc6570c115c94684a68107b6a33a6bec11ccea04ee65ab9"}, - {file = "moderngl-5.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b81378b6a8adacee683c0cbc2ec68903a6b0799cc6f3b6ee3de0080b705f51ce"}, - {file = "moderngl-5.11.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51d1a4f3893b5f79598e2078949ada58dc8d10dab194b917c2c60a67c0980c88"}, - {file = "moderngl-5.11.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c37f5c57c7f613d47473c1d7f5f7cbf931ed669c6be388fcc5b36e265041d421"}, - {file = "moderngl-5.11.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fb888b4d0723f0d5ff62f238b50324970206a42ed1313d3d36e2c4fbda3b7573"}, - {file = "moderngl-5.11.1-cp311-cp311-win32.whl", hash = "sha256:1e62f2b0b8239d254bc990aafb91f6a5b38111fe71dcfad7c605dcb84409d009"}, - {file = "moderngl-5.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:02a25ce22d9c402c6eb5ad31539a06367ac78ca6953ffb378495f03839a00129"}, - {file = "moderngl-5.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6590f2252c3d96774664c3c300f5448185c6ec7d059bf86c9ec185c78633aa9"}, - {file = "moderngl-5.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:350ff72d2bc758c47147bea327ca4da34d0b5855c5de622abe0aa4a9b91b5dce"}, - {file = "moderngl-5.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d37da28ed9c186984051fe909dbfc8a8e79ef8227bcbb2cf460f59ee876eb6c"}, - {file = "moderngl-5.11.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1fb74d8a4f20482934cd179c3bfe16693bb8af7f34d52e125f7eb2d568d7fc6"}, - {file = "moderngl-5.11.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5b72ec39d0f300588f60b49621c3ae64efd4853189c364427d042797e101ce6f"}, - {file = "moderngl-5.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fd7c445599becbf3802156f9dfa49b85677bf15b7ff54187c4e4765bb7b1f972"}, - {file = "moderngl-5.11.1-cp312-cp312-win32.whl", hash = "sha256:1b863dcc77d3214f96632bd2263f465c2969a9f28f31c97b098116bacb4cb12f"}, - {file = "moderngl-5.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:bdaffc17e36e49be866fe8f2890645019b216c3dc4cea1a927f26d150b3e560b"}, - {file = "moderngl-5.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e5cd020123fabafba341f152f6455ddeb2a770c349454917ccd6bc25c0e990fb"}, - {file = "moderngl-5.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:288ac62a661045cebf9ef87eb3f44aeae76abcf465dc998d4bd9b51eb0a0d679"}, - {file = "moderngl-5.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5acbd182e15b4f33752437acc98efda121969e45a69b76b2ab3149b7d2231b1"}, - {file = "moderngl-5.11.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c54769f410734a296ad1a155f326ef3f28d6a4105f41baeb0fb216ac01775c9b"}, - {file = "moderngl-5.11.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f2549b355383fe514813c619b81ef78c073c31d3841e7e714e6d5a389b837c6d"}, - {file = "moderngl-5.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ba28222cd796b43d5883982b0535911e2f4020221d483ea3fad36036c92e4d3b"}, - {file = "moderngl-5.11.1-cp313-cp313-win32.whl", hash = "sha256:3772c0ee3d24758e911c426e476f234d2c9f9f957b3da0ff7a10ba33720e5ca8"}, - {file = "moderngl-5.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:9dc7a231f42c15acc53a8d988b6914a8a80e2b477de5fac6db25c2f4710bd9ed"}, - {file = "moderngl-5.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a469bfaaa0a392843de27663ca827778a92b9381612138fbe8221c4128bbfed8"}, - {file = "moderngl-5.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:261ca9ddb23143a7dad99cbb38a08d6d34aa3cb771844ad89c0844c270450b56"}, - {file = "moderngl-5.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7e30eae3a184d117a50174801aaaa0b72a7a7f27521edb53f31eadf0176f8d0"}, - {file = "moderngl-5.11.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8aeb587884944f2bb689efbd60447cb9a395cc672b4a5c9a0c6bcafb8a31919"}, - {file = "moderngl-5.11.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c238303a38d5333f3d13fc228a046d5a19623a446fde736b03e1fe4db970dd39"}, - {file = "moderngl-5.11.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3da11d23c3fcf8f4d0331225a2a9040a6273d5ebba85d973ce85c13ced385b07"}, - {file = "moderngl-5.11.1-cp38-cp38-win32.whl", hash = "sha256:062b175b9c9c786c469eb07be09b03af43f204fad993236539e15c2bb598c8d1"}, - {file = "moderngl-5.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:e4d233cff158ed27b6c39a8de2aae9989e2b520f9945e4bc91e11524a8643da9"}, - {file = "moderngl-5.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24334196edf9a0e30fc8f82ec608abd317264d768e71759ada86e7c99034fd0e"}, - {file = "moderngl-5.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b091918c1c10966d31f4895cbf36b0b06fd8ba88aee57e140ea4ca8378874b5"}, - {file = "moderngl-5.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34e7a7b5a478eb27256511c1adffccd318fb5fe7e7ea9c261d611b6dd19e8e61"}, - {file = "moderngl-5.11.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbf75e5f244da582d072dccc06bf7b2407480ed30571c52ce01d6fdb13c391e6"}, - {file = "moderngl-5.11.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2e1a2a70c45aefb69f3c2d4fb05dc04cd94db24539d18fd04d25af4539b15ff4"}, - {file = "moderngl-5.11.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e43bdfddc36846a46c007dcff839c1365816ed54f98c027a713485974cfe183f"}, - {file = "moderngl-5.11.1-cp39-cp39-win32.whl", hash = "sha256:708486834bd6f8e1918cd608d2a94f2566c3b3037054b8ac367e6816f2cad73c"}, - {file = "moderngl-5.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:57a9b3593a52be166a68a852c9818c5408f19f6246d9b347d95bc950c32df4f7"}, - {file = "moderngl-5.11.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:07682edfbe78fded9a2ea15542959a1986dff9a69bbe8c19e803b3b5a0c8f059"}, - {file = "moderngl-5.11.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b75646d9310f009e9d22bfce5168f9d6fd7b0d2fb9cdc44be8565b2fb4e5c30"}, - {file = "moderngl-5.11.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a65f71a590b6175bdc032a07abad953b18396853351c11c64755fb4bff8657ba"}, - {file = "moderngl-5.11.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:011eb57c6d49277ee44b719b1efbba7546a9b76251a09875da1b29e1268e4bf3"}, - {file = "moderngl-5.11.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a955aa62441fa80fd187b7ca854f576903952f5eae3c3bbb756a057a5fc81da9"}, - {file = "moderngl-5.11.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:42c478e3843ce5fd1cb84ede3c43f1037b7ff1908b25ec7d1ff4a37d62bb0fdf"}, - {file = "moderngl-5.11.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:2233b106e145530f7d633b699f033760c5eab1d367fc6d7044348821cf11771b"}, - {file = "moderngl-5.11.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c27949cca775dfe71519663336217d9226d5bd2c5a8c697dcc25826b24e1f6a"}, - {file = "moderngl-5.11.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a0c3183529744a86a1dd2591b724f3b665851fe1704e575cec8ba1be209db7f"}, - {file = "moderngl-5.11.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2629f73225b8dfa1f139c45df044408374b587f1257f0306f305667c833a30a4"}, - {file = "moderngl-5.11.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:93edd71c259e045bea3499adf0eb833fd738c5db72acd43aa834daa8a3ff8d2a"}, - {file = "moderngl-5.11.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:8c1cc7052f903357e26b7fd1b8f5a66baf89e8612483240b00ab2d40b38e2a03"}, - {file = "moderngl-5.11.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07046d1cc7bfb2d417885a800f6371c224d44f0aa40beb7b3aa2f03bc0e21a0a"}, - {file = "moderngl-5.11.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00d7fd8ba0da946edcb76e988842b4ee7a07abd599e5caab9d691c792207bf1f"}, - {file = "moderngl-5.11.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:907e02fc2009e572a8a567ae4a6589f3b00acd08f15759b42cac60097a5b8572"}, - {file = "moderngl-5.11.1.tar.gz", hash = "sha256:ac454d5ea8431f2f7f0c95e28da2043dbd303538c2847fee057039e407dd1911"}, + {file = "moderngl-5.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:105cdee2ee29a7e6ebbc76cf178941503656a185c6945933bc7ef395ba8e65a7"}, + {file = "moderngl-5.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:18deb8bebd0a4277d92c76dbedf8e4b4b68bf0a8a878404c6b26aed750890d3b"}, + {file = "moderngl-5.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f0c4f7c42425177168938386a4fabd734ca3bbb5de2d1fd1176cfa6f980fc13"}, + {file = "moderngl-5.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:878cdf593204d85c020305f21d306f979353a67c932b9df58ea936f6e5ad13e7"}, + {file = "moderngl-5.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:00d94f9cb485d87c85088edad624201e152d8ac401793a024b16cd9e2bc4dbf6"}, + {file = "moderngl-5.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:edd91057b8d76beebac0d7b0c741466ee8f37eaf3c07856785c2872afe0b35ac"}, + {file = "moderngl-5.12.0-cp310-cp310-win32.whl", hash = "sha256:3d066eae2eb44e81bd7addf565adebc041bdee119e7ac6e4f95831d6f327a938"}, + {file = "moderngl-5.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:76d966194d51852f48c42a6e786a4520f1e1be5f93e2626423d673663422d559"}, + {file = "moderngl-5.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:28cdba5dcf2d03c89bb25dc3b2f5770ac4104470ed5bbe680a15494fa52a537d"}, + {file = "moderngl-5.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dad93893e3fcb2410bfd31e854f20e1370b4fbafa07a737f1046f5fbd29ba0f4"}, + {file = "moderngl-5.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fc0f8788bc84433d2124e9a4893adbe40f93c7d213abb8ad7b909540cb0161f"}, + {file = "moderngl-5.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6efd3fe0d2c9652af21e2c1f5a936a2b971abac5bdd777da7182a54962466cab"}, + {file = "moderngl-5.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6f3bd2d534fc081cde30545b84ebca63aef847ba8bd533217b9a37f565614ade"}, + {file = "moderngl-5.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eaa3de9446c6febec4d5f888e6f1a4e9398bc5a5ea70b1570ea447213641d4a6"}, + {file = "moderngl-5.12.0-cp311-cp311-win32.whl", hash = "sha256:9fdb76f1fd890db67727c8cdee4db2ee6319068c7ce92be0308366f8745e28ab"}, + {file = "moderngl-5.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:0c210e8d52a60025f6586ca015c39feb1e57e6dc792c3ff44800f6493a541b1a"}, + {file = "moderngl-5.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2750547707c1ec3790dfbeb9c90fb808672ff13f61cac392c706ba09fda10db0"}, + {file = "moderngl-5.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5c2a5fe06c7021183d9274df798f25516409c8d55898c324dae8a0b2de10144"}, + {file = "moderngl-5.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6c4972f3ddd10a3de6c30311da2c25bc493d023796e16c5d4e0f8bd6d5770be"}, + {file = "moderngl-5.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4d497ec6a3f6afa9ebd0be816d9bfe2fe20fec2105acfb88d956619c3ed8eb4"}, + {file = "moderngl-5.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2f3d240e9bc5d83257378bae59f8f35638b89d22bb003cf674b88fd7932161ce"}, + {file = "moderngl-5.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6fa667d560d842e778e2a5968305fb78f9781616a11b1b93acd2562f97262ccf"}, + {file = "moderngl-5.12.0-cp312-cp312-win32.whl", hash = "sha256:0a02fddd54dccee1ca6060bfed75a2e6a17dd3ee06920fac418506d8a8233849"}, + {file = "moderngl-5.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:8698a59ad03539a2982125b7998efc1c107ba31d5d03437b6fcd72cb2c226922"}, + {file = "moderngl-5.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f6efb432f5164f871471d1da36e3a4be9dc3efd7a1e48d0ac6b751e556af5d02"}, + {file = "moderngl-5.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9b09d8d15b2eaab41c8646a664429ec86af225fa25096758497cd212489d2e1e"}, + {file = "moderngl-5.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:071042dd4846e58cbe204cf49341b62cd209fdcb6d48018feb5a61c66707fcb2"}, + {file = "moderngl-5.12.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91db8302ac7f5d7a82a967388677e1378ff078f1e16d05da37ce77f4633b93b1"}, + {file = "moderngl-5.12.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:51971d65ec96a212a814350c8b324ae0754353e1b61826d1a06aa2d060df170e"}, + {file = "moderngl-5.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d56827360c19e831e986243b5daaf6a51006f1ec0d5372084ad446308763d19f"}, + {file = "moderngl-5.12.0-cp313-cp313-win32.whl", hash = "sha256:caa432c12b138a6c9571719075c4d103bdc2504cd31aeda38a00ad10fcf268cb"}, + {file = "moderngl-5.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:e34d1cd38f7998258f76a08bb5e87f351ec653b7ea1928b2711f8719c10cefd1"}, + {file = "moderngl-5.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b0712fcce0ebbee962f5e93628118aedcb568d56b5c59f2e9aac43ea57190219"}, + {file = "moderngl-5.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:861aae4a38da0f5d82dc2d5ece0f0a6d799809c362343cd1a447ab840a68370f"}, + {file = "moderngl-5.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:726a025ab9822c295369a9ddb1bfaf4930f9645b7a958b74dfcd6a969d7052cf"}, + {file = "moderngl-5.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29a181bae8bde003016fee671b93c2faa3e1460033033e2a832ec9187aa73efb"}, + {file = "moderngl-5.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:8b35c17d5497f19c524068f9337cbe5e0e0e5662150b12fa95618665130bbf16"}, + {file = "moderngl-5.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74e5b7df5614f3291d197139a888c967aa29c348e13ebd28ce2a55bf03baed3d"}, + {file = "moderngl-5.12.0-cp38-cp38-win32.whl", hash = "sha256:8dc1bacc24840e5bc562e79be65dc506d6c5a7d40ecac01a062f86d013c890af"}, + {file = "moderngl-5.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:cbd822cf3707fe955cfd940ec68b900519e2c43a5ef8085de5b0c983b4142c8b"}, + {file = "moderngl-5.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:49a6e27abafacef104c7ca336f6790f91c69617a1d752ead4a017b706d632b55"}, + {file = "moderngl-5.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7146c6fec3b2d7e8d11fa2504046b186d396520c0c2f7ef3aed40d8456dbebfc"}, + {file = "moderngl-5.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28b9eb3574ffc6e303173ca0a419b63d8b12cd67f924289c02d127c4d17cdca5"}, + {file = "moderngl-5.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6948237626f9f0d9f931faa3b123d53613d5723679bc70b8db2590924795203f"}, + {file = "moderngl-5.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3c6b4342b7508d75744f1091868cf184cae0be85d37be858fba32eb20d799695"}, + {file = "moderngl-5.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:13fec30855d346c4e69eff437e56f2bdd9953d22e80b7c5a319bccac7024e463"}, + {file = "moderngl-5.12.0-cp39-cp39-win32.whl", hash = "sha256:878f249505785cde8cc39d6016e62e74b46acbf3bb6d5a86341c86a7da7e7531"}, + {file = "moderngl-5.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:e801cd0d35b4e3e99fc6a6f15eb193ce907bfa78127afa5825f1fad24c700c0e"}, + {file = "moderngl-5.12.0.tar.gz", hash = "sha256:52936a98ccb2f2e1d6e3cb18528b2919f6831e7e3f924e788b5873badce5129b"}, ] [package.dependencies] @@ -2663,95 +2684,90 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "10.4.0" +version = "11.0.0" description = "Python Imaging Library (Fork)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, - {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"}, - {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"}, - {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"}, - {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"}, - {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"}, - {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"}, - {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"}, - {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"}, - {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"}, - {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"}, - {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"}, - {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"}, - {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"}, - {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"}, - {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"}, - {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"}, - {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"}, - {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"}, - {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"}, - {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"}, - {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"}, - {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"}, - {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"}, - {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"}, - {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"}, - {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"}, - {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"}, - {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"}, - {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"}, - {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"}, - {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"}, - {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"}, - {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"}, - {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"}, - {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"}, - {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"}, - {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"}, - {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"}, + {file = "pillow-11.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947"}, + {file = "pillow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488"}, + {file = "pillow-11.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f"}, + {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb"}, + {file = "pillow-11.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97"}, + {file = "pillow-11.0.0-cp310-cp310-win32.whl", hash = "sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50"}, + {file = "pillow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c"}, + {file = "pillow-11.0.0-cp310-cp310-win_arm64.whl", hash = "sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1"}, + {file = "pillow-11.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc"}, + {file = "pillow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b"}, + {file = "pillow-11.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa"}, + {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306"}, + {file = "pillow-11.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9"}, + {file = "pillow-11.0.0-cp311-cp311-win32.whl", hash = "sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5"}, + {file = "pillow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291"}, + {file = "pillow-11.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9"}, + {file = "pillow-11.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923"}, + {file = "pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9"}, + {file = "pillow-11.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7"}, + {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6"}, + {file = "pillow-11.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc"}, + {file = "pillow-11.0.0-cp312-cp312-win32.whl", hash = "sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6"}, + {file = "pillow-11.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47"}, + {file = "pillow-11.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25"}, + {file = "pillow-11.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699"}, + {file = "pillow-11.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527"}, + {file = "pillow-11.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa"}, + {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f"}, + {file = "pillow-11.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb"}, + {file = "pillow-11.0.0-cp313-cp313-win32.whl", hash = "sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798"}, + {file = "pillow-11.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de"}, + {file = "pillow-11.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84"}, + {file = "pillow-11.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b"}, + {file = "pillow-11.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003"}, + {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2"}, + {file = "pillow-11.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a"}, + {file = "pillow-11.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8"}, + {file = "pillow-11.0.0-cp313-cp313t-win32.whl", hash = "sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8"}, + {file = "pillow-11.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904"}, + {file = "pillow-11.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3"}, + {file = "pillow-11.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba"}, + {file = "pillow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7"}, + {file = "pillow-11.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e"}, + {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f"}, + {file = "pillow-11.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae"}, + {file = "pillow-11.0.0-cp39-cp39-win32.whl", hash = "sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4"}, + {file = "pillow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd"}, + {file = "pillow-11.0.0-cp39-cp39-win_arm64.whl", hash = "sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734"}, + {file = "pillow-11.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790"}, + {file = "pillow-11.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944"}, + {file = "pillow-11.0.0.tar.gz", hash = "sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] @@ -2760,19 +2776,19 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.2.2" +version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" @@ -2809,13 +2825,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prometheus-client" -version = "0.20.0" +version = "0.21.0" description = "Python client for the Prometheus monitoring system." optional = true python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, - {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, + {file = "prometheus_client-0.21.0-py3-none-any.whl", hash = "sha256:4fa6b4dd0ac16d58bb587c04b1caae65b8c5043e85f778f42f5f632f6af2e166"}, + {file = "prometheus_client-0.21.0.tar.gz", hash = "sha256:96c83c606b71ff2b0a433c98889d275f51ffec6c5e267de37c7a2b5c9aa9233e"}, ] [package.extras] @@ -2823,13 +2839,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.47" +version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = true python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, - {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, ] [package.dependencies] @@ -2926,26 +2942,22 @@ files = [ [[package]] name = "pycairo" -version = "1.26.1" +version = "1.27.0" description = "Python interface for cairo" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pycairo-1.26.1-cp310-cp310-win32.whl", hash = "sha256:b93b9e3072826a346f1f79cb1becc403d1ba4a3971cad61d144db0fe6dcb6be8"}, - {file = "pycairo-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:acfc76924ed668d8fea50f6cc6097b9a57ef6cd3dc3f2fa20814380d639a6dd2"}, - {file = "pycairo-1.26.1-cp310-cp310-win_arm64.whl", hash = "sha256:067191315c3b4d09cad1ec57cdb8fc1d72e2574e89389c268a94f22d4fa98b5f"}, - {file = "pycairo-1.26.1-cp311-cp311-win32.whl", hash = "sha256:56a29623aa7b4adbde5024c61ff001455b5a3def79e512742ea45ab36c3fe24b"}, - {file = "pycairo-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:8d2889e03a095de5da9e68a589b691a3ada09d60ef18b5fc1b1b99f2a7794297"}, - {file = "pycairo-1.26.1-cp311-cp311-win_arm64.whl", hash = "sha256:7a307111de345304ed8eadd7f81ebd7fb1fc711224aa314a4e8e33af7dfa3d27"}, - {file = "pycairo-1.26.1-cp312-cp312-win32.whl", hash = "sha256:5cc1808e9e30ccd0f4d84ba7700db5aab5673f8b6b901760369ebb88a0823436"}, - {file = "pycairo-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:36131a726f568b2dbc5e78ff50fbaa379e69db00614d46d66b1e4289caf9b1ce"}, - {file = "pycairo-1.26.1-cp312-cp312-win_arm64.whl", hash = "sha256:5577b51543ea4c283c15f436d891e9eaf6fd43fe74882adb032fba2c271f3fe9"}, - {file = "pycairo-1.26.1-cp38-cp38-win32.whl", hash = "sha256:27ec7b42c58af35dc11352881262dce4254378b0f11be0959d1c13edb4539d2c"}, - {file = "pycairo-1.26.1-cp38-cp38-win_amd64.whl", hash = "sha256:27357994d277b3fd10a45e9ef58f80a4cb5e3291fe76c5edd58d2d06335eb8e7"}, - {file = "pycairo-1.26.1-cp39-cp39-win32.whl", hash = "sha256:e68300d1c2196d1d34de3432885ae9ff78e10426fa16f765742a11c6f8fe0a71"}, - {file = "pycairo-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:ce049930e294c29b53c68dcaab3df97cc5de7eb1d3d8e8a9f5c77e7164cd6e85"}, - {file = "pycairo-1.26.1-cp39-cp39-win_arm64.whl", hash = "sha256:22e1db531d4ed3167a98f0ea165bfa2a30df9d6eb22361c38158c031065999a4"}, - {file = "pycairo-1.26.1.tar.gz", hash = "sha256:a11b999ce55b798dbf13516ab038e0ce8b6ec299b208d7c4e767a6f7e68e8430"}, + {file = "pycairo-1.27.0-cp310-cp310-win32.whl", hash = "sha256:e20f431244634cf244ab6b4c3a2e540e65746eed1324573cf291981c3e65fc05"}, + {file = "pycairo-1.27.0-cp310-cp310-win_amd64.whl", hash = "sha256:03bf570e3919901572987bc69237b648fe0de242439980be3e606b396e3318c9"}, + {file = "pycairo-1.27.0-cp311-cp311-win32.whl", hash = "sha256:9a9b79f92a434dae65c34c830bb9abdbd92654195e73d52663cbe45af1ad14b2"}, + {file = "pycairo-1.27.0-cp311-cp311-win_amd64.whl", hash = "sha256:d40a6d80b15dacb3672dc454df4bc4ab3988c6b3f36353b24a255dc59a1c8aea"}, + {file = "pycairo-1.27.0-cp312-cp312-win32.whl", hash = "sha256:e2239b9bb6c05edae5f3be97128e85147a155465e644f4d98ea0ceac7afc04ee"}, + {file = "pycairo-1.27.0-cp312-cp312-win_amd64.whl", hash = "sha256:27cb4d3a80e3b9990af552818515a8e466e0317063a6e61585533f1a86f1b7d5"}, + {file = "pycairo-1.27.0-cp313-cp313-win32.whl", hash = "sha256:01505c138a313df2469f812405963532fc2511fb9bca9bdc8e0ab94c55d1ced8"}, + {file = "pycairo-1.27.0-cp313-cp313-win_amd64.whl", hash = "sha256:b0349d744c068b6644ae23da6ada111c8a8a7e323b56cbce3707cba5bdb474cc"}, + {file = "pycairo-1.27.0-cp39-cp39-win32.whl", hash = "sha256:f9ca8430751f1fdcd3f072377560c9e15608b9a42d61375469db853566993c9b"}, + {file = "pycairo-1.27.0-cp39-cp39-win_amd64.whl", hash = "sha256:1b1321652a6e27c4de3069709b1cae22aed2707fd8c5e889c04a95669228af2a"}, + {file = "pycairo-1.27.0.tar.gz", hash = "sha256:5cb21e7a00a2afcafea7f14390235be33497a2cce53a98a19389492a60628430"}, ] [[package]] @@ -3030,13 +3042,13 @@ urllib3 = ">=1.26.0" [[package]] name = "pyglet" -version = "2.0.17" +version = "2.0.18" description = "pyglet is a cross-platform games and multimedia package." optional = false python-versions = ">=3.8" files = [ - {file = "pyglet-2.0.17-py3-none-any.whl", hash = "sha256:c881615a5bf14455af36a0915fd9dad0069da904ab5e0ec19b4d6cdfcf1e84c2"}, - {file = "pyglet-2.0.17.tar.gz", hash = "sha256:50c533c1a7cafdccccf43041338ad921ae26866e9871b4f12bf608500632900a"}, + {file = "pyglet-2.0.18-py3-none-any.whl", hash = "sha256:e592952ae0297e456c587b6486ed8c3e5f9d0c3519d517bb92dde5fdf4c26b41"}, + {file = "pyglet-2.0.18.tar.gz", hash = "sha256:7cf9238d70082a2da282759679f8a011cc979753a32224a8ead8ed80e48f99dc"}, ] [[package]] @@ -3138,13 +3150,13 @@ pyobjc-core = ">=10.3.1" [[package]] name = "pyparsing" -version = "3.1.4" +version = "3.2.0" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false -python-versions = ">=3.6.8" +python-versions = ">=3.9" files = [ - {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, - {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, + {file = "pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84"}, + {file = "pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c"}, ] [package.extras] @@ -3268,40 +3280,44 @@ files = [ [[package]] name = "pywin32" -version = "306" +version = "308" description = "Python for Window Extensions" optional = true python-versions = "*" files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, + {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, + {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, + {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, + {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, + {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, + {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, + {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, + {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, + {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, + {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, + {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, + {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, + {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, + {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, + {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, + {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, + {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, + {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, ] [[package]] name = "pywinpty" -version = "2.0.13" +version = "2.0.14" description = "Pseudo terminal support for Windows from Python." optional = true python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, - {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, - {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"}, - {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"}, - {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"}, - {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"}, + {file = "pywinpty-2.0.14-cp310-none-win_amd64.whl", hash = "sha256:0b149c2918c7974f575ba79f5a4aad58bd859a52fa9eb1296cc22aa412aa411f"}, + {file = "pywinpty-2.0.14-cp311-none-win_amd64.whl", hash = "sha256:cf2a43ac7065b3e0dc8510f8c1f13a75fb8fde805efa3b8cff7599a1ef497bc7"}, + {file = "pywinpty-2.0.14-cp312-none-win_amd64.whl", hash = "sha256:55dad362ef3e9408ade68fd173e4f9032b3ce08f68cfe7eacb2c263ea1179737"}, + {file = "pywinpty-2.0.14-cp313-none-win_amd64.whl", hash = "sha256:074fb988a56ec79ca90ed03a896d40707131897cefb8f76f926e3834227f2819"}, + {file = "pywinpty-2.0.14-cp39-none-win_amd64.whl", hash = "sha256:5725fd56f73c0531ec218663bd8c8ff5acc43c78962fab28564871b5fce053fd"}, + {file = "pywinpty-2.0.14.tar.gz", hash = "sha256:18bd9529e4a5daf2d9719aa17788ba6013e594ae94c5a0c27e83df3278b0660e"}, ] [[package]] @@ -3550,18 +3566,19 @@ files = [ [[package]] name = "rich" -version = "13.8.0" +version = "13.9.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"}, - {file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"}, + {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, + {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, ] [package.dependencies] markdown-it-py = ">=2.2.0" pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<9)"] @@ -3680,29 +3697,29 @@ files = [ [[package]] name = "ruff" -version = "0.6.2" +version = "0.7.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c"}, - {file = "ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570"}, - {file = "ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56"}, - {file = "ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da"}, - {file = "ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2"}, - {file = "ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9"}, - {file = "ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be"}, + {file = "ruff-0.7.0-py3-none-linux_armv6l.whl", hash = "sha256:0cdf20c2b6ff98e37df47b2b0bd3a34aaa155f59a11182c1303cce79be715628"}, + {file = "ruff-0.7.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:496494d350c7fdeb36ca4ef1c9f21d80d182423718782222c29b3e72b3512737"}, + {file = "ruff-0.7.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:214b88498684e20b6b2b8852c01d50f0651f3cc6118dfa113b4def9f14faaf06"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630fce3fefe9844e91ea5bbf7ceadab4f9981f42b704fae011bb8efcaf5d84be"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:211d877674e9373d4bb0f1c80f97a0201c61bcd1e9d045b6e9726adc42c156aa"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:194d6c46c98c73949a106425ed40a576f52291c12bc21399eb8f13a0f7073495"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:82c2579b82b9973a110fab281860403b397c08c403de92de19568f32f7178598"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9af971fe85dcd5eaed8f585ddbc6bdbe8c217fb8fcf510ea6bca5bdfff56040e"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b641c7f16939b7d24b7bfc0be4102c56562a18281f84f635604e8a6989948914"}, + {file = "ruff-0.7.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d71672336e46b34e0c90a790afeac8a31954fd42872c1f6adaea1dff76fd44f9"}, + {file = "ruff-0.7.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:ab7d98c7eed355166f367597e513a6c82408df4181a937628dbec79abb2a1fe4"}, + {file = "ruff-0.7.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1eb54986f770f49edb14f71d33312d79e00e629a57387382200b1ef12d6a4ef9"}, + {file = "ruff-0.7.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:dc452ba6f2bb9cf8726a84aa877061a2462afe9ae0ea1d411c53d226661c601d"}, + {file = "ruff-0.7.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:4b406c2dce5be9bad59f2de26139a86017a517e6bcd2688da515481c05a2cb11"}, + {file = "ruff-0.7.0-py3-none-win32.whl", hash = "sha256:f6c968509f767776f524a8430426539587d5ec5c662f6addb6aa25bc2e8195ec"}, + {file = "ruff-0.7.0-py3-none-win_amd64.whl", hash = "sha256:ff4aabfbaaba880e85d394603b9e75d32b0693152e16fa659a3064a85df7fce2"}, + {file = "ruff-0.7.0-py3-none-win_arm64.whl", hash = "sha256:10842f69c245e78d6adec7e1db0a7d9ddc2fff0621d730e61657b64fa36f207e"}, + {file = "ruff-0.7.0.tar.gz", hash = "sha256:47a86360cf62d9cd53ebfb0b5eb0e882193fc191c6d717e8bef4462bc3b9ea2b"}, ] [[package]] @@ -3780,18 +3797,18 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "74.0.0" +version = "75.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-74.0.0-py3-none-any.whl", hash = "sha256:0274581a0037b638b9fc1c6883cc71c0210865aaa76073f7882376b641b84e8f"}, - {file = "setuptools-74.0.0.tar.gz", hash = "sha256:a85e96b8be2b906f3e3e789adec6a9323abf79758ecfa3065bd740d81158b11e"}, + {file = "setuptools-75.2.0-py3-none-any.whl", hash = "sha256:a7fcb66f68b4d9e8e66b42f9876150a3371558f98fa32222ffaa5bced76406f8"}, + {file = "setuptools-75.2.0.tar.gz", hash = "sha256:753bb6ebf1f465a1912e19ed1d41f403a79173a9acf66a42e7e6aec45c3c16ec"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.text (>=3.7)", "more-itertools (>=8.8)", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] @@ -3811,50 +3828,57 @@ files = [ [[package]] name = "skia-pathops" -version = "0.8.0.post1" +version = "0.8.0.post2" description = "Python access to operations on paths using the Skia library" optional = false python-versions = ">=3.8" files = [ - {file = "skia-pathops-0.8.0.post1.zip", hash = "sha256:a056249de2f61fa55116b9ee55513c6a36b878aee00c91450e404d1606485cbb"}, - {file = "skia_pathops-0.8.0.post1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:952a03a19e687caa341ce6966eac03b167de8faea48574d3cf4bb758c2cefcfb"}, - {file = "skia_pathops-0.8.0.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:003efdbbc4400fffba00e0f9523b6b762269d7e257a6ad45cefbe4844fe04e4a"}, - {file = "skia_pathops-0.8.0.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77e8b60380a94bc277a50177f70392646e0cce83c5c8fa8ab5817d813eef0224"}, - {file = "skia_pathops-0.8.0.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d7b3361338f80bea1529698c2c66df1bdffc89339b90257d9a8e8e1cbda7f2c"}, - {file = "skia_pathops-0.8.0.post1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ccd03685b08e2ba7e65005911f0eac224eec3eabff18f9aeb8d757188dc5cbb"}, - {file = "skia_pathops-0.8.0.post1-cp310-cp310-win32.whl", hash = "sha256:e273b565544b801219bbea6b32c5b1f3f9c2ce4f43870700a859174aa1f6564b"}, - {file = "skia_pathops-0.8.0.post1-cp310-cp310-win_amd64.whl", hash = "sha256:35b3f990e9f0fc861e962b9bca959ab0de68c095959e0dccc21d7e5076141c12"}, - {file = "skia_pathops-0.8.0.post1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:934fafd7e8552b40cf7c6a02b8d3b40ead6dff2f2c0426a26e4b9a031b880a65"}, - {file = "skia_pathops-0.8.0.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db4e3a9af2bbd76d2522909cf6d32c84a0a5c6e1f8d3eff18305a960b3645293"}, - {file = "skia_pathops-0.8.0.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8973b7dccc96a9273b529f1ccea70f6d05e5b4ff90d0fe7e424a4fcff2134bd6"}, - {file = "skia_pathops-0.8.0.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27861201a5eabcd50b1d4c94be9cd28749d9236cbbab797e5ca6a293b6c15178"}, - {file = "skia_pathops-0.8.0.post1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30cb3286ff91325f1ae452f9d1bc58b92e4a5c5beeca3bd17b269c6376a0dbfa"}, - {file = "skia_pathops-0.8.0.post1-cp311-cp311-win32.whl", hash = "sha256:960a387300550a4fed0a66d5c29d26a02d9df965caf9e5ccd1eeef4e225b06c6"}, - {file = "skia_pathops-0.8.0.post1-cp311-cp311-win_amd64.whl", hash = "sha256:8235e313199be4b250ed32799d3de5a4be7ed60ecd62f19d426518814e6853a7"}, - {file = "skia_pathops-0.8.0.post1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3dc8febcb792c2542f05e12a3cee409ae421cdf865878c19d7b525291fa93348"}, - {file = "skia_pathops-0.8.0.post1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25fd0e8a18bc021f5b0b9cab37d607ea5c61f503b9e860d223906954b0c53c43"}, - {file = "skia_pathops-0.8.0.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9005f5dc5b162cac0d782e9adb5ecb304ab7ae5c873d2ed2a9895e89bf660ee2"}, - {file = "skia_pathops-0.8.0.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7b6873b65b682f8cf94a3baf8fccf98219f689e09a08967075bda36da128d57"}, - {file = "skia_pathops-0.8.0.post1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a4f111f55811ab9f8cb4ee057823db95355c8a424a2c2272ccda56ec0c48ba4"}, - {file = "skia_pathops-0.8.0.post1-cp312-cp312-win32.whl", hash = "sha256:69ff7abe4ba02b0c7159ae04d8173b4186336f3809d512e660f5569f39e08572"}, - {file = "skia_pathops-0.8.0.post1-cp312-cp312-win_amd64.whl", hash = "sha256:bc8792c342795c8d90a71d7df641513372954562b3a851b21c501400dba60dcc"}, - {file = "skia_pathops-0.8.0.post1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a5e7dd0b372c72a2c4b15505c31c1cfa0476ae2b46c8d52932a3278653e0afc4"}, - {file = "skia_pathops-0.8.0.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08d73f6a6568e1ac486c927035166d9c3bcb6c60bcc10c081d626c05397d2c21"}, - {file = "skia_pathops-0.8.0.post1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ecece9b39ca2d4ed03bc49364f291f8e94bcd832cbd1e23d5539570d6f22daf"}, - {file = "skia_pathops-0.8.0.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2af80580d722032e650ffa535173e58c16ac7a222eb8886786c9b6f6b7e1df63"}, - {file = "skia_pathops-0.8.0.post1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:27746a5d18c908f54778654be5a09c2af52b5655977b04650089c962c1700c25"}, - {file = "skia_pathops-0.8.0.post1-cp38-cp38-win32.whl", hash = "sha256:dab68a6ca259e87a3787ebdb18ebb198711419894cd591d01d3599e036847823"}, - {file = "skia_pathops-0.8.0.post1-cp38-cp38-win_amd64.whl", hash = "sha256:4c97ae7c611b39641de0aaf7340441615327480eb90dea3ca03dc3ca6aa82b44"}, - {file = "skia_pathops-0.8.0.post1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:307a94ba2f72601273c187f7fa934b1747dbfeb348dca175c7b40873823711a1"}, - {file = "skia_pathops-0.8.0.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d7acb97291c2107046027fb0671870b7ca0428f55fc550a13cf262d621b8f17"}, - {file = "skia_pathops-0.8.0.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:434037b8b5ab1824b79d09d2e19a80ad8d2561018d5fb1d167b320e0bb1be7ac"}, - {file = "skia_pathops-0.8.0.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a3f62afaef14e4a1f02aef3c8d194a04d7735a0e2c700bb4ce39b6c42e8c1ea"}, - {file = "skia_pathops-0.8.0.post1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:143da8261ea047d0752f406448216cf490e4642a9798e7adfadd0bed855c464a"}, - {file = "skia_pathops-0.8.0.post1-cp39-cp39-win32.whl", hash = "sha256:83091a316bc5d24ee02ba9f4ca5b690478d1b43a50285bd8afcf623a3f58e87e"}, - {file = "skia_pathops-0.8.0.post1-cp39-cp39-win_amd64.whl", hash = "sha256:01939106a9aa8e756dd4bf376f16fd9ce616cda16aed1ab34d13e67a498db0aa"}, - {file = "skia_pathops-0.8.0.post1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c5b66e5644a4f791e3b1fb1e78559130c042f15f744bc1867c18f9268aafab3"}, - {file = "skia_pathops-0.8.0.post1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d48fd852f3ac7e30f6221ff93e0cfb8593ea897027fd6b36987479eb406fb22"}, - {file = "skia_pathops-0.8.0.post1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed911ba99e2113574b6314d424696e6e302d427c65136ff8df14359bacb794c7"}, + {file = "skia_pathops-0.8.0.post2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7cd3722709dd186bfe1934f40c1d135252017c516c9cfc11b8c35139aaa4a167"}, + {file = "skia_pathops-0.8.0.post2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:150c9b935c3fc9ca8c259ca8c08f5677863d6c70326f3bea48811caeaef49127"}, + {file = "skia_pathops-0.8.0.post2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b4e59e9cb89c1feb8b95052e746b6501430d5f117a39014d0a1168373fcf54"}, + {file = "skia_pathops-0.8.0.post2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67dabd89b8ab7c9efddde540c0f16c762039c7f3cf6d4cc89ab94a359fe312fd"}, + {file = "skia_pathops-0.8.0.post2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7b6bb38173a023f3232a76aa1c700a2f034b6edd1cc44693c76cf7926d941fe3"}, + {file = "skia_pathops-0.8.0.post2-cp310-cp310-win32.whl", hash = "sha256:e5e04a1818380e6ae9186a7ef41c2edcc14b2521b6c6fcfdde53b28be7a71068"}, + {file = "skia_pathops-0.8.0.post2-cp310-cp310-win_amd64.whl", hash = "sha256:767e1893fed727096bca20e2725c12f46a95c350b6b3cefc9ab67e55442908e4"}, + {file = "skia_pathops-0.8.0.post2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ada3230a64ccf458e5b47b05b92ad6404ae641b54784d140a02d159b01db8db1"}, + {file = "skia_pathops-0.8.0.post2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8a577e6146a4edfb4dc29d973a9f42fa979aee4d498471933bac5a11fc5686d6"}, + {file = "skia_pathops-0.8.0.post2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec5d532eaa341aef9b09bf7c06783803abadc8822056e44830be08285ad3c870"}, + {file = "skia_pathops-0.8.0.post2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ce6bbdfec398ba6da48323947a8c72796a36903b8f96f6c87f9623172755c14"}, + {file = "skia_pathops-0.8.0.post2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f1e46df0bc41420e0271900b9c7d01104c7a5b1c33ec2d7d1759db82bc9efeab"}, + {file = "skia_pathops-0.8.0.post2-cp311-cp311-win32.whl", hash = "sha256:4435eca08149bdd1e177e172f26d65f50c8c6814e2477abc5a4e2fab44b6972e"}, + {file = "skia_pathops-0.8.0.post2-cp311-cp311-win_amd64.whl", hash = "sha256:c7c9a17a67dcf270c3595d806a8c5996acdd09e7c966f8ed971d40f8511bbd5c"}, + {file = "skia_pathops-0.8.0.post2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:aa11950fda8d390fe074cb0a83ac0d8a95f72087b0a38add30b9f22c3591554e"}, + {file = "skia_pathops-0.8.0.post2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:496def3492582161ce95a43b2c539af8b219c60fba223b25e8eef1ac8f9ee3d7"}, + {file = "skia_pathops-0.8.0.post2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4f3da50b749141caf6f17f032d2e3aae5faec96e39ed9c94e6b55e6e3a3a1c7"}, + {file = "skia_pathops-0.8.0.post2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f82f2273208f72403da8dc7457d64fbd3f7d8f1f7f54cb8483eeda00747933"}, + {file = "skia_pathops-0.8.0.post2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:153055698053539b439720643a045ec3a50c35ea66bca7d89977e66a0d68282a"}, + {file = "skia_pathops-0.8.0.post2-cp312-cp312-win32.whl", hash = "sha256:575061162264edd3c707e375c0fca85e7f72f5fada2e42c26853a6551c47e076"}, + {file = "skia_pathops-0.8.0.post2-cp312-cp312-win_amd64.whl", hash = "sha256:6f2f60feceb7213a80ab7824f0c7e41de3c26a29a3a1ab8a1f60ec750292b444"}, + {file = "skia_pathops-0.8.0.post2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4059d5c54dc4d2686e3b54c347fa1aad48ef6a0bc12ca75a27a260b291a98238"}, + {file = "skia_pathops-0.8.0.post2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0db10dfb00a1093a72e56827c172e3ca4922762f4c321d6ccc0703bc201b966"}, + {file = "skia_pathops-0.8.0.post2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddb5b52fae729ea456e777e715d17f25940e53bbd0ca0fad8b1e6268c7f493be"}, + {file = "skia_pathops-0.8.0.post2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6b12d5cd85d0dec27f8f4ff41f8e2befa76a40170cda9715f98d2002d0da1"}, + {file = "skia_pathops-0.8.0.post2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ae0a7937f6160247515a272f36598e35abb700ae4f1b5adec2e8119fcd535dcb"}, + {file = "skia_pathops-0.8.0.post2-cp313-cp313-win32.whl", hash = "sha256:20e759441ce209e0fe026900057ac846e6912e7112b81229c330a6ad1e550efb"}, + {file = "skia_pathops-0.8.0.post2-cp313-cp313-win_amd64.whl", hash = "sha256:1753fd7b4151c9ae3e5f198227ab39598a60be90c7ccc5c796a6ca5ef26d24d6"}, + {file = "skia_pathops-0.8.0.post2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5537a0dc3abe640c41338daba5ad76c5d49ec983f63810c09f7fec807c362906"}, + {file = "skia_pathops-0.8.0.post2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a0ed94833af70def1865ab538dc9be6fa47f250ff3e0f2c25cccde068fd86ae"}, + {file = "skia_pathops-0.8.0.post2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ebcce8a446a8c4bd7d6da434057cd2acb3a17d0a017c8a177a476de022629e0"}, + {file = "skia_pathops-0.8.0.post2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:371499d6a94f37d76ecaa96686dcabf44b85590f92336dd53991ef56f162711e"}, + {file = "skia_pathops-0.8.0.post2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c2b27b17a90dedff3385ef2d8a7d6e881117856ef84d497745ed996f01d91910"}, + {file = "skia_pathops-0.8.0.post2-cp38-cp38-win32.whl", hash = "sha256:d36b4d08122d83a808610c6096972a2620b9adefa4c7e0c00d8f6ec396df4d9f"}, + {file = "skia_pathops-0.8.0.post2-cp38-cp38-win_amd64.whl", hash = "sha256:0541e79be26b92c799da793b59eb1a3653b38d1301a61c28e2fa6109a5ade180"}, + {file = "skia_pathops-0.8.0.post2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef2e8892083bf91de0914615f25c5d0b2392c25fad5a06df3ff39e56b933130"}, + {file = "skia_pathops-0.8.0.post2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d3306e4adc525ecc8e8847e52086df1fb990444de2af79b0ec1ccc2c59f2919c"}, + {file = "skia_pathops-0.8.0.post2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7ce8b2b9f3417b20a83fb9194b40ea32dc4aeb50ba7d59ff23ef889406cd35b"}, + {file = "skia_pathops-0.8.0.post2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96bf52955047e00cafb2899725d0585b19a6ce07fe8f566d7d736262843f8b34"}, + {file = "skia_pathops-0.8.0.post2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c576a0d077eeb319e8f95d6043bccfbc3c1b320ec809a79b56f3c66e35a563a8"}, + {file = "skia_pathops-0.8.0.post2-cp39-cp39-win32.whl", hash = "sha256:343a2c83c07d5764f28233d8bda7cf07b444586d748e5560b45e295465cf05c1"}, + {file = "skia_pathops-0.8.0.post2-cp39-cp39-win_amd64.whl", hash = "sha256:4c486a4d800e3685974a0cc8f5fd0486a01edfd355a5c2327e796b6e48f269c7"}, + {file = "skia_pathops-0.8.0.post2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee98a3affee6bb13998828f5565cbb9fd7c52120b71310098bd2764cbd4fa6ad"}, + {file = "skia_pathops-0.8.0.post2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b948b340859771ccee6a878783220fcbf072961af83dd05580b24cfac9611ed7"}, + {file = "skia_pathops-0.8.0.post2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8983fba1b163a65438c51a3fb34c95e27652aad92d900d348bcc81babff3434"}, + {file = "skia_pathops-0.8.0.post2.zip", hash = "sha256:9e252cdeb6c4d162e82986d31dbd89c675d1677cb8019c2e13e6295d4a557269"}, ] [package.extras] @@ -4221,13 +4245,13 @@ test = ["pytest", "ruff"] [[package]] name = "tomli" -version = "2.0.1" +version = "2.0.2" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, + {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, ] [[package]] @@ -4298,13 +4322,13 @@ files = [ [[package]] name = "types-docutils" -version = "0.21.0.20240724" +version = "0.21.0.20241005" description = "Typing stubs for docutils" optional = false python-versions = ">=3.8" files = [ - {file = "types-docutils-0.21.0.20240724.tar.gz", hash = "sha256:29ff7e27660f4fe76ea61d7e54d05ca3ce3b733ca9e8e8721e0fa587dbc10489"}, - {file = "types_docutils-0.21.0.20240724-py3-none-any.whl", hash = "sha256:bf51c6c488d23c0412f9b3ba10686fb1a6cb0b957ef04b45128d8a55c79ebb00"}, + {file = "types-docutils-0.21.0.20241005.tar.gz", hash = "sha256:48f804a2b50da3a1b1681c4ca1b6184416a6e4129e302d15c44e9d97c59b3365"}, + {file = "types_docutils-0.21.0.20241005-py3-none-any.whl", hash = "sha256:4d9021422f2f3fca8b0726fb8949395f66a06c0d951479eb3b1387d75b134430"}, ] [[package]] @@ -4335,24 +4359,24 @@ types-setuptools = "*" [[package]] name = "types-python-dateutil" -version = "2.9.0.20240821" +version = "2.9.0.20241003" description = "Typing stubs for python-dateutil" optional = true python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.9.0.20240821.tar.gz", hash = "sha256:9649d1dcb6fef1046fb18bebe9ea2aa0028b160918518c34589a46045f6ebd98"}, - {file = "types_python_dateutil-2.9.0.20240821-py3-none-any.whl", hash = "sha256:f5889fcb4e63ed4aaa379b44f93c32593d50b9a94c9a60a0c854d8cc3511cd57"}, + {file = "types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446"}, + {file = "types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d"}, ] [[package]] name = "types-setuptools" -version = "73.0.0.20240822" +version = "75.2.0.20241019" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" files = [ - {file = "types-setuptools-73.0.0.20240822.tar.gz", hash = "sha256:3a060681098eb3fbc2fea0a86f7f6af6aa1ca71906039d88d891ea2cecdd4dbf"}, - {file = "types_setuptools-73.0.0.20240822-py3-none-any.whl", hash = "sha256:b9eba9b68546031317a0fa506d4973641d987d74f79e7dd8369ad4f7a93dea17"}, + {file = "types-setuptools-75.2.0.20241019.tar.gz", hash = "sha256:86ea31b5f6df2c6b8f2dc8ae3f72b213607f62549b6fa2ed5866e5299f968694"}, + {file = "types_setuptools-75.2.0.20241019-py3-none-any.whl", hash = "sha256:2e48ff3acd4919471e80d5e3f049cce5c177e108d5d36d2d4cee3fa4d4104258"}, ] [[package]] @@ -4382,13 +4406,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.2.2" +version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] @@ -4399,13 +4423,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.26.3" +version = "20.27.0" description = "Virtual Python Environment builder" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"}, - {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"}, + {file = "virtualenv-20.27.0-py3-none-any.whl", hash = "sha256:44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655"}, + {file = "virtualenv-20.27.0.tar.gz", hash = "sha256:2ca56a68ed615b8fe4326d11a0dca5dfbe8fd68510fb6c6349163bed3c15f2b2"}, ] [package.dependencies] @@ -4419,41 +4443,41 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "watchdog" -version = "5.0.0" +version = "5.0.3" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" files = [ - {file = "watchdog-5.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bf3216ec994eabb2212df9861f19056ca0d4cd3516d56cb95801933876519bfe"}, - {file = "watchdog-5.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cb59ad83a1700304fc1ac7bc53ae9e5cbe9d60a52ed9bba8e2e2d782a201bb2b"}, - {file = "watchdog-5.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1228cb097e855d1798b550be8f0e9f0cfbac4384f9a3e91f66d250d03e11294e"}, - {file = "watchdog-5.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3c177085c3d210d1c73cb4569442bdaef706ebebc423bd7aed9e90fc12b2e553"}, - {file = "watchdog-5.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01ab36cddc836a0f202c66267daaef92ba5c17c7d6436deff0587bb61234c5c9"}, - {file = "watchdog-5.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0834c21efa3e767849b09e667274604c7cdfe30b49eb95d794565c53f4db3c1e"}, - {file = "watchdog-5.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1e26f570dd7f5178656affb24d6f0e22ce66c8daf88d4061a27bfb9ac866b40d"}, - {file = "watchdog-5.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d146331e6b206baa9f6dd40f72b5783ad2302c240df68e7fce196d30588ccf7b"}, - {file = "watchdog-5.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c96b1706430839872a3e33b9370ee3f7a0079f6b828129d88498ad1f96a0f45"}, - {file = "watchdog-5.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:663b096368ed7831ac42259919fdb9e0a1f0a8994d972675dfbcca0225e74de1"}, - {file = "watchdog-5.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:685931412978d00a91a193d9018fc9e394e565e8e7a0c275512a80e59c6e85f8"}, - {file = "watchdog-5.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:109daafc5b0f2a98d1fa9475ff9737eb3559d57b18129a36495e20c71de0b44f"}, - {file = "watchdog-5.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c2b4d90962639ae7cee371ea3a8da506831945d4418eee090c53bc38e6648dc6"}, - {file = "watchdog-5.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e58eafe9cc5ceebe1562cdb89bacdcd0ef470896e8b0139fe677a5abec243da"}, - {file = "watchdog-5.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b8d747bf6d8fe5ce89cb1a36c3724d1599bd4cde3f90fcba518e6260c7058a52"}, - {file = "watchdog-5.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bc16d448a74a929b896ed9578c25756b2125400b19b3258be8d9a681c7ae8e71"}, - {file = "watchdog-5.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7e6b0e9b8a9dc3865d65888b5f5222da4ba9c4e09eab13cff5e305e7b7e7248f"}, - {file = "watchdog-5.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4fe6780915000743074236b21b6c37419aea71112af62237881bc265589fe463"}, - {file = "watchdog-5.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0710e9502727f688a7e06d48078545c54485b3d6eb53b171810879d8223c362a"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d76efab5248aafbf8a2c2a63cd7b9545e6b346ad1397af8b862a3bb3140787d8"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:ff4e957c45c446de34c513eadce01d0b65da7eee47c01dce472dd136124552c9"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:16c1aa3377bb1f82c5e24277fcbf4e2cac3c4ce46aaaf7212d53caa9076eb7b7"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:22fcad6168fc43cf0e709bd854be5b8edbb0b260f0a6f28f1ea9baa53c6907f7"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:0120b2fa65732797ffa65fa8ee5540c288aa861d91447df298626d6385a24658"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2aa59fab7ff75281778c649557275ca3085eccbdf825a0e2a5ca3810e977afe5"}, - {file = "watchdog-5.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:78db0fe0336958fc0e1269545c980b6f33d04d184ba191b2800a8b71d3e971a9"}, - {file = "watchdog-5.0.0-py3-none-win32.whl", hash = "sha256:d1acef802916083f2ad7988efc7decf07e46e266916c0a09d8fb9d387288ea12"}, - {file = "watchdog-5.0.0-py3-none-win_amd64.whl", hash = "sha256:3c2d50fdb86aa6df3973313272f5a17eb26eab29ff5a0bf54b6d34597b4dc4e4"}, - {file = "watchdog-5.0.0-py3-none-win_ia64.whl", hash = "sha256:1d17ec7e022c34fa7ddc72aa41bf28c9d1207ffb193df18ba4f6fde453725b3c"}, - {file = "watchdog-5.0.0.tar.gz", hash = "sha256:990aedb9e2f336b45a70aed9c014450e7c4a70fd99c5f5b1834d57e1453a177e"}, + {file = "watchdog-5.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:85527b882f3facda0579bce9d743ff7f10c3e1e0db0a0d0e28170a7d0e5ce2ea"}, + {file = "watchdog-5.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:53adf73dcdc0ef04f7735066b4a57a4cd3e49ef135daae41d77395f0b5b692cb"}, + {file = "watchdog-5.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e25adddab85f674acac303cf1f5835951345a56c5f7f582987d266679979c75b"}, + {file = "watchdog-5.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f01f4a3565a387080dc49bdd1fefe4ecc77f894991b88ef927edbfa45eb10818"}, + {file = "watchdog-5.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91b522adc25614cdeaf91f7897800b82c13b4b8ac68a42ca959f992f6990c490"}, + {file = "watchdog-5.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d52db5beb5e476e6853da2e2d24dbbbed6797b449c8bf7ea118a4ee0d2c9040e"}, + {file = "watchdog-5.0.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:94d11b07c64f63f49876e0ab8042ae034674c8653bfcdaa8c4b32e71cfff87e8"}, + {file = "watchdog-5.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:349c9488e1d85d0a58e8cb14222d2c51cbc801ce11ac3936ab4c3af986536926"}, + {file = "watchdog-5.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:53a3f10b62c2d569e260f96e8d966463dec1a50fa4f1b22aec69e3f91025060e"}, + {file = "watchdog-5.0.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:950f531ec6e03696a2414b6308f5c6ff9dab7821a768c9d5788b1314e9a46ca7"}, + {file = "watchdog-5.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae6deb336cba5d71476caa029ceb6e88047fc1dc74b62b7c4012639c0b563906"}, + {file = "watchdog-5.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1021223c08ba8d2d38d71ec1704496471ffd7be42cfb26b87cd5059323a389a1"}, + {file = "watchdog-5.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:752fb40efc7cc8d88ebc332b8f4bcbe2b5cc7e881bccfeb8e25054c00c994ee3"}, + {file = "watchdog-5.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a2e8f3f955d68471fa37b0e3add18500790d129cc7efe89971b8a4cc6fdeb0b2"}, + {file = "watchdog-5.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b8ca4d854adcf480bdfd80f46fdd6fb49f91dd020ae11c89b3a79e19454ec627"}, + {file = "watchdog-5.0.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:90a67d7857adb1d985aca232cc9905dd5bc4803ed85cfcdcfcf707e52049eda7"}, + {file = "watchdog-5.0.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:720ef9d3a4f9ca575a780af283c8fd3a0674b307651c1976714745090da5a9e8"}, + {file = "watchdog-5.0.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:223160bb359281bb8e31c8f1068bf71a6b16a8ad3d9524ca6f523ac666bb6a1e"}, + {file = "watchdog-5.0.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:560135542c91eaa74247a2e8430cf83c4342b29e8ad4f520ae14f0c8a19cfb5b"}, + {file = "watchdog-5.0.3-py3-none-manylinux2014_aarch64.whl", hash = "sha256:dd021efa85970bd4824acacbb922066159d0f9e546389a4743d56919b6758b91"}, + {file = "watchdog-5.0.3-py3-none-manylinux2014_armv7l.whl", hash = "sha256:78864cc8f23dbee55be34cc1494632a7ba30263951b5b2e8fc8286b95845f82c"}, + {file = "watchdog-5.0.3-py3-none-manylinux2014_i686.whl", hash = "sha256:1e9679245e3ea6498494b3028b90c7b25dbb2abe65c7d07423ecfc2d6218ff7c"}, + {file = "watchdog-5.0.3-py3-none-manylinux2014_ppc64.whl", hash = "sha256:9413384f26b5d050b6978e6fcd0c1e7f0539be7a4f1a885061473c5deaa57221"}, + {file = "watchdog-5.0.3-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:294b7a598974b8e2c6123d19ef15de9abcd282b0fbbdbc4d23dfa812959a9e05"}, + {file = "watchdog-5.0.3-py3-none-manylinux2014_s390x.whl", hash = "sha256:26dd201857d702bdf9d78c273cafcab5871dd29343748524695cecffa44a8d97"}, + {file = "watchdog-5.0.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:0f9332243355643d567697c3e3fa07330a1d1abf981611654a1f2bf2175612b7"}, + {file = "watchdog-5.0.3-py3-none-win32.whl", hash = "sha256:c66f80ee5b602a9c7ab66e3c9f36026590a0902db3aea414d59a2f55188c1f49"}, + {file = "watchdog-5.0.3-py3-none-win_amd64.whl", hash = "sha256:f00b4cf737f568be9665563347a910f8bdc76f88c2970121c86243c8cfdf90e9"}, + {file = "watchdog-5.0.3-py3-none-win_ia64.whl", hash = "sha256:49f4d36cb315c25ea0d946e018c01bb028048023b9e103d3d3943f58e109dd45"}, + {file = "watchdog-5.0.3.tar.gz", hash = "sha256:108f42a7f0345042a854d4d0ad0834b741d421330d5f575b81cb27b883500176"}, ] [package.extras] @@ -4607,13 +4631,13 @@ files = [ [[package]] name = "zipp" -version = "3.20.1" +version = "3.20.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.20.1-py3-none-any.whl", hash = "sha256:9960cd8967c8f85a56f920d5d507274e74f9ff813a0ab8889a5b5be2daf44064"}, - {file = "zipp-3.20.1.tar.gz", hash = "sha256:c22b14cc4763c5a5b04134207736c107db42e9d3ef2d9779d465f5f1bcba572b"}, + {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, + {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, ] [package.extras] @@ -4631,4 +4655,4 @@ jupyterlab = ["jupyterlab", "notebook"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "664a8e2ee063b0846d12a3c9f2f4c2c4dd9a18dcf2aa6e0e8535f1dd5cb43864" +content-hash = "555a7cfc47c4967dbb339419d479e2a91191c364a2de58a29dee42f99786f0f4" diff --git a/pyproject.toml b/pyproject.toml index fbebe8772c..0b476909e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,7 +55,6 @@ svgelements = ">=1.8.0" tqdm = ">=4.0.0" typing-extensions = ">=4.0.0" watchdog = ">=2.0.0" -sphinx-togglebutton = "^0.3.2" [tool.poetry.extras] jupyterlab = ["jupyterlab", "notebook"] @@ -81,6 +80,7 @@ Sphinx = "^7.2.6" sphinx-copybutton = "^0.5.2" sphinxcontrib-programoutput = "^0.17" sphinxext-opengraph = "^0.9.1" +sphinx-togglebutton = "^0.3.2" sphinx-design = "^0.5.0" types-decorator = "^0.1.7" types-Pillow = "^10.1.0.2" From be9443f8e3319d55575007ea2b9ee3c4c45c4d94 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Mon, 20 Jan 2025 10:53:29 -0500 Subject: [PATCH 36/38] add missing comma --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 1de1410eae..f8bde72f7b 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -51,7 +51,7 @@ "sphinx.ext.inheritance_diagram", "sphinxcontrib.programoutput", "myst_parser", - "sphinx_togglebutton" + "sphinx_togglebutton", "sphinx_design", "sphinx_reredirects", ] From aae02f6fc30e57d0c1b245c32bec6b00bdb0d506 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 15:54:53 +0000 Subject: [PATCH 37/38] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- docs/source/adventure/project.rst | 10 +++++----- docs/source/contributing/docs/admonitions.rst | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/source/adventure/project.rst b/docs/source/adventure/project.rst index 876d2d3427..be7c17699a 100644 --- a/docs/source/adventure/project.rst +++ b/docs/source/adventure/project.rst @@ -88,7 +88,7 @@ stick with a simple text-based intro. Try to recreate the following: .. admonition:: Authors solution :class: dropdown - + .. code-block:: python class AdventureIntro(Scene): @@ -117,7 +117,7 @@ Once again, try to recreate the following: .. manim:: AlgebraicAddition :hide_source: :ref_classes: Title MathTex Paragraph Tex Text Write Unwrite Create FadeIn - + class AlgebraicAddition(Scene): def construct(self): @@ -177,7 +177,7 @@ Use :class:`.MathTex` to represent the matrices, and try not to hardcode the val .. admonition:: Authors solution :class: dropdown - + .. code-block:: python class AlgebraicAddition(Scene): @@ -225,7 +225,7 @@ Lastly, let's show the vector addition geometrically. Try your best to reconstru .. manim:: GeometricAddition :hide_source: :ref_classes: Title MathTex Paragraph Tex Text Write Unwrite Create FadeIn NumberPlane Arrow AnimationGroup ReplacementTransform VGroup - + class VectorGroup(VGroup): def __init__( self, start, end, labelname: str, @@ -382,7 +382,7 @@ Take a look at the decorator :func:`.override_animation` to override the :class: .. admonition:: Authors solution :class: dropdown - + .. code-block:: python class VectorGroup(VGroup): diff --git a/docs/source/contributing/docs/admonitions.rst b/docs/source/contributing/docs/admonitions.rst index 5c7f5e4a10..8300afc817 100644 --- a/docs/source/contributing/docs/admonitions.rst +++ b/docs/source/contributing/docs/admonitions.rst @@ -89,17 +89,17 @@ Dropdown ~~~~~~~~~ .. code-block:: rest - + .. admonition:: A dropdown :class: dropdown A dropdown Make sure you leave a line between ":class:" and the text below, otherwise the dropdown won't render. - + .. admonition:: A dropdown :class: dropdown - + A dropdown From f2f35cf7e1c4890b5648505cd78a13c534265af3 Mon Sep 17 00:00:00 2001 From: JasonGrace2282 Date: Mon, 20 Jan 2025 10:57:08 -0500 Subject: [PATCH 38/38] add sphinx-togglebutton as dep --- docs/requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/requirements.txt b/docs/requirements.txt index 5b607e9c8b..d0a2410c8b 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -4,4 +4,5 @@ sphinx>=7.3 sphinx-copybutton sphinxext-opengraph sphinx-design +sphinx-togglebutton sphinx-reredirects