From d78564e1d6b4e274f1e5e7db1762500335f5e627 Mon Sep 17 00:00:00 2001 From: Dan Allan Date: Tue, 17 Sep 2024 09:42:07 -0400 Subject: [PATCH 1/2] Restrucutre --- .gitattributes | 2 + .github/workflows/_check.yml | 27 - .github/workflows/_nox.yml | 21 - .github/workflows/cd.yml | 102 + .github/workflows/ci.yml | 27 + .github/workflows/gh-pages.yml | 32 - .gitignore | 4 + README.md | 23 +- convert_all.sh | 49 + .../images/open-with-jupytext-notebook.png | Bin 0 -> 71884 bytes docs/conf.py | 183 +- docs/contributing.md | 173 + docs/index.md | 37 +- docs/recipes.md | 7 - docs/recipes/how-to/example/demo.md | 36 + docs/recipes/test.md | 4 - docs/recipes/tutorials/example/demo.md | 36 + noxfile.py | 50 - pixi.lock | 4702 +++++++++++++++++ pixi.toml | 43 + pyproject.toml | 31 - test.sh | 71 + 22 files changed, 5255 insertions(+), 405 deletions(-) create mode 100644 .gitattributes delete mode 100644 .github/workflows/_check.yml delete mode 100644 .github/workflows/_nox.yml create mode 100644 .github/workflows/cd.yml create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/gh-pages.yml create mode 100755 convert_all.sh create mode 100644 docs/_static/images/open-with-jupytext-notebook.png create mode 100644 docs/contributing.md delete mode 100644 docs/recipes.md create mode 100644 docs/recipes/how-to/example/demo.md delete mode 100644 docs/recipes/test.md create mode 100644 docs/recipes/tutorials/example/demo.md delete mode 100644 noxfile.py create mode 100644 pixi.lock create mode 100644 pixi.toml delete mode 100644 pyproject.toml create mode 100755 test.sh diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..07fe41c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# GitHub syntax highlighting +pixi.lock linguist-language=YAML linguist-generated=true diff --git a/.github/workflows/_check.yml b/.github/workflows/_check.yml deleted file mode 100644 index a6139c1..0000000 --- a/.github/workflows/_check.yml +++ /dev/null @@ -1,27 +0,0 @@ -on: - workflow_call: - outputs: - branch-pr: - description: The PR number if the branch is in one - value: ${{ jobs.pr.outputs.branch-pr }} - -jobs: - pr: - runs-on: "ubuntu-latest" - outputs: - branch-pr: ${{ steps.script.outputs.result }} - steps: - - uses: actions/github-script@v7 - id: script - if: github.event_name == 'push' - with: - script: | - const prs = await github.rest.pulls.list({ - owner: context.repo.owner, - repo: context.repo.repo, - head: context.repo.owner + ':${{ github.ref_name }}' - }) - if (prs.data.length) { - console.log(`::notice ::Skipping CI on branch push as it is already run in PR #${prs.data[0]["number"]}`) - return prs.data[0]["number"] - } diff --git a/.github/workflows/_nox.yml b/.github/workflows/_nox.yml deleted file mode 100644 index fbc135b..0000000 --- a/.github/workflows/_nox.yml +++ /dev/null @@ -1,21 +0,0 @@ -on: - workflow_call: - inputs: - nox: - type: string - description: What to run under nox - required: true - -jobs: - run: - runs-on: "ubuntu-latest" - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install python packages - uses: ./.github/actions/install_requirements - - - name: Run nox - run: nox -e ${{ inputs.nox }} diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 0000000..ca93bce --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,102 @@ +--- +name: Publish + +on: + push: + branches: + - main + schedule: + - cron: '0 5 * * 1' + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + + build: + if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + name: Build Jupyter Notebooks and HTML + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup GitHub Pages + uses: actions/configure-pages@v5 + + - name: Setup pixi + uses: prefix-dev/setup-pixi@v0.8.1 + with: + cache: true + cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }} + + - name: Build executed notebooks and HTML + run: pixi run build + + - name: Upload executed notebooks as GitHub artifact + uses: actions/upload-artifact@v4 + with: + name: executed-notebooks + path: build/jupyter_execute/recipes + if-no-files-found: error + + - name: Prepare for Jupyter Lite + run: | + cp README.md docs/recipes/ + # Convert Jupytext to ipynb format. + pixi run ./convert_all.sh ipynb + + - name: Build Jupyter Lite + run: pixi run -e jupyterlite jupyter lite build --contents docs/recipes --output-dir build/html/jupyterlite + + - name: Upload HTML as GitHub artifact + uses: actions/upload-pages-artifact@v3 + with: + path: build/html + + deploy-gh-pages: + name: Deploy HTML to GitHub Pages + # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages + permissions: + contents: read + pages: write + id-token: write + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy HTML to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 + + deploy-notebooks: + name: Push to 'notebooks' branch ipynb-formatted version + # Sets permissions of the GITHUB_TOKEN to allow pushing to 'notebooks' branch + permissions: + contents: write + runs-on: ubuntu-latest + needs: build + steps: + + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pixi + uses: prefix-dev/setup-pixi@v0.8.1 + + - name: Publish ipynb-formatted variant to 'notebooks' branch of this repo + run: | + git fetch origin + git checkout -B notebooks + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + pixi run ./convert_all.sh ipynb + git add . + git commit -am "Convert jupytext to ipynb format" + git push origin notebooks --force-with-lease diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ac90abb --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,27 @@ +--- +name: Test notebooks + +on: + push: + branches: + - main + pull_request: + branches: + - main + schedule: + - cron: '0 5 * * 1' + workflow_dispatch: + +jobs: + test: + name: Test all executable examples + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pixi + uses: prefix-dev/setup-pixi@v0.8.1 + + - name: Test all files + run: pixi run ./test.sh --all diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml deleted file mode 100644 index 1fb3775..0000000 --- a/.github/workflows/gh-pages.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: GitHub Pages - -on: - workflow_dispatch: - pull_request: - push: - branches: - - main # Set a branch name to trigger deployment - - 13-docs-cicd - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - deploy: - runs-on: "ubuntu-latest" - permissions: - contents: write - steps: - - uses: actions/checkout@v4 - - name: Install python packages - uses: ./.github/actions/install_requirements - - name: Build - run: nox -s docs - - name: Deploy - uses: peaceiris/actions-gh-pages@v4 - if: github.ref == 'refs/heads/main' - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/_build/html - publish_branch: gh-pages diff --git a/.gitignore b/.gitignore index 1856452..c969f0d 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,7 @@ lockfiles/ # ruff cache .ruff_cache/ + +/build/* +.ipynb_checkpoints +/.pixi/* diff --git a/README.md b/README.md index f748e34..98994bc 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,5 @@ # bluesky-cookbook -Documentation for various use cases, ideas and "recipes" within the bluesky framework +Documentation for various use cases, ideas and "recipes" within the bluesky ecosystem -See it live [here](http://blueskyproject.io/bluesky-cookbook/)! - -Each recipe should: - -* Be self contained -* Include a list of "ingredients" i.e. which parts of the bluesky framework you need and what data you need -* Be a markdown document -* Be categorised as a [tutorial or how-to guide](https://diataxis.fr/) -* Tagged - * User - * Developer - * Admin - * Manager - -## How to Build - -```bash -pip install nox -nox -s docs -``` +See it live at [blueskyproject.io/bluesky-cookbook](http://blueskyproject.io/bluesky-cookbook/)! diff --git a/convert_all.sh b/convert_all.sh new file mode 100755 index 0000000..0ac64c4 --- /dev/null +++ b/convert_all.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# If no arguments were provided, exit with error and show usage. +if [ $# -eq 0 ]; then + echo "Usage: $0 md | ipynb " >&2 + exit 1 +fi + +# Variable to track if any errors occur +error_occurred=0 + +if [ "$1" = "ipynb" ]; then + files=$(find docs/recipes/ -name "*.md" | grep -v .ipynb_checkpoints) + for file in $files; do + # Extract the kernel information from the Jupytext Markdown file + kernel_info=$(grep -A 10 '^---$' "$file" | grep -E 'kernelspec') + # Skip if no kernel information was found + if [ -z "$kernel_info" ]; then + continue + fi + jupytext --to ipynb "$file" && rm "$file" + if [ $? -ne 0 ]; then + error_occurred=1 + echo "Errors when converting $file" + else + echo "Converted $file" + fi + done +elif [ "$1" = "md" ]; then + files=$(find docs/recipes/ -name "*.ipynb" | grep -v .ipynb_checkpoints) + for file in $files; do + jupytext --to markdown "$file" && rm "$file" + if [ $? -ne 0 ]; then + error_occurred=1 + echo "Errors when converting $file" + else + echo "Converted $file" + fi + done +fi + +if [ $error_occurred -ne 0 ]; then + echo "Some files failed to convert." >&2 + exit 1 +else + echo "All files converted successfully." >&2 + exit 0 +fi + diff --git a/docs/_static/images/open-with-jupytext-notebook.png b/docs/_static/images/open-with-jupytext-notebook.png new file mode 100644 index 0000000000000000000000000000000000000000..010e5b2e0e22011618e7828e0c4374a0f7405269 GIT binary patch literal 71884 zcmZU4b9i4(*KU%wVUxyY4A|ML_@`)4#1S}E~94KiWHDm_?0rfZG=a&}c=f}6U zwK6m@Hvj=4i}r}-6zSo??$g5R`;PL3J@}`7p(Lt+Aa)(JU?IF|fFh0r^{X!ltY~Oh z&W5V>gr#CA*D|xd>$h$Z+l`aSC*+7e1RErZ&rKVx>EFGM2vqe6l z4PC4TN{c2!H~bSm&+jCI5m8yh_U&U_(Dt=H=Y;nrZsDlp8gzL05ThiWrCzMw>6H2| zmkieK&}uPvNe;uQFClnM<<2ktO&hkqjf6(*P19NVexNQXo9HPrGHsD>6&4@H;f*+# z+OBPt#+Q`3NWFDiOKPd?{T$UHsthI;fzQeeMI5R`$Wb8e;|smp=6d6ur->FPP=X4_ zhAHInJ9+AQ-*9SB^tA03haT`5LmPNR2W@ur5gN5=kHRUi0fQXxj9x~6$;#)9siI+zOA^nU(ILJS6b{a3 z63n3Dxs`opZMnlJ`Slg#6RWLj3jWj&U|PU+#f1ex`alps64?Xcc7YNoYY`PY5D;p@ zj~}RW9=9V<2w^Y!OAz7!5)1y*PwP@21fU4RUQpSd-^#+mz|tOs-_}6K-asGU$;93m zUs&{)w2}`T8VCqJh^PRsyz|n@s)xF~!P~<-S_1c^( z&^QcBFE4LsXvje5J5Mg$yi|t$pYtvmb{DSW4jTK)$S5cd1pe@RkiZ|7Bta#mKSZR! zMK3|G#eumN6OODm(UjH`*D; zOW!gU%JeBP3uA2_e+W+9S+bFoH$N@}txB!BE! zW4M=SdKp_|O2;-m{WuJLN>*MF^0NOYn!yOoigVA=jO3rWP?puwifU`)Bqt|VDt&%E z_ZqL#8(3&|pv1w!@r$$dpZ9DE-==)~^DApgk3cADdmyUD?cP#VRn>XJ2jZ!el8h{~ zunE=#{%-a4AWBo)BAa&q@o?Oa$o;wrl?fC$rdut8KK$!5dPk{dt~&%wllma zBkv7?@}eW4oLE${x6=J__m91UgT~9^*jVIXENRrC-cp+z3&=OFhmFJ%H#xcKKAU=A zLOhy>mzS0*tE!^I6ocu0C$_%cEpuG`C0ucs*KmJ(+@EJ9c|%uIBCf0}g{$d~Kg_Zz z)xz^Zvp%WQsxJMR?onjd!tF{F@F*%a|DP!km*_>+RsB5{0MDRUNN2KAyP*84H#ZqJ=iT0z=3=hP_o6K_e&ah@E5l zGt0(I8Ej)g_Upnh{=qPnsZ zr?abTwQgUi=REAI=1+m4mwlQ1bHfPK$kzJMh%WkRA}%RkFGzdUB2 z8N`BxsAdd7Ta4q2ZX?uNu854iZO?3qX{-NC!TU5aFsRO&BH`WX@N&K<&E;aqrB>&) zNs}e`;=1X{=hW7x$B9EOOpmLtu!?z?H-?kz`HA6d9G^TVm~hr1QD&2cG*r4`8yO|u zrd4t=qZzpjkyTDWY|6~twiPo+#iv9IAI7sK5QSm2{Hdkn{v2OaQiz97*=b_> zKD{X~s;08?cN)8sX4OlyFfIWHhr0ysbP%4Wh@~Yp2y}q&{XuvQz7%UeK{f9_aW(d>`=GFc&> z7W)>1$$HjAM?BgsV%yYV5C}!$mGQS2qM3okr?SNiUPF=Vo4yA*QzgRXRhsIdWEELe zOCAS4h9f8uql32csbsVx(-e~}CGt#Ndjk94Csfb;mssXsGtLz5)K3O9v2iyX6_2k0 zC~qW3LtI^~_X=DOWvF?R;e3d(Y81RCW@g)d-?%^;&qAQ=rGnp|jw>M4y>1RB!@M%s z>`0JEBpSs+NRA@^=scw7SEcb0Ep^S70OCnqF*E z5uBYPQY3B*cf7}}P0cDT#e8RKc^Jkf7Rmu*0XdarK2`NA>HZr%^4T-CHomE4ds4Qq zWxVveFpAVsxpXV7ZZAwB_)GBWC7R-cR`Ic*rX6HzZM;+@y32_87kL>)LxC2u3yNDT zB18pYGC9GT?J~hejN!lTBtB((tjrxvxHQ)Y^ckYsdUM!s)iZeE1FW_)5seyF2*vcW z@fo~RR*GFI?>!sSI8NR#RY=uD7POOOtH8$35S;iP+hnx5m-lxR#LOYK+FKb$Y;mva_qy znWAuUaj~+pTHhSVthpXj0naxvH^HGvN#bn6Aq{cK@!ty*@>2LNWx?#WgXhLbJ5Ihnlz@B@Q({?(6O$G*v@L03ay>;M zQ?P6-lFtmqckEI`{ev@blc?13sd)@}S9%X^wA|QB-rKQHcF)j2+WvEM3h(N@a)!9( zuAozKj=rHi*>ufNA-zvMMMi3l>K0dcehZ# z|ch(@Rx>NGEFoDks%Tm|>gA2{P6K zrJNPBgzgjiabbS={{Hyhqb6R`juOO`d4<|iL5Am$+j*PQWmr3mU17P=c}Q9sj$DBx zj&)i=!Tz_kAhA3?9cG-I(& zGe|4_N*jWyFl$t(h2gW&NEj#0m(D+@*=l4?ZlWk`4t%;5E|S$@PNBW+<;|1jtH_{v zW{iDNr^7ANV{K{r&i1j=?EO|-oV2iWyx3r1V0?Xjov#K-tE#JG*l$p$-O5G16wB2` zm6Vh+L`{^I_Y5D7N-9{LFYrM@LD7)TV8Fn@KCWU(rTPa3jAmw6wP`cwk5$^;T`~X% zTH*CdDJUptn*~h=?(FP*u@ft`wZG4zYk)f_p<7~uVC8v%`X;AJrr7+Yt z555=aL>lI18pgjg#5Cpbjd98LUmXWzsJD8__ixK% z@VY(1nlbBOo}gYu;dh_g*oH<*E69(o4DiWlh`)k2^`X43-Mp5RSPJYO{VW}T2tP=T zEib3$dOl&;8%gTHaayq%UUP@iv3xNm;{yvPw0 zrZwSmso!0FdvB}2x0!;l{7v&Oe!1Fo$J;Fp;Ilc;TF%?KuB8dTf3K{p+yGz?f02CT z8Zdg4Mj5?CdT@B>72R4eMiS)@G{N}R$BNAD$HMOZc;)Ct^c0tPh0i@R_Z35Hr|zd< zs1H;m47(bwTZ9*~7;Jj>ee1(06{53oC^(zpDQJ5PB&{zrH0xmpkW^|6v8-d*%s1}r z8%!%t8g_4reWcG(n*|O%&P1^zuh4ufPUBt*6eBY@oRJ7D^8Ng+2{B=6>J*c2N`QCW zN;$LJ9~;zgg~2>nQf{&(_VMvS^GXLCO%NOo<`qnI?*%3!p+g2Vf#nY)BctS$6j2co z^c%bF{)p}RWlO9Z1_LZKdav!g4AQ={4KLk!gjaX)j-+?ndw2MGQDd~*TF2TBVkYX4 zh;bVIb_D6BEf$Z%->x$9S;x+^jnRJ?5-z3FFapf*FH=|;j3&xnRHDEA2=Kg zzm!ksh_Irfvxy&su{ z6wGV1es6`w(jw8>97dPfL~HZuC`}ridN593Yzz&m_c7DPPGQkvbCj#oMzCW*DhyTa z9npNoQhY5>iY8P;Qg*I|Q!hYjCP`!BWO+@^tJ)zVj*fdLNcmL4=6VC^AcXV>&qr|H zpe!}oSiW4jYO9%>_~4F7SZEaXalPXz8z%VKY__my`Y?j<{rJ6ZUUPdQi(e@{Y}sm{ ztIOx_Uy5rG398$;Ysnz3ch1X~* z+bat!*ZYf|rpK*Jpkz8&MY#$wk@@4(TlKtqZ zUIG!Ru5$kpcEsC?=kw{uuc7y`F+Ni8A5Q!akKTfK0;YxtlJ9RDak;Q9J)+*MRd1}w z2j^{G`(b45y#Tarv?*tnmj@_16A7uOrzZz6+b_pj@7XmqcFF-Ns;cyEcjoTy?&WTM zUM%Yo++NN?h;g2XvFoEwu{{60Dwu9R^bajG(5LK*k~V)CSAc@+>MM(VkoJ!T|34G| zUzWZ_f0h2h__rXMm;7D+r!k9vM+Y~+M%61Iw3(Th=uD=Fplad&BMy8W16bVgqyF32 zm?SnfHqpd?Sw9`C`0z1%!1T}%G$kb^aKqNzy9WiqzrElSvHkv^4sq%${{af=0&&U;faeJ z_nw=bB?X*)k=+I0>YO%{;>gr7WI$^!7uA0TkRp-jGoZ_Gy8JVIHnFMXt`Q@z4xHR5 zm2`O^d5#EX*{{T`|D7J2?Z$v|ZI8lUUdVq0n{XE`uUDoIGzcJez$`}s3~Os+1K;OE z%KbKj>M2XEhbN6#e{!ZGv_|f&T za>JPe7yEK=w9|WUe(H8D=q<5|`RX+a6=4lS``;%9HF3-xQ&etDcBeDoJ^m^+hL=Iy zFFwCgn5%4e#rh+#1^_K$h-KZKkQWi?cYmf@;eKwi?=LH9(}NayoW@imTx;QyX`NH^ z9uz5lw)CD1Tb<4GoFsZarpJ1sKVF!vDmOQ_BotjsW0-!50}^INxmNtac>TtVvg+z1 zt4`~qTYX_P)ENK*hJu26xs3ACA5Z7(?dub*{8-MSl9p$i&fJy00n_n+63B2m!E3Mg zzg7NXKPAKrWX3dwE%Y$j+ShloDGGDsqPA^=y7Y_xSk)xE&Z1aV zO*(V!h3u@5Wf(Xsvm%aSaCSTu!?G4X-(hB_dwwm`IM**o3!Iu)R)VIDhVX1azD?(@ zQEN(E=Vm+{di~Z&V_Zb7qhtvc4@)BbGe@n_H|VAO#LI*$dH9{mEHi5r)99QBH#j*e zgP#fS#e@>}zI<;mY4uty8Ln+qJfo@Rr2} zG!+#%j#qhnRV`xnAxe{^qP|FGNt_Bnw#zlm5K$*S1LMLxjhf(sa|a0iFK*R$ztxUL zhqTe8&78H1z}?)8-%P);JMPM6Kho^A@VN0)!HVGw|AEl6D&EP#QHe|5t9CX)9+SVC zjMO-xp1jh!<}_xD8IJT~Mrt(v5|)-izFg<0(G;uv>W|9a1l&hO3C65t%7U@TY*SzuN5*ypfp02^H_rSV3CT3>l1$B#i?o7mieG+e^ZSE}oe>E$iB~zz_z;g^VZP3RUlVxwwq#el_;0cXYB-8(Zs6 zlPL+`g5_!JEBX6e4=f0Eb?nL-yG}tjmi9YvOiWi!fzBl;HwboY^?W+H9Pm5{Bn@n9 z>q+`)rHHKh1XR^R)*F<$>2tj|WYQCC5(M`OV0L%q>jxvq0xhq01_3PeJ0-=fueqY* zEqQ86wpO+5v)BuyN_5Rg21pspvXlrT;IOBuSoQ%`bJ%T^t*ZYGGw^F26U+39=HMB3 zg`QKzuBj6eZS{ITTziG+h*nr?t}(9(L@b@oFkcbI)-udZy=(mGJzv?vJ*bu7|{L4+GqYh={(iu}E4Twf!o{jb#)_=BoN~S`uRsc;wKu}P$viHD%d9v^;k#00vImMTL!Y}%}?P1>?zu2vo=XJtm zvv~bVY=Q~M@mGSRV^(>4fNL@;ly{)|Wnq6$Uz@S@H`+Bh`RK8}{R_#Mc5`!#*BMvu z;M0eCUszFIV3KRPk@=aQsX(=Hs9hB(*)tc%vY0a^DT=R6k?=q)f>}y|O|>xHI%yDo zz;6iO3vpstEh6oh{E}lrZP0+5Kb}f|A{lyj2jf*gId{Gm)D1fN)k@-N6*m&V@QprGxgYetg=XoZ7fn_Uw7I&ZEfwec%u;SI|YAe(FQ!D()h39RUOx@GB&8`otG1u zKJv4McU};Zj;wKl*eHprekiO?axATKy5DUl!-4yg##dLve&BQ& z(~c8oO7gTeyai#jVZTYp?D_e42D@y6)^5t$?3nk$kC*Xea4TLG>2z+6>@;nXJO~dm z2m?mNd}%bDQ_W>iyIZxW|GB-7gH8^&`iIaQ;M+~CtO{~-KgSOCPUVRclj+_t009HX z-tk{-Bd{$OAw@>hKPcha&!$M}Fsc=aiAiCJi0Wi7ij!Av%Oz42`eICkvd?8>T|3j; zZjDrSbbpEZ_$n?1M>6~P`PBZ}FI;rPD*7^Ktb62as))v#c=?%iv%Ai^OjNy4vH39o(Ct^Nr@oYs%F&bqo%gC8v>8mngs&(KmSh0H2V%8Jq zbpKouj>B#{Ri%m{%Eflm@8>hM*S+hKSE=RV<-`R2v|;BR?{CFUmrZv24_Cu9Mdjst zKoAE)yW1bi*~J9`9=@~DW;?L%18e%aT<^h}rOcKnU3bIK{KddZU{+Q2-a9L>N;>mM z9;m%i|8copWwFc*hsz;iYkSov{Po+wQk|L0Vcs92-@X8|bDp^6c2A$ixU(AFYMlR` z5U9zPUjpzYAk1^$vI_*ZT;B`@$Eu4;IVZ%Xp5uR99%?Q*afy&VBNkM1G}IIjSPkC^ zlf=3smigit>cv3K{^n5R=h;#r@^W_ zw~D>nN&c9yO6<-#S4Mp4W-*68{@fppd&pbg6z#-SWWd}BWrWI2@8kE&+lV3MS`ul_ zNO@^?FEw1RhXV*xHY$8wvYVQk>gImC{C0P~E~TXO&eD>XM|{6x_w9b&i@UzQ9&vJV z#~eeY;v{Qo31hS^EI6iD;N>qsVr|Dc@73jWzxPJi1@fO8+VnCtulMc*R$2@!Ha)Mq z80|ZDCiH`wWu}GbM0_rwBqx{7QX*rUfNmxuL<*8N=l3Jl79Ct7A5mX+^O|F11dH^J z@+nj?g+o=LC!XQCsN5e;-EWGDx=d9U;agc690bPk@7NdsO5s#_jEqS8`uecB+!F!% zfo)}F6>?;}Y0n~6-lDdJ?>Pf-MIuPu8B!91V&eoM=d4!T7HRwUNz;0eAI26Z`wV5w zar4UFFf(z>6VPO-ZhPp>j0iX<5|f$`b1bTprptWt3ln=VKiQqY;8Sm?hMC%qXMCij z5M?vYgsMr+BbGudou4_?AD0Yewb$`@glhL`n-p*Gf zC*C;Tov75CFY*}}h$uAyaBlcNg zmO^@FgFZhF`qv~Y6nm)BWbWrkouSoEMgR5 z4BVZXUR^639J^JVr`uf}n%RPZDUFZ3qzc@Uc-^ZihidA z@c!5Q;&7?r@R@jn=;#f5LIZRamx$>f)qA7shn^zqtTP z-E#sX+0<~T;oJUtlrrRXy*Eep@*~WZoi(H~A(s7B86F%sOW?Z{G4sta55=FDK&Fpe zu19P9n-*j*vSEsfD4=f=oX1T25QvxO*Mvm*A!NpxX_p6hrsT@3r=shM;M9ktRF$vn z32W3#7gCOf7{(h#5Wn|QorLOWxZR)inYZ5=U1CHC-JLEEygXhLHv?Rwm#6i6uofPj z?-$jn*KsFOk9=CM&QAqaIR=(O_m`vSpg%xr94Zyb4fc}nia zW2tN_F8gV(sMZe`I$W`eVHo!0mdRt8cyaD7gsl z{2k4P?jwc0c>3<36R-Sz-1H@b;J1W`Nrj_u^K!O_tOU+luO;0*JRpATTMl|Tm8hO zv$L~=iWdNlWXK*A<>3MOPyrgZBiVOKp$N)b-e2~)8yo+^@bw)OK$dL&{WG7sRH?sD zm+-am4Vydzn^3U(hkql+;2>afg-SPoAXcQYV21mZ=$hxVh2zNrfzdBWo7JYq#!B5j zXs8d~Xj2n|L`hkKK-mcBJOY%aW@h5*>Zz%80C)#FZYkqoSjx`I8m`#nDG-Itcs(&XS#GEp4}yk)2~s#%X|k&V ztoXr)(D8{*K_)JCysB9Ub2QUB)t{NsSK4bfq9SZ9!X>KMIQ%K0x;7ud%5>+)wazIh zlBip;GQEuCt2BUKQi7%}pw@1f)V}{DI@=oflL|7D!V(3DfvJ0Ydu9~UWr|3Mh~J}8 zfNuuRk*D*pWb`SgK=y7rL$a-2%Oi9Al4XgAYx8M@Ym`(=488ZjwvTcJ2OB#$EKF~u z(WZxbWO6bZg;G%)u!;XZB(HmP7&cxuM7BsE&sKn!P-q*rlrJaQK-CKjS3%|z6xg+vkx>q7H~EJH zFX!(G)2sx+&;0Jv8qDQg=FB;YCC^lwK;)(6?vtGT26I!qHVx(5Z4<0wO?WObdK32v zHur4(W-yA|J2#EzGmF{EIZO4{CiB+}wySv!M`s}>`q7@=)pRkgzc^9tMW4dHrT#6m z*dC->zxumF-QQHpV381FvmRcMot5@Q^tLqk=fEqsnNGF%{O_1pr1wOgE*r{7rLJ+^ z@#>v7#niN=q_=5DI5k6{4{R%-W09on%aIHU z^)s$a*E@1T-7hWHsqS#6E@%l{d%e6c3@}QVjZUe)FC9e-Zsh?1_qCH%<7uQZ1JgG5 zDsyF)J8Op;shrDQQs;Erkf}pSfAzf3rDDC1q_|yh3#PaKdJgz3wO~S}tTrl{OB zMnBgny5IS5J_c=O1?<~&sIHW?T-?whofwQ3WT@pdmV^-B*J?-<-@V!(c087V6=X0Y z;(R52(-~h6Elon19uY7L>pJ$_oKaX6I-yx{zWroo$T{oJK_dD!{+5R_H7yN@C20d1 znETUVfxW}+yLj)=P-q5VB1bZ~wf2%eB56NjDZoGbP$e-s7@IOqS;t8*dGR^cG?&@|&f~Hj*1R zM3fz)PZ1g+mQ!)-jPxVr*`F?P{zXV*QKW|nBGl}Lht0aOBzj?G>hiM`DSN4i?SR+O zhwy2CEXSx=bfDx|U@;v&WY<|KfoCPXCWGJ$tFy zMe}e9QSYsoB*@9hNpNJO;oHmO%k%pC-m+E4E`aR^y1RXW2n{R^4GkkEtXSR^DwHsB z-?EsDaDS$pc$%euXtxB#ieAVJxmB7UeIgHM=VhX4QK3TirK0$XKRoB7=zS%1MUowB z4O1+b0`}xv&d!=;Wftg0ZYZhYU0R`*mL6;^D9%VE+d!N;3aQ0tuRxM?xU=BT%bOEy z!`0@+pY|J5a)C8=q_wKD>&Bq!PgApVH7Mi5-`ctmD|7WvkqygF>$>NX1BImhnSLYc z3A(n2?(9-jo^F&MxH1O2t~S(woJo%X`e9d=I_z^a`X7dC(`1t~gZxUO-_(%d(oFYfGs0V1Ix zuuO|7-gf_J-5rhsfve}ubHzz3LKiIk-pK4vZD$U}#O%y5<{Bg}m(5si=J~qxvDX)C zs7^2jY8d_l@-cVFKhfK!hN@fNVrw0ZXTrh;+c1+ zu0p6T$4H7{!F+(S2rkwBptH+d_{kNeOD&ueiq|TEJM+5+8FEjV+C6v~Y<()NUsQK; zGNw2{82YM?L$4}W?f1|0$yg8767D_OeX~E|34<^okShq}D%*&0r=Qp>t^I9}IHmi= z!CvMUGRD&uvYXOD*r>FM5?R&=g2IiDxz{#E)UFq#GA&^n8f^l{tY6_o+>qZP^^M_- zx{Q@F^EQr($r}cBCbcpvUNTi9@UoY-26lIsIq|Slc%F0SS1^LOq) zFs_UL#l?l$_@}E-0-{f=WIyMQwMd=pqv;Y`+pHd{l0s|99ixcc7&{P!GbBVf^pQ!U zl8<#IdI6y0U=&%oUdVU68wx~PT7zF_p2Eoa%UEsh$wOq(jY0q!bN|fa$H8jnAJ$MHXU?3 zJ>YP1qR#DfY=-xgGGlv;AuyM{2F*U2Ia&B&9nE-Z`~ra{3qR@0*yj?-@+Iu{LOyEPc{<)}LER^oiIV%=!$ z4CgO_CA|@oJUVi=3m!N-SxNhfJ?2Ojiz{6@1qNF>OF6+HTdfUV5mlyS_pI6k)`G(sZX*u2GJg^6VMe%mME+|qlTarpd<%A0>-1Z}$uCQ(6TqLv%#j{Y8Q%N56CFz;M#q=W)k62>p zaYa<3Sp5NR!D~cnx|BP8@CX5vLFeM0lT*7m=sY>t*@9Ll!G+A%d)O@1r;$NTSV&= z^jA}y&C9`DK~3ZSIoZ?%5g|=-6ma4-fL;T&emaKGC>62VsDI`pNbz?-uzjoo!9yUZLri$tWfaa<4OBmvYeEKr|Ti9HL znb&2p*X2IN7p^h`n*O^U8SFR-yW}Sl&cW!*ng0D~jPgJoJTLfws!ik|v>K{>H(U`x zAy&HhkOKxjo(vIb3EaSRMElDC{Q;L8sW2ky7BD~25I57;3#hE zHgE;>-M#BZ)Q|_v;G_tQ!-%dIOPzP)97r zrU|1qyPdT)tsOPEcp<^?dcM2LrS?Wf`;b<8*{l`F4k8a^m{SgQKWAlCRYORc;M>~c zT5CmCitrh@BKaJ!m&I;(h|LN`B#Cm2v`e_C5*}oobQ!|Psi=r@NQ(}p@5(0RiX(N@ zY{>Kal6srbknmDOiVpcOY>1ASi1y-TlX0S&Y14a8R5KG!Y8g%W>B-9qGiz!67P^)e z0$dK5HU;1&I&q!3F}J35=?q9>Rdo0=5=5$;zME{CqWf&0|8e`eh=L+7FaLWr7QtAT z;V4BIL7zl(rFrSD7fy-JTUnA%zxlBt-j(o9=laeo26h~WRW3P2-7+w5lphTuhn~J`q=hNE*9o-Ltn;xGcr2b4!U#%W<%TIAI`PJxU67Ji;H5-z|uB zBr%QXR$?&Xbd#^ONlT&76tJ1{ZrfZNfBjXVVQvq)dmu#Mz?Z*ehLBRh(Qkhbp}8ZW zqrzqiU%31hFtv*1l!ut7Dr}w$$8Yf^9!<#=39-CK?KF~vBk2MDQ@~>0tG>41?7iw1 z2@p&P_(H0A-~NEuN%?+laH|Oe6${VJH-`vDi?T0sgd_Sw3vu}l#7cAP>l1=-U4wyS z7$9q3L{bu5yC)F#BjK$J0`KFuadswYYI<~A7MqnICMNoI>i2?KRYN}N*SZ&i0PZO^GpV9o?jCE%)k=u4btDhMHJSxHGhxdE~g@rsvxBA@#x$} zcjn%JGw$Y}(ASqnKom2e^=g$th%0}2{x9sAi3 zJfb)QR7ZB71z%ZdUbUP4OeN-4U3_M^JwzS5X zYjKAD>XQ!@KYrx$q477mZfv95bIZr1wZiIdLy=1m($V;jh}<&ac3={ddvlo=b`F{RwURG6^}QZ?@I*vKH?x9p!8&_-{J38arCxwj4c$FGpS(XN z>h^fP#&We8@bwx*(QA47MEhA4OxpAqg{6fjCdv>9SVg(CRM8wBRN(wn@hGqEDc=%J z#mVQCbZO;flcRal$^8@Icl+qCreerT3;VR`rPWk;%ZgeMG>gt3Tb6JlS}8pNB_=#u zbH=(sMs*s<$)5X6GTqm^J@xJeF~MVz2O67&>f!j^B;ZV--~PUoY*tL74n;n(Tyfnj zB;`X+0gj;Psh)mI)HXLV8psumt*mWD76S6(QqySKpof4n4uDvlBTr$)lg8Ln2xxO-M+DD#?c6^OpdmX)}%Wox+%tUUXmI?hqP9q(4bEm&>ji zSIkrP@%p`i@VPMGIhZ55#k^I;7`7niO(u-HMayS?r=q(U@Hc;t>K?-XUU7B%?)^-M z9Fr;|uCI%Y$%7Fmk}WAEq)MJ|#^HJ1$QZ*EuP+b?kBrQxUX_ghOX_t+PbA!~fR!sX zGZQ_ghEh6^GzME85!9_@Au{q-G>U3<^Va0GYl!`}^O_QXuf$e-{=O4o`#B_XWyf%l@rjn52(< z-h{-|)COs5FGd&&hM+fsj$}VoKuCz* zu#K|qd$@1=3+bns-Xk}+V$1TYs6KlT~Zh#}?39yK-&J25)n zioRa;{>N#f#^~Jr9Yw>QyFNLQ*@lbmfmwl;72lvjC%v^C3e24LydPzvl1=EdJDmTV zqZu{i=$(roHy?SVBf*R;g}WieUx95?hvIuV7|ihx0FErBq$F9By^}Q-6Ctw*Vu?Fq z>xBRbGcvp%DN;afQZn|?exVv!R=M5{h$P$9))4s!%#ASCK~E2*#)8uNt8L#?Tlxsh z1*vrvQh~ReisonV2L`J;!dtS1w_qR^c81IdN~*x&x_Nr>Ox>C~`Hw;acQ06SYarQ( zc5HV-`$@ZNZMOaM=Z8w$Hqvk7mxAmADZMY^=hzH?*rOX4f_TcfmpY3^+?>Cw?4k|T zZ*)Et{aF*MNE49sSm!t6*cdqyZf^LNx<7h!x@~fzqLje^1q1}YRX7@{G}5S^%Hu9> zbQ%awI1feIw&9Q-37BW3Ie6hDDqi@|d1mFp?;qs$4gegyb!* zOhwaMtH;IabMu3AN=spiF)w;2PDtIDkahEG3NuF2Fse0|RChju`I7uVjLGV>j@0hT zShc>JWFzCXd5jM&8dmlE+SrqaVjG3d=w`BFx|p${Y7SM?VZ-g$Z*sre)&f?pB(r5r zUC4LY6Go1*2i=EmGc@k@wz7*k>4$0m;DhoED zbV+#$`xl@D)mRbU3!K-XVoTf;T}_G-p)N$4pO}?ymfJ~~$zMr=3JBNgavktUHhtOi zDCf8i#398|gMvBT*tol#`MXN;?@6{^{3Iyht6}NDz%3>rygnnY%=`@^R$+JHAvvRv zV78uVowQoqdeVXwumf#JSt@ZxMP#BD>4}AYByxw9ZODm`adSch1S)3=kRWD5LG+Md zV}bptH1+@J2r;>?+26-veoy%K&xN)v-l>n!85?z7fq&12_5bzhsI183MDpv1VW&AS zzuy-)uKi$_^1uT7Kk1)#=*yymA@#=Jo=8wgp|M#PW<;&K$*0oG2rcYBb=4-sKd&4wZs{IHa`uvmsv(0$l)xeoC)#%TyRa_UmPt^ zp+7xxD6FXZ{2?G54C*gk*n?u07D8aVa_t{XOp+EImV{OQY2OBL>+bJnor_54<(dZ-QCrdOp>+g4uzQ2sZ$5#xPhfgFT?~g&xv*tqmZS_{o3jC z{SXK8KfGG0Wc|dozEvx#Ni)Rr+@e$pcRZ|u6~3-7cw3>~;qv5jX<<XC@62@*NEv4rY%6nP6Ys~j_3F28 zdzV>_Es1poFqFANZqQa;Jmy$9m`?fl+i;AGG7Yhp8%m07&bsXq5YobuCJIqC+02Ez zu;5s!X}2d#d!X84Vw-=irOtWAFD?F#J?PiTup7BL^iE$9%{n;Lp`&E2oR0*rVR~}S zoK5y~nhs@+uU(ueB%et@k{!PW2_SI1lMcGzq ziseLI7gy8UY=(&1F`I941k0eH$w&mtAq&Q$i)}f*t)e+*T7Pfj*pbnus6qHYxu`bB zGO2`zqpH}lq|(1RecJXUu{D;Gn1{W;B^+qk?8o;cNVsH25>Kn*4~mTCP-u$U8_bO{ z93X>G{cvfH4z+i?%WszDA%$7{*l9qTMS%+v%Tz8Fxg&97 zZ8d&YdhR9(I?HzLirfIqaGA)MqrOLT$bmFcI?8tLy+AnBRiHB z^jNF*N1^PGY|ano_Bc4mvkvmHy>dq9wY;c!0T+bDvu5|7wAhb@Ojkd6@lUey|0K)) z&oSKpJ!AWyx=C(IxK^%@=mp?ikl@b(HGRMPH-hUOz+UDNf%nB2L4T)n!>US7?|Wk8 z)2)}miW9l4S6mg=@VG z#Ua%gi@o4uNRKph7ZRQQf76U?dm@nAu&!|xCed%H3`~9@exuXv*BlQiimPpO4u!S7 z0{gJeJQvK2!}hyr_SoqcC)H-oEkva&!y0G`UrJwH3kbW+{Y++1$L zPM3ff%%?b_{Hw|m)~#Ci`E6{r!1_GfeCD0>&x-Tt#jxdJvo*ow>}&vEmOznWwzU1^ ztN}hdUHVBVenROx_rc8Cfjsn$7?W5Yn4l7xMo+uuuRrC>W{q>gPj5bFu4EQ1jZ1re zt7a_sxY)v`2LfwFhg`U!>P-xtDEa7vYj)r`6V9DUJHI01;?(@aDZ9kqyzbUGM~aTt z-n|T{2lwb1FtiQ92;qg|tSN|3c|#OvQ9=9pdUCAas0J({(49B zZq2NsuKG^Ztm6KuRGjH91+F0s4Z~{Hjmyd67ybKO4`aJRXQUWes!G^?(&uBt!i5q} zFgIk{l4x-Xn2Qt9>dq>>ffZ&<$2e^@mKY5;JCk639l_K`ZqDBEz5Y#_?L?bpk>n-4 z=F_$7BwL!l1@o6rl(Qacj&})_);e@ro4%+b6YzUu4`F|k-4W?EM;Z^3uWo6X9f(|THZ z1in7_n}yJ6nn5I}-TRK4u#}TWwIb2@nkhI^ZWS66mi=3INHT|XM+yQj)FY@YI?-02 z`9%^-HChtt%;sg))Ryz2r(X%-_0PYC!heC}>XY*s!DR7u^9zE6FaODwZ(jH4@^&*I zOh*RFcLM1 zSlMYEVF>i`27IoxM0fQQ>|y`A4;^q$o2*`uB&p@c&a%|sJV>}2AOZCev{Y}+;_b~?tyn%MTl_QbaBiC%yAzWbwpb@k~wRdwp@ zT6^uamggYkVs|w)2B9=szR>)pFEid~hx@j*@~8F7Umpe$7=~!;my=40l(lHDx2i|~ z4g5&G6uSv+^>J${4#c7TIy*g@vyVgV(QFo{CE-x&lk@z| zx?qq1gG}Sy8P7Mo-r+IL297j@c~WA(#$O%S!+9d9kFD3tExhHL0XA$VKZAapg7>nh zhd75;aX5_LHW~#ABoqKP19UcLR^Tzq?%=8Wo-?mwd$uOKFoihxe8y_Tj4-P(}ybWY}}YukIy?6)153t`XhHa7Fw616aU`1Y-YZqwooN6u5e7xSaeg z(`~o(TJjL3k9f@~_Wk5j$?!f|sPrdi9YJr2u+qq6&Zrr-vnz5ikj&%;fBBwMDkdN4x8oSX@nb=C*7i2{21;d^uJg+@w&YqM2 z<(!z#&Wz&mU#0P4gIT+oQbfQwp(N+#Uw)oZB-d+QntDOy-vLv^lueY zOT{hBWQQGaVG+zHxN|T{Iy&QE-kw&Su>?r06V_S;O+C#;EK59Nq;IY1&8uH>{X4x$ zDCgK2BU3^~iwhUQ@(kg@nJR+Yz8U@aQoYTtsJ%gP=+8{#Z}cS!t7AzTG^F>KseGKu z9DeY0#EYUc<0|>gG^+#=ML$(vnVF=&jAeM-U0=)tN%CoAZzM~SFw5euf72Tc7PesA zR34P^RhBjjPNS>E2(4WjUJyv=I=#|fs!QB-aG{=Fe^LPEZ&HFqhYXaKUplVGDtPWs zBn98t$71j#-WhFz3z5tPI|@&9{DfgCa5Xkl(YPnyAn|=0W5Wa+VZuEHm^X|_9 zR%#~^S1&Fn&W2gXKU_ERcn8P}azGehJIxR3<+{0<5xc%+Mp^4``MqV!Itzap=wQG7 zS@uAmQ*Aow17rJbY^DAy!XYPX3q|%N+g17D;uwo3CunzSvM?_%<%O>2aCVRd2tb&M z;r2Sru=tOjsnuwSw)JnZWx3HxrAHu(#RN7@*Lk!I)V3P4aXNeqX9@?x)$c%d5RRPs z)$ICwj=lb#%|qh`WIPd*312Xi01&wq%|*qK<90SSH}5`p;|X}P7fOKy55W=yJyZ2& z<0F%kSdo;+Nt*1kNR;Ij_7;(!ZaLnk$o2+kL+=)mq07>S)&A zkNelFVN>Nuy&oQI?>j~I%PGaTu5aMywQi1SQ_FtR{rS8_@jkmsU}tL+T>_rCyJes_ z@OlV!Mp0TD%7*-TLws-bYcG~O6k zU`79i5Jr` zx5|t%k`GBV@xlRRnt}wlJd?43IQUJK^a4mS19X{Ul3(3|b(QblR*KyiUr zA>YjGaD-DoENix#(5Cl20NoJPO+eqHED)jGK(!p!UB0~H)Qf^J_Q*_upzRg2Nr zVh2Mo<@p=#_7Q>;VUQ=ZHHMm%P-3k5*y&ah@XuGc<4V2_WE9)wqiX#Nph>QCbReDm1IyU3Y97FwXX1g%OcL8edJhLM zU3Tv}oL;^ZBg85MYm>b$SL=IA+@o+Q6hoyk3IF*H368<2Br#DD-Qi&inR)PzzM{vW z0xX1PEt6HP$t0pMqr6(`YR|p(QGQ!6jB*=!shpJ5Ez@d_1 z$|NYu7qO?1ZTbt~%Ch*#mfRjE*6j-)EC&2 z(a^{xkV!D(7VvPOl@-dY*)7lFVFBuDmfH@lZ0$+`VdB6On76Y;Gv6Ba*HgXV_DVB^ zh>5!-YtMb0ZO_JdJ0?sK8AOdOmDr1+XBM*k<({P^YO7Cy-#I?#{Z^jF+>a902ql~@ zGG34>wKYIu?cQ=vxW7}jYAw{zYBqQh7!Ftt z6%PIz!Q>pT~6o9!lxefKVp`{x7oS3)S5^ndQ>*=r~GZ1(;Idq8kyxuUV6MwO|d|y;tZaU|(eXThm zQjSb>=#B|5@Mw7OXkodjz-jfm(GEJTXnk*|qfRpZyHt_xF^^UHQ|}wY_P?~k+L0uFQDghO>#4c^E9QVI7U_K` z@B2EmlKf@s@@u-D_(XyX0LA#u_= zQMNeF>eG~uOI2bt(2(@%0zc5gh4}Vlt5y>n4jYc;uh0X)bp+2e*{DqP0Lb1GG%CNy zWDL7=xbets-QKIGCvR|C;iQD!*NBJ5ADH+K)*iD`d)A(heE@^qZ!~V6T?<(O>e@=q z%eP6R>mA4l?BQ)!v%&OLsJr6Ko+B7CB&b=QFQOvA)_D`;h%#Vo;HQn^|+!INqvMNb!1XL8>v1CD$_=H zbxFHC_vMdDq{cdOd`UdWiMoY*VGPA=^6;ROst2s6VCM5cpR0#bIGTR;^F5psGrJxvz}Tzl?!A^*-p2nHRsX#5gPDZFl7!iN+p~)y3ZokUJswPIb<14EE2Op3Kp^qPSQbqWDl-4HggkdG^Unh;H}uH~|YT?n)witaHYTF~xcd zvA~7vfP%?@4*L)T4mxNPSHRm9Cx33EeJ&I0P&FzkmJ3DFDRDTiM6Gg#x~_#(Vz3fc zy}H`myl1z>aJ*cZ(_W*tgf%=>2H4pxCU?=Qt2Z)zMKsym)uzg|pGR%Allan9+1ZnD zC(bDV;5Nb7HScf+D$6`!sYp2=iB;l$^yU`{Y21|*Fr%aAZWVxxn*LHyrf$xwkw z0W=#`)D}bDb7S>5LS`!@KWa{wRM*?=xh+u|o)dkWZ5a*~v|sj^3h%2Fo#A2c@(V(5 zts|K_4D2V0C1=MdT|i1C(+A@h{VR`hcnnyR{2i_Gri(6WSy?EiJZ)qTFhPN3NhYB( zLoced8G=kUI8>3)Bc^a?MZzSg_wqVA1YTZVV61rP@>3v}z@K4n^{Csl2_*vO`p>$P zC)R`Qs`{XZsTVX?N}c_lqdQSDP;;|yeXU%ptrbtAy|`cJDQh}gCuySRfjQOztF{mw z!D8|Dw!tlHi8&~?LUy@TPr;2}#>k7H!T%pe9E_9jP@Edp`o5I|-DrcR0t)8!$S)S# z%^bzx0_2NzUiIoq6Km4imXJ^|x>8}+7cy{Yh!V>7AO44Lw*zFtM?osAhs8W#p_Tpj zT0LU&y12tW*XIXPch(6Nf7yhuT+{#acxowB$tU%^a^@2VY0EZ5Os7D5>UqD?u0Yyw zbmHt@nG}5dN6=yf?Z2%6IjA_(@q{~9R#;T7024ef-6OiyJSnoQ7q9X$lxa`R$Uk&| zqWxYqoP(`A@|J;6HL-iC3*;+0a|7>mg%b>;!*_qU)!!+f(udv_ClSWd7PmEt%w{R! zg(a`+SQl+4i~C$7q`p@jRu8gR#=9-3iHsL$`}5Mt96TBm2hcSrY7hCGjj=G|f$S=LA!v#Xr}e={h}$qS zPP@_kPBM6gm-8}yEl9Flc`p5tWSS!rUwTkRi@K4)IxXu7PY`YdBPtR+@*K!aPNhsC zAyJkp5Sl{8Dv%5ne9QXaWk`VzZ_0`X*7z9t&E@>EOs4M_!0n?l+1SaE72H^7I)x_O z%Q?;b>sF`L&WvNoIbME})Uz7QkftYhfFmnrH-CZOx4w_I z->2dxWt*Aojjcj);YkKYNz4Y-%ybKgS@L`!4TujvJGCftTDNWEY5iz28Z%Lh66Hu@ ziXa1pXZRw;gTR~2R2!h|tzXwoi=f6k{6@bxYw_vMNEb@OMn#zMtF`hBt;Ku6oz@m3 zH^e^2i>lbr{sqOs!KlgUO@@b>i_HNpf2Nev(IHT2X6!A+;O=-=GuJ70X&;EJDraYf zBjQ9mmQ+gz>f&JKO-bOFAEYU~XLL$`JwEciJ^m9aCPF$xVlww`v?(#9^Mpw( z5a65xyIQPfnI_7wIn+lfQR(AN5ls|}SD^Uc-5JYfh^z3A3ejc09(=4F^rtIRJ)9`8 zu;%tPtCyQtEQzU0za-C$1*VT&Tck;z2o}+q1o_g!lu;BV7Af2P)GbQ;@7WgxKl|Vb z*MlCrzv5y$Z6Wu31%-}07U6bnGtVE;ko0<){5-{N;RlY>56-G}V1_bmP=%H#nc4u; z*quKcV%NVxqe+U+r;vA>(T8(clG*d;@7_#6yG<_q_3juFNW(|k_~8v1xY z3WMrj(SZs*n1o7qLAS7msU^>y(NEXQH@w<(T~--qdy6<~uuv3qLRYoiyEkZY&891( zmQ$t<9}6SgB^iiB1q5ScAbng7BX{0!a=kkT^iKeFoq9(El?x&OSKoh}rzk#;4g>ma zshy6pvDRH3zc+Akp$VBNdg4}GRU6g^d=pwFJtWS`#;0_Nlc5zWq6nk_vsZ!;K zz^gxTlw#C0aeZA^xeW6Khs*J$6tY=R1+L2OZEYc(j{!@A(fY710L9{r4F+=xq_RwF z;h?np_RBbq{(_b2SgjNZwed~F}KpEAC zY4V$kS!L~yuRQ6rEnYtZLgWcD`Sp1aiwl0bj;PRJWX#iI?A}xrkDS2^Rt^1`!;j)v ztvirXtsggm-GOS_Q3DS&j0=87O4%4~%CbE@RgvXxMmAm$onV%{4FY_EA~VWgq@y}D zTG{a12crnX0NB1U*HdFN&(FFNWZaf4+-L+S2#Xa?N`>Pi2 zjmB$`VRAwHa|Q-gkPEP^@zc_vtwJvk4jLR9IK-{warQ)dv1z}&XTB);;`R?lPFXkm z%1}-hsaCFWXBoV8LS!Tt`C7*es%UrEIj*^>tUr$ZN+?__^{V>Gk;9KK!}@!dxn)zQ zpRx?I?4J?8J>5=MY8`@n2nhkTGB_;MG8B6~= z>(~+IcmHfjU!Qvw%@W;xc!Q7i%^?|_L;$js#C<(?JE`sH1hMYUI0>dsH!mS9Z{BQa z->w{vhO@9%>*7i9QA!S`CUicf27xK(a#3ub-P*+9N`uJmW(;#`+tMsIj3JdtF!ALN zvIF6#g6K3;=18+Z?Efq@bO6@`;ow1%l<~_$x4x-1+Vp!5VBVQkbN`5$@Ckl=bY_WA zD-~_Z^MokdBJrnclxhK%vR%>Ysx;MZXT59d@{u?RDx9|=xP-8=sfjdgJYoD`|KK1Y zElmon_iuB`cc3&Ks-)eO7)HLI)r3vrU6^JC0n{mu!6Ym+lnr)P8g+sBMt7GbxK z7EeWw!AK9b@HTX_`tz6cuQRS%j z*Hh1HE`vKsjGr-gB_OjZkx>t+(TIR~QL!)QI0u*XXjB4b$EuGmrbu_-PzF*2NN zv{2cRgF(smnYH>`S$vOgPx_BfN8A9NM5f0UCXWTx{^(a(Exklgkou{Kk|t}+O+U(A z%c*7>ay)P13UdR5yI<(VRrtJ%(kTSyduvN}Gw0({lT%)G4vr8*zY;q5+QU|Pp*TR&tMh7_RiLDWP+iANDK*M z1n8g!^<-DDxM0f20m8mBPg}ofsS1y%FWgil>x>GqkP6vBB^sb99E08^+{#kn`YaQ` z(#`$JJs_h|o~a%A!z&pQ6Q|xAh=&Lmp_%xB1_*za;t|fWFyIkB;V9gKdU$jr!dv&>D(FzSaq}U&)hQ^mh15vJm%#vd!LWk5@V$Rkp-QxVE zku}qweFgQs4pK~}3_Ld6aFN0=qO{qMhwMFeAHpLBl1trS>D|AocggZ|1qwS3iOU=+ zRo_iT=PMP(k0*hdYe}*PNzxQxbn`-2yH$uxiUfDU6a(K6`Gj`^d|Rl1fGv-ZOoQhr zvDgzm#Us1tm?QgNBgI(ctiSG|jyjEbqK3%NrH0hP?pmER8HD`zQ3Gre>#nJgEBGiR z-2^IfDlFukNa-ASK>(b=j2B&%Fh#p_P;XzNFQ%(r7u{>uYz_l;mqxGZ5~X2Q(C8l_ zaXkJdgV76vcO5uVLKF*u&oR0hQ!ECE|LV!-e?N3nOZ;_^aJbHE-Xf3NuJUCQsG{&L4PyHJ-$l?NhgmZLPb<@vnaC)K-!^N0A;F2Z- zr2qnbd?0_v!rap=+Mi4GouW%sNoPX1=TY}@YNzV$dA;oLYlYjbZI8$hc+N7v*G9IE zMM>%ppRVq+XxfYZGH}gzZ@C~#Arn?Km)Ft?C&?xe2bH7{tDLB0CC?2tJH?zO$zYv= zE<;6H)|j64rGN|o2VFqA6#RTF6K|R`uB+Z!0}^J&y?wpeU+SLv4nh?IhIJkcG`F#W z<;Tj;n!2CzZT9Yh;j23iAvedvHBDlA-u;B=d?yFKeCmAldT(dVX-H8PPtd+^n-O=1P3CS6 zBit?Pae`-s(uJnCVFzbTpQb2-t=z|!k4)~GrO2_nbu8L<@(jXf<$1qNjN2W=GM4rS z*R)mq2E6QzI4%fSzZhu};fZZZ(T^_xDpYpWnWkl?MKg2d1Q z$T!!G=VSPLJF!N9_GEysHiK;4_5?;OszfO7+F$fy1S}xg>|-cZeEeVQzqDATa@=|% zZ@gSNwRnX~q2MgGGXNy$~v8*ewc?wp*}J(?rtSS)+52W9cC<^aPi?^HT7qu z?PberfI8>h;V?3p1|oC`K`{a)T3^C>A7v1FN`3fFG(LlMUkEuWyi~+hZD9%pg^Z~3 zuj`=#@rJk!*;l;iLGgcx&_|woRRB8aC!3A%X2SRE;i~}N3_P~sySYFNf^8RvbO{3_4=`%}Hd{93h6tp{@Rp3*h?SPZAz{a51esSnu?&Ub>%doy$Z2 z#W!Ykc2^LW;xyF?J0|*QDDdJ#!8Q@qtbsOG+$=RlE~xU@4bQBO)wt!LvAn@r#I%?i z%Wy9YrGtA|aL~iRs|QZi3Lmkmv+L>!*bmf(tdT<7<(19oBz$_E+rwHL4PtOaR4qxC zrSSGKTqV*gBqReAEDK#-eY@|%o2K}fMyF3D>n2>9=;Oo3TT1T-#G-ze#+B~8S0cUQ za>w!zOZljrNwH!WZH&4%Bjv%uPUZ(@!$XTbs_{cZ$6{xW$1EB4{e4&2-ID&<>A?Ov+mYwBMRW<~`0jxKte%u^yvEE)uT(;tj?^_0gppus9gI8yy zB?ch+hdY!IDdD&yV&S z+vi5TLS5X00}a-2w*yq~rWmQ5??Xa1dBQ|{;h$a+9ZZVf0t0*`V4k`Y!~^WIf*rn* z%MpaVe!HDn$Pn8%Qw_uX8*jW`#7+60L$NmSdFPD5ocNVV1C2_AETd?vff%5EbFOZv zK{I3)%APoq{z+}}8r}aA(*JfIDO*iD@W#?2l*!3X^b$Qa><4`t$vY$7s+Gmb4i-Ose&S8m1>F zMD(dWQRDu^n9j zDcsUv!6^<>#e?g|X>hj5VSj|F;^?!j1I_Ki@nbrhwsS!*+_dSOu=nhSoc>b_i|%ue zIcYy$_TX+U7j*cP4=tpN*L%~T?axmxVbUpP+vGf`SmC+6`G@_buD`wfQ*$U==(~cY zDVxwgCybE4&^-WmIJrXedM2h-W=RouD?uJM;K7-{dx_% z8*;!}Z>rBwrG;-~anRzpGauo3?m#>Lpa>tcOpHe0GZBe$B~&S+7~K~pD3wX1nE!Mk zNllsxUnBOX%`oDTL9>w+wIgntFIcYm`Z+KAMlf_;ZvTC$;`N%1@#c(!yzG6GbaB$= zU_5(t$`j@7Gus<&6Jv#*K;S?nLvHcq1ob@Qh;1XA5itrC02v4YQ8+sy0p3>g#vH)v z7f{tC4QMEzD*O=O5K@`I*6-pdeq}z(KAywnAw?>_>0qA4lZJ~cjlxctU{pLveAhC# z%4GPN_^j=&a3YI45$BT;po$!@u`x9AqtMqvJZM0J)!H(+Cd}paDcoZHucSOB7)g-+ z-Jb#y5Y-|RDTqFj(sWfs{`75x_%tc>ykm(6*&J4X#u~OW7iQ#IlBeK(x;rUr&BG4h z8vG(j_}K|Bg&UjYh)gI$Ax*LN6Z(Z59elxCl?(r(xyyNWC(u*Ul$snyWT0SMq0b?UK54=?9td969&|VgBS#va zI&v46jXePYWf68Qiv{1g*au{Oryt8_x$f^wbgti=*tPAbbcqz6XF7EATqs|IT@1Ft zkt-%gxiIseF>0MFgWpPz7P;{ZN_ayOl5}H%&PR#`a?} z*&jb7L=m7b&NsU{e&CInOYkf#VzB&|XaTqH)uK^t|F(CEN@ZtfC+2OX8Mv+Ld>$|5 zy>4@$noJJPw1Y1RhIHM?C>v&zSC(Zd(D7U_!N=2P)?{glI5cX36sG@c6alL$#HlyI zSyW--pHrI!2Q8469alf6;>Ek^yz)J4KPxGfigK`s;9YbvVzL_U*8)P@?2+~ zZP}?$pM9g6&+#jwY@vW1{=dPWQA{8^1P|sr9bd+gLNPUu&45f#!UM;XL2R$_Nr?rE zaaJU$IE%5?lyyv>@&8P!h!j-$tJ5KCpRs0|@Qeo@c+&O{58X3-=5n)l6=9ENto8gT z4IwfWKmzH42)vWH54>Pa1NOi4k|$i~1MRy9Oe5 z8Z24b`%vAD=F%O*LEady$Fth+egicY1^!>n#r_e;N`}ww4jj}P{ zlZ`@m)n?YwJAUVE3~|z#@J!~+5`?lY5C=jT2?r0J4VLrZFDd->cD2U&FvM)oh7W;< zF0hBlGl^h**Wmcj-Pg=;(t(nt(j48NT?d1f6a zqd_tfEdDH&gSH6M^uuzJz>_c*fDJTMf=k&Hml?i_ySevEcs|$DZWiF#=0k{$0o&$$op#pjHLHcM@*h@DH%(2cGprc<;lZ!LLY$t8B(O0uS^THiqVX* z4hmEP3EZRQhW{K2nJf~aDVxz|I4=C++gtcSqee?16Dhl(&p^FUnu4BKBx=E$7aIaM z{4*X$Q7L-CNVGz^K(!25!P_NrTBkmnw^RZ55Awt_?ESf4JI1^0`^_08B?TpIafou& zu&GjTk;3qgs^L-%41_Q?LONhs3U!Kgqd9=n4;loRskv9DO_5GSuNnzw>o1@|EwS(E~*eC`L!VT`kWSE zVZ9UaMN5G!0S>GcM~xZPTk=B^lWpQ0vMm1a$evV9!>iJf=S#9Ir82$1k=QAz9UL!< zWmblV(RuMM-0S(Wo`28|bs`0tL@*7kc%OK(_203;VHF$pJXWupVI<3UK~ZfCZ^{r5 zxxW@=h_VblIZ?7Kytf<O2G-dUS2zjC0VG)HZ_jsmRc)N$lU!1eqGk05&S!}Rpy$%KWv5yIN_ zYo%rJ#GNdCVp{Ewt(HYc%h|6N;{1}cA^>j6gAyN}vB^mRhNRtBN(FF^+VkyZc%>&m z2%H;TckD-&%jC41p)drGGg8NmlWAx%L`+a$r&`KphTGJ1VO6ZqUAM60iw*Rbu8 z`Oji5#=BMrs#K47-5V=pBOU3(eOi^ekhBjNXBRST-1U@f8H39q$=^+4WPsbX^7Gbn zcPYu9TQcNcpHi}KwsG*-RKT_vA%#_r8yzaPG%h@Z*~@}*N%s|BV*LAlq|k(6P(e<1 z=3@Q7RjTB-F ze#`$XfFIXdI1$O>Mz|4%32G?n<=Dpl^W#%y?UKveUug3h@pdYAicY0?s!&(%xU6JP=aAei=2vhu`+kDwP4}{I@H&xwnS-yrQ7dHX+C6uP43R$kix*XgMqzR5!*i;|g zTH&zn^hIlRp0;$h7sS}nE!8umx<9=kH)K@fjV}XDfQq@plZxG9YB&jd`-fihKoC*1 z`Qs%2i@%=*uHq(h<_SKBiBzmvr8y^;(2L;1@W272xo*++e0B%l-FP=cP2Js$h3%Se zBl%v#MlM>9A?*B5KgB6AzsWnPy}GT*Z&Icg`Um`BUU`tjCQ|Ev*f(- z82v)gL{&>9&h|hAul#!FI^L2=86Waka2LX z?mcxj8HgUt6Dwgea{2m&0Xq}E)BK)Sz&sq}h+UH+$@WhZI%PJ7k-YQE;8klRx~mrR zv1|G{DZ4w)g#p{VxyW6Ca`f`N4;%qhdVQ(&TnS_@(j1>o6zm@5yw@xBhJ3 z)W>879U+r$GZx!5xm7Q$4v(w7pz#u5^2KKi*WGLISFlEi&1R$ivVVO9-eTJG59X2F zCB03tWk_(ix_9^TydC`Q-@-CJW~p2&zq+wIMze6LhtYEE=r)P9D+XNn^@`f_WEi78 z79tmLX_h0uk;Uz=V_ z#BNLNR%lyEdVef;g9yhzu`H*5EZse@Nb2D9qtW=>eF5CcVvgoK zNdzh8M2inCJ@2u49qw+Dm1SjR;}2j*CI6Rk19xH&vA{2|DlAY}*H@d2K}>RO*dfW9 z`!CZ|B-Hmr73SaHG_q5Zmr5=S~748qzb-GS(;{M zdrk-n9lKYaGk)Nn zwKxOJX*+pP{et)S^H=QOu_H7a=z+U~uwn)r(Nq=O;@{yqxlL5EcHyZl36Jd zbJ-RQ3S`)%>J1@)dksSL8c3z4|L8GjC44?zALZ|{tMMbg<4XZ<%op7pYS=WyBz4HY z%USB3+F;C;XG1+w;#v#YQ%tf`FdEm(FEzPLgjC@_TN(e?wXH{Q6|fcwSm8$E=mzZK zDFQZOY1wdJJBe&`|1v7(^Liop)EPZO^NEu%UXONXw6J#lecp;ZzsbufQ@kg98=9K7 zI6~~44?3BMP8S6@03%S@%eNB*kEwRChl;vpAmMwYU5(qpIq!naWs00!PX<%xnVK_V z<sPTX)XBC1mPOtgVuji>)Pcg2){JpyAAnhRbAR8 zWWXgz$JD%eQ!LFkI3WqhDURMViENSXuYEl|M?du!L!D9w!3eQ6G=Q4HcHOmo~IoQyd9%go-m| zG!@chyK#>~_uGwV_2J~V{5k!vU^mG}or*^_pn*GSs4&n9FKWE<{JGy*VT71;(r_vU zx1zvrqZMx6BUGkqo_uLd!LoK5W@PFY~c6( zc03L3?hVJTgAe=2t|y0UCY0@O`i4TMHX;g*WaWEGrErX~)&VGa`4jgnzoR#JhL+Fvi&T2}}PWHy@^3%zyt<&b8CYvV~ zi%En-SK3r>!L{btjo0$!rw<3swjDjj^q%DCKtvoSvmtu`U9NAqV#R4$&Fb)_VnrOe zpoA``1%9}`&g9(<41HIpz_ry6EnXvnifq0%$0@TFn3)j7bfumo1|7lT@>3P}D~$O~ zn4n(C|H$+ku3$$&tP(1SvY$pR?FnZN!Td0D$OQ4zuhYa5ay`HdM_zXEZr;`Rd`|6| z@N7*Y|Goq`5fD~~V&rIn6y#rgEajPK04^yy3VIYZOFFXnhPrJx$&PfgG`BQ!7EhUg zECnVhKK!1CR;`!X#Rm@0F!T$`DoA^~HPh?Hz&f`R`!%(uCCD|e7hy0i8wMlyk0JA$BHuB9s zA?`a#hoaa_*^>PJU+#_!(%*;Rm+tb+_}4BwgUVLFJ8#|PMupR%B9VcQ_pK+tGrhAM zoclgN3(S3|lpeRmdQ;;^>yfT|CL{Y7*+j!_5TMobJ|~G;AY#L6%&>*n2}hw?1;UmkS)43BT?1KK$(hjkTR&0N@$iJbDHh!1w8G3((^96yNpE|fD{D0SC$Yq@{)D=H>?0wIXzpXG~-Bx;0HG z_^-u(SYF`vengTjH6}tTlfe`Wj;=60_8!<@YWOlc}Henz%K#3{WBC(~{9uVE&!%z5WUtKrGcXMMm5^+ik+%E|-@CY^p?P(cz z?O{X@Mhx!}@;HlA6bUn94va3>nSh+weV?xxhr!yIxLjQqHqP}jl7di!aL&^mr3RN6 zUj-?&9x^;vA?o1rBSIvr_+k8|B4x%338eoA<^tbA7-k2`D0jd!2|56*XI-gT7Zes2 zHsw+%8OwV(#CO?Rc-JCFC03=L+bmroo$$n@ktpOM)3e?J%TFQb^Mr%|DWo1uRNN2J z^Dt-AUA7yq!}Yb7qXpLf2MPZ7S7bgy$|OCl32Yom{AXE7V3B%# z4>=gv$^EC_SSsFKg3cEJB81atNVwHmo!*m{LIM4!MEu~FLKx;(V_z~CD z!S!|}8;0)`Ptr{N-g^a$G2mPujLeBJ(Ifo-i3t*kQBLiD4ImO3$3ysBM+4lO@kDNW zq_bFZSh8#1V}DDS`avuQ2H;|0ljx9yXN<&`b{5b7d>_3p?|6ma%qI4!wb7K+`{y4# z_@ij4)T=H7>0-xfCc~Cn&wWCYNIMobdo~L2cZVB%3>L5X(XntUuel*o@GhO7Hy;D6 z5i0}>0pK(9>2g<5-LJ;&35N->1liM3bzy_Cx87Y+Obi(9|6M@w}(Q$X7&gCt)ai{ zh=2&kvk?wmIRKzu?=+sAER>=nV<45+z63!->D!h=Fe+jOZ$t}i5B^3m_V8Q{6-zc` z4qChfx88F)j%c6IT;CByr4Kpt3EfTX3f4-bI+Tjkyx||ESHkhhvi}_;ZTj+{WU3^qRDXjw z(E9S>Q2VcL3fZ;mPXAJ;&^E#nS?7am*0S=%qGhknrL<6ya>C8UD(bc|Xh^v=B3qeD z319((OCjmF+wP}#pGG>n z@g;K|?&1q%NqgNdzX;A|%7Vn!P%R5FFaHc8>8cQ;ahG5vnMPEL5hxUhOtFCNX+X5i zYzm>wTuUe}jF>U83@zCa^R4tg=ZLLsj$$4A+_6~*v9?9}goXO1c}wUWPoNd8$!hba zimjgRn)1b|>72_Pf63{R+>%^%;GOL!5K}^8^zJ`R^RTdARNO>9@XnCSSfM zvqN2Q$IVbFWI6cXW%}M_Zt)j*nF29tEDI_Sq6&ixdNe1F*$Bg@Sbl%naz;&9hJn5ahe zL%lov^I*z>*>SVjrEj#a&<$@8VUncpiG4Lkiu_V_Y}6umKc~gUvpZ-FDY78Kz1V}W z2FgIFW2z>fmS)tcGR;gz_P15|?1gN`QFGXDQFMTE&@=>7&l@ZFbGvgDVE1jU9QA~F z(p{YJMYSrq-2`Y$wB;w=H2zmNTC8VGaq9U=NWm%pu0PIxlv19pa){CWYEvGa^QIAX z+Q}+A$jz$)yB_>PaliPdLHxXpdi9a?IU3#JUT32rT2Uk`f?QF%N1);Yxr4+ys?Q`@!k;1}Jg%*h9(eQS6FeSZB>HMiR@ zgN;F%{dvQ&A*@obkg?=?PfunEFx3*xIux)g^_uS4@b<}Fn*LzIZz)CnOZyCzO?7LR zCECbMizy;PFTu0gSFsDhRY1c~QVr#gEm720gfBOv{m55u!6a;f^G~rxO)}@vN|c?i zKPE3YCi} zz0rOwDPh7$Fzr0~!$(E^wzB*cR_?k8wt35)f0S#yJX#_4cd(xnE1zFeTd*5r%cU8h zAyo7p3;AtTTF!bG;Hk-EbYfjn+_rp-=SWqkrpjXT8W29z<4it|2!jAa#I#S+^Cg

GN$7{`E~oFbiqpnMQN&$eG~>EbsJWNK$Z(HE~O6DlfTOhCQMz#~9WB zBkV1p;^>-o(GY@ba3{f?;10oqySux)C%6+F26y-1Zo%Dy1$Xygwy4 z&6=jCr>A#!?UJXSU6q|!oWS-gGr%OVxWN#kXqxL%iF-pS z_}i6o=|6v@2U?a0d2t(y8-%OGd~qcYM2cwIR7AoaK4&t>SBgS&Jqb6*a>BDU;ikLE zNi_e#3oPJ~T-+1AV#ouEpl%y@wTy^K;!s42^W81O1=n?T;TVflVAWU};IFEf&!|ei zlaR!NQKkzTWmLK*8TI@U7dSfxTcu7hh}B78DPM4GrJS2UCuP16vAV;PT>HG`*E}w@xmwnsU6E8E{+1i1e8GAuA`z%S0$R#_rnT0M=c%M zP$=DZI!US~$&iEFr0D<;=H%g%b8p_U@0HA2x@55y!8XV5FC!(KO6gZ?a15HBoBV#~ z$}8qj@W+osZmFIpiK6W<6Z@0s zOYfB*>ru+sRRr=|3p0tQb(D+VZ(Ns)*WfCo zy9k^%qqHa$94HrHWSMq6jMr(mIjN7 z{c_Tc&pp})L2HJ2lIGg5S&%b`b_y<2p(o0)elAnB$HRPrwJy8TRhgM$oeam+E|Z{@ z?wZCfMlUmO0sJ{7Y9o%)A4c}O2U|e8(sk0KPnFE`n_ zsDnoJ1f2-WJeI*wh-@5A@-nAZ<)TBYgfyGO2GYED;Y!Nm>Sdvav@D%|u6#e;KAJ-p z7qGLL{mC|*607>L`--cSFwW|OO3Jwi)DIw~DcT&hAF`9Z*sYRX*~^NfrwrJ2L2Nr} zkMMo&YF!)YdiA^+@=gy-TIOo@JvH{Qp(fv)EwC&eb&6I=ip$L{xl(3CLeB^!3u2W> zbuSEGdX`hC-`K;|SU-i$@YoIcH6gE}km#N1aZ9J#EFoj3aQo}}_80Fyvn8@9=}#2J z%LX}PmEt8X1D=m4kV12XiyWvx2+6(I(0|c+*=y%c#fES8$5ZOrS1OK7oa0&pMi`Ng zQf9iJF+^veN~uZM;VCV_rKLED=N|$h zsrFmMk_xBmrP6yaf+LV}sX(b9a?CFhN|T7s)ko+s&q%0-OgFpeIuioqy+i#A8K$k@ z#7b}#xoNIycYjR7I+)u6lBH2W;&iVya zV?~%SRI(8d>;bu!=AgIc<}D!$r3#27m$hqmjUqD%2i-J3Qp5eysmxoTizBp=p=K)3 zo7gs0Q**V1SV(9gK934@LI|ZlB@I%b3K8&7BnBfyp+zs`6OxlTgzC|5 zDx;@+Vw&yxt*8GWoQy`F&X;MQ{?MQu&W%HkOVyRfCeAclk4i zBfsVVY1J`&Kd?}8^kITMowYw z%f^qgJ|c7GC0Qzu!A{_bHfkR#G@RRgMWt-+0XpY$yR->hKkQ}g9hOxkRWSCENXy6& z+Is;+o_SU-uA%L1GQ0L0tjF6EqqDVkAQjl?guy+5i;vH9%)HS4W-C|rtAI6bMXu}^ zd>Boz_kmDo-b?FZ#wD+rp`ky=ntOm-`;iXN7FdzJ7X89++U0ZjR?+q=WY;kaK z^zH4xfBOaj4Gj$d19Td-+g~F>-?I4at??^Q1MQ+Yi<|ed38trFI@I0?*n1unWDNyl z38lZc?RePr@IyFj-XmK2ycx+smG&9dq5PU?ReP}Y`Irg`+_Z?YYJkW~n%y52<|940 zS}eE-AKZU7K5qOi8VT(FpAE9~e~$V1KO2F8;8v>Oul~=5dZ>1wLMTh$>1wM9DeOmC zgm!HAleJ6$fMJu7m1PEQn3i38e}~Vb>5Hti^d}~!?%&zU-vYne17k4&1mh#VAgsgB z;P}&oJuY-~bZ`&M+K)k;a1xCS;GYVe5ye6mgL~N2l?Lt9j{WC%9j?h`um=zZu`YhO zF7=fM7CmC+Y?zyMc}fEE48H1+JRLD5Y0If^awfiTGBp(l|jvIr7=^^73qu zt;)S}(XLX_!77dpggUo8|K5nruW#ZCjnM^iRc)Af0s?1g^bD*?NV!&fB{E}8D6*b6 z00&++)Sp`vlwcimt1w0hU#Qhv$F_9w?>!3j-3W}R>Om}i)g{>@&hfU zWl{~`H7iV=Fpp8eIR4}AUa9AXf77%cb0&fTbN*hPV~$r^ znv;gCJJX>{=~%>N&bpj2odE7^0)OusFZ!am|72)T-s{##f2UTD7A0ypxE7Lv>kYgp-t*<@wzp<=oaQ8BWDkqi={uqEY?W?) z&qz|!e}4nGgZlf=3-nhboOADr-p5k#n}C{hBM{LCRKxslrK@2BP>)IGS0*Gt2|&Tc z1xi^XOg!aNzXcwUqeEU6zA6ux6ZP_St~4AUfg`={AhXS$hM56DQ( z|NNdW!A4>o%T}-2+MI!9R$lIwUJjI?ynYwf-7onC6~Y7T8a43OwS^bvS>d%DC{iDY zoS0{#UuWeQQc;Bq83ajiu@*NRV$As-C2erLO;C&qugI~)(k%!@dl%U3uj80~BIgE& zaIwtgIwh8xCi4VslP6taom;}~TJIlUe?f}uz!&t-v;y4dH=swC~uO5wEM2sBMC$1>_=_!u#i=cHG{>C~M+lg7W7YYHSsM)z6dg zgAoi3(~NW$h&n2ir>WwZMXZF;J^xFV)H#Qo*|9HY4^=55kqNDbr-S8g^TYs}=KiI7={fkZ@Dgi&bKO|ZxAs2VXOcOYAx zA^tZ{M1(Kwq_3(7tY6iC@OjW zZ!XA?Ob9K|564QZ+Ks-WxF)Ggj87vE$ID)9LN*3Pc%>g6YnFuR&B5{E8#zO@sO0`S zwSZ^V=A|WP8&23e@-0ZVcrZywiYTc1%tE)K+2r@GGG3o=!Z}Dy&&TD^-EaSDLSSM} zO^;qnFH|%I1mgaEJ3BjDZsF({H#8)%=6OU9?%TN5?zIF^52WL778e&4sGU%F&)-b& zKhnJcYRU2ergrP?S!l5a`yDR}G9nXeu7RfL@ElEL$#61lA1-aaVOxw0+KzP240nbTFI`}nY=Bj)U^De}sMcv{ZXOD@ z)-W)*fa%uP|0r$e7ve_tx}fyxpfbe@6tiCL6dS!u7j{0D*f*F>!GScc9W4 z*2Q=_-N?glNXA+(H=z|<1tt=jXelM=aO_P)jy@P-_gH|7AS2fbXN6__-nV#zO?ZHnJtS3E6F3){fTtA1uA+L$wlRnsmRH z2cQh4PDEx%ZfQn@H7-`aCRE6qPOqA3-ohQO6i|5X;bNv7^K-}SU3JuWP%V6TxPjOG z(93TC=3rGx?a)`BaFRe@V4hSC^3ToIU`W)&9hfy`Xqnq@r%^|frv~j??)4bkvXCTK z>4qA~DyXo^q-D;IOH7ptx2qHx<7b?Tn!wOUh1Ja%We|HE*Fb7|?4}X;Ao9zkA*AczaSrMZ& z*_QZHoCFsasN?Wi!(t<;Rc%k@zvFseN@Zg(@(`iuO8JqkU8X%&!8)){;>#H9Mcb)2 ziDdy=hvvsGiamfI+N@0a@Djv%;h6h@tS-Ec0f*`z|3o-os8XlZl*ns&dF|)f%jp@> zW;zAza0Wss^)Nhx<}yiRnKA*?CHt6auu{p!eg;CM$}o4%dSU{Hhe?a%uKFHuV%3c=d?N>WT?nR%L3RGKTjKJian*&@`uN8gg_uN)G{85~?) z=!f3|gTY$Ck&;l|p5TZo&u(l5=TP`P3H@Uq9WWtJ@uk^qSKM*B^R@OSCs_$we`O10 zIFe=}!{L=O_hh|WDvz+-$>H#$OQ{?%_JwLJ_zeXIEFWJ$wu=-OotX@_%TC>`OZr$j zk`gOKU{zX}bL43@J)3%@XlxU+>HMiACES|o@6^DkLkYC@q0-@Ei zayy0RT(|s38D`d*&n-;|4kRM1Z4{PleJm**=h^;_h|I&lyk2bgy1OW`M?$W(Tjzi9 z?3ZX4Kte=JKX-`-4?VKETSP_Ww0SQx4_&(Dp|4cF-l#MY3m4v%FWZ1znGn(^DEiiQ%JcBr93yz{3k6 zc8&ML<$*-b;;`{DtONA-h)?hiaXgvW22Z^LPrVx5+vr*M@4(639Vt|y^vlkOXNI08 z%em4m*L-zN*}jr$fsRoPu1y$l)V4!E?Zc~`+WK5z&?x9r6_C`&m+_5)o%|>L~Xiz zyD$UMBW*u9)`yE7Xk(63uI@>RO|OT!BTBaH%Jjl&d=Z#)TmSWMX2xR?tvnCYIKva4 zM8}U32bv$}qj)`y$vG~VU^^Y{)}(%Q>}uQPeifUq zTI`ZwlK>f^UpP#c6khQsou|!)}xuF@77-143(YgX3olcn@4Axu{L~6R-Rhg zrjfuQqin=JU(Ft&%hJt`7WB0}7B*lQ|BdF%f@fNTjQ!Ozy`sa|fR2>=dLFwqNaZgV zMNJ;hq>(istA+CI=7B8GDN)kZ$~-ZPcR!x0T<7EEggBs;|ws_BBrqt$`xQfg-!DN=os?^FoV%N1jFjcZNH@ zC#XuCq)XTG;k19m>x<}N!l%B;QYQ^I=AP0y4u|!gEYbvIM=_9JFZXDtXgxXoXWP9G5)tAk(~qlI5E#>TeFm(D$GHQU2u z5h}Y{t42#JVro6a&UJr~`pGR5S%U&66J(5%$CA&arb z4Y1Mju-t^VZ86S#!^Hn{@t)Ru>-GwVkkG{0Il+qk8ABI8%hp3d-RGoU`+QgqSKw8X zftahUUrBX+WPOcG#ORqK^N1^o%+DmUW<#a?F!gM(RE5fj$K52;BkI{YGHj3CVea}e zI@66OMlO=&Me}tbrX0_}-8yms2WYGYr<$>zMy2ZTQVOTL#KhiCuUc!VGSQ&v!cW_} zTwmAietA(58KvFzKpKAR_U|yFSB4fmr4JhfH|RCpeGc0zOzS}G1@_HOvO0WVGH9M$iP~Brj`)W_ zfa}s~Hg0mjQU#@LKd{&Abgyt~`Q+?puEEtac#rIQeVvB4ToZ5+t5Tl+k{%Yel*QEM z7??A1ww1cJvx@2T3i9X~m217iH`p2e==$`-?Y^4u$$0>kRxPUQ9G0}Vs@h0=LTvqF zCi4WoIxg+hFA~YjW_Moe$anO7+Pxen7^^<GmEglMvr%py4EvI=Sw&@FTmQCuv&a zi9TQ*2$vgcjQ)_F5u&V(6^1cqz2*;KcT@-4WOby;@&h+0XbaBG`$bmF^(it{rFqum z2?7gR#hz6&8Vq4v0lB0Bii7eufT=g zaa>6YUTQfwJ(%!{`|}f;hr!LvZ5^*AfrrR9RO{!_N{0h&(c{B8Wo`Q38#=ow2DglW zrNb2Ka1q2gCZa;nD&`IYsp^5Gs$5sbE++5EY+ZjVgrT?X*cJ33vebpOx*8|ww7E90bwPwtE=yvTgk+I=wvd4Zj0(aU* zq1RINp8@N(U6N6&`I-9*&T`FxWFp;xNsf7^C=a5aCJWUs5fd^Yd5LXz?X(`Jl_O32 zyzy42p6MGr#A^bbN2hxmk82|hQ49K@1^b1DJID3jEVD6tvq$YeLjz5(;Y{qS)`q&x znFAqb+c}KuJrM0n2~y2xQbfIJXNFshkbWZ!B<2c(luG5PwdhLogNa(= zrv^cs2u}=erDbJ_&RZ9sZB`oXh&?h{08kTLSh`fD3;=LB8I}zI4AJ)WA9#+`%4$*^x1>s!Mmat*OOoUnS5UE&o>KTMGpj$ z-Q9vobQ(QfU2lSfzL85MjXniESJ1Ur(2GxBk^t~+sD|%leAf9~m2cu$8VB+D3cwt5 z>G(5O1?+t?j&&Lts!d1XKPPE*qwG7Oz~sr(V0Jj1Qn1|_ESM7sjhD|fp(6H3&}nsx z7qP)JiO9D#!b&3>ICnw_>VcRU(qC9>O=SRh4!v0i(c;ZFn^&Lse}rAs>un;S zN%t{PiHqZL{|!1LOf*(pmu;SA1fJ15&L((Y>Z^RBz%ksiO{0Ov{KqjR1r=o#VHUb@ z-H7Z1R5f0_RgeVH%q4-ejHrT(^+Z_aTuI*#pa@7L(5ag-9x+`4OA zh2DO4Rt(WzdzyES@DZp3iMho9L|2HvSOD)UKVa_VUSVs%%fEAN3`-5vzx)8O`3@mw zl;rs8yLdvH4>t1U%HXOk3H790YiM5}^g6Z_$v~k>&E??PP4F9%`2G#R_QwBPZM@b5 zLGSU`0(jX|^GU<M1lXl)NVc^8Xt@oQ9DOMgJl?qkPFq&J*eASxzf1 z6xxfzEUt+KV^RnIaktL-VA_afiaoRePQj*5^%xd)bt9@J%^-v#rf=iI& z#8ykH(7KY95*XoYh?-t}-G7Iy!JlCQBo{u5flR4D!7cJ!e38S7XK+`m1F}D_j&!HiYhCT%{{bbn4ARPr%- zScm=KkdP@>BvAz%0s`Z|xs-2^Vn?7e5f2M4;EC7iI|5*XV=ofNn`*oDj$ULck9jU; zkQrR8UXdokr&60??yoY<`SRuNi&5|mmEVh~%_&;o!%M$YzE^;5*ioFeDb+=9Kh!V& zPJs)u$j;3@qKQ32Pm(mZ2sXsytQ79QDqeIME{u+&%*RP-VNHW|XxsJ>0~LNR>NAM& zEReNkGf(EG&xD~b3ipp25K)LWV(3`8wGvFlSErz)e27}VM|$uNOu4R0H3Zpmx8scgL#m{~B0tM(?sSQ+#;=P^}4%{$g3@OYlg_m1#c%PTY z9juf4OVvT^yYjG+I~uONS5<%Ha4Gjf#?vzAXCYMOt?lyTuGe} zi~TTCZW{}6kz!uTT(!8%sAA#=h>F?1s>8s{D5jRTt27EWBlbE%1OV_G_fKkVzficD zC{OKeZdZSb@0j3734m&w&PpXhG4^q;+ZRn2NQDYJRWm!4hhQfC6SA&h8xRl^Qz8oU z-*=xA7!K0f37{o$H%kyc@;HxMs00vr2|05-&|SYKe@8WNmM(( z$7PKcXKJZrhKy!dqqBDe_V0f-Z|vAh0AZ?O(#FPyM*!T{EzSsJif37&3?9CVKJ?lt zVB%RbVP-c!|87mB{@6z%)N|cT9-_62oSY7Ho8mP6b909!6lz4MSy)(T`h0Q%n)ceh z8xVM@vHtXNmlLR0WmX@4&2yn6c7z5FEY(G*4({CV?C!pt0~*>a!vzbt91|eH2ZpcQ z+O`N;NYPy&N4vVZAikN}5jyExyN3Bo`lz*GTi|JV(^Edn zBJ(G$Y6f!R<>a?^P7oGUy7`@+uD5?{dsOe7kKd}PlKLC!_gSESX-TX)y^(Ecd<+7} ziMA0E9Qn?)=D>5|``w0qFi$SK`+1r%{d(EVOAF0QE;@@b;Tk%<*nh0e;sO{tT+@XqV3b}CIIvsRwRW;! z)GJ`<0`DCd_Idl2Oag#t%|XyzW&)2I{6LdjFvd7qX}ryq^|-Qkf9Ln=_SfqIDmoJ{ zOCn_tE|B&O;qhQ82(f6Iqy?kD_x$5f5qN_@^;}7{zRW$1uk0Cu#;?wqde&$3F?#RC zm$OP>as5GPw5CC%L-ymlF2IKObM2)I*J~DNRxmR&_W(QC>^^Y;lTiZ*zH)anL}l7? z!zyX0!ozJbFP@CQxfQTlV;02@CzJNUvD!V1`AC+E(({Ka6rC7QQ6zpkd!RN~m}N~j zbsW4(t8y{waQfn@CAI5%z`e+N7kKbl7A=UZv_+mRNV@~;qpbBOF7pSz z9%hjE4-l^El314Sml`Y95enI6Nv3iGYU+wwar1dto#$%5WzU-i$5A(u^Ob6n)t0`4 z@^vn9N)liN&U>NJ%ht}vRshyp-&pfHGXZ?yWIf+hV7lENFZBZ2)y#hg;3-T1YRUn_ zgejwf#8Nk46e$#seU&p8-*iuGS=0$rQvwqIgPp>xrMiJg|Ngs#vvnrP4P^a$Qg2c# zg@h`}&@JO{muZj>F-?29Z|~j+1C4K4sopP0x!-)J8v9H;9gg>GmKDru`Ce0w69TGi zzOSBOc#fn)V*r8PGB(0D&}yd2e{Q+|sFSZfu=BB<9058G9aGlUgVI|ifbtcJZi%a3 zfd&%BYb*?Y8LT_rqCl6wXuQS9EF0}Wr4%I3~_V*p(Qu77gcb~T;rVj19BvT9x% zPzOk=)AzAH16m*y7hBsN0{nVY)%n8hccbRl&*=9c)p1?GcroDjG=PYL!oukeD}b*d z8651eh=~9tPnH7fKtfmeM3YSeUl&pA50LFjB`N2O>(brzoeCs5);VcPXO-e9!{cO86K+WdjD9Di}S~3s$~5)(KWDWv8f8FKlgfzASGf;Uhe4(L%i(nZd6dVch$jF`jq& zIm=Sk+Qc2~`;PyCM)NnG+)4VqSf}$p}K!X=m$Fe}{pxZL8@*2wD6?I+Mzl0S_K9 zH_S$1l~WuU-0KDLYd81-0eY)|F$N^00)}K?KEGtj8N!vP4R5__J8gi|Ue}+ka8WDovA}l^$!XPevB@H8m`LCJAyk=O(T;D%QMbI z&C90ZvcQRDz%afH^=uXdC|Dr)V&t0^VQu=EFVSbe1Rg&;`FU-W%5~|zVBc>|^ooxM zo#=hDe}6WinDXWivUG}Y9h5fg*c(e1^Q3Rd+3!CS32`EmlAq>6UWV^V!)69|etH zMZqTw%hUJtu}nr9Phb|YgN@|xuA_8w&`+S6RNv*!2whETpid;8Zw$ zPqshN9F+!iuz|ug-a83s%UI7D(Tj+byu5wYs9DwnZ4u4xl36NKwqpgtI%V=N+g@m! z?%d`N{ke)xIVydVNa^8n%yOI#yeNFm4qALZeb>wrEL>im|Me zD?%;%_uOw$eN4))?s!aa2!mqZ-%n3`Mf{0X^Pv=4`1AZ(J#{`8;=yR7P$7QCLXpKD zA6ItTOmfq)hYrWRao6JO*D1_uL#XoS;p_4ps%XysAvmB*Y4)p&tmgo~9xybwbsvtu zwyn|ck%QglS6?s^zWV^rT8%x_z^!>h`^yBEi+|JFYgDili=)LbVDG{Zs9dyWBpubPf3TiqwT z)_MWP@WZfL2MN9`tb?Ze?Q5`j2lV<=);TbjpP-oLy;z21|$Z$PZIJAx{EZH$U9iQOY5 zScI=mAdK_50y@0bG?4iF+@yUn>Qs&wVI~;yj94PJ?xl~U(dM^clqupm=Vu6@d z{^l&O$`5w@L9Ti!#ETz6?|DR)gJ$f_k(~OqOWH8KJdONa_Z`my*Twa?lPn~WO7@{J z-<#E7@uT0;6Kzw0aWF0@*4W1%-3@m`ny!fE0#qTN+Gaq8zdj%VUXq&o&74|M^j!$B z{`*SX=Vq?m5GeN*_SZFK&+ufO**2DNJNx zKkiy)F~YDyhDI+0wTSO;@crBF z_110)z|3e>%l99jz=pNKZhc(usb7!o|Kdy$2w-mJqfo%mcj7+8lB4#Rz7fSPyW9J4 zL#;vn%QIE8EVzJnTSA0KrC?4JeA_}elmo=55#8mhriQg1k3k4fSAru_B~sb z;4ZWXl2@T&4!)_JC|R~*(FsaPT@tf*y$lK^3sktM3C`Mh zWEF-*QWDy|%#bVjG8!%Q2o4x@%DyZg_8#3L6`LS&USQV;LFPATx_o4kER*3sabTunx!1H2ZMLf!gMe3{&XWWcmmTA2gOUd(_0rLMIG#>4#RAsB=UKpk_~+teE8OR9Da}3j^{tzN3ShE5bxs$9ne$u$^JG)ngsTC*) z#aF6Oi-_2pyUzw2hxn=Zo_^RPAUDSd1Alu5t7E}w_Y2mHy^Zr~9}+8#Z~U}$UASb4 zqL32ZN*se;F6u!26Afn~UVnKoU#U@2={t$nhka2LH4BAH|IDujiV-B1PBAq5CQsF( z5;rB>6u}1izyin~~6KLKQoY$l4jVNhW7x$4H)AI2nYZW4!}I30a!Rd-A!SG08^o{gb0Y5$HP!J zyYjGt-U11LK8IJ`_0Ic#My#8x^KRX|BW}iy`%MD|1CiC*;-7e?CEWBykMHaA=ZE!c4$&zVdmB3zgcrCD zzRyQ`cRs!kmpg5bt7l0_5COAB>6rrQrWZ<^O+adho1u zu>6zk_kcZLr8n{C<|u4SojnwM(rD^t*gRCjpD4cPkYH4Be8umgANwI={ecjSAf|Ob zq-m%H0kHi@^JX}$aUR@9tncwZnVL;=%WByIQDG>-$pc&zfu~Pix5owmU##uC2jS_@ zLMJpBj^&;3*a*Tl&Gft92$9oQ5r+j3rI;Wnch#^K)(-f;(;6Af<_0e_0&7~hNffE*AU=WbIx_&xw=PQax(4$>HIQ@lA1tw? zgc`9|zc(1krw9R1MnF*@VNg+SX>nuBFjB6cUr_?+dP4Q8lU zTQZ@}&}rZR`$@Sgd)6EsYz+KwU+dgnryQ4qGVazFIyhqSi;^V5FrDH;)8hv7EfU^F-3HqJ zkT9Qn8?}#x>LJ@of+Tv-i*}QbKfxcu$Kw~cmn#1&BeU=m20IT5pH!iV9Bspx>W`0v z>J2KKUscq@@&0g<(2K~jN4I@5BJa5Md1+c$Sh#I}!CZdm-g6lzh%w8rV#OOti^}kw7@06#e7O+W z_V89uHRYbGpBy_OFq%yfn z>*B=oB%MIS5$;b#(SkJQ%pdRCA-=V%%QDtb*HTv?cMMX8#5bILqL0{;tv12I3E6>$ zoT+7!L3k`aXtosl7G$EaC^4SN+ucA%N2`Bv_b!>!m3qKvxL}7ep4ydQ>pI#HpC(K1$&hkIkBg@Ea#m~?4ULj`UKt*=SFw`aV6 z3ka1RvWGRVzbiYSQcHuguqNnkmtJRqum$sA$c6HKY;R8(wmZ%YlScb3voocDM34bP zeR>Ks4n>lQfyQpm1)1s>G-u!-o+XP+_k2m9Uv19+HYimi~7pxM^4xxiCsX1H4=-j_|(&b?~(lS&4!@Mza1y zpIZ`Ul=ivz2l1vR{-SGr`=$B7s+jG|dL{%4spFeP4 zuO=cJx-p$5iwi@z#oFaUkp98&JLW8s{s5w48n0{f;H`w1m5#|2>8XcuduU<=j)GX4 zXxVs|i92=J%(Nz433N}y)92JBAZ+MaTHB8%6h(srm!GUob zp!(x0Q}S|~2TS9M90=@b`@s4^7x=Qs-+A}n z@4)H){{8z7o|fRh|GfVnAM2ty2f4q8_|3EafK2@K8|I+JcFe@K<$yv<>&t(*02H>( zJ4x6J(T!{-M!&g})?flB#UO8#UN>n{eq4gVWZ0w0o{!L&rdb0-*t7XY6{X9Yb6R{j=0%0@P2Coh|gxAk!ALnA;C!BCqz2RYz`Y$ zWzb8KU#m@UYASA|zBIz5iuClG1!g8`e1WlI7tr8{1|J3C?0sIk1l}eWd&3cZgS4iV zk1BV#L8zG)PVhGaapM!b9S*3xZsWO$shUp4ztXwQTGtaeNjG@8dymjaE^0BuXh~Fs z@RLcp=c}$m+qw-;xbA1(`Y(0iEexrMZ>_toJ&ghFq8u3zY`~kXu6t(LaJD!CtQ|PG z#EJjkO-_xa3*REEM7z(flvBZcJg-|xjnTwmjVLR&TNdZ~WxbKj*rmh!PC0nTTB%~&Z-+Qqq znGl1fMjY+w&}V+Y#lbd~6eFL8cN@NX_Np_O@mj!nLcU$@b2Rb{lZlnFxDgv3QC|L` zucp@n!$fUCo)nsjRTH?0)Ca$C}vMaPRjBuWNW~4VNdWT@(W+B%?iw z-nGE!SE{F;9TPZLL>J$LAKT;dI}~uv6Iad47ZXfg{#_(Jq&Lz)A~9kT_U{JB zpB_@EmG9xBpUTta`)7MEt``IH7$$;pczO@rqmZ5<8=PPt7WO zJi^~=ch@n}vFpb|+@A5WUyC`x-#_~(_f*jyg*1kKY{RpAV&(q0xP^wEiR%~c6|Cjq zci^-!jps$_*T?sa&{W@&*?urEboqQ-amS+Paa#dpl5)t!?e#Z+!m z1KVllp74IH+j5JjBbL7_OQvIlWtDEvYuSBd->hj`*ZVZ$W#A$F%2QWEV0i21Zpq4K z>trcP+u-d_DDBOv;?Q4di(N#Sm3!SP^~$pqQX=F2l{Nq*-$FA8{a!F`>pFyt{cG4B zkMb78R&Ak$CFnLZ^=nHwFKtO$FtgOb9<;%+(Hp?anj_zd<>LpN`$12*EyJ3X(sGnC zX_wV$SL7Eac5CZaQ|?qn4#2F>&?mAS6i5$)3T=wZ;xv6)ws%IuaLFh%2););4wn{I zN*2a5d9?pDGr3{)H*jVZZC-@GYU^YiPv_x(HRbIX_j|Z|U8inzEFboT!f&N?&rcU9 zncMA2Thd(}XB-e{`-%4G(Z(OsxP7)8eYyH>H~GQXj`H#ARc~2S`2z(?GEDL_kspU| z}uQ`{j|$*lIyZ4rOxZzoXl>dR*a8-Pl&au9zWjQOFA?99Q8i6 z+GOo9J$(SAfbGoi&BE{o1?4(%pO`V zj3SJ6)v0) zZ)))>68~ycV>nx;V7TD8aBlYMZ;Fe0x~JM5-%NJD6W7tjwlgaGGdSGsBp32os1iq#tO%4Bd#6hL2;*y4%M_?@@U@4~ZQ9J~iz(FcwY|w}Fb}l)Lf%C?7rC zIm%OnGZ$7|+}bb7QABqaqF+jEduTsUfL3-MjZh<8KwlF@cKxm&_mX&>*TB`3@M^Ck z9Foxf#e$~knF0lwTlY@Q?Yv=Th0Qs@<1`%7raH$Xyb>}}gCRz*x8wf*VeKuT;#j+F z(GVacXz<1pf`s7i5J7?`kl^kFcNz`u?w;W8?%udVS*uR440^Zx(8XPo!$yRXLR zQP2(D)m2}8Ypprwn&0jov1*$);QbSs(l>F@({SGvAilB}aJ#s={cNy$P{ooZ3G%E7 zGPd9AqT<%Sve_TpA5TJvFLPwH%V8GGv7 z_?_e}CV2WP8Y!)Fw;c4$nl^ipmzZZCSC3429 zYUGk?j%t6DVUHF&3(;`WDD_0zMR7=Wdz~0;0Oq?TPE8%O60`a({T>#VCmJ{T50?RU zdJSmiQ8~XxBjT{w&Wzo8@88|mb?9)Zb=OT>yQguF!k}^8F(KG9^th9HLS6i5`rx6Y z?(}$DL&^0mdXadsTWT8Kx#Nz7m55>8^qkjWKAiq}SC4$P9rL;10KRdYd9w_}ZT-L* zufTLpcCH5J{iJnibGYxlQ*E>RsY|SiPb?W83qz2q`m~#0_9{{B99JFk)y!G2Gv&38 zfZ+g(v3kEsU}EhJg0dikq?>y+6ywO?AnZ0)f7cN@wc4@LSb%uxUGU>?Q5DV^7DZwXN14Ugb+!=a#{h|d2H<%uOnUXc#8NbLp)=>^Mx zhEE&d325tV2beiIA$xmtyU=0-KsQ>TQXLW>AKz})qNS#)uzPTGwuNz3IMV4WwR?L< zFHPCN>Oxj60?8S-UtEj4*yIwFa7fHvOkdCZV2}q?65ZRA&dD-2shgIoxT?Gk{07Zq zqkJ+!P5silkgM;A*swYp6Z0BQU#*i-L80+|t0B^5ZK_UoZFFLnxo-Xf+FySV&bs>a zZiO?XM!LUO(*~`Y1G>f3BN4#>K+CWVxK;jj4;!_x?VmmDWyYu?2AbUi$tcO$3LBmd z;MJkTEG)cm_IbzMLf`wxrrQH2|E7o-u@zQi@qlrG#u19ZQYVhFA3yWuM1%n7;%gs} z`h1{-AJWy=_lYNfAG11Y^U_k!&;0OL{j+AWV>la4M>H za2msOe~b*#?r2L+p+8?`Mq_X{kd=;o`d%e0c1RXaqL4vNOkLR_1>RKn>&#hS0)&i_ zz?USwMzraNRSw7t6Z_5U{2zIAtsr5q_MIhkmTrlitlz|SQH@?-5r@OGUmI;R#Z8W{ zdyTW&jsnL7RQBER7SnpMz{1A%R?}5!aJ1Tyes%&KiQPF>J z6Iz>543RO9)85pfs&vP{u@RPj5%@Txpo7ni_�^B(U5XzUAYur=l41X;|W@-ovP} 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 TSn3q37=Xaj)z4*}Q$iB}ub!{q literal 0 HcmV?d00001 diff --git a/docs/conf.py b/docs/conf.py index 8e790b8..9ed2226 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,184 +12,7 @@ author = "Bluesky Contributors" -extensions = [ - # Use this for generating API docs - "sphinx.ext.autodoc", - # This can parse google style docstrings - "sphinx.ext.napoleon", - # For linking to external sphinx documentation - "sphinx.ext.intersphinx", - # Add links to source code in API docs - "sphinx.ext.viewcode", - # Adds the inheritance-diagram generation directive - "sphinx.ext.inheritance_diagram", - # Add a copy button to each code block - "sphinx_copybutton", - # For the card element - "sphinx_design", - # So we can write markdown files - "myst_parser", - "sphinx.ext.mathjax", - "sphinx_autodoc_typehints", - "sphinx_copybutton", - "sphinx_tags", -] +extensions = ["myst_nb", "sphinx_copybutton"] -source_suffix = [".rst", ".md"] -exclude_patterns = [ - "_build", - "**.ipynb_checkpoints", - "Thumbs.db", - ".DS_Store", - ".env", - ".venv", -] - -html_theme = "furo" - -myst_enable_extensions = [ - "colon_fence", -] - -intersphinx_mapping = { - "python": ("https://docs.python.org/3", None), -} - -always_document_param_types = True - -tags_creat_tags = True - -# -- General configuration ------------------------------------------------ - -# General information about the project. -project = "bluesky-cookbook" - -# The full version, including alpha/beta/rc tags. -release = "v0.1.0" - -# The short X.Y version. -if "+" in release: - # Not on a tag, use branch name - root = Path(__file__).absolute().parent.parent - git_branch = check_output("git branch --show-current".split(), cwd=root) - version = git_branch.decode().strip() -else: - version = release -# So we can use the ::: syntax -myst_enable_extensions = ["colon_fence"] - -# If true, Sphinx will warn about all references where the target cannot -# be found. -nitpicky = True - -# A list of (type, target) tuples (by default empty) that should be ignored when -# generating warnings in "nitpicky mode". Note that type should include the -# domain name if present. Example entries would be ('py:func', 'int') or -# ('envvar', 'LD_LIBRARY_PATH'). -nitpick_ignore = [ - ("py:class", "NoneType"), - ("py:class", "'str'"), - ("py:class", "'float'"), - ("py:class", "'int'"), - ("py:class", "'bool'"), - ("py:class", "'object'"), - ("py:class", "'id'"), - ("py:class", "typing_extensions.Literal"), - ("py:class", "_io.StringIO"), - ("py:class", "_io.BytesIO"), -] - -# Both the class’ and the __init__ method’s docstring are concatenated and -# inserted into the main body of the autoclass directive -autoclass_content = "both" - -# Order the members by the order they appear in the source code -autodoc_member_order = "bysource" - -# Don't inherit docstrings from baseclasses -autodoc_inherit_docstrings = False - -# Output graphviz directive produced images in a scalable format -graphviz_output_format = "svg" - -# The name of a reST role (builtin or Sphinx extension) to use as the default -# role, that is, for text marked up `like this` -default_role = "any" - -# The master toctree document. -master_doc = "index" - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# These patterns also affect html_static_path and html_extra_path -exclude_patterns = ["_build"] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# This means you can link things like `str` and `asyncio` to the relevant -# docs in the python documentation. -intersphinx_mapping = {"python": ("https://docs.python.org/3/", None)} - -# A dictionary of graphviz graph attributes for inheritance diagrams. -inheritance_graph_attrs = {"rankdir": "TB"} - -# Ignore localhost links for periodic check that links in docs are valid -linkcheck_ignore = [r"http://localhost:\d+/"] - -# Set copy-button to ignore python and bash prompts -# https://sphinx-copybutton.readthedocs.io/en/latest/use.html#using-regexp-prompt-identifiers -copybutton_prompt_text = r">>> |\.\.\. |\$ |In \[\d*\]: | {2,5}\.\.\.: | {5,8}: " -copybutton_prompt_is_regexp = True - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -github_repo = "bluesky-cookbook" -github_user = "bluesky" - -# Theme options for pydata_sphinx_theme -# We don't check switcher because there are 3 possible states for a repo: -# 1. New project, docs are not published so there is no switcher -# 2. Existing project with latest skeleton, switcher exists and works -# 3. Existing project with old skeleton that makes broken switcher, -# switcher exists but is broken -# Point 3 makes checking switcher difficult, because the updated skeleton -# will fix the switcher at the end of the docs workflow, but never gets a chance -# to complete as the docs build warns and fails. -html_theme_options = { - "logo": { - "text": project, - }, - "use_edit_page_button": True, - "github_url": f"https://github.com/{github_user}/{github_repo}", - "icon_links": [ - { - "name": "PyPI", - "url": f"https://pypi.org/project/{project}", - "icon": "fas fa-cube", - } - ], - "navbar_end": ["theme-switcher", "icon-links", "version-switcher"], - "navigation_with_keys": False, -} - -# A dictionary of values to pass into the template engine’s context for all pages -html_context = { - "github_user": github_user, - "github_repo": project, - "github_version": version, - "doc_path": "docs", -} - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -html_show_sphinx = False - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = False - -# Logo -# html_logo = "images/blueapi-logo.svg" -# html_favicon = html_logo +nb_execution_mode = "auto" +html_theme = "pydata_sphinx_theme" diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 0000000..34875ba --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,173 @@ +# Guide to Contributing + +## What makes a "Recipe?" + +Each recipe should: + +* Be self contained +* Include a list of "ingredients" i.e. which parts of the bluesky framework you need and what data you need +* Be a markdown document +* Be categorised as a [tutorial or how-to guide](https://diataxis.fr/) +* Tagged + * User + * Developer + * Admin + * Manager +First, clone this repository. + +With HTTPS: + +```sh +git clone https://github.com/bluesky/bluesky-cookbok +``` + +With SSH: +```sh +git clone git@github.com:bluesky/bluesky-cookbok +``` + +## Overview + +Each "recipe" is a directory under `docs/tutorials/` or `docs/how-to/`. It may +contain one or more Markdown (`.md`) files with a mixture of narrative text and +code. Each recipe directory may also contain supporting data files, scripts, +illustrations, solutions to exercises, etc. + +```none +$ tree docs/ +docs/ +├── conf.py +├── contributing.md +├── index.md +├── tutorials +│   ├── getting-started +│   │   ├── hello-bluesky.md +│   ├── flyscanning +│   │   ├── basic-demo.md +... +``` + +Some of these Markdown files include a header that describes how to convert +them into Jupyter notebooks and execute the code in them. This is described in +more detail below. + +## Setup + +We use the [pixi](https://pixi.sh/latest/#installation) package manager to +create an environment with dependencies from conda-forge and PyPI. We recommend +installing pixi. Then just: + +```sh +pixi install +``` + +But if you have a strong preference for a different package manager, peek +inside `pixi.toml` to find the list of dependencies and install them however +you wish. + +## Build + +```sh +pixi run build +``` + +```{note} +Later, if the build results get into a broken state, use `pixi run clean` +to start fresh. +``` + +This creates: +- Executed notebooks, generated from eligible Markdown files, under `build/juptyer_execute/` +- HTML under `build/html/` + +Open `build/html/index.html` in a web browser. + +## Develop + +``` +pixi run jupyter lab +``` + +In the file browser, locate one of the examples under `docs/recipes/`. Double +click to open. + +Files like `docs/recipes/static/static.md` are plain Markdown files. Files like +`docs/recipes/executable/basics.md` have a YAML header which enables the +documentation build system to convert them to Jupyter notebooks and execute +them: + +```yaml +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 + jupytext_version: 1.16.4 +kernelspec: + display_name: Python 3 (ipykernel) + language: python + name: python3 +--- +``` + +One option is to simply edit these files in any text editor. + +Another is to use Jupyter Lab, which can open these files _as notebooks_ +enabling you the interactively edit and execute them, saving the changes to +Markdown. + +![Context Menu: Open With... Jupytext Notebook](./_static/images/open-with-jupytext-notebook.png) + +Note that the cell _outputs_ are not saved to disk. This is a feature, not a +bug: the outputs are build products, and they do not belong in version control. +During the build process, the Markdown document is converted to a Jupyter +notebook format and executed. + +## Test + +The script `test.sh` runs files with executable code from top to bottom and +prints any unexpected tracebacks. + +``` +pixi run ./test.sh docs/recipes/executable/basics.md +``` + +`````{note} + +Sometimes examples are _expected_ to raise an exception. These can be marked up +with a "tag" like so. With that tag, the build and test procedures will pass +over the exception. + +````markdown +```{code-cell} ipython3 +:tags: [raises-exception] + +1 / 0 +``` +```` +````` + +To test _all_ examples, run: + +``` +pixi run ./test.sh --all +``` + +(Above, the script automatically discovers all Markdown files which have that +YAML header marking them as executable.) + +## Deploy + +Once changes are merged to the `main` branch, the GitHub Actions [Publish workflow][] will: +- Publish HTML to this site. +- Uploaded the executed ipynb notebooks as a GitHub Artifact (useful for debugging) + as an Artifact associated with the workflow run. +- Push to [the `notebooks` branch of this repository][notebooks-branch] a version + where all Markdown Jupytext files have been converted to `.ipynb` format, using + `pixi run ./convert-all ipynb`. This is suitable for use in environments + where users need to be handed Jupyter Notebook files directly, such as Google + Colab. + +[notebooks-branch]: https://github.com/bluesky/bluesky-cookbok/tree/notebooks/docs/recipes +[Publish workflow]: https://github.com/bluesky/bluesky-cookbok/actions/workflows/cd.yml diff --git a/docs/index.md b/docs/index.md index 5fc9064..5504d3f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,37 +1,10 @@ # Bluesky Cookbook ```{toctree} -:maxdepth: 2 -``` - -## Table of Contents - -- {ref}`genindex` -- {ref}`search` - -## How the documentation is structured - - - -::::{grid} 2 -:gutter: 4 - -:::{grid-item-card} {material-regular}`directions_walk;2em` -```{toctree} -:maxdepth: 2 +:maxdepth: 3 +:glob: +recipes/tutorials/**/* +recipes/how-to/**/* glossary +contributing ``` -+++ -Glossary explaining terms in typical usage. New users start here. -::: - -:::{grid-item-card} {material-regular}`menu_book;2em` -```{toctree} -:maxdepth: 2 -recipes -``` -+++ -Recipes are here -::: - -:::: diff --git a/docs/recipes.md b/docs/recipes.md deleted file mode 100644 index 79b74a0..0000000 --- a/docs/recipes.md +++ /dev/null @@ -1,7 +0,0 @@ -# Recipes - -```{toctree} -:maxdepth: 1 -:glob: -recipes/* -``` diff --git a/docs/recipes/how-to/example/demo.md b/docs/recipes/how-to/example/demo.md new file mode 100644 index 0000000..1f783f7 --- /dev/null +++ b/docs/recipes/how-to/example/demo.md @@ -0,0 +1,36 @@ +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 + jupytext_version: 1.16.4 +kernelspec: + display_name: Python 3 (ipykernel) + language: python + name: python3 +--- + +# Executable Code + +## Basics + +```{code-cell} ipython3 +1 + 3 +``` + +```{code-cell} ipython3 +a = 8**2 +``` + +```{code-cell} ipython3 +a +``` + +This cell has an excepted error: + +```{code-cell} ipython3 +:tags: [raises-exception] + +1 / 0 +``` diff --git a/docs/recipes/test.md b/docs/recipes/test.md deleted file mode 100644 index 3da2697..0000000 --- a/docs/recipes/test.md +++ /dev/null @@ -1,4 +0,0 @@ - -# test recipe - -Hello world! diff --git a/docs/recipes/tutorials/example/demo.md b/docs/recipes/tutorials/example/demo.md new file mode 100644 index 0000000..1f783f7 --- /dev/null +++ b/docs/recipes/tutorials/example/demo.md @@ -0,0 +1,36 @@ +--- +jupytext: + text_representation: + extension: .md + format_name: myst + format_version: 0.13 + jupytext_version: 1.16.4 +kernelspec: + display_name: Python 3 (ipykernel) + language: python + name: python3 +--- + +# Executable Code + +## Basics + +```{code-cell} ipython3 +1 + 3 +``` + +```{code-cell} ipython3 +a = 8**2 +``` + +```{code-cell} ipython3 +a +``` + +This cell has an excepted error: + +```{code-cell} ipython3 +:tags: [raises-exception] + +1 / 0 +``` diff --git a/noxfile.py b/noxfile.py deleted file mode 100644 index 43b5294..0000000 --- a/noxfile.py +++ /dev/null @@ -1,50 +0,0 @@ -import argparse - -import nox - - -@nox.session(reuse_venv=True) -def docs(session: nox.Session) -> None: - """ - Build the docs. Pass "--serve" to serve. Pass "-b linkcheck" to check links. - """ - - parser = argparse.ArgumentParser() - parser.add_argument("--serve", action="store_true", help="Serve after building") - parser.add_argument( - "-b", dest="builder", default="html", help="Build target (default: html)" - ) - args, posargs = parser.parse_known_args(session.posargs) - - if args.builder != "html" and args.serve: - session.error("Must not specify non-HTML builder with --serve") - - session.env['LC_ALL'] = 'en_US.UTF-8' # Adjust as necessary to match your available locale - session.env['LANG'] = 'en_US.UTF-8' # Adjust as necessary - extra_installs = ["sphinx-autobuild"] if args.serve else [] - - # session.install("-r", "requirements.txt") - session.install('-e', '.[dev]') - if extra_installs: - session.install(*extra_installs) - session.chdir("docs") - - if args.builder == "linkcheck": - session.run( - "sphinx-build", "-b", "linkcheck", ".", "_build/linkcheck", *posargs - ) - return - - shared_args = ( - "-n", # nitpicky mode - "-T", # full tracebacks - f"-b={args.builder}", - ".", - f"_build/{args.builder}", - *posargs, - ) - - if args.serve: - session.run("sphinx-autobuild", *shared_args) - else: - session.run("sphinx-build", "--keep-going", *shared_args) \ No newline at end of file diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..b18cd42 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,4702 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py312h98912ed_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h30efb56_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.7.4-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.7.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.0-py312h1671c18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.1-py312h8572e83_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.5-py312hca68cad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.53.1-py312h41a817b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.4.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.4.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipympl-0.9.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.26.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-myst-2.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py312h8572e83_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.21-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h77fa898_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-hc0a3c3a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h46a8edc_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.16-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py312h98912ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py312h854627b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.0-py312h1103770_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.4.0-py312h287a98d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.0.0-py312h9a8786e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.5-h2ad013b_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h41a817b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py312hf008fa9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py312h9a8786e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20240821-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h75354e8_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h3483029_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/37/56b0da468a85e7704f3b2bc045015301bdf4be2184a44868c71f6dca6fe2/greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/2f/0bb8eacdd1102a20fecc759fb8ace695b9a1048563499a6dff8fa8da32a7/jupyter_cache-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/a3/285eb1e79dbbd8e9513a3bb1bb2bb3d4c7c22c8a92efb8449baface0b864/jupytext-1.16.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/f7/8a4dcea720a581e69ac8c5a38524baf0e3e2bb5f3819a9ff661464fe7d10/mdit_py_plugins-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/42/814f84c78fa45cbd03fea27b10f4edf303ccf3890e377d3cda6d7ec729c3/myst_nb-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/b8/aa822988d390cf06afa3c69d86a3a38bba79b51385207cd7cd99d0be17bb/SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl + jupyterlite: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py312h98912ed_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h30efb56_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.7.4-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.7.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.0-py312h1671c18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.1-py312h8572e83_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.5-py312hca68cad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/doit-0.36.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.53.1-py312h41a817b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.4.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.4.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipympl-0.9.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.26.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-myst-2.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlite-core-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlite-pyodide-kernel-0.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py312h8572e83_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.21-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.1.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.1.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h46a8edc_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.16-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py312h98912ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py312h854627b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-7.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.0-py312h1103770_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.4.0-py312h287a98d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.11.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.0.0-py312h9a8786e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.5-h2ad013b_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h41a817b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py312hf008fa9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py312h9a8786e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20240821-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h75354e8_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h3483029_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/37/56b0da468a85e7704f3b2bc045015301bdf4be2184a44868c71f6dca6fe2/greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f8/2f/0bb8eacdd1102a20fecc759fb8ace695b9a1048563499a6dff8fa8da32a7/jupyter_cache-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/90/a3/285eb1e79dbbd8e9513a3bb1bb2bb3d4c7c22c8a92efb8449baface0b864/jupytext-1.16.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/f7/8a4dcea720a581e69ac8c5a38524baf0e3e2bb5f3819a9ff661464fe7d10/mdit_py_plugins-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/42/814f84c78fa45cbd03fea27b10f4edf303ccf3890e377d3cda6d7ec729c3/myst_nb-1.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/b8/aa822988d390cf06afa3c69d86a3a38bba79b51385207cd7cd99d0be17bb/SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + purls: [] + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: accessible-pygments + version: 0.0.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_0.conda + sha256: 712c1875bcd32674e8ce2f418f0b2875ecb98e6bcbb21ec7502dae8ff4b0f73c + md5: 1bb1ef9806a9a20872434f58b3e7fc1a + depends: + - pygments + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/accessible-pygments?source=hash-mapping + size: 1328908 + timestamp: 1718718120070 +- kind: conda + name: alabaster + version: 1.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_0.conda + sha256: a9e1092725561d9bff12d3a4d3bb46c43d3d0db3cbb2c63c9025d1c77e84840c + md5: 7d78a232029458d0077ede6cda30ed0c + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/alabaster?source=hash-mapping + size: 18522 + timestamp: 1722035895436 +- kind: conda + name: anyio + version: 4.4.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.4.0-pyhd8ed1ab_0.conda + sha256: 84ac9429812495f12939ab4994f2634f7cacd254f6234a0c2c0243daed15a7ee + md5: 1fa97c6e8db1f82c64ff17a5efc4ae8e + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.8 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.17 + - trio >=0.23 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=hash-mapping + size: 104255 + timestamp: 1717693144467 +- kind: conda + name: argon2-cffi + version: 23.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda + sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677 + md5: 3afef1f55a1366b4d3b6a0d92e2235e4 + depends: + - argon2-cffi-bindings + - python >=3.7 + - typing-extensions + constrains: + - argon2_cffi ==999 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi?source=hash-mapping + size: 18602 + timestamp: 1692818472638 +- kind: conda + name: argon2-cffi-bindings + version: 21.2.0 + build: py312h98912ed_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py312h98912ed_4.conda + sha256: 8ddb4a586bc128f1b9484f82c5cb0226340527fbfe093adf3b76b7e755e11477 + md5: 00536e0a1734dcde9815fe227f32fc5a + depends: + - cffi >=1.0.1 + - libgcc-ng >=12 + - python >=3.12.0rc3,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping + size: 35142 + timestamp: 1695386704886 +- kind: conda + name: arrow + version: 1.3.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda + sha256: ff49825c7f9e29e09afa6284300810e7a8640d621740efb47c4541f4dc4969db + md5: b77d8c2313158e6e461ca0efb1c2c508 + depends: + - python >=3.8 + - python-dateutil >=2.7.0 + - types-python-dateutil >=2.8.10 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/arrow?source=hash-mapping + size: 100096 + timestamp: 1696129131844 +- kind: conda + name: asttokens + version: 2.4.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 + md5: 5f25798dcefd8252ce5f9dc494d5f571 + depends: + - python >=3.5 + - six >=1.12.0 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/asttokens?source=hash-mapping + size: 28922 + timestamp: 1698341257884 +- kind: conda + name: async-lru + version: 2.0.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda + sha256: 7ed83731979fe5b046c157730e50af0e24454468bbba1ed8fc1a3107db5d7518 + md5: 3d081de3a6ea9f894bbb585e8e3a4dcb + depends: + - python >=3.8 + - typing_extensions >=4.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/async-lru?source=hash-mapping + size: 15342 + timestamp: 1690563152778 +- kind: conda + name: attrs + version: 24.2.0 + build: pyh71513ae_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + sha256: 28dba85a7e0f7fb57d7315e13f603d1e41b83c5b88aa2a602596b52c833a2ff8 + md5: 6732fa52eb8e66e5afeb32db8701a791 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/attrs?source=hash-mapping + size: 56048 + timestamp: 1722977241383 +- kind: conda + name: babel + version: 2.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6 + md5: 9669586875baeced8fc30c0826c3270e + depends: + - python >=3.7 + - pytz + - setuptools + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/babel?source=hash-mapping + size: 7609750 + timestamp: 1702422720584 +- kind: conda + name: beautifulsoup4 + version: 4.12.3 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 + md5: 332493000404d8411859539a5a630865 + depends: + - python >=3.6 + - soupsieve >=1.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/beautifulsoup4?source=hash-mapping + size: 118200 + timestamp: 1705564819537 +- kind: conda + name: bleach + version: 6.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda + sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 + md5: 0ed9d7c0e9afa7c025807a9a8136ea3e + depends: + - packaging + - python >=3.6 + - setuptools + - six >=1.9.0 + - webencodings + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/bleach?source=hash-mapping + size: 131220 + timestamp: 1696630354218 +- kind: conda + name: brotli + version: 1.1.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda + sha256: f2d918d351edd06c55a6c2d84b488fe392f85ea018ff227daac07db22b408f6b + md5: f27a24d46e3ea7b70a1f98e50c62508f + depends: + - brotli-bin 1.1.0 hd590300_1 + - libbrotlidec 1.1.0 hd590300_1 + - libbrotlienc 1.1.0 hd590300_1 + - libgcc-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 19383 + timestamp: 1695990069230 +- kind: conda + name: brotli-bin + version: 1.1.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda + sha256: a641abfbaec54f454c8434061fffa7fdaa9c695e8a5a400ed96b4f07c0c00677 + md5: 39f910d205726805a958da408ca194ba + depends: + - libbrotlidec 1.1.0 hd590300_1 + - libbrotlienc 1.1.0 hd590300_1 + - libgcc-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 18980 + timestamp: 1695990054140 +- kind: conda + name: brotli-python + version: 1.1.0 + build: py312h30efb56_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h30efb56_1.conda + sha256: b68706698b6ac0d31196a8bcb061f0d1f35264bcd967ea45e03e108149a74c6f + md5: 45801a89533d3336a365284d93298e36 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - python >=3.12.0rc3,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.1.0 hd590300_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 350604 + timestamp: 1695990206327 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: ca-certificates + version: 2024.7.4 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.7.4-hbcca054_0.conda + sha256: c1548a3235376f464f9931850b64b02492f379b2f2bb98bc786055329b080446 + md5: 23ab7665c5f63cfb9f1f6195256daac6 + license: ISC + purls: [] + size: 154853 + timestamp: 1720077432978 +- kind: conda + name: cached-property + version: 1.5.2 + build: hd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + md5: 9b347a7ec10940d3f7941ff6c460b551 + depends: + - cached_property >=1.5.2,<1.5.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4134 + timestamp: 1615209571450 +- kind: conda + name: cached_property + version: 1.5.2 + build: pyha770c72_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + md5: 576d629e47797577ab0f1b351297ef4a + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cached-property?source=hash-mapping + size: 11065 + timestamp: 1615209567874 +- kind: conda + name: certifi + version: 2024.7.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.7.4-pyhd8ed1ab_0.conda + sha256: dd3577bb5275062c388c46b075dcb795f47f8dac561da7dd35fe504b936934e5 + md5: 24e7fd6ca65997938fff9e5ab6f653e4 + depends: + - python >=3.7 + license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping + size: 159308 + timestamp: 1720458053074 +- kind: conda + name: cffi + version: 1.17.0 + build: py312h1671c18_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.0-py312h1671c18_0.conda + sha256: 20fe2f88dd7c0ef16e464fa46757821cf569bc71f40a832e7767d3a87250f251 + md5: 33dee889f41b0ba6dbe5ddbe70ebf263 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc-ng >=12 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 294192 + timestamp: 1723018486671 +- kind: conda + name: charset-normalizer + version: 3.3.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 + md5: 7f4a9e3fcff3f6356ae99244a014da6a + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=hash-mapping + size: 46597 + timestamp: 1698833765762 +- kind: pypi + name: click + version: 8.1.7 + url: https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl + sha256: ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 + requires_dist: + - colorama ; platform_system == 'Windows' + - importlib-metadata ; python_version < '3.8' + requires_python: '>=3.7' +- kind: conda + name: cloudpickle + version: 3.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda + sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754 + md5: 753d29fe41bb881e4b9c004f0abf973f + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cloudpickle?source=hash-mapping + size: 24746 + timestamp: 1697464875382 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: comm + version: 0.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe + md5: 948d84721b578d426294e17a02e24cbb + depends: + - python >=3.6 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/comm?source=hash-mapping + size: 12134 + timestamp: 1710320435158 +- kind: conda + name: contourpy + version: 1.2.1 + build: py312h8572e83_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.1-py312h8572e83_0.conda + sha256: b0731336b9788c247b11a592352f700a647119340b549aba9e933835c7c77df0 + md5: 12c6a831ef734f0b2dd4caff514cbb7f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - numpy >=1.20 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 256764 + timestamp: 1712430146809 +- kind: conda + name: cycler + version: 0.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8 + md5: 5cd86562580f274031ede6aa6aa24441 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cycler?source=hash-mapping + size: 13458 + timestamp: 1696677888423 +- kind: conda + name: debugpy + version: 1.8.5 + build: py312hca68cad_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.5-py312hca68cad_0.conda + sha256: 129964de45b48cb44a377ba926fd96a081ef11ca3d47f5f1b969c2609de30816 + md5: 6c56579c537feaafdf62d6c3b5424c53 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping + size: 2092033 + timestamp: 1722923858548 +- kind: conda + name: decorator + version: 5.1.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 + md5: 43afe5ab04e35e17ba28649471dd7364 + depends: + - python >=3.5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/decorator?source=hash-mapping + size: 12072 + timestamp: 1641555714315 +- kind: conda + name: defusedxml + version: 0.7.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be + md5: 961b3a227b437d82ad7054484cfa71b2 + depends: + - python >=3.6 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/defusedxml?source=hash-mapping + size: 24062 + timestamp: 1615232388757 +- kind: conda + name: docutils + version: 0.21.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda + sha256: 362bfe3afaac18298c48c0c6a935641544077ce5105a42a2d8ebe750ad07c574 + md5: e8cd5d629f65bdf0f3bb312cde14659e + depends: + - python >=3.9 + license: CC-PDDC AND BSD-3-Clause AND BSD-2-Clause AND ZPL-2.1 + purls: + - pkg:pypi/docutils?source=hash-mapping + size: 403226 + timestamp: 1713930478970 +- kind: conda + name: doit + version: 0.36.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/doit-0.36.0-pyhd8ed1ab_0.tar.bz2 + sha256: 268abd6a52e5ea839233f5f5754d9bf959b16289b6a891cb50ffb65c9a47306a + md5: fc5e53d070f1ee7bb38c2ece282dcb82 + depends: + - cloudpickle + - importlib-metadata >=4.4 + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/doit?source=hash-mapping + size: 67197 + timestamp: 1650645336234 +- kind: conda + name: entrypoints + version: '0.4' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 + sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af + md5: 3cf04868fee0a029769bd41f4b2fbf2d + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/entrypoints?source=hash-mapping + size: 9199 + timestamp: 1643888357950 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: executing + version: 2.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda + sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057 + md5: e16be50e378d8a4533b989035b196ab8 + depends: + - python >=2.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/executing?source=hash-mapping + size: 27689 + timestamp: 1698580072627 +- kind: conda + name: fonttools + version: 4.53.1 + build: py312h41a817b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.53.1-py312h41a817b_0.conda + sha256: b1d9f95c13b9caa26689875b0af654b7f464e273eea94abdf5b1be1baa6c8870 + md5: da921c56bcf69a8b97216ecec0cc4015 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli + - libgcc-ng >=12 + - munkres + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fonttools?source=hash-mapping + size: 2847552 + timestamp: 1720359185195 +- kind: conda + name: fqdn + version: 1.5.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 + sha256: 6cfd1f9bcd2358a69fb571f4b3af049b630d52647d906822dbedac03e84e4f63 + md5: 642d35437078749ef23a5dca2c9bb1f3 + depends: + - cached-property >=1.3.0 + - python >=2.7,<4 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/fqdn?source=hash-mapping + size: 14395 + timestamp: 1638810388635 +- kind: conda + name: freetype + version: 2.12.1 + build: h267a509_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + purls: [] + size: 634972 + timestamp: 1694615932610 +- kind: pypi + name: greenlet + version: 3.0.3 + url: https://files.pythonhosted.org/packages/bd/37/56b0da468a85e7704f3b2bc045015301bdf4be2184a44868c71f6dca6fe2/greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + sha256: fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + requires_python: '>=3.7' +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: httpcore + version: 1.0.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.5-pyhd8ed1ab_0.conda + sha256: 4025644200eefa0598e4600a66fd4804a57d9fd7054a5c8c45e508fd875e0b84 + md5: a6b9a0158301e697e4d0a36a3d60e133 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 45816 + timestamp: 1711597091407 +- kind: conda + name: httpx + version: 0.27.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.0-pyhd8ed1ab_0.conda + sha256: fdaf341fb2630b7afe8238315448fc93947f77ebfa4da68bb349e1bcf820af58 + md5: 9f359af5a886fd6ca6b2b6ea02e58332 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 64651 + timestamp: 1708531043505 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: idna + version: '3.8' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.8-pyhd8ed1ab_0.conda + sha256: 8660d38b272d3713ec8ac5ae918bc3bc80e1b81e1a7d61df554bded71ada6110 + md5: 99e164522f6bdf23c177c8d9ae63f975 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 49275 + timestamp: 1724450633325 +- kind: conda + name: imagesize + version: 1.4.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + sha256: c2bfd7043e0c4c12d8b5593de666c1e81d67b83c474a0a79282cc5c4ef845460 + md5: 7de5386c8fea29e76b303f37dde4c352 + depends: + - python >=3.4 + license: MIT + license_family: MIT + purls: + - pkg:pypi/imagesize?source=hash-mapping + size: 10164 + timestamp: 1656939625410 +- kind: conda + name: importlib-metadata + version: 8.4.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.4.0-pyha770c72_0.conda + sha256: 02c95f6f62675012e0b2ab945eba6fc14fa6a693c17bced3554db7b62d586f0c + md5: 6e3dbc422d3749ad72659243d6ac8b2b + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 28338 + timestamp: 1724187329246 +- kind: conda + name: importlib_metadata + version: 8.4.0 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.4.0-hd8ed1ab_0.conda + sha256: c9c782fdf59fb169220b69ea0bbefc3fdc7f58c9fdbdf2d6ff734aa033647b59 + md5: 01b7411c765c3d863dcc920207f258bd + depends: + - importlib-metadata >=8.4.0,<8.4.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 9292 + timestamp: 1724187331653 +- kind: conda + name: importlib_resources + version: 6.4.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.4-pyhd8ed1ab_0.conda + sha256: 13e277624eaef453af3ff4d925ba1169376baa7008eabd8eaae7c5772bec9fc2 + md5: 99aa3edd3f452d61c305a30e78140513 + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.4,<6.4.5.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 32258 + timestamp: 1724314749050 +- kind: conda + name: ipykernel + version: 6.29.5 + build: pyh3099207_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + sha256: 33cfd339bb4efac56edf93474b37ddc049e08b1b4930cf036c893cc1f5a1f32a + md5: b40131ab6a36ac2c09b7c57d4d3fbf99 + depends: + - __linux + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=6.1.12 + - jupyter_core >=4.12,!=5.0.* + - matplotlib-inline >=0.1 + - nest-asyncio + - packaging + - psutil + - python >=3.8 + - pyzmq >=24 + - tornado >=6.1 + - traitlets >=5.4.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipykernel?source=hash-mapping + size: 119084 + timestamp: 1719845605084 +- kind: conda + name: ipympl + version: 0.9.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipympl-0.9.4-pyhd8ed1ab_0.conda + sha256: db2a3eae629209d5e61d1443e5a12c6563f82b08aaf74810e76763eed5d71a28 + md5: efef6deea063ef5612376b62b857ad7f + depends: + - ipython <9 + - ipython_genutils + - ipywidgets >=7.6.0,<9 + - matplotlib-base >=2.2.0,<4 + - numpy + - pillow + - python >=3.6 + - traitlets <6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipympl?source=hash-mapping + size: 213574 + timestamp: 1713251745934 +- kind: conda + name: ipython + version: 8.26.0 + build: pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.26.0-pyh707e725_0.conda + sha256: a40c2859a055d98ba234d67b233fb1ba55d86cbe632ec96eecb7c5019c16478b + md5: f64d3520d5d00321c10f4dabb5b903f3 + depends: + - __unix + - decorator + - exceptiongroup + - jedi >=0.16 + - matplotlib-inline + - pexpect >4.3 + - pickleshare + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.4.0 + - python >=3.10 + - stack_data + - traitlets >=5.13.0 + - typing_extensions >=4.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython?source=hash-mapping + size: 599279 + timestamp: 1719582627972 +- kind: conda + name: ipython_genutils + version: 0.2.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-pyhd8ed1ab_1.conda + sha256: 72fbbe8bc511f20268d347c1a06e279128237e096c4c174b2f9164a661c6b13e + md5: f8ed9f18dce81e4ee55c858cc2f8548a + depends: + - python >=2.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipython-genutils?source=hash-mapping + size: 28064 + timestamp: 1716278507729 +- kind: conda + name: ipywidgets + version: 8.1.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_0.conda + sha256: ae27447f300c85a184d5d4fa08674eaa93931c12275daca981eb986f5d7795b3 + md5: a022d34163147d16b27de86dc53e93fc + depends: + - comm >=0.1.3 + - ipython >=6.1.0 + - jupyterlab_widgets >=3.0.13,<3.1.0 + - python >=3.7 + - traitlets >=4.3.1 + - widgetsnbextension >=4.0.13,<4.1.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/ipywidgets?source=hash-mapping + size: 113497 + timestamp: 1724334989324 +- kind: conda + name: isoduration + version: 20.11.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 + sha256: 7bb5c4d994361022f47a807b5e7d101b3dce16f7dd8a0af6ffad9f479d346493 + md5: 4cb68948e0b8429534380243d063a27a + depends: + - arrow >=0.15.0 + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/isoduration?source=hash-mapping + size: 17189 + timestamp: 1638811664194 +- kind: conda + name: jedi + version: 0.19.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda + sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a + md5: 81a3be0b2023e1ea8555781f0ad904a2 + depends: + - parso >=0.8.3,<0.9.0 + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jedi?source=hash-mapping + size: 841312 + timestamp: 1696326218364 +- kind: conda + name: jinja2 + version: 3.1.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d + md5: 7b86ecb7d3557821c649b3c31e3eb9f2 + depends: + - markupsafe >=2.0 + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2?source=hash-mapping + size: 111565 + timestamp: 1715127275924 +- kind: conda + name: json5 + version: 0.9.25 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda + sha256: 0c75e428970e8bb72ba1dd3a6dc32b8d68f6534b4fe16b38e53364963fdc8e38 + md5: 5d8c241a9261e720a34a07a3e1ac4109 + depends: + - python >=3.7,<4.0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/json5?source=hash-mapping + size: 27995 + timestamp: 1712986338874 +- kind: conda + name: jsonpointer + version: 3.0.0 + build: py312h7900ff3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py312h7900ff3_0.conda + sha256: b5d17c5db3c7306d3625745a27359f806a6dd94707d76d74cba541fc1daa2ae3 + md5: 320338762418ae59539ae368d4386085 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jsonpointer?source=hash-mapping + size: 17497 + timestamp: 1718283512438 +- kind: conda + name: jsonschema + version: 4.23.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + sha256: 7d0c4c0346b26be9f220682b7c5c0d84606d48c6dbc36fc238e4452dda733aff + md5: da304c192ad59975202859b367d0f6a2 + depends: + - attrs >=22.2.0 + - importlib_resources >=1.4.0 + - jsonschema-specifications >=2023.03.6 + - pkgutil-resolve-name >=1.3.10 + - python >=3.8 + - referencing >=0.28.4 + - rpds-py >=0.7.1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jsonschema?source=hash-mapping + size: 74323 + timestamp: 1720529611305 +- kind: conda + name: jsonschema-specifications + version: 2023.12.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda + sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2 + md5: a0e4efb5f35786a05af4809a2fb1f855 + depends: + - importlib_resources >=1.4.0 + - python >=3.8 + - referencing >=0.31.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jsonschema-specifications?source=hash-mapping + size: 16431 + timestamp: 1703778502971 +- kind: conda + name: jsonschema-with-format-nongpl + version: 4.23.0 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda + sha256: 007a0a506a0d1805b099629cb0ee743ad0afe7d9749e57339f32c168119e0139 + md5: 16b37612b3a2fd77f409329e213b530c + depends: + - fqdn + - idna + - isoduration + - jsonpointer >1.13 + - jsonschema >=4.23.0,<4.23.1.0a0 + - rfc3339-validator + - rfc3986-validator >0.1.0 + - uri-template + - webcolors >=24.6.0 + license: MIT + license_family: MIT + purls: [] + size: 7143 + timestamp: 1720529619500 +- kind: pypi + name: jupyter-cache + version: 1.0.0 + url: https://files.pythonhosted.org/packages/f8/2f/0bb8eacdd1102a20fecc759fb8ace695b9a1048563499a6dff8fa8da32a7/jupyter_cache-1.0.0-py3-none-any.whl + sha256: 594b1c4e29b488b36547e12477645f489dbdc62cc939b2408df5679f79245078 + requires_dist: + - attrs + - click + - importlib-metadata + - nbclient>=0.2 + - nbformat + - pyyaml + - sqlalchemy>=1.3.12,<3 + - tabulate + - click-log ; extra == 'cli' + - pre-commit>=2.12 ; extra == 'code-style' + - nbdime ; extra == 'rtd' + - ipykernel ; extra == 'rtd' + - jupytext ; extra == 'rtd' + - myst-nb ; extra == 'rtd' + - sphinx-book-theme ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - nbdime ; extra == 'testing' + - coverage ; extra == 'testing' + - ipykernel ; extra == 'testing' + - jupytext ; extra == 'testing' + - matplotlib ; extra == 'testing' + - nbformat>=5.1 ; extra == 'testing' + - numpy ; extra == 'testing' + - pandas ; extra == 'testing' + - pytest>=6,<8 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + - sympy ; extra == 'testing' + requires_python: '>=3.9' +- kind: conda + name: jupyter-lsp + version: 2.2.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + sha256: 2151c2c63e0442a4c69ee0ad8a634195eedab10b7b74c0ec8266471842239a93 + md5: 885867f6adab3d7ecdf8ab6ca0785f51 + depends: + - importlib-metadata >=4.8.3 + - jupyter_server >=1.1.2 + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-lsp?source=hash-mapping + size: 55539 + timestamp: 1712707521811 +- kind: conda + name: jupyter_client + version: 8.6.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.2-pyhd8ed1ab_0.conda + sha256: 634f065cdd1d0aacd4bb6848ebf240dcebc8578135d65f4ad4aa42b2276c4e0c + md5: 3cdbb2fa84490e5fd44c9f9806c0d292 + depends: + - importlib_metadata >=4.8.3 + - jupyter_core >=4.12,!=5.0.* + - python >=3.8 + - python-dateutil >=2.8.2 + - pyzmq >=23.0 + - tornado >=6.2 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-client?source=hash-mapping + size: 106248 + timestamp: 1716472312833 +- kind: conda + name: jupyter_core + version: 5.7.2 + build: py312h7900ff3_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.2-py312h7900ff3_0.conda + sha256: 22a6259c2b139191c76ed7633d1865757b3c15007989f6c74304a80f28e5a262 + md5: eee5a2e3465220ed87196bbb5665f420 + depends: + - platformdirs >=2.5 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-core?source=hash-mapping + size: 92843 + timestamp: 1710257533875 +- kind: conda + name: jupyter_events + version: 0.10.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + sha256: cd3f41dc093162a41d4bae171e40a1b9b115c4d488e9bb837a8fa9d084931fb9 + md5: ed45423c41b3da15ea1df39b1f80c2ca + depends: + - jsonschema-with-format-nongpl >=4.18.0 + - python >=3.8 + - python-json-logger >=2.0.4 + - pyyaml >=5.3 + - referencing + - rfc3339-validator + - rfc3986-validator >=0.1.1 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-events?source=hash-mapping + size: 21475 + timestamp: 1710805759187 +- kind: conda + name: jupyter_server + version: 2.14.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + sha256: edab71a05feceac54bdb90e755a257545af7832b9911607c1a70f09be44ba985 + md5: ca23c71f70a7c7935b3d03f0f1a5801d + depends: + - anyio >=3.1.0 + - argon2-cffi >=21.1 + - jinja2 >=3.0.3 + - jupyter_client >=7.4.4 + - jupyter_core >=4.12,!=5.0.* + - jupyter_events >=0.9.0 + - jupyter_server_terminals >=0.4.4 + - nbconvert-core >=6.4.4 + - nbformat >=5.3.0 + - overrides >=5.0 + - packaging >=22.0 + - prometheus_client >=0.9 + - python >=3.8 + - pyzmq >=24 + - send2trash >=1.8.2 + - terminado >=0.8.3 + - tornado >=6.2.0 + - traitlets >=5.6.0 + - websocket-client >=1.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-server?source=hash-mapping + size: 323978 + timestamp: 1720816754998 +- kind: conda + name: jupyter_server_terminals + version: 0.5.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda + sha256: 038efbc7e4b2e72d49ed193cfb2bbbe9fbab2459786ce9350301f466a32567db + md5: 219b3833aa8ed91d47d1be6ca03f30be + depends: + - python >=3.8 + - terminado >=0.8.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-server-terminals?source=hash-mapping + size: 19818 + timestamp: 1710262791393 +- kind: conda + name: jupyterlab + version: 4.2.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.2.5-pyhd8ed1ab_0.conda + sha256: db08036a6fd846c178ebdce7327be1130bda10ac96113c17b04bce2bc4d67dda + md5: 594762eddc55b82feac6097165a88e3c + depends: + - async-lru >=1.0.0 + - httpx >=0.25.0 + - importlib_metadata >=4.8.3 + - importlib_resources >=1.4 + - ipykernel >=6.5.0 + - jinja2 >=3.0.3 + - jupyter-lsp >=2.0.0 + - jupyter_core + - jupyter_server >=2.4.0,<3 + - jupyterlab_server >=2.27.1,<3 + - notebook-shim >=0.2 + - packaging + - python >=3.8 + - setuptools >=40.1.0 + - tomli >=1.2.2 + - tornado >=6.2.0 + - traitlets + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab?source=hash-mapping + size: 7361961 + timestamp: 1724745262468 +- kind: conda + name: jupyterlab-myst + version: 2.4.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-myst-2.4.2-pyhd8ed1ab_0.conda + sha256: c8847c58de52c4daba94da9d2c6de067fee2a09aa1c3df2dd5a45360a0f4b533 + md5: cc481204ea9c53cda7ac187efa0268a1 + depends: + - jupyter_server >=2.0.1,<3 + - python >=3.8 + constrains: + - jupyterlab >=4,<5 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab-myst?source=hash-mapping + size: 2127008 + timestamp: 1714146125212 +- kind: conda + name: jupyterlab_pygments + version: 0.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda + sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242 + md5: afcd1b53bcac8844540358e33f33d28f + depends: + - pygments >=2.4.1,<3 + - python >=3.7 + constrains: + - jupyterlab >=4.0.8,<5.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab-pygments?source=hash-mapping + size: 18776 + timestamp: 1707149279640 +- kind: conda + name: jupyterlab_server + version: 2.27.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + sha256: a23b26d1a35bccdb91b9232119e5f402624e1e1a252b0e64cc20c6eb5b87cefb + md5: af8239bf1ba7e8c69b689f780f653488 + depends: + - babel >=2.10 + - importlib-metadata >=4.8.3 + - jinja2 >=3.0.3 + - json5 >=0.9.0 + - jsonschema >=4.18 + - jupyter_server >=1.21,<3 + - packaging >=21.3 + - python >=3.8 + - requests >=2.31 + constrains: + - openapi-core >=0.18.0,<0.19.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab-server?source=hash-mapping + size: 49355 + timestamp: 1721163412436 +- kind: conda + name: jupyterlab_widgets + version: 3.0.13 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda + sha256: 0e7ec7936d766f39d5a0a8eafc63f5543f488883ad3645246bc22db6d632566e + md5: ccea946e6dce9f330fbf7fca97fe8de7 + depends: + - python >=3.7 + constrains: + - jupyterlab >=3,<5 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlab-widgets?source=hash-mapping + size: 186024 + timestamp: 1724331451102 +- kind: conda + name: jupyterlite-core + version: 0.4.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlite-core-0.4.0-pyhd8ed1ab_0.conda + sha256: 44e4573b400d7878a7024c9cbc44d69e3f81213c852fc199f5583d75bb7a6d53 + md5: e09094b79d89cc43b460f10c4eb06fbb + depends: + - doit >=0.34,<1 + - importlib-metadata >=3.6 + - jupyter_core >=4.7 + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlite-core?source=hash-mapping + size: 19832102 + timestamp: 1721913237426 +- kind: conda + name: jupyterlite-pyodide-kernel + version: 0.4.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlite-pyodide-kernel-0.4.1-pyhd8ed1ab_0.conda + sha256: d6f10905c110371b269273b92472f3204514a52c6396d6b3be838b2ea1a36928 + md5: 8112a28ca5c45fa5476e0196e6f68353 + depends: + - jupyterlite-core >=0.4.0,<0.5.0 + - pkginfo + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyterlite-pyodide-kernel?source=hash-mapping + size: 228553 + timestamp: 1722353421587 +- kind: pypi + name: jupytext + version: 1.16.4 + url: https://files.pythonhosted.org/packages/90/a3/285eb1e79dbbd8e9513a3bb1bb2bb3d4c7c22c8a92efb8449baface0b864/jupytext-1.16.4-py3-none-any.whl + sha256: 76989d2690e65667ea6fb411d8056abe7cd0437c07bd774660b83d62acf9490a + requires_dist: + - markdown-it-py>=1.0 + - mdit-py-plugins + - nbformat + - packaging + - pyyaml + - tomli ; python_version < '3.11' + - autopep8 ; extra == 'dev' + - black ; extra == 'dev' + - flake8 ; extra == 'dev' + - gitpython ; extra == 'dev' + - ipykernel ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-fs>=1.0 ; extra == 'dev' + - jupyter-server!=2.11 ; extra == 'dev' + - nbconvert ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov>=2.6.1 ; extra == 'dev' + - pytest-randomly ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - sphinx-gallery<0.8 ; extra == 'dev' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - pytest ; extra == 'test' + - pytest-randomly ; extra == 'test' + - pytest-xdist ; extra == 'test' + - ipykernel ; extra == 'test-cov' + - jupyter-server!=2.11 ; extra == 'test-cov' + - nbconvert ; extra == 'test-cov' + - pytest ; extra == 'test-cov' + - pytest-cov>=2.6.1 ; extra == 'test-cov' + - pytest-randomly ; extra == 'test-cov' + - pytest-xdist ; extra == 'test-cov' + - autopep8 ; extra == 'test-external' + - black ; extra == 'test-external' + - flake8 ; extra == 'test-external' + - gitpython ; extra == 'test-external' + - ipykernel ; extra == 'test-external' + - isort ; extra == 'test-external' + - jupyter-fs>=1.0 ; extra == 'test-external' + - jupyter-server!=2.11 ; extra == 'test-external' + - nbconvert ; extra == 'test-external' + - pre-commit ; extra == 'test-external' + - pytest ; extra == 'test-external' + - pytest-randomly ; extra == 'test-external' + - pytest-xdist ; extra == 'test-external' + - sphinx-gallery<0.8 ; extra == 'test-external' + - pytest ; extra == 'test-functional' + - pytest-randomly ; extra == 'test-functional' + - pytest-xdist ; extra == 'test-functional' + - ipykernel ; extra == 'test-integration' + - jupyter-server!=2.11 ; extra == 'test-integration' + - nbconvert ; extra == 'test-integration' + - pytest ; extra == 'test-integration' + - pytest-randomly ; extra == 'test-integration' + - pytest-xdist ; extra == 'test-integration' + - calysto-bash ; extra == 'test-ui' + requires_python: '>=3.8' +- kind: conda + name: keyutils + version: 1.6.1 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb + md5: 30186d27e2c9fa62b45fb1476b7200e3 + depends: + - libgcc-ng >=10.3.0 + license: LGPL-2.1-or-later + purls: [] + size: 117831 + timestamp: 1646151697040 +- kind: conda + name: kiwisolver + version: 1.4.5 + build: py312h8572e83_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py312h8572e83_1.conda + sha256: 2ffd3f6726392591c6794ab130f6701f5ffba0ec8658ef40db5a95ec8d583143 + md5: c1e71f2bc05d8e8e033aefac2c490d05 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - python >=3.12.0rc3,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 72099 + timestamp: 1695380122482 +- kind: conda + name: krb5 + version: 1.21.3 + build: h659f571_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1370023 + timestamp: 1719463201255 +- kind: conda + name: lcms2 + version: '2.16' + build: hb7c19ff_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 245247 + timestamp: 1701647787198 +- kind: conda + name: ld_impl_linux-64 + version: '2.40' + build: hf3520f5_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda + sha256: 764b6950aceaaad0c67ef925417594dd14cd2e22fff864aeef455ac259263d15 + md5: b80f2f396ca2c28b8c14c437a4ed1e74 + constrains: + - binutils_impl_linux-64 2.40 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 707602 + timestamp: 1718625640445 +- kind: conda + name: lerc + version: 4.0.0 + build: h27087fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 281798 + timestamp: 1657977462600 +- kind: conda + name: libblas + version: 3.9.0 + build: 23_linux64_openblas + build_number: 23 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-23_linux64_openblas.conda + sha256: edb1cee5da3ac4936940052dcab6969673ba3874564f90f5110f8c11eed789c2 + md5: 96c8450a40aa2b9733073a9460de972c + depends: + - libopenblas >=0.3.27,<0.3.28.0a0 + - libopenblas >=0.3.27,<1.0a0 + constrains: + - liblapacke 3.9.0 23_linux64_openblas + - libcblas 3.9.0 23_linux64_openblas + - liblapack 3.9.0 23_linux64_openblas + - blas * openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 14880 + timestamp: 1721688759937 +- kind: conda + name: libbrotlicommon + version: 1.1.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda + sha256: 40f29d1fab92c847b083739af86ad2f36d8154008cf99b64194e4705a1725d78 + md5: aec6c91c7371c26392a06708a73c70e5 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 69403 + timestamp: 1695990007212 +- kind: conda + name: libbrotlidec + version: 1.1.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda + sha256: 86fc861246fbe5ad85c1b6b3882aaffc89590a48b42d794d3d5c8e6d99e5f926 + md5: f07002e225d7a60a694d42a7bf5ff53f + depends: + - libbrotlicommon 1.1.0 hd590300_1 + - libgcc-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 32775 + timestamp: 1695990022788 +- kind: conda + name: libbrotlienc + version: 1.1.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda + sha256: f751b8b1c4754a2a8dfdc3b4040fa7818f35bbf6b10e905a47d3a194b746b071 + md5: 5fc11c6020d421960607d821310fcd4d + depends: + - libbrotlicommon 1.1.0 hd590300_1 + - libgcc-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 282523 + timestamp: 1695990038302 +- kind: conda + name: libcblas + version: 3.9.0 + build: 23_linux64_openblas + build_number: 23 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-23_linux64_openblas.conda + sha256: 3e7a3236e7e03e308e1667d91d0aa70edd0cba96b4b5563ef4adde088e0881a5 + md5: eede29b40efa878cbe5bdcb767e97310 + depends: + - libblas 3.9.0 23_linux64_openblas + constrains: + - liblapacke 3.9.0 23_linux64_openblas + - liblapack 3.9.0 23_linux64_openblas + - blas * openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 14798 + timestamp: 1721688767584 +- kind: conda + name: libdeflate + version: '1.21' + build: h4bc722e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.21-h4bc722e_0.conda + sha256: 728c24ce835700bfdfdf106bf04233fdb040a61ca4ecfd3f41b46fa90cd4f971 + md5: 36ce76665bf67f5aac36be7a0d21b7f3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 71163 + timestamp: 1722820138782 +- kind: conda + name: libedit + version: 3.1.20191231 + build: he28a2e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf + md5: 4d331e44109e3f0e19b4cb8f9b82f3e1 + depends: + - libgcc-ng >=7.5.0 + - ncurses >=6.2,<7.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 123878 + timestamp: 1597616541093 +- kind: conda + name: libexpat + version: 2.6.2 + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda + sha256: 331bb7c7c05025343ebd79f86ae612b9e1e74d2687b8f3179faec234f986ce19 + md5: e7ba12deb7020dd080c6c70e7b6f6a3d + depends: + - libgcc-ng >=12 + constrains: + - expat 2.6.2.* + license: MIT + license_family: MIT + purls: [] + size: 73730 + timestamp: 1710362120304 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libgcc + version: 14.1.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda + sha256: 10fa74b69266a2be7b96db881e18fa62cfa03082b65231e8d652e897c4b335a3 + md5: 002ef4463dd1e2b44a94a4ace468f5d2 + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.1.0 h77fa898_1 + - libgcc-ng ==14.1.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 846380 + timestamp: 1724801836552 +- kind: conda + name: libgcc-ng + version: 14.1.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda + sha256: b91f7021e14c3d5c840fbf0dc75370d6e1f7c7ff4482220940eaafb9c64613b7 + md5: 1efc0ad219877a73ef977af7dbb51f17 + depends: + - libgcc 14.1.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 52170 + timestamp: 1724801842101 +- kind: conda + name: libgcc-ng + version: 14.1.0 + build: h77fa898_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h77fa898_0.conda + sha256: b8e869ac96591cda2704bf7e77a301025e405227791a0bddf14a3dac65125538 + md5: ca0fad6a41ddaef54a153b78eccb5037 + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.1.0 h77fa898_0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 842109 + timestamp: 1719538896937 +- kind: conda + name: libgfortran + version: 14.1.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.1.0-h69a702a_1.conda + sha256: ed77f04f873e43a26e24d443dd090631eedc7d0ace3141baaefd96a123e47535 + md5: 591e631bc1ae62c64f2ab4f66178c097 + depends: + - libgfortran5 14.1.0 hc5f4f2c_1 + constrains: + - libgfortran-ng ==14.1.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 52142 + timestamp: 1724801872472 +- kind: conda + name: libgfortran-ng + version: 14.1.0 + build: h69a702a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_0.conda + sha256: ef624dacacf97b2b0af39110b36e2fd3e39e358a1a6b7b21b85c9ac22d8ffed9 + md5: f4ca84fbd6d06b0a052fb2d5b96dde41 + depends: + - libgfortran5 14.1.0 hc5f4f2c_0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 49893 + timestamp: 1719538933879 +- kind: conda + name: libgfortran-ng + version: 14.1.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_1.conda + sha256: a2dc35cb7f87bb5beebf102d4085574c6a740e1df58e743185d4434cc5e4e0ae + md5: 16cec94c5992d7f42ae3f9fa8b25df8d + depends: + - libgfortran 14.1.0 h69a702a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 52212 + timestamp: 1724802086021 +- kind: conda + name: libgfortran5 + version: 14.1.0 + build: hc5f4f2c_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_0.conda + sha256: a67d66b1e60a8a9a9e4440cee627c959acb4810cb182e089a4b0729bfdfbdf90 + md5: 6456c2620c990cd8dde2428a27ba0bc5 + depends: + - libgcc-ng >=14.1.0 + constrains: + - libgfortran-ng 14.1.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1457561 + timestamp: 1719538909168 +- kind: conda + name: libgfortran5 + version: 14.1.0 + build: hc5f4f2c_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda + sha256: c40d7db760296bf9c776de12597d2f379f30e890b9ae70c1de962ff2aa1999f6 + md5: 10a0cef64b784d6ab6da50ebca4e984d + depends: + - libgcc >=14.1.0 + constrains: + - libgfortran 14.1.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1459939 + timestamp: 1724801851300 +- kind: conda + name: libgomp + version: 14.1.0 + build: h77fa898_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_0.conda + sha256: 7699df61a1f6c644b3576a40f54791561f2845983120477a16116b951c9cdb05 + md5: ae061a5ed5f05818acdf9adab72c146d + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 456925 + timestamp: 1719538796073 +- kind: conda + name: libgomp + version: 14.1.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda + sha256: c96724c8ae4ee61af7674c5d9e5a3fbcf6cd887a40ad5a52c99aa36f1d4f9680 + md5: 23c255b008c4f2ae008f81edcabaca89 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 460218 + timestamp: 1724801743478 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 618575 + timestamp: 1694474974816 +- kind: conda + name: liblapack + version: 3.9.0 + build: 23_linux64_openblas + build_number: 23 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-23_linux64_openblas.conda + sha256: 25c7aef86c8a1d9db0e8ee61aa7462ba3b46b482027a65d66eb83e3e6f949043 + md5: 2af0879961951987e464722fd00ec1e0 + depends: + - libblas 3.9.0 23_linux64_openblas + constrains: + - liblapacke 3.9.0 23_linux64_openblas + - libcblas 3.9.0 23_linux64_openblas + - blas * openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 14823 + timestamp: 1721688775172 +- kind: conda + name: libnsl + version: 2.0.1 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + license_family: GPL + purls: [] + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libopenblas + version: 0.3.27 + build: pthreads_hac2b453_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda + sha256: 714cb82d7c4620ea2635a92d3df263ab841676c9b183d0c01992767bb2451c39 + md5: ae05ece66d3924ac3d48b4aa3fa96cec + depends: + - libgcc-ng >=12 + - libgfortran-ng + - libgfortran5 >=12.3.0 + constrains: + - openblas >=0.3.27,<0.3.28.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5563053 + timestamp: 1720426334043 +- kind: conda + name: libpng + version: 1.6.43 + build: h2797004_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda + sha256: 502f6ff148ac2777cc55ae4ade01a8fc3543b4ffab25c4e0eaa15f94e90dd997 + md5: 009981dd9cfcaa4dbfa25ffaed86bcae + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: zlib-acknowledgement + purls: [] + size: 288221 + timestamp: 1708780443939 +- kind: conda + name: libsodium + version: 1.0.18 + build: h36c2ea0_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2 + sha256: 53da0c8b79659df7b53eebdb80783503ce72fb4b10ed6e9e05cc0e9e4207a130 + md5: c3788462a6fbddafdb413a9f9053e58d + depends: + - libgcc-ng >=7.5.0 + license: ISC + purls: [] + size: 374999 + timestamp: 1605135674116 +- kind: conda + name: libsqlite + version: 3.46.0 + build: hde9e2c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda + sha256: daee3f68786231dad457d0dfde3f7f1f9a7f2018adabdbb864226775101341a8 + md5: 18aa975d2094c34aef978060ae7da7d8 + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0a0 + license: Unlicense + purls: [] + size: 865346 + timestamp: 1718050628718 +- kind: conda + name: libstdcxx + version: 14.1.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.1.0-hc0a3c3a_1.conda + sha256: 44decb3d23abacf1c6dd59f3c152a7101b7ca565b4ef8872804ceaedcc53a9cd + md5: 9dbb9699ea467983ba8a4ba89b08b066 + depends: + - libgcc 14.1.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3892781 + timestamp: 1724801863728 +- kind: conda + name: libstdcxx-ng + version: 14.1.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-h4852527_1.conda + sha256: a2dc44f97290740cc187bfe94ce543e6eb3c2ea8964d99f189a1d8c97b419b8c + md5: bd2598399a70bb86d8218e95548d735e + depends: + - libstdcxx 14.1.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 52219 + timestamp: 1724801897766 +- kind: conda + name: libstdcxx-ng + version: 14.1.0 + build: hc0a3c3a_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-hc0a3c3a_0.conda + sha256: 88c42b388202ffe16adaa337e36cf5022c63cf09b0405cf06fc6aeacccbe6146 + md5: 1cb187a157136398ddbaae90713e2498 + depends: + - libgcc-ng 14.1.0 h77fa898_0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3881307 + timestamp: 1719538923443 +- kind: conda + name: libtiff + version: 4.6.0 + build: h46a8edc_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h46a8edc_4.conda + sha256: 8d42dd7c6602187d4351fc3b69ff526f1c262bfcbfd6ce05d06008f4e0b99b58 + md5: a7e3a62981350e232e0e7345b5aea580 + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.21,<1.22.0a0 + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx-ng >=12 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 282236 + timestamp: 1722871642189 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 438953 + timestamp: 1713199854503 +- kind: conda + name: libxcb + version: '1.16' + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.16-hb9d3cd8_1.conda + sha256: 33aa5fc997468b07ab3020b142eacc5479e4e2c2169f467b20ab220f33dd08de + md5: 3601598f0db0470af28985e3e7ad0158 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 395570 + timestamp: 1724419104778 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: h4ab18f5_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + sha256: adf6096f98b537a11ae3729eaa642b0811478f0ea0402ca67b5108fe2cb0010d + md5: 57d7dc60e9325e3de37ff8dffd18e814 + depends: + - libgcc-ng >=12 + constrains: + - zlib 1.3.1 *_1 + license: Zlib + license_family: Other + purls: [] + size: 61574 + timestamp: 1716874187109 +- kind: pypi + name: markdown-it-py + version: 3.0.0 + url: https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl + sha256: 355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 + requires_dist: + - mdurl~=0.1 + - psutil ; extra == 'benchmarking' + - pytest ; extra == 'benchmarking' + - pytest-benchmark ; extra == 'benchmarking' + - pre-commit~=3.0 ; extra == 'code-style' + - commonmark~=0.9 ; extra == 'compare' + - markdown~=3.4 ; extra == 'compare' + - mistletoe~=1.0 ; extra == 'compare' + - mistune~=2.0 ; extra == 'compare' + - panflute~=2.3 ; extra == 'compare' + - linkify-it-py>=1,<3 ; extra == 'linkify' + - mdit-py-plugins ; extra == 'plugins' + - gprof2dot ; extra == 'profiling' + - mdit-py-plugins ; extra == 'rtd' + - myst-parser ; extra == 'rtd' + - pyyaml ; extra == 'rtd' + - sphinx ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinx-design ; extra == 'rtd' + - sphinx-book-theme ; extra == 'rtd' + - jupyter-sphinx ; extra == 'rtd' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + requires_python: '>=3.8' +- kind: conda + name: markupsafe + version: 2.1.5 + build: py312h98912ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py312h98912ed_0.conda + sha256: 273d8efd6c089c534ccbede566394c0ac1e265bfe5d89fe76e80332f3d75a636 + md5: 6ff0b9582da2d4a74a1f9ae1f9ce2af6 + depends: + - libgcc-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 26685 + timestamp: 1706900070330 +- kind: conda + name: matplotlib-base + version: 3.9.2 + build: py312h854627b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py312h854627b_0.conda + sha256: ae075b97ce43439a7a914bf478564927a3dfe00724fb69555947cc3bae737a11 + md5: a57b0ae7c0aac603839a4e83a3e997d6 + depends: + - __glibc >=2.17,<3.0.a0 + - certifi >=2020.06.20 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype >=2.12.1,<3.0a0 + - kiwisolver >=1.3.1 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - numpy >=1.19,<3 + - numpy >=1.23 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.7 + - python_abi 3.12.* *_cp312 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + size: 7904910 + timestamp: 1723759675614 +- kind: conda + name: matplotlib-inline + version: 0.1.7 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab + md5: 779345c95648be40d22aaa89de7d4254 + depends: + - python >=3.6 + - traitlets + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/matplotlib-inline?source=hash-mapping + size: 14599 + timestamp: 1713250613726 +- kind: pypi + name: mdit-py-plugins + version: 0.4.1 + url: https://files.pythonhosted.org/packages/ef/f7/8a4dcea720a581e69ac8c5a38524baf0e3e2bb5f3819a9ff661464fe7d10/mdit_py_plugins-0.4.1-py3-none-any.whl + sha256: 1020dfe4e6bfc2c79fb49ae4e3f5b297f5ccd20f010187acc52af2921e27dc6a + requires_dist: + - markdown-it-py>=1.0.0,<4.0.0 + - pre-commit ; extra == 'code-style' + - myst-parser ; extra == 'rtd' + - sphinx-book-theme ; extra == 'rtd' + - coverage ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: mdurl + version: 0.1.2 + url: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl + sha256: 84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 + requires_python: '>=3.7' +- kind: conda + name: mistune + version: 3.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda + sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c + md5: 5cbee699846772cc939bef23a0d524ed + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mistune?source=hash-mapping + size: 66022 + timestamp: 1698947249750 +- kind: conda + name: munkres + version: 1.1.4 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + sha256: f86fb22b58e93d04b6f25e0d811b56797689d598788b59dcb47f59045b568306 + md5: 2ba8498c1018c1e9c61eb99b973dfe19 + depends: + - python + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/munkres?source=hash-mapping + size: 12452 + timestamp: 1600387789153 +- kind: pypi + name: myst-nb + version: 1.1.1 + url: https://files.pythonhosted.org/packages/af/42/814f84c78fa45cbd03fea27b10f4edf303ccf3890e377d3cda6d7ec729c3/myst_nb-1.1.1-py3-none-any.whl + sha256: 8b8f9085287d948eef46cb3764aafc21915e0e981882b8c742719f5b1a84c36f + requires_dist: + - importlib-metadata + - ipython + - jupyter-cache>=0.5 + - nbclient + - myst-parser>=1.0.0 + - nbformat>=5.0 + - pyyaml + - sphinx>=5 + - typing-extensions + - ipykernel + - pre-commit ; extra == 'code-style' + - alabaster ; extra == 'rtd' + - altair ; extra == 'rtd' + - bokeh ; extra == 'rtd' + - coconut>=1.4.3,<3.1.0 ; extra == 'rtd' + - ipykernel>=5.5,<7.0 ; extra == 'rtd' + - ipywidgets ; extra == 'rtd' + - jupytext>=1.11.2,<1.16.0 ; extra == 'rtd' + - matplotlib ; extra == 'rtd' + - numpy ; extra == 'rtd' + - pandas ; extra == 'rtd' + - plotly ; extra == 'rtd' + - sphinx-book-theme>=0.3 ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinx-design~=0.4.0 ; extra == 'rtd' + - sphinxcontrib-bibtex ; extra == 'rtd' + - sympy ; extra == 'rtd' + - coverage>=6.4,<8.0 ; extra == 'testing' + - beautifulsoup4 ; extra == 'testing' + - ipykernel>=5.5,<7.0 ; extra == 'testing' + - ipython!=8.1.0,<8.17 ; extra == 'testing' + - ipywidgets>=8 ; extra == 'testing' + - jupytext>=1.11.2,<1.16.0 ; extra == 'testing' + - matplotlib==3.7.* ; extra == 'testing' + - nbdime ; extra == 'testing' + - numpy ; extra == 'testing' + - pandas==1.5.* ; extra == 'testing' + - pyarrow ; extra == 'testing' + - pytest~=7.1 ; extra == 'testing' + - pytest-cov>=3,<5 ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + - pytest-param-files~=0.3.3 ; extra == 'testing' + - sympy>=1.10.1 ; extra == 'testing' + requires_python: '>=3.9' +- kind: pypi + name: myst-parser + version: 4.0.0 + url: https://files.pythonhosted.org/packages/ca/b4/b036f8fdb667587bb37df29dc6644681dd78b7a2a6321a34684b79412b28/myst_parser-4.0.0-py3-none-any.whl + sha256: b9317997552424448c6096c2558872fdb6f81d3ecb3a40ce84a7518798f3f28d + requires_dist: + - docutils>=0.19,<0.22 + - jinja2 + - markdown-it-py~=3.0 + - mdit-py-plugins~=0.4,>=0.4.1 + - pyyaml + - sphinx>=7,<9 + - pre-commit~=3.0 ; extra == 'code-style' + - linkify-it-py~=2.0 ; extra == 'linkify' + - sphinx>=7 ; extra == 'rtd' + - ipython ; extra == 'rtd' + - sphinx-book-theme~=1.1 ; extra == 'rtd' + - sphinx-design ; extra == 'rtd' + - sphinx-copybutton ; extra == 'rtd' + - sphinxext-rediraffe~=0.2.7 ; extra == 'rtd' + - sphinxext-opengraph~=0.9.0 ; extra == 'rtd' + - sphinx-pyscript ; extra == 'rtd' + - sphinx-tippy>=0.4.3 ; extra == 'rtd' + - sphinx-autodoc2~=0.5.0 ; extra == 'rtd' + - sphinx-togglebutton ; extra == 'rtd' + - beautifulsoup4 ; extra == 'testing' + - coverage[toml] ; extra == 'testing' + - defusedxml ; extra == 'testing' + - pytest>=8,<9 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-regressions ; extra == 'testing' + - pytest-param-files~=0.6.0 ; extra == 'testing' + - sphinx-pytest ; extra == 'testing' + - pygments ; extra == 'testing-docutils' + - pytest>=8,<9 ; extra == 'testing-docutils' + - pytest-param-files~=0.6.0 ; extra == 'testing-docutils' + requires_python: '>=3.10' +- kind: conda + name: nbclient + version: 0.10.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda + sha256: 589d72d36d61a23b39d6fff2c488f93e29e20de4fc6f5d315b5f2c16e81028bf + md5: 15b51397e0fe8ea7d7da60d83eb76ebc + depends: + - jupyter_client >=6.1.12 + - jupyter_core >=4.12,!=5.0.* + - nbformat >=5.1 + - python >=3.8 + - traitlets >=5.4 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbclient?source=hash-mapping + size: 27851 + timestamp: 1710317767117 +- kind: conda + name: nbconvert-core + version: 7.16.4 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + sha256: 074d858c5808e0a832acc0da37cd70de1565e8d6e17a62d5a11b3902b5e78319 + md5: e2d2abb421c13456a9a9f80272fdf543 + depends: + - beautifulsoup4 + - bleach + - defusedxml + - entrypoints >=0.2.2 + - jinja2 >=3.0 + - jupyter_core >=4.7 + - jupyterlab_pygments + - markupsafe >=2.0 + - mistune >=2.0.3,<4 + - nbclient >=0.5.0 + - nbformat >=5.1 + - packaging + - pandocfilters >=1.4.1 + - pygments >=2.4.1 + - python >=3.8 + - tinycss2 + - traitlets >=5.0 + constrains: + - nbconvert =7.16.4=*_1 + - pandoc >=2.9.2,<4.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbconvert?source=hash-mapping + size: 189599 + timestamp: 1718135529468 +- kind: conda + name: nbformat + version: 5.10.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda + sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c + md5: 0b57b5368ab7fc7cdc9e3511fa867214 + depends: + - jsonschema >=2.6 + - jupyter_core >=4.12,!=5.0.* + - python >=3.8 + - python-fastjsonschema >=2.15 + - traitlets >=5.1 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/nbformat?source=hash-mapping + size: 101232 + timestamp: 1712239122969 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + purls: [] + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nest-asyncio + version: 1.6.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a + md5: 6598c056f64dc8800d40add25e4e2c34 + depends: + - python >=3.5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/nest-asyncio?source=hash-mapping + size: 11638 + timestamp: 1705850780510 +- kind: conda + name: notebook + version: 7.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/notebook-7.2.2-pyhd8ed1ab_0.conda + sha256: 613242d5151a4d70438bb2d65041c509e4376b7e18c06c3795c52a18176e41dc + md5: c4d5a58f43ce9ffa430e6ecad6c30a42 + depends: + - jupyter_server >=2.4.0,<3 + - jupyterlab >=4.2.0,<4.3 + - jupyterlab_server >=2.27.1,<3 + - notebook-shim >=0.2,<0.3 + - python >=3.8 + - tornado >=6.2.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/notebook?source=hash-mapping + size: 3904930 + timestamp: 1724861465900 +- kind: conda + name: notebook-shim + version: 0.2.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda + sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230 + md5: 3d85618e2c97ab896b5b5e298d32b5b3 + depends: + - jupyter_server >=1.8,<3 + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/notebook-shim?source=hash-mapping + size: 16880 + timestamp: 1707957948029 +- kind: conda + name: numpy + version: 2.1.0 + build: py312h1103770_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.0-py312h1103770_0.conda + sha256: 3b6412f5d6682a43e62d686e99e9a160d6395b89b4776cd5bced197032acb41a + md5: 9709027e8a51a3476db65a3c0cf806c2 + depends: + - __glibc >=2.17,<3.0.a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8365718 + timestamp: 1724035279557 +- kind: conda + name: openjpeg + version: 2.5.2 + build: h488ebb8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2 + md5: 7f2e286780f072ed750df46dc2631138 + depends: + - libgcc-ng >=12 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libtiff >=4.6.0,<4.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 341592 + timestamp: 1709159244431 +- kind: conda + name: openssl + version: 3.3.1 + build: hb9d3cd8_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-hb9d3cd8_3.conda + sha256: 9e27441b273a7cf9071f6e88ba9ad565d926d8083b154c64a74b99fba167b137 + md5: 6c566a46baae794daf34775d41eb180a + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc-ng >=13 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2892042 + timestamp: 1724402701933 +- kind: conda + name: overrides + version: 7.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + sha256: 5e238e5e646414d517a13f6786c7227206ace58271e3ef63f6adca4d6a4c2839 + md5: 24fba5a9d161ad8103d4e84c0e1a3ed4 + depends: + - python >=3.6 + - typing_utils + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/overrides?source=hash-mapping + size: 30232 + timestamp: 1706394723472 +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: pandocfilters + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f + md5: 457c2c8c08e54905d6954e79cb5b5db9 + depends: + - python !=3.0,!=3.1,!=3.2,!=3.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pandocfilters?source=hash-mapping + size: 11627 + timestamp: 1631603397334 +- kind: conda + name: parso + version: 0.8.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae + md5: 81534b420deb77da8833f2289b8d47ac + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/parso?source=hash-mapping + size: 75191 + timestamp: 1712320447201 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pickleshare + version: 0.7.5 + build: py_1003 + build_number: 1003 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 + md5: 415f0ebb6198cc2801c73438a9fb5761 + depends: + - python >=3 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pickleshare?source=hash-mapping + size: 9332 + timestamp: 1602536313357 +- kind: conda + name: pillow + version: 10.4.0 + build: py312h287a98d_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.4.0-py312h287a98d_0.conda + sha256: f3bca9472702f32bf85196efbf013e9dabe130776e76c7f81062f18682f33a05 + md5: 59ea71eed98aee0bebbbdd3b118167c7 + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.7.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.16,<1.17.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.2,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 42068301 + timestamp: 1719903698022 +- kind: conda + name: pkginfo + version: 1.11.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.11.1-pyhd8ed1ab_0.conda + sha256: 8eb347932cd42fffe9370e82a31cfbabc40b2149c2b049cf087d4a78f5b3b53c + md5: 6a3e4fb1396215d0d88b3cc2f09de412 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pkginfo?source=hash-mapping + size: 29692 + timestamp: 1717941209022 +- kind: conda + name: pkgutil-resolve-name + version: 1.3.10 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a + md5: 405678b942f2481cecdb3e010f4925d9 + depends: + - python >=3.6 + license: MIT AND PSF-2.0 + purls: + - pkg:pypi/pkgutil-resolve-name?source=hash-mapping + size: 10778 + timestamp: 1694617398467 +- kind: conda + name: platformdirs + version: 4.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.2-pyhd8ed1ab_0.conda + sha256: adc59384cf0b2fc6dc7362840151e8cb076349197a38f7230278252698a88442 + md5: 6f6cf28bf8e021933869bae3f84b8fc9 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20572 + timestamp: 1715777739019 +- kind: conda + name: prometheus_client + version: 0.20.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.20.0-pyhd8ed1ab_0.conda + sha256: 757cd91d01c2e0b64fadf6bc9a11f558cf7638d897dfbaf7415ddf324d5405c9 + md5: 9a19b94034dd3abb2b348c8b93388035 + depends: + - python >=3.8 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/prometheus-client?source=hash-mapping + size: 48913 + timestamp: 1707932844383 +- kind: conda + name: prompt-toolkit + version: 3.0.47 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda + sha256: d93ac5853e398aaa10f0dd7addd64b411f94ace1f9104d619cd250e19a5ac5b4 + md5: 1247c861065d227781231950e14fe817 + depends: + - python >=3.7 + - wcwidth + constrains: + - prompt_toolkit 3.0.47 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/prompt-toolkit?source=hash-mapping + size: 270710 + timestamp: 1718048095491 +- kind: conda + name: psutil + version: 6.0.0 + build: py312h9a8786e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.0.0-py312h9a8786e_0.conda + sha256: d629363515df957507411fd24db2a0635ac893e5d60b2ee2f656b53be9c70b1d + md5: 1aeffa86c55972ca4e88ac843eccedf2 + depends: + - libgcc-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 493452 + timestamp: 1719274737481 +- kind: conda + name: pthread-stubs + version: '0.4' + build: h36c2ea0_1001 + build_number: 1001 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 + sha256: 67c84822f87b641d89df09758da498b2d4558d47b920fd1d3fe6d3a871e000ff + md5: 22dad4df6e8630e8dff2428f6f6a7036 + depends: + - libgcc-ng >=7.5.0 + license: MIT + license_family: MIT + purls: [] + size: 5625 + timestamp: 1606147468727 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: pure_eval + version: 0.2.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + sha256: dcfcb3cee1ae0a89729601582cc3edea20ba13c9493967a03a693c67567af0c8 + md5: 0f051f09d992e0d08941706ad519ee0e + depends: + - python >=3.5 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pure-eval?source=hash-mapping + size: 16551 + timestamp: 1721585805256 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 105098 + timestamp: 1711811634025 +- kind: conda + name: pydata-sphinx-theme + version: 0.15.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda + sha256: 5ec877142ded763061e114e787a4e201c2fb3f0b1db2f04ace610a1187bb34ae + md5: c7c50dd5192caa58a05e6a4248a27acb + depends: + - accessible-pygments + - babel + - beautifulsoup4 + - docutils !=0.17.0 + - packaging + - pygments >=2.7 + - python >=3.9 + - sphinx >=5.0 + - typing_extensions + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pydata-sphinx-theme?source=hash-mapping + size: 1393462 + timestamp: 1719344980505 +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 879295 + timestamp: 1714846885370 +- kind: conda + name: pyparsing + version: 3.1.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.4-pyhd8ed1ab_0.conda + sha256: 8714a83f1aeac278b3eb33c7cb880c95c9a5924e7a5feeb9e87e7d0837afa085 + md5: 4d91352a50949d049cf9714c8563d433 + depends: + - python >=3.6 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyparsing?source=hash-mapping + size: 90129 + timestamp: 1724616224956 +- kind: conda + name: pysocks + version: 1.7.1 + build: pyha2e5f31_6 + build_number: 6 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b + md5: 2a7de29fb590ca14b5243c4c812c8025 + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping + size: 18981 + timestamp: 1661604969727 +- kind: conda + name: python + version: 3.12.5 + build: h2ad013b_0_cpython + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.5-h2ad013b_0_cpython.conda + sha256: e2aad83838988725d4ffba4e9717b9328054fd18a668cff3377e0c50f109e8bd + md5: 9c56c4df45f6571b13111d8df2448692 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.2,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc-ng >=12 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.0,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.1,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 31663253 + timestamp: 1723143721353 +- kind: conda + name: python-dateutil + version: 2.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 + md5: 2cf4264fffb9e6eff6031c5b6884d61c + depends: + - python >=3.7 + - six >=1.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping + size: 222742 + timestamp: 1709299922152 +- kind: conda + name: python-fastjsonschema + version: 2.20.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60 + md5: b98d2018c01ce9980c03ee2850690fab + depends: + - python >=3.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/fastjsonschema?source=hash-mapping + size: 226165 + timestamp: 1718477110630 +- kind: conda + name: python-json-logger + version: 2.0.7 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca + md5: a61bf9ec79426938ff785eb69dbb1960 + depends: + - python >=3.6 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/python-json-logger?source=hash-mapping + size: 13383 + timestamp: 1677079727691 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6238 + timestamp: 1723823388266 +- kind: conda + name: pytz + version: '2024.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 + md5: 3eeeeb9e4827ace8c0c1419c85d590ad + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytz?source=hash-mapping + size: 188538 + timestamp: 1706886944988 +- kind: conda + name: pyyaml + version: 6.0.2 + build: py312h41a817b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h41a817b_0.conda + sha256: 06a139ccc9a1472489ca5df6f7c6f44e2eb9b1c2de1142f5beec3f430ca7ae3c + md5: 1779c9cbd9006415ab7bb9e12747e9d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping + size: 205734 + timestamp: 1723018377857 +- kind: conda + name: pyzmq + version: 26.2.0 + build: py312hbf22597_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_0.conda + sha256: 906d28e08d889017cffb0847234381c51f19101d16b702f944675d2fa403c1ed + md5: 14861767c6836065ee65b45a40be2ed1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=13 + - libsodium >=1.0.18,<1.0.19.0a0 + - libstdcxx-ng >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zeromq >=4.3.5,<4.4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping + size: 378212 + timestamp: 1724399230672 +- kind: conda + name: qhull + version: '2020.2' + build: h434a139_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + md5: 353823361b1d27eb3960efb076dfcaf6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull + purls: [] + size: 552937 + timestamp: 1720813982144 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: referencing + version: 0.35.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + sha256: be8d6d9e86b1a3fef5424127ff81782f8ca63d3058980859609f6f1ecdd34cb3 + md5: 0fc8b52192a8898627c3efae1003e9f6 + depends: + - attrs >=22.2.0 + - python >=3.8 + - rpds-py >=0.7.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/referencing?source=hash-mapping + size: 42210 + timestamp: 1714619625532 +- kind: conda + name: requests + version: 2.32.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc + md5: 5ede4753180c7a550a443c430dc8ab52 + depends: + - certifi >=2017.4.17 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - python >=3.8 + - urllib3 >=1.21.1,<3 + constrains: + - chardet >=3.0.2,<6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/requests?source=hash-mapping + size: 58810 + timestamp: 1717057174842 +- kind: conda + name: rfc3339-validator + version: 0.1.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 + sha256: 7c7052b51de0b5c558f890bb11f8b5edbb9934a653d76be086b1182b9f54185d + md5: fed45fc5ea0813240707998abe49f520 + depends: + - python >=3.5 + - six + license: MIT + license_family: MIT + purls: + - pkg:pypi/rfc3339-validator?source=hash-mapping + size: 8064 + timestamp: 1638811838081 +- kind: conda + name: rfc3986-validator + version: 0.1.1 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + sha256: 2a5b495a1de0f60f24d8a74578ebc23b24aa53279b1ad583755f223097c41c37 + md5: 912a71cc01012ee38e6b90ddd561e36f + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/rfc3986-validator?source=hash-mapping + size: 7818 + timestamp: 1598024297745 +- kind: conda + name: rpds-py + version: 0.20.0 + build: py312hf008fa9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py312hf008fa9_0.conda + sha256: c1c797db876a3a642fd1293be3ce5428f2699cbc1e1f2f9152501e656b897c24 + md5: 0735929f1a2a89c62b91d07ef5a76645 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping + size: 336290 + timestamp: 1723039277393 +- kind: conda + name: send2trash + version: 1.8.3 + build: pyh0d859eb_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda + sha256: c4401b071e86ddfa0ea4f34b85308db2516b6aeca50053535996864cfdee7b3f + md5: 778594b20097b5a948c59e50ae42482a + depends: + - __linux + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/send2trash?source=hash-mapping + size: 22868 + timestamp: 1712585140895 +- kind: conda + name: setuptools + version: 72.2.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.2.0-pyhd8ed1ab_0.conda + sha256: 0252f6570de8ff29d489958fc7826677a518061b1aa5e1828a427eec8a7928a4 + md5: 1462aa8b243aad09ef5d0841c745eb89 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 1459799 + timestamp: 1724163617860 +- kind: conda + name: six + version: 1.16.0 + build: pyh6c4a22f_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 + md5: e5f25f8dbc060e9a8d912e432202afc2 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping + size: 14259 + timestamp: 1620240338595 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15064 + timestamp: 1708953086199 +- kind: conda + name: snowballstemmer + version: 2.2.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + sha256: a0fd916633252d99efb6223b1050202841fa8d2d53dacca564b0ed77249d3228 + md5: 4d22a9315e78c6827f806065957d566e + depends: + - python >=2 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/snowballstemmer?source=hash-mapping + size: 58824 + timestamp: 1637143137377 +- kind: conda + name: soupsieve + version: '2.5' + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c + md5: 3f144b2c34f8cb5a9abd9ed23a39c561 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/soupsieve?source=hash-mapping + size: 36754 + timestamp: 1693929424267 +- kind: conda + name: sphinx + version: 8.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.0.2-pyhd8ed1ab_0.conda + sha256: e900e67d2b0f916a756d4d0d1f703339b8de6ddc1c3fb672a4f7bb234a3e4be4 + md5: 625004bdab1b171dfd1e29ebb30c40dd + depends: + - alabaster >=0.7.14 + - babel >=2.13 + - colorama >=0.4.6 + - docutils >=0.20,<0.22 + - imagesize >=1.3 + - jinja2 >=3.1 + - packaging >=23.0 + - pygments >=2.17 + - python >=3.10 + - requests >=2.30.0 + - snowballstemmer >=2.2 + - sphinxcontrib-applehelp + - sphinxcontrib-devhelp + - sphinxcontrib-htmlhelp >=2.0.0 + - sphinxcontrib-jsmath + - sphinxcontrib-qthelp + - sphinxcontrib-serializinghtml >=1.1.9 + - tomli >=2.0 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/sphinx?source=hash-mapping + size: 1391426 + timestamp: 1722330245553 +- kind: pypi + name: sphinx-copybutton + version: 0.5.2 + url: https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl + sha256: fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e + requires_dist: + - sphinx>=1.8 + - pre-commit==2.12.1 ; extra == 'code-style' + - sphinx ; extra == 'rtd' + - ipython ; extra == 'rtd' + - myst-nb ; extra == 'rtd' + - sphinx-book-theme ; extra == 'rtd' + - sphinx-examples ; extra == 'rtd' + requires_python: '>=3.7' +- kind: conda + name: sphinxcontrib-applehelp + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda + sha256: 8ac476358cf26098e3a360b2a9037bd809243f72934c103953e25f4fda4b9f31 + md5: 9075bd8c033f0257122300db914e49c9 + depends: + - python >=3.9 + - sphinx >=5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/sphinxcontrib-applehelp?source=hash-mapping + size: 29617 + timestamp: 1722244567894 +- kind: conda + name: sphinxcontrib-devhelp + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda + sha256: 6790efe55f168816dfc9c14235054d5156e5150d28546c5baf2ff4973eff8f6b + md5: b3bcc38c471ebb738854f52a36059b48 + depends: + - python >=3.9 + - sphinx >=5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/sphinxcontrib-devhelp?source=hash-mapping + size: 24138 + timestamp: 1722245127289 +- kind: conda + name: sphinxcontrib-htmlhelp + version: 2.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda + sha256: 55e14b77ed786ab6ff752b8d75f8448536f385ed250f432bd408d2eff5ea4a9e + md5: e25640d692c02e8acfff0372f547e940 + depends: + - python >=3.9 + - sphinx >=5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/sphinxcontrib-htmlhelp?source=hash-mapping + size: 32798 + timestamp: 1722248429933 +- kind: conda + name: sphinxcontrib-jsmath + version: 1.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda + sha256: d4337d83b8edba688547766fc80f1ac86d6ec86ceeeda93f376acc04079c5ce2 + md5: da1d979339e2714c30a8e806a33ec087 + depends: + - python >=3.5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/sphinxcontrib-jsmath?source=hash-mapping + size: 10431 + timestamp: 1691604844204 +- kind: conda + name: sphinxcontrib-qthelp + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda + sha256: 7ae639b729844de2ec74dbaf1acccc14843868a82fa46cd2ceb735bc8266af5b + md5: d6e5ea5fe00164ac6c2dcc5d76a42192 + depends: + - python >=3.9 + - sphinx >=5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/sphinxcontrib-qthelp?source=hash-mapping + size: 26794 + timestamp: 1722245959953 +- kind: conda + name: sphinxcontrib-serializinghtml + version: 1.1.10 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda + sha256: bf80e4c0ff97d5e8e5f6db0831ba60007e820a3a438e8f1afd868aa516d67d6f + md5: e507335cb4ca9cff4c3d0fa9cdab255e + depends: + - python >=3.9 + - sphinx >=5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/sphinxcontrib-serializinghtml?source=hash-mapping + size: 28776 + timestamp: 1705118378942 +- kind: pypi + name: sqlalchemy + version: 2.0.32 + url: https://files.pythonhosted.org/packages/9d/b8/aa822988d390cf06afa3c69d86a3a38bba79b51385207cd7cd99d0be17bb/SQLAlchemy-2.0.32-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 7d6ba0497c1d066dd004e0f02a92426ca2df20fac08728d03f67f6960271feec + requires_dist: + - typing-extensions>=4.6.0 + - greenlet!=0.4.17 ; python_version < '3.13' and (platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))) + - importlib-metadata ; python_version < '3.8' + - greenlet!=0.4.17 ; extra == 'aiomysql' + - aiomysql>=0.2.0 ; extra == 'aiomysql' + - greenlet!=0.4.17 ; extra == 'aioodbc' + - aioodbc ; extra == 'aioodbc' + - greenlet!=0.4.17 ; extra == 'aiosqlite' + - aiosqlite ; extra == 'aiosqlite' + - typing-extensions!=3.10.0.1 ; extra == 'aiosqlite' + - greenlet!=0.4.17 ; extra == 'asyncio' + - greenlet!=0.4.17 ; extra == 'asyncmy' + - asyncmy!=0.2.4,!=0.2.6,>=0.2.3 ; extra == 'asyncmy' + - mariadb!=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb-connector' + - pyodbc ; extra == 'mssql' + - pymssql ; extra == 'mssql-pymssql' + - pyodbc ; extra == 'mssql-pyodbc' + - mypy>=0.910 ; extra == 'mypy' + - mysqlclient>=1.4.0 ; extra == 'mysql' + - mysql-connector-python ; extra == 'mysql-connector' + - cx-oracle>=8 ; extra == 'oracle' + - oracledb>=1.0.1 ; extra == 'oracle-oracledb' + - psycopg2>=2.7 ; extra == 'postgresql' + - greenlet!=0.4.17 ; extra == 'postgresql-asyncpg' + - asyncpg ; extra == 'postgresql-asyncpg' + - pg8000>=1.29.1 ; extra == 'postgresql-pg8000' + - psycopg>=3.0.7 ; extra == 'postgresql-psycopg' + - psycopg2-binary ; extra == 'postgresql-psycopg2binary' + - psycopg2cffi ; extra == 'postgresql-psycopg2cffi' + - psycopg[binary]>=3.0.7 ; extra == 'postgresql-psycopgbinary' + - pymysql ; extra == 'pymysql' + - sqlcipher3-binary ; extra == 'sqlcipher' + requires_python: '>=3.7' +- kind: conda + name: stack_data + version: 0.6.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec + md5: e7df0fdd404616638df5ece6e69ba7af + depends: + - asttokens + - executing + - pure_eval + - python >=3.5 + license: MIT + license_family: MIT + purls: + - pkg:pypi/stack-data?source=hash-mapping + size: 26205 + timestamp: 1669632203115 +- kind: pypi + name: tabulate + version: 0.9.0 + url: https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl + sha256: 024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f + requires_dist: + - wcwidth ; extra == 'widechars' + requires_python: '>=3.7' +- kind: conda + name: terminado + version: 0.18.1 + build: pyh0d859eb_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda + sha256: b300557c0382478cf661ddb520263508e4b3b5871b471410450ef2846e8c352c + md5: efba281bbdae5f6b0a1d53c6d4a97c93 + depends: + - __linux + - ptyprocess + - python >=3.8 + - tornado >=6.1.0 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/terminado?source=hash-mapping + size: 22452 + timestamp: 1710262728753 +- kind: conda + name: tinycss2 + version: 1.3.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda + sha256: bc55e5899e66805589c02061e315bfc23ae6cc2f2811f5cc13fb189a5ed9d90f + md5: 8662629d9a05f9cff364e31ca106c1ac + depends: + - python >=3.5 + - webencodings >=0.4 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/tinycss2?source=hash-mapping + size: 25405 + timestamp: 1713975078735 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f + md5: 5844808ffab9ebdb694585b50ba02a96 + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 15940 + timestamp: 1644342331069 +- kind: conda + name: tornado + version: 6.4.1 + build: py312h9a8786e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py312h9a8786e_0.conda + sha256: fcf92fde5bac323921d97f8f2e66ee134ea01094f14d4e99c56f98187241c638 + md5: fd9c83fde763b494f07acee1404c280e + depends: + - libgcc-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 839315 + timestamp: 1717723013620 +- kind: conda + name: traitlets + version: 5.14.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592 + md5: 3df84416a021220d8b5700c613af2dc5 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/traitlets?source=hash-mapping + size: 110187 + timestamp: 1713535244513 +- kind: conda + name: types-python-dateutil + version: 2.9.0.20240821 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20240821-pyhd8ed1ab_0.conda + sha256: 26b5939438e31ffc9ea5c56aaea5799804186887bd0d8d639d8fad1898f07bdd + md5: a0637bb6a2428c10448807b9d87f082c + depends: + - python >=3.6 + license: Apache-2.0 AND MIT + purls: + - pkg:pypi/types-python-dateutil?source=hash-mapping + size: 21636 + timestamp: 1724221199053 +- kind: conda + name: typing-extensions + version: 4.12.2 + build: hd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73 + md5: 52d648bd608f5737b123f510bb5514b5 + depends: + - typing_extensions 4.12.2 pyha770c72_0 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 10097 + timestamp: 1717802659025 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: typing_utils + version: 0.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: 9e3758b620397f56fb709f796969de436d63b7117897159619b87938e1f78739 + md5: eb67e3cace64c66233e2d35949e20f92 + depends: + - python >=3.6.1 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/typing-utils?source=hash-mapping + size: 13829 + timestamp: 1622899345711 +- kind: conda + name: tzdata + version: 2024a + build: h0c530f3_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda + sha256: 7b2b69c54ec62a243eb6fba2391b5e443421608c3ae5dbff938ad33ca8db5122 + md5: 161081fc7cec0bfda0d86d7cb595f8d8 + license: LicenseRef-Public-Domain + purls: [] + size: 119815 + timestamp: 1706886945727 +- kind: conda + name: tzdata + version: 2024a + build: h8827d51_1 + build_number: 1 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda + sha256: 7d21c95f61319dba9209ca17d1935e6128af4235a67ee4e57a00908a1450081e + md5: 8bfdead4e0fff0383ae4c9c50d0531bd + license: LicenseRef-Public-Domain + purls: [] + size: 124164 + timestamp: 1724736371498 +- kind: conda + name: uri-template + version: 1.3.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda + sha256: b76904b53721dc88a46352324c79d2b077c2f74a9f7208ad2c4249892669ae94 + md5: 0944dc65cb4a9b5b68522c3bb585d41c + depends: + - python >=3.7 + license: MIT + license_family: MIT + purls: + - pkg:pypi/uri-template?source=hash-mapping + size: 23999 + timestamp: 1688655976471 +- kind: conda + name: urllib3 + version: 2.2.2 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.conda + sha256: 00c47c602c03137e7396f904eccede8cc64cc6bad63ce1fc355125df8882a748 + md5: e804c43f58255e977093a2298e442bb8 + depends: + - brotli-python >=1.0.9 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.8 + - zstandard >=0.18.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/urllib3?source=hash-mapping + size: 95048 + timestamp: 1719391384778 +- kind: conda + name: wcwidth + version: 0.2.13 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 + md5: 68f0738df502a14213624b288c60c9ad + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wcwidth?source=hash-mapping + size: 32709 + timestamp: 1704731373922 +- kind: conda + name: webcolors + version: 24.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda + sha256: ec71f97c332a7d328ae038990b8090cbfa772f82845b5d2233defd167b7cc5ac + md5: eb48b812eb4fbb9ff238a6651fdbbcae + depends: + - python >=3.5 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/webcolors?source=hash-mapping + size: 18378 + timestamp: 1723294800217 +- kind: conda + name: webencodings + version: 0.5.1 + build: pyhd8ed1ab_2 + build_number: 2 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda + sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 + md5: daf5160ff9cde3a468556965329085b9 + depends: + - python >=2.6 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/webencodings?source=hash-mapping + size: 15600 + timestamp: 1694681458271 +- kind: conda + name: websocket-client + version: 1.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda + sha256: 44a5e3b97feef24cd719f7851cca9af9799dc9c17d3e0298d5856baab2d682f5 + md5: f372c576b8774922da83cda2b12f9d29 + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/websocket-client?source=hash-mapping + size: 47066 + timestamp: 1713923494501 +- kind: conda + name: widgetsnbextension + version: 4.0.13 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda + sha256: d155adc10f8c96f76d4468dbe37b33b4334dadf5cd4a95841aa009ca9bced5fa + md5: 6372cd99502721bd7499f8d16b56268d + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/widgetsnbextension?source=hash-mapping + size: 898656 + timestamp: 1724331433259 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda + sha256: 309751371d525ce50af7c87811b435c176915239fc9e132b99a25d5e1703f2d4 + md5: 2c80dc38fface310c9bd81b17037fee5 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + purls: [] + size: 14468 + timestamp: 1684637984591 +- kind: conda + name: xorg-libxdmcp + version: 1.1.3 + build: h7f98852_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 + sha256: 4df7c5ee11b8686d3453e7f3f4aa20ceef441262b49860733066c52cfd0e4a77 + md5: be93aabceefa2fac576e971aef407908 + depends: + - libgcc-ng >=9.3.0 + license: MIT + license_family: MIT + purls: [] + size: 19126 + timestamp: 1610071769228 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: yaml + version: 0.2.5 + build: h7f98852_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535 + md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + purls: [] + size: 89141 + timestamp: 1641346969816 +- kind: conda + name: zeromq + version: 4.3.5 + build: h75354e8_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h75354e8_4.conda + sha256: bc9aaee39e7be107d7daff237435dfd8f791aca460a98583a36a263615205262 + md5: 03cc8d9838ad9dd0060ab532e81ccb21 + depends: + - krb5 >=1.21.2,<1.22.0a0 + - libgcc-ng >=12 + - libsodium >=1.0.18,<1.0.19.0a0 + - libstdcxx-ng >=12 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 353229 + timestamp: 1715607188837 +- kind: conda + name: zipp + version: 3.20.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.1-pyhd8ed1ab_0.conda + sha256: 30762bd25b6fc8714d5520a223ccf20ad4a6792dc439c54b59bf44b60bf51e72 + md5: 74a4befb4b38897e19a107693e49da20 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 21110 + timestamp: 1724731063145 +- kind: conda + name: zstandard + version: 0.23.0 + build: py312h3483029_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h3483029_0.conda + sha256: 7e1e105ea7eab2af591faebf743ff2493f53c313079e316419577925e4492b03 + md5: eab52e88c858d87cf5a069f79d10bb50 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping + size: 416708 + timestamp: 1721044154409 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 554846 + timestamp: 1714722996770 diff --git a/pixi.toml b/pixi.toml new file mode 100644 index 0000000..d114e72 --- /dev/null +++ b/pixi.toml @@ -0,0 +1,43 @@ +[project] +authors = ["Dan Allan "] +channels = ["conda-forge"] +description = "Add a short description here" +name = "interactive-tutorial-demo" +platforms = ["linux-64"] +version = "0.1.0" + +[tasks] +build = { cmd = [ + "sphinx-build", + "docs", # source directory + "build/html", # target directory + "-n", # warn about missing references + "-W", # any warnings fail the build + "-T", # show tracebacks + "--keep-going", # do not stop on error +] } +clean = "rm -rf build/*" + +[dependencies] +python = ">=3.12.5,<4" +matplotlib-base = ">=3.9.2,<4" +ipympl = ">=0.9.4,<0.10" +jupyterlab = ">=4.2.5,<5" +jupyterlab-myst = ">=2.4.2,<3" +pydata-sphinx-theme = ">=0.15.4,<0.16" +sphinxcontrib-serializinghtml = ">=1.1.10,<2" + +[pypi-dependencies] +sphinx = ">=8.0.2, <9" +myst-nb = ">=1.1.1, <2" +jupytext = ">=1.16.4, <2" +sphinx-copybutton = ">=0.5.2, <0.6" + +[feature.jupyterlite.dependencies] +jupyterlab = "~=4.2.4" +jupyterlite-core = "==0.4.0" +jupyterlite-pyodide-kernel = "==0.4.1" +notebook = "~=7.2.1" + +[environments] +jupyterlite = ["jupyterlite"] diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 9f3779f..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,31 +0,0 @@ -[build-system] -requires = ["setuptools>=64", "setuptools_scm[toml]>=6.2"] -build-backend = "setuptools.build_meta" - -[project] -name = "bluesky-cookbook" -dynamic = ["version"] -description = "A collection of example uses of the Bluesky data acquisition framework." -requires-python = ">=3.10" -license = { file = "LICENSE" } - -[project.urls] -GitHub = "https://github.com/bluesky/bluesky-cookbook" - - -[project.optional-dependencies] -dev = [ - "furo", - "myst_parser>=0.13", - "nox", - "pydata-sphinx-theme>=0.12", - "sphinx>=4.0", - "sphinx-copybutton", - "sphinx-autodoc-typehints", - "sphinx-tags", - "sphinx-autobuild", - "sphinx-copybutton", - "sphinx-design", - "tox", - "tox-direct", -] diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..35418d3 --- /dev/null +++ b/test.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +# Execute file as Jupyter notebook. +# Do not write anything to disk. +# If there are any uncaught exceptions, show them in stderr. +execute_file() { + local file="$1" + echo "Executing $file" >&2 + # Redirect stdout (the executed notebook document JSON) + # to /dev/null. In the event of an uncaught exception, + # the traceback will go to stderr and thus be shown + # to the caller. + jupytext --to notebook --execute $file -o - > /dev/null + local status=$? + if [ $status -ne 0 ]; then + echo "Error processing file: $file" >&2 + return $status + fi +} + +# If no arguments were provided, exit with error and show usage. +if [ $# -eq 0 ]; then + echo "Usage: $0 [filepaths...] | --all" >&2 + exit 1 +fi + +# Variable to track if any errors occur +error_occurred=0 + +# If --all is passed, locate eligible files and execute them all. +if [ "$1" == "--all" ]; then + files=$(find docs/recipes/ -name "*.md" | grep -v .ipynb_checkpoints) + for file in $files; do + if [ -f "$file" ]; then + # Extract the kernel information from the Jupytext Markdown file + kernel_info=$(grep -A 10 '^---$' "$file" | grep -E 'kernelspec') + # Skip if no kernel information was found + if [ -z "$kernel_info" ]; then + continue + fi + execute_file "$file" + if [ $? -ne 0 ]; then + error_occurred=1 + fi + else + echo "File not found: $file" >&2 + fi + done +else + # If filepaths are passed, execute them. + for file in "$@"; do + if [ -f "$file" ]; then + execute_file "$file" + if [ $? -ne 0 ]; then + error_occurred=1 + fi + else + echo "File not found: $file" >&2 + # Exit early + exit 1 + fi + done +fi + +if [ $error_occurred -ne 0 ]; then + echo "Some files executed with unexpected errors." >&2 + exit 1 +else + echo "All files executed successfully." >&2 + exit 0 +fi From 9aa5111b2fb0467e594d9b4f52d1b81c61ed3853 Mon Sep 17 00:00:00 2001 From: Dan Allan Date: Tue, 17 Sep 2024 09:55:12 -0400 Subject: [PATCH 2/2] Get headings right --- docs/contributing.md | 20 +++++++++++--------- docs/index.md | 6 +++--- docs/recipes/how-to.md | 7 +++++++ docs/recipes/tutorials.md | 7 +++++++ 4 files changed, 28 insertions(+), 12 deletions(-) create mode 100644 docs/recipes/how-to.md create mode 100644 docs/recipes/tutorials.md diff --git a/docs/contributing.md b/docs/contributing.md index 34875ba..7bc3c9d 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -28,10 +28,10 @@ git clone git@github.com:bluesky/bluesky-cookbok ## Overview -Each "recipe" is a directory under `docs/tutorials/` or `docs/how-to/`. It may -contain one or more Markdown (`.md`) files with a mixture of narrative text and -code. Each recipe directory may also contain supporting data files, scripts, -illustrations, solutions to exercises, etc. +Each "recipe" is a directory under `docs/recipes/tutorials/` or +`docs/recipes/how-to/`. It may contain one or more Markdown (`.md`) files with +a mixture of narrative text and code. Each recipe directory may also contain +supporting data files, scripts, illustrations, solutions to exercises, etc. ```none $ tree docs/ @@ -39,11 +39,13 @@ docs/ ├── conf.py ├── contributing.md ├── index.md -├── tutorials -│   ├── getting-started -│   │   ├── hello-bluesky.md -│   ├── flyscanning -│   │   ├── basic-demo.md +├── recipes +│   ├── tutorials +│   │   ├── getting-started +│   │   │   └── hello-bluesky.md +│   │   ├── flyscanning +│   │   │   └── basic-demo.md +│   ├── how-to ... ``` diff --git a/docs/index.md b/docs/index.md index 5504d3f..7291917 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,10 +1,10 @@ # Bluesky Cookbook ```{toctree} -:maxdepth: 3 +:maxdepth: 1 :glob: -recipes/tutorials/**/* -recipes/how-to/**/* +recipes/tutorials.md +recipes/how-to.md glossary contributing ``` diff --git a/docs/recipes/how-to.md b/docs/recipes/how-to.md new file mode 100644 index 0000000..8eb9abd --- /dev/null +++ b/docs/recipes/how-to.md @@ -0,0 +1,7 @@ +# How-To Guides + +```{toctree} +:maxdepth: 2 +:glob: +how-to/**/* +``` diff --git a/docs/recipes/tutorials.md b/docs/recipes/tutorials.md new file mode 100644 index 0000000..15cc312 --- /dev/null +++ b/docs/recipes/tutorials.md @@ -0,0 +1,7 @@ +# Tutorials + +```{toctree} +:maxdepth: 2 +:glob: +tutorials/**/* +```