dtools.circular-array 3.9.0__tar.gz → 3.10.1__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.
@@ -0,0 +1,216 @@
1
+ # CHANGELOG
2
+
3
+ PyPI grscheller.circular-array project.
4
+
5
+ - first digit - major event, epoch, or paradigm shift
6
+ - second digit - breaking API changes, major changes
7
+ - third digit - bug fixes, API additions, breaking API in dev env
8
+ - forth digit - commit count changes/regressions (dev environment only)
9
+
10
+ ## Releases and Important Milestones
11
+
12
+ ### Version 3.10.1 - PyPI release date 2025-04-03
13
+
14
+ - Major API changes
15
+ - class name still `ca`
16
+ - initializer takes 1 or 0 iterables
17
+ - like Python builtin types `list` or `tuple`
18
+ - factory function `CA` provided to create a `ca` from mult args
19
+ - like `[]` or `{}`
20
+ - otherwise, method names are all snake_case compatible
21
+ - examples
22
+ - popL -> popl
23
+ - pushR -> pushr
24
+ - fractionFilled -> fraction_filled
25
+ - updated pyproject.toml
26
+ - to better match other dtools namespace projects
27
+
28
+ ### Version 3.9.1 - PyPI release date 2025-02-16
29
+
30
+ - Fixed pdoc issues with new typing notation
31
+ - updated docstrings
32
+ - had to add TypeVars
33
+
34
+ ### Version 3.9.0 - PyPI release date 2025-01-16
35
+
36
+ - Final release as dtools.circular-array
37
+ - was previously grscheller.circular-array
38
+
39
+ ### Version 3.8.0 - PyPI release date 2025-01-03
40
+
41
+ - now circular-array indexing methods fully support slicing
42
+ - `__getitem__`
43
+ - `__setitem__`
44
+ - `__delitem__`
45
+ - added rotL(n) and rotR(n) methods
46
+
47
+ ### Version 3.7.1 - PyPI release date 2024-11-18
48
+
49
+ - for internal changes
50
+ - mostly for consistency across PyPI namespace projects
51
+
52
+ ### Version 3.7.0 - PyPI release date 2024-10-26
53
+
54
+ - regenerated docs for PyPI release
55
+
56
+ ### Version 3.6.3.2 - Commit date 2024-10-20
57
+
58
+ - preparing for a 3.7.0 PyPI release
59
+ - renamed class ca -> CA
60
+ - ca now takes 0 or 1 iterables
61
+ - created factory function for original constructor use case
62
+ - `CA[D](*ds: D) -> ca[D]`
63
+ - generated docs in docs repo - 2024-10-23
64
+
65
+ ### Version 3.6.2 - PyPI release date 2024-10-20
66
+
67
+ - removed docs from repo
68
+ - docs for all grscheller namespace projects located
69
+ [here](https://grscheller.github.io/grscheller-pypi-namespace-docs/).
70
+
71
+ ### Version 3.6.1 - PyPI release date 2024-10-18
72
+
73
+ - infrastructure and minor docstring changes
74
+ - should be compatible with version 3.6.0
75
+
76
+ ### Version 3.6.0 - PyPI release date 2024-09-21
77
+
78
+ - no future changes planned for the foreseeable future
79
+ - feature complete
80
+ - no external dependencies
81
+ - well tested with other grscheller namespace packages
82
+ - final API tweaks made
83
+ - several more pytest tests added
84
+ - made the `compact` method private
85
+ - now called `_compact_storage_capacity`
86
+
87
+ ### Version 3.5.0 - PyPI release date 2024-09-21
88
+
89
+ - made the `double` method private
90
+ - now called `_double_storage_capacity`
91
+ - major docstring improvements
92
+ - improved indentation and code alignment
93
+ - now much more Pythonic
94
+
95
+ ### Version 3.4.1 - PyPI release date 2024-08-17
96
+
97
+ - updated README.md to reflect name changes of CA methods
98
+ - docstring improvements
99
+
100
+ ### Version 3.4.0 - PyPI release date 2024-08-15
101
+
102
+ - updated `__eq__` comparisons
103
+ - first compare elements by identity before equality
104
+ - noticed that is what Python builtins do
105
+ - makes dealing with grscheller.fp.nada module easier
106
+ - standardizing docstrings across grscheller PyPI projects
107
+
108
+ ### Version 3.3.0.1 - commit date 2024-08-05
109
+
110
+ - made a paradigm "regression", preparing for a 3.4.0 release
111
+ - felt CA was becoming way too complicated
112
+ - grscheller.datastructures needed it to fully embrace type annotations
113
+ - but I was shifting too many features back into grscheller.circular-array
114
+ - want ca to be useful for non-functional applications
115
+ - changes made
116
+ - removed grscheller.fp dependency
117
+ - remove `_sentinel` and `_storable` slots from CA class
118
+ - remove copy method, just use `ca2 = CA(*ca1)` to make a shallow copy
119
+ - adjust `__repr__` and `__str__` methods
120
+ - experimenting with Spinx syntax in docstrings (still using pdoc3)
121
+ - changed nomenclature from "left/right" to "front/rear"
122
+ - unsafe and safe versions of pop & fold functionality
123
+ - left and right folds improvements
124
+ - consolidated `foldL, foldL1, foldR, foldR1` into `foldL` & `foldR`
125
+ - TODO: rename `foldL` to `fold_forward` & `foldR` to `fold_backward`
126
+ - tests working
127
+ - basically I changed pops to unsafe pops and added `try except` blocks
128
+ - safe versions tests needed
129
+ - safe pops return multiple values in tuples
130
+ - will take a `default` value to return
131
+ - if only asked to return 1 value and CA is empty
132
+ - seems to work properly from iPython
133
+
134
+ ### Version 3.2.0 - PyPI release date 2024-07-26
135
+
136
+ - class name changed CircularArray -> CA
137
+ - Now takes a "sentinel" or "fallback" value in its initializer
138
+ - formally used None for this
139
+
140
+ ### Version 3.1.0 - PyPI release date 2024-07-11
141
+
142
+ - generic typing now being used
143
+ - first PyPI release where mult values can be pushed on CircularArray
144
+
145
+ ### Version 3.0.0 - commit date 2024-06-28
146
+
147
+ - CircularArray class now using Generic Type Parameter
148
+
149
+ - new epoch in development, start of 3.0 series
150
+
151
+ - now using TypeVars
152
+
153
+ - API changes
154
+
155
+ - `foldL(self, f: Callable[[T, T], T]) -> T|None`
156
+ - `foldR(self, f: Callable[[T, T], T]) -> T|None`
157
+ - `foldL1(self, f: Callable[[S, T], S], initial: S) -> S`
158
+ - `foldR1(self, f: Callable[[T, S], S], initial: S) -> S`
159
+
160
+ ### Version 2.0.0 - PyPI release date 2024-03-08
161
+
162
+ - new epoch due to resizing bug fixed on previous commit
163
+ - much improved and cleaned up
164
+ - much better test suite
165
+ - method `_double()` made "public" and renamed `double()`
166
+ - method `resize(new_size)` now resizes to at least new_size
167
+
168
+ ### Version 1.1.0.0 - commit date 2024-03-08
169
+
170
+ - NEXT PyPI RELEASE WILL BE 2.0.0 !!!!!!!!!!!
171
+ - BUGFIX: Fixed a subtle resizing bug
172
+ - bug probably present in all previous versions
173
+ - not previously identified due to inadequate test coverage
174
+ - test coverage improved vastly
175
+ - made some major code API changes
176
+ - upon initialization minimizing size of the CircularArray
177
+ - have some ideas on how to to improve API for resizing CircularArrays
178
+ - need to test my other 2 PyPI projects
179
+ - both use circular-array as a dependency
180
+
181
+ ### Version 1.0.1 - PyPI release date 2024-03-01
182
+
183
+ - docstring updates to match other grscheller PyPI repos
184
+
185
+ ### Version 1.0.0 - PyPI release date 2024-02-10
186
+
187
+ - first stable release
188
+ - dropped minimum Python requirement to 3.10
189
+
190
+ ### Version 0.1.1 - PyPI release date 2024-01-30
191
+
192
+ - changed circular-array from a package to just a module
193
+ - actually breaking API change
194
+ - version number should have been 0.2.0
195
+ - gave CircularArray class `foldL` & `foldR` methods
196
+
197
+ ### Version 0.1.0 - PyPI release date 2024-01-28
198
+
199
+ - initial PyPI grscheller.circular-array release
200
+ - migrated Circulararray class from grscheller.datastructures
201
+ - update docstrings to reflect current nomenclature
202
+
203
+ ### Version 0.0.3 - commit date 2024-01-28
204
+
205
+ - got gh-pages working for the repo
206
+
207
+ ### Version 0.0.2 - commit date 2024-01-28
208
+
209
+ - pushed repo up to GitHub
210
+ - created README.md file for project
211
+
212
+ ### Version 0.0.1 - commit date 2024-01-28
213
+
214
+ - decided to split Circulararray class out of datastructures
215
+ - will make it its own PyPI project
216
+ - got working with datastructures locally
@@ -0,0 +1,104 @@
1
+ Metadata-Version: 2.4
2
+ Name: dtools.circular-array
3
+ Version: 3.10.1
4
+ Summary: ### Developer Tools - circular array data structure
5
+ Keywords: circular array,circle array,ca,double ended queue,dequeue,dqueue,pop,push,popl,popr,pushl,pushr,indexable,auto-resizing,auto resizing,resizing
6
+ Author-email: "Geoffrey R. Scheller" <geoffrey@scheller.com>
7
+ Requires-Python: >=3.12
8
+ Description-Content-Type: text/markdown
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Framework :: Pytest
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: Apache Software License
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Typing :: Typed
16
+ License-File: LICENSE
17
+ Requires-Dist: pytest >=8.3.5 ; extra == "test"
18
+ Project-URL: Changelog, https://github.com/grscheller/dtools-circular-array/blob/main/CHANGELOG.md
19
+ Project-URL: Documentation, https://grscheller.github.io/dtools-docs/circular-array
20
+ Project-URL: Source, https://github.com/grscheller/dtools-circular-array
21
+ Provides-Extra: test
22
+
23
+ # Developer Tools - Circular Array
24
+
25
+ Python package containing a module implementing a circular array data
26
+ structure,
27
+
28
+ - **Repositories**
29
+ - [dtools.circular-array][1] project on *PyPI*
30
+ - [Source code][2] on *GitHub*
31
+ - **Detailed documentation**
32
+ - [Detailed API documentation][3] on *GH-Pages*
33
+
34
+ This project is part of the [Developer Tools for Python][4] **dtools.**
35
+ namespace project.
36
+
37
+ ## Overview
38
+
39
+ - O(1) amortized pushes and pops either end.
40
+ - O(1) indexing
41
+ - fully supports slicing
42
+ - safely mutates while iterating over copies of previous state
43
+
44
+ ### Module circular_array
45
+
46
+ A full featured, auto resizing circular array. Python package containing
47
+ a module implementing a full featured, indexable, sliceable, double
48
+ sided, auto-resizing circular array data structure.
49
+
50
+ Useful either if used directly as an improved version of a Python List
51
+ or in a "has-a" relationship when implementing other data structures.
52
+
53
+ - *module* dtools.circular_array
54
+ - *class* ca: circular array data structure
55
+ - *function* CA: factory function to produce a ca from data
56
+
57
+ Above nomenclature modeled after of a builtin data type like `list`, where
58
+ `ca` takes an optional iterator as an argument and CA is all caps to represent
59
+ syntactic sugar like `[]` or `{}`.
60
+
61
+ #### Usage
62
+
63
+ ```python
64
+ from dtools.circular_array.ca import CA
65
+
66
+ ca = CA(1, 2, 3)
67
+ assert ca.popl() == 1
68
+ assert ca.popr() == 3
69
+ ca.pushr(42, 0)
70
+ ca.pushl(0, 1)
71
+ assert repr(ca) == 'CA(1, 0, 2, 42, 0)'
72
+ assert str(ca) == '(|1, 0, 2, 42, 0|)'
73
+
74
+ ca = ca(range(1,11))
75
+ assert repr(ca) == 'CA(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)'
76
+ assert str(ca) == '(|1, 2, 3, 4, 5, 6, 7, 8, 9, 10|)'
77
+ assert len(ca) == 10
78
+ tup3 = ca.poplt(3)
79
+ tup4 = ca.poprt(4)
80
+ assert tup3 == (1, 2, 3)
81
+ assert tup4 == (10, 9, 8, 7)
82
+
83
+ assert ca == CA(4, 5, 6)
84
+ four, *rest = ca.popft(1000)
85
+ assert four == 4
86
+ assert rest == [5, 6]
87
+ assert len(ca) == 0
88
+
89
+ ca = ca([1, 2, 3])
90
+ assert ca.popld(42) == 1
91
+ assert ca.poprd(42) == 3
92
+ assert ca.popld(42) == 2
93
+ assert ca.poprd(42) == 42
94
+ assert ca.popld(42) == 42
95
+ assert len(ca) == 0
96
+ ```
97
+
98
+ ______________________________________________________________________
99
+
100
+ [1]: https://pypi.org/project/dtools.circular-array
101
+ [2]: https://github.com/grscheller/dtools-circular-array
102
+ [3]: https://grscheller.github.io/dtools-docs/circular-array
103
+ [4]: https://github.com/grscheller/dtools-docs
104
+
@@ -0,0 +1,81 @@
1
+ # Developer Tools - Circular Array
2
+
3
+ Python package containing a module implementing a circular array data
4
+ structure,
5
+
6
+ - **Repositories**
7
+ - [dtools.circular-array][1] project on *PyPI*
8
+ - [Source code][2] on *GitHub*
9
+ - **Detailed documentation**
10
+ - [Detailed API documentation][3] on *GH-Pages*
11
+
12
+ This project is part of the [Developer Tools for Python][4] **dtools.**
13
+ namespace project.
14
+
15
+ ## Overview
16
+
17
+ - O(1) amortized pushes and pops either end.
18
+ - O(1) indexing
19
+ - fully supports slicing
20
+ - safely mutates while iterating over copies of previous state
21
+
22
+ ### Module circular_array
23
+
24
+ A full featured, auto resizing circular array. Python package containing
25
+ a module implementing a full featured, indexable, sliceable, double
26
+ sided, auto-resizing circular array data structure.
27
+
28
+ Useful either if used directly as an improved version of a Python List
29
+ or in a "has-a" relationship when implementing other data structures.
30
+
31
+ - *module* dtools.circular_array
32
+ - *class* ca: circular array data structure
33
+ - *function* CA: factory function to produce a ca from data
34
+
35
+ Above nomenclature modeled after of a builtin data type like `list`, where
36
+ `ca` takes an optional iterator as an argument and CA is all caps to represent
37
+ syntactic sugar like `[]` or `{}`.
38
+
39
+ #### Usage
40
+
41
+ ```python
42
+ from dtools.circular_array.ca import CA
43
+
44
+ ca = CA(1, 2, 3)
45
+ assert ca.popl() == 1
46
+ assert ca.popr() == 3
47
+ ca.pushr(42, 0)
48
+ ca.pushl(0, 1)
49
+ assert repr(ca) == 'CA(1, 0, 2, 42, 0)'
50
+ assert str(ca) == '(|1, 0, 2, 42, 0|)'
51
+
52
+ ca = ca(range(1,11))
53
+ assert repr(ca) == 'CA(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)'
54
+ assert str(ca) == '(|1, 2, 3, 4, 5, 6, 7, 8, 9, 10|)'
55
+ assert len(ca) == 10
56
+ tup3 = ca.poplt(3)
57
+ tup4 = ca.poprt(4)
58
+ assert tup3 == (1, 2, 3)
59
+ assert tup4 == (10, 9, 8, 7)
60
+
61
+ assert ca == CA(4, 5, 6)
62
+ four, *rest = ca.popft(1000)
63
+ assert four == 4
64
+ assert rest == [5, 6]
65
+ assert len(ca) == 0
66
+
67
+ ca = ca([1, 2, 3])
68
+ assert ca.popld(42) == 1
69
+ assert ca.poprd(42) == 3
70
+ assert ca.popld(42) == 2
71
+ assert ca.poprd(42) == 42
72
+ assert ca.popld(42) == 42
73
+ assert len(ca) == 0
74
+ ```
75
+
76
+ ______________________________________________________________________
77
+
78
+ [1]: https://pypi.org/project/dtools.circular-array
79
+ [2]: https://github.com/grscheller/dtools-circular-array
80
+ [3]: https://grscheller.github.io/dtools-docs/circular-array
81
+ [4]: https://github.com/grscheller/dtools-docs
@@ -22,14 +22,14 @@ classifiers = [
22
22
  dependencies = []
23
23
  dynamic = ["version", "description"]
24
24
  keywords = [
25
- "circular array", "circle array", "CA",
25
+ "circular array", "circle array", "ca",
26
26
  "double ended queue", "dequeue", "dqueue",
27
- "pop", "push", "popL", "popR", "pushL", "pushR", "indexable",
27
+ "pop", "push", "popl", "popr", "pushl", "pushr", "indexable",
28
28
  "auto-resizing", "auto resizing", "resizing"
29
29
  ]
30
30
 
31
31
  [project.optional-dependencies]
32
- test = ["pytest >=8.3.2"]
32
+ test = ["pytest >=8.3.5"]
33
33
 
34
34
  [project.urls]
35
35
  Source = "https://github.com/grscheller/dtools-circular-array"
@@ -37,7 +37,10 @@ Changelog = "https://github.com/grscheller/dtools-circular-array/blob/main/CHANG
37
37
  Documentation = "https://grscheller.github.io/dtools-docs/circular-array"
38
38
 
39
39
  [tool.flit.sdist]
40
- exclude = ["dist", "docs", ".gitignore", ".mypy_cache"]
40
+ exclude = ["dist", "tests", ".gitignore", ".mypy_cache", ".pytest_cache"]
41
+
42
+ [tool.pytest.ini_options]
43
+ consider_namespace_packages = true
41
44
 
42
45
  [tool.pylsp-mypy]
43
46
  enabled = true
@@ -47,19 +50,21 @@ report_progress = true
47
50
 
48
51
  [tool.mypy]
49
52
  enable_incomplete_feature = ["NewGenericSyntax"]
50
-
51
- [tool.pytest.ini_options]
52
- testpaths = ["tests"]
53
- consider_namespace_packages = true
53
+ implicit_reexport = false
54
+ local_partial_types = true
55
+ warn_redundant_casts = true
56
+ warn_return_any = true
57
+ warn_unused_configs = true
54
58
 
55
59
  [tool.ruff]
56
60
  target-version = "py313"
57
-
61
+
58
62
  [tool.ruff.lint.per-file-ignores]
59
63
  "__init__.py" = ["F401"]
60
64
 
61
- [tool.ruff.format]
62
- quote-style = "single"
63
-
64
65
  [tool.ruff.lint.flake8-quotes]
65
66
  docstring-quotes = "double"
67
+
68
+ [tool.ruff.format]
69
+ quote-style = "single"
70
+ docstring-code-line-length = 72
@@ -1,4 +1,4 @@
1
- # Copyright 2016-2025 Geoffrey R. Scheller
1
+ # Copyright 2023-2025 Geoffrey R. Scheller
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,16 +12,18 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- """### Circular Array
15
+ """### Developer Tools - circular array data structure
16
16
 
17
- Package for an indexable circular array data structure.
17
+ Package for an indexable, sliceable, auto-resizing circular array
18
+ data structure with amortized O(1) pushes and pops either end.
18
19
 
19
20
  #### Modules
20
21
 
21
- * module dtools.circular_array.ca: circular array Python data structure
22
+ * module dtools.circular_array.ca: circular array data structure
22
23
 
23
24
  """
24
- __version__ = "3.9.0"
25
- __author__ = "Geoffrey R. Scheller"
26
- __copyright__ = "Copyright (c) 2023-2025 Geoffrey R. Scheller"
27
- __license__ = "Apache License 2.0"
25
+
26
+ __version__ = '3.10.1'
27
+ __author__ = 'Geoffrey R. Scheller'
28
+ __copyright__ = 'Copyright (c) 2023-2025 Geoffrey R. Scheller'
29
+ __license__ = 'Apache License 2.0'