pythonic-fp-circulararray 6.0.0__tar.gz → 6.0.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.
Files changed (22) hide show
  1. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/CHANGELOG.rst +7 -1
  2. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/PKG-INFO +6 -6
  3. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/README.rst +2 -2
  4. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/pyproject.toml +4 -4
  5. pythonic_fp_circulararray-6.0.1/src/pythonic_fp/circulararray/__init__.py +37 -0
  6. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/src/pythonic_fp/circulararray/auto.py +32 -21
  7. pythonic_fp_circulararray-6.0.1/src/pythonic_fp/circulararray/auto.pyi +49 -0
  8. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/src/pythonic_fp/circulararray/fixed.py +28 -18
  9. pythonic_fp_circulararray-6.0.1/src/pythonic_fp/circulararray/fixed.pyi +39 -0
  10. pythonic_fp_circulararray-6.0.1/src/pythonic_fp/circulararray/py.typed +0 -0
  11. pythonic_fp_circulararray-6.0.0/src/pythonic_fp/circulararray/__init__.py +0 -36
  12. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/.gitignore +0 -0
  13. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/LICENSE +0 -0
  14. /pythonic_fp_circulararray-6.0.0/src/pythonic_fp/circulararray/py.typed → /pythonic_fp_circulararray-6.0.1/src/pythonic_fp/circulararray/__init__.pyi +0 -0
  15. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/tests/auto/test_ca.py +0 -0
  16. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/tests/auto/test_ca_capacity.py +0 -0
  17. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/tests/auto/test_ca_fold_with_none.py +0 -0
  18. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/tests/auto/test_repr_str_auto.py +0 -0
  19. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/tests/fixed/test_caf.py +0 -0
  20. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/tests/fixed/test_caf_capacity.py +0 -0
  21. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/tests/fixed/test_caf_fold_with_none.py +0 -0
  22. {pythonic_fp_circulararray-6.0.0 → pythonic_fp_circulararray-6.0.1}/tests/fixed/test_repr_str_fixed.py +0 -0
@@ -17,7 +17,13 @@ See `Semantic Versioning 2.0.0 <https://semver.org>`_.
17
17
  Releases and Important Milestones
18
18
  ---------------------------------
19
19
 
20
- PyPI 6.0.0 - 2025-09-25
20
+ PyPI 6.0.1 - 2026-01-TBD
21
+ ~~~~~~~~~~~~~~~~~~~~~~~~
22
+
23
+ Docstring improvements based on lessons learned from my PyPI
24
+ boring-math-abstract-algebra project.
25
+
26
+ PyPI 6.0.0 - 2025-09-26
21
27
  ~~~~~~~~~~~~~~~~~~~~~~~
22
28
 
23
29
  Changed how "optional" iterator in initializer signature is handled.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonic-fp-circulararray
3
- Version: 6.0.0
3
+ Version: 6.0.1
4
4
  Summary: Circular Array
5
5
  Keywords: auto resizing,circular array,circulararray,dequeue,indexable,pop,push
6
6
  Author-email: "Geoffrey R. Scheller" <geoffrey@scheller.com>
@@ -14,11 +14,11 @@ Classifier: Operating System :: OS Independent
14
14
  Classifier: Programming Language :: Python :: 3.13
15
15
  Classifier: Typing :: Typed
16
16
  License-File: LICENSE
17
- Requires-Dist: pythonic-fp-gadgets>=3.1.0
17
+ Requires-Dist: pythonic-fp-gadgets>=4.0.2
18
18
  Requires-Dist: pytest>=8.4.1 ; extra == "test"
19
19
  Project-URL: Changelog, https://github.com/grscheller/pythonic-fp-circulararray/blob/main/CHANGELOG.rst
