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.
Files changed (21) hide show
  1. dtools_datastructures-0.25.0/CHANGELOG.md +606 -0
  2. dtools_datastructures-0.25.0/LICENSE +190 -0
  3. dtools_datastructures-0.25.0/PKG-INFO +65 -0
  4. dtools_datastructures-0.25.0/README.md +41 -0
  5. dtools_datastructures-0.25.0/pyproject.toml +71 -0
  6. dtools_datastructures-0.25.0/pytest.ini +4 -0
  7. dtools_datastructures-0.25.0/src/dtools/datastructures/__init__.py +31 -0
  8. dtools_datastructures-0.25.0/src/dtools/datastructures/nodes.py +189 -0
  9. dtools_datastructures-0.25.0/src/dtools/datastructures/py.typed +0 -0
  10. dtools_datastructures-0.25.0/src/dtools/datastructures/queues.py +420 -0
  11. dtools_datastructures-0.25.0/src/dtools/datastructures/splitends/__init__.py +27 -0
  12. dtools_datastructures-0.25.0/src/dtools/datastructures/splitends/py.typed +0 -0
  13. dtools_datastructures-0.25.0/src/dtools/datastructures/splitends/se.py +179 -0
  14. dtools_datastructures-0.25.0/src/dtools/datastructures/tuples.py +203 -0
  15. dtools_datastructures-0.25.0/tests/grscheller/datastructures/splitends/test_se.py +253 -0
  16. dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_ftuple.py +161 -0
  17. dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_functional.py +127 -0
  18. dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_node.py +63 -0
  19. dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_queue.py +500 -0
  20. dtools_datastructures-0.25.0/tests/grscheller/datastructures/test_repr.py +234 -0
  21. 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