# WaveDromPy
This is a python module and command line fully compatible with [WaveDrom](https://wavedrom.com/), which is originally implemented in JavaScript. It is useful if you want to generate wavedrom diagrams from a python environment or simply don't want to install the _Node.js_ environment just to use WaveDrom as simple command line.
WaveDromPy is for example used in [sphinxcontrib-wavedrom](https://pypi.org/project/sphinxcontrib-wavedrom/) to render wavedrom for Sphinx documentation. While the original project renders the diagrams in JavaScript in the browser, WaveDromPy renders them to SVG files.
This tool is a direct translation of original Javascript file _WaveDrom.js_ to Python. No extra feature added. We seek to have it fully compatible.
The tool _WaveDromPy_ directly converts _WaveDrom_ compatible JSON files into SVG format.
[![Build Status](https://travis-ci.org/wallento/wavedrompy.svg?branch=master)](https://travis-ci.org/wallento/wavedrompy)
[![PyPI version](https://badge.fury.io/py/wavedrom.svg)](https://badge.fury.io/py/wavedrom)
## Installation
It is most easy to just install wavedrom via pip/pypi:
pip install wavedrom
Alternatively you can install the latest version from this repository:
pip install git+https://github.com/wallento/wavedrompy
or from your local copy:
pip install .
## Usage
You can either use the tool from Python:
import wavedrom
svg = wavedrom.render("""
{ "signal": [
{ "name": "CK", "wave": "P.......", "period": 2 },
{ "name": "CMD", "wave": "x.3x=x4x=x=x=x=x", "data": "RAS NOP CAS NOP NOP NOP NOP", "phase": 0.5 },
{ "name": "ADDR", "wave": "x.=x..=x........", "data": "ROW COL", "phase": 0.5 },
{ "name": "DQS", "wave": "z.......0.1010z." },
{ "name": "DQ", "wave": "z.........5555z.", "data": "D0 D1 D2 D3" }
]}""")
svg.saveas("demo1.svg")
This will render a waveform as:
![Example 1](https://raw.githubusercontent.com/wallento/wavedrompy/2e8568d50561f534133d036fee3bd35756f416d9/doc/demo1.svg?sanitize=true "Example 1")
You can find more examples [in the WaveDrom tutorial](https://wavedrom.com/tutorial.html).
A second feature is that WaveDrom can render logic circuit diagrams:
import wavedrom
svg = wavedrom.render("""
{ "assign":[
["out",
["|",
["&", ["~", "a"], "b"],
["&", ["~", "b"], "a"]
]
]
]}""")
svg.saveas("demo2.svg")
This will render a as:
![Example 2](https://raw.githubusercontent.com/wallento/wavedrompy/2e8568d50561f534133d036fee3bd35756f416d9/doc/demo2.svg?sanitize=true "Example 2")
You can find more examples [in the WaveDrom tutorial2](https://wavedrom.com/tutorial2.html).
Finally, wavedrom can draw registers as bitfields:
import wavedrom
svg = wavedrom.render("""
{"reg": [
{ "name": "IPO", "bits": 8, "attr": "RO" },
{ "bits": 7 },
{ "name": "<o>B</o><b>R<i>K</i></b>", "bits": 5, "attr": "RW", "type": 4 },
{ "name": "CPK", "bits": 1 },
{ "name": "Clear", "bits": 3 },
{ "bits": 8 }
]
]}""")
svg.saveas("demo3.svg")
This will render as:
![Example 3](https://raw.githubusercontent.com/wallento/wavedrompy/2e8568d50561f534133d036fee3bd35756f416d9/doc/demo3.svg?sanitize=true "Example 3")
This mode is documented as part of the [bit-field](https://www.npmjs.com/package/bit-field) JavaScript package.
Alternatively, WaveDromPy can be called from the command line:
wavedrompy --input input.json --svg output.svg
## Important notice
The command line uses Python's JSON interpreter that is more restrictive (coherent with the JSOC spec), while the JavaScript json is more relaxed:
* All strings have to be written between quotes (""),
* Extra comma (,) not supported at end of lists or dictionaries
## AsciiDoctor example
An _AsciiDoctor_ example is provided to directly generate timing diagrams from _AsciiDoctor_ formatted documents.
Raw data
{
"_id": null,
"home_page": "https://github.com/wallento/wavedrompy",
"name": "wavedrom",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "wavedrom svg",
"author": "Aliaksei Chapyzhenka, BreizhGeek, Kazuki Yamamoto, Stefan Wallentowitz",
"author_email": "k4zuki@github.com, stefan@wallentowitz.de",
"download_url": "https://files.pythonhosted.org/packages/be/71/6739e3abac630540aaeaaece4584c39f88b5f8658ce6ca517efec455e3de/wavedrom-2.0.3.post3.tar.gz",
"platform": null,
"description": "# WaveDromPy\n\nThis is a python module and command line fully compatible with [WaveDrom](https://wavedrom.com/), which is originally implemented in JavaScript. It is useful if you want to generate wavedrom diagrams from a python environment or simply don't want to install the _Node.js_ environment just to use WaveDrom as simple command line.\n\nWaveDromPy is for example used in [sphinxcontrib-wavedrom](https://pypi.org/project/sphinxcontrib-wavedrom/) to render wavedrom for Sphinx documentation. While the original project renders the diagrams in JavaScript in the browser, WaveDromPy renders them to SVG files.\n\nThis tool is a direct translation of original Javascript file _WaveDrom.js_ to Python. No extra feature added. We seek to have it fully compatible.\n\nThe tool _WaveDromPy_ directly converts _WaveDrom_ compatible JSON files into SVG format.\n\n[![Build Status](https://travis-ci.org/wallento/wavedrompy.svg?branch=master)](https://travis-ci.org/wallento/wavedrompy)\n[![PyPI version](https://badge.fury.io/py/wavedrom.svg)](https://badge.fury.io/py/wavedrom)\n\n## Installation\n\nIt is most easy to just install wavedrom via pip/pypi:\n\n pip install wavedrom\n \nAlternatively you can install the latest version from this repository:\n\n pip install git+https://github.com/wallento/wavedrompy\n \nor from your local copy:\n\n pip install .\n\n## Usage\n\nYou can either use the tool from Python:\n\n import wavedrom\n svg = wavedrom.render(\"\"\"\n { \"signal\": [\n { \"name\": \"CK\", \"wave\": \"P.......\", \"period\": 2 },\n { \"name\": \"CMD\", \"wave\": \"x.3x=x4x=x=x=x=x\", \"data\": \"RAS NOP CAS NOP NOP NOP NOP\", \"phase\": 0.5 },\n { \"name\": \"ADDR\", \"wave\": \"x.=x..=x........\", \"data\": \"ROW COL\", \"phase\": 0.5 },\n { \"name\": \"DQS\", \"wave\": \"z.......0.1010z.\" },\n { \"name\": \"DQ\", \"wave\": \"z.........5555z.\", \"data\": \"D0 D1 D2 D3\" }\n ]}\"\"\")\n svg.saveas(\"demo1.svg\")\n \nThis will render a waveform as:\n\n![Example 1](https://raw.githubusercontent.com/wallento/wavedrompy/2e8568d50561f534133d036fee3bd35756f416d9/doc/demo1.svg?sanitize=true \"Example 1\")\n\nYou can find more examples [in the WaveDrom tutorial](https://wavedrom.com/tutorial.html).\n\nA second feature is that WaveDrom can render logic circuit diagrams:\n\n import wavedrom\n svg = wavedrom.render(\"\"\"\n { \"assign\":[\n [\"out\",\n [\"|\",\n [\"&\", [\"~\", \"a\"], \"b\"],\n [\"&\", [\"~\", \"b\"], \"a\"]\n ]\n ]\n ]}\"\"\")\n svg.saveas(\"demo2.svg\")\n \nThis will render a as:\n\n![Example 2](https://raw.githubusercontent.com/wallento/wavedrompy/2e8568d50561f534133d036fee3bd35756f416d9/doc/demo2.svg?sanitize=true \"Example 2\")\n\nYou can find more examples [in the WaveDrom tutorial2](https://wavedrom.com/tutorial2.html).\n\nFinally, wavedrom can draw registers as bitfields:\n\n import wavedrom\n svg = wavedrom.render(\"\"\"\n {\"reg\": [\n { \"name\": \"IPO\", \"bits\": 8, \"attr\": \"RO\" },\n { \"bits\": 7 },\n { \"name\": \"<o>B</o><b>R<i>K</i></b>\", \"bits\": 5, \"attr\": \"RW\", \"type\": 4 },\n { \"name\": \"CPK\", \"bits\": 1 },\n { \"name\": \"Clear\", \"bits\": 3 },\n { \"bits\": 8 }\n ]\n ]}\"\"\")\n svg.saveas(\"demo3.svg\")\n\n \nThis will render as:\n\n![Example 3](https://raw.githubusercontent.com/wallento/wavedrompy/2e8568d50561f534133d036fee3bd35756f416d9/doc/demo3.svg?sanitize=true \"Example 3\")\n\nThis mode is documented as part of the [bit-field](https://www.npmjs.com/package/bit-field) JavaScript package.\n\nAlternatively, WaveDromPy can be called from the command line:\n\n wavedrompy --input input.json --svg output.svg\n\n## Important notice\n\nThe command line uses Python's JSON interpreter that is more restrictive (coherent with the JSOC spec), while the JavaScript json is more relaxed:\n\n * All strings have to be written between quotes (\"\"),\n * Extra comma (,) not supported at end of lists or dictionaries\n \n## AsciiDoctor example\n\nAn _AsciiDoctor_ example is provided to directly generate timing diagrams from _AsciiDoctor_ formatted documents.\n\n",
"bugtrack_url": null,
"license": "",
"summary": "WaveDrom compatible python command line",
"version": "2.0.3.post3",
"project_urls": {
"Homepage": "https://github.com/wallento/wavedrompy"
},
"split_keywords": [
"wavedrom",
"svg"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "be716739e3abac630540aaeaaece4584c39f88b5f8658ce6ca517efec455e3de",
"md5": "1fa386c34d9b6b59ba5e0b0556d5939b",
"sha256": "327b4d5dca593c81257c202fea516f7a908747fb11527c359f034f5b7af7f47b"
},
"downloads": -1,
"filename": "wavedrom-2.0.3.post3.tar.gz",
"has_sig": false,
"md5_digest": "1fa386c34d9b6b59ba5e0b0556d5939b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 137737,
"upload_time": "2022-05-27T11:53:09",
"upload_time_iso_8601": "2022-05-27T11:53:09.675681Z",
"url": "https://files.pythonhosted.org/packages/be/71/6739e3abac630540aaeaaece4584c39f88b5f8658ce6ca517efec455e3de/wavedrom-2.0.3.post3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2022-05-27 11:53:09",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "wallento",
"github_project": "wavedrompy",
"travis_ci": true,
"coveralls": false,
"github_actions": false,
"tox": true,
"lcname": "wavedrom"
}