20
- Project-URL: Documentation, https://grscheller.github.io/pythonic-fp/circulararray/development/build/html/index.html
21
- Project-URL: Homepage, https://github.com/grscheller/pythonic-fp/blob/main/README.md
20
+ Project-URL: Documentation, https://grscheller.github.io/pythonic-fp/circulararray/development/build/html/
21
+ Project-URL: Homepage, https://grscheller.github.io/pythonic-fp/homepage/build/html/
22
22
  Project-URL: Source, https://github.com/grscheller/pythonic-fp-circulararray
23
23
  Provides-Extra: test
24
24
 
@@ -54,7 +54,7 @@ Python module implementing stateful circular array data structures.
54
54
 
55
55
  Part of the
56
56
  `pythonic-fp
57
- <https://grscheller.github.io/pythonic-fp/homepage/build/html/index.html>`_
57
+ <https://grscheller.github.io/pythonic-fp>`_
58
58
  PyPI projects.
59
59
 
60
60
  Documentation
@@ -62,7 +62,7 @@ Documentation
62
62
 
63
63
  Documentation for this project is hosted on
64
64
  `GitHub Pages
65
- <https://grscheller.github.io/pythonic-fp/circulararray/development/build/html>`_.
65
+ <https://grscheller.github.io/pythonic-fp/circulararray>`_.
66
66
 
67
67
  Copyright and License
68
68
  ---------------------
@@ -30,7 +30,7 @@ Python module implementing stateful circular array data structures.
30
30
 
31
31
  Part of the
32
32
  `pythonic-fp
33
- <https://grscheller.github.io/pythonic-fp/homepage/build/html/index.html>`_
33
+ <https://grscheller.github.io/pythonic-fp>`_
34
34
  PyPI projects.
35
35
 
36
36
  Documentation
@@ -38,7 +38,7 @@ Documentation
38
38
 
39
39
  Documentation for this project is hosted on
40
40
  `GitHub Pages
41
- <https://grscheller.github.io/pythonic-fp/circulararray/development/build/html>`_.
41
+ <https://grscheller.github.io/pythonic-fp/circulararray>`_.
42
42
 
43
43
  Copyright and License
44
44
  ---------------------
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "pythonic-fp-circulararray"
3
- version = "6.0.0"
3
+ version = "6.0.1"
4
4
  readme = "README.rst"
5
5
  requires-python = ">=3.13"
6
6
  license = { file = "LICENSE" }
@@ -24,14 +24,14 @@ classifiers = [
24
24
  "Typing :: Typed",
25
25
  ]
26
26
  dependencies = [
27
- "pythonic-fp-gadgets>=3.1.0",
27
+ "pythonic-fp-gadgets>=4.0.2",
28
28
  ]
29
29
  dynamic = ["description"]
30
30
 
31
31
  [project.urls]
32
32
  Changelog = "https://github.com/grscheller/pythonic-fp-circulararray/blob/main/CHANGELOG.rst"
33
- Documentation = "https://grscheller.github.io/pythonic-fp/circulararray/development/build/html/index.html"
34
- Homepage = "https://github.com/grscheller/pythonic-fp/blob/main/README.md"
33
+ Documentation = "https://grscheller.github.io/pythonic-fp/circulararray/development/build/html/"
34
+ Homepage = "https://grscheller.github.io/pythonic-fp/homepage/build/html/"
35
35
  Source = "https://github.com/grscheller/pythonic-fp-circulararray"
36
36
 
37
37
  [project.optional-dependencies]
@@ -0,0 +1,37 @@
1
+ # Copyright 2024-2025 Geoffrey R. Scheller
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """
16
+ Circular Array
17
+ --------------
18
+
19
+ .. admonition:: Stateful circular array data structures.
20
+
21
+ +-------------------------------------+-------------------------------------------+
22
+ | Module | Description |
23
+ +=====================================+===========================================+
24
+ | **pythonic_fp.circulararray.auto** | Variable storage capacity circular array. |
25
+ +-------------------------------------+-------------------------------------------+
26
+ | **pythonic_fp.circulararray.fixed** | Fixed storage capacity circular array. |
27
+ +-------------------------------------+-------------------------------------------+
28
+
29
+ - O(1) pops and pushes either end
30
+ - O(1) size determination
31
+ - O(1) indexing
32
+
33
+ """
34
+
35
+ __author__ = 'Geoffrey R. Scheller'
36
+ __copyright__ = 'Copyright (c) 2023-2026 Geoffrey R. Scheller'
37
+ __license__ = 'Apache License 2.0'
@@ -13,19 +13,16 @@
13
13
  # limitations under the License.
