dtools.datastructures 0.25.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dtools_datastructures-0.25.0/CHANGELOG.md +606 -0
- dtools_datastructures-0.25.0/LICENSE +190 -0
- dtools_datastructures-0.25.0/PKG-INFO +65 -0
- dtools_datastructures-0.25.0/README.md +41 -0
- dtools_datastructures-0.25.0/pyproject.toml +71 -0
- dtools_datastructures-0.25.0/pytest.ini +4 -0
- dtools_datastructures-0.25.0/src/dtools/datastructures/__init__.py +31 -0
- dtools_datastructures-0.25.0/src/dtools/datastructures/nodes.py +189 -0
- dtools_datastructures-0.25.0/src/dtools/datastructures/py.typed +0 -0
- dtools_datastructures-0.25.0/src/dtools/datastructures/queues.py +420 -0
- dtools_datastructures-0.25.0/src/dtools/datastructures/splitends/__init__.py +27 -0
- dtools_datastructures-0.25.0/src/dtools/datastructures/splitends/py.typed +0 -0
- dtools_datastructures-0.25.0/src/dtools/datastructures/splitends/se.py +179 -0
- dtools_datastructures-0.25.0/src/dtools/datastructures/tuples.py +203 -0
- dtools_datastructures-0.25.0/tests/grscheller/datastructures/splitends/test_se.py +253 -0
- dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_ftuple.py +161 -0
- dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_functional.py +127 -0
- dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_node.py +63 -0
- dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_queue.py +500 -0
- dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_repr.py +234 -0
- dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_str.py +110 -0
@@ -0,0 +1,606 @@
|
|
1
|
+
# CHANGELOG
|
2
|
+
|
3
|
+
PyPI grscheller.datastructures project.
|
4
|
+
|
5
|
+
#### Semantic versioning
|
6
|
+
|
7
|
+
* first digit - major event, epoch, or paradigm shift
|
8
|
+
* second digit - breaking API changes, major changes
|
9
|
+
* third digit - bug fixes, API additions, breaking API in dev env
|
10
|
+
* forth digit - commit count changes/regressions (dev environment only)
|
11
|
+
|
12
|
+
## Releases and other important milestones
|
13
|
+
|
14
|
+
### Version 0.24.0 - PyPI release date 2024-11-18
|
15
|
+
|
16
|
+
* Changed flatMap to bind thru out project
|
17
|
+
|
18
|
+
### Version 0.23.1 - PyPI release date 2024-11-18
|
19
|
+
|
20
|
+
* Fixed bug with datastructures.tuple module
|
21
|
+
* forgot to import std lib typing.cast into tuples.py
|
22
|
+
|
23
|
+
### Version 0.23.0 - PyPI release date 2024-11-18
|
24
|
+
|
25
|
+
* publishing previous change and grscheller consistency changes
|
26
|
+
* suspect SplitEnd class needs more work, not just clean up
|
27
|
+
* not prepared to wrap my brain around it right now
|
28
|
+
* don't want to delay PyPI releases for other repos
|
29
|
+
* once splitends under control, will consider a 1.0.0 release
|
30
|
+
|
31
|
+
### Version 0.22.3.0 - Preparing for a 0.23.0 PyPI release
|
32
|
+
|
33
|
+
* renamed class FTuple -> ftuple
|
34
|
+
* ftuple now takes 0 or 1 iterables, like list and tuple do
|
35
|
+
* created factory function for original constructor use case
|
36
|
+
* FT[D](*ds: D) -> ftuple[D]
|
37
|
+
|
38
|
+
### Version 0.22.1 - PyPI release date 2024-10-20
|
39
|
+
|
40
|
+
* removed docs from repo
|
41
|
+
* docs for all grscheller namespace projects maintained here
|
42
|
+
* https://grscheller.github.io/grscheller-pypi-namespace-docs/
|
43
|
+
|
44
|
+
### Version 0.22.0 - PyPI release date 2024-10-18
|
45
|
+
|
46
|
+
* Major refactoring of SplitEnd class
|
47
|
+
* splitends is now a subpackage containing the se module
|
48
|
+
* removed supporting classes
|
49
|
+
* can now be empty
|
50
|
+
* grscheller.datastructures no longer uses nada as a sentinel value
|
51
|
+
* replaced with grscheller.fp.nothingness.noValue
|
52
|
+
* made classes in nodes module less passive with better encapsulation
|
53
|
+
* compatible with:
|
54
|
+
* grscheller.fp >= 1.0.0 < 1.01
|
55
|
+
* grscheller.circular-array >= 3.6.1 < 3.7
|
56
|
+
|
57
|
+
### Version 0.21.1.1 - BROKEN as of 2024-10-03
|
58
|
+
|
59
|
+
* Does not work with either
|
60
|
+
* grscheller.fp 0.3.3 (version working for 0.21.0 release)
|
61
|
+
* grscheller.fp 0.4.0 (latest version of fp)
|
62
|
+
* Needs an upgrade
|
63
|
+
* TODO: replace Nada with MB as was done for grscheller.fp.iterables
|
64
|
+
|
65
|
+
### Version 0.21.1.0 - mostly docstring updates 2024-09-17
|
66
|
+
|
67
|
+
* renamed module `split_ends` -> `stacks`
|
68
|
+
|
69
|
+
### Version 0.21.0 - PyPI release date 2024-08-20
|
70
|
+
|
71
|
+
* got back to a state maintainer is happy with
|
72
|
+
* many dependencies needed updating first
|
73
|
+
|
74
|
+
### Version 0.20.5.1 - datastructures coming back together 2024-08-19
|
75
|
+
|
76
|
+
* works with all the current versions of fp and circular-array
|
77
|
+
* preparing for PyPI 0.21.0 release
|
78
|
+
|
79
|
+
### Version 0.20.5.0 - datastructures coming back together 2024-08-17
|
80
|
+
|
81
|
+
* updated to use grscheller.fp.nada instead of grscheller.untyped.nothing
|
82
|
+
* made debugging tons easier
|
83
|
+
* updated to use all latest PyPI versions of dependencies
|
84
|
+
* three failed tests involving class SplitEnd
|
85
|
+
* putting off PyPI v1.0.0 release indefinitely
|
86
|
+
* all dependencies need to be at v1.0+
|
87
|
+
* need to work out SplitEnd bugs
|
88
|
+
* still need to finalize design (need to use it!)
|
89
|
+
* need to find good SplitEnd use case
|
90
|
+
* other Stack variants like SplintEnd??? (shared data/node variants?)
|
91
|
+
|
92
|
+
### Version 0.20.2.0 - Going down a typing rabbit hole 2024-08-03
|
93
|
+
|
94
|
+
* updated to use grscheller.circular-array version 3.3.0 (3.2.3.0)
|
95
|
+
* updated to use grscheller.fp version 0.3.0 (0.2.3.0)
|
96
|
+
* removed grscheller.circular-array dependency from datastructures.SplitEnd
|
97
|
+
* still preparing for the 1.0.0 datastructures release
|
98
|
+
* as I tighten up typing, I find I must do so for dependencies too
|
99
|
+
* using `# type: ignore` is a band-aid, use `@overload` and `cast` instead
|
100
|
+
* using `@overload` to "untype" optional parameters is the way to go
|
101
|
+
* use `cast` only when you have knowledge beyond what the typechecker can know
|
102
|
+
|
103
|
+
### Version 0.19.0 - PyPI release date 2024-07-15
|
104
|
+
|
105
|
+
* continuing to prepare for PyPI release 1.0.0
|
106
|
+
* cleaned up docstrings for a 1.0.0 release
|
107
|
+
* changed accumulate1 to accumulate for FTuple
|
108
|
+
* considering requiring grscheller.fp as a dependency
|
109
|
+
|
110
|
+
### Version 0.18.0.0 - Beginning to prepare for PyPI release 1.0.0
|
111
|
+
|
112
|
+
* first devel version requiring circular-array 3.1.0
|
113
|
+
* still some design work to be done
|
114
|
+
* gave Class SplitEnd fold and fold1 methods
|
115
|
+
* TODO: Verify flatMap family yields results in "natural" order
|
116
|
+
|
117
|
+
### Version 0.17.0.4 - Start of effort to relax None restrictions
|
118
|
+
|
119
|
+
* have begun relaxing the requirement of not storing None as a value
|
120
|
+
* completed for queues.py
|
121
|
+
* requires grscheller.circular-array >= 3.0.3.0
|
122
|
+
* perhaps next PyPI release will be v1.0.0 ???
|
123
|
+
|
124
|
+
### Version 0.16.0.0 - Preparing to support PEP 695 generics
|
125
|
+
|
126
|
+
* Requires Python >= 3.12
|
127
|
+
* preparing to support PEP 695 generics
|
128
|
+
* will require Python 3.12
|
129
|
+
* will not have to import typing for Python 3.12 and beyond
|
130
|
+
* BUT... mypy does not support PEP 695 generics yet (Pyright does)
|
131
|
+
* bumped minimum Python version to >= 3.12 in pyproject.toml
|
132
|
+
* map methods mutating objects don't play nice with typing
|
133
|
+
* map methods now return copies
|
134
|
+
* THEREFORE: tests need to be completely overhauled
|
135
|
+
|
136
|
+
### Version 0.14.1.1 - Preparing to add TypeVars
|
137
|
+
|
138
|
+
* tests working with grscheller.circular-array >= 3.0.0, <3.2
|
139
|
+
* lots of mypy complaints
|
140
|
+
* first version using TypeVars will be 0.15.0.0
|
141
|
+
|
142
|
+
### Version 0.14.0 - PyPI release date 2024-03-09
|
143
|
+
|
144
|
+
* updated dependency on CircularArray class
|
145
|
+
* dependencies = ["grscheller.circular-array >= 0.2.0, < 2.1"]
|
146
|
+
* minor README.md woodsmithing
|
147
|
+
* keeping project an Alpha release for now
|
148
|
+
|
149
|
+
### Version 0.13.3.1 - Preparing for another PyPI release soon
|
150
|
+
|
151
|
+
* overhauled docstrings with Markdown markup
|
152
|
+
* updated pyproject.py to drop project back to an Alpha release
|
153
|
+
* allows more renaming flexibility
|
154
|
+
* intending to develop more graph based data structures
|
155
|
+
* renamed class core.nodes.Tree_Node to core.node.BT_Node
|
156
|
+
* BT for Binary Tree (data in each node of tree)
|
157
|
+
* created class core.nodes.LT_Node
|
158
|
+
* LT for Leaf Tree (data are the leaves of the tree)
|
159
|
+
* removed deprecated reduce method from various classes
|
160
|
+
* use foldL instead
|
161
|
+
|
162
|
+
### Version 0.13.2 - PyPI release date 2024-02-20
|
163
|
+
|
164
|
+
* Forgot to update pyproject.toml dependencies
|
165
|
+
* dependencies = ["grscheller.circular-array >= 0.1.1, < 1.1"]
|
166
|
+
|
167
|
+
### Version 0.13.1 - PyPI Release date 2024-01-31
|
168
|
+
|
169
|
+
* FTuple now supports both slicing and indexing
|
170
|
+
* more tests for FTuple
|
171
|
+
* slicing and indexing
|
172
|
+
* map, foldL, accumulate methods
|
173
|
+
* flatMap, mergeMap, exhaustMap methods
|
174
|
+
* forgot to update CHANGELOG for v0.13.0 release
|
175
|
+
|
176
|
+
### Version 0.13.0 - PyPI Release date 2024-01-30
|
177
|
+
|
178
|
+
* BREAKING API CHANGE - CircularArray class removed
|
179
|
+
* CircularArray moved to its own PyPI & GitHub repos
|
180
|
+
* https://pypi.org/project/grscheller.circular-array/
|
181
|
+
* https://github.com/grscheller/circular-array
|
182
|
+
* Fix various out-of-date docstrings
|
183
|
+
|
184
|
+
### Version 0.12.3 - PyPI Release date 2024-01-20
|
185
|
+
|
186
|
+
* cutting next PyPI release from development (main)
|
187
|
+
* if experiment works, will drop release branch
|
188
|
+
* will not include `docs/`
|
189
|
+
* will not include `.gitignore` and `.github/`
|
190
|
+
* will include `tests/`
|
191
|
+
* made pytest >= 7.4 an optional test dependency
|
192
|
+
|
193
|
+
### Version 0.12.2 - PyPI Release date 2024-01-17
|
194
|
+
|
195
|
+
* designing sensible reduce & accumulate overrides for Maybe & Either
|
196
|
+
* default implementations were not that useful
|
197
|
+
* taking their behavior as bugs and not API changes
|
198
|
+
* more tests for accumulate & reduce
|
199
|
+
* fixed Stack reverse() method
|
200
|
+
* should have caught this when I fixed FStack on last PyPI release
|
201
|
+
* more Stack tests
|
202
|
+
* many more FP tests
|
203
|
+
|
204
|
+
### Version 0.12.1 - PyPI Release date 2024-01-15
|
205
|
+
|
206
|
+
* BUG FIX: FStack reverse() method
|
207
|
+
* added more tests
|
208
|
+
|
209
|
+
### Version 0.12.0 - PyPI Release date 2024-01-14
|
210
|
+
|
211
|
+
* Considerable future-proofing for first real Beta release
|
212
|
+
|
213
|
+
### Version 0.11.3.4 - Finally decided to make next PyPI release Beta
|
214
|
+
|
215
|
+
* Package structure mature and not subject to change beyond additions
|
216
|
+
* Will endeavor to keep top level & core module names the same
|
217
|
+
* API changes will be deprecated before removed
|
218
|
+
|
219
|
+
### Version 0.11.0 - PyPI Release date 2023-12-20
|
220
|
+
|
221
|
+
* A lot of work done on class CLArray
|
222
|
+
* probably will change its name before the next PyPI Release
|
223
|
+
* perhaps to "ProcessArray" or "PArray"
|
224
|
+
* Keeping this release an Alpha version
|
225
|
+
* mostly for the freedom to rename and restructure the package
|
226
|
+
|
227
|
+
### Version 0.10.17.0+ (0.11.0-RC2) - 2023-12-17
|
228
|
+
|
229
|
+
* Second release candidate - probably will become next PyPI release
|
230
|
+
* main now development branch, release will be release branch
|
231
|
+
* decided to drop it back to Alpha
|
232
|
+
* making datastructures a Beta release was premature
|
233
|
+
* classifier "Development Status :: 3 - Alpha"
|
234
|
+
* will cut next PyPI release with Flit from release branch
|
235
|
+
* will need to regenerate docs on release & move to main
|
236
|
+
* things to add in main before next release
|
237
|
+
* will not make Maybe Nothing a singleton
|
238
|
+
* last touched CLArray refactor
|
239
|
+
* improve CLArray test coverage
|
240
|
+
* Things for future PYPI releases
|
241
|
+
* inherit FTuple from Tuple (use __new__) for performance boost
|
242
|
+
* hold off using __slots__ until I understand them better
|
243
|
+
|
244
|
+
### Version 0.10.14.2 (0.11.0-RC1) - 2023-12-11
|
245
|
+
|
246
|
+
* First release candidate - unlikely this will be the next PyPI release
|
247
|
+
* will cut next PyPI release with Flit from main branch
|
248
|
+
* removed docs directory before merge (docs/ will be main only)
|
249
|
+
* things to add in main before next release
|
250
|
+
* make Maybe Nothing a singleton (use __new__)
|
251
|
+
* derive FTuple from Tuple (use __new__) for performance boost
|
252
|
+
* simplify CLArray to use a Queue instead of CircularArray & iterator
|
253
|
+
* start using __slots__ for performance boost to data structures
|
254
|
+
* efficiency trumps extensibility
|
255
|
+
* prevents client code adding arbitrary attributes & methods
|
256
|
+
* smaller size & quicker method/attribute lookups
|
257
|
+
* big difference when dealing with huge number of data structures
|
258
|
+
|
259
|
+
### Version 0.10.14.0 - commit date 2023-12-09
|
260
|
+
|
261
|
+
* Finished massive renaming & repackaging effort
|
262
|
+
* to help with future growth in future
|
263
|
+
* name choices more self-documenting
|
264
|
+
* top level modules
|
265
|
+
* array
|
266
|
+
* CLArray
|
267
|
+
* queue
|
268
|
+
* FIFOQueue (formerly SQueue)
|
269
|
+
* LIFOQueue (LIFO version of above)
|
270
|
+
* DoubleQueue (formerly DQueue)
|
271
|
+
* stack
|
272
|
+
* Stack (formerly PStack)
|
273
|
+
* FStack
|
274
|
+
* tuple-like
|
275
|
+
* FTuple
|
276
|
+
|
277
|
+
### Version 0.10.11.0 - commit date 2023-11-27
|
278
|
+
|
279
|
+
* Created new datastructures class CLArray
|
280
|
+
* more imperative version of FCLArray
|
281
|
+
* has an iterator to swap None values instead of a default value
|
282
|
+
* when iterator is exhausted, will swap in () for None
|
283
|
+
* no flatMap type methods
|
284
|
+
* map method mutates self
|
285
|
+
* can be resized
|
286
|
+
* returns false when CLArray contains no non-() elements
|
287
|
+
* TODO: does not yet handle StopIteration events properly
|
288
|
+
* made package more overall "atomic"
|
289
|
+
|
290
|
+
### Version 0.10.10.0 - commit date 2023-11-26
|
291
|
+
|
292
|
+
* More or less finalized FCLArray API
|
293
|
+
* finished overriding default flatMap, mergeMap & exhaustMap from FP
|
294
|
+
* need mergeMap & exhaustMap versions of unit tests
|
295
|
+
* found this data structure very interesting
|
296
|
+
* hopefully find a use for it
|
297
|
+
* considering a simpler CLArray version
|
298
|
+
|
299
|
+
### Version 0.10.9 - PyPI release date 2023-11-21
|
300
|
+
|
301
|
+
### Version 0.10.8.0 - commit date 2023-11-18
|
302
|
+
|
303
|
+
* Bumping requires-python = ">=3.11" in pyproject.toml
|
304
|
+
* Currently developing & testing on Python 3.11.5
|
305
|
+
* 0.10.7.X will be used on the GitHub pypy3 branch
|
306
|
+
* Pypy3 (7.3.13) using Python (3.10.13)
|
307
|
+
* tests pass but are 4X slower
|
308
|
+
* LSP almost useless due to more primitive typing module
|
309
|
+
|
310
|
+
### Version 0.10.7.0 - commit date 2023-11-18
|
311
|
+
|
312
|
+
* Overhauled __repr__ & __str__ methods for all classes
|
313
|
+
* tests that ds == eval(repr(ds)) for all data structures ds in package
|
314
|
+
* CLArray API is in a state of flux
|
315
|
+
* no longer stores None as a value
|
316
|
+
* __add__ concatenates, no longer component adds
|
317
|
+
* maybe allow zero length CLArrays?
|
318
|
+
* would make it a monoid and not just a semigroup
|
319
|
+
* make an immutable version too?
|
320
|
+
* Updated markdown overview documentation
|
321
|
+
|
322
|
+
### Version 0.10.1.0 - commit date 2023-11-11
|
323
|
+
|
324
|
+
* Removed flatMap methods from stateful objects
|
325
|
+
* FLArray, DQueue, SQueue, PStack
|
326
|
+
* kept the map method for each
|
327
|
+
* some restructuring so package will scale better in the future
|
328
|
+
|
329
|
+
### Version 0.9.1 - PyPI release date: 2023-11-09
|
330
|
+
|
331
|
+
* First Beta release of grscheller.datastructures on PyPI
|
332
|
+
* Infrastructure stable
|
333
|
+
* Existing datastructures only should need API additions
|
334
|
+
* Type annotations working extremely well
|
335
|
+
* Using Pdoc3 to generate documentation on GitHub
|
336
|
+
* see https://grscheller.github.io/datastructures/
|
337
|
+
* All iterators conform to Python language "iterator protocol"
|
338
|
+
* Improved docstrings
|
339
|
+
* Future directions:
|
340
|
+
* Develop some "typed" containers
|
341
|
+
* Add sequence & transverse methods to functional subpackage classes
|
342
|
+
* Monad transformers???
|
343
|
+
* Need to use this package in other projects to gain insight
|
344
|
+
|
345
|
+
### Version 0.8.6.0 - PyPI release date: 2023-11-05
|
346
|
+
|
347
|
+
* Finally got queue.py & stack.py inheritance sorted out
|
348
|
+
* LSP with Pyright working quite well
|
349
|
+
* Goals for next PyPI release:
|
350
|
+
* combine methods
|
351
|
+
* tail and tailOr
|
352
|
+
* cons and consOr
|
353
|
+
* head and headOr
|
354
|
+
|
355
|
+
### Version 0.8.4.0 - commit date 2023-11-03
|
356
|
+
|
357
|
+
* new data structure FTuple added
|
358
|
+
* wrapped tuple with a FP interface
|
359
|
+
* initial minimal viable product
|
360
|
+
|
361
|
+
### Version 0.8.3.0 - commit date 2023-11-02
|
362
|
+
|
363
|
+
* major API breaking change
|
364
|
+
* now two versions of Stack class
|
365
|
+
* PStack (stateful) with push, pop, peak methods
|
366
|
+
* FStack (immutable) with cons, tail, head methods
|
367
|
+
* Dqueue renamed DQueue
|
368
|
+
* FLarray renamed FLArray
|
369
|
+
* tests now work
|
370
|
+
|
371
|
+
### Version 0.8.0.0 - commit date 2023-10-28
|
372
|
+
|
373
|
+
* API breaking changes
|
374
|
+
* did not find everything returning self upon mutation
|
375
|
+
* Efforts for future directions
|
376
|
+
* decided to use pdoc3 over sphinx to generate API documentation
|
377
|
+
* need to resolve tension of package being Pythonic and Functional
|
378
|
+
|
379
|
+
### Version 0.7.5.0 - commit date 2023-10-26
|
380
|
+
|
381
|
+
* moved pytest test suite to root of the repo
|
382
|
+
* src/grscheller/datastructures/tests -> tests/
|
383
|
+
* seems to be the canonical location of a test suite
|
384
|
+
* instructions to run test suite in tests/__init__.py
|
385
|
+
|
386
|
+
### Version 0.7.4.0 - PyPI release date: 2023-10-25
|
387
|
+
|
388
|
+
* More mature
|
389
|
+
* More Pythonic
|
390
|
+
* Major API changes
|
391
|
+
* Still tagging it an Alpha release
|
392
|
+
|
393
|
+
### Version 0.7.2.0 - commit date 2023-10-18
|
394
|
+
|
395
|
+
* Queue & Dqueue no longer return Maybe objects
|
396
|
+
* Neither store None as a value
|
397
|
+
* Now safe to return None for non-existent values
|
398
|
+
* like popping or peaking from an empty queue or dqueue
|
399
|
+
|
400
|
+
### Version 0.7.0.0 - commit date 2023-10-16
|
401
|
+
|
402
|
+
* added Queue data structure representing a FIFO queue
|
403
|
+
* renamed two Dqueue methods
|
404
|
+
* headR -> peakLastIn
|
405
|
+
* headL -> peakNextOut
|
406
|
+
* went ahead and removed Stack head method
|
407
|
+
* fair since I still labeling releases as alpha releases
|
408
|
+
* the API is still a work in progress
|
409
|
+
* updated README.md
|
410
|
+
* foreshadowing making a distinction between
|
411
|
+
* objects "sharing" their data -> FP methods return copies
|
412
|
+
* objects "contain" their data -> FP methods mutate object
|
413
|
+
* added info on class Queue
|
414
|
+
|
415
|
+
### Version 0.6.9.0 - PyPI release date: 2023-10-09
|
416
|
+
|
417
|
+
* deprecated Stack head() method
|
418
|
+
* replaced with peak() method
|
419
|
+
* renamed core module to iterlib module
|
420
|
+
* library just contained functions for manipulating iterators
|
421
|
+
* TODO: use mergeIters as a guide for an iterator "zip" function
|
422
|
+
* class Stack better in alignment with:
|
423
|
+
* Python lists
|
424
|
+
* more natural for Stack to iterate backwards starting from head
|
425
|
+
* removed Stack's __getitem__ method
|
426
|
+
* both pop and push/append from end
|
427
|
+
* Dqueue which wraps a Circle instance
|
428
|
+
* also Dqueue does not have a __getitem__ method
|
429
|
+
* Circle which implements a circular array with a Python List
|
430
|
+
* Stack now implements map, flatMap, mergeMap methods
|
431
|
+
* each returns a new Stack instance, with new nodes
|
432
|
+
|
433
|
+
### Version 0.6.8.6 - commit date: 2023-10-08
|
434
|
+
|
435
|
+
* 3 new methods for class Circle and Dqueue
|
436
|
+
* mapSelf, flatMapSelf, mergeMapSelf
|
437
|
+
* these correspond to map, flatMap, mergeMap
|
438
|
+
* except they act on the class objects themselves, not new instances
|
439
|
+
* these new methods will NOT be added to the Stack class
|
440
|
+
* they would destroy node sharing
|
441
|
+
* did add a map method which returns a new instance (with new nodes)
|
442
|
+
* TODO: add flatMap and mergeMap methods
|
443
|
+
* probably will add them to the Dqueue class too
|
444
|
+
* not worth the maintenance effort maintaining two version of Dqueue
|
445
|
+
* one returning new instances
|
446
|
+
* the other modifying the object in place
|
447
|
+
|
448
|
+
### Version 0.6.8.3 - commit date: 2023-10-06
|
449
|
+
|
450
|
+
* Stack now works with Python Reversed builtin function
|
451
|
+
* using a __reversed__ method which is O(n)
|
452
|
+
* never figured out why reversed() failed with __getitems__ & __len__
|
453
|
+
* this would have been O(n^2) anyway
|
454
|
+
* Stack no longer implements the __getitems__ method
|
455
|
+
* class Carray renamed to Circle
|
456
|
+
* implements a circular array based on a Python List
|
457
|
+
* resizes itself as needed
|
458
|
+
* will handle None values being pushed and popped from it
|
459
|
+
* implemented in the grscheller.datastructures.circle module
|
460
|
+
* in the src/grscheller/datastructures/circle.py file
|
461
|
+
* O(1) pushing/popping to/from either end
|
462
|
+
* O(1) length determination
|
463
|
+
* O(1) indexing for setting and getting values.
|
464
|
+
* Dqueue implemented with Circle class instead of List class directly
|
465
|
+
* Ensured that None is never pushed to Stack & Dqueue objects
|
466
|
+
|
467
|
+
|
468
|
+
### Version 0.6.4.1 - commit date: 2023-10-01
|
469
|
+
|
470
|
+
* Initial prototypes for map and flatMap for Dqueue class
|
471
|
+
* Started grscheller.datastructures.core module
|
472
|
+
* used for grscheller.datastructures implementation
|
473
|
+
* no particular need to indicate them to be _private
|
474
|
+
* exports the following functions so far
|
475
|
+
* concatIters - sequentially concatenate multiple iterators
|
476
|
+
* mergeIters - merge multiple iterators until one is exhausted
|
477
|
+
* mapIter - lazily map a function over an iterator stream
|
478
|
+
* Decided to keep Alpha for next PyPI release
|
479
|
+
|
480
|
+
### Version 0.6.3.2 - commit date: 2023-09-30
|
481
|
+
|
482
|
+
* Made functional module into a sub package of datastructures
|
483
|
+
* Improved comments and type annotations
|
484
|
+
* Removed isEmpty method from Dqueue class
|
485
|
+
* Both Dqueue & Stack objects evaluate true when non-empty
|
486
|
+
* Beginning preparations for the next PyPI release
|
487
|
+
* Want to make next PyPI release a Beta release
|
488
|
+
* Need to improve test suite first
|
489
|
+
|
490
|
+
### Version 0.6.2.0 - commit date: 2023-09-25
|
491
|
+
|
492
|
+
* Started work on a Left biased Either Monad
|
493
|
+
* removed isEmpty method from Stack class
|
494
|
+
|
495
|
+
### Version 0.6.1.0 - commit date: 2023-09-25
|
496
|
+
|
497
|
+
* Maybe get() and getOrElse() API changes
|
498
|
+
* getting a better handle on type annotation
|
499
|
+
* work-in-progress
|
500
|
+
* erroneous LSP error messages greatly reduced
|
501
|
+
|
502
|
+
### Version 0.5.2.1 - PyPI release date: 2023-09-24
|
503
|
+
|
504
|
+
* data structures now support a much more FP style for Python
|
505
|
+
* implemented Maybe monad
|
506
|
+
* introduces the use of type annotations for this effort
|
507
|
+
* much better test coverage
|
508
|
+
|
509
|
+
### Version 0.5.0.0 - commit date: 2023-09-20
|
510
|
+
|
511
|
+
* begin work on a more functional approach
|
512
|
+
* create a monadic Option class
|
513
|
+
* drop the subclassing of NONE
|
514
|
+
* put this effort on a new branch: feature_maybe
|
515
|
+
* some flaws with previous approach
|
516
|
+
* the OO redirection not best
|
517
|
+
* for a class used in computationally intense contexts
|
518
|
+
* adds way too much complexity to the design
|
519
|
+
* some Python library probably already implemented this
|
520
|
+
* without looking, these probably throw tons of exceptions
|
521
|
+
* more fun implementing it myself
|
522
|
+
* then being dissatisfied with someone else's design
|
523
|
+
|
524
|
+
### Version 0.4.0.0 - commit date: 2023-09-11
|
525
|
+
|
526
|
+
* subtle paradigm shift for Stack class
|
527
|
+
* empty Stacks no longer returned for nonexistent stacks
|
528
|
+
* like the tail of an empty stack
|
529
|
+
* singleton Stack.stackNONE class object returned instead
|
530
|
+
* Stack & _StackNONE classes inherit from _StackBase
|
531
|
+
* still working out the API
|
532
|
+
|
533
|
+
### Version 0.3.0.2 - PyPI release date: 2023-09-09
|
534
|
+
|
535
|
+
* updated class Dqueue
|
536
|
+
* added __eq__ method
|
537
|
+
* added equality tests to tests/test_dqueue.py
|
538
|
+
* improved docstrings
|
539
|
+
|
540
|
+
### Version 0.2.3.0 - commit date: 2023-09-06
|
541
|
+
|
542
|
+
* added __eq__ method to Stack class
|
543
|
+
* added some preliminary tests
|
544
|
+
* more tests are needed
|
545
|
+
* worst case O(n)
|
546
|
+
* will short circuit fast if possible
|
547
|
+
|
548
|
+
### Version 0.2.2.2 - PyPI release date: 2023-09-04
|
549
|
+
|
550
|
+
* decided base package should have no dependencies other than
|
551
|
+
* Python version (>=2.10 due to use of Python match statement)
|
552
|
+
* Python standard libraries
|
553
|
+
* made pytest an optional \[test\] dependency
|
554
|
+
* added src/ as a top level directory as per
|
555
|
+
* https://packaging.python.org/en/latest/tutorials/packaging-projects/
|
556
|
+
* could not do the same for tests/ if end users are to have access
|
557
|
+
|
558
|
+
### Version 0.2.1.0 - PyPI release date: 2023-09-03
|
559
|
+
|
560
|
+
* first Version uploaded to PyPI
|
561
|
+
* https://pypi.org/project/grscheller.datastructures/
|
562
|
+
* Install from PyPI
|
563
|
+
* $ pip install grscheller.datastructures==0.2.1.0
|
564
|
+
* $ pip install grscheller.datastructures # for top level version
|
565
|
+
* Install from GitHub
|
566
|
+
* $ pip install git+https://github.com/grscheller/datastructures@v0.2.1.0
|
567
|
+
* pytest made a dependency
|
568
|
+
* useful & less confusing to developers and end users
|
569
|
+
* good for systems I have not tested on
|
570
|
+
* prevents another pytest from being picked up from shell $PATH
|
571
|
+
* using a different python version
|
572
|
+
* giving "package not found" errors
|
573
|
+
* for CI/CD pipelines requiring unit testing
|
574
|
+
|
575
|
+
### Version 0.2.0.2 - github only release date: 2023-08-29
|
576
|
+
|
577
|
+
* First version able to be installed from GitHub with pip
|
578
|
+
* $ pip install git+https://github.com/grscheller/datastructures@v0.2.0.2
|
579
|
+
|
580
|
+
### Version 0.2.0.1 - commit date: 2023-08-29
|
581
|
+
|
582
|
+
* First failed attempt to make package installable from GitHub with pip
|
583
|
+
|
584
|
+
### Version 0.2.0.0 - commit date: 2023-08-29
|
585
|
+
|
586
|
+
* BREAKING API CHANGE!!!
|
587
|
+
* Stack push method now returns reference to self
|
588
|
+
* Dqueue pushL & pushR methods now return references to self
|
589
|
+
* These methods used to return the data being pushed
|
590
|
+
* Now able to "." chain push methods together
|
591
|
+
* Updated tests - before making API changes
|
592
|
+
* First version to be "released" on GitHub
|
593
|
+
|
594
|
+
### Version 0.1.1.0 - commit date: 2023-08-27
|
595
|
+
|
596
|
+
* grscheller.datastructures moved to its own GitHub repo
|
597
|
+
* https://github.com/grscheller/datastructures
|
598
|
+
* GitHub and PyPI user names just a happy coincidence
|
599
|
+
|
600
|
+
### Version 0.1.0.0 - initial version: 2023-08-27
|
601
|
+
|
602
|
+
* Package implementing data structures which do not throw exceptions
|
603
|
+
* Did not push to PyPI until version 0.2.1.0
|
604
|
+
* Initial Python grscheller.datastructures for 0.1.0.0 commit:
|
605
|
+
* dqueue - implements a double sided queue class Dqueue
|
606
|
+
* stack - implements a LIFO stack class Stack
|