<img src="logos/logo.png" width="278" height="100">

# B-ASIC - Better ASIC Toolbox

B-ASIC is an ASIC toolbox for Python 3 that simplifies circuit design and optimization.

The latest documentation can be viewed at: https://da.gitlab-pages.liu.se/B-ASIC/index.html

## Development

How to build and debug the library during development.

### Prerequisites

The following packages are required in order to build the library:

-   [Python](https://python.org/) 3.8+
-   Python dependencies (install with `pip install -r requirements.txt` or they will be installed as part of the
    installation process):
    -   [Graphviz](https://graphviz.org/)
    -   [Matplotlib](https://matplotlib.org/)
    -   [NumPy](https://numpy.org/)
    -   [QtPy](https://github.com/spyder-ide/qtpy)
    -   [setuptools_scm](https://github.com/pypa/setuptools_scm/)
    -   [NetworkX](https://networkx.org/)
-   Qt 5 or 6, with Python bindings, one of:
    - pyside2
    - pyqt5
    - pyside6
    - pyqt6

To build a binary distribution, the following additional packages are required:

-   Python:
    -   wheel

To run the test suite, the following additional packages are required:

-   Python (install with `pip install -r requirements_test.txt`):
    -   [pytest](https://pytest.org/)
    -   [pytest-qt](https://pytest-qt.readthedocs.io/)
    -   [pytest-mpl](https://github.com/matplotlib/pytest-mpl/)
    -   [pytest-cov](https://pytest-cov.readthedocs.io/en/latest/) (for testing with coverage)
    -   [pytest-xvfb](https://github.com/The-Compiler/pytest-xvfb) (for testing without showing windows on Linux, you will also need to install [xvfb](https://www.x.org/releases/X11R7.6/doc/man/man1/Xvfb.1.xhtml))
    -   [pytest-xdist](https://pytest-xdist.readthedocs.io/) (for parallel testing)

To generate the documentation, the following additional packages are required:

-   Python (install with `pip install -r requirements_doc.txt`):
    -   [Sphinx](https://www.sphinx-doc.org/)
    -   [Furo](https://pradyunsg.me/furo/)
    -   [numpydoc](https://numpydoc.readthedocs.io/)
    -   [Sphinx-Gallery](https://sphinx-gallery.github.io/)
    -   [mplsignal](https://mplsignal.readthedocs.io/)
    -   [jupyters-sphinx](https://jupyter-sphinx.readthedocs.io/)

### Using setuptools to create a package

How to create a package using setuptools that can be installed using pip.

#### Setup (Binary distribution)

In `B-ASIC`:

```
python3 setup.py bdist_wheel
```

The output gets written to `B-ASIC/dist/b_asic-<version>-<python_tag>-<abi_tag>-<platform_tag>.whl`.

#### Setup (Source distribution)

In `B-ASIC`:

```
python3 setup.py sdist
```

The output gets written to `B-ASIC/dist/b-asic-<version>.tar.gz`.

#### Installation (Binary distribution)

In `B-ASIC/dist`:

```
pip install b_asic-<version>-<python_tag>-<abi_tag>-<platform_tag>.whl
```

#### Installation (Source distribution)

In `B-ASIC/dist`:

```
pip install b-asic-<version>.tar.gz
```

### Running tests

How to run the tests using pytest in a virtual environment.

#### Linux/OS X

In `B-ASIC`:

```
python3 -m venv env
source env/bin/activate
pip install .
pytest
```

#### Windows

In `B-ASIC` (as admin):

```
python3 -m venv env
.\env\Scripts\activate.bat
pip install .
pytest
```

#### Test with coverage

```
pytest --cov=b_asic --cov-report=html test
```

#### Test including plots

```
pytest --mpl
```


### Generating documentation

```
sphinx-build -b html docs_sphinx docs_sphinx/_build
```
or in `B-ASIC/docs_sphinx`:
```
make html
```

The output gets written to `B-ASIC/docs_sphinx/_build`.

## Usage

How to build and use the library as a user.

### Installation

```
pip install .
```

### Importing

```
python3
>>> import b_asic as asic
>>> help(asic)
```

## License

B-ASIC is distributed under the MIT license.
See the included LICENSE file for more information.