14
14
 
15
15
  """
16
- Variable Storage Capacity
17
- =========================
16
+ .. admonition:: Variable storage capacity circular array.**
18
17
 
19
- **Circular array with variable storage capacity.**
20
-
21
- - O(1) pops either end
22
- - O(1) amortized pushes either end
23
- - O(1) indexing, fully supports slicing
24
- - auto-resizing more storage capacity when necessary, manually compatible
25
- - iterable, safely mutates while iterators iterating over previous state
26
- - comparisons compare identity before equality, like builtins
27
- - in boolean context, falsy when empty, otherwise truthy
28
- - function ``ca`` produces auto-resizing circular array from arguments
18
+ - O(1) pops either end
19
+ - O(1) amortized pushes either end
20
+ - O(1) indexing, fully supports slicing
21
+ - auto-resizing more storage capacity when necessary, manually compatible
22
+ - iterable, safely mutates while iterators iterating over previous state
23
+ - comparisons compare identity before equality, like builtins
24
+ - in boolean context, falsy when empty, otherwise truthy
25
+ - function ``ca`` produces auto-resizing circular array from arguments
29
26
 
30
27
  """
31
28
 
@@ -43,7 +40,8 @@ class CA[I]:
43
40
 
44
41
  def __init__(self, *items: Iterable[I]) -> None:
45
42
  """
46
- :param items: "Optionally" takes a single iterable to populate circular array.
43
+ :param items: Optionally takes a single iterable to
44
+ initially populate the circular array.
47
45
  :raises TypeError: When ``items[0]`` not iterable.
48
46
  :raises ValueError: If more than 1 iterable is given.
49
47
  """
@@ -284,6 +282,12 @@ class CA[I]:
284
282
  del _ca
285
283
 
286
284
  def __eq__(self, other: object) -> bool:
285
+ """
286
+ :param other: The object to be compared to.
287
+ :returns: ``True`` if object is another CA whose items compare
288
+ as equal to the corresponding items in the CA,
289
+ otherwise ``False``.
290
+ """
287
291
  if self is other:
288
292
  return True
289
293
  if not isinstance(other, type(self)):
@@ -458,7 +462,8 @@ class CA[I]:
458
462
  def poplt(self, maximum: int) -> tuple[I, ...]:
459
463
  """Pop multiple items from left side of circular array.
460
464
 
461
- :param maximum: Maximum number of items to pop, may pop less if not enough items.
465
+ :param maximum: Maximum number of items to pop, may pop less
466
+ if not enough items.
462
467
  :returns: Tuple of items in the order popped, left to right.
463
468
  """
464
469
  item_list: list[I] = []
@@ -476,7 +481,8 @@ class CA[I]:
476
481
  def poprt(self, maximum: int) -> tuple[I, ...]:
477
482
  """Pop multiple items from right side of circular array.
478
483
 
479
- :param maximum: Maximum number of items to pop, may pop less if not enough items.
484
+ :param maximum: Maximum number of items to pop, may pop less
485
+ if not enough items.
480
486
  :returns: Tuple of items in the order popped, right to left.
481
487
  """
482
488
  item_list: list[I] = []
@@ -525,10 +531,12 @@ class CA[I]:
525
531
  def foldl[L](self, f: Callable[[L, I], L], start: L | NoValue = NoValue()) -> L:
526
532
  """Fold left with a function and optional starting item.
527
533
 
528
- :param f: Folding function, first argument to ``f`` is for the accumulator.
534
+ :param f: Folding function, first argument to ``f`` is for
535
+ the accumulator.
529
536
  :param start: "Optional" starting item.
530
537
  :returns: Reduced value produced by the left fold.
531
- :raises ValueError: When circular array empty and no starting item given.
538
+ :raises ValueError: When circular array empty and no starting
539
+ item given.
532
540
  """
