dmppl 0.2.0
Dave McEwan's Personal Python Library
Requires Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4


dmppl - Dave McEwan's Personal Python Library
=============================================

Library is split into several modules:

  - base - Useful in almost every project.
  - color - Color (colour in English) related stuff.
  - fx - Fixed point arithmetic using NumPy data types.
  - math - Useful for mathematical code.
  - nd - ND-array operations.
  - prng - Pseudo-Random Number Generators. Currently just xoroshiro128+.
  - stats - Statistics. Currently just for binary classifiers.
  - test - Helpers for unit testing.
  - toml - Save/load TOML files with optional compression.
  - vcd - Value Change Dump (from Verilog) reader and writer.
  - yaml - Extended YAML parser, useful for implementing DSLs on top of YAML.

Some useful scripts are provided in `dmppl/scripts` which show how to use some
parts of the library modules.

  - beamer-times - Report the time breakdown for beamer presentations by reading
    annotations in the LaTeX.
  - parvec - Generate pseudorandom parameter vectors for design space
    exploration with repeatable results.
  - vcd-utils - Convert VCD (Verilog IEEE1364) files to/from YAML and CSV,
    extract information, or cleanup dodgy VCDs using the forgiving reader
    with strict writer.
  - svg2png - Simple wrapper around inkscape to export SVGs to PNGs.

Some experiments are given in `dmppl/experiments` which are likely not useful
to most people.

  - relest - (Relationship Estimation) Model SoC signal relations.
    Part of my PhD project presented at LOD2019.
  - eva - (EVent Analysis) Measure and visualize correlations between
    measurements.
    Part of my PhD project.

Uses [semantic versioning](https://semver.org/spec/v2.0.0.html)

Supports multiple versions of Python (2.7, 3.6, 3.7, 3.8).

  - At some point I'll drop support for 2.7 and <3.7, probably when distros stop
    including them which isn't likely soon.
  - Dropping support for <3.6 allows use of type annotations.
  - Dropping support for <3.8 allows use of newer language features such as the
    walrus operator, and getting rid of version-specific hacks like
    `openCsvKwargs'.
    Don't necessarily need to wait for distros to support 3.8+, only wait for
    3.6+ since altinstall+venv seems to be the recommended way forward.
    low priority
  - Keeping support for old versions allows compatibility with other programs
    which have built-in Python shells,
    TODO: Collate version dependencies for various programs and decide what I
    want to support: Inkscape, Blender, nextpnr, yosys, ...
  - pip packages are not specified with versions as it is assumed (naively) that
    the latest releases won't break anything.

See the `Makefile` to wrap up common actions and provide examples of how to run
things.

  - `make venv` to create a virtual environment for each supported version.
  - `make unittest` to perform all unit tests.
  - `make unittest-coverage` to perform all unit tests collecting code coverage
    and produce HTML reports.
  - `make dist` to build a setuptools distribution.
  - `make clean` to remove all generated files.

TODO:

  1. Upload to PyPI.
  2. mypy
  3. Integrate relest-ffnn
  4. Implement vch, vchlite
  5. Expand documentation here
  6. Sphinx/readthedocs
  7. Change convention to snake case for idiomatic Python and rust?