This is an automated email from the git hooks/post-receive script. sebastic pushed a commit to branch master in repository python-affine.
commit bb28a1ee4977f947d1ecf8f9bbb85ac52cbb6b89 Author: Bas Couwenberg <sebas...@xs4all.nl> Date: Fri Jun 5 02:01:54 2015 +0200 Imported Upstream version 1.2.0 --- .coveragerc | 2 ++ .travis.yml | 4 ++-- AUTHORS.txt | 1 + CHANGES.txt | 7 ++++++- README.rst | 4 ++-- affine/__init__.py | 21 ++++++++++++++------- affine/tests/test_pickle.py | 30 ++++++++++++++++++++++++++++++ affine/tests/test_transform.py | 18 +++++++++--------- setup.py | 10 ++++------ 9 files changed, 70 insertions(+), 27 deletions(-) diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..793a509 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,2 @@ +[run] +omit = affine/tests/* diff --git a/.travis.yml b/.travis.yml index f30a897..a8481aa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,10 +5,10 @@ python: - "3.3" - "3.4" install: - - "pip install pytest" + - "pip install pytest pytest-cov nose" - "pip install coveralls" - "pip install -e ." script: - - coverage run --source=affine --omit='*.pxd,*.pyx,*/tests/*,*/docs/*,*/examples/*,*/benchmarks/*' -m py.test + - py.test --cov affine --cov-report term-missing after_success: - coveralls diff --git a/AUTHORS.txt b/AUTHORS.txt index 91ba223..34c7ba2 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -5,3 +5,4 @@ Authors - Sean Gillies <s...@mapbox.com> (same as ^^) - Steven Ring <s...@southsky.com.au> - Mike Toews <mwto...@gmail.com> +- Kevin Wurster <wurst...@gmail.com> diff --git a/CHANGES.txt b/CHANGES.txt index 15d1bc2..ec950e4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,9 +1,14 @@ CHANGES ======= +1.2.0 (2015-06-01) +------------------ +- Enable pickling of Affine objects (#14). +- Sort out the mixed up shearing parameters (#12). + 1.1.0 (2014-11-13) ------------------ -- add loadsw/dumpsw world file utilities (#6). +- Add loadsw/dumpsw world file utilities (#6). - Travis-CI and Coveralls config and web hooks added (#10). 1.0.1 (2014-10-20) diff --git a/README.rst b/README.rst index 9e8ee0b..73fcc11 100644 --- a/README.rst +++ b/README.rst @@ -1,12 +1,12 @@ Affine ====== -Matrices describing affine transformation of the plane +Matrices describing affine transformation of the plane. .. image:: https://travis-ci.org/sgillies/affine.svg?branch=master :target: https://travis-ci.org/sgillies/affine -.. image:: https://coveralls.io/repos/sgillies/affine/badge.png +.. image:: https://coveralls.io/repos/sgillies/affine/badge.svg :target: https://coveralls.io/r/sgillies/affine The Affine package is derived from Casey Duncan's Planar package. Please see diff --git a/affine/__init__.py b/affine/__init__.py index f7d8af9..dc2dac9 100644 --- a/affine/__init__.py +++ b/affine/__init__.py @@ -47,7 +47,7 @@ import math __all__ = ['Affine'] __author__ = "Sean Gillies" -__version__ = "1.1.0" +__version__ = "1.2.0" EPSILON = 1e-5 EPSILON2 = EPSILON ** 2 @@ -208,17 +208,17 @@ class Affine( def shear(cls, x_angle=0, y_angle=0): """Create a shear transform along one or both axes. - :param x_angle: Angle in degrees to shear along the x-axis. + :param x_angle: Shear angle in degrees parallel to the x-axis. :type x_angle: float - :param y_angle: Angle in degrees to shear along the y-axis. + :param y_angle: Shear angle in degrees parallel to the y-axis. :type y_angle: float :rtype: Affine """ - sx = math.tan(math.radians(x_angle)) - sy = math.tan(math.radians(y_angle)) + mx = math.tan(math.radians(x_angle)) + my = math.tan(math.radians(y_angle)) return tuple.__new__(cls, - (1.0, sy, 0.0, - sx, 1.0, 0.0, + (1.0, mx, 0.0, + my, 1.0, 0.0, 0.0, 0.0, 1.0)) @classmethod @@ -434,6 +434,13 @@ class Affine( __hash__ = tuple.__hash__ # hash is not inherited in Py 3 + def __getnewargs__(self): + # Required for unpickling. + # Normal unpickling creates a situation where __new__ receives all 9 + # elements rather than the 6 that are required for the constructor. + # This method ensures that only the 6 are provided. + return self.a, self.b, self.c, self.d, self.e, self.f + identity = Affine(1, 0, 0, 0, 1, 0) """The identity transform""" diff --git a/affine/tests/test_pickle.py b/affine/tests/test_pickle.py new file mode 100644 index 0000000..7911a73 --- /dev/null +++ b/affine/tests/test_pickle.py @@ -0,0 +1,30 @@ +""" +Validate that instances of `affine.Affine()` can be pickled and unpickled. +""" + + +import pickle +from multiprocessing import Pool + +import affine + + +def test_pickle(): + a = affine.Affine(1, 2, 3, 4, 5, 6) + assert pickle.loads(pickle.dumps(a)) == a + + +def _mp_proc(x): + # A helper function - needed for test_with_multiprocessing() + # Can't be defined inside the test because multiprocessing needs + # everything to be in __main__ + assert isinstance(x, affine.Affine) + return x + + +def test_with_multiprocessing(): + a1 = affine.Affine(1, 2, 3, 4, 5, 6) + a2 = affine.Affine(6, 5, 4, 3, 2, 1) + results = Pool(2).map(_mp_proc, [a1, a2]) + for expected, actual in zip([a1, a2], results): + assert expected == actual diff --git a/affine/tests/test_transform.py b/affine/tests/test_transform.py index d456cba..d5c5806 100644 --- a/affine/tests/test_transform.py +++ b/affine/tests/test_transform.py @@ -146,25 +146,25 @@ class PyAffineTestCase(unittest.TestCase): def test_shear_constructor(self): shear = Affine.shear(30) assert isinstance(shear, Affine) - sx = math.tan(math.radians(30)) + mx = math.tan(math.radians(30)) seq_almost_equal( tuple(shear), - (1, 0, 0, - sx, 1, 0, + (1, mx, 0, + 0, 1, 0, 0, 0, 1)) shear = Affine.shear(-15, 60) - sx = math.tan(math.radians(-15)) - sy = math.tan(math.radians(60)) + mx = math.tan(math.radians(-15)) + my = math.tan(math.radians(60)) seq_almost_equal( tuple(shear), - (1, sy, 0, - sx, 1, 0, + (1, mx, 0, + my, 1, 0, 0, 0, 1)) shear = Affine.shear(y_angle=45) seq_almost_equal( tuple(shear), - (1, 1, 0, - 0, 1, 0, + (1, 0, 0, + 1, 1, 0, 0, 0, 1)) def test_rotation_constructor(self): diff --git a/setup.py b/setup.py index ae9c86b..cc704b1 100755 --- a/setup.py +++ b/setup.py @@ -1,6 +1,5 @@ -#!/usr/bin/env python - -from setuptools import setup +from codecs import open as codecs_open +from setuptools import setup, find_packages # Parse the version from the affine module. @@ -11,7 +10,7 @@ with open('affine/__init__.py') as f: version = version.strip('"').strip("'") break -with open('README.rst') as f: +with codecs_open('README.rst', encoding='utf-8') as f: readme = f.read() @@ -25,8 +24,7 @@ setup(name='affine', author_email='s...@mapbox.com', url='https://github.com/sgillies/affine', license='BSD', - package_dir={'': '.'}, - packages=['affine'], + packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), include_package_data=True, zip_safe=False, extras_require = {'test': ['pytest']} -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/python-affine.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel