From f01639a9e52ff426bf62b59a18f94fd67ac08370 Mon Sep 17 00:00:00 2001 From: Evgeny Prilepin Date: Tue, 15 Apr 2025 18:56:00 +0100 Subject: [PATCH 1/3] docs: use Furo Sphinx theme --- docs/_static/logo-dark-mode.png | Bin 0 -> 58425 bytes docs/_static/logo.png | Bin 0 -> 44544 bytes docs/conf.py | 31 +++++++------- docs/csaps.mplstyle | 49 ++++++++++++++++++++++ docs/formulation.rst | 3 +- docs/index.rst | 33 ++++++++++----- docs/tutorial.rst | 27 +++++++----- poetry.lock | 71 +++++++++++++++++++++++++++++++- pyproject.toml | 3 +- 9 files changed, 177 insertions(+), 40 deletions(-) create mode 100644 docs/_static/logo-dark-mode.png create mode 100644 docs/_static/logo.png create mode 100644 docs/csaps.mplstyle diff --git a/docs/_static/logo-dark-mode.png b/docs/_static/logo-dark-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..05d2b58ffded2463f8719b6311397dceabd0a898 GIT binary patch literal 58425 zcmd43byQSQ|1Ug%fV2Tfg9_5EbSucv4KuWKH;gnQptM7YNOvpUAtgh1w@67h2;7a& z^Skd_@4xR_@4aU&7H4K)W}kib{_aoh`KY4wngEvq7XpD0KxJR4K_GYLArQ32yI9~E zRDQi1_=V=8_F4*3(oeMk9^A2zRFs53zDMExHO2&waU5k~E)WRekJ}$K5+*r+@Fbb5 zw2rH~gSo4Rv9lRO#n{T;l|xBdgYE?fHwWL}p{`Q!H&tdjP;)4h1#%ZWz=TksVM5Tr znH>0`{O>tv4TK2|;G7!`9dZx+hJzogkURgLw+838$ALQ6EV~N^G>ng{PsWx?~DHLFVzGEz}bKQi<^t<_SNj)vbDYI zp>H9O<#p&QNezU-pE(?FDzhu`z2DX`_B*yG3cHv0?ycTKcMc<#7W_it4C5+?e&7gNj;fdq@ugUVeg-{ ztIek0Z_P(+-OW?h&cy~qcw@#E7Q}IGoAK{ZW7UoSpL0mG6d3|s}j z2k`&TIfTGyk>GzGNMQW`|1T0+etymLF^BzrH(Qo@rG83f|I->s@Hfl-WpyIqBb6xA zhw-R@>eY(8h}Hl7GJfXoZ!d}F=r-Ojsj2_(Xa7%M&;PX@{r|OL(O|4`cK>QPT(}XU z*xX8uVGCDPb#hX*fK`540p$XN``bH6C$*gh$g z#C~G>;Ds+!Pa3~_NE-|ehd+VMSz1})VEw)JH%060eNzc%VPWY-Vqz?cSz>Q&ZEs6@ z;pY=a4dwn?Q|{~O>G?F4hT*yHzzJ_S8*L*L9eq0WKHGMYpfeJi)k;;dYhu*r^2Ddh zzMAu6BL>SMLgc0jUMxP)-Mx`*JBPrfS$~u;b8>QGhD}IS(^OVA%v>lLf*#OfFr5(9 zpTxiW0+qoQI9#)XgB5tgm(<4x%ch*Evb!8RIP9<2D}$KGblo_^M?0O3o_~@x^;1_L z5oaUqDJRxFw<4J~B`ZfPOs^fzy(ypi-8ue_MzvwZ#>(pa@Es&S-c9<=A*Ta=0OiD+9A5UwKSK^q$@_D$W*mkxU*&RnQc zV*JBV|Cf9HuA5MDk7*pum+uPg5p&wIHcrE%3a}*Mt{k1kSlv-MnI+x>qRN2i$=0;xLkdTs+ zw$GzwW`r)B~_h+0ctMj{QDdW9A4JjEA6h@{-8P`N%s5r$)9 z&C~Vop7OhSc-)i}6j(np8=|rJEXjR=DI`vg$-I2*S^ewx@A={jvrRI@$j>ynCFcTS zvHQAsiS%Uno?c#F4wdj?KPiVd2`X)xgoC?!X;@7WVXTrk5xb>+Y{J{A0N%ohR-ZeUWsqW*O&}Mao z@3LAO@nG)2i4B@eXLUrn z$!|$bnvCFpYGU%|i|(SBU18uAu@CRi^@0mNBc_hez4>QstKNREgsi-q5{Y(}p>Rxt zOe!bmv<+Ri>KHE)JP6X65x_bw1O1gVhmDG#d1Be;WJ+ITT-^C)9}2zy@n z2tGeOeL-`apoOxA%(b=52sj2w#GM_-7D?w)BPF|tQqR}WY8G6c2Bt}PHAGl>EhNRn zl#?oxV?jDJ6XN3H|jtHaMX^3|b9McLY*mH4{LwPQRKs(&CeP_3_~4^$F68VLj3A9XraM;L99q6X2sU=5mJuNf{ zQ`A<;&d!bvgN>|=C!7_s9@8FD3Fd(Ohw_oIY7e@5h`9~dlqZD{d;$!Imy4nP7PSNl zZzDu~9vJ;lQE|M(Zhfu>y@UC2Y5P^_s`r#V^QSQg#8cJoyH1Y$bTkUp!zrDF1z}-g zV`~^%*`Ey*VirXRAF9jeCl?|$A;BR5)q#%Ei|+Lkhiv=`Z!zQcvXQ>cHzYJFQbt@N zQ+yU9h4Gv-)H*njw5MQA5H>&tYl8Jl3Qx}-7b526X(mXQAY-Zfi)kPVqQ-#bS^0?kl4`;|9g)nVDv#ZebG}2;?Yei~GP2 z`Qmx?%#~t=86*uCEI|AeA8psf9&hH1BDVz{-!y#t_RYwMK?19_g>osh1zd(?H@vo# z)PFcn-Q8VRS6380@MdZI-rYMToXpJUO-1OC!OTsCjaY%?eiN$zm;)pYU;R(hd?mQD zXYG^utuvo?Ghai$l7)oF?PECT-3RrPk(#i}8HSmL=bWfy_wr?1#P=78@~Hh%cG4bg zQxb^(j-x(UZc0Ac%5WWw=%Pt97in!hnzKJ`BlDIgbZ9o>LJ%yxR@Oo@%?hVRtjPHr z^ytFj^G*U(v~gpQx{-;Qq#^!it7W|w4Ea>4PYc0?7YL2eY_=;qNOzG!G=8}XDLdEC zZK=GDAadYO*)Zoz;*8UTkh4C;p09bZzOj*?ZfYkjEp2AY?yqEKwkpfA;s}eB$$WGO zgTgQ&X}TN4$pnRCM8|s zfh)DSy1IfPdtZ$`i`g)TVnEhOyBIMsF}3CRGEIM|>w!x=YxT0P_QJqgc)-ZmMT=yU z=+4Kuh7MsenIoQ_o>Uq+#TwNdSqu6c;>dh!LgAx90wk6! z*@V?-`sGu%KT2_$iFa4AgQd;h)4tQ9>_JnY+Ei|Wau2NKH68q9A$vc=n>ui+492v! zR;#2`x(a2-x-hdZq3S~Q3r1mKS#Hm?nyhwREv@lq;(Q$X`ugWbmwlHf+e!0tbK6;( z<9~{ZLN|ELd%O1n263XedEP84viK+Dp?`i_NQXA-l-s!~T5wNKJy&VYta`>nA(1Cr zecs#+{#>Y`*>eB-%HZsy1v@*tOa7BY=u`nYuQ?T5M@Q$L*CQUgMMczMm`2K4cR~2r z?ChWPiLJM9-`4k;AC3o7*eIgb90@t9*~swW>ux&A$^-8bc`ay^R^w@h98Ads{GHMd zV)g@Z0S=+AZ~Km)3?suu-OXzU_j|`xs5#(bGf;r^7c8K{E;3$|JnW*RZ`5#!%*W#G z+jIBOk)&1j_;IpiYO37o>gt5Sh0`HW0HsHA6fbq4Q0S)yGYx=DC}>Up{!$ZpWsIos zd8e^=ZC^cOm=T&TtyNy3jr);I&uMT$p9D8ZOv>++u~=)1%^<;w&u;o?;843%OtLJv z^Ku@PiET%LexxS(Q!2vOCx5064@UFV4O3s(jGM!XP06WIi_Y?rQ*73IL>pUMN&FW5 zUti)sZzI6~@W!F(c$@{de?pcoCLO;uI*$NU9;WQf%oTX3A^W)oZc3JwH8V$g--7@?AKZcB(srS?@9f zN5a+@-URl`d{eaf1gmZFb*yQhPgZ85yQjN5>+1;9-@S=ROg8Ie$(Q3tKH?jW0!kcD zzk9f0V>rNBmqco}xC5_MIsSL&8pW z=Dd(&)}orPdE@W2OK%AR%3QC5D;8nas%{BjZu7FE0BOhkP_<$bU!(W+=Gd-bxx=f5-MsI-e#99UmW`D1lPPxxTxV zgp!AAONjFe+6>dHk5yP5%FD@xo?94O5~nuF>~9DrQZze#mGLP|0%N?R45d=zt(+oq zzUD0a>?j}mW7qmu`@B-|ksU{GnI)()8AASr7$jVb)m&io?TrIqOQm`06xnPn!S~x) zaZ@xO;)HN!hc17c6uu}2rBVB~H0pFyAW>)@JbB!HgXZN|aY&|8oX~_hYGHRORXsgD z6M!Q+=2g+L@QoDC5S{GYVjqOQ52!MpJQ@AS^%>>V5+58KqE)2hlx|AEF#o&LncLgu zgNp9VYfwm>LMvMzKD&2!R(@u=Q=zCjoGkP8(@$4mP)6aAa{Og9yPwI(WMKIG#S8Wn z9y8Q=XrF(3i!RH4zdhiO4qyVnw8&E?wtO5mNAo?@2IrMv8u%;sO6h+rePe#`(R%{W z-SEatq9lGhPq*XEu`bzhN5svanQ8|cCnu-$qT$MWf{u$ViduznJuE2O2Uu})Ppp55 z3)_qrjVL@*_XT2A0Jwt>g@T>VX9rc{7cn$ASY>Dsl+Xr(-_IAu%>drXRkL-`dZy%i zk6hbfpBn%SgK8Z%%`&+OL<{@ithaDS%qg9ivQmRDS1Vs~w8O@cyK$DbaqUpvYzlWw_z_piyvF|>) z>fG1e-CZl;z*rvBO4OdQ>*bu&j%X+awc!qQv?3d zi3z{>szbqtju})K4*7JLH_W1j9G^c#Mn;x2dYxV?rO1S$@key9-nEu3%?x&h+7^5A zIn4j<+|(?LL>8qFigC5uM*A<^2#1YbJdK??`j9YZ`CQ0tp~**E?fgpi4|SjMH^>9? z*b7BGu~Y}JvIwKOJ!{X`1C8dZKcw%4lE{8F0D_qn#xzkD zfo)4Q=-Y}H?ORyWC)&eR%G$KZvPS^Ck5;>p52K_f*Jd1Yj##&>xbvd@~|&vWs*{h|D90umQcQKaA$(=PMNj zovY4`WL^`W4-O9OV5^HxxG|27x!`;2DQbSdX+f<03NS0he{^v zA9C6(rasnG5AuGW<;L*fqw9OAba}*JNECJK+{cHU&AEP?>K-Z<*9f@g$l&1K>jK^L z4GqXcDIs$Na^tT1pGl`0dNhf(WjiNL%`t1#LHD2BH@jqb;%>=JGmYe2XPw*^FyuJ( zrpZmGb*0uJcXwA#QSkGy3A`>%?FHJ@^<{v0t?ljIyL^A>xC-xel2EwWH!B2nMn`e{ z&RzN3_d9Ce)lB2A^#^UjwPdfIxMwj|Cp-G}_UR^$%?+Z)pz;y$?{%)u0NN~3R`(-8 z7N{EiqWkY3I+|#8wD;_xNLV>II61}NYmEUAUj1elJxkNg%q&}dST5~^?Fp1&@Z=nh zk&(nc-{gj?@24{F2Ss8hk=$qAO|+C}?UHWb2IMjnQ@VyXcE`Za zYF1X1wF2K^jS>A_B&6}bG~gmT>YN|r)OVk(ePUx{Q?FeXd=EEh8b~tQs*HQ(dH0S2 zPe&~JMGi?f>DYc6r-IVJaCY^<)XicI!U z``@(BW6Fw_teE$HP9L>J11gO;`}7+@HZNZf#q~Vz0U;*Y0I*$v61wxOb9QckVufb}jUL_c(s-0qE1BkJv&O z5bzkv-mkihEPD-0@ky>O5Uq!8TF}GWvO`m34oC|IMeY<7FO}w&qvo zW7P-@<*tRq*y5>Lm$dFD2W~V@>EG&f zsSC7MN(P%en&}6+g$_re_RkkT23i*+D92WC00K%0AjyjlL&xkinIrpM$|J>A*47v4 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 literal 0 HcmV?d00001 diff --git a/docs/_static/logo.png b/docs/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f7101493f9f71da330f13d97892dc2ab180e4315 GIT binary patch literal 44544 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 Js<3pw{9iWP`8EIm literal 0 HcmV?d00001 diff --git a/docs/conf.py b/docs/conf.py index 182f6a9..931eb0f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,8 +19,8 @@ # -- Project information ----------------------------------------------------- project = 'csaps' -copyright = '2017-2025, Eugene Prilepin' # noqa author = 'Eugene Prilepin' +copyright = f'2017-2025, {author}' # noqa def _get_version(): @@ -47,7 +47,9 @@ def _get_version(): 'm2r2', ] -intersphinx_mapping = {'scipy': ('https://docs.scipy.org/doc/scipy/reference/', None)} +intersphinx_mapping = { + 'scipy': ('https://docs.scipy.org/doc/scipy/reference/', None), +} # Extension settings plot_apply_rcparams = True @@ -69,7 +71,7 @@ def _get_version(): from mpl_toolkits.mplot3d import Axes3D from csaps import csaps -plt.style.use('ggplot') +plt.style.use('csaps.mplstyle') def univariate_data(n=25, seed=1234): np.random.seed(seed) @@ -95,23 +97,22 @@ def univariate_data(n=25, seed=1234): # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -# -html_theme = 'alabaster' +html_theme = 'furo' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] +pygments_style = 'tango' +pygments_dark_style = 'stata-dark' + html_theme_options = { - 'fixed_sidebar': 'true', - 'show_powered_by': 'false', - 'description': 'Cubic spline approximation (smoothing)', - 'github_user': 'espdev', - 'github_repo': 'csaps', - 'github_type': 'star', - 'extra_nav_links': { - 'GitHub repository': 'https://github.com/espdev/csaps', - 'PyPI': 'https://pypi.org/project/csaps', - }, + 'light_logo': 'logo.png', + 'dark_logo': 'logo-dark-mode.png', + 'sidebar_hide_name': True, + 'source_repository': 'https://github.com/espdev/csaps', + 'source_branch': 'master', + 'source_directory': 'docs/', + 'top_of_page_buttons': ['view'], } diff --git a/docs/csaps.mplstyle b/docs/csaps.mplstyle new file mode 100644 index 0000000..f32e816 --- /dev/null +++ b/docs/csaps.mplstyle @@ -0,0 +1,49 @@ +# based on Matplotlib ggplot.mplstyle +# https://github.com/matplotlib/matplotlib/blob/main/lib/matplotlib/mpl-data/stylelib/ggplot.mplstyle + +patch.linewidth: 0.5 +patch.facecolor: 348ABD # blue +patch.edgecolor: EEEEEE +patch.antialiased: True + +font.size: 10.0 + +axes.facecolor: none +axes.edgecolor: none +axes.linewidth: 1 +axes.grid: True +axes.titlesize: x-large +axes.labelsize: large +axes.labelcolor: 555555 +axes.axisbelow: True # grid/ticks are below elements (e.g., lines, text) +axes.titlecolor: 555555 + +axes.prop_cycle: cycler('color', ['E24A33', '348ABD', '988ED5', '777777', 'FBC15E', '8EBA42', 'FFB5B8']) + # E24A33 : red + # 348ABD : blue + # 988ED5 : purple + # 777777 : gray + # FBC15E : yellow + # 8EBA42 : green + # FFB5B8 : pink + +axes3d.grid: True +axes3d.xaxis.panecolor: none +axes3d.yaxis.panecolor: none +axes3d.zaxis.panecolor: none + +xtick.color: 555555 +xtick.direction: out + +ytick.color: 555555 +ytick.direction: out + +grid.color: C9C9C9 +grid.linestyle: - # solid line + +legend.facecolor: none +legend.edgecolor: none +legend.labelcolor: 555555 + +figure.facecolor: white +figure.edgecolor: 0.50 diff --git a/docs/formulation.rst b/docs/formulation.rst index 1b3617b..7b801b8 100644 --- a/docs/formulation.rst +++ b/docs/formulation.rst @@ -89,7 +89,8 @@ It is an example plot of comparison ``csaps`` and ``scipy.UnivariateSpline`` (k= plt.plot(x, y, 'o') plt.plot(xi, yi_scipy, '-', label='scipy UnivariateSpline') plt.plot(xi, yi_csaps, '-', label='csaps') - plt.legend() + + plt.legend(bbox_to_anchor=(0, 1, 1, 0), loc="lower center", ncol=2) .. rubric:: Footnotes diff --git a/docs/index.rst b/docs/index.rst index 4d16072..649205f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -5,6 +5,9 @@ csaps CSAPS -- Cubic Spline Approximation (Smoothing) +Version: +|release| + Overview -------- @@ -38,27 +41,37 @@ You can install and update csaps using pip: pip install -U csaps +or using modern packaging tools like Poetry: + +.. code-block:: bash + + poetry add csaps + + The module depends only on NumPy and SciPy. Python 3.10 or above is supported. -Content -------- - .. toctree:: - :maxdepth: 2 + :caption: User Guide + :hidden: formulation tutorial internals benchmarks - api changelog +.. toctree:: + :caption: API + :hidden: + + api + genindex -Indices and Tables -================== +.. toctree:: + :caption: Project Links + :hidden: -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` + GitHub + PyPI diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 0aa33cb..0bf9d83 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -122,7 +122,7 @@ The same weights vector and the same smoothing parameter will be used for all Y ax = fig.add_subplot(111, projection='3d') ax.set_facecolor('none') ax.plot(x, y, z, '.:') - ax.plot(xi, yi, zi, '-') + ax.plot(xi, yi, zi, '-', linewidth=2) N-D grid Smoothing @@ -225,14 +225,11 @@ The example of auto smoothing univariate data: x, y = univariate_data() xi = np.linspace(x[0], x[-1], 51) - smoothing_result = csaps(x, y, xi) - - yi = smoothing_result.values - smooth = smoothing_result.smooth + yi, smooth = csaps(x, y, xi) plt.plot(x, y, 'o') - plt.plot(xi, yi, '-', label=f'smooth={smooth:.3f}') - plt.legend() + plt.plot(xi, yi, '-', label=f'smooth={smooth:.4f}') + plt.legend(bbox_to_anchor=(0, 1, 1, 0), loc="lower center") In ND-gridded data case we can use auto smoothing for all dimensions or the particular dimensions: @@ -268,9 +265,9 @@ The following example demonstartes these two boundary cases: yi_1 = csaps(x, y, xi, smooth=1) plt.plot(x, y, 'o:') - plt.plot(xi, yi_0, '-', label='smooth=0') - plt.plot(xi, yi_1, '-', label='smooth=1') - plt.legend() + plt.plot(xi, yi_0, '-', label='smooth=0.0') + plt.plot(xi, yi_1, '-', label='smooth=1.0') + plt.legend(bbox_to_anchor=(0, 1, 1, 0), loc="lower center", ncol=2) Weighted Smoothing @@ -303,7 +300,7 @@ The example of weighted smoothing univariate data: plt.plot(x, y, 'o') plt.plot(xi, yi, '-', label='unweighted') plt.plot(xi, yi_w, '-', label='weighted') - plt.legend() + plt.legend(bbox_to_anchor=(0, 1, 1, 0), loc="lower center", ncol=2) In n-d gridded data case we can use the same weights for all dimensions or different weights for each dimension. @@ -377,6 +374,11 @@ Let's show it on a simple example. ax3.plot(x1, y, 'o', xi1, yi1_n, '-') ax4.plot(x2, y, 'o', xi2, yi2_n, '-') + ax1.set_title('normalizedsmooth=False') + ax2.set_title('normalizedsmooth=False') + ax3.set_title('normalizedsmooth=True') + ax4.set_title('normalizedsmooth=True') + Computing Spline Without Evaluating ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -408,6 +410,9 @@ The example for univariate data: ax1.plot(x, y, 'o', xi1, yi1, '.-') ax2.plot(x, y, 'o', xi2, yi2, '.-') + ax1.set_title('20 evaluated points') + ax2.set_title('50 evaluated points') + .. _tutorial-analysis: diff --git a/poetry.lock b/poetry.lock index 5aca045..3ce980a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -25,6 +25,28 @@ files = [ [package.extras] dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] +[[package]] +name = "beautifulsoup4" +version = "4.13.3" +description = "Screen-scraping library" +optional = true +python-versions = ">=3.7.0" +files = [ + {file = "beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"}, + {file = "beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b"}, +] + +[package.dependencies] +soupsieve = ">1.2" +typing-extensions = ">=4.0.0" + +[package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] +html5lib = ["html5lib"] +lxml = ["lxml"] + [[package]] name = "certifi" version = "2025.1.31" @@ -450,6 +472,23 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +[[package]] +name = "furo" +version = "2024.8.6" +description = "A clean customisable Sphinx documentation theme." +optional = true +python-versions = ">=3.8" +files = [ + {file = "furo-2024.8.6-py3-none-any.whl", hash = "sha256:6cd97c58b47813d3619e63e9081169880fbe331f0ca883c871ff1f3f11814f5c"}, + {file = "furo-2024.8.6.tar.gz", hash = "sha256:b63e4cee8abfc3136d3bc03a3d45a76a850bada4d6374d24c1716b0e01394a01"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +pygments = ">=2.7" +sphinx = ">=6.0,<9.0" +sphinx-basic-ng = ">=1.0.0.beta2" + [[package]] name = "identify" version = "2.6.9" @@ -1439,6 +1478,17 @@ files = [ {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] +[[package]] +name = "soupsieve" +version = "2.6" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = true +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, + {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, +] + [[package]] name = "sphinx" version = "7.4.7" @@ -1474,6 +1524,23 @@ docs = ["sphinxcontrib-websupport"] lint = ["flake8 (>=6.0)", "importlib-metadata (>=6.0)", "mypy (==1.10.1)", "pytest (>=6.0)", "ruff (==0.5.2)", "sphinx-lint (>=0.9)", "tomli (>=2)", "types-docutils (==0.21.0.20240711)", "types-requests (>=2.30.0)"] test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] +[[package]] +name = "sphinx-basic-ng" +version = "1.0.0b2" +description = "A modern skeleton for Sphinx themes." +optional = true +python-versions = ">=3.7" +files = [ + {file = "sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b"}, + {file = "sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9"}, +] + +[package.dependencies] +sphinx = ">=4.0" + +[package.extras] +docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-tabs"] + [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0" @@ -1672,9 +1739,9 @@ docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "s test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [extras] -docs = ["docutils", "m2r2", "matplotlib", "numpydoc", "sphinx"] +docs = ["docutils", "furo", "m2r2", "matplotlib", "numpydoc", "sphinx"] [metadata] lock-version = "2.0" python-versions = ">=3.10" -content-hash = "4694dba8ecc138f04a26c11ef6556294d5177441a3d9f8fd926b06077e1f2666" +content-hash = "bbfad4cf4a9c69336d9dcff4ff50cfacb9f078f2c8965f8c7bae3e55addabd45" diff --git a/pyproject.toml b/pyproject.toml index 670062e..c16268d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,7 @@ scipy = [ ] sphinx = {version = "^7.1.2", optional = true} docutils = {version = "^0.20.0", optional = true} +furo = {version = "^2024.8.6", optional = true} numpydoc = {version = "^1.6.0", optional = true} m2r2 = {version = "^0.3.2", optional = true} matplotlib = {version = "^3.7.4", optional = true} @@ -71,7 +72,7 @@ poethepoet = "^0.33.1" [tool.poetry.extras] -docs = ["sphinx", "docutils", "numpydoc", "m2r2", "matplotlib"] +docs = ["sphinx", "docutils", "furo", "numpydoc", "m2r2", "matplotlib"] [build-system] From 98ca24481c38b747b99bffd903635c58fd387027 Mon Sep 17 00:00:00 2001 From: Evgeny Prilepin Date: Tue, 15 Apr 2025 22:48:27 +0100 Subject: [PATCH 2/3] build: disable pre-commit hook check-types --- .pre-commit-config.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 70778fc..a4844bb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -16,9 +16,9 @@ repos: language: system types: [ python ] require_serial: true - - id: check-types - name: check-types - entry: poetry run poe check-types-pre-commit - language: system - types: [ python ] - require_serial: true +# - id: check-types +# name: check-types +# entry: poetry run poe check-types-pre-commit +# language: system +# types: [ python ] +# require_serial: true From 61386dd47f5d2af0d47d3a45b9e70980d184fd2c Mon Sep 17 00:00:00 2001 From: Evgeny Prilepin Date: Tue, 15 Apr 2025 23:21:04 +0100 Subject: [PATCH 3/3] build: remove extra docs dependencies and use RTD build via Poetry --- .github/workflows/main.yaml | 2 +- .github/workflows/release.yaml | 4 +- .readthedocs.yml | 17 ++- poetry.lock | 200 ++++++++++++++++----------------- pyproject.toml | 15 ++- 5 files changed, 117 insertions(+), 121 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 12b857d..09e76c6 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -56,7 +56,7 @@ jobs: key: venv-${{ hashFiles('poetry.lock') }} - name: Install the project dependencies - run: poetry install -E docs + run: poetry install - name: Run static analysis, linters and mypy run: poetry run poe check diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 0a0cc8c..05f8de9 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -45,9 +45,7 @@ jobs: key: venv-${{ hashFiles('poetry.lock') }} - name: Build - run: | - poetry install - poetry build + run: poetry build - name: Get package version to create a new tag and release id: get-version diff --git a/.readthedocs.yml b/.readthedocs.yml index 98d3978..f2ffdf9 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -8,7 +8,14 @@ version: 2 build: os: ubuntu-lts-latest tools: - python: "3.11" + python: "3.12" + + # https://docs.readthedocs.com/platform/stable/build-customization.html#install-dependencies-with-poetry~ + jobs: + post_install: + - pip install poetry + - VIRTUAL_ENV=$READTHEDOCS_VIRTUALENV_PATH poetry install --with docs + # Build documentation in the docs/ directory with Sphinx sphinx: @@ -18,11 +25,3 @@ sphinx: # Optionally build your docs in additional formats such as PDF and ePub formats: - pdf - -# Optionally set the version of Python and requirements required to build your docs -python: - install: - - method: pip - path: . - extra_requirements: - - docs diff --git a/poetry.lock b/poetry.lock index 3ce980a..e5f9ca9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4,7 +4,7 @@ name = "alabaster" version = "0.7.16" description = "A light, configurable Sphinx theme" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, @@ -15,7 +15,7 @@ files = [ name = "babel" version = "2.17.0" description = "Internationalization utilities" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, @@ -27,13 +27,13 @@ dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest [[package]] name = "beautifulsoup4" -version = "4.13.3" +version = "4.13.4" description = "Screen-scraping library" -optional = true +optional = false python-versions = ">=3.7.0" files = [ - {file = "beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"}, - {file = "beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b"}, + {file = "beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b"}, + {file = "beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195"}, ] [package.dependencies] @@ -51,7 +51,7 @@ lxml = ["lxml"] name = "certifi" version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, @@ -73,7 +73,7 @@ files = [ name = "charset-normalizer" version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, @@ -183,65 +183,68 @@ files = [ [[package]] name = "contourpy" -version = "1.3.1" +version = "1.3.2" description = "Python library for calculating contours of 2D quadrilateral grids" -optional = true +optional = false python-versions = ">=3.10" files = [ - {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, - {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, - {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1"}, - {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b"}, - {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453"}, - {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3"}, - {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277"}, - {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595"}, - {file = "contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697"}, - {file = "contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e"}, - {file = "contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b"}, - {file = "contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc"}, - {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86"}, - {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6"}, - {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85"}, - {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c"}, - {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291"}, - {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f"}, - {file = "contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"}, - {file = "contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9"}, - {file = "contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509"}, - {file = "contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc"}, - {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454"}, - {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80"}, - {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec"}, - {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9"}, - {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b"}, - {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d"}, - {file = "contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e"}, - {file = "contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d"}, - {file = "contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2"}, - {file = "contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5"}, - {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81"}, - {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2"}, - {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7"}, - {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c"}, - {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3"}, - {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1"}, - {file = "contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82"}, - {file = "contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd"}, - {file = "contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30"}, - {file = "contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751"}, - {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342"}, - {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c"}, - {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f"}, - {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda"}, - {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242"}, - {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1"}, - {file = "contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1"}, - {file = "contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546"}, - {file = "contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6"}, - {file = "contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750"}, - {file = "contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53"}, - {file = "contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699"}, + {file = "contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934"}, + {file = "contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631"}, + {file = "contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f"}, + {file = "contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2"}, + {file = "contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0"}, + {file = "contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a"}, + {file = "contourpy-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445"}, + {file = "contourpy-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7"}, + {file = "contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83"}, + {file = "contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd"}, + {file = "contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f"}, + {file = "contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878"}, + {file = "contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2"}, + {file = "contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe"}, + {file = "contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441"}, + {file = "contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e"}, + {file = "contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912"}, + {file = "contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73"}, + {file = "contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb"}, + {file = "contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841"}, + {file = "contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422"}, + {file = "contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef"}, + {file = "contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f"}, + {file = "contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9"}, + {file = "contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f"}, + {file = "contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b"}, + {file = "contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52"}, + {file = "contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd"}, + {file = "contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1"}, + {file = "contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69"}, + {file = "contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c"}, + {file = "contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16"}, + {file = "contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad"}, + {file = "contourpy-1.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0"}, + {file = "contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5"}, + {file = "contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5"}, + {file = "contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54"}, ] [package.dependencies] @@ -250,7 +253,7 @@ numpy = ">=1.23" [package.extras] bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +mypy = ["bokeh", "contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.15.0)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] @@ -336,7 +339,7 @@ toml = ["tomli"] name = "cycler" version = "0.12.1" description = "Composable style cycles" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, @@ -362,7 +365,7 @@ files = [ name = "docutils" version = "0.20.1" description = "Docutils -- Python Documentation Utilities" -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, @@ -403,7 +406,7 @@ typing = ["typing-extensions (>=4.12.2)"] name = "fonttools" version = "4.57.0" description = "Tools to manipulate font files" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "fonttools-4.57.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:babe8d1eb059a53e560e7bf29f8e8f4accc8b6cfb9b5fd10e485bde77e71ef41"}, @@ -476,7 +479,7 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "furo" version = "2024.8.6" description = "A clean customisable Sphinx documentation theme." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "furo-2024.8.6-py3-none-any.whl", hash = "sha256:6cd97c58b47813d3619e63e9081169880fbe331f0ca883c871ff1f3f11814f5c"}, @@ -507,7 +510,7 @@ license = ["ukkonen"] name = "idna" version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, @@ -521,7 +524,7 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, @@ -543,7 +546,7 @@ files = [ name = "jinja2" version = "3.1.6" description = "A very fast and expressive template engine." -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, @@ -560,7 +563,7 @@ i18n = ["Babel (>=2.7)"] name = "kiwisolver" version = "1.4.8" description = "A fast implementation of the Cassowary constraint solver" -optional = true +optional = false python-versions = ">=3.10" files = [ {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, @@ -649,7 +652,7 @@ files = [ name = "m2r2" version = "0.3.3.post2" description = "Markdown and reStructuredText in a single file." -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "m2r2-0.3.3.post2-py3-none-any.whl", hash = "sha256:86157721eb6eabcd54d4eea7195890cc58fa6188b8d0abea633383cfbb5e11e3"}, @@ -664,7 +667,7 @@ mistune = "0.8.4" name = "markupsafe" version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, @@ -734,7 +737,7 @@ files = [ name = "matplotlib" version = "3.10.1" description = "Python plotting package" -optional = true +optional = false python-versions = ">=3.10" files = [ {file = "matplotlib-3.10.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ff2ae14910be903f4a24afdbb6d7d3a6c44da210fc7d42790b87aeac92238a16"}, @@ -791,7 +794,7 @@ dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setup name = "mistune" version = "0.8.4" description = "The fastest markdown parser in pure Python" -optional = true +optional = false python-versions = "*" files = [ {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, @@ -941,7 +944,7 @@ files = [ name = "numpydoc" version = "1.8.0" description = "Sphinx extension to support docstrings in Numpy format" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "numpydoc-1.8.0-py3-none-any.whl", hash = "sha256:72024c7fd5e17375dec3608a27c03303e8ad00c81292667955c6fea7a3ccf541"}, @@ -1001,7 +1004,7 @@ files = [ name = "pillow" version = "11.2.1" description = "Python Imaging Library (Fork)" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "pillow-11.2.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:d57a75d53922fc20c165016a20d9c44f73305e67c351bbc60d1adaf662e74047"}, @@ -1168,7 +1171,7 @@ virtualenv = ">=20.10.0" name = "pygments" version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, @@ -1182,7 +1185,7 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pyparsing" version = "3.2.3" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"}, @@ -1236,7 +1239,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, @@ -1312,7 +1315,7 @@ files = [ name = "requests" version = "2.32.3" description = "Python HTTP for Humans." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, @@ -1460,7 +1463,7 @@ type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14 name = "six" version = "1.17.0" description = "Python 2 and 3 compatibility utilities" -optional = true +optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, @@ -1471,7 +1474,7 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -optional = true +optional = false python-versions = "*" files = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, @@ -1482,7 +1485,7 @@ files = [ name = "soupsieve" version = "2.6" description = "A modern CSS selector implementation for Beautiful Soup." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, @@ -1493,7 +1496,7 @@ files = [ name = "sphinx" version = "7.4.7" description = "Python documentation generator" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"}, @@ -1528,7 +1531,7 @@ test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools name = "sphinx-basic-ng" version = "1.0.0b2" description = "A modern skeleton for Sphinx themes." -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "sphinx_basic_ng-1.0.0b2-py3-none-any.whl", hash = "sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b"}, @@ -1545,7 +1548,7 @@ docs = ["furo", "ipython", "myst-parser", "sphinx-copybutton", "sphinx-inline-ta name = "sphinxcontrib-applehelp" version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, @@ -1561,7 +1564,7 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "2.0.0" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, @@ -1577,7 +1580,7 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, @@ -1593,7 +1596,7 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -optional = true +optional = false python-versions = ">=3.5" files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, @@ -1607,7 +1610,7 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "2.0.0" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, @@ -1623,7 +1626,7 @@ test = ["defusedxml (>=0.7.1)", "pytest"] name = "sphinxcontrib-serializinghtml" version = "2.0.0" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, @@ -1639,7 +1642,7 @@ test = ["pytest"] name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" -optional = true +optional = false python-versions = ">=3.7" files = [ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, @@ -1705,7 +1708,7 @@ files = [ name = "urllib3" version = "2.4.0" description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, @@ -1738,10 +1741,7 @@ platformdirs = ">=3.9.1,<5" docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] -[extras] -docs = ["docutils", "furo", "m2r2", "matplotlib", "numpydoc", "sphinx"] - [metadata] lock-version = "2.0" python-versions = ">=3.10" -content-hash = "bbfad4cf4a9c69336d9dcff4ff50cfacb9f078f2c8965f8c7bae3e55addabd45" +content-hash = "7cda583c6dbf93279b62526489400aef19c748da87224471f3e9af10fda0bbfa" diff --git a/pyproject.toml b/pyproject.toml index c16268d..3f02b08 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,12 +52,6 @@ scipy = [ {version = "*", python = "<3.12"}, {version = ">=1.11.4", python = ">=3.12"}, ] -sphinx = {version = "^7.1.2", optional = true} -docutils = {version = "^0.20.0", optional = true} -furo = {version = "^2024.8.6", optional = true} -numpydoc = {version = "^1.6.0", optional = true} -m2r2 = {version = "^0.3.2", optional = true} -matplotlib = {version = "^3.7.4", optional = true} [tool.poetry.group.dev.dependencies] @@ -71,8 +65,13 @@ pre-commit = "^4.2.0" poethepoet = "^0.33.1" -[tool.poetry.extras] -docs = ["sphinx", "docutils", "furo", "numpydoc", "m2r2", "matplotlib"] +[tool.poetry.group.docs.dependencies] +sphinx = "^7.1.2" +docutils = "^0.20.0" +furo = "^2024.8.6" +numpydoc = "^1.6.0" +m2r2 = "^0.3.2" +matplotlib = "^3.7.4" [build-system]