diff --git a/docs/.python-version b/docs/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/docs/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..df3f1d6 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,76 @@ +# Universal Maker Sensor Kit Documentation + +This directory contains the documentation for the Universal Maker Sensor Kit, organized by platform (Arduino, ESP32, Raspberry Pi Pico, and Raspberry Pi). + +## Generating PDF Books + +The `make_pdfs.py` script generates separate PDF books for each platform. + +### Prerequisites + +1. **LaTeX Distribution** (required for PDF generation): + - **macOS**: `brew install --cask mactex-no-gui` or `brew install --cask basictex` + - **Ubuntu/Debian**: `sudo apt-get install texlive-latex-extra texlive-fonts-recommended` + - **Windows**: Install [MiKTeX](https://miktex.org/) + +2. **Python dependencies**: Managed by `uv` (already configured in `pyproject.toml`) + +### Usage + +#### Option 1: Run directly with uv +```bash +uv run python make_pdfs.py +``` + +#### Option 2: Run as installed script +```bash +uv run make-pdfs +``` + +#### Option 3: Run directly with Python (after installing dependencies) +```bash +python make_pdfs.py +``` + +### Output + +The script will create a `pdfs/` directory containing four PDF books: +- `Arduino_Guide.pdf` - Complete Arduino tutorials +- `ESP32_Guide.pdf` - Complete ESP32 tutorials +- `PiPico_Guide.pdf` - Complete Raspberry Pi Pico tutorials +- `RaspberryPi_Guide.pdf` - Complete Raspberry Pi tutorials + +### How It Works + +The script: +1. Creates temporary build directories for each platform +2. Copies the relevant documentation files and shared resources +3. Generates a custom Sphinx configuration for PDF output +4. Builds LaTeX files using Sphinx +5. Compiles PDFs using pdflatex +6. Saves the final PDFs to the `pdfs/` directory + +### Troubleshooting + +**Error: "pdflatex not found"** +- Install a LaTeX distribution (see Prerequisites above) +- Ensure `pdflatex` is in your PATH + +**Error: "Missing .sty file"** +- Install additional LaTeX packages: + - macOS: The full MacTeX installation includes all packages + - Ubuntu/Debian: `sudo apt-get install texlive-latex-extra` + +**Build warnings** +- Some warnings during PDF generation are normal (missing references, overfull boxes) +- The script runs pdflatex twice to resolve cross-references + +## Building HTML Documentation + +To build the standard HTML documentation: + +```bash +make html +``` + +The HTML files will be in `source/_build/html/`. diff --git a/docs/make_pdfs.py b/docs/make_pdfs.py new file mode 100755 index 0000000..bf6debf --- /dev/null +++ b/docs/make_pdfs.py @@ -0,0 +1,348 @@ +#!/usr/bin/env python3 +""" +Generate PDF books for each subfolder in the Universal Maker Sensor Kit documentation. + +This script creates separate PDF books for Arduino, ESP32, Pi Pico, and Raspberry Pi +using Sphinx's LaTeX/PDF builder. + +Usage: + uv run make_pdfs.py +""" + +import os +import sys +import shutil +import tempfile +from pathlib import Path +from typing import Dict, List +import subprocess + + +# Define the books to generate +BOOKS = { + "Arduino": { + "folder": "02_arduino", + "title": "Universal Maker Sensor Kit - Arduino Guide", + "index_file": "arduino.rst", + }, + "ESP32": { + "folder": "03_esp32", + "title": "Universal Maker Sensor Kit - ESP32 Guide", + "index_file": "esp32.rst", + }, + "PiPico": { + "folder": "04_pi_pico", + "title": "Universal Maker Sensor Kit - Raspberry Pi Pico Guide", + "index_file": "pi_pico.rst", + }, + "RaspberryPi": { + "folder": "05_raspberry_pi", + "title": "Universal Maker Sensor Kit - Raspberry Pi Guide", + "index_file": "raspberry_pi.rst", + }, +} + + +def create_temp_conf( + source_dir: Path, + temp_dir: Path, + book_title: str, + author: str = "SunFounder" +) -> Path: + """ + Create a temporary conf.py for PDF generation. + + Args: + source_dir: Original source directory + temp_dir: Temporary directory for this build + book_title: Title for the PDF book + author: Author name + + Returns: + Path to the created conf.py + """ + conf_path = temp_dir / "conf.py" + + conf_content = f'''# Configuration file for PDF generation +import sphinx_rtd_theme +import time + +# Project information +project = "{book_title}" +copyright = f'{{time.localtime().tm_year}}, {author}' +author = "{author}" + +# Extensions +extensions = [ + 'sphinx.ext.autosectionlabel', + 'sphinx_copybutton', + 'sphinx_rtd_theme' +] + +# Paths +templates_path = ['{source_dir / "_templates"}'] +html_static_path = ['{source_dir / "_static"}'] +exclude_patterns = [] + +# LaTeX/PDF output options +latex_engine = 'pdflatex' +latex_elements = {{ + 'papersize': 'letterpaper', + 'pointsize': '10pt', + 'preamble': r\'\'\' +\\usepackage{{geometry}} +\\geometry{{margin=1in}} +\'\'\', + 'figure_align': 'htbp', +}} + +latex_documents = [ + ('index', f'{{project.replace(" ", "_")}}.tex', project, author, 'manual'), +] + +# Theme +html_theme = 'sphinx_rtd_theme' + +# Language +language = 'en' +locale_dirs = ['{source_dir / "locale"}/'] +gettext_compact = False + +# Copy all the custom RST substitutions from the original conf.py +''' + + # Read the original conf.py to get rst_epilog + original_conf = source_dir / "conf.py" + if original_conf.exists(): + with open(original_conf, 'r', encoding='utf-8') as f: + original_content = f.read() + + # Extract rst_epilog + if 'rst_epilog = """' in original_content: + start = original_content.find('rst_epilog = """') + # Find the closing """ with proper handling + temp_content = original_content[start:] + first_quote = temp_content.find('"""') + # Find next """ after the first one + second_quote = temp_content.find('"""', first_quote + 3) + if second_quote != -1: + epilog_section = temp_content[:second_quote + 3] + conf_content += "\n" + epilog_section + "\n" + + with open(conf_path, 'w', encoding='utf-8') as f: + f.write(conf_content) + + return conf_path + + +def copy_dependencies(source_dir: Path, temp_dir: Path, folder: str) -> None: + """ + Copy necessary files and folders to the temporary directory. + + Args: + source_dir: Original source directory + temp_dir: Temporary directory for this build + folder: Specific subfolder being built + """ + # Copy the specific platform folder + platform_src = source_dir / folder + platform_dst = temp_dir / folder + if platform_src.exists(): + shutil.copytree(platform_src, platform_dst) + + # Copy shared resources + shared_folders = ["_static", "_templates", "img"] + for shared in shared_folders: + shared_src = source_dir / shared + shared_dst = temp_dir / shared + if shared_src.exists(): + shutil.copytree(shared_src, shared_dst, dirs_exist_ok=True) + + # Copy component basics if referenced + components_src = source_dir / "01_components_basic" + components_dst = temp_dir / "01_components_basic" + if components_src.exists(): + shutil.copytree(components_src, components_dst) + + +def create_index_rst(temp_dir: Path, book_info: Dict, folder: str) -> Path: + """ + Create a simple index.rst that includes the platform's main file. + + Args: + temp_dir: Temporary directory for this build + book_info: Book configuration dictionary + folder: Specific subfolder being built + + Returns: + Path to created index.rst + """ + index_path = temp_dir / "index.rst" + + # Read the original platform index file + platform_index = temp_dir / folder / book_info["index_file"] + + index_content = f'''{book_info["title"]} +{"=" * len(book_info["title"])} + +.. toctree:: + :maxdepth: 3 + :caption: Contents: + + {folder}/{book_info["index_file"].replace(".rst", "")} +''' + + with open(index_path, 'w', encoding='utf-8') as f: + f.write(index_content) + + return index_path + + +def build_pdf( + book_name: str, + book_info: Dict, + source_dir: Path, + output_dir: Path +) -> bool: + """ + Build a PDF for a specific book. + + Args: + book_name: Name of the book (e.g., "Arduino") + book_info: Book configuration dictionary + source_dir: Original source directory + output_dir: Output directory for PDFs + + Returns: + True if successful, False otherwise + """ + print(f"\n{'=' * 60}") + print(f"Building PDF for {book_name}...") + print(f"{'=' * 60}") + + # Create temporary directory + with tempfile.TemporaryDirectory() as temp_dir_str: + temp_dir = Path(temp_dir_str) + + # Copy dependencies + print("Copying files...") + copy_dependencies(source_dir, temp_dir, book_info["folder"]) + + # Create conf.py + print("Creating configuration...") + create_temp_conf(source_dir, temp_dir, book_info["title"]) + + # Create index.rst + print("Creating index...") + create_index_rst(temp_dir, book_info, book_info["folder"]) + + # Build LaTeX + print("Building LaTeX...") + latex_dir = temp_dir / "_build" / "latex" + result = subprocess.run( + [ + "sphinx-build", + "-b", "latex", + "-d", str(temp_dir / "_build" / "doctrees"), + str(temp_dir), + str(latex_dir) + ], + capture_output=True, + text=True + ) + + if result.returncode != 0: + print(f"ERROR building LaTeX for {book_name}:") + print(result.stderr) + return False + + # Build PDF with pdflatex + print("Building PDF...") + pdf_file = list(latex_dir.glob("*.tex")) + if not pdf_file: + print(f"ERROR: No .tex file found for {book_name}") + return False + + # Run pdflatex (run twice for proper references) + for i in range(2): + print(f"Running pdflatex (pass {i+1}/2)...") + result = subprocess.run( + ["pdflatex", "-interaction=nonstopmode", pdf_file[0].name], + cwd=latex_dir, + capture_output=True, + text=True + ) + if result.returncode != 0 and i == 1: # Only fail on second pass + print(f"WARNING: pdflatex returned non-zero exit code for {book_name}") + # Don't fail completely, PDF might still be generated + + # Copy PDF to output directory + pdf_files = list(latex_dir.glob("*.pdf")) + if pdf_files: + output_file = output_dir / f"{book_name}_Guide.pdf" + shutil.copy2(pdf_files[0], output_file) + print(f"✓ Successfully created: {output_file}") + return True + else: + print(f"ERROR: No PDF generated for {book_name}") + return False + + +def main(): + """Main function to generate all PDFs.""" + # Get paths + script_dir = Path(__file__).parent + source_dir = script_dir / "source" + output_dir = script_dir / "pdfs" + + # Create output directory + output_dir.mkdir(exist_ok=True) + + print("Universal Maker Sensor Kit - PDF Generator") + print("=" * 60) + print(f"Source directory: {source_dir}") + print(f"Output directory: {output_dir}") + + # Check if source directory exists + if not source_dir.exists(): + print(f"ERROR: Source directory not found: {source_dir}") + sys.exit(1) + + # Check if pdflatex is available + try: + subprocess.run( + ["pdflatex", "--version"], + capture_output=True, + check=True + ) + except (subprocess.CalledProcessError, FileNotFoundError): + print("\nERROR: pdflatex not found!") + print("Please install a LaTeX distribution:") + print(" - macOS: brew install --cask mactex-no-gui") + print(" - Ubuntu/Debian: sudo apt-get install texlive-latex-extra") + print(" - Windows: Install MiKTeX from https://miktex.org/") + sys.exit(1) + + # Build each book + results = {} + for book_name, book_info in BOOKS.items(): + success = build_pdf(book_name, book_info, source_dir, output_dir) + results[book_name] = success + + # Print summary + print("\n" + "=" * 60) + print("SUMMARY") + print("=" * 60) + for book_name, success in results.items(): + status = "✓ SUCCESS" if success else "✗ FAILED" + print(f"{book_name:20s} {status}") + + print(f"\nPDFs saved to: {output_dir}") + + # Exit with error if any failed + if not all(results.values()): + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/docs/pyproject.toml b/docs/pyproject.toml new file mode 100644 index 0000000..c18690d --- /dev/null +++ b/docs/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "docs" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "sphinx>=9.0.0", + "sphinx-copybutton>=0.5.2", + "sphinx-rtd-theme>=0.5.1", +] + +[project.scripts] +make-pdfs = "make_pdfs:main" diff --git a/docs/source/05_raspberry_pi/pi_lesson01_button.rst b/docs/source/05_raspberry_pi/pi_lesson01_button.rst index 961d236..107e80c 100644 --- a/docs/source/05_raspberry_pi/pi_lesson01_button.rst +++ b/docs/source/05_raspberry_pi/pi_lesson01_button.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson01_button: Lesson 01: Button Module diff --git a/docs/source/05_raspberry_pi/pi_lesson02_soil_moisture.rst b/docs/source/05_raspberry_pi/pi_lesson02_soil_moisture.rst index c1abb99..ed36a93 100644 --- a/docs/source/05_raspberry_pi/pi_lesson02_soil_moisture.rst +++ b/docs/source/05_raspberry_pi/pi_lesson02_soil_moisture.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson02_soil_moisture: Lesson 02: Capacitive Soil Moisture Module diff --git a/docs/source/05_raspberry_pi/pi_lesson03_flame_sensor.rst b/docs/source/05_raspberry_pi/pi_lesson03_flame_sensor.rst index 41f8975..17d01a6 100644 --- a/docs/source/05_raspberry_pi/pi_lesson03_flame_sensor.rst +++ b/docs/source/05_raspberry_pi/pi_lesson03_flame_sensor.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson03_flame: Lesson 03: Flame Sensor Module diff --git a/docs/source/05_raspberry_pi/pi_lesson04_mq2.rst b/docs/source/05_raspberry_pi/pi_lesson04_mq2.rst index b9ec3bf..0f2921e 100644 --- a/docs/source/05_raspberry_pi/pi_lesson04_mq2.rst +++ b/docs/source/05_raspberry_pi/pi_lesson04_mq2.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson04_mq2: Lesson 04: Gas Sensor Module (MQ-2) diff --git a/docs/source/05_raspberry_pi/pi_lesson05_mpu6050.rst b/docs/source/05_raspberry_pi/pi_lesson05_mpu6050.rst index 4e5af4a..6c3167d 100644 --- a/docs/source/05_raspberry_pi/pi_lesson05_mpu6050.rst +++ b/docs/source/05_raspberry_pi/pi_lesson05_mpu6050.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson05_mpu6050: Lesson 05: Gyroscope & Accelerometer Module (MPU6050) diff --git a/docs/source/05_raspberry_pi/pi_lesson06_hall_sensor.rst b/docs/source/05_raspberry_pi/pi_lesson06_hall_sensor.rst index ce9f829..1634991 100644 --- a/docs/source/05_raspberry_pi/pi_lesson06_hall_sensor.rst +++ b/docs/source/05_raspberry_pi/pi_lesson06_hall_sensor.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson06_hall_sensor: Lesson 06: Hall Sensor Module diff --git a/docs/source/05_raspberry_pi/pi_lesson07_speed.rst b/docs/source/05_raspberry_pi/pi_lesson07_speed.rst index 0785d1a..15bfb0a 100644 --- a/docs/source/05_raspberry_pi/pi_lesson07_speed.rst +++ b/docs/source/05_raspberry_pi/pi_lesson07_speed.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson07_speed: Lesson 07: Infrared Speed Sensor Module diff --git a/docs/source/05_raspberry_pi/pi_lesson08_ir_obstacle_avoidance.rst b/docs/source/05_raspberry_pi/pi_lesson08_ir_obstacle_avoidance.rst index b2c39ad..f091735 100644 --- a/docs/source/05_raspberry_pi/pi_lesson08_ir_obstacle_avoidance.rst +++ b/docs/source/05_raspberry_pi/pi_lesson08_ir_obstacle_avoidance.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson08_ir_obstacle_avoidance: Lesson 08: IR Obstacle Avoidance Sensor Module diff --git a/docs/source/05_raspberry_pi/pi_lesson09_joystick.rst b/docs/source/05_raspberry_pi/pi_lesson09_joystick.rst index c1307df..5874c52 100644 --- a/docs/source/05_raspberry_pi/pi_lesson09_joystick.rst +++ b/docs/source/05_raspberry_pi/pi_lesson09_joystick.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson09_joystick: Lesson 09: Joystick Module diff --git a/docs/source/05_raspberry_pi/pi_lesson10_pcf8591.rst b/docs/source/05_raspberry_pi/pi_lesson10_pcf8591.rst index 44ea0ca..34e4c73 100644 --- a/docs/source/05_raspberry_pi/pi_lesson10_pcf8591.rst +++ b/docs/source/05_raspberry_pi/pi_lesson10_pcf8591.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson10_pcf8591: Lesson 10: PCF8591 ADC DAC Converter Module diff --git a/docs/source/05_raspberry_pi/pi_lesson11_photoresistor.rst b/docs/source/05_raspberry_pi/pi_lesson11_photoresistor.rst index edfabf1..12d9012 100644 --- a/docs/source/05_raspberry_pi/pi_lesson11_photoresistor.rst +++ b/docs/source/05_raspberry_pi/pi_lesson11_photoresistor.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson11_photoresistor: Lesson 11: Photoresistor Module diff --git a/docs/source/05_raspberry_pi/pi_lesson12_pir_motion.rst b/docs/source/05_raspberry_pi/pi_lesson12_pir_motion.rst index 834df6d..e7ca60c 100644 --- a/docs/source/05_raspberry_pi/pi_lesson12_pir_motion.rst +++ b/docs/source/05_raspberry_pi/pi_lesson12_pir_motion.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson12_pir_motion: Lesson 12: PIR Motion Module (HC-SR501) diff --git a/docs/source/05_raspberry_pi/pi_lesson13_potentiometer.rst b/docs/source/05_raspberry_pi/pi_lesson13_potentiometer.rst index 5558c9e..c570b33 100644 --- a/docs/source/05_raspberry_pi/pi_lesson13_potentiometer.rst +++ b/docs/source/05_raspberry_pi/pi_lesson13_potentiometer.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson13_potentiometer: Lesson 13: Potentiometer Module diff --git a/docs/source/05_raspberry_pi/pi_lesson14_max30102.rst b/docs/source/05_raspberry_pi/pi_lesson14_max30102.rst index fb39333..2a116c4 100644 --- a/docs/source/05_raspberry_pi/pi_lesson14_max30102.rst +++ b/docs/source/05_raspberry_pi/pi_lesson14_max30102.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson14_max30102: Lesson 14: Pulse Oximeter and Heart Rate Sensor Module (MAX30102) diff --git a/docs/source/05_raspberry_pi/pi_lesson15_raindrop.rst b/docs/source/05_raspberry_pi/pi_lesson15_raindrop.rst index 6cdc187..d1c8e3d 100644 --- a/docs/source/05_raspberry_pi/pi_lesson15_raindrop.rst +++ b/docs/source/05_raspberry_pi/pi_lesson15_raindrop.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson15_raindrop: Lesson 15: Raindrop Detection Module diff --git a/docs/source/05_raspberry_pi/pi_lesson16_ds1302.rst b/docs/source/05_raspberry_pi/pi_lesson16_ds1302.rst index aabd086..5d1e48c 100644 --- a/docs/source/05_raspberry_pi/pi_lesson16_ds1302.rst +++ b/docs/source/05_raspberry_pi/pi_lesson16_ds1302.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson16_ds1306: Lesson 16: Real Time Clock Module (DS1302) diff --git a/docs/source/05_raspberry_pi/pi_lesson17_rotary_encoder.rst b/docs/source/05_raspberry_pi/pi_lesson17_rotary_encoder.rst index b3f8aac..0484763 100644 --- a/docs/source/05_raspberry_pi/pi_lesson17_rotary_encoder.rst +++ b/docs/source/05_raspberry_pi/pi_lesson17_rotary_encoder.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson17_rotary_encoder: Lesson 17: Rotary Encoder Module diff --git a/docs/source/05_raspberry_pi/pi_lesson18_ds18b20.rst b/docs/source/05_raspberry_pi/pi_lesson18_ds18b20.rst index bfb89a8..e415640 100644 --- a/docs/source/05_raspberry_pi/pi_lesson18_ds18b20.rst +++ b/docs/source/05_raspberry_pi/pi_lesson18_ds18b20.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson18_ds18b20: Lesson 18: Temperature Sensor Module (DS18B20) diff --git a/docs/source/05_raspberry_pi/pi_lesson19_dht11.rst b/docs/source/05_raspberry_pi/pi_lesson19_dht11.rst index 276d6a5..0daec97 100644 --- a/docs/source/05_raspberry_pi/pi_lesson19_dht11.rst +++ b/docs/source/05_raspberry_pi/pi_lesson19_dht11.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson19_dht11: Lesson 19: Temperature and Humidity Sensor Module (DHT11) diff --git a/docs/source/05_raspberry_pi/pi_lesson20_bmp280.rst b/docs/source/05_raspberry_pi/pi_lesson20_bmp280.rst index feb426f..94f0013 100644 --- a/docs/source/05_raspberry_pi/pi_lesson20_bmp280.rst +++ b/docs/source/05_raspberry_pi/pi_lesson20_bmp280.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson20_bmp280: Lesson 20: Temperature, Humidity & Pressure Sensor (BMP280) diff --git a/docs/source/05_raspberry_pi/pi_lesson21_vl53l0x.rst b/docs/source/05_raspberry_pi/pi_lesson21_vl53l0x.rst index 5d670ea..ae2554b 100644 --- a/docs/source/05_raspberry_pi/pi_lesson21_vl53l0x.rst +++ b/docs/source/05_raspberry_pi/pi_lesson21_vl53l0x.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson21_vl53l0x: Lesson 21: Time of Flight Micro-LIDAR Distance Sensor (VL53L0X) diff --git a/docs/source/05_raspberry_pi/pi_lesson22_touch_sensor.rst b/docs/source/05_raspberry_pi/pi_lesson22_touch_sensor.rst index 71dc5d9..006cfc0 100644 --- a/docs/source/05_raspberry_pi/pi_lesson22_touch_sensor.rst +++ b/docs/source/05_raspberry_pi/pi_lesson22_touch_sensor.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson22_touch_sensor: Lesson 22: Touch Sensor Module diff --git a/docs/source/05_raspberry_pi/pi_lesson23_ultrasonic.rst b/docs/source/05_raspberry_pi/pi_lesson23_ultrasonic.rst index 7c5dda4..4e26c1c 100644 --- a/docs/source/05_raspberry_pi/pi_lesson23_ultrasonic.rst +++ b/docs/source/05_raspberry_pi/pi_lesson23_ultrasonic.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson23_ultrasonic: Lesson 23: Ultrasonic Sensor Module (HC-SR04) diff --git a/docs/source/05_raspberry_pi/pi_lesson24_vibration_sensor.rst b/docs/source/05_raspberry_pi/pi_lesson24_vibration_sensor.rst index 3e3265a..fee637d 100644 --- a/docs/source/05_raspberry_pi/pi_lesson24_vibration_sensor.rst +++ b/docs/source/05_raspberry_pi/pi_lesson24_vibration_sensor.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson24_vibration_sensor: Lesson 24: Vibration Sensor Module (SW-420) diff --git a/docs/source/05_raspberry_pi/pi_lesson25_water_level.rst b/docs/source/05_raspberry_pi/pi_lesson25_water_level.rst index 2cec23a..cec1ed2 100644 --- a/docs/source/05_raspberry_pi/pi_lesson25_water_level.rst +++ b/docs/source/05_raspberry_pi/pi_lesson25_water_level.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson25_water_level: Lesson 25: Water Level Sensor Module diff --git a/docs/source/05_raspberry_pi/pi_lesson26_lcd.rst b/docs/source/05_raspberry_pi/pi_lesson26_lcd.rst index 09f4314..d924088 100644 --- a/docs/source/05_raspberry_pi/pi_lesson26_lcd.rst +++ b/docs/source/05_raspberry_pi/pi_lesson26_lcd.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson26_lcd: Lesson 26: I2C LCD 1602 diff --git a/docs/source/05_raspberry_pi/pi_lesson27_oled.rst b/docs/source/05_raspberry_pi/pi_lesson27_oled.rst index 4842496..da65afb 100644 --- a/docs/source/05_raspberry_pi/pi_lesson27_oled.rst +++ b/docs/source/05_raspberry_pi/pi_lesson27_oled.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson27_oled: Lesson 27: OLED Display Module (SSD1306) diff --git a/docs/source/05_raspberry_pi/pi_lesson28_rgb_module.rst b/docs/source/05_raspberry_pi/pi_lesson28_rgb_module.rst index 6fc8a79..fb8a355 100644 --- a/docs/source/05_raspberry_pi/pi_lesson28_rgb_module.rst +++ b/docs/source/05_raspberry_pi/pi_lesson28_rgb_module.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson28_rgb_module: Lesson 28: RGB Module diff --git a/docs/source/05_raspberry_pi/pi_lesson29_traffic_light_module.rst b/docs/source/05_raspberry_pi/pi_lesson29_traffic_light_module.rst index 3776185..28883cc 100644 --- a/docs/source/05_raspberry_pi/pi_lesson29_traffic_light_module.rst +++ b/docs/source/05_raspberry_pi/pi_lesson29_traffic_light_module.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson29_traffic_light_module: Lesson 29: Traffic Light Module diff --git a/docs/source/05_raspberry_pi/pi_lesson30_relay_module.rst b/docs/source/05_raspberry_pi/pi_lesson30_relay_module.rst index 295005a..ff6fb89 100644 --- a/docs/source/05_raspberry_pi/pi_lesson30_relay_module.rst +++ b/docs/source/05_raspberry_pi/pi_lesson30_relay_module.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson30_relay_module: Lesson 30: Relay Module diff --git a/docs/source/05_raspberry_pi/pi_lesson31_pump.rst b/docs/source/05_raspberry_pi/pi_lesson31_pump.rst index 30f4ea2..c38fd7b 100644 --- a/docs/source/05_raspberry_pi/pi_lesson31_pump.rst +++ b/docs/source/05_raspberry_pi/pi_lesson31_pump.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson31_pump: Lesson 31: Centrifugal Pump diff --git a/docs/source/05_raspberry_pi/pi_lesson32_passive_buzzer.rst b/docs/source/05_raspberry_pi/pi_lesson32_passive_buzzer.rst index f5ced4c..21ead1d 100644 --- a/docs/source/05_raspberry_pi/pi_lesson32_passive_buzzer.rst +++ b/docs/source/05_raspberry_pi/pi_lesson32_passive_buzzer.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson32_passive_buzzer: Lesson 32: Passive Buzzer Module diff --git a/docs/source/05_raspberry_pi/pi_lesson33_servo.rst b/docs/source/05_raspberry_pi/pi_lesson33_servo.rst index f2f406b..efe7503 100644 --- a/docs/source/05_raspberry_pi/pi_lesson33_servo.rst +++ b/docs/source/05_raspberry_pi/pi_lesson33_servo.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson33_servo: Lesson 33: Servo Motor (SG90) diff --git a/docs/source/05_raspberry_pi/pi_lesson34_motor.rst b/docs/source/05_raspberry_pi/pi_lesson34_motor.rst index c83f722..318cb1a 100644 --- a/docs/source/05_raspberry_pi/pi_lesson34_motor.rst +++ b/docs/source/05_raspberry_pi/pi_lesson34_motor.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _pi_lesson34_motor: Lesson 34: TT Motor diff --git a/docs/source/05_raspberry_pi/raspberry_pi.rst b/docs/source/05_raspberry_pi/raspberry_pi.rst index 4867c5e..10f6eee 100644 --- a/docs/source/05_raspberry_pi/raspberry_pi.rst +++ b/docs/source/05_raspberry_pi/raspberry_pi.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - For Raspberry Pi ================================================== diff --git a/docs/source/05_raspberry_pi/raspberry_start/00_raspberyy_start.rst b/docs/source/05_raspberry_pi/raspberry_start/00_raspberyy_start.rst index b066d75..368e002 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/00_raspberyy_start.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/00_raspberyy_start.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _raspberry_start: Getting Started with Raspberry Pi diff --git a/docs/source/05_raspberry_pi/raspberry_start/01_what_do_we_need.rst b/docs/source/05_raspberry_pi/raspberry_start/01_what_do_we_need.rst index 4dc2135..31ff293 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/01_what_do_we_need.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/01_what_do_we_need.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _what_do_we_need: What Do We Need? diff --git a/docs/source/05_raspberry_pi/raspberry_start/02_installing_the_os.rst b/docs/source/05_raspberry_pi/raspberry_start/02_installing_the_os.rst index f5a64a0..21f428f 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/02_installing_the_os.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/02_installing_the_os.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _install_os: Write Raspberry Pi OS to SD Card diff --git a/docs/source/05_raspberry_pi/raspberry_start/03_a_remote_macosx.rst b/docs/source/05_raspberry_pi/raspberry_start/03_a_remote_macosx.rst index 3aa6f09..2efb437 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/03_a_remote_macosx.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/03_a_remote_macosx.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _remote_macosx: Mac OS X user diff --git a/docs/source/05_raspberry_pi/raspberry_start/03_b_remote_windows.rst b/docs/source/05_raspberry_pi/raspberry_start/03_b_remote_windows.rst index f5a331c..20abf99 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/03_b_remote_windows.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/03_b_remote_windows.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _remote_windows: Windows Users diff --git a/docs/source/05_raspberry_pi/raspberry_start/03_c_remote_linux.rst b/docs/source/05_raspberry_pi/raspberry_start/03_c_remote_linux.rst index e97a7d2..c033c36 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/03_c_remote_linux.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/03_c_remote_linux.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - For Linux/Unix Users ========================== diff --git a/docs/source/05_raspberry_pi/raspberry_start/03_set_up_your_raspberry_pi.rst b/docs/source/05_raspberry_pi/raspberry_start/03_set_up_your_raspberry_pi.rst index 58e6874..4e9e204 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/03_set_up_your_raspberry_pi.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/03_set_up_your_raspberry_pi.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _set_up_your_raspberry_pi: Set up Your Raspberry Pi diff --git a/docs/source/05_raspberry_pi/raspberry_start/04_check_the_gpiozero_python.rst b/docs/source/05_raspberry_pi/raspberry_start/04_check_the_gpiozero_python.rst index 574aca9..c489d98 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/04_check_the_gpiozero_python.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/04_check_the_gpiozero_python.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - Check the ``GPIO Zero`` ================================= diff --git a/docs/source/05_raspberry_pi/raspberry_start/05_quick_guide_raspberry_pi.rst b/docs/source/05_raspberry_pi/raspberry_start/05_quick_guide_raspberry_pi.rst index d0ba40c..16e0d3c 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/05_quick_guide_raspberry_pi.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/05_quick_guide_raspberry_pi.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - How to download and run the Code ================================= diff --git a/docs/source/05_raspberry_pi/raspberry_start/06_configuration.rst b/docs/source/05_raspberry_pi/raspberry_start/06_configuration.rst index c0174eb..b076300 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/06_configuration.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/06_configuration.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - Configuring Your Raspberry Pi ================================= diff --git a/docs/source/05_raspberry_pi/raspberry_start/07_install_blinka.rst b/docs/source/05_raspberry_pi/raspberry_start/07_install_blinka.rst index 1b8b680..9fb1875 100644 --- a/docs/source/05_raspberry_pi/raspberry_start/07_install_blinka.rst +++ b/docs/source/05_raspberry_pi/raspberry_start/07_install_blinka.rst @@ -1,17 +1,3 @@ -.. note:: - - Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. - - **Why Join?** - - - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - - **Special Discounts**: Enjoy exclusive discounts on our newest products. - - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. - - 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! - .. _install_blinka: Insatll ``Adafruit_Blinka`` (CircuitPython) - Optional diff --git a/docs/source/05_raspberry_pi/strip14.sh b/docs/source/05_raspberry_pi/strip14.sh new file mode 100755 index 0000000..9cc2d03 --- /dev/null +++ b/docs/source/05_raspberry_pi/strip14.sh @@ -0,0 +1,15 @@ +#!/bin/zsh + +for f in *.rst; do + # Skip if no .rst files exist + [[ -e "$f" ]] || continue + + # Create a temp file + tmp="${f}.tmp" + + # Remove the first 14 lines and write the rest to the temp file + tail -n +15 "$f" > "$tmp" + + # Replace the original file + mv "$tmp" "$f" +done diff --git a/docs/uv.lock b/docs/uv.lock new file mode 100644 index 0000000..1044fef --- /dev/null +++ b/docs/uv.lock @@ -0,0 +1,380 @@ +version = 1 +requires-python = ">=3.12" + +[[package]] +name = "alabaster" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929 }, +] + +[[package]] +name = "babel" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, +] + +[[package]] +name = "certifi" +version = "2025.11.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438 }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425 }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162 }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558 }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497 }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240 }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471 }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864 }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647 }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110 }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839 }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667 }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535 }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816 }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694 }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131 }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390 }, + { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091 }, + { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936 }, + { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180 }, + { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346 }, + { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874 }, + { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076 }, + { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601 }, + { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376 }, + { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825 }, + { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583 }, + { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366 }, + { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300 }, + { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465 }, + { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404 }, + { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092 }, + { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408 }, + { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746 }, + { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889 }, + { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641 }, + { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779 }, + { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035 }, + { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542 }, + { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524 }, + { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395 }, + { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680 }, + { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045 }, + { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687 }, + { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014 }, + { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044 }, + { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940 }, + { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104 }, + { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743 }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402 }, +] + +[[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 = "docs" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "sphinx" }, + { name = "sphinx-copybutton" }, + { name = "sphinx-rtd-theme" }, +] + +[package.metadata] +requires-dist = [ + { name = "sphinx", specifier = ">=9.0.0" }, + { name = "sphinx-copybutton", specifier = ">=0.5.2" }, + { name = "sphinx-rtd-theme", specifier = ">=0.5.1" }, +] + +[[package]] +name = "docutils" +version = "0.22.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d9/02/111134bfeb6e6c7ac4c74594e39a59f6c0195dc4846afbeac3cba60f1927/docutils-0.22.3.tar.gz", hash = "sha256:21486ae730e4ca9f622677b1412b879af1791efcfba517e4c6f60be543fc8cdd", size = 2290153 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl", hash = "sha256:bd772e4aca73aff037958d44f2be5229ded4c09927fcf8690c577b66234d6ceb", size = 633032 }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008 }, +] + +[[package]] +name = "imagesize" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769 }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615 }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020 }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332 }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947 }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962 }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760 }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529 }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015 }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540 }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105 }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906 }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622 }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374 }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980 }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990 }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784 }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588 }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041 }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543 }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113 }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911 }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658 }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066 }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639 }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569 }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284 }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801 }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769 }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642 }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612 }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200 }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973 }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619 }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029 }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408 }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005 }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048 }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821 }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606 }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043 }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747 }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341 }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073 }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661 }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069 }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670 }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598 }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261 }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835 }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733 }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672 }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819 }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426 }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146 }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217 }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738 }, +] + +[[package]] +name = "roman-numerals" +version = "3.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/5b/1bcda2c6a8acec5b310dd70f732400827b96f05d815834f0f112b91b3539/roman_numerals-3.1.0.tar.gz", hash = "sha256:384e36fc1e8d4bd361bdb3672841faae7a345b3f708aae9895d074c878332551", size = 9069 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl", hash = "sha256:842ae5fd12912d62720c9aad8cab706e8c692556d01a38443e051ee6cc158d90", size = 7709 }, +] + +[[package]] +name = "snowballstemmer" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274 }, +] + +[[package]] +name = "sphinx" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils" }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "roman-numerals" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/be/43/448b5fe3c1dd02b1d5c8081ef9c47d166b34bcea1cbb83b608080f052397/sphinx-9.0.0.tar.gz", hash = "sha256:dc75216d69e00f170cb236eee17e66bcd89c4c2b5fe938ca8532fd7fe5abb23f", size = 8551885 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/8b/76e2a1ce12b915399365873eef2b1197da9d032c99e661a71fd7e1490333/sphinx-9.0.0-py3-none-any.whl", hash = "sha256:3442bf635d378da2ba4e88aa8496f3a61b2d59ef145aeaf34353ab93fd79f1bf", size = 3762800 }, +] + +[[package]] +name = "sphinx-copybutton" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e", size = 13343 }, +] + +[[package]] +name = "sphinx-rtd-theme" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/e5/0d55470572e0a0934c600c4cda0c98209883aaeb45ff6bfbadcda7006255/sphinx_rtd_theme-0.5.1.tar.gz", hash = "sha256:eda689eda0c7301a80cf122dad28b1861e5605cbf455558f3775e1e8200e83a5", size = 2774928 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/81/d5af3a50a45ee4311ac2dac5b599d69f68388401c7a4ca902e0e450a9f94/sphinx_rtd_theme-0.5.1-py2.py3-none-any.whl", hash = "sha256:fa6bebd5ab9a73da8e102509a86f3fcc36dec04a0b52ea80e5a033b2aba00113", size = 2793140 }, +] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300 }, +] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530 }, +] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705 }, +] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071 }, +] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743 }, +] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072 }, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 }, +]