nhandu


Namenhandu JSON
Version 0.3.0 PyPI version JSON
download
home_pageNone
SummaryA literate programming tool for Python that weaves code and documentation into scientific reports
upload_time2025-10-28 06:19:51
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords literate-programming scientific-computing reports documentation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# Nhandu 

> *Nhandu* (/ɲãndu/, approximately "NYAN-doo") means "spider" in many Tupi-Guarani languages, a fitting name for a tool that weaves together code and documentation, much like Knuth's original vision of literate programming.

**Literate programming for Python: Write executable documents in plain `.py` files.**

Nhandu transforms ordinary Python files with markdown comments into beautiful, reproducible reports. It's lighter than Jupyter, simpler than Quarto, and perfectly git-friendly.

## Why Nhandu?

Contemporary literate programming in Python faces a documentation dilemma:

- **Jupyter notebooks** are powerful but use JSON format (git diffs are messy), require a browser/server, and mix code with metadata
- **Quarto** is feature-rich but complex, with many configuration options and a learning curve
- **Pweave** has not been maintained for many years and is incompatible with currently supported Python versions.
- **Traditional scripts** lack integrated documentation and visualization

Nhandu offers a different solution:

- Write literate programs in **normal `.py` files**: no special format, just comments
- **Perfect git diffs**: plain text, not JSON, no timestamps, no hashes
- **No server or browser** required—just run the command
- **Zero configuration needed**: smart defaults get you started immediately
- **Python-native**: designed specifically for the Python ecosystem

## Quick Start

### Your First Literate Program

Create a file `analysis.py`:

```python
#' # My First Analysis
#'
#' This is a literate Python program. Lines starting with `#'` are markdown.
#' Everything else is regular Python code.

import numpy as np

# Generate some data
data = np.random.normal(0, 1, 1000)

#' ## Results
#'
#' Let's compute some statistics:

print(f"Mean: {data.mean():.3f}")
print(f"Std Dev: {data.std():.3f}")

#' The data looks normally distributed, as expected.
```

### Generate Your Report

```bash
nhandu analysis.py
```

This creates `analysis.out.py` (markdown format) with your code, output, and documentation.

For HTML output:
```bash
nhandu analysis.py --format html  # Creates analysis.html
```

## Features

### Smart Output Capture

Nhandu automatically captures:

- **Print statements** and stdout
- **Matplotlib plots** (no `plt.show()` needed!)
- **Expression results** (like Jupyter cells)
- **Rich objects** (DataFrames render as tables in HTML)

### Syntax Highlighting

Server-side syntax highlighting with 50+ themes via Pygments. Popular themes include: `github-dark` (default), `monokai`, `dracula`, `one-dark`, `vs`, and `solarized-light`.

### Multiple Output Formats

Markdown output can be converted to PDF, Word, LaTeX, and more using [pandoc](https://pandoc.org/) or similar tools. Native HTML support is implemented out-of-the-box.

### Configuration (Optional)

Power users can customize their reports via YAML frontmatter:

```python
#' ---
#' title: My Scientific Report
#' output: html
#' code_theme: dracula
#' plot_dpi: 150
#' ---
#'
#' # Introduction
#' ...
```

It is also possible to use a configuration file (`nhandu.yaml`) or CLI arguments.

## How It Works

### The Python Literate Format

Nhandu uses a simple convention: lines starting with `#'` are markdown, everything else is Python code:

```python
#' # This is a markdown heading
#'
#' Any line starting with #' is treated as **markdown**.
#' You can use all standard markdown features.

# This is a regular Python comment
x = 42  # Regular code continues to work normally

#' Back to documentation. Variables persist across blocks:

print(f"x = {x}")
```

**Hidden code blocks** let you run setup code without cluttering your report:

```python
#| hide
import pandas as pd
import matplotlib.pyplot as plt
# Configuration code here—runs but doesn't appear in output
#|

#' Now let's analyze our data:
# This code WILL appear in the output
data = pd.read_csv("data.csv")
```

### Execution Model

- **Shared namespace**: All code blocks share the same Python environment
- **Sequential execution**: Blocks run in document order
- **Output capture**: stdout, plots, and expression results are all captured
- **Rich formatting**: Automatic handling of matplotlib figures, pandas DataFrames, and more

### Inline Code Evaluation

You can embed Python expressions directly within markdown text using inline code syntax:

