Metadata-Version: 2.1
Name: circuitgraph
Version: 0.0.3
Summary: Tools for working with boolean circuits as graphs.
Home-page: https://github.com/circuitgraph/circuitgraph
Author: Ruben Purdy, Joseph Sweeney
Author-email: rpurdy@andrew.cmu.edu, joesweeney@cmu.edu
License: UNKNOWN
Project-URL: Documentation, https://circuitgraph.github.io/circuitgraph/
Project-URL: Source, https://github.com/circuitgraph/circuitgraph
Description: <img src="https://raw.githubusercontent.com/circuitgraph/circuitgraph/master/docs/circuitgraph.png" width="300">
        
        # CircuitGraph
        
        [![Build Status](https://travis-ci.com/circuitgraph/circuitgraph.svg?branch=master)](https://travis-ci.com/circuitgraph/circuitgraph)
        [![codecov](https://codecov.io/gh/circuitgraph/circuitgraph/branch/master/graph/badge.svg)](https://codecov.io/gh/circuitgraph/circuitgraph)
        [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
        [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
        
        [**CircuitGraph**](https://circuitgraph.github.io/circuitgraph/) is a library for working with hardware designs as graphs. CircuitGraph provides an interface to do this built on [NetworkX](https://networkx.github.io), along with integrations with other useful tools such as sat solvers and the [Yosys](http://www.clifford.at/yosys/) synthesis tool, and input/output to verilog.
        
        ## Overview
        
        The `Circuit` class is at the core of the library and it is essentially a wrapper around a [NetworkX](https://networkx.github.io) graph object. This graph is accessable through the `graph` member variable of `Circuit` and can be used as an entrypoint to the robust NetworkX API.
        
        Here's a simple example of reading in a verilog file, adding a node to the graph, and writing back to a new file.
        
        ```python
        import circuitgraph as cg
        
        c = cg.from_file('/path/to/circuit.v')
        # Add an AND gate to the circuit that takes as input nets o0, o1, o2, o3
        c.add('g', 'and', fanin=[f'o{i}' for i in range(4)])
        cg.to_file(c, '/path/to/output/circuit.v')
        ```
        
        The documentation can be found [here](https://circuitgraph.github.io/circuitgraph/).
        
        ## Installation
        
        CircuitGraph requires Python3. 
        The easiest way to install is via PyPi:
        ```shell
        pip install circuitgraph
        ```
        To install from the release, download and:
        ```shell
        pip install circuitgraph-<release>.tar.gz
        ```
        
        Finally, to install in-place with the source, use:
        ```shell
        cd <install location>
        git clone https://github.com/circuitgraph/circuitgraph.git
        cd circuitgraph
        pip install -r requirements.txt
        pip install -e .
        ```
        ### Optional Packages
        
        In addition to the packages enumerated in `requirements.txt`, there are a few tools you can install to enable additional functionality.
        
        If you would like to perform simulation you can install [Verilator](https://www.veripool.org/wiki/verilator) which is interfaced with using [PyVerilator](https://github.com/maltanar/pyverilator). Note that PyVerilator is a little finicky, and we are looking into better solutions for simulation.
        
        If you would like to perform synthesis you can install either Cadence Genus or [Yosys](http://www.clifford.at/yosys/). If you're going to use Genus, you must provide the path to a synthesis library to use by setting the `CIRCUITGRAPH_GENUS_LIBRARY_PATH` variable. 
        
        
        ## Developing
        
        CI Testing and coverage is setup using [Travis CI](https://travis-ci.org/) and [Codecov](https://codecov.io). 
         If you would like to generate coverage information locally, install coverage and codecov.
        ```shell
        pip install coverage codecov 
        make coverage
        ```
        
        Documentation is built using pdoc3.
        ```shell
        pip install pdoc3
        make doc
        ```
        
        Tests are run using the builtin unittest framework.
        ```shell
        make test
        ```
        
        Code should be formatted using [black](https://black.readthedocs.io/en/stable/). 
        [Pre-commit](https://pre-commit.com) is used to automatically run black on commit. 
        ```shell
        pip install black pre-commit
        pre-commit install
        ```
        
        ## Citation
        
        Please check back soon.
        
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
