Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pyrsistent for 
openSUSE:Factory checked in at 2021-10-20 20:23:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyrsistent (Old)
 and      /work/SRC/openSUSE:Factory/.python-pyrsistent.new.1890 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pyrsistent"

Wed Oct 20 20:23:36 2021 rev:10 rq:925763 version:0.18.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyrsistent/python-pyrsistent.changes      
2021-02-16 22:34:46.377520420 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-pyrsistent.new.1890/python-pyrsistent.changes
    2021-10-20 20:24:23.513382060 +0200
@@ -1,0 +2,17 @@
+Sat Oct 16 22:02:35 UTC 2021 - Dirk M??ller <[email protected]>
+
+- update to 0.18.0:
+  * Fix #209 Update freeze recurse into pyrsistent data structures and thaw to
+    recurse into lists and dicts
+  * Fix #226, stop using deprecated exception.message.
+  * Fix #211, add union operator to persistent maps.
+  * Fix #194, declare build dependencies through pyproject.toml.
+  * Officially drop Python 3.5 support.
+  * Fix #223, release wheels for all major platforms.
+  * Fix #221, KeyError obscured by TypeError if key is a tuple.
+  * Fix LICENSE file name spelling.
+  * Fix #216, add abstractmethod decorator for CheckedType and ABCMeta for
+    _CheckedTypeMeta.
+  * Fix #228, rename example classes in tests to avoid name clashes with 
pytest.
+
+-------------------------------------------------------------------

Old:
----
  pyrsistent-0.17.3.tar.gz

New:
----
  pyrsistent-0.18.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pyrsistent.spec ++++++
--- /var/tmp/diff_new_pack.odL61U/_old  2021-10-20 20:24:23.921382312 +0200
+++ /var/tmp/diff_new_pack.odL61U/_new  2021-10-20 20:24:23.921382312 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %global skip_python2 1
 Name:           python-pyrsistent
-Version:        0.17.3
+Version:        0.18.0
 Release:        0
 Summary:        Persistent, Functional, Immutable data structures
 License:        MIT
@@ -59,7 +59,7 @@
 %pytest_arch -ra
 
 %files %{python_files}
-%license LICENCE.mit
+%license LICENSE.mit
 %doc CHANGES.txt README.rst
 %pycache_only %{python_sitearch}/__pycache__/_pyrsistent*
 %{python_sitearch}/_pyrsistent*

++++++ pyrsistent-0.17.3.tar.gz -> pyrsistent-0.18.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/CHANGES.txt 
new/pyrsistent-0.18.0/CHANGES.txt
--- old/pyrsistent-0.17.3/CHANGES.txt   2020-09-13 09:04:14.000000000 +0200
+++ new/pyrsistent-0.18.0/CHANGES.txt   2021-06-28 21:27:36.000000000 +0200
@@ -1,11 +1,25 @@
 Revision history
 ----------------
+0.18.0, 2021-06-28
+ * Fix #209 Update freeze recurse into pyrsistent data structures and thaw to 
recurse into lists and dicts,
+   Thanks @phil-arh for this!
+   NB! This is a backwards incompatible change! To keep the old behaviour pass 
`strict=False` to freeze and thaw.
+ * Fix #226, stop using deprecated exception.message. Thanks @hexagonrecursion 
for this!
+ * Fix #211, add union operator to persistent maps. Thanks @bowbahdoe for this!
+ * Fix #194, declare build dependencies through pyproject.toml. Thanks @jaraco 
for this!
+ * Officially drop Python 3.5 support.
+ * Fix #223, release wheels for all major platforms. Thanks @johnthagen for 
helping out with this!
+ * Fix #221, KeyError obscured by TypeError if key is a tuple. Thanks @ganwell 
for this!
+ * Fix LICENSE file name spelling. Thanks @ndowens and @barentsen for this!
+ * Fix #216, add abstractmethod decorator for CheckedType and ABCMeta for 
_CheckedTypeMeta. Thanks @ss18 for this!
+ * Fix #228, rename example classes in tests to avoid name clashes with pytest.
+
 0.17.3, 2020-09-13
  * Fix #208, release v0.17.3 with proper meta data requiring Python >= 3.5.
 
 0.16.1, 2020-09-13
  * Add "python_requires >= 2.7" to setup.py in preparation for Python 2.7 
incompatible updates
-   in 0.17.
+   in 0.17. This is the last version of pyrsistent that can be used with 
Python 2.7.
 
 0.17.2 (yanked awaiting proper fix for Python 3 req), 2020-09-09
  * Same as 0.17.1 released with more recent version of setuptools to get 