533
541
  if self._cnt == 0:
534
542
  if start is nada:
@@ -555,10 +563,12 @@ class CA[I]:
555
563
  def foldr[R](self, f: Callable[[I, R], R], start: R | NoValue = nada) -> R:
556
564
  """Fold right with a function and an optional starting item.
557
565
 
558
- :param f: Folding function, second argument to ``f`` is for the accumulator.
559
- :param start: "Optional" starting item.
566
+ :param f: Folding function, second argument to ``f`` is for
567
+ the accumulator.
568
+ :param start: Optional starting item.
560
569
  :returns: Reduced value produced by the right fold.
561
- :raises ValueError: When circular array empty and no starting item given.
570
+ :raises ValueError: When circular array empty and no starting
571
+ item given.
562
572
  """
563
573
  if self._cnt == 0:
564
574
  if start is nada:
@@ -610,7 +620,8 @@ class CA[I]:
610
620
  storage capacity. To just compact the circular array, do not
611
621
  provide ``minimum_capacity``.
612
622
 
613
- :param minimum_capacity: Minimum storage capacity to compact the circular array.
623
+ :param minimum_capacity: Minimum storage capacity to compact
624
+ the circular array.
614
625
  """
615
626
  self._compact_storage_capacity()
616
627
  if (min_cap := minimum_capacity) > self._cap:
@@ -0,0 +1,49 @@
1
+ from collections.abc import Callable, Iterable, Iterator
2
+ from typing import overload
3
+
4
+ __all__ = ['CA', 'ca']
5
+
6
+ class CA[I]:
7
+ def __init__(self, *items: Iterable[I]) -> None: ...
8
+ def __iter__(self) -> Iterator[I]: ...
9
+ def __reversed__(self) -> Iterator[I]: ...
10
+ def __bool__(self) -> bool: ...
11
+ def __len__(self) -> int: ...
12
+ @overload
13
+ def __getitem__(self, idx: int) -> I: ...
14
+ @overload
15
+ def __getitem__(self, idx: slice) -> CA[I]: ...
16
+ @overload
17
+ def __setitem__(self, idx: int, vals: I) -> None: ...
18
+ @overload
19
+ def __setitem__(self, idx: slice, vals: Iterable[I]) -> None: ...
20
+ @overload
21
+ def __delitem__(self, idx: int) -> None: ...
22
+ @overload
23
+ def __delitem__(self, idx: slice) -> None: ...
24
+ def __eq__(self, other: object) -> bool: ...
25
+ def pushl(self, *items: I) -> None: ...
26
+ def pushr(self, *items: I) -> None: ...
27
+ def popl(self) -> I: ...
28
+ def popr(self) -> I: ...
29
+ def popld(self, default: I) -> I: ...
30
+ def poprd(self, default: I) -> I: ...
31
+ def poplt(self, maximum: int) -> tuple[I, ...]: ...
32
+ def poprt(self, maximum: int) -> tuple[I, ...]: ...
33
+ def rotl(self, n: int = 1) -> None: ...
34
+ def rotr(self, n: int = 1) -> None: ...
35
+ def map[U](self, f: Callable[[I], U]) -> CA[U]: ...
36
+ @overload
37
+ def foldl[L](self, f: Callable[[I, I], I]) -> I: ...
38
+ @overload
39
+ def foldl[L](self, f: Callable[[L, I], L], start: L) -> L: ...
40
+ @overload
41
+ def foldr[R](self, f: Callable[[I, I], I]) -> I: ...
42
+ @overload
43
+ def foldr[R](self, f: Callable[[I, R], R], start: R) -> R: ...
44
+ def capacity(self) -> int: ...
45
+ def empty(self) -> None: ...
46
+ def fraction_filled(self) -> float: ...
47
+ def resize(self, minimum_capacity: int = 2) -> None: ...
48
+
49
+ def ca[T](*items: T) -> CA[T]: ...
@@ -13,18 +13,15 @@
13
13
  # limitations under the License.
14
14
 
15
15
  """