- **`<%= expression %>`** - Evaluates the expression and displays the result
- **`<% statement %>`** - Executes code without displaying output

Example:

```python
#' # Sales Report
#'
#' <% import datetime %>
#' Report generated on <%= datetime.date.today() %>.

total_sales = 45000
target = 50000

#' We achieved <%= total_sales %> in sales.
#' That's <%= (total_sales/target)*100 %>% of our target.
#'
#' <% status = "on track" if total_sales >= target * 0.9 else "behind" %>
#' Status: We are <%= status %>.
```

Inline code shares the same namespace as regular code blocks, so you can reference variables, import modules, and perform calculations seamlessly within your documentation.

## Examples

Check out the [`docs/`](https://github.com/tresoldi/nhandu/tree/main/docs/) directory for complete demonstrations:

- **[01_hello_world.py](https://github.com/tresoldi/nhandu/tree/main/docs/01_hello_world.py)** - Basic syntax and concepts [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/01_hello_world.py.html)]
- **[02_data_analysis.py](https://github.com/tresoldi/nhandu/tree/main/docs/02_data_analysis.py)** - Working with data using standard library [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/02_data_analysis.py.html)]
- **[03_plotting.py](https://github.com/tresoldi/nhandu/tree/main/docs/03_plotting.py)** - Creating visualizations with matplotlib [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/03_plotting.py.html)]
- **[04_scientific_computation.py](https://github.com/tresoldi/nhandu/tree/main/docs/04_scientific_computation.py)** - Numerical computing with NumPy [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/04_scientific_computation.py.html)]
- **[05_advanced_report.py](https://github.com/tresoldi/nhandu/tree/main/docs/05_advanced_report.py)** - Complex report with pandas and multiple visualizations [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/05_advanced_report.py.html)]
- **[06_inline_code.py](https://github.com/tresoldi/nhandu/tree/main/docs/06_inline_code.py)** - Inline code evaluation with `<%= %>` syntax [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/06_inline_code.py.html)]

## Installation & Usage

### Install from PyPI

```bash
pip install nhandu
```

### Install from Source

```bash
git clone https://github.com/tresoldi/nhandu.git
cd nhandu
pip install -e .
```

### Basic Usage

```bash
nhandu document.py                       # Process → document.out.py (markdown)
nhandu document.py --format html         # Process → document.html
nhandu document.py -o report.html        # Specify output file
nhandu document.py --format md           # Output as markdown (default)
nhandu document.py --code-theme monokai  # Custom syntax theme
nhandu document.py --verbose             # Show processing details
```

### Jupyter Notebook Integration

Nhandu can import Jupyter notebooks (`.ipynb`) and export to them, bridging the gap between notebook-based and literate programming workflows:

**Import from Jupyter** (convert `.ipynb` → `.py`):

```bash
nhandu import-notebook notebook.ipynb -o document.py
```

This converts a Jupyter notebook to Nhandu's literate Python format:
- Markdown cells → `#'` markdown comments
- Code cells → Regular Python code
- Hidden cells (with `hide` tag) → `#| hide` blocks
- Notebook metadata → YAML frontmatter
- **Outputs are discarded** (can be regenerated by running the document)

**Export to Jupyter** (convert `.py` → `.ipynb`):

```bash
nhandu export-notebook document.py -o notebook.ipynb
```

This creates a Jupyter notebook from your literate Python file:
- `#'` comments → Markdown cells
- Regular code → Code cells
- `#| hide` blocks → Code cells with `hide` tag
- YAML frontmatter → Notebook metadata
- **No outputs by default** (symmetric with import; open in Jupyter to run cells)

**Optional: Execute notebook after export**:

```bash
nhandu export-notebook document.py -o notebook.ipynb --execute
```

**Installation note**: Jupyter conversion requires the optional `jupyter` dependency:

```bash
pip install nhandu[jupyter]
```

**Round-trip compatibility**: Import and export use best-effort preservation of structure and metadata. While not perfectly lossless, they maintain document integrity for practical workflows.

### CLI Options

**Main command (process documents)**:

```
nhandu [OPTIONS] INPUT

Options:
  -o, --output PATH           Output file path
  --format {html,md}          Output format (default: html)
  --config PATH               Configuration file (YAML)
  --working-dir PATH          Working directory for code execution
  --timeout SECONDS           Execution timeout
  --code-theme THEME          Syntax highlighting theme
  --verbose, -v               Enable verbose output
  --version                   Show version
  --help                      Show help message
```

**Jupyter notebook commands**:

```
nhandu import-notebook INPUT -o OUTPUT [OPTIONS]

  Import Jupyter notebook to Nhandu format

Options:
  -o, --output PATH           Output Python file (required)
  --verbose, -v               Enable verbose output

nhandu export-notebook INPUT -o OUTPUT [OPTIONS]

  Export Nhandu document to Jupyter notebook

Options:
  -o, --output PATH           Output notebook file (required)
  --execute                   Execute notebook after creation
  --kernel KERNEL             Kernel name (default: python3)
  --verbose, -v               Enable verbose output
```

### Roadmap

Current priorities for future releases:

- [ ] Native PDF output support
- [ ] Custom HTML templates (Jinja2)
- [ ] Watch mode for live development
- [ ] Rich display for more object types (NumPy arrays, scikit-learn models)
- [ ] Caching system for faster re-renders

See [ROADMAP_v0.2.0.md](ROADMAP_v0.2.0.md) for detailed feature planning and [issues](https://github.com/tresoldi/nhandu/issues) to suggest features.

## Project Information

### Citation and Acknowledgements

If you use Nhandu in your research, please cite:

```bibtex
@software{tresoldi2025nhandu,
  author = {Tresoldi, Tiago},
  title = {Nhandu: Literate Programming for Python},
  year = {2025},
  publisher = {Department of Linguistics and Philology, Uppsala University},
  address = {Uppsala, Sweden},
  url = {https://github.com/tresoldi/nhandu},
  orcid = {0000-0002-2863-1467}
}
```

The earliest stages of development took place within the context of
the [Cultural Evolution of Texts](https://github.com/evotext/) project, with funding from the
[Riksbankens Jubileumsfond](https://www.rj.se/) (grant agreement ID:
[MXM19-1087:1](https://www.rj.se/en/anslag/2019/cultural-evolution-of-texts/)).

### License

MIT License - see [LICENSE](LICENSE) file for details.

### Acknowledgments

Nhandu is inspired by:
- Donald Knuth's original [literate programming](https://en.wikipedia.org/wiki/Literate_programming) vision
- [knitr](https://yihui.org/knitr/) and R Markdown's approach to reproducible research
- [Jupyter](https://jupyter.org/)'s interactive computing paradigm
- [Quarto](https://quarto.org/)'s modern scientific publishing tools
- [Pweave](http://mpastell.com/pweave/)'s Python implementation (though no longer maintained)

Special thanks to the scientific Python community for building the ecosystem that makes tools like this possible.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "nhandu",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "literate-programming, scientific-computing, reports, documentation",
    "author": null,
    "author_email": "Tiago Tresoldi <tiago.tresoldi@lingfil.uu.se>",
    "download_url": "https://files.pythonhosted.org/packages/2c/a8/8d126e590de4af3be79e5d10686391e6c9ae025bf405570ba19e8657d371/nhandu-0.3.0.tar.gz",
    "platform": null,
    "description": "\n# Nhandu \n\n> *Nhandu* (/\u0272\u00e3ndu/, approximately \"NYAN-doo\") means \"spider\" in many Tupi-Guarani languages, a fitting name for a tool that weaves together code and documentation, much like Knuth's original vision of literate programming.\n\n**Literate programming for Python: Write executable documents in plain `.py` files.**\n\nNhandu transforms ordinary Python files with markdown comments into beautiful, reproducible reports. It's lighter than Jupyter, simpler than Quarto, and perfectly git-friendly.\n\n## Why Nhandu?\n\nContemporary literate programming in Python faces a documentation dilemma:\n\n- **Jupyter notebooks** are powerful but use JSON format (git diffs are messy), require a browser/server, and mix code with metadata\n- **Quarto** is feature-rich but complex, with many configuration options and a learning curve\n- **Pweave** has not been maintained for many years and is incompatible with currently supported Python versions.\n- **Traditional scripts** lack integrated documentation and visualization\n\nNhandu offers a different solution:\n\n- Write literate programs in **normal `.py` files**: no special format, just comments\n- **Perfect git diffs**: plain text, not JSON, no timestamps, no hashes\n- **No server or browser** required\u2014just run the command\n- **Zero configuration needed**: smart defaults get you started immediately\n- **Python-native**: designed specifically for the Python ecosystem\n\n## Quick Start\n\n### Your First Literate Program\n\nCreate a file `analysis.py`:\n\n```python\n#' # My First Analysis\n#'\n#' This is a literate Python program. Lines starting with `#'` are markdown.\n#' Everything else is regular Python code.\n\nimport numpy as np\n\n# Generate some data\ndata = np.random.normal(0, 1, 1000)\n\n#' ## Results\n#'\n#' Let's compute some statistics:\n\nprint(f\"Mean: {data.mean():.3f}\")\nprint(f\"Std Dev: {data.std():.3f}\")\n\n#' The data looks normally distributed, as expected.\n```\n\n### Generate Your Report\n\n```bash\nnhandu analysis.py\n```\n\nThis creates `analysis.out.py` (markdown format) with your code, output, and documentation.\n\nFor HTML output:\n```bash\nnhandu analysis.py --format html  # Creates analysis.html\n```\n\n## Features\n\n### Smart Output Capture\n\nNhandu automatically captures:\n\n- **Print statements** and stdout\n- **Matplotlib plots** (no `plt.show()` needed!)\n- **Expression results** (like Jupyter cells)\n- **Rich objects** (DataFrames render as tables in HTML)\n\n### Syntax Highlighting\n\nServer-side syntax highlighting with 50+ themes via Pygments. Popular themes include: `github-dark` (default), `monokai`, `dracula`, `one-dark`, `vs`, and `solarized-light`.\n\n### Multiple Output Formats\n\nMarkdown output can be converted to PDF, Word, LaTeX, and more using [pandoc](https://pandoc.org/) or similar tools. Native HTML support is implemented out-of-the-box.\n\n### Configuration (Optional)\n\nPower users can customize their reports via YAML frontmatter:\n\n```python\n#' ---\n#' title: My Scientific Report\n#' output: html\n#' code_theme: dracula\n#' plot_dpi: 150\n#' ---\n#'\n#' # Introduction\n#' ...\n```\n\nIt is also possible to use a configuration file (`nhandu.yaml`) or CLI arguments.\n\n## How It Works\n\n### The Python Literate Format\n\nNhandu uses a simple convention: lines starting with `#'` are markdown, everything else is Python code:\n\n```python\n#' # This is a markdown heading\n#'\n#' Any line starting with #' is treated as **markdown**.\n#' You can use all standard markdown features.\n\n# This is a regular Python comment\nx = 42  # Regular code continues to work normally\n\n#' Back to documentation. Variables persist across blocks:\n\nprint(f\"x = {x}\")\n```\n\n**Hidden code blocks** let you run setup code without cluttering your report:\n\n```python\n#| hide\nimport pandas as pd\nimport matplotlib.pyplot as plt\n# Configuration code here\u2014runs but doesn't appear in output\n#|\n\n#' Now let's analyze our data:\n# This code WILL appear in the output\ndata = pd.read_csv(\"data.csv\")\n```\n\n### Execution Model\n\n- **Shared namespace**: All code blocks share the same Python environment\n- **Sequential execution**: Blocks run in document order\n- **Output capture**: stdout, plots, and expression results are all captured\n- **Rich formatting**: Automatic handling of matplotlib figures, pandas DataFrames, and more\n\n### Inline Code Evaluation\n\nYou can embed Python expressions directly within markdown text using inline code syntax:\n\n- **`<%= expression %>`** - Evaluates the expression and displays the result\n- **`<% statement %>`** - Executes code without displaying output\n\nExample:\n\n```python\n#' # Sales Report\n#'\n#' <% import datetime %>\n#' Report generated on <%= datetime.date.today() %>.\n\ntotal_sales = 45000\ntarget = 50000\n\n#' We achieved <%= total_sales %> in sales.\n#' That's <%= (total_sales/target)*100 %>% of our target.\n#'\n#' <% status = \"on track\" if total_sales >= target * 0.9 else \"behind\" %>\n#' Status: We are <%= status %>.\n```\n\nInline code shares the same namespace as regular code blocks, so you can reference variables, import modules, and perform calculations seamlessly within your documentation.\n\n## Examples\n\nCheck out the [`docs/`](https://github.com/tresoldi/nhandu/tree/main/docs/) directory for complete demonstrations:\n\n- **[01_hello_world.py](https://github.com/tresoldi/nhandu/tree/main/docs/01_hello_world.py)** - Basic syntax and concepts [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/01_hello_world.py.html)]\n- **[02_data_analysis.py](https://github.com/tresoldi/nhandu/tree/main/docs/02_data_analysis.py)** - Working with data using standard library [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/02_data_analysis.py.html)]\n- **[03_plotting.py](https://github.com/tresoldi/nhandu/tree/main/docs/03_plotting.py)** - Creating visualizations with matplotlib [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/03_plotting.py.html)]\n- **[04_scientific_computation.py](https://github.com/tresoldi/nhandu/tree/main/docs/04_scientific_computation.py)** - Numerical computing with NumPy [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/04_scientific_computation.py.html)]\n- **[05_advanced_report.py](https://github.com/tresoldi/nhandu/tree/main/docs/05_advanced_report.py)** - Complex report with pandas and multiple visualizations [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/05_advanced_report.py.html)]\n- **[06_inline_code.py](https://github.com/tresoldi/nhandu/tree/main/docs/06_inline_code.py)** - Inline code evaluation with `<%= %>` syntax [[OUTPUT](https://htmlpreview.github.io/?https://github.com/tresoldi/nhandu/blob/main/docs/06_inline_code.py.html)]\n\n## Installation & Usage\n\n### Install from PyPI\n\n```bash\npip install nhandu\n```\n\n### Install from Source\n\n```bash\ngit clone https://github.com/tresoldi/nhandu.git\ncd nhandu\npip install -e .\n```\n\n### Basic Usage\n\n```bash\nnhandu document.py                       # Process \u2192 document.out.py (markdown)\nnhandu document.py --format html         # Process \u2192 document.html\nnhandu document.py -o report.html        # Specify output file\nnhandu document.py --format md           # Output as markdown (default)\nnhandu document.py --code-theme monokai  # Custom syntax theme\nnhandu document.py --verbose             # Show processing details\n```\n\n### Jupyter Notebook Integration\n\nNhandu can import Jupyter notebooks (`.ipynb`) and export to them, bridging the gap between notebook-based and literate programming workflows:\n\n**Import from Jupyter** (convert `.ipynb` \u2192 `.py`):\n\n```bash\nnhandu import-notebook notebook.ipynb -o document.py\n```\n\nThis converts a Jupyter notebook to Nhandu's literate Python format:\n- Markdown cells \u2192 `#'` markdown comments\n- Code cells \u2192 Regular Python code\n- Hidden cells (with `hide` tag) \u2192 `#| hide` blocks\n- Notebook metadata \u2192 YAML frontmatter\n- **Outputs are discarded** (can be regenerated by running the document)\n\n**Export to Jupyter** (convert `.py` \u2192 `.ipynb`):\n\n```bash\nnhandu export-notebook document.py -o notebook.ipynb\n```\n\nThis creates a Jupyter notebook from your literate Python file:\n- `#'` comments \u2192 Markdown cells\n- Regular code \u2192 Code cells\n- `#| hide` blocks \u2192 Code cells with `hide` tag\n- YAML frontmatter \u2192 Notebook metadata\n- **No outputs by default** (symmetric with import; open in Jupyter to run cells)\n\n**Optional: Execute notebook after export**:\n\n```bash\nnhandu export-notebook document.py -o notebook.ipynb --execute\n```\n\n**Installation note**: Jupyter conversion requires the optional `jupyter` dependency:\n\n```bash\npip install nhandu[jupyter]\n```\n\n**Round-trip compatibility**: Import and export use best-effort preservation of structure and metadata. While not perfectly lossless, they maintain document integrity for practical workflows.\n\n### CLI Options\n\n**Main command (process documents)**:\n\n```\nnhandu [OPTIONS] INPUT\n\nOptions:\n  -o, --output PATH           Output file path\n  --format {html,md}          Output format (default: html)\n  --config PATH               Configuration file (YAML)\n  --working-dir PATH          Working directory for code execution\n  --timeout SECONDS           Execution timeout\n  --code-theme THEME          Syntax highlighting theme\n  --verbose, -v               Enable verbose output\n  --version                   Show version\n  --help                      Show help message\n```\n\n**Jupyter notebook commands**:\n\n```\nnhandu import-notebook INPUT -o OUTPUT [OPTIONS]\n\n  Import Jupyter notebook to Nhandu format\n\nOptions:\n  -o, --output PATH           Output Python file (required)\n  --verbose, -v               Enable verbose output\n\nnhandu export-notebook INPUT -o OUTPUT [OPTIONS]\n\n  Export Nhandu document to Jupyter notebook\n\nOptions:\n  -o, --output PATH           Output notebook file (required)\n  --execute                   Execute notebook after creation\n  --kernel KERNEL             Kernel name (default: python3)\n  --verbose, -v               Enable verbose output\n```\n\n### Roadmap\n\nCurrent priorities for future releases:\n\n- [ ] Native PDF output support\n- [ ] Custom HTML templates (Jinja2)\n- [ ] Watch mode for live development\n- [ ] Rich display for more object types (NumPy arrays, scikit-learn models)\n- [ ] Caching system for faster re-renders\n\nSee [ROADMAP_v0.2.0.md](ROADMAP_v0.2.0.md) for detailed feature planning and [issues](https://github.com/tresoldi/nhandu/issues) to suggest features.\n\n## Project Information\n\n### Citation and Acknowledgements\n\nIf you use Nhandu in your research, please cite:\n\n```bibtex\n@software{tresoldi2025nhandu,\n  author = {Tresoldi, Tiago},\n  title = {Nhandu: Literate Programming for Python},\n  year = {2025},\n  publisher = {Department of Linguistics and Philology, Uppsala University},\n  address = {Uppsala, Sweden},\n  url = {https://github.com/tresoldi/nhandu},\n  orcid = {0000-0002-2863-1467}\n}\n```\n\nThe earliest stages of development took place within the context of\nthe [Cultural Evolution of Texts](https://github.com/evotext/) project, with funding from the\n[Riksbankens Jubileumsfond](https://www.rj.se/) (grant agreement ID:\n[MXM19-1087:1](https://www.rj.se/en/anslag/2019/cultural-evolution-of-texts/)).\n\n### License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n### Acknowledgments\n\nNhandu is inspired by:\n- Donald Knuth's original [literate programming](https://en.wikipedia.org/wiki/Literate_programming) vision\n- [knitr](https://yihui.org/knitr/) and R Markdown's approach to reproducible research\n- [Jupyter](https://jupyter.org/)'s interactive computing paradigm\n- [Quarto](https://quarto.org/)'s modern scientific publishing tools\n- [Pweave](http://mpastell.com/pweave/)'s Python implementation (though no longer maintained)\n\nSpecial thanks to the scientific Python community for building the ecosystem that makes tools like this possible.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A literate programming tool for Python that weaves code and documentation into scientific reports",
    "version": "0.3.0",
    "project_urls": {
        "Homepage": "https://github.com/tresoldi/nhandu",
        "Issues": "https://github.com/tresoldi/nhandu/issues"
    },
    "split_keywords": [
        "literate-programming",
        " scientific-computing",
        " reports",
        " documentation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a6bd6ba64f310f0a14539ea058704011e111be3e21e031fabe502fb865ba4f04",
                "md5": "23ed0a90579e8b5467c0b532c0e146a4",
                "sha256": "b4ae77ee32594ce259e978cf9db53f3d00e5ce8dfd2c01f99dd02193c4773395"
            },
            "downloads": -1,
            "filename": "nhandu-0.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "23ed0a90579e8b5467c0b532c0e146a4",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 25005,
            "upload_time": "2025-10-28T06:19:50",
            "upload_time_iso_8601": "2025-10-28T06:19:50.421487Z",
            "url": "https://files.pythonhosted.org/packages/a6/bd/6ba64f310f0a14539ea058704011e111be3e21e031fabe502fb865ba4f04/nhandu-0.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2ca88d126e590de4af3be79e5d10686391e6c9ae025bf405570ba19e8657d371",
                "md5": "10506d5713b16afa9f6ddd639fa01d9e",
                "sha256": "7b7e289f26c12d1e75b1df2fd4e2f56c007ada461ff46ff7fe66a0817a43de50"
            },
            "downloads": -1,
            "filename": "nhandu-0.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "10506d5713b16afa9f6ddd639fa01d9e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 42793,
            "upload_time": "2025-10-28T06:19:51",
            "upload_time_iso_8601": "2025-10-28T06:19:51.520098Z",
            "url": "https://files.pythonhosted.org/packages/2c/a8/8d126e590de4af3be79e5d10686391e6c9ae025bf405570ba19e8657d371/nhandu-0.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-28 06:19:51",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "tresoldi",
    "github_project": "nhandu",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "nhandu"
}
        
Elapsed time: 2.40009s