proper meta data for in place.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/LICENCE.mit 
new/pyrsistent-0.18.0/LICENCE.mit
--- old/pyrsistent-0.17.3/LICENCE.mit   2019-01-06 22:04:57.000000000 +0100
+++ new/pyrsistent-0.18.0/LICENCE.mit   1970-01-01 01:00:00.000000000 +0100
@@ -1,22 +0,0 @@
-Copyright (c) 2019 Tobias Gustafsson
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/LICENSE.mit 
new/pyrsistent-0.18.0/LICENSE.mit
--- old/pyrsistent-0.17.3/LICENSE.mit   1970-01-01 01:00:00.000000000 +0100
+++ new/pyrsistent-0.18.0/LICENSE.mit   2021-06-28 21:27:36.000000000 +0200
@@ -0,0 +1,22 @@
+Copyright (c) 2021 Tobias Gustafsson
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/MANIFEST.in 
new/pyrsistent-0.18.0/MANIFEST.in
--- old/pyrsistent-0.17.3/MANIFEST.in   2018-07-07 15:53:48.000000000 +0200
+++ new/pyrsistent-0.18.0/MANIFEST.in   2021-06-28 21:27:36.000000000 +0200
@@ -2,4 +2,4 @@
 include tests/*_test.py
 include tests/memory_profiling.py
 include CHANGES.txt
-include LICENCE.mit
\ No newline at end of file
+include LICENSE.mit
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/PKG-INFO 
new/pyrsistent-0.18.0/PKG-INFO
--- old/pyrsistent-0.17.3/PKG-INFO      2020-09-13 09:04:48.000000000 +0200
+++ new/pyrsistent-0.18.0/PKG-INFO      2021-06-28 21:27:39.663597600 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
 Name: pyrsistent
-Version: 0.17.3
+Version: 0.18.0
 Summary: Persistent/Functional/Immutable data structures
 Home-page: http://github.com/tobgu/pyrsistent/
 Author: Tobias Gustafsson
@@ -8,14 +8,8 @@
 License: MIT
 Description: Pyrsistent
         ==========
-        .. image:: https://travis-ci.org/tobgu/pyrsistent.svg?branch=master
-            :target: https://travis-ci.org/tobgu/pyrsistent
-        
-        .. image:: https://badge.fury.io/py/pyrsistent.svg
-            :target: https://badge.fury.io/py/pyrsistent
-        
-        .. image:: 
https://coveralls.io/repos/tobgu/pyrsistent/badge.svg?branch=master&service=github
-            :target: https://coveralls.io/github/tobgu/pyrsistent?branch=master
+        .. image:: 
https://github.com/tobgu/pyrsistent/actions/workflows/tests.yaml/badge.svg
+            :target: 
https://github.com/tobgu/pyrsistent/actions/workflows/tests.yaml
         
         
         .. _Pyrthon: https://www.github.com/tobgu/pyrthon/
@@ -567,6 +561,23 @@
             >>> thaw(v(1, m(a=3)))
             [1, {'a': 3}]
         
+        By default, freeze will also recursively convert values inside 
PVectors and PMaps. This behaviour can be changed by providing freeze with the 
flag strict=False.
+        
+        .. code:: python
+        
+            >>> from pyrsistent import freeze, v, m
+            >>> freeze(v(1, v(2, [3])))
+            pvector([1, pvector([2, pvector([3])])])
+            >>> freeze(v(1, v(2, [3])), strict=False)
+            pvector([1, pvector([2, [3]])])
+            >>> freeze(m(a=m(b={'c': 1})))
+            pmap({'a': pmap({'b': pmap({'c': 1})})})
+            >>> freeze(m(a=m(b={'c': 1})), strict=False)
+            pmap({'a': pmap({'b': {'c': 1}})})
+        
+        In this regard, thaw operates as the inverse of freeze so will thaw 
values inside native data structures unless passed the strict=False flag.
+        
+        
         Compatibility
         -------------
         
@@ -684,6 +695,18 @@
         
         Vincent Philippon https://github.com/vphilippon
         
+        Andrey Bienkowski https://github.com/hexagonrecursion
+        
+        Ethan McCue https://github.com/bowbahdoe
+        
+        Jason R. Coombs https://github.com/jaraco
+        
+        Nathan https://github.com/ndowens
+        
+        Geert Barentsen https://github.com/barentsen
+        
+        phil-arh https://github.com/phil-arh
+        
         Contributing
         ------------
         
@@ -704,13 +727,11 @@
         ~~~~~~~
         * `pip install -r requirements.txt`
         * Update CHANGES.txt
-        * Update README with any new contributors and potential info needed.
+        * Update README.rst with any new contributors and potential info 
needed.
         * Update _pyrsistent_version.py
-        * `rm -rf dist/* && python setup.py sdist`
-        * (`twine upload -r testpypi dist/*`), if testing the distribution on 
testpypi
-        * `twine upload dist/*`
         * Commit and tag with new version: `git add -u . && git commit -m 
'Prepare version vX.Y.Z' && git tag -a vX.Y.Z -m 'vX.Y.Z'`
         * Push commit and tags: `git push && git push --tags`
+        * Build new release using Github actions
         
         Project status
         --------------
@@ -731,9 +752,10 @@
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: Implementation :: PyPy
-Requires-Python: >=3.5
+Requires-Python: >=3.6
+Description-Content-Type: text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/README new/pyrsistent-0.18.0/README
--- old/pyrsistent-0.17.3/README        2020-09-13 08:54:05.000000000 +0200
+++ new/pyrsistent-0.18.0/README        2021-06-28 21:27:36.000000000 +0200
@@ -1,13 +1,7 @@
 Pyrsistent
 ==========
-.. image:: https://travis-ci.org/tobgu/pyrsistent.svg?branch=master
-    :target: https://travis-ci.org/tobgu/pyrsistent
-
-.. image:: https://badge.fury.io/py/pyrsistent.svg
-    :target: https://badge.fury.io/py/pyrsistent
-
-.. image:: 
https://coveralls.io/repos/tobgu/pyrsistent/badge.svg?branch=master&service=github
-    :target: https://coveralls.io/github/tobgu/pyrsistent?branch=master
+.. image:: 
https://github.com/tobgu/pyrsistent/actions/workflows/tests.yaml/badge.svg
+    :target: https://github.com/tobgu/pyrsistent/actions/workflows/tests.yaml
 
 
 .. _Pyrthon: https://www.github.com/tobgu/pyrthon/
@@ -559,6 +553,23 @@
     >>> thaw(v(1, m(a=3)))
     [1, {'a': 3}]
 
+By default, freeze will also recursively convert values inside PVectors and 
PMaps. This behaviour can be changed by providing freeze with the flag 
strict=False.
+
+.. code:: python
+
+    >>> from pyrsistent import freeze, v, m
+    >>> freeze(v(1, v(2, [3])))
+    pvector([1, pvector([2, pvector([3])])])
+    >>> freeze(v(1, v(2, [3])), strict=False)
+    pvector([1, pvector([2, [3]])])
+    >>> freeze(m(a=m(b={'c': 1})))
+    pmap({'a': pmap({'b': pmap({'c': 1})})})
+    >>> freeze(m(a=m(b={'c': 1})), strict=False)
+    pmap({'a': pmap({'b': {'c': 1}})})
+
+In this regard, thaw operates as the inverse of freeze so will thaw values 
inside native data structures unless passed the strict=False flag.
+
+
 Compatibility
 -------------
 
@@ -676,6 +687,18 @@
 
 Vincent Philippon https://github.com/vphilippon
 
+Andrey Bienkowski https://github.com/hexagonrecursion
+
+Ethan McCue https://github.com/bowbahdoe
+
+Jason R. Coombs https://github.com/jaraco
+
+Nathan https://github.com/ndowens
+
+Geert Barentsen https://github.com/barentsen
+
+phil-arh https://github.com/phil-arh
+
 Contributing
 ------------
 
@@ -696,13 +719,11 @@
 ~~~~~~~
 * `pip install -r requirements.txt`
 * Update CHANGES.txt
-* Update README with any new contributors and potential info needed.
+* Update README.rst with any new contributors and potential info needed.
 * Update _pyrsistent_version.py
-* `rm -rf dist/* && python setup.py sdist`
-* (`twine upload -r testpypi dist/*`), if testing the distribution on testpypi
-* `twine upload dist/*`
 * Commit and tag with new version: `git add -u . && git commit -m 'Prepare 
version vX.Y.Z' && git tag -a vX.Y.Z -m 'vX.Y.Z'`
 * Push commit and tags: `git push && git push --tags`
+* Build new release using Github actions
 
 Project status
 --------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/README.rst 
new/pyrsistent-0.18.0/README.rst
--- old/pyrsistent-0.17.3/README.rst    2020-09-13 08:54:05.000000000 +0200
+++ new/pyrsistent-0.18.0/README.rst    2021-06-28 21:27:36.000000000 +0200
@@ -1,13 +1,7 @@
 Pyrsistent
 ==========
-.. image:: https://travis-ci.org/tobgu/pyrsistent.svg?branch=master
-    :target: https://travis-ci.org/tobgu/pyrsistent
-
-.. image:: https://badge.fury.io/py/pyrsistent.svg
-    :target: https://badge.fury.io/py/pyrsistent
-
-.. image:: 
https://coveralls.io/repos/tobgu/pyrsistent/badge.svg?branch=master&service=github
-    :target: https://coveralls.io/github/tobgu/pyrsistent?branch=master
+.. image:: 
https://github.com/tobgu/pyrsistent/actions/workflows/tests.yaml/badge.svg
+    :target: https://github.com/tobgu/pyrsistent/actions/workflows/tests.yaml
 
 
 .. _Pyrthon: https://www.github.com/tobgu/pyrthon/
@@ -559,6 +553,23 @@
     >>> thaw(v(1, m(a=3)))
     [1, {'a': 3}]
 
+By default, freeze will also recursively convert values inside PVectors and 
PMaps. This behaviour can be changed by providing freeze with the flag 
strict=False.
+
+.. code:: python
+
+    >>> from pyrsistent import freeze, v, m
+    >>> freeze(v(1, v(2, [3])))
+    pvector([1, pvector([2, pvector([3])])])
+    >>> freeze(v(1, v(2, [3])), strict=False)
+    pvector([1, pvector([2, [3]])])
+    >>> freeze(m(a=m(b={'c': 1})))
+    pmap({'a': pmap({'b': pmap({'c': 1})})})
+    >>> freeze(m(a=m(b={'c': 1})), strict=False)
+    pmap({'a': pmap({'b': {'c': 1}})})
+
+In this regard, thaw operates as the inverse of freeze so will thaw values 
inside native data structures unless passed the strict=False flag.
+
+
 Compatibility
 -------------
 
@@ -676,6 +687,18 @@
 
 Vincent Philippon https://github.com/vphilippon
 
+Andrey Bienkowski https://github.com/hexagonrecursion
+
+Ethan McCue https://github.com/bowbahdoe
+
+Jason R. Coombs https://github.com/jaraco
+
+Nathan https://github.com/ndowens
+
+Geert Barentsen https://github.com/barentsen
+
+phil-arh https://github.com/phil-arh
+
 Contributing
 ------------
 
@@ -696,13 +719,11 @@
 ~~~~~~~
 * `pip install -r requirements.txt`
 * Update CHANGES.txt
-* Update README with any new contributors and potential info needed.
+* Update README.rst with any new contributors and potential info needed.
 * Update _pyrsistent_version.py
-* `rm -rf dist/* && python setup.py sdist`
-* (`twine upload -r testpypi dist/*`), if testing the distribution on testpypi
-* `twine upload dist/*`
 * Commit and tag with new version: `git add -u . && git commit -m 'Prepare 
version vX.Y.Z' && git tag -a vX.Y.Z -m 'vX.Y.Z'`
 * Push commit and tags: `git push && git push --tags`
+* Build new release using Github actions
 
 Project status
 --------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/_pyrsistent_version.py 
new/pyrsistent-0.18.0/_pyrsistent_version.py
--- old/pyrsistent-0.17.3/_pyrsistent_version.py        2020-09-13 
09:01:29.000000000 +0200
+++ new/pyrsistent-0.18.0/_pyrsistent_version.py        2021-06-28 
21:27:36.000000000 +0200
@@ -1 +1 @@
-__version__ = '0.17.3'
+__version__ = '0.18.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pvectorcmodule.c 
new/pyrsistent-0.18.0/pvectorcmodule.c
--- old/pyrsistent-0.17.3/pvectorcmodule.c      2019-11-23 08:44:55.000000000 
+0100
+++ new/pyrsistent-0.18.0/pvectorcmodule.c      2021-06-28 21:27:36.000000000 
+0200
@@ -280,7 +280,7 @@
 }
 
 
-static long PVector_hash(PVector *self) {
+static Py_hash_t PVector_hash(PVector *self) {
   // Follows the pattern of the tuple hash
   long x, y;
   Py_ssize_t i;
@@ -853,7 +853,7 @@
    These are some optimizations that could be done to this function,
    these are not considered important enough yet though.
    - Use the PySequence_Fast ops if the iterable is a list or a tuple (which it
-     whould probably often be)
+     would probably often be)
    - Only copy the original tail if it is not full
    - No need to try to increment ref count in tail for the whole tail
 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pyproject.toml 
new/pyrsistent-0.18.0/pyproject.toml
--- old/pyrsistent-0.17.3/pyproject.toml        1970-01-01 01:00:00.000000000 
+0100
+++ new/pyrsistent-0.18.0/pyproject.toml        2021-06-28 21:27:36.000000000 
+0200
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["setuptools>=42", "wheel"]
+build-backend = "setuptools.build_meta"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pyrsistent/_checked_types.py 
new/pyrsistent-0.18.0/pyrsistent/_checked_types.py
--- old/pyrsistent-0.17.3/pyrsistent/_checked_types.py  2020-09-13 
08:53:39.000000000 +0200
+++ new/pyrsistent-0.18.0/pyrsistent/_checked_types.py  2021-06-28 
21:27:36.000000000 +0200
@@ -1,5 +1,6 @@
 from enum import Enum
 
+from abc import abstractmethod, ABCMeta
 from collections.abc import Iterable
 
 from pyrsistent._pmap import PMap, pmap
@@ -14,9 +15,11 @@
     __slots__ = ()
 
     @classmethod
+    @abstractmethod
     def create(cls, source_data, _factory_fields=None):
         raise NotImplementedError()
 
+    @abstractmethod
     def serialize(self, format=None):
         raise NotImplementedError()
 
@@ -159,7 +162,7 @@
     dct[destination_name] = tuple(wrap_invariant(inv) for inv in invariants)
 
 
-class _CheckedTypeMeta(type):
+class _CheckedTypeMeta(ABCMeta):
     def __new__(mcs, name, bases, dct):
         _store_types(dct, bases, '_checked_types', '__type__')
         store_invariants(dct, bases, '_checked_invariants', '__invariant__')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pyrsistent/_helpers.py 
new/pyrsistent-0.18.0/pyrsistent/_helpers.py
--- old/pyrsistent-0.17.3/pyrsistent/_helpers.py        2020-09-13 
08:53:39.000000000 +0200
+++ new/pyrsistent-0.18.0/pyrsistent/_helpers.py        2021-06-28 
21:27:36.000000000 +0200
@@ -3,8 +3,7 @@
 from pyrsistent._pset import PSet, pset
 from pyrsistent._pvector import PVector, pvector
 
-
-def freeze(o):
+def freeze(o, strict=True):
     """
     Recursively convert simple Python containers into pyrsistent versions
     of those containers.
@@ -14,6 +13,11 @@
     - set is converted to pset, but not recursively
     - tuple is converted to tuple, recursively.
 
+    If strict == True (default):
+
+    - freeze is called on elements of pvectors
+    - freeze is called on values of pmaps
+
     Sets and dict keys are not recursively frozen because they do not contain
     mutable data by convention. The main exception to this rule is that
     dict keys and set elements are often instances of mutable objects that
@@ -27,18 +31,21 @@
     (1, pvector([]))
     """
     typ = type(o)
-    if typ is dict:
-        return pmap(dict((k, freeze(v)) for k, v in o.items()))
-    if typ is list:
-        return pvector(map(freeze, o))
+    if typ is dict or (strict and isinstance(o, PMap)):
+        return pmap({k: freeze(v, strict) for k, v in o.items()})
+    if typ is list or (strict and isinstance(o, PVector)):
+        curried_freeze = lambda x: freeze(x, strict)
+        return pvector(map(curried_freeze, o))
     if typ is tuple:
-        return tuple(map(freeze, o))
+        curried_freeze = lambda x: freeze(x, strict)
+        return tuple(map(curried_freeze, o))
     if typ is set:
+        # impossible to have anything that needs freezing inside a set or pset
         return pset(o)
     return o
 
 
-def thaw(o):
+def thaw(o, strict=True):
     """
     Recursively convert pyrsistent containers into simple Python containers.
 
@@ -47,6 +54,11 @@
     - pset is converted to set, but not recursively
     - tuple is converted to tuple, recursively.
 
+    If strict == True (the default):
+
+    - thaw is called on elements of lists
+    - thaw is called on values in dicts
+
     >>> from pyrsistent import s, m, v
     >>> thaw(s(1, 2))
     {1, 2}
@@ -55,14 +67,18 @@
     >>> thaw((1, v()))
     (1, [])
     """
-    if isinstance(o, PVector):
-        return list(map(thaw, o))
-    if isinstance(o, PMap):
-        return dict((k, thaw(v)) for k, v in o.iteritems())
+    typ = type(o)
+    if isinstance(o, PVector) or (strict and typ is list):
+        curried_thaw = lambda x: thaw(x, strict)
+        return list(map(curried_thaw, o))
+    if isinstance(o, PMap) or (strict and typ is dict):
+        return {k: thaw(v, strict) for k, v in o.items()}
+    if typ is tuple:
+        curried_thaw = lambda x: thaw(x, strict)
+        return tuple(map(curried_thaw, o))
     if isinstance(o, PSet):
+        # impossible to thaw inside psets or sets
         return set(o)
-    if type(o) is tuple:
-        return tuple(map(thaw, o))
     return o
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pyrsistent/_immutable.py 
new/pyrsistent-0.18.0/pyrsistent/_immutable.py
--- old/pyrsistent-0.17.3/pyrsistent/_immutable.py      2020-09-13 
08:53:39.000000000 +0200
+++ new/pyrsistent-0.18.0/pyrsistent/_immutable.py      2021-06-28 
21:27:36.000000000 +0200
@@ -98,6 +98,6 @@
     try:
         exec(template, namespace)
     except SyntaxError as e:
-        raise SyntaxError(e.message + ':\n' + template) from e
+        raise SyntaxError(str(e) + ':\n' + template) from e
 
     return namespace[name]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pyrsistent/_pmap.py 
new/pyrsistent-0.18.0/pyrsistent/_pmap.py
--- old/pyrsistent-0.17.3/pyrsistent/_pmap.py   2020-09-13 08:53:39.000000000 
+0200
+++ new/pyrsistent-0.18.0/pyrsistent/_pmap.py   2021-06-28 21:27:36.000000000 
+0200
@@ -244,6 +244,8 @@
     def __add__(self, other):
         return self.update(other)
 
+    __or__ = __add__
+
     def __reduce__(self):
         # Pickling support
         return pmap, (dict(self),)
@@ -443,7 +445,7 @@
     >>> pmap({'a': 13, 'b': 14})
     pmap({'b': 14, 'a': 13})
     """
-    if not initial:
+    if not initial and pre_size == 0:
         return _EMPTY_PMAP
 
     return _turbo_mapping(initial, pre_size)
@@ -451,7 +453,7 @@
 
 def m(**kwargs):
     """
-    Creates a new persitent map. Inserts all key value arguments into the 
newly created map.
+    Creates a new persistent map. Inserts all key value arguments into the 
newly created map.
 
     >>> m(a=13, b=14)
     pmap({'b': 14, 'a': 13})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pyrsistent/_precord.py 
new/pyrsistent-0.18.0/pyrsistent/_precord.py
--- old/pyrsistent-0.17.3/pyrsistent/_precord.py        2020-09-13 
08:53:39.000000000 +0200
+++ new/pyrsistent-0.18.0/pyrsistent/_precord.py        2021-06-28 
21:27:36.000000000 +0200
@@ -46,7 +46,7 @@
                                   for k, v in 
cls._precord_initial_values.items())
             initial_values.update(kwargs)
 
-        e = _PRecordEvolver(cls, pmap(), _factory_fields=factory_fields, 
_ignore_extra=ignore_extra)
+        e = _PRecordEvolver(cls, pmap(pre_size=len(cls._precord_fields)), 
_factory_fields=factory_fields, _ignore_extra=ignore_extra)
         for k, v in initial_values.items():
             e[k] = v
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pyrsistent/_pset.py 
new/pyrsistent-0.18.0/pyrsistent/_pset.py
--- old/pyrsistent-0.17.3/pyrsistent/_pset.py   2020-09-13 08:53:39.000000000 
+0200
+++ new/pyrsistent-0.18.0/pyrsistent/_pset.py   2021-06-28 21:27:36.000000000 
+0200
@@ -96,7 +96,7 @@
         if element in self._map:
             return self.evolver().remove(element).persistent()
 
-        raise KeyError("Element '%s' not present in PSet" % element)
+        raise KeyError("Element '%s' not present in PSet" % repr(element))
 
     def discard(self, element):
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pyrsistent.egg-info/PKG-INFO 
new/pyrsistent-0.18.0/pyrsistent.egg-info/PKG-INFO
--- old/pyrsistent-0.17.3/pyrsistent.egg-info/PKG-INFO  2020-09-13 
09:04:48.000000000 +0200
+++ new/pyrsistent-0.18.0/pyrsistent.egg-info/PKG-INFO  2021-06-28 
21:27:39.000000000 +0200
@@ -1,6 +1,6 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
 Name: pyrsistent
-Version: 0.17.3
+Version: 0.18.0
 Summary: Persistent/Functional/Immutable data structures
 Home-page: http://github.com/tobgu/pyrsistent/
 Author: Tobias Gustafsson
@@ -8,14 +8,8 @@
 License: MIT
 Description: Pyrsistent
         ==========
-        .. image:: https://travis-ci.org/tobgu/pyrsistent.svg?branch=master
-            :target: https://travis-ci.org/tobgu/pyrsistent
-        
-        .. image:: https://badge.fury.io/py/pyrsistent.svg
-            :target: https://badge.fury.io/py/pyrsistent
-        
-        .. image:: 
https://coveralls.io/repos/tobgu/pyrsistent/badge.svg?branch=master&service=github
-            :target: https://coveralls.io/github/tobgu/pyrsistent?branch=master
+        .. image:: 
https://github.com/tobgu/pyrsistent/actions/workflows/tests.yaml/badge.svg
+            :target: 
https://github.com/tobgu/pyrsistent/actions/workflows/tests.yaml
         
         
         .. _Pyrthon: https://www.github.com/tobgu/pyrthon/
@@ -567,6 +561,23 @@
             >>> thaw(v(1, m(a=3)))
             [1, {'a': 3}]
         
+        By default, freeze will also recursively convert values inside 
PVectors and PMaps. This behaviour can be changed by providing freeze with the 
flag strict=False.
+        
+        .. code:: python
+        
+            >>> from pyrsistent import freeze, v, m
+            >>> freeze(v(1, v(2, [3])))
+            pvector([1, pvector([2, pvector([3])])])
+            >>> freeze(v(1, v(2, [3])), strict=False)
+            pvector([1, pvector([2, [3]])])
+            >>> freeze(m(a=m(b={'c': 1})))
+            pmap({'a': pmap({'b': pmap({'c': 1})})})
+            >>> freeze(m(a=m(b={'c': 1})), strict=False)
+            pmap({'a': pmap({'b': {'c': 1}})})
+        
+        In this regard, thaw operates as the inverse of freeze so will thaw 
values inside native data structures unless passed the strict=False flag.
+        
+        
         Compatibility
         -------------
         
@@ -684,6 +695,18 @@
         
         Vincent Philippon https://github.com/vphilippon
         
+        Andrey Bienkowski https://github.com/hexagonrecursion
+        
+        Ethan McCue https://github.com/bowbahdoe
+        
+        Jason R. Coombs https://github.com/jaraco
+        
+        Nathan https://github.com/ndowens
+        
+        Geert Barentsen https://github.com/barentsen
+        
+        phil-arh https://github.com/phil-arh
+        
         Contributing
         ------------
         
@@ -704,13 +727,11 @@
         ~~~~~~~
         * `pip install -r requirements.txt`
         * Update CHANGES.txt
-        * Update README with any new contributors and potential info needed.
+        * Update README.rst with any new contributors and potential info 
needed.
         * Update _pyrsistent_version.py
-        * `rm -rf dist/* && python setup.py sdist`
-        * (`twine upload -r testpypi dist/*`), if testing the distribution on 
testpypi
-        * `twine upload dist/*`
         * Commit and tag with new version: `git add -u . && git commit -m 
'Prepare version vX.Y.Z' && git tag -a vX.Y.Z -m 'vX.Y.Z'`
         * Push commit and tags: `git push && git push --tags`
+        * Build new release using Github actions
         
         Project status
         --------------
@@ -731,9 +752,10 @@
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: Implementation :: PyPy
-Requires-Python: >=3.5
+Requires-Python: >=3.6
+Description-Content-Type: text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/pyrsistent.egg-info/SOURCES.txt 
new/pyrsistent-0.18.0/pyrsistent.egg-info/SOURCES.txt
--- old/pyrsistent-0.17.3/pyrsistent.egg-info/SOURCES.txt       2020-09-13 
09:04:48.000000000 +0200
+++ new/pyrsistent-0.18.0/pyrsistent.egg-info/SOURCES.txt       2021-06-28 
21:27:39.000000000 +0200
@@ -1,10 +1,11 @@
 CHANGES.txt
-LICENCE.mit
+LICENSE.mit
 MANIFEST.in
 README
 README.rst
 _pyrsistent_version.py
 pvectorcmodule.c
+pyproject.toml
 setup.cfg
 setup.py
 pyrsistent/__init__.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/setup.cfg 
new/pyrsistent-0.18.0/setup.cfg
--- old/pyrsistent-0.17.3/setup.cfg     2020-09-13 09:04:48.000000000 +0200
+++ new/pyrsistent-0.18.0/setup.cfg     2021-06-28 21:27:39.667597800 +0200
@@ -1,6 +1,9 @@
 [aliases]
 test = pytest
 
+[metadata]
+version = attr:_pyrsistent_version.__version__
+
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/setup.py 
new/pyrsistent-0.18.0/setup.py
--- old/pyrsistent-0.17.3/setup.py      2020-09-13 08:59:14.000000000 +0200
+++ new/pyrsistent-0.18.0/setup.py      2021-06-28 21:27:36.000000000 +0200
@@ -2,16 +2,17 @@
 from setuptools import setup, Extension
 import sys
 import platform
-import warnings
 import codecs
 from distutils.command.build_ext import build_ext
-from distutils.errors import CCompilerError
-from distutils.errors import DistutilsPlatformError, DistutilsExecError
-from _pyrsistent_version import __version__
-
-readme_path = os.path.join(os.path.dirname(__file__), 'README.rst')
-with codecs.open(readme_path, encoding='utf8') as f:
-    readme = f.read()
+
+if platform.system() != "Windows":
+    readme_path = os.path.join(os.path.dirname(__file__), 'README.rst')
+    with codecs.open(readme_path, encoding='utf8') as f:
+        readme = f.read()
+else:
+    # The format is messed up with extra line breaks when building wheels on 
windows.
+    # Skip readme in this case.
+    readme = "Persistent collections, see https://github.com/tobgu/pyrsistent/ 
for details."
 
 extensions = []
 if platform.python_implementation() == 'CPython':
@@ -51,23 +52,23 @@
 
 setup(
     name='pyrsistent',
-    version=__version__,
     description='Persistent/Functional/Immutable data structures',
     long_description=readme,
+    long_description_content_type='text/x-rst',
     author='Tobias Gustafsson',
     author_email='[email protected]',
     url='http://github.com/tobgu/pyrsistent/',
     license='MIT',
-    license_files=['LICENCE.mit'],
+    license_files=['LICENSE.mit'],
     py_modules=['_pyrsistent_version'],
     classifiers=[
         'Intended Audience :: Developers',
         'License :: OSI Approved :: MIT License',
         'Operating System :: OS Independent',
-        'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
+        'Programming Language :: Python :: 3.9',
         'Programming Language :: Python :: Implementation :: PyPy',
     ],
     test_suite='tests',
@@ -78,5 +79,5 @@
     cmdclass={'build_ext': custom_build_ext},
     packages=['pyrsistent'],
     package_data={'pyrsistent': ['py.typed', '__init__.pyi', 'typing.pyi']},
-    python_requires='>=3.5',
+    python_requires='>=3.6',
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/tests/field_test.py 
new/pyrsistent-0.18.0/tests/field_test.py
--- old/pyrsistent-0.17.3/tests/field_test.py   2020-09-13 08:53:39.000000000 
+0200
+++ new/pyrsistent-0.18.0/tests/field_test.py   2021-06-28 21:27:36.000000000 
+0200
@@ -3,21 +3,21 @@
 from pyrsistent import field, pvector_field
 
 
-class TestEnum(Enum):
+class ExampleEnum(Enum):
     x = 1
     y = 2
 
 
 def test_enum():
-    f = field(type=TestEnum)
+    f = field(type=ExampleEnum)
 
-    assert TestEnum in f.type
+    assert ExampleEnum in f.type
     assert len(f.type) == 1
 
 
 # This is meant to exercise `_seq_field`.
 def test_pvector_field_enum_type():
-    f = pvector_field(TestEnum)
+    f = pvector_field(ExampleEnum)
 
     assert len(f.type) == 1
-    assert TestEnum is list(f.type)[0].__type__
+    assert ExampleEnum is list(f.type)[0].__type__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/tests/freeze_test.py 
new/pyrsistent-0.18.0/tests/freeze_test.py
--- old/pyrsistent-0.17.3/tests/freeze_test.py  2018-07-07 15:53:48.000000000 
+0200
+++ new/pyrsistent-0.18.0/tests/freeze_test.py  2021-06-28 21:27:36.000000000 
+0200
@@ -3,7 +3,7 @@
 from pyrsistent import v, m, s, freeze, thaw, PRecord, field, mutant
 
 
-## Freeze
+## Freeze (standard)
 
 def test_freeze_basic():
     assert freeze(1) == 1
@@ -27,11 +27,27 @@
     assert result == m(a=v(1))
     assert type(result['a']) is type(v())
 
+def test_freeze_recurse_in_pmap_values():
+    input = {'a': m(b={'c': 1})}
+    result = freeze(input)
+    # PMap and PVector are == to their mutable equivalents
+    assert result == input
+    assert type(result) is type(m())
+    assert type(result['a']['b']) is type(m())
+
 def test_freeze_recurse_in_lists():
     result = freeze(['a', {'b': 3}])
     assert result == v('a', m(b=3))
     assert type(result[1]) is type(m())
 
+def test_freeze_recurse_in_pvectors():
+    input = [1, v(2, [3])]
+    result = freeze(input)
+    # PMap and PVector are == to their mutable equivalents
+    assert result == input
+    assert type(result) is type(v())
+    assert type(result[1][1]) is type(v())
+
 def test_freeze_recurse_in_tuples():
     """Values in tuples are recursively frozen."""
     result = freeze(('a', {}))
@@ -39,6 +55,24 @@
     assert type(result[1]) is type(m())
 
 
+## Freeze (weak)
+
+def test_freeze_nonstrict_no_recurse_in_pmap_values():
+    input = {'a': m(b={'c': 1})}
+    result = freeze(input, strict=False)
+    # PMap and PVector are == to their mutable equivalents
+    assert result == input
+    assert type(result) is type(m())
+    assert type(result['a']['b']) is dict
+
+def test_freeze_nonstrict_no_recurse_in_pvectors():
+    input = [1, v(2, [3])]
+    result = freeze(input, strict=False)
+    # PMap and PVector are == to their mutable equivalents
+    assert result == input
+    assert type(result) is type(v())
+    assert type(result[1][1]) is list
+
 
 ## Thaw
 
@@ -66,11 +100,23 @@
     assert result == {'a': [1]}
     assert type(result['a']) is list
 
+def test_thaw_recurse_in_dict_values():
+    result = thaw({'a': v(1, m(b=2))})
+    assert result == {'a': [1, {'b': 2}]}
+    assert type(result['a']) is list
+    assert type(result['a'][1]) is dict
+
 def test_thaw_recurse_in_vectors():
     result = thaw(v('a', m(b=3)))
     assert result == ['a', {'b': 3}]
     assert type(result[1]) is dict
 
+def test_thaw_recurse_in_lists():
+    result = thaw(v(['a', m(b=1), v(2)]))
+    assert result == [['a', {'b': 1}, [2]]]
+    assert type(result[0]) is list
+    assert type(result[0][1]) is dict
+
 def test_thaw_recurse_in_tuples():
     result = thaw(('a', m()))
     assert result == ('a', {})
@@ -85,6 +131,19 @@
     assert type(result) is dict
 
 
+## Thaw (weak)
+
+def test_thaw_non_strict_no_recurse_in_dict_values():
+    result = thaw({'a': v(1, m(b=2))}, strict=False)
+    assert result == {'a': [1, {'b': 2}]}
+    assert type(result['a']) is type(v())
+    assert type(result['a'][1]) is type(m())
+
+def test_thaw_non_strict_no_recurse_in_lists():
+    result = thaw(v(['a', m(b=1), v(2)]), strict=False)
+    assert result == [['a', {'b': 1}, [2]]]
+    assert type(result[0][1]) is type(m())
+
 def test_mutant_decorator():
     @mutant
     def fn(a_list, a_dict):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/tests/hypothesis_vector_test.py 
new/pyrsistent-0.18.0/tests/hypothesis_vector_test.py
--- old/pyrsistent-0.17.3/tests/hypothesis_vector_test.py       2020-09-13 
08:53:39.000000000 +0200
+++ new/pyrsistent-0.18.0/tests/hypothesis_vector_test.py       2021-06-28 
21:27:36.000000000 +0200
@@ -16,7 +16,7 @@
 from hypothesis.stateful import RuleBasedStateMachine, Bundle, rule
 
 
-class TestObject(object):
+class RefCountTracker:
     """
     An object that might catch reference count errors sometimes.
     """
@@ -45,7 +45,7 @@
 
 
 # Pairs of a list and corresponding pvector:
-PVectorAndLists = st.lists(st.builds(TestObject)).map(
+PVectorAndLists = st.lists(st.builds(RefCountTracker)).map(
     lambda l: (l, pvector(l)))
 
 
@@ -104,7 +104,7 @@
         Append an item to the pair of sequences.
         """
         l, pv = former
-        obj = TestObject()
+        obj = RefCountTracker()
         l2 = l[:]
         l2.append(obj)
         return l2, pv.append(obj)
@@ -146,7 +146,7 @@
         assume(l)
         l2 = l[:]
         i = data.draw(st.sampled_from(range(len(l))))
-        obj = TestObject()
+        obj = RefCountTracker()
         l2[i] = obj
         return l2, pv.set(i, obj)
 
@@ -160,7 +160,7 @@
         assume(l)
         l2 = l[:]
         i = data.draw(st.sampled_from(range(len(l))))
-        obj = TestObject()
+        obj = RefCountTracker()
         l2[i] = obj
         return l2, pv.transform([i], obj)
 
@@ -236,7 +236,7 @@
         """
         Append an item to the pair of sequences.
         """
-        obj = TestObject()
+        obj = RefCountTracker()
         item.current_list.append(obj)
         item.current_evolver.append(obj)
 
@@ -267,7 +267,7 @@
         """
         assume(item.current_list)
         i = data.draw(st.sampled_from(range(len(item.current_list))))
-        obj = TestObject()
+        obj = RefCountTracker()
         item.current_list[i] = obj
         item.current_evolver[i] = obj
 
@@ -278,7 +278,7 @@
         """
         assume(item.current_list)
         i = data.draw(st.sampled_from(range(len(item.current_list))))
-        obj = TestObject()
+        obj = RefCountTracker()
         item.current_list[i] = obj
         item.current_evolver.set(i, obj)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/tests/map_test.py 
new/pyrsistent-0.18.0/tests/map_test.py
--- old/pyrsistent-0.17.3/tests/map_test.py     2020-09-13 08:53:39.000000000 
+0200
+++ new/pyrsistent-0.18.0/tests/map_test.py     2021-06-28 21:27:36.000000000 
+0200
@@ -243,6 +243,8 @@
 def test_addition():
     assert m(x=1, y=2) + m(y=3, z=4) == m(x=1, y=3, z=4)
 
+def test_union_operator():
+    assert m(x=1, y=2) | m(y=3, z=4) == m(x=1, y=3, z=4)
 
 def test_transform_base_case():
     # Works as set when called with only one key
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/tests/record_test.py 
new/pyrsistent-0.18.0/tests/record_test.py
--- old/pyrsistent-0.17.3/tests/record_test.py  2020-09-13 08:53:39.000000000 
+0200
+++ new/pyrsistent-0.18.0/tests/record_test.py  2021-06-28 21:27:36.000000000 
+0200
@@ -221,15 +221,15 @@
     except ImportError:
         return  # Enum not supported in this environment
 
-    class TestEnum(Enum):
+    class ExampleEnum(Enum):
         x = 1
         y = 2
 
     class RecordContainingEnum(PRecord):
-        enum_field = field(type=TestEnum)
+        enum_field = field(type=ExampleEnum)
 
-    r = RecordContainingEnum(enum_field=TestEnum.x)
-    assert r.enum_field == TestEnum.x
+    r = RecordContainingEnum(enum_field=ExampleEnum.x)
+    assert r.enum_field == ExampleEnum.x
 
 def test_type_specification_must_be_a_type():
     with pytest.raises(TypeError):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyrsistent-0.17.3/tests/set_test.py 
new/pyrsistent-0.18.0/tests/set_test.py
--- old/pyrsistent-0.17.3/tests/set_test.py     2018-07-07 15:53:48.000000000 
+0200
+++ new/pyrsistent-0.18.0/tests/set_test.py     2021-06-28 21:27:36.000000000 
+0200
@@ -2,6 +2,9 @@
 import pytest
 import pickle
 
+def test_key_is_tuple():
+    with pytest.raises(KeyError):
+        pset().remove((1,1))
 
 def test_literalish_works():
     assert s() is pset()

Reply via email to