16
- Fixed Storage Capacity
17
- ======================
16
+ .. admonition:: Fixed storage capacity circular array.**
18
17
 
19
- **Circular array with fixed storage capacity.**
20
-
21
- - O(1) pops and pushes either end
22
- - O(1) indexing, does not support slicing
23
- - fixed total storage capacity
24
- - iterable, safely mutates while iterators iterating over previous state
25
- - comparisons compare identity before equality, like builtins
26
- - in boolean context, falsy when either empty or full, otherwise truthy
27
- - function ``caf`` produces fixed capacity circular array from arguments
18
+ - O(1) pops and pushes either end
19
+ - O(1) indexing, does not support slicing
20
+ - fixed total storage capacity
21
+ - iterable, safely mutates while iterators iterating over previous state
22
+ - comparisons compare identity before equality, like builtins
23
+ - in boolean context, falsy when either empty or full, otherwise truthy
24
+ - function ``caf`` produces fixed capacity circular array from arguments
28
25
 
29
26
  """
30
27
 
@@ -42,7 +39,8 @@ class CAF[I]:
42
39
 
43
40
  def __init__(self, *items: Iterable[I], cap: int = 2) -> None:
44
41
  """
45
- :param items: "Optionally" takes a single iterable to populate circular array.
42
+ :param items: Optionally takes a single iterable to
43
+ initially populate the circular array.
46
44
  :param cap: Minimum fixed storage capacity of circular array.
47
45
  :raises TypeError: When ``items[0]`` not iterable,
48
46
  :raises ValueError: If more than 1 iterable is given.
@@ -168,6 +166,12 @@ class CAF[I]:
168
166
  del _ca
169
167
 
170
168
  def __eq__(self, other: object) -> bool:
169
+ """
170
+ :param other: The object to be compared to.
171
+ :returns: ``True`` if object is another CAF whose items compare
172
+ as equal to the corresponding items in the CAF,
173
+ otherwise ``False``.
174
+ """
171
175
  if self is other:
172
176
  return True
173
177
  if not isinstance(other, type(self)):
@@ -346,7 +350,8 @@ class CAF[I]:
346
350
  def poplt(self, maximum: int) -> tuple[I, ...]:
347
351
  """Pop multiple items from left side of circular array.
348
352
 
349
- :param maximum: Maximum number of items to pop, may pop less if not enough items.
353
+ :param maximum: Maximum number of items to pop, may pop less
354
+ if not enough items.
350
355
  :returns: Tuple of items in the order popped, left to right.
351
356
  """
352
357
  item_list: list[I] = []
@@ -364,7 +369,8 @@ class CAF[I]:
364
369
  def poprt(self, maximum: int) -> tuple[I, ...]:
365
370
  """Pop multiple items from right side of circular array.
366
371
 
367
- :param maximum: Maximum number of items to pop, may pop less if not enough items.
372
+ :param maximum: Maximum number of items to pop, may pop less
373
+ if not enough items.
368
374
  :returns: Tuple of items in the order popped, right to left.
369
375
  """
370
376
  item_list: list[I] = []
@@ -413,10 +419,12 @@ class CAF[I]:
413
419
  def foldl[L](self, f: Callable[[L, I], L], start: L | NoValue = nada) -> L:
414
420
  """Fold left with a function and optional stating item.
415
421
 
416
- :param f: Folding function, first argument to ``f`` is for the accumulator.
422
+ :param f: Folding function, first argument to ``f`` is for
423
+ the accumulator.
417
424
  :param start: Optional starting item.
418
425
  :returns: Reduced value produced by the left fold.
419
- :raises ValueError: When circular array empty and no starting item given.
426
+ :raises ValueError: When circular array empty and no starting
427
+ item given.
420
428
  """
