diff --git a/.github/ISSUE_TEMPLATE/blog-post.md b/.github/ISSUE_TEMPLATE/blog-post.md deleted file mode 100644 index d1f98e3..0000000 --- a/.github/ISSUE_TEMPLATE/blog-post.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: Blog Post -about: Ask a question about or suggest a change for a blog post -title: "[BLOG]" -labels: documentation -assignees: Lnk2past - ---- - -#### Link -Provide a link to the post - -#### Question/Suggestion -Provide as much detail as you can about your question or suggestion! diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..8261a8a --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,34 @@ +name: GitHub Pages +on: [push] +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install uv + uses: astral-sh/setup-uv@v5 + - name: Set up Python + run: uv python install + - name: Install geno + run: uv sync --all-extras --dev + - name: Setup Pages + id: pages + uses: actions/configure-pages@v5 + - name: Build geno + run: | + un run geno + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: build_outputs_folder/ + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9a1ec1e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "editor.formatOnSave": true, + "editor.indentSize": 4, + "mypy-type-checker.path": [ + "./.venv/bin/mypy" + ], + "ruff.path": [ + "./.venv/bin/ruff" + ], + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + } +} \ No newline at end of file diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 897a177..0000000 --- a/Gemfile +++ /dev/null @@ -1,11 +0,0 @@ -source "https://rubygems.org" - -gem "jekyll" - -group :jekyll_plugins do - gem "jekyll-feed" - gem "jekyll-seo-tag" -end - -gem "jekyll-theme-cayman", "~> 0.1.1" -gem "kramdown-parser-gfm" diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index e8c98c5..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,80 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - colorator (1.1.0) - concurrent-ruby (1.1.9) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) - eventmachine (1.2.7) - eventmachine (1.2.7-x64-mingw32) - ffi (1.15.5) - ffi (1.15.5-x64-mingw32) - forwardable-extended (2.6.0) - http_parser.rb (0.8.0) - i18n (0.9.5) - concurrent-ruby (~> 1.0) - jekyll (3.9.1) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 0.7) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (>= 1.7, < 4) - safe_yaml (~> 1.0) - jekyll-feed (0.16.0) - jekyll (>= 3.7, < 5.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.7.1) - jekyll (>= 3.8, < 5.0) - jekyll-theme-cayman (0.1.1) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - kramdown (2.3.1) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.0) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.3.6) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (4.0.6) - rb-fsevent (0.11.0) - rb-inotify (0.10.1) - ffi (~> 1.0) - rexml (3.2.5) - rouge (3.27.0) - safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - -PLATFORMS - arm-linux - x64-mingw32 - x86_64-linux - -DEPENDENCIES - jekyll - jekyll-feed - jekyll-seo-tag - jekyll-theme-cayman (~> 0.1.1) - kramdown-parser-gfm - -BUNDLED WITH - 2.3.4 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 11ee336..0000000 --- a/_config.yml +++ /dev/null @@ -1,6 +0,0 @@ -theme: jekyll-theme-cayman -title: NESWare.io -collections: - projects: - output: true -future: true \ No newline at end of file diff --git a/_data/navigation.yml b/_data/navigation.yml deleted file mode 100644 index f67f038..0000000 --- a/_data/navigation.yml +++ /dev/null @@ -1,9 +0,0 @@ -- url: /index.html - title: Home -- url: /blog.html - title: Blog -- url: /projects.html - title: Projects -- url: /about.html - title: About - diff --git a/_includes/archive.html b/_includes/archive.html deleted file mode 100644 index a1062c5..0000000 --- a/_includes/archive.html +++ /dev/null @@ -1,12 +0,0 @@ -

Archive

-{% capture temptags %} - {% for tag in site.tags %} - {{ tag[1].size | plus: 1000 }}#{{ tag[0] }}#{{ tag[1].size }} - {% endfor %} -{% endcapture %} -{% assign sortedtemptags = temptags | split:' ' | sort | reverse %} -{% for temptag in sortedtemptags %} - {% assign tagitems = temptag | split: '#' %} - {% capture tagname %}{{ tagitems[1] }}{% endcapture %} - {{ tagname }} -{% endfor %} \ No newline at end of file diff --git a/_includes/collecttags.html b/_includes/collecttags.html deleted file mode 100644 index cf5455c..0000000 --- a/_includes/collecttags.html +++ /dev/null @@ -1,18 +0,0 @@ -{% assign rawtags = "" %} -{% for post in site.posts %} - {% assign ttags = post.tags | join:'|' | append:'|' %} - {% assign rawtags = rawtags | append:ttags %} -{% endfor %} -{% assign rawtags = rawtags | split:'|' | sort %} - -{% assign site.tags = "" %} -{% for tag in rawtags %} - {% if tag != "" %} - {% if tags == "" %} - {% assign tags = tag | split:'|' %} - {% endif %} - {% unless tags contains tag %} - {% assign tags = tags | join:'|' | append:'|' | append:tag | split:'|' %} - {% endunless %} - {% endif %} -{% endfor %} \ No newline at end of file diff --git a/_includes/navigation.html b/_includes/navigation.html deleted file mode 100644 index e384bcd..0000000 --- a/_includes/navigation.html +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 7862560..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - {% if page.image %} - - {% else %} - - {% endif %} - - - - - - {% if site.google_analytics %} - - - {% endif %} - - {% seo %} - - - - - {% if site.tags != "" %} - {% include collecttags.html %} - {% endif %} - - - -
- {{ content }} - -
- - \ No newline at end of file diff --git a/_layouts/post.html b/_layouts/post.html deleted file mode 100644 index c26bdc6..0000000 --- a/_layouts/post.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: default ---- - -

{{ page.title }}

-{% if page.subtitle %} -

{{ page.subtitle }}

-{% endif %} -

{{ page.date | date: "%m/%d/%Y" }}

-{% if page.readtime %} -

{{ page.readtime }} Minutes to Read

-{% endif %} -[ - {% for tag in page.tags %} - {% capture tag_name %}{{ tag }}{% endcapture %} - {{ tag_name }}  - {% endfor %} - ] - -{{ content }} - -
Comments/Questions?
- - - If you have any questions or comments, - - - open an issue! - - - diff --git a/_layouts/project.html b/_layouts/project.html deleted file mode 100644 index 48e5f5b..0000000 --- a/_layouts/project.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: default ---- - -

{{ page.title }}

- -{{ content }} - -
Comments/Questions?
- - - If you have any questions or comments, - - - open an issue! - - - diff --git a/_layouts/tagpage.html b/_layouts/tagpage.html deleted file mode 100644 index 80692fc..0000000 --- a/_layouts/tagpage.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: default ---- - -
-

Tag: {{ page.tag }}

