Skip to content

Commit

Permalink
Add a pre-commit setup
Browse files Browse the repository at this point in the history
  • Loading branch information
brandonwillard committed Jan 8, 2021
1 parent 7665607 commit 0d673fb
Show file tree
Hide file tree
Showing 10 changed files with 104 additions and 33 deletions.
35 changes: 35 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
repos:
- repo: https://github.com/psf/black
rev: 20.8b1
hooks:
- id: black
language_version: python3
exclude: |
(?x)^(
versioneer\.py|
etuples/_version\.py|
doc/.*|
bin/.*
)$
- repo: https://gitlab.com/pycqa/flake8
rev: 3.8.4
hooks:
- id: flake8
exclude: |
(?x)^(
versioneer\.py|
etuples/_version\.py|
doc/.*|
bin/.*
)$
- repo: https://github.com/pycqa/isort
rev: 5.5.2
hooks:
- id: isort
exclude: |
(?x)^(
versioneer\.py|
etuples/_version\.py|
doc/.*|
bin/.*
)$
17 changes: 14 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,11 +133,22 @@ Using `pip`:
pip install etuples
```

To install from source:
### Development

First obtain the project source:
```bash
git clone [email protected]:pythological/etuples.git
cd etuples
pip install -r requirements.txt
```

Create a virtual environment and install the development dependencies:
```bash
$ pip install -r requirements.txt
```

Set up `pre-commit` hooks:

```bash
$ pre-commit install --install-hooks
```

Tests can be run with the provided `Makefile`:
Expand Down
5 changes: 2 additions & 3 deletions etuples/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from .core import etuple
from .dispatch import etuplize, apply, rator, rands, term, operator, arguments

from ._version import get_versions
from .core import etuple
from .dispatch import apply, arguments, etuplize, operator, rands, rator, term

__version__ = get_versions()["version"]
del get_versions
6 changes: 2 additions & 4 deletions etuples/core.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import inspect
import reprlib

from collections import deque
from collections.abc import Sequence, Generator

from collections.abc import Generator, Sequence

etuple_repr = reprlib.Repr()
etuple_repr.maxstring = 100
Expand Down Expand Up @@ -256,7 +254,7 @@ def __repr__(self):

def _repr_pretty_(self, p, cycle):
if cycle:
p.text(f"e(...)") # pragma: no cover
p.text("e(...)") # pragma: no cover
else:
with p.group(2, "e(", ")"):
p.breakable(sep="")
Expand Down
13 changes: 6 additions & 7 deletions etuples/dispatch.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
from collections.abc import Callable, Sequence, Mapping

from multipledispatch import dispatch
from collections.abc import Callable, Mapping, Sequence

from cons.core import ConsError, ConsNull, ConsPair, car, cdr, cons
from multipledispatch import dispatch

from .core import etuple, ExpressionTuple, trampoline_eval, KwdPair
from .core import ExpressionTuple, KwdPair, etuple, trampoline_eval

try:
from packaging import version
try: # noqa: C901
import unification
from packaging import version

if version.parse(unification.__version__) < version.parse("0.4.0"):
raise ModuleNotFoundError()

from unification.core import _reify, _unify, isvar, construction_sentinel
from unification.core import _reify, _unify, construction_sentinel, isvar
except ModuleNotFoundError:
pass
else:
Expand Down
4 changes: 3 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
-e ./
logical-unification
ipython
coveralls
pydocstyle>=3.0.0
pytest>=5.0.0
Expand All @@ -10,3 +9,6 @@ pylint>=2.3.1
black>=19.3b0; platform.python_implementation!='PyPy'
diff-cover
versioneer
isort
coverage>=5.1
pre-commit
22 changes: 21 additions & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,24 @@ exclude_lines =
raise NotImplementedError
if __name__ == .__main__.:
assert False
ModuleNotFoundError
ModuleNotFoundError

[isort]
multi_line_output = 3
include_trailing_comma = True
force_grid_wrap = 0
use_parentheses = True
ensure_newline_before_comments = True
line_length = 88

[flake8]
max-line-length = 88
extend-ignore = E203, W503
per-file-ignores =
**/__init__.py:F401,E402,F403

[pylint]
max-line-length = 88

[pylint.messages_control]
disable = C0330, C0326
10 changes: 7 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
#!/usr/bin/env python
import versioneer

from os.path import exists

from setuptools import setup

import versioneer

setup(
name="etuples",
version=versioneer.get_version(),
Expand All @@ -13,7 +14,10 @@
maintainer="Brandon T. Willard",
maintainer_email="[email protected]",
packages=["etuples"],
install_requires=["cons", "multipledispatch",],
install_requires=[
"cons",
"multipledispatch",
],
long_description=open("README.md").read() if exists("README.md") else "",
long_description_content_type="text/markdown",
python_requires=">=3.6",
Expand Down
7 changes: 3 additions & 4 deletions tests/test_core.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import sys
from operator import add

import pytest

from operator import add

from etuples.core import ExpressionTuple, etuple, KwdPair, InvalidExpression
from etuples.core import ExpressionTuple, InvalidExpression, KwdPair, etuple


def test_ExpressionTuple(capsys):
Expand Down Expand Up @@ -194,7 +193,7 @@ def test_pprint():
et = etuple(1, etuple("a", *range(20)), etuple(3, "b"), blah=etuple("c", 0))
assert (
pretty_mod.pretty(et)
== "e(\n 1,\n e('a', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19),\n e(3, 'b'),\n blah=e(c, 0))"
== "e(\n 1,\n e('a', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19),\n e(3, 'b'),\n blah=e(c, 0))" # noqa: E501
)


Expand Down
18 changes: 11 additions & 7 deletions tests/test_dispatch.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from pytest import raises, importorskip

from operator import add
from collections.abc import Sequence
from operator import add

from pytest import importorskip, raises

from etuples.core import ExpressionTuple, etuple, KwdPair
from etuples.dispatch import apply, rator, rands, etuplize
from etuples.core import ExpressionTuple, KwdPair, etuple
from etuples.dispatch import apply, etuplize, rands, rator


class Node:
Expand Down Expand Up @@ -113,11 +113,15 @@ def test_unification():
assert isinstance(res, ExpressionTuple)
assert res == etuple(add, 1, 2)

et = etuple(a_lv,)
et = etuple(
a_lv,
)
res = reify(et, {a_lv: 1})
assert isinstance(res, ExpressionTuple)

et = etuple(a_lv,)
et = etuple(
a_lv,
)
# We choose to allow unification with regular tuples.
if etuple(1) == (1,):
res = unify(et, (1,))
Expand Down

0 comments on commit 0d673fb

Please sign in to comment.