421
429
  if self._cnt == 0:
422
430
  if start is nada:
@@ -443,10 +451,12 @@ class CAF[I]:
443
451
  def foldr[R](self, f: Callable[[I, R], R], start: R | NoValue = nada) -> R:
444
452
  """Fold right with a function and an optional starting item.
445
453
 
446
- :param f: Folding function, second argument to ``f`` is for the accumulator.
454
+ :param f: Folding function, second argument to ``f`` is for
455
+ the accumulator.
447
456
  :param start: Optional starting item.
448
457
  :returns: Reduced value produced by the right fold.
449
- :raises ValueError: When circular array empty and no starting item given.
458
+ :raises ValueError: When circular array empty and no starting
459
+ item given.
450
460
  """
451
461
  if self._cnt == 0:
452
462
  if start is nada:
@@ -0,0 +1,39 @@
1
+ from collections.abc import Callable, Iterable, Iterator
2
+ from typing import overload
3
+
4
+ __all__ = ['CAF', 'caf']
5
+
6
+ class CAF[I]:
7
+ def __init__(self, *items: Iterable[I], cap: int = 2) -> None: ...
8
+ def __iter__(self) -> Iterator[I]: ...
9
+ def __reversed__(self) -> Iterator[I]: ...
10
+ def __bool__(self) -> bool: ...
11
+ def __len__(self) -> int: ...
12
+ def __getitem__(self, idx: int) -> I: ...
13
+ def __setitem__(self, idx: int, val: I) -> None: ...
14
+ def __delitem__(self, idx: int) -> None: ...
15
+ def __eq__(self, other: object) -> bool: ...
16
+ def pushl(self, item: I) -> None: ...
17
+ def pushr(self, item: I) -> None: ...
18
+ def popl(self) -> I: ...
19
+ def popr(self) -> I: ...
20
+ def popld(self, default: I) -> I: ...
21
+ def poprd(self, default: I) -> I: ...
22
+ def poplt(self, maximum: int) -> tuple[I, ...]: ...
23
+ def poprt(self, maximum: int) -> tuple[I, ...]: ...
24
+ def rotl(self, n: int = 1) -> None: ...
25
+ def rotr(self, n: int = 1) -> None: ...
26
+ def map[U](self, f: Callable[[I], U]) -> CAF[U]: ...
27
+ @overload
28
+ def foldl[L](self, f: Callable[[I, I], I]) -> I: ...
29
+ @overload
30
+ def foldl[L](self, f: Callable[[L, I], L], start: L) -> L: ...
31
+ @overload
32
+ def foldr[R](self, f: Callable[[I, I], I]) -> I: ...
33
+ @overload
34
+ def foldr[R](self, f: Callable[[I, R], R], start: R) -> R: ...
35
+ def capacity(self) -> int: ...
36
+ def empty(self) -> None: ...
37
+ def fraction_filled(self) -> float: ...
38
+
39
+ def caf[T](*items: T, cap: int = 2) -> CAF[T]: ...
@@ -1,36 +0,0 @@
1
- # Copyright 2024-2025 Geoffrey R. Scheller
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- """
16
- Circular Array
17
- --------------
18
-
19
- Package implementing stateful circular array data structures.
20
-
21
- - O(1) pops and pushes either end
22
- - O(1) indexing and size determination
23
- - O(1) size determination
24
-
25
- +-------------------------------------+-------------------------------------------+
26
- | Module | Description |
27
- +=====================================+===========================================+
28
- | **pythonic_fp.circulararray.auto** | Variable storage capacity circular array. |
29
- +-------------------------------------+-------------------------------------------+
30
- | **pythonic_fp.circulararray.fixed** | Fixed storage capacity circular array. |
31
- +-------------------------------------+-------------------------------------------+
32
- """
33
-
34
- __author__ = 'Geoffrey R. Scheller'
35
- __copyright__ = 'Copyright (c) 2023-2025 Geoffrey R. Scheller'
36
- __license__ = 'Apache License 2.0'