- -
- -
- -{% include archive.html %} \ No newline at end of file diff --git a/_posts/2020-04-07-hello-world.md b/_posts/2020-04-07-hello-world.md deleted file mode 100644 index f386918..0000000 --- a/_posts/2020-04-07-hello-world.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: post -title: "Hello World!" -author: Lnk2past -tags: helloworld ---- - -This is my first post! - -I am learning web development from scratch; this includes Jekyll! I finally figured out how to set things up locally, so I can see what is going on before I push to GitHub... diff --git a/_projects/copperhead.md b/_projects/copperhead.md deleted file mode 100644 index 89cea54..0000000 --- a/_projects/copperhead.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: project -title: "Copperhead" -author: Lnk2past -category: software ---- - -[`copperhead`](https://github.com/Lnk2past/copperhead) is a dynamic code generator that allows C++ code blocks to be written and executed within Python. Ultimately the code is wrapped and built into a module using setuptools. copperhead is great for prototyping and "what-if" exploration. I would not necessarily recommend using it directly for production code and environments, but it is something that can aid in developing production/release grade modules and libraries. - -
- -While development is currently mostly inactive, the project is still alive! \ No newline at end of file diff --git a/_projects/euclidean-war.md b/_projects/euclidean-war.md deleted file mode 100644 index b55699f..0000000 --- a/_projects/euclidean-war.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: project -title: "Euclidean War" -author: Lnk2past -category: game ---- - -War cuts through the Geoverse as the Hedra and Quadrics fight for spatial dominance. The Hedra are rigid and wear their faces upon sharp edges and vertices. Their constructions are strong and can withstand heavy assaults. The Quadrics are elegant and smooth as they sweep through spacetime. They are agile as well as immaculately precise. The two geometries fight relentlessly, aiming to claim as much of the Geoverse as they can. - -However, new geometries have emerged that threaten both the Hedra and Quadrics alike. The Fractal are a rogue geometry that are forcefully consuming the Geoverse. They do not abide by the same axioms as the Hedra and Quadrics, and are mysteriously formidable foes. - -
- -*Euclidean War* is an open-source tabletop wargame. Geared towards new and veteran wargamers alike, *Euclidean War* provides a simple yet difficult to optimize ruleset, mathematically driven from its core. The game is meant to be accessible to all, namely by eliminating expensive barriers to entry. - -Much more to come! diff --git a/_projects/fate-erased.md b/_projects/fate-erased.md deleted file mode 100644 index 70643fc..0000000 --- a/_projects/fate-erased.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: project -title: "Fate Erased" -author: Lnk2past -category: game ---- - -In the before time *Chaos* reigned supreme. During this timeless age the *Stars* were born, and with them they brought *Order*. Randomness ceased and the *Chaos* became stagnant. Its fate had been sealed... - -On *Gaia* the story of everyone is told by the *Stars*. Every act of love, war, and otherwise are all written into fate by the *Stars* themselves. *Weavers* are gifted individuals capable of speaking with the Stars. They learn of the fate of the people of Gaia and steer the world to a better state as best they can. For millenia this is the way, until a weaver learns of a horrible tragedy to befell their love. Unaccepting of fate, the weaver swears to unwrite the history to come and rips the stars from the sky. The night sky flickers out, and chaos bursts back into existence. Fate is no more, and for the first time no one knows what is coming next. - -Fight the forces of *Chaos* and restore *Order* to the universe! - -
- -*Fate Erased* is an traditional RPG about the stars and about making hard choices. Astronomy, astrology, and cosmology drive the intricate lore of *Fate Erased*. Players are compelled to make decisions that challenge their notion of what the right action is. Much will be out of your control, but it is your goal to restore order to *Gaia*! - -Much more to come! diff --git a/about.md b/about.md deleted file mode 100644 index 5fa6f15..0000000 --- a/about.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: About -layout: default -iconsize: 64 ---- - -# About NESWare! - -I started NESWare without much of a plan for making a video game (I still plan on doing this, but it needs to be done right!), but found that it serves better as a means for me to talk about my work. Academically I am a mathematician, but professionally have been a software engineer since 2013. In my relatively short career I have had opportunities to work in various disciplines ranging from modeling and simulation to DevOps to software education. - -I love coding; I love tinkering; I love making things. Most of all, I love sharing knowledge and helping others learn. NESWare will be a means for me to do all of this. Thanks for stopping by, I hope you learned something from your visit! - ---- - -[](https://github.com/NESWare) -      -[](https://www.facebook.com/nesware/) -      -[](https://www.linkedin.com/company/nesware) -      -[](https://twitter.com/nesware) -      -[](https://www.instagram.com/nesware.io) -{: style="color:gray; font-size: 80%; text-align: center;"} \ No newline at end of file diff --git a/assets/css/headers.css b/assets/css/headers.css new file mode 100644 index 0000000..0785df6 --- /dev/null +++ b/assets/css/headers.css @@ -0,0 +1,9 @@ +h1, +h2, +h3, +h4, +h5, +h5, +h6 { + color: #159957 +} \ No newline at end of file diff --git a/assets/css/navbar.css b/assets/css/navbar.css new file mode 100644 index 0000000..989e23e --- /dev/null +++ b/assets/css/navbar.css @@ -0,0 +1,3 @@ +.navbar { + background: linear-gradient(120deg, #155799, #159957); +} \ No newline at end of file diff --git a/assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/basic.gif b/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/basic.gif similarity index 100% rename from assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/basic.gif rename to assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/basic.gif diff --git a/assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/swirl.gif b/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/swirl.gif similarity index 100% rename from assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/swirl.gif rename to assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/swirl.gif diff --git a/assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail.png b/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail.png similarity index 100% rename from assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail.png rename to assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail.png diff --git a/assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail_nologo.png b/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail_nologo.png similarity index 100% rename from assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail_nologo.png rename to assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail_nologo.png diff --git a/assets/images/facebook/f_logo_RGB-Blue_1024.png b/assets/images/facebook/f_logo_RGB-Blue_1024.png deleted file mode 100644 index 4f68be7..0000000 Binary files a/assets/images/facebook/f_logo_RGB-Blue_1024.png and /dev/null differ diff --git a/assets/images/facebook/f_logo_RGB-Blue_512.png b/assets/images/facebook/f_logo_RGB-Blue_512.png deleted file mode 100644 index 16e0bd2..0000000 Binary files a/assets/images/facebook/f_logo_RGB-Blue_512.png and /dev/null differ diff --git a/assets/images/facebook/f_logo_RGB-Blue_64.png b/assets/images/facebook/f_logo_RGB-Blue_64.png deleted file mode 100644 index a97d515..0000000 Binary files a/assets/images/facebook/f_logo_RGB-Blue_64.png and /dev/null differ diff --git a/assets/images/github/GitHub-Mark-120px-plus.png:Zone.Identifier b/assets/images/github/GitHub-Mark-120px-plus.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/assets/images/github/GitHub-Mark-32px.png:Zone.Identifier b/assets/images/github/GitHub-Mark-32px.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/assets/images/github/GitHub-Mark-64px.png:Zone.Identifier b/assets/images/github/GitHub-Mark-64px.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/assets/images/instagram/glyph-logo_May2016.png b/assets/images/instagram/glyph-logo_May2016.png deleted file mode 100644 index 185e14d..0000000 Binary files a/assets/images/instagram/glyph-logo_May2016.png and /dev/null differ diff --git a/assets/images/linkedin/LI-In-Bug.png b/assets/images/linkedin/LI-In-Bug.png deleted file mode 100644 index 8bc2d53..0000000 Binary files a/assets/images/linkedin/LI-In-Bug.png and /dev/null differ diff --git a/assets/images/linkedin/LI-Logo.png b/assets/images/linkedin/LI-Logo.png deleted file mode 100644 index 72bb8a0..0000000 Binary files a/assets/images/linkedin/LI-Logo.png and /dev/null differ diff --git a/assets/images/nesware/nesware-logo-textless-64px.ico b/assets/images/nesware/nesware-logo-textless-64px.ico new file mode 100644 index 0000000..3f226d7 Binary files /dev/null and b/assets/images/nesware/nesware-logo-textless-64px.ico differ diff --git a/assets/images/posts/2020-04-15-discord-github-classroom-pt1/01-make-app-menu.png b/assets/images/posts/2020-04-15-discord-github-classroom-pt1/01-make-app-menu.png deleted file mode 100644 index 1a6d11d..0000000 Binary files a/assets/images/posts/2020-04-15-discord-github-classroom-pt1/01-make-app-menu.png and /dev/null differ diff --git a/assets/images/posts/2020-04-15-discord-github-classroom-pt1/02-make-private-key.png b/assets/images/posts/2020-04-15-discord-github-classroom-pt1/02-make-private-key.png deleted file mode 100644 index 22a601f..0000000 Binary files a/assets/images/posts/2020-04-15-discord-github-classroom-pt1/02-make-private-key.png and /dev/null differ diff --git a/assets/images/twitter/Twitter_Logo_Blue.png b/assets/images/twitter/Twitter_Logo_Blue.png deleted file mode 100644 index b5eebc8..0000000 Binary files a/assets/images/twitter/Twitter_Logo_Blue.png and /dev/null differ diff --git a/assets/images/twitter/Twitter_Logo_WhiteOnBlue.png b/assets/images/twitter/Twitter_Logo_WhiteOnBlue.png deleted file mode 100644 index 25ba09f..0000000 Binary files a/assets/images/twitter/Twitter_Logo_WhiteOnBlue.png and /dev/null differ diff --git a/assets/images/twitter/Twitter_Logo_WhiteOnImage.png b/assets/images/twitter/Twitter_Logo_WhiteOnImage.png deleted file mode 100644 index 6d119b7..0000000 Binary files a/assets/images/twitter/Twitter_Logo_WhiteOnImage.png and /dev/null differ diff --git a/blog.md b/blog.md deleted file mode 100644 index c2367dd..0000000 --- a/blog.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Blog -layout: default ---- - -# Latest Posts - -Look around, you might, though unlikely, find something you like! - ---- - diff --git a/content/about.md b/content/about.md new file mode 100644 index 0000000..266a4ee --- /dev/null +++ b/content/about.md @@ -0,0 +1,6 @@ +title: About +---fm--- + +I started NESWare without much of a plan for making a video game (I still plan on doing this, but it needs to be done right!), but found that it serves better as a means for me to talk about my work. Academically I am a mathematician, but professionally have been a software engineer since 2013. Throughout my career I have worked mostly in defense, with some small dabbling in finance. I have experience in modeling and simulation, data engineering, data visualization, software ergonomics, and software education. + +Thanks for stopping by, I hope you learned something from your visit! Reach out on GitHub [](https://github.com/NESWare) diff --git a/_posts/2020-04-15-discord-github-classroom-pt0.md b/content/archives/discord-github-classroom-pt0.md similarity index 94% rename from _posts/2020-04-15-discord-github-classroom-pt0.md rename to content/archives/discord-github-classroom-pt0.md index 9ad9737..d7ba53b 100644 --- a/_posts/2020-04-15-discord-github-classroom-pt0.md +++ b/content/archives/discord-github-classroom-pt0.md @@ -1,13 +1,10 @@ ---- -layout: post -title: "Discord for a GitHub Classroom - Part 0" -subtitle: "Background & Motivation" -author: Lnk2past +title: Discord for a GitHub Classroom - Part 0 +date: 2020-04-15 tags: storytime software education readtime: 7 ---- +---fm--- -This post is the first (a prologue, really) in a series documenting my journey as an educator and the development of a Discord Bot that I plan on using to manage a classroom. Specifically, this post details the motivation behind what I have been working on and how I arrived to where I am now in 2020. There is nothing technical here, so feel free to give this one a hard pass if that is what you are looking for. +This post is the first (a prologue, really) in a series documenting my journey as an educator and the development of a Discord Bot that I plan on using to manage a classroom. Specifically, this post details the motivation behind what I have been working on and how I arrived to where I am now in 2020. There is nothing technical here, so feel free to give this one a hard pass if that is what you are looking for. #### Other Articles in this Series diff --git a/_posts/2020-04-26-discord-github-classroom-pt1.md b/content/archives/discord-github-classroom-pt1.md similarity index 96% rename from _posts/2020-04-26-discord-github-classroom-pt1.md rename to content/archives/discord-github-classroom-pt1.md index a7b4fae..ae96bac 100644 --- a/_posts/2020-04-26-discord-github-classroom-pt1.md +++ b/content/archives/discord-github-classroom-pt1.md @@ -1,13 +1,10 @@ ---- -layout: post -title: "Discord for a GitHub Classroom - Part 1" -subtitle: "GitHub App Basics" -author: Lnk2past +title: Discord for a GitHub Classroom - Part 1 +date: 2020-04-26 tags: nodejs javascript github auth graphql readtime: 15 ---- +---fm--- -This post explains how to get started with making your own GitHub app for a GitHub organization! There are two primary components: the GitHub application and the code application. The former represents an entity recognizable by GitHub, and the latter is what is performing tasks using the GitHub API. +This post explains how to get started with making your own GitHub app for a GitHub organization! There are two primary components: the GitHub application and the code application. The former represents an entity recognizable by GitHub, and the latter is what is performing tasks using the GitHub API. As I began to write this post, I made a snap decision to reevaluate how my current app worked. I originally coded it against GitHub's `REST API v3`. This worked mostly well for what I needed so far, but in some corner cases it was a little less than ideal. Being the newbie that I am with these sorts of interfaces I thought nothing of it when I started writing my app. However, I came to learn about GitHub's `GraphQL API v4`. I am ultra-new to [GraphQL](https://graphql.github.io/) having only looked at it for the first time just a few days ago, but I have already converted the handful of functions in my app to use it and it performs a good bit better. diff --git a/content/archives/hello-world.md b/content/archives/hello-world.md new file mode 100644 index 0000000..15570fb --- /dev/null +++ b/content/archives/hello-world.md @@ -0,0 +1,6 @@ +title: Hello World! +date: 2020-04-07 +tags: helloworld +---fm--- + +This is my first post! I am learning web development from scratch; this includes Jekyll! I finally figured out how to set things up locally, so I can see what is going on before I push to GitHub... diff --git a/_posts/2021-07-17-ramping-back-up.md b/content/archives/ramping-back-up.md similarity index 95% rename from _posts/2021-07-17-ramping-back-up.md rename to content/archives/ramping-back-up.md index d34a6cf..ae7515f 100644 --- a/_posts/2021-07-17-ramping-back-up.md +++ b/content/archives/ramping-back-up.md @@ -1,13 +1,10 @@ ---- -layout: post -title: "Ramping Back Up" -subtitle: "Do you want to continue? [Y/n]" -author: Lnk2past +title: Ramping Back Up +date: 2021-07-17 tags: storytime readtime: 5 ---- +---fm--- -I am finally getting back to coding outside of work. I certainly have not stopped coding all this time, I have just been spending my time at home doing anything and everything else. +I am finally getting back to coding outside of work. I certainly have not stopped coding all this time, I have just been spending my time at home doing anything and everything else. ## What is New? diff --git a/_posts/2021-02-09-updates-and-burn-out.md b/content/archives/updates-and-burn-out.md similarity index 95% rename from _posts/2021-02-09-updates-and-burn-out.md rename to content/archives/updates-and-burn-out.md index 0e8923c..c844ada 100644 --- a/_posts/2021-02-09-updates-and-burn-out.md +++ b/content/archives/updates-and-burn-out.md @@ -1,13 +1,10 @@ ---- -layout: post -title: "Updates & Burn Out" -subtitle: "Undefined reference to nesware::follow_through()" -author: Lnk2past +title: Updates & Burn Out +date: 2021-02-09 tags: storytime readtime: 6 ---- +---fm--- -Sometimes you just need to take a step back and regroup. While this page has been quiet for a long time, I have in fact been quite busy. +Sometimes you just need to take a step back and regroup. While this page has been quiet for a long time, I have in fact been quite busy. ## What Has Been Going On? diff --git a/content/blog.md b/content/blog.md new file mode 100644 index 0000000..22f573e --- /dev/null +++ b/content/blog.md @@ -0,0 +1,6 @@ +title: Blog +---fm--- + +## Latest Posts + +Look around, you might, though unlikely, find something you like! diff --git a/_posts/2023-04-16-visualizing-a-live-cpp-model-in-python.md b/content/blog/visualizing-a-live-cpp-model-in-python.md similarity index 97% rename from _posts/2023-04-16-visualizing-a-live-cpp-model-in-python.md rename to content/blog/visualizing-a-live-cpp-model-in-python.md index 47fd554..e46f459 100644 --- a/_posts/2023-04-16-visualizing-a-live-cpp-model-in-python.md +++ b/content/blog/visualizing-a-live-cpp-model-in-python.md @@ -1,16 +1,11 @@ ---- -layout: post -title: "Visualizing a Live C++ Model in Python" -subtitle: "C++ is good at some things, and Python is good at others" -author: Lnk2past +title: Visualizing a Live C++ Model in Python +section: blog +date: 2023-04-16 tags: c++ python dashboarding visualization simulation model panel holoviews pybind11 -image: /assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail.png readtime: 20 ---- +---fm--- -C++ lets us write fast code, but Python lets us better understand our model. - - +
Python is just too good at many things, and of the many things it is good at, it is very good at analyzing and visualizing data. Analyzing and visualizing data are usually very exploratory processes, and so that code is changing frequently. Changing Python is much easier than changing C++, and so it fits very well into that workflow. @@ -399,7 +394,7 @@ panel serve main.py This will launch a local webserver that you can access in your browser. You should see something like this: -![](/assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/basic.gif) +
The particles are pulled towards the center because our model creates a very heavy particle at the origin that overwhelmingly attracts the other particles. When two particles get arbitrarily close the force due to gravity approaches infinity, and because we are not modeling collisions, the particles will just shoot out of orbit. @@ -415,7 +410,9 @@ We can do much more from here, but for now we are just going to update the initi This code updates the particles within the model by sending them on a small counter-clockwise trajectory based on the quadrant they are in. This gives us a rather satisfying swirling motion! -![](/assets/images/posts/2023-04-16-visualizing-a-live-cpp-model-in-python/swirl.gif) + +
+ Depending on your machine, simulating 1000 particles may be a bit clunky (even in the gifs above you can see a little bit of stuttering) - the little bits of choppiness in the animations are due to the model updates taking more than ~33 milliseconds. We are using the brute-force method for updating the model, but we could achieve better performance using a Barnes-Hut Approximation, or even multithreading (true multithreading from C++!), or any number of other solutions. If we had written this model in Python we would likely be dealing with even worse performance issues (assuming we are not properly using NumPy and/or Numba!). diff --git a/_posts/2023-03-11-writing-cpp-like-it-is-python.md b/content/blog/writing-cpp-like-it-is-python.md similarity index 96% rename from _posts/2023-03-11-writing-cpp-like-it-is-python.md rename to content/blog/writing-cpp-like-it-is-python.md index 3c5e54f..98f3c18 100644 --- a/_posts/2023-03-11-writing-cpp-like-it-is-python.md +++ b/content/blog/writing-cpp-like-it-is-python.md @@ -1,13 +1,11 @@ ---- -layout: post -title: "Writing Pythonic C++" -subtitle: "Simple Code that is Fast" -author: Lnk2past +title: Writing Pythonic C++ +section: blog +date: 2023-03-11 tags: c++ python readtime: 25 ---- +---fm--- -Sometimes you really just need faster code. Before utilizing anything in this post seriously, you should absolutely explore options like `NumPy` and `Numba`, or even `Cython` when you need to write faster Python. There are plenty of highly optimized Python packages to check out! Usually the performance gain from using something like `Numba` or `Cython` is effectively as good as writing native code, but sometimes using those tools is not feasible. While this article will talk specifically about writing C++ as standalone programs, in a later article we will talk about how we can *use* this C++ in our Python programs. +Sometimes you really just need faster code. Before utilizing anything in this post seriously, you should absolutely explore options like `NumPy` and `Numba`, or even `Cython` when you need to write faster Python. There are plenty of highly optimized Python packages to check out! Usually the performance gain from using something like `Numba` or `Cython` is effectively as good as writing native code, but sometimes using those tools is not feasible. While this article will talk specifically about writing C++ as standalone programs, in a later article we will talk about how we can *use* this C++ in our Python programs. With advances in the C++ language specification we can write C++ easier than ever. Type deduction, brace initialization, and lambdas (and much more) are all features added over the years that make C++ feel so much better. With the help of a few popular open source projects, we can write simple, expressive, and friendly C++ that feels a good bit like Python. At this point we will assume you are using a C++20 compatible compiler - my system currently uses g++ 12.1.0. diff --git a/content/blog/writing-my-own-static-site-generator-with-panel.md b/content/blog/writing-my-own-static-site-generator-with-panel.md new file mode 100644 index 0000000..8b886f3 --- /dev/null +++ b/content/blog/writing-my-own-static-site-generator-with-panel.md @@ -0,0 +1,32 @@ +title: Writing My Own Static Site Generator with Panel +section: blog +date: 2025-02-18 +tags: python panel +readtime: 20 +---fm--- + +Ever since creating this website a few years ago, I have managed its content and generation using [`Jekyll`](https://jekyllrb.com/). I am not a web developer at all and Jekyll made it all super easy to get started. However, due to my infrequent posting, every time I would come back to write a new post, something about my environment and setup would be broken. I am not a Ruby developer either, so debugging anything was always a tad problematic. The other night I again tried to come back to write new content, and again my environment was broken... + +## Trying Hugo + +Instead of trying to fix things this time, I figured there surely should be something hot and new to try out. I opted to just test the waters and see what other static-site-generators are available. After a short bit of searching, there seemed to be significant community cheers for [Hugo](https://gohugo.io/). This looked pretty cool, so I gave it a try. It was simple to get going (and it really is fast!), but then I hit a wall of issues that I really had no patience for. + +The themes advertised on their website were hit or miss - most themes didn't quite have an aesthetic I was into, and the ones I was interested in seemed to not work quite right. I ran into errors ranging from differing Hugo verisons not working with the theme, all the way to themes straight up not working. I tried to convert content to one theme that seemed promising, but in the end it didn't feel great. I was getting frustrated pretty quickly, and lost interest. + +## Panel + +I still wanted to replace Jekyll with something, but nothing seemed to stand out to me. As I thought on it a bit more, I figured I would turn to what I know. I am a pretty frequent user of the [Holoviz](https://holoviz.org/) ecosystem when I am developing data analysis and visualization tools, and I am a huge fan of [`Panel`](https://panel.holoviz.org/), a library _"designed to streamline the development of robust tools, dashboards, and complex applications entirely within Python"_. It has default templates for dashboards, and while they are a tad boring for a blog (on the surface), Panel lets us easily inject CSS to style things how we want. + +Panel lets you create full-blown dashboards with a large variety of both textual and visual elements, and furthermore also can be rendered to static HTML. You can inject Markdown and CSS directly into Panel, and so at this point I just needed to wrap my blog content into single "dashboard" pages and render them to HTML. + +### Features + +The current set of features from my new tool are sparse, but it will be acquiring some new skills fairly rapidly over time. I am currently calling it `geno`, named after the one and only Star Road warrior of `Mario RPG`. As of right now I can generate content from markdown, can inject content using some basic frontmatter, and I can automatically deploy to GitHub pages. + +In fact, what you are reading this very moment is being hosted from GitHub pages, having been gneerated using `geno`. There is an absolute ton to do to improve `geno` and make it into something others can use, but for now the name of the game is making it whatever I need it to be to better facilitate the addition of new content here. + +## Future + +With the introduction of `geno` and my new blog, I have cleaned things up a good bit. I removed a number of my old posts, mostly because they are noise and very irrelevant now. I will rehost them eventually as "archives", but I don't care enough right now to really update them with the new paradigms unique to `geno`. + +I will be documenting some of the new C++ work I have been doing on the side as well as some RPI and Adafruit tinkering, and as I run through writing those posts I am sure that I will continue to iterate on `geno` and the aesthetic and layout of this website. `geno` lives here in this repository only for now, but will be moving out once it is mature enough and abstracted for general use. diff --git a/content/index.md b/content/index.md new file mode 100644 index 0000000..db060a8 --- /dev/null +++ b/content/index.md @@ -0,0 +1,8 @@ +title: Home +---fm--- + +This is my personal software/tech blog. Expect to see a lot of software and a lot highly opinionated takes. I have had high hopes and dreams for what this blog can and should be, but I simply have not put the time in. This is meant to be a blog to talk about the software that I write and to dump ideas down. Hopefully in the process of doing so I learn something new, and with an even greater hope, I hope you do too. + +--- + +### Latest Post diff --git a/content/projects.md b/content/projects.md new file mode 100644 index 0000000..1ba7963 --- /dev/null +++ b/content/projects.md @@ -0,0 +1,8 @@ +title: Projects +---fm--- + +## Current Projects + +Of course there are always too many things being worked on at any given time, but there are a few projects that in particular are of value that I believe with enough time and effort can actually be something good. I am currently scrubbing down my projects and GitHub to remove what is obsolete (or uninteresting); this should help me focus a bit better in the long run. + +In the meantime this is going to be a little blank! diff --git a/index.md b/index.md deleted file mode 100644 index abbdeb0..0000000 --- a/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Home -layout: default ---- - -# Home - -NESWare is my creative and professional outlet for all things code! This site is a work in progress, but *an active work in progress*! It will be a little bare here for a while, but I will be working hard to write some good stuff for all of you! - ---- - -{% for post in site.posts %} -{% unless post.draft %} -
- -

{{ post.title }}

- - {{ post.content | split:"" | first }} ... - - read more - -{% endunless %} -{% endfor %} diff --git a/jekyll-theme-cayman.gemspec b/jekyll-theme-cayman.gemspec deleted file mode 100644 index cca1da1..0000000 --- a/jekyll-theme-cayman.gemspec +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -Gem::Specification.new do |s| - s.name = 'jekyll-theme-cayman' - s.version = '0.1.1' - s.license = 'CC0-1.0' - s.authors = ['Jason Long', 'GitHub, Inc.'] - s.email = ['opensource+jekyll-theme-cayman@github.com'] - s.homepage = 'https://github.com/pages-themes/cayman' - s.summary = 'Cayman is a Jekyll theme for GitHub Pages' - - s.files = `git ls-files -z`.split("\x0").select do |f| - f.match(%r{^((_includes|_layouts|_sass|assets)/|(LICENSE|README)((\.(txt|md|markdown)|$)))}i) - end - - s.platform = Gem::Platform::RUBY - s.add_runtime_dependency 'jekyll', '> 3.7', '< 5.0' - s.add_runtime_dependency 'jekyll-seo-tag', '~> 2.0' - s.add_development_dependency 'html-proofer', '~> 3.0' - s.add_development_dependency 'rubocop', '~> 0.50' - s.add_development_dependency 'w3c_validators', '~> 1.3' - end \ No newline at end of file diff --git a/projects.md b/projects.md deleted file mode 100644 index aba4a83..0000000 --- a/projects.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Projects -layout: default ---- - -# Current Projects - -Of course there are always too many things being worked on at any given time, but there are a few projects that in particular are of value that I believe with enough time and effort can actually be something good. - ---- - -## Games - - - -## Software - - diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..bd65fd9 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,24 @@ +[project] +name = "geno" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "flask>=3.1.0", + "panel>=1.6.1", + "pygments>=2.19.1", +] + +[dependency-groups] +lint = [ + "mypy>=1.15.0", + "ruff>=0.9.6", +] + +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" + +[project.scripts] +geno = "geno.main:main" \ No newline at end of file diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 0000000..c8fc889 --- /dev/null +++ b/ruff.toml @@ -0,0 +1,77 @@ +# Exclude a variety of commonly ignored directories. +exclude = [ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".git-rewrite", + ".hg", + ".ipynb_checkpoints", + ".mypy_cache", + ".nox", + ".pants.d", + ".pyenv", + ".pytest_cache", + ".pytype", + ".ruff_cache", + ".svn", + ".tox", + ".venv", + ".vscode", + "__pypackages__", + "_build", + "buck-out", + "build", + "dist", + "node_modules", + "site-packages", + "venv", +] + +# Same as Black. +line-length = 88 +indent-width = 4 + +# Assume Python 3.9 +target-version = "py39" + +[lint] +# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. +# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or +# McCabe complexity (`C901`) by default. +select = ["E4", "E7", "E9", "F"] +ignore = [] + +# Allow fix for all enabled rules (when `--fix`) is provided. +fixable = ["ALL"] +unfixable = [] + +# Allow unused variables when underscore-prefixed. +dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + +[format] +# Like Black, use double quotes for strings. +quote-style = "double" + +# Like Black, indent with spaces, rather than tabs. +indent-style = "space" + +# Like Black, respect magic trailing commas. +skip-magic-trailing-comma = false + +# Like Black, automatically detect the appropriate line ending. +line-ending = "auto" + +# Enable auto-formatting of code examples in docstrings. Markdown, +# reStructuredText code/literal blocks and doctests are all supported. +# +# This is currently disabled by default, but it is planned for this +# to be opt-out in the future. +docstring-code-format = false + +# Set the line length limit used when formatting code snippets in +# docstrings. +# +# This only has an effect when the `docstring-code-format` setting is +# enabled. +docstring-code-line-length = "dynamic" diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/geno.egg-info/PKG-INFO b/src/geno.egg-info/PKG-INFO new file mode 100644 index 0000000..6f163e9 --- /dev/null +++ b/src/geno.egg-info/PKG-INFO @@ -0,0 +1,9 @@ +Metadata-Version: 2.2 +Name: geno +Version: 0.1.0 +Summary: Add your description here +Requires-Python: >=3.12 +Description-Content-Type: text/markdown +Requires-Dist: flask>=3.1.0 +Requires-Dist: panel>=1.6.1 +Requires-Dist: pygments>=2.19.1 diff --git a/src/geno.egg-info/SOURCES.txt b/src/geno.egg-info/SOURCES.txt new file mode 100644 index 0000000..655e589 --- /dev/null +++ b/src/geno.egg-info/SOURCES.txt @@ -0,0 +1,13 @@ +README.md +pyproject.toml +src/__init__.py +src/geno/__init__.py +src/geno/css.py +src/geno/main.py +src/geno/page.py +src/geno.egg-info/PKG-INFO +src/geno.egg-info/SOURCES.txt +src/geno.egg-info/dependency_links.txt +src/geno.egg-info/entry_points.txt +src/geno.egg-info/requires.txt +src/geno.egg-info/top_level.txt \ No newline at end of file diff --git a/src/geno.egg-info/dependency_links.txt b/src/geno.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/geno.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/geno.egg-info/entry_points.txt b/src/geno.egg-info/entry_points.txt new file mode 100644 index 0000000..568af41 --- /dev/null +++ b/src/geno.egg-info/entry_points.txt @@ -0,0 +1,2 @@ +[console_scripts] +geno = geno.main:main diff --git a/src/geno.egg-info/requires.txt b/src/geno.egg-info/requires.txt new file mode 100644 index 0000000..bd0dc14 --- /dev/null +++ b/src/geno.egg-info/requires.txt @@ -0,0 +1,3 @@ +flask>=3.1.0 +panel>=1.6.1 +pygments>=2.19.1 diff --git a/src/geno.egg-info/top_level.txt b/src/geno.egg-info/top_level.txt new file mode 100644 index 0000000..5d39150 --- /dev/null +++ b/src/geno.egg-info/top_level.txt @@ -0,0 +1,2 @@ +__init__ +geno diff --git a/src/geno/__init__.py b/src/geno/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/geno/__pycache__/__init__.cpython-312.pyc b/src/geno/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..0fc2b1d Binary files /dev/null and b/src/geno/__pycache__/__init__.cpython-312.pyc differ diff --git a/src/geno/__pycache__/css.cpython-312.pyc b/src/geno/__pycache__/css.cpython-312.pyc new file mode 100644 index 0000000..19d9b2c Binary files /dev/null and b/src/geno/__pycache__/css.cpython-312.pyc differ diff --git a/src/geno/__pycache__/main.cpython-312.pyc b/src/geno/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000..0f0a7d8 Binary files /dev/null and b/src/geno/__pycache__/main.cpython-312.pyc differ diff --git a/src/geno/__pycache__/page.cpython-312.pyc b/src/geno/__pycache__/page.cpython-312.pyc new file mode 100644 index 0000000..f53fd66 Binary files /dev/null and b/src/geno/__pycache__/page.cpython-312.pyc differ diff --git a/src/geno/css.py b/src/geno/css.py new file mode 100644 index 0000000..644de77 --- /dev/null +++ b/src/geno/css.py @@ -0,0 +1,6 @@ +import pathlib + + +class CSS: + def __init__(self, css_path: pathlib.Path) -> None: + self.stylesheets = [open(css).read() for css in css_path.glob("*.css")] diff --git a/src/geno/main.py b/src/geno/main.py new file mode 100644 index 0000000..5036ec2 --- /dev/null +++ b/src/geno/main.py @@ -0,0 +1,96 @@ +import pathlib +import shutil + +import panel as pn +import yaml + +from .css import CSS +from .page import Page + + +def main(): + static = pathlib.Path("static") + if static.exists(): + shutil.rmtree( + static, + ) + static.mkdir() + + content = pathlib.Path("content") + shutil.copytree("./assets", static / "assets") + + css = CSS(pathlib.Path("assets") / "css") + + def split_frontmatter_from_content(md_content: str) -> tuple[str, str]: + if "---fm---" in md_content: + frontmatter, content = md_content.split("---fm---", 1) + return (frontmatter, content) + return ("", md_content) + + def md_to_html(md_path: pathlib.Path) -> Page: + new_path = static / (md_path.relative_to(content)) + with open(md_path) as md_file: + new_path.parent.mkdir(exist_ok=True, parents=True) + fm, md = split_frontmatter_from_content(md_file.read()) + return Page( + new_path.with_suffix(".html"), md, yaml.safe_load(fm), css.stylesheets + ) + + main_pages = [ + md_to_html(content / "index.md"), + md_to_html(content / "blog.md"), + md_to_html(content / "projects.md"), + md_to_html(content / "about.md"), + ] + blog_pages = [md_to_html(md) for md in (content / "blog").glob("*.md")] + project_pages = [md_to_html(md) for md in (content / "projects").glob("*.md")] + + blog_pages.sort(key=lambda p: p.date) + + for page in reversed(blog_pages): + main_pages[ + 0 + ].md += f"\n\n### [{page.date} {page.title}]({page.source_path.relative_to(static)})" + break + + for page in reversed(blog_pages): + main_pages[ + 1 + ].md += f"\n\n### [{page.date} {page.title}]({page.source_path.relative_to(static)})" + + pages = main_pages + blog_pages + project_pages + + button_config = { + "button_type": "success", + "button_style": "outline", + "sizing_mode": "stretch_width", + "stylesheets": [":hover { background-color: #e8fff4; }"], + } + + buttons = [] + for page_name in ["Home", "Blog", "Projects", "About"]: + button = pn.widgets.Button(name=page_name, **button_config) + button.js_on_click( + code=f'window.location = "/{"" if page_name == "Home" else page_name.lower() + ".html"}"' + ) + buttons.append(button) + + pn.template.BootstrapTemplate.config.raw_css.extend(css.stylesheets) + + for page in pages: + main = pn.Column( + page.markdown, + sizing_mode="stretch_width", + align="center", + ) + + pn.template.BootstrapTemplate( + title="NESWare", + header_color="#FFFFFF", + header_background="#009926", + logo="assets/images/nesware/nesware-logo-textless-white.png", + favicon="assets/images/nesware/nesware-logo-textless-64px.png", + main=main, + sidebar=pn.Column(*buttons), + sidebar_width=240, + ).save(page.source_path) diff --git a/src/geno/page.py b/src/geno/page.py new file mode 100644 index 0000000..c57f56c --- /dev/null +++ b/src/geno/page.py @@ -0,0 +1,43 @@ +import pathlib +from typing import Any + +import panel as pn + + +class Page: + def __init__( + self, + source_path: pathlib.Path, + md: str, + fm: dict[str, Any] | None = None, + ss: list[str] | None = None, + ): + self.source_path = source_path + + self.md = md + self.fm = fm or {} + self.ss = ss or [] + + self.update_md_with_fm() + + def update_md_with_fm(self) -> None: + if self.readtime: + self.md = f"### {self.readtime} Minutes to Read\n\n" + self.md + + if self.date: + self.md = f"## {self.date}\n\n" + self.md + + self.md = f"# {self.title}\n\n" + self.md + + # TODO: embed this into a template + self.md += f"\n" + + def __getitem__(self, key) -> Any: + return self.fm.get(key, None) + + def __getattr__(self, key): + return self[key] + + @property + def markdown(self): + return pn.pane.Markdown(self.md, max_width=800, stylesheets=self.ss) diff --git a/static/about.html b/static/about.html new file mode 100644 index 0000000..94625ec --- /dev/null +++ b/static/about.html @@ -0,0 +1,172 @@ + + + + + Panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ + +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/static/assets/css/headers.css b/static/assets/css/headers.css new file mode 100644 index 0000000..0785df6 --- /dev/null +++ b/static/assets/css/headers.css @@ -0,0 +1,9 @@ +h1, +h2, +h3, +h4, +h5, +h5, +h6 { + color: #159957 +} \ No newline at end of file diff --git a/static/assets/css/navbar.css b/static/assets/css/navbar.css new file mode 100644 index 0000000..989e23e --- /dev/null +++ b/static/assets/css/navbar.css @@ -0,0 +1,3 @@ +.navbar { + background: linear-gradient(120deg, #155799, #159957); +} \ No newline at end of file diff --git a/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/basic.gif b/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/basic.gif new file mode 100644 index 0000000..1c4bb3b Binary files /dev/null and b/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/basic.gif differ diff --git a/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/swirl.gif b/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/swirl.gif new file mode 100644 index 0000000..26ae1df Binary files /dev/null and b/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/swirl.gif differ diff --git a/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail.png b/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail.png new file mode 100644 index 0000000..874acac Binary files /dev/null and b/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail.png differ diff --git a/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail_nologo.png b/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail_nologo.png new file mode 100644 index 0000000..99a3a5c Binary files /dev/null and b/static/assets/images/2023-04-16-visualizing-a-live-cpp-model-in-python/thumbnail_nologo.png differ diff --git a/static/assets/images/github/GitHub-Mark-120px-plus.png b/static/assets/images/github/GitHub-Mark-120px-plus.png new file mode 100644 index 0000000..ea6ff54 Binary files /dev/null and b/static/assets/images/github/GitHub-Mark-120px-plus.png differ diff --git a/static/assets/images/github/GitHub-Mark-120px-plus.png:Zone.Identifier b/static/assets/images/github/GitHub-Mark-120px-plus.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/static/assets/images/github/GitHub-Mark-32px.png b/static/assets/images/github/GitHub-Mark-32px.png new file mode 100644 index 0000000..8b25551 Binary files /dev/null and b/static/assets/images/github/GitHub-Mark-32px.png differ diff --git a/static/assets/images/github/GitHub-Mark-32px.png:Zone.Identifier b/static/assets/images/github/GitHub-Mark-32px.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/static/assets/images/github/GitHub-Mark-64px.png b/static/assets/images/github/GitHub-Mark-64px.png new file mode 100644 index 0000000..182a1a3 Binary files /dev/null and b/static/assets/images/github/GitHub-Mark-64px.png differ diff --git a/static/assets/images/github/GitHub-Mark-64px.png:Zone.Identifier b/static/assets/images/github/GitHub-Mark-64px.png:Zone.Identifier new file mode 100644 index 0000000..e69de29 diff --git a/static/assets/images/nesware/nesware-banner-plain.png b/static/assets/images/nesware/nesware-banner-plain.png new file mode 100644 index 0000000..437cf2d Binary files /dev/null and b/static/assets/images/nesware/nesware-banner-plain.png differ diff --git a/static/assets/images/nesware/nesware-logo-textless-64px.ico b/static/assets/images/nesware/nesware-logo-textless-64px.ico new file mode 100644 index 0000000..3f226d7 Binary files /dev/null and b/static/assets/images/nesware/nesware-logo-textless-64px.ico differ diff --git a/static/assets/images/nesware/nesware-logo-textless-64px.png b/static/assets/images/nesware/nesware-logo-textless-64px.png new file mode 100644 index 0000000..76ed229 Binary files /dev/null and b/static/assets/images/nesware/nesware-logo-textless-64px.png differ diff --git a/static/assets/images/nesware/nesware-logo-textless-white.png b/static/assets/images/nesware/nesware-logo-textless-white.png new file mode 100644 index 0000000..f8bcf69 Binary files /dev/null and b/static/assets/images/nesware/nesware-logo-textless-white.png differ diff --git a/favicon.png b/static/assets/images/nesware/nesware-logo-textless.png similarity index 100% rename from favicon.png rename to static/assets/images/nesware/nesware-logo-textless.png diff --git a/static/assets/images/nesware/nesware-logo-white.png b/static/assets/images/nesware/nesware-logo-white.png new file mode 100644 index 0000000..2250193 Binary files /dev/null and b/static/assets/images/nesware/nesware-logo-white.png differ diff --git a/static/assets/images/nesware/nesware-logo.png b/static/assets/images/nesware/nesware-logo.png new file mode 100644 index 0000000..91c65bb Binary files /dev/null and b/static/assets/images/nesware/nesware-logo.png differ diff --git a/static/assets/images/nesware/nesware-long-banner.png b/static/assets/images/nesware/nesware-long-banner.png new file mode 100644 index 0000000..4639b3f Binary files /dev/null and b/static/assets/images/nesware/nesware-long-banner.png differ diff --git a/static/assets/images/nesware/nesware-simple-large-banner.png b/static/assets/images/nesware/nesware-simple-large-banner.png new file mode 100644 index 0000000..4e0afe8 Binary files /dev/null and b/static/assets/images/nesware/nesware-simple-large-banner.png differ diff --git a/static/assets/images/nesware/nesware-simple-large-offset-banner-textless.png b/static/assets/images/nesware/nesware-simple-large-offset-banner-textless.png new file mode 100644 index 0000000..d0c7fa7 Binary files /dev/null and b/static/assets/images/nesware/nesware-simple-large-offset-banner-textless.png differ diff --git a/static/assets/images/nesware/nesware-simple-large-offset-banner.png b/static/assets/images/nesware/nesware-simple-large-offset-banner.png new file mode 100644 index 0000000..60d9299 Binary files /dev/null and b/static/assets/images/nesware/nesware-simple-large-offset-banner.png differ diff --git a/static/assets/images/nesware/nesware-simple-small-offset-banner-textless.png b/static/assets/images/nesware/nesware-simple-small-offset-banner-textless.png new file mode 100644 index 0000000..ebd754c Binary files /dev/null and b/static/assets/images/nesware/nesware-simple-small-offset-banner-textless.png differ diff --git a/static/blog.html b/static/blog.html new file mode 100644 index 0000000..08d769f --- /dev/null +++ b/static/blog.html @@ -0,0 +1,172 @@ + + + + + Panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ + +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/static/blog/visualizing-a-live-cpp-model-in-python.html b/static/blog/visualizing-a-live-cpp-model-in-python.html new file mode 100644 index 0000000..14fa5e4 --- /dev/null +++ b/static/blog/visualizing-a-live-cpp-model-in-python.html @@ -0,0 +1,172 @@ + + + + + Panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ + +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/static/blog/writing-cpp-like-it-is-python.html b/static/blog/writing-cpp-like-it-is-python.html new file mode 100644 index 0000000..375d5cd --- /dev/null +++ b/static/blog/writing-cpp-like-it-is-python.html @@ -0,0 +1,172 @@ + + + + + Panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ + +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/static/blog/writing-my-own-static-site-generator-with-panel.html b/static/blog/writing-my-own-static-site-generator-with-panel.html new file mode 100644 index 0000000..6d16295 --- /dev/null +++ b/static/blog/writing-my-own-static-site-generator-with-panel.html @@ -0,0 +1,172 @@ + + + + + Panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ + +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..99f3270 --- /dev/null +++ b/static/index.html @@ -0,0 +1,172 @@ + + + + + Panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ + +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/static/projects.html b/static/projects.html new file mode 100644 index 0000000..61444ab --- /dev/null +++ b/static/projects.html @@ -0,0 +1,172 @@ + + + + + Panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+
+
+ + +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/tag/auth.md b/tag/auth.md deleted file mode 100644 index 4d07779..0000000 --- a/tag/auth.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: auth" -tag: auth -robots: noindex ---- diff --git a/tag/c++.md b/tag/c++.md deleted file mode 100644 index 3daf3f5..0000000 --- a/tag/c++.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: c++" -tag: c++ -robots: noindex ---- diff --git a/tag/education.md b/tag/education.md deleted file mode 100644 index 8309bd6..0000000 --- a/tag/education.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: education" -tag: education -robots: noindex ---- diff --git a/tag/github.md b/tag/github.md deleted file mode 100644 index 5f7c2f7..0000000 --- a/tag/github.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: github" -tag: github -robots: noindex ---- diff --git a/tag/graphql.md b/tag/graphql.md deleted file mode 100644 index f63f0bf..0000000 --- a/tag/graphql.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: graphql" -tag: graphql -robots: noindex ---- diff --git a/tag/helloworld.md b/tag/helloworld.md deleted file mode 100644 index f752432..0000000 --- a/tag/helloworld.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: helloworld" -tag: helloworld -robots: noindex ---- diff --git a/tag/javascript.md b/tag/javascript.md deleted file mode 100644 index 4f911bd..0000000 --- a/tag/javascript.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: javascript" -tag: javascript -robots: noindex ---- diff --git a/tag/nodejs.md b/tag/nodejs.md deleted file mode 100644 index f96ccae..0000000 --- a/tag/nodejs.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: nodejs" -tag: nodejs -robots: noindex ---- diff --git a/tag/python.md b/tag/python.md deleted file mode 100644 index e3124d9..0000000 --- a/tag/python.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: python" -tag: python -robots: noindex ---- diff --git a/tag/software.md b/tag/software.md deleted file mode 100644 index 401d8fa..0000000 --- a/tag/software.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: software" -tag: software -robots: noindex ---- diff --git a/tag/storytime.md b/tag/storytime.md deleted file mode 100644 index 43a6edc..0000000 --- a/tag/storytime.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: tagpage -title: "Tag: storytime" -tag: storytime -robots: noindex ---- diff --git a/tag_generator.py b/tag_generator.py deleted file mode 100644 index cd22b53..0000000 --- a/tag_generator.py +++ /dev/null @@ -1,51 +0,0 @@ -# https://github.com/qian256/qian256.github.io/blob/master/tag_generator.py -''' -tag_generator.py -Copyright 2017 Long Qian -Contact: lqian8@jhu.edu -This script creates tags for your Jekyll blog hosted by Github page. -No plugins required. -''' - -import glob -import os - -post_dir = '_posts/' -tag_dir = 'tag/' - -filenames = glob.glob(post_dir + '*md') - -total_tags = [] -for filename in filenames: - f = open(filename, 'r', encoding='utf8') - crawl = False - for line in f: - if crawl: - current_tags = line.strip().split() - if current_tags[0] == 'tags:': - total_tags.extend(current_tags[1:]) - crawl = False - break - if line.strip() == '---': - if not crawl: - crawl = True - else: - crawl = False - break - f.close() -total_tags = set(total_tags) - -old_tags = glob.glob(tag_dir + '*.md') -for tag in old_tags: - os.remove(tag) - -if not os.path.exists(tag_dir): - os.makedirs(tag_dir) - -for tag in total_tags: - tag_filename = tag_dir + tag + '.md' - f = open(tag_filename, 'a') - write_str = '---\nlayout: tagpage\ntitle: \"Tag: ' + tag + '\"\ntag: ' + tag + '\nrobots: noindex\n---\n' - f.write(write_str) - f.close() -print("Tags generated, count", total_tags.__len__()) \ No newline at end of file diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..5bc4076 --- /dev/null +++ b/uv.lock @@ -0,0 +1,716 @@ +version = 1 +revision = 1 +requires-python = ">=3.12" + +[[package]] +name = "bleach" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406 }, +] + +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458 }, +] + +[[package]] +name = "bokeh" +version = "3.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "contourpy" }, + { name = "jinja2" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pillow" }, + { name = "pyyaml" }, + { name = "tornado" }, + { name = "xyzservices" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/a1/32d07573bce3afb3339e165c08ea0c6fc41da7ccdac28488a56403cf2dc7/bokeh-3.6.3.tar.gz", hash = "sha256:9b81d6a9ea62e75a04a1a9d9f931942016890beec9ab5d129a2a4432cf595c0a", size = 6249575 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/15/be88ca93d191f07df76cce217b3b44d5ed3038fa58dd33b4fcb12ea8fe5e/bokeh-3.6.3-py3-none-any.whl", hash = "sha256:1c219e2afe1405e6ada212071ac3bee91c95acfd1aa6d620eb6f61a751407747", size = 6868324 }, +] + +[[package]] +name = "certifi" +version = "2025.1.31" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 }, + { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 }, + { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 }, + { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 }, + { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 }, + { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 }, + { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 }, + { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 }, + { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 }, + { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 }, + { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 }, + { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 }, + { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 }, + { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, + { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, + { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, + { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, + { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, + { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, + { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, + { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, + { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, + { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, + { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, + { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, + { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, + { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, +] + +[[package]] +name = "contourpy" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494 }, + { url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444 }, + { url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628 }, + { url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271 }, + { url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906 }, + { url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622 }, + { url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699 }, + { url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395 }, + { url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354 }, + { url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971 }, + { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 }, + { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 }, + { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 }, + { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 }, + { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 }, + { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 }, + { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 }, + { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 }, + { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 }, + { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 }, + { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 }, + { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 }, + { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 }, + { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 }, + { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 }, + { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 }, + { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 }, + { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, + { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, + { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, +] + +[[package]] +name = "flask" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/50/dff6380f1c7f84135484e176e0cac8690af72fa90e932ad2a0a60e28c69b/flask-3.1.0.tar.gz", hash = "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac", size = 680824 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/47/93213ee66ef8fae3b93b3e29206f6b251e65c97bd91d8e1c5596ef15af0a/flask-3.1.0-py3-none-any.whl", hash = "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136", size = 102979 }, +] + +[[package]] +name = "geno" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "flask" }, + { name = "panel" }, + { name = "pygments" }, +] + +[package.dev-dependencies] +lint = [ + { name = "mypy" }, + { name = "ruff" }, +] + +[package.metadata] +requires-dist = [ + { name = "flask", specifier = ">=3.1.0" }, + { name = "panel", specifier = ">=1.6.1" }, + { name = "pygments", specifier = ">=2.19.1" }, +] + +[package.metadata.requires-dev] +lint = [ + { name = "mypy", specifier = ">=1.15.0" }, + { name = "ruff", specifier = ">=0.9.6" }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234 }, +] + +[[package]] +name = "jinja2" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/92/b3130cbbf5591acf9ade8708c365f3238046ac7cb8ccba6e81abccb0ccff/jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", size = 244674 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596 }, +] + +[[package]] +name = "linkify-it-py" +version = "2.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "uc-micro-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/ae/bb56c6828e4797ba5a4821eec7c43b8bf40f69cda4d4f5f8c8a2810ec96a/linkify-it-py-2.0.3.tar.gz", hash = "sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048", size = 27946 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79", size = 19820 }, +] + +[[package]] +name = "markdown" +version = "3.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/28/3af612670f82f4c056911fbbbb42760255801b3068c48de792d354ff4472/markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2", size = 357086 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/08/83871f3c50fc983b88547c196d11cf8c3340e37c32d2e9d6152abe2c61f7/Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803", size = 106349 }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/03/a2ecab526543b152300717cf232bb4bb8605b6edb946c845016fa9c9c9fd/mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5", size = 43542 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", size = 55316 }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, +] + +[[package]] +name = "mypy" +version = "1.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/43/d5e49a86afa64bd3839ea0d5b9c7103487007d728e1293f52525d6d5486a/mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43", size = 3239717 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/3a/03c74331c5eb8bd025734e04c9840532226775c47a2c39b56a0c8d4f128d/mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd", size = 10793981 }, + { url = "https://files.pythonhosted.org/packages/f0/1a/41759b18f2cfd568848a37c89030aeb03534411eef981df621d8fad08a1d/mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f", size = 9749175 }, + { url = "https://files.pythonhosted.org/packages/12/7e/873481abf1ef112c582db832740f4c11b2bfa510e829d6da29b0ab8c3f9c/mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464", size = 11455675 }, + { url = "https://files.pythonhosted.org/packages/b3/d0/92ae4cde706923a2d3f2d6c39629134063ff64b9dedca9c1388363da072d/mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee", size = 12410020 }, + { url = "https://files.pythonhosted.org/packages/46/8b/df49974b337cce35f828ba6fda228152d6db45fed4c86ba56ffe442434fd/mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e", size = 12498582 }, + { url = "https://files.pythonhosted.org/packages/13/50/da5203fcf6c53044a0b699939f31075c45ae8a4cadf538a9069b165c1050/mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22", size = 9366614 }, + { url = "https://files.pythonhosted.org/packages/6a/9b/fd2e05d6ffff24d912f150b87db9e364fa8282045c875654ce7e32fffa66/mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445", size = 10788592 }, + { url = "https://files.pythonhosted.org/packages/74/37/b246d711c28a03ead1fd906bbc7106659aed7c089d55fe40dd58db812628/mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d", size = 9753611 }, + { url = "https://files.pythonhosted.org/packages/a6/ac/395808a92e10cfdac8003c3de9a2ab6dc7cde6c0d2a4df3df1b815ffd067/mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5", size = 11438443 }, + { url = "https://files.pythonhosted.org/packages/d2/8b/801aa06445d2de3895f59e476f38f3f8d610ef5d6908245f07d002676cbf/mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036", size = 12402541 }, + { url = "https://files.pythonhosted.org/packages/c7/67/5a4268782eb77344cc613a4cf23540928e41f018a9a1ec4c6882baf20ab8/mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357", size = 12494348 }, + { url = "https://files.pythonhosted.org/packages/83/3e/57bb447f7bbbfaabf1712d96f9df142624a386d98fb026a761532526057e/mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf", size = 9373648 }, + { url = "https://files.pythonhosted.org/packages/09/4e/a7d65c7322c510de2c409ff3828b03354a7c43f5a8ed458a7a131b41c7b9/mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e", size = 2221777 }, +] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 }, +] + +[[package]] +name = "numpy" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fb/90/8956572f5c4ae52201fdec7ba2044b2c882832dcec7d5d0922c9e9acf2de/numpy-2.2.3.tar.gz", hash = "sha256:dbdc15f0c81611925f382dfa97b3bd0bc2c1ce19d4fe50482cb0ddc12ba30020", size = 20262700 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ec/43628dcf98466e087812142eec6d1c1a6c6bdfdad30a0aa07b872dc01f6f/numpy-2.2.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12c045f43b1d2915eca6b880a7f4a256f59d62df4f044788c8ba67709412128d", size = 20929458 }, + { url = "https://files.pythonhosted.org/packages/9b/c0/2f4225073e99a5c12350954949ed19b5d4a738f541d33e6f7439e33e98e4/numpy-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:87eed225fd415bbae787f93a457af7f5990b92a334e346f72070bf569b9c9c95", size = 14115299 }, + { url = "https://files.pythonhosted.org/packages/ca/fa/d2c5575d9c734a7376cc1592fae50257ec95d061b27ee3dbdb0b3b551eb2/numpy-2.2.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:712a64103d97c404e87d4d7c47fb0c7ff9acccc625ca2002848e0d53288b90ea", size = 5145723 }, + { url = "https://files.pythonhosted.org/packages/eb/dc/023dad5b268a7895e58e791f28dc1c60eb7b6c06fcbc2af8538ad069d5f3/numpy-2.2.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a5ae282abe60a2db0fd407072aff4599c279bcd6e9a2475500fc35b00a57c532", size = 6678797 }, + { url = "https://files.pythonhosted.org/packages/3f/19/bcd641ccf19ac25abb6fb1dcd7744840c11f9d62519d7057b6ab2096eb60/numpy-2.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5266de33d4c3420973cf9ae3b98b54a2a6d53a559310e3236c4b2b06b9c07d4e", size = 14067362 }, + { url = "https://files.pythonhosted.org/packages/39/04/78d2e7402fb479d893953fb78fa7045f7deb635ec095b6b4f0260223091a/numpy-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b787adbf04b0db1967798dba8da1af07e387908ed1553a0d6e74c084d1ceafe", size = 16116679 }, + { url = "https://files.pythonhosted.org/packages/d0/a1/e90f7aa66512be3150cb9d27f3d9995db330ad1b2046474a13b7040dfd92/numpy-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:34c1b7e83f94f3b564b35f480f5652a47007dd91f7c839f404d03279cc8dd021", size = 15264272 }, + { url = "https://files.pythonhosted.org/packages/dc/b6/50bd027cca494de4fa1fc7bf1662983d0ba5f256fa0ece2c376b5eb9b3f0/numpy-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d8335b5f1b6e2bce120d55fb17064b0262ff29b459e8493d1785c18ae2553b8", size = 17880549 }, + { url = "https://files.pythonhosted.org/packages/96/30/f7bf4acb5f8db10a96f73896bdeed7a63373137b131ca18bd3dab889db3b/numpy-2.2.3-cp312-cp312-win32.whl", hash = "sha256:4d9828d25fb246bedd31e04c9e75714a4087211ac348cb39c8c5f99dbb6683fe", size = 6293394 }, + { url = "https://files.pythonhosted.org/packages/42/6e/55580a538116d16ae7c9aa17d4edd56e83f42126cb1dfe7a684da7925d2c/numpy-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:83807d445817326b4bcdaaaf8e8e9f1753da04341eceec705c001ff342002e5d", size = 12626357 }, + { url = "https://files.pythonhosted.org/packages/0e/8b/88b98ed534d6a03ba8cddb316950fe80842885709b58501233c29dfa24a9/numpy-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bfdb06b395385ea9b91bf55c1adf1b297c9fdb531552845ff1d3ea6e40d5aba", size = 20916001 }, + { url = "https://files.pythonhosted.org/packages/d9/b4/def6ec32c725cc5fbd8bdf8af80f616acf075fe752d8a23e895da8c67b70/numpy-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:23c9f4edbf4c065fddb10a4f6e8b6a244342d95966a48820c614891e5059bb50", size = 14130721 }, + { url = "https://files.pythonhosted.org/packages/20/60/70af0acc86495b25b672d403e12cb25448d79a2b9658f4fc45e845c397a8/numpy-2.2.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:a0c03b6be48aaf92525cccf393265e02773be8fd9551a2f9adbe7db1fa2b60f1", size = 5130999 }, + { url = "https://files.pythonhosted.org/packages/2e/69/d96c006fb73c9a47bcb3611417cf178049aae159afae47c48bd66df9c536/numpy-2.2.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:2376e317111daa0a6739e50f7ee2a6353f768489102308b0d98fcf4a04f7f3b5", size = 6665299 }, + { url = "https://files.pythonhosted.org/packages/5a/3f/d8a877b6e48103733ac224ffa26b30887dc9944ff95dffdfa6c4ce3d7df3/numpy-2.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fb62fe3d206d72fe1cfe31c4a1106ad2b136fcc1606093aeab314f02930fdf2", size = 14064096 }, + { url = "https://files.pythonhosted.org/packages/e4/43/619c2c7a0665aafc80efca465ddb1f260287266bdbdce517396f2f145d49/numpy-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52659ad2534427dffcc36aac76bebdd02b67e3b7a619ac67543bc9bfe6b7cdb1", size = 16114758 }, + { url = "https://files.pythonhosted.org/packages/d9/79/ee4fe4f60967ccd3897aa71ae14cdee9e3c097e3256975cc9575d393cb42/numpy-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1b416af7d0ed3271cad0f0a0d0bee0911ed7eba23e66f8424d9f3dfcdcae1304", size = 15259880 }, + { url = "https://files.pythonhosted.org/packages/fb/c8/8b55cf05db6d85b7a7d414b3d1bd5a740706df00bfa0824a08bf041e52ee/numpy-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1402da8e0f435991983d0a9708b779f95a8c98c6b18a171b9f1be09005e64d9d", size = 17876721 }, + { url = "https://files.pythonhosted.org/packages/21/d6/b4c2f0564b7dcc413117b0ffbb818d837e4b29996b9234e38b2025ed24e7/numpy-2.2.3-cp313-cp313-win32.whl", hash = "sha256:136553f123ee2951bfcfbc264acd34a2fc2f29d7cdf610ce7daf672b6fbaa693", size = 6290195 }, + { url = "https://files.pythonhosted.org/packages/97/e7/7d55a86719d0de7a6a597949f3febefb1009435b79ba510ff32f05a8c1d7/numpy-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:5b732c8beef1d7bc2d9e476dbba20aaff6167bf205ad9aa8d30913859e82884b", size = 12619013 }, + { url = "https://files.pythonhosted.org/packages/a6/1f/0b863d5528b9048fd486a56e0b97c18bf705e88736c8cea7239012119a54/numpy-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:435e7a933b9fda8126130b046975a968cc2d833b505475e588339e09f7672890", size = 20944621 }, + { url = "https://files.pythonhosted.org/packages/aa/99/b478c384f7a0a2e0736177aafc97dc9152fc036a3fdb13f5a3ab225f1494/numpy-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7678556eeb0152cbd1522b684dcd215250885993dd00adb93679ec3c0e6e091c", size = 14142502 }, + { url = "https://files.pythonhosted.org/packages/fb/61/2d9a694a0f9cd0a839501d362de2a18de75e3004576a3008e56bdd60fcdb/numpy-2.2.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2e8da03bd561504d9b20e7a12340870dfc206c64ea59b4cfee9fceb95070ee94", size = 5176293 }, + { url = "https://files.pythonhosted.org/packages/33/35/51e94011b23e753fa33f891f601e5c1c9a3d515448659b06df9d40c0aa6e/numpy-2.2.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:c9aa4496fd0e17e3843399f533d62857cef5900facf93e735ef65aa4bbc90ef0", size = 6691874 }, + { url = "https://files.pythonhosted.org/packages/ff/cf/06e37619aad98a9d03bd8d65b8e3041c3a639be0f5f6b0a0e2da544538d4/numpy-2.2.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4ca91d61a4bf61b0f2228f24bbfa6a9facd5f8af03759fe2a655c50ae2c6610", size = 14036826 }, + { url = "https://files.pythonhosted.org/packages/0c/93/5d7d19955abd4d6099ef4a8ee006f9ce258166c38af259f9e5558a172e3e/numpy-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:deaa09cd492e24fd9b15296844c0ad1b3c976da7907e1c1ed3a0ad21dded6f76", size = 16096567 }, + { url = "https://files.pythonhosted.org/packages/af/53/d1c599acf7732d81f46a93621dab6aa8daad914b502a7a115b3f17288ab2/numpy-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:246535e2f7496b7ac85deffe932896a3577be7af8fb7eebe7146444680297e9a", size = 15242514 }, + { url = "https://files.pythonhosted.org/packages/53/43/c0f5411c7b3ea90adf341d05ace762dad8cb9819ef26093e27b15dd121ac/numpy-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:daf43a3d1ea699402c5a850e5313680ac355b4adc9770cd5cfc2940e7861f1bf", size = 17872920 }, + { url = "https://files.pythonhosted.org/packages/5b/57/6dbdd45ab277aff62021cafa1e15f9644a52f5b5fc840bc7591b4079fb58/numpy-2.2.3-cp313-cp313t-win32.whl", hash = "sha256:cf802eef1f0134afb81fef94020351be4fe1d6681aadf9c5e862af6602af64ef", size = 6346584 }, + { url = "https://files.pythonhosted.org/packages/97/9b/484f7d04b537d0a1202a5ba81c6f53f1846ae6c63c2127f8df869ed31342/numpy-2.2.3-cp313-cp313t-win_amd64.whl", hash = "sha256:aee2512827ceb6d7f517c8b85aa5d3923afe8fc7a57d028cffcd522f1c6fd082", size = 12706784 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pandas" +version = "2.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, + { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, + { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, + { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, + { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, + { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, +] + +[[package]] +name = "panel" +version = "1.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bleach" }, + { name = "bokeh" }, + { name = "linkify-it-py" }, + { name = "markdown" }, + { name = "markdown-it-py" }, + { name = "mdit-py-plugins" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "param" }, + { name = "pyviz-comms" }, + { name = "requests" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/96/8012f50b84a7baf400785fc71598e22c69c4ed1f292d5a1f298baf0340cc/panel-1.6.1.tar.gz", hash = "sha256:75f95701f03f6b64d00d69a5369c3f521126e697fb855e717816c4a02ddbfd57", size = 29945215 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/11/e98e3b54f4153daeff029522697b69b6b1d7e121487d36095e80b7effcc5/panel-1.6.1-py3-none-any.whl", hash = "sha256:3ddbfed586c72ccdd83ab6bdf8af56e464b9f50f72afadddbe4eeaec409dc61d", size = 27961848 }, +] + +[[package]] +name = "param" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/5b/244af19409227e81d1424b82e7f71c2b8b283b2911ec87c8a0d5a44357ac/param-2.2.0.tar.gz", hash = "sha256:2ef63ef7aef37412eeb8ee3a06189a51f69c58c068824ae070baecb5b2abd0b8", size = 176845 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/56/370a6636e072a037b52499edd8928942df7f887974fc54444ece5152d26a/param-2.2.0-py3-none-any.whl", hash = "sha256:777f8c7b66ab820b70ea5ad09faaa6818308220caae89da3b5c5f359faa72a5e", size = 119008 }, +] + +[[package]] +name = "pillow" +version = "11.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818 }, + { url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662 }, + { url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317 }, + { url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999 }, + { url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819 }, + { url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081 }, + { url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513 }, + { url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298 }, + { url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630 }, + { url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369 }, + { url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240 }, + { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 }, + { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 }, + { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 }, + { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 }, + { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 }, + { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 }, + { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 }, + { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 }, + { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 }, + { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 }, + { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 }, + { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 }, + { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 }, + { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 }, + { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 }, + { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 }, + { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 }, + { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 }, + { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 }, +] + +[[package]] +name = "pygments" +version = "2.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, +] + +[[package]] +name = "pytz" +version = "2025.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/57/df1c9157c8d5a05117e455d66fd7cf6dbc46974f832b1058ed4856785d8a/pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e", size = 319617 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", size = 507930 }, +] + +[[package]] +name = "pyviz-comms" +version = "3.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "param" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/1c/220c1dd64eafabb361900aba0808d84394c8a33a978c63c74a658dde108f/pyviz_comms-3.0.4.tar.gz", hash = "sha256:d70e17555f7262c4884a6b7bc9ca19cb816507a032a334d9cb411b4546caff4c", size = 196973 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/cc/ba051cfaef2525054e3367f2d5ff4df38f8f775125b3eebb82af4060026b/pyviz_comms-3.0.4-py3-none-any.whl", hash = "sha256:a40d17db26ec13cf975809633804e712bd24b473e77388c193c44043f85d0b25", size = 83830 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "requests" +version = "2.32.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, +] + +[[package]] +name = "ruff" +version = "0.9.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/e1/e265aba384343dd8ddd3083f5e33536cd17e1566c41453a5517b5dd443be/ruff-0.9.6.tar.gz", hash = "sha256:81761592f72b620ec8fa1068a6fd00e98a5ebee342a3642efd84454f3031dca9", size = 3639454 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/e3/3d2c022e687e18cf5d93d6bfa2722d46afc64eaa438c7fbbdd603b3597be/ruff-0.9.6-py3-none-linux_armv6l.whl", hash = "sha256:2f218f356dd2d995839f1941322ff021c72a492c470f0b26a34f844c29cdf5ba", size = 11714128 }, + { url = "https://files.pythonhosted.org/packages/e1/22/aff073b70f95c052e5c58153cba735748c9e70107a77d03420d7850710a0/ruff-0.9.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b908ff4df65dad7b251c9968a2e4560836d8f5487c2f0cc238321ed951ea0504", size = 11682539 }, + { url = "https://files.pythonhosted.org/packages/75/a7/f5b7390afd98a7918582a3d256cd3e78ba0a26165a467c1820084587cbf9/ruff-0.9.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b109c0ad2ececf42e75fa99dc4043ff72a357436bb171900714a9ea581ddef83", size = 11132512 }, + { url = "https://files.pythonhosted.org/packages/a6/e3/45de13ef65047fea2e33f7e573d848206e15c715e5cd56095589a7733d04/ruff-0.9.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de4367cca3dac99bcbd15c161404e849bb0bfd543664db39232648dc00112dc", size = 11929275 }, + { url = "https://files.pythonhosted.org/packages/7d/f2/23d04cd6c43b2e641ab961ade8d0b5edb212ecebd112506188c91f2a6e6c/ruff-0.9.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3ee4d7c2c92ddfdaedf0bf31b2b176fa7aa8950efc454628d477394d35638b", size = 11466502 }, + { url = "https://files.pythonhosted.org/packages/b5/6f/3a8cf166f2d7f1627dd2201e6cbc4cb81f8b7d58099348f0c1ff7b733792/ruff-0.9.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc1edd1775270e6aa2386119aea692039781429f0be1e0949ea5884e011aa8e", size = 12676364 }, + { url = "https://files.pythonhosted.org/packages/f5/c4/db52e2189983c70114ff2b7e3997e48c8318af44fe83e1ce9517570a50c6/ruff-0.9.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:4a091729086dffa4bd070aa5dab7e39cc6b9d62eb2bef8f3d91172d30d599666", size = 13335518 }, + { url = "https://files.pythonhosted.org/packages/66/44/545f8a4d136830f08f4d24324e7db957c5374bf3a3f7a6c0bc7be4623a37/ruff-0.9.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1bbc6808bf7b15796cef0815e1dfb796fbd383e7dbd4334709642649625e7c5", size = 12823287 }, + { url = "https://files.pythonhosted.org/packages/c5/26/8208ef9ee7431032c143649a9967c3ae1aae4257d95e6f8519f07309aa66/ruff-0.9.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:589d1d9f25b5754ff230dce914a174a7c951a85a4e9270613a2b74231fdac2f5", size = 14592374 }, + { url = "https://files.pythonhosted.org/packages/31/70/e917781e55ff39c5b5208bda384fd397ffd76605e68544d71a7e40944945/ruff-0.9.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc61dd5131742e21103fbbdcad683a8813be0e3c204472d520d9a5021ca8b217", size = 12500173 }, + { url = "https://files.pythonhosted.org/packages/84/f5/e4ddee07660f5a9622a9c2b639afd8f3104988dc4f6ba0b73ffacffa9a8c/ruff-0.9.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5e2d9126161d0357e5c8f30b0bd6168d2c3872372f14481136d13de9937f79b6", size = 11906555 }, + { url = "https://files.pythonhosted.org/packages/f1/2b/6ff2fe383667075eef8656b9892e73dd9b119b5e3add51298628b87f6429/ruff-0.9.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:68660eab1a8e65babb5229a1f97b46e3120923757a68b5413d8561f8a85d4897", size = 11538958 }, + { url = "https://files.pythonhosted.org/packages/3c/db/98e59e90de45d1eb46649151c10a062d5707b5b7f76f64eb1e29edf6ebb1/ruff-0.9.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c4cae6c4cc7b9b4017c71114115db0445b00a16de3bcde0946273e8392856f08", size = 12117247 }, + { url = "https://files.pythonhosted.org/packages/ec/bc/54e38f6d219013a9204a5a2015c09e7a8c36cedcd50a4b01ac69a550b9d9/ruff-0.9.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:19f505b643228b417c1111a2a536424ddde0db4ef9023b9e04a46ed8a1cb4656", size = 12554647 }, + { url = "https://files.pythonhosted.org/packages/a5/7d/7b461ab0e2404293c0627125bb70ac642c2e8d55bf590f6fce85f508f1b2/ruff-0.9.6-py3-none-win32.whl", hash = "sha256:194d8402bceef1b31164909540a597e0d913c0e4952015a5b40e28c146121b5d", size = 9949214 }, + { url = "https://files.pythonhosted.org/packages/ee/30/c3cee10f915ed75a5c29c1e57311282d1a15855551a64795c1b2bbe5cf37/ruff-0.9.6-py3-none-win_amd64.whl", hash = "sha256:03482d5c09d90d4ee3f40d97578423698ad895c87314c4de39ed2af945633caa", size = 10999914 }, + { url = "https://files.pythonhosted.org/packages/e8/a8/d71f44b93e3aa86ae232af1f2126ca7b95c0f515ec135462b3e1f351441c/ruff-0.9.6-py3-none-win_arm64.whl", hash = "sha256:0e2bb706a2be7ddfea4a4af918562fdc1bcb16df255e5fa595bbd800ce322a5a", size = 10177499 }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, +] + +[[package]] +name = "tornado" +version = "6.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299 }, + { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253 }, + { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602 }, + { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972 }, + { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173 }, + { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892 }, + { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334 }, + { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261 }, + { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463 }, + { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 }, +] + +[[package]] +name = "tqdm" +version = "4.67.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540 }, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/db/f35a00659bc03fec321ba8bce9420de607a1d37f8342eee1863174c69557/typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8", size = 85321 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, +] + +[[package]] +name = "tzdata" +version = "2025.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/0f/fa4723f22942480be4ca9527bbde8d43f6c3f2fe8412f00e7f5f6746bc8b/tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", size = 194950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639", size = 346762 }, +] + +[[package]] +name = "uc-micro-py" +version = "1.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/7a/146a99696aee0609e3712f2b44c6274566bc368dfe8375191278045186b8/uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a", size = 6043 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5", size = 6229 }, +] + +[[package]] +name = "urllib3" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774 }, +] + +[[package]] +name = "werkzeug" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498 }, +] + +[[package]] +name = "xyzservices" +version = "2025.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/11/3ae1c07b3446b643bec33822efeb0452e885a294172c4fe9551968211749/xyzservices-2025.1.0.tar.gz", hash = "sha256:5cdbb0907c20be1be066c6e2dc69c645842d1113a4e83e642065604a21f254ba", size = 1133574 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl", hash = "sha256:fa599956c5ab32dad1689960b3bb08fdcdbe0252cc82d84fc60ae415dc648907", size = 88368 }, +]