-
Notifications
You must be signed in to change notification settings - Fork 146
/
CHANGES.txt
406 lines (328 loc) · 19.5 KB
/
CHANGES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
Revision history
----------------
0.20.0, 2023-10-25
* Fix #245, never introduce new nodes during discard.
* Fix #268, do not rely on well implemented __ne__ for keys in pmaps, instead do explicit inversion of equality
comparison when checking for inequality.
* Officially support Python 3.12.
* Officially drop support for Python 3.7.
* Fix #273, build more types of wheels. Thanks @jams2 for this!
* Fix #282, add generic types to types. Thanks @lukasK9999 for this!
* Fix #281, defaultdict can now be frozen. NB! This is a backwards incompatible fix since defaultdict was not
previously frozen.
0.19.3, 2022-12-29
* Fix #264, add wheels and official support for Python 3.11. Thanks @hugovk for this!
0.19.2, 2022-11-03
* Fix #263, pmap regression in 0.19.1. Element access sometimes unreliable after insert.
Thanks @mwchase for reporting this!
0.19.1, 2022-10-30
* Fix #159 (through PR #243). Pmap keys/values/items now behave more like the corresponding Python 3
methods on dicts. Previously they returned a materialized PVector holding the items, now they return
views instead. This is a slight backwards incompatibility compared to previous behaviour, hence stepping
version to 0.19. Thanks @noahbenson for this!
* Fix #244, type for argument to PVector.delete missing. @thanks dscrofts for this!
* Fix #249, rename perf test directory to avoid tripping up automatic discovery in more recent setuptools versions
* Fix #247, performance bug when setting elements in maps and adding elements to sets
* Fix #248, build pure Python wheels. This is used by some installers. Thanks @andyreagan for this!
* Fix #254, #258, support manylinux_2014_aarch64 wheels. Thanks @Aaron-Durant for this!
0.19.0 - Never released due to issues found on test-PyPI
0.18.1, 2022-01-14
* Add universal wheels for MacOS, thanks @ntamas for this!
* Add support for Python 3.10, thanks @hugovk for this!
* Fix #236 compilation errors under Python 3.10.
* Drop official support for Python 3.6 since it's EOL since 2021-12-23.
* Fix #238, failing doc tests on Python 3.11, thanks @musicinmybrain for this!
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. 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.
0.17.1 (yanked for proper meta data), 2020-09-09
* Restrict package to Python >= 3.5 to not break unpinned Python 2 dependencies. Thanks @vphilippon
for this!
0.17.0 (yanked for Python 2 compatibility), 2020-09-08
* Remove Python 2 support code. This includes dropping some compatibility code and the dependency on
six. Thanks @djailla for this.
* Fix #200, python 3 exception chaining. This is a minor backwards incompatibility, hence stepping
to 0.17.0. Thanks @cool-RR for this!
0.16.0, 2020-03-24
* No major updates but Python 2 support no longer guaranteed.
* Fix #192, 'ignore_extra' for 'pvector_field'. Thanks @ss18 for this!
* Fix #191, include LICENCE in distribution. Thanks @johnthagen for this!
* Fix #190, minor MyPy errors. Thanks @Qhesz for this!
0.15.7, 2020-01-07
* NOTE! This is the last version of Pyrsistent that officially supports Python 2.X!
* Fix #186, type errors with more recent versions of MyPy. Thanks @qhesz for this!
* Build and test on ARM during CI. Thanks @ossdev07 for this!
* Set absolute imports for python2 compatibility. Thanks @michalvi for this!
0.15.6, 2019-11-23
* Fix #182 moduleinit name clash.
0.15.5, 2019-10-27
* Fix #179 Fixed 'ignore_extra' factory parameter for pvector. Thanks @ss18 for this!
0.15.4, 2019-07-27
* Fix #174, fix a GC traversal bug in pvector evolver C extension. Thanks @till-varoquaux for finding and fixing this!
* Fix #175, pytest 5 compatibility, this is a quick fix, some more work is needed to get coverage working etc.
0.15.3, 2019-07-07
* Fix #172, catch all exceptions during extension build to reduce chance of corner cases that prevents installation.
* Fix #171, in PVector equality comparison don's assume that other object has a length, check before calling len.
* Fix #168, write warning about failing build of C extension directly to stderr to avoid that pip silences it.
* Fix #155, update PMapEvolver type stub to better reflect implementation.
0.15.2, 2019-05-12
* Fix #166, Propagate 'ignore_extra' param in hierarchy. Thanks @ss18 for this!
* Fix #167, thaw typing. Thanks @nattofriends for this!
* Fix #154, not possible to insert empty pmap as leaf node with transform.
0.15.1, 2019-04-26
* Fix #163 installation broken on Python 2 because of fix of #161, thanks @vphilippon for this! Sorry for the
inconvenience.
0.15.0, 2019-04-25
* Python 3.4 is no longer officially supported since it is EOL since 2019-03-18.
* Fix #157, major improvements to type hints. Thanks @je-l for working on this and @nattofriend for reviewing the PR!
* Fix #161, installation fails on some Windows platforms because fallback to Python pvector does not work.
Thanks @MaxTaggart for fixing and verifying this!
0.14.11, 2019-02-21
* Fix #152 Don't use __builtin_popcount, this hopefully fixes #147 Error in pvectorc.cp37-win_amd64.pyd file, as well.
Thanks @benrg for this!
* Fix #151 Fix compatibility for hypothesis 4. Thanks @felixonmars for this!
0.14.10, 2019-02-09
* Fix #148, only require pytest-runner if running tests. Thanks @ccorbacho for this!
0.14.9, 2019-01-06
* Fix #144, Compile pvectormodule.c on windows. Thanks @ganwell for this!
0.14.8, 2018-12-19
* Fix #142, Improve type stubs. Thanks @arxanas for this!
0.14.7, 2018-11-20
* Fix #102, add PEP 561 type annotation stubs for most pyrsistent types. Thanks @nattofriends for this!
0.14.6, 2018-11-17
* Fix #135, Type classes for Python 3 type annotations of pyrsistent types. Thanks @nattofriends for this!
* Fix #128, Allow PClass and PRecord to ignore input parameters to constructor that are not part of the spec
instead of blowing up with a type error. Thanks @agberk for this!
0.14.5, 2018-10-14
* Fix #137, deprecation warnings in Python 3.7. Thanks @thombashi for this!
* Fix #129, building via setuptools and setup.py. Thanks @galuszkak for this!
0.14.4, 2018-07-08
* Fix #133, minor Python 3.7 compatibility issue. Pyrsistent is now officially Python 3.7 compliant!
v0.14.3, 2018-06-11
* Fix #123 regression where type names break sequence fields. Thanks @doozr for this!
* Fix #124 using the class name to make AttributeError on __getattr__ more informative for PRecords.
Thanks @neilvyas for this!
* Fix #125 how fields handle type arguments. Thanks @neilvyas for this!
v0.14.2, 2017-12-06
* Fix #121, regression in PClass.set() introduced in 0.14.1.
v0.14.1, 2017-11-27
* Equality check performance improvements for pvectors and pmaps. Thanks @dtomas for this!
* Avoid calling factories multiple times for fields that do not change, see PR #120 for for
details. Thanks @teepark for this!
v0.14.0, 2017-10-08
* Fix #117, pmap now accepts iterators as input to constructor. Thanks @Julian for this!
* Drop support for Python 2.6. Nothing has been done in this release that will explicitly
break pyrsistent for 2.6 but it will not be considered moving forward. Dropping 2.6
support is the reason for stepping the second decimal instead of the third.
v0.13.0, 2017-09-01
* Fix #113, Skip field factories when loading pickled objects. There is a
minor backwards incompatibilty in the behaviour because of this. Thanks
@teepark for fi this!
* Fix #116, negative indexing for pdeques. Thanks @Julian for this!
v0.12.3, 2017-06-04
* Fix #83, make it possible to use Python 3 enums as field type without having to wrap it in
a list or tuple. Thanks @douglas-treadwell for this!
v0.12.2, 2017-05-30
* Fix #108, now possible to use the values in predicates to transform. Thanks @exarkus for this!
* Fix #107, support multiple level of __invariant__ inheritance. Thanks @exarkus for this!
v0.12.1, 2017-02-26
* Fix #97, initialize CheckedPVector from iterator-
* Fix #97, cache hash value on PMap. Thanks @sarum90 for this!
v0.12.0, 2017-01-06
* Fix #87, add function get_in() for access to elements in deeply nested structures.
* Fix #91, add method update() to pset and pbag.
* Fix #92, incorrect discard of elements in transform on pvector
* This is a release candidate for 1.0 as I now consider pyrsistent fairly stable.
v0.11.13, 2016-04-03
* Fix #84, pvector segfault in CPython 3 when repr of contained object raises Exception.
* Update README to cover for issue described in #83.
v0.11.12, 2016-02-06
* Minor modifications of tests to allow testing as requested in #79 and #80.
* Also run CI tests under python 3.5
v0.11.11, 2016-01-31
* #78, include tests in pypi dist.
v0.11.10, 2015-12-27, NOTE! This release contains a backwards incompatible change
despite only stepping the patch version number. See below.
* Implement #74, attribute access on PClass evolver
* Implement #75, lazily evaluated invariant messages by providing a
callable with no arguments.
* Initial values on fields can now be evaluated on object creation
by providing a callable with no arguments.
NOTE! If you previously had callables as initial values this change means that those
will be called upon object creation which may not be what you want. As
a temporary workaround a callable returning a callable can be used. This
feature and the concept of initial values will likely change slightly in the future.
See #77 and and #76 for more information.
v0.11.9, 2015-11-01
* Added PVector.remove(), thanks @radix for initiating this!
v0.11.8, 2015-10-18
* Fix #66, UnicodeDecodeError when doing pip install in environments with ascii encoding as default.
Thanks @foolswood!
* Implement support for multiple types in pmap_field(), pvector_field() and pset_field(). Thanks @itamarst!
v0.11.7, 2015-10-03
* Fix #52, occasional SEGFAULTs due to misplaced call to PyObject_GC_Track. Thanks @jkbjh for this!
* Fix #42, complete support for delete. Now also on the C-implementation of the PVectorEvolver.
Thanks @itamarst for contributing a whole bunch of Hypothesis test cases covering the evolver operations!
v0.11.6, 2015-09-30
* Add +, -, & and | operations to PBag. Thanks @Futrell for this!
v0.11.5, 2015-09-29
* Fix bug introduced in 0.11.4 that prevented multi level inheritance from PClass.
* Make PClassMeta public for friendlier subclassing
v0.11.4, 2015-09-28
* Fix #59, make it possible to create weakrefs to all collection types.
Thanks @itamarst for reporting it.
* Fix #58, add __str__ to InvariantException. Thanks @tomprince for reporting it.
v0.11.3, 2015-09-15
* Fix #57, support pickling of PClasses and PRecords using pmap_field, pvector_field, and pset_field.
Thanks @radix for reporting this and submitting a fix for it!
v0.11.2, 2015-09-09
* Fix bug causing potential element loss when reallocating PMap. Thanks to @jml for finding
this and submitting a PR with a fix!
* Removed python 3.2 test build from Travis. There is nothing breaking 3.2 compatibility in this
release but there will be no effort moving forward to keep the 3.2 compatibility.
v0.11.1, 2015-08-24
* Fix #51, PClass.set() broken when used with string+value argument.
* #50, make it possible to specify more than one assertion in an invariant
* #48, make it possible to make recursive type references by using a string
as type specification.
v0.11.0, 2015-07-11
* #42, delete() function added to PVector to allow deletion of elements by index
and range. Will perform a full copy of the vector, no structural sharing.
Thanks @radix for helping out with this one!
* Fix #39, explicitly disallow ordering for PMap and PBag, Python 3 style
* Fix #37, PMap.values()/keys()/items() now returns PVectors instead of lists
v0.10.3, 2015-06-13
* Fix #40, make it possible to disable the C extension by setting the
PYRSISTENT_NO_C_EXTENSION environment variable.
v0.10.2, 2015-06-07
* Fix #38, construction from serialized object for pvector/pset/pmap fields.
v0.10.1, 2015-04-27
* Fix broken README.rst
v10.0.0, 2015-04-27
* New type PClass, a persistent version of a Python object. Related to issues #30 and #32.
Thanks @exarkun and @radix for input on this one!
* Rename PRecordTypeError -> PTypeError, it is now also raised by PClass
* New convenience functions, pvector_field, pmap_field and pset_field to create PRecord/PClass
fields for checked collections. Issues #26 and #36. Thanks to @itamarst for this!
* Removed deprecated function set_in() on PMap and PVector.
* Removed deprecated factory function pclass.
* Major internal restructuring breaking pyrsistent.py into multiple files. This should
not affect those only using the public interface but if you experience problems please
let me know.
v0.9.4, 2015-04-20
* Fix #34, PVector now compares against built in list type
v0.9.3, 2015-04-06
* Rename pclass back to immutable and deprecate the usage of the pclass function. PClass will be used by
a new, different type in upcoming releases.
* Documentation strings for the exceptions introduced in 0.9.2.
v0.9.2, 2015-04-03
* More informative type errors from checked types, issue #30
* Support multiple optional types, issue #28
v0.9.1, 2015-02-25
* Multi level serialization for checked types
v0.9.0, 2015-02-25, Lots of new stuff in this release!
* Checked types, checked versions of PVector, PMap, PSet that support type and invariant specification.
Currently lacking proper documentation but I'm working on it.
* set_in() on PVector and PMap are now deprecated and will be removed in the next release.
Use transform() instead. set_in() has been updated to use transform() for this release
this means that some corner error cases behave slightly different than before.
* Refactoring of the PVector to unify the type. Should not have any user impact as long as
only the public interface of pyrsistent has been used. PVector is now an abstract base class
with which the different implementations are registered.
* Evolvers have been updated to return themselves for evolving operations to allow function chaining.
* Richer exception messages for KeyErrors and IndexErrors specifying the key/index that caused the failure.
Thanks @radix for this.
* Missing attribute on PMaps when accessing with dot-notation now raises an AttributeError instead of a
KeyError. Issue #21.
* New function decorator @mutant that freezes all input arguments to a function and the return value.
* Add __version__ to pyrsistent.py. Issue #23.
* Fix pickling for pset. Issue #24.
v0.8.0, 2015-01-21
* New type PRecord. Subtype of PMap that allows explicit, declarative field specification. Thanks @boxed
for inspiration!
* Efficient transformations of arbitrary complexity on PMap and PVector. Thanks @boxed for inspiration!
* Breaking change to the evolver interface. What used to be .pvector(), .pmap() and .pset()
on the different evolvers has now been unified so that all evolvers have one method .persistent()
to produce the persistent counterpart. Sorry for any inconvenience.
* Removed the tests directory from the package.
* PMap and PSet now contains a copy-function to closer mimic the interface of the dict and set. These
functions will simply return a reference to self.
* Removed deprecated alias 'immutable' from pclass.
v0.7.1, 2015-01-17
* Fixes #14 where a file executed (unexpectedly) during installation was not python 3 compatible.
v0.7.0, 2015-01-04, No 1.0, instead a bunch of new stuff and one API breaking change to PMap.remove().
* Evolvers for pvector, pmap and pset to allow simple and efficient updates of multiple elements
in the collection. See the documentation for a closer description.
* New method mset on pvector to update multiple values in one operation
* Remove deprecated methods merge and merge_with on PMap
* Change behavior of PMap.remove, it will now raise a KeyError if the element is not present.
New method PMap.discard will instead return the original pmap if the element is not present.
This aligns the PMap with how things are done in the PSet and is closer to the behavior of the
built in counterparts.
v0.6.3, 2014-11-27
* Python 2.6 support, thanks @wrmsr!
* PMap.merge/merge_with renamed to update/update_with. merge/merge_with remains but will be
removed for 1.0.
* This is a release candidate for 1.0! Please be aware that PMap.merge/merge_with and immutable()
will be removed for 1.0.
v0.6.2, 2014-11-03
* Fix typo causing the pure python vector to be used even if the C implementation was
available. Thanks @zerc for finding it!
v0.6.1, 2014-10-31
* Renamed 'immutable' to 'pclass' for consistency but left immutable for compatibility.
v0.6.0, 2014-10-25
* New data structure, persistent linked list
* New data structure, persistent double ended queue
v0.5.0, 2014-09-24
* New data structure, persistent bag / multiset
* New functions freeze and thaw to recursively convert between python
built in data types and corresponding pyrsistent data types.
* All data structures can now be pickled
* New function merge_in on persistent map which allows a user
supplied function to implement the merge strategy.
v0.4.0, 2014-09-20
* Full Python 3 support.
* Immutable object implemented.
* Bug fixes in PVector.__repr__() and PMap.__hash__() and index check of PVector.
* Repr changed to be fully cut and paste compatible
* Changed assoc() -> set(), assoc_in() -> set_in(), massoc() -> mset().
Sorry for the API breaking change but I think those names are more pythonic.
* Improved documentation.
v0.3.1, 2014-06-29
* assoc() on PSet renamed back to add()
v0.3.0, 2014-06-28
* Full Sequence protocol support for PVector
* Full Mapping protocol support for PMap
* Full Set protocol support for PSet
* assoc_in() support for both PMap and PVector
* merge() support for PMap
* Performance improvements to the PVector C extension speed up allocation
v0.2.1, 2014-06-21
* Supply the tests with the distribution
v0.2.0, 2014-06-21
* New C extension with an optimized version of the persistent vector
* Updated API slightly
v0.1.0, 2013-11-10
* Initial release.
TODO (in no particular order)
-----------------------------
- Versioned data structure where the different versions can be accessed by index?
- Ordered sets and maps
- A good performance measurement suite