pqfilt 0.1.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 (110) hide show
  1. pqfilt-0.1.0/.github/workflows/ci.yml +39 -0
  2. pqfilt-0.1.0/.github/workflows/publish.yml +17 -0
  3. pqfilt-0.1.0/.readthedocs.yaml +19 -0
  4. pqfilt-0.1.0/.vscode/settings.json +5 -0
  5. pqfilt-0.1.0/LICENSE +24 -0
  6. pqfilt-0.1.0/PKG-INFO +100 -0
  7. pqfilt-0.1.0/README.md +69 -0
  8. pqfilt-0.1.0/docs/Makefile +14 -0
  9. pqfilt-0.1.0/docs/_build/html/.buildinfo +4 -0
  10. pqfilt-0.1.0/docs/_build/html/.doctrees/__intersphinx_cache__/pandas_objects.inv +0 -0
  11. pqfilt-0.1.0/docs/_build/html/.doctrees/__intersphinx_cache__/pyarrow_objects.inv +0 -0
  12. pqfilt-0.1.0/docs/_build/html/.doctrees/__intersphinx_cache__/python_objects.inv +0 -0
  13. pqfilt-0.1.0/docs/_build/html/.doctrees/api.doctree +0 -0
  14. pqfilt-0.1.0/docs/_build/html/.doctrees/changelog.doctree +0 -0
  15. pqfilt-0.1.0/docs/_build/html/.doctrees/environment.pickle +0 -0
  16. pqfilt-0.1.0/docs/_build/html/.doctrees/index.doctree +0 -0
  17. pqfilt-0.1.0/docs/_build/html/.doctrees/usage.doctree +0 -0
  18. pqfilt-0.1.0/docs/_build/html/_modules/index.html +105 -0
  19. pqfilt-0.1.0/docs/_build/html/_modules/pqfilt/_operators.html +216 -0
  20. pqfilt-0.1.0/docs/_build/html/_modules/pqfilt/_parser.html +521 -0
  21. pqfilt-0.1.0/docs/_build/html/_modules/pqfilt/core.html +404 -0
  22. pqfilt-0.1.0/docs/_build/html/_sources/api.rst.txt +38 -0
  23. pqfilt-0.1.0/docs/_build/html/_sources/changelog.rst.txt +14 -0
  24. pqfilt-0.1.0/docs/_build/html/_sources/index.rst.txt +37 -0
  25. pqfilt-0.1.0/docs/_build/html/_sources/usage.rst.txt +123 -0
  26. pqfilt-0.1.0/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
  27. pqfilt-0.1.0/docs/_build/html/_static/base-stemmer.js +476 -0
  28. pqfilt-0.1.0/docs/_build/html/_static/basic.css +906 -0
  29. pqfilt-0.1.0/docs/_build/html/_static/css/badge_only.css +1 -0
  30. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  31. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  32. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  33. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  34. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  35. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
  36. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  37. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  38. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  39. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  40. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  41. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
  42. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  43. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  44. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  45. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
  46. pqfilt-0.1.0/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  47. pqfilt-0.1.0/docs/_build/html/_static/css/theme.css +4 -0
  48. pqfilt-0.1.0/docs/_build/html/_static/doctools.js +150 -0
  49. pqfilt-0.1.0/docs/_build/html/_static/documentation_options.js +13 -0
  50. pqfilt-0.1.0/docs/_build/html/_static/english-stemmer.js +1066 -0
  51. pqfilt-0.1.0/docs/_build/html/_static/file.png +0 -0
  52. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
  53. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
  54. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
  55. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
  56. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  57. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  58. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  59. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  60. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
  61. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
  62. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
  63. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
  64. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
  65. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
  66. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
  67. pqfilt-0.1.0/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
  68. pqfilt-0.1.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  69. pqfilt-0.1.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  70. pqfilt-0.1.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  71. pqfilt-0.1.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  72. pqfilt-0.1.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  73. pqfilt-0.1.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  74. pqfilt-0.1.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  75. pqfilt-0.1.0/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  76. pqfilt-0.1.0/docs/_build/html/_static/jquery.js +2 -0
  77. pqfilt-0.1.0/docs/_build/html/_static/js/badge_only.js +1 -0
  78. pqfilt-0.1.0/docs/_build/html/_static/js/theme.js +1 -0
  79. pqfilt-0.1.0/docs/_build/html/_static/js/versions.js +228 -0
  80. pqfilt-0.1.0/docs/_build/html/_static/language_data.js +13 -0
  81. pqfilt-0.1.0/docs/_build/html/_static/minus.png +0 -0
  82. pqfilt-0.1.0/docs/_build/html/_static/plus.png +0 -0
  83. pqfilt-0.1.0/docs/_build/html/_static/pygments.css +75 -0
  84. pqfilt-0.1.0/docs/_build/html/_static/searchtools.js +693 -0
  85. pqfilt-0.1.0/docs/_build/html/_static/sphinx_highlight.js +159 -0
  86. pqfilt-0.1.0/docs/_build/html/api.html +420 -0
  87. pqfilt-0.1.0/docs/_build/html/changelog.html +125 -0
  88. pqfilt-0.1.0/docs/_build/html/genindex.html +235 -0
  89. pqfilt-0.1.0/docs/_build/html/index.html +155 -0
  90. pqfilt-0.1.0/docs/_build/html/objects.inv +0 -0
  91. pqfilt-0.1.0/docs/_build/html/py-modindex.html +127 -0
  92. pqfilt-0.1.0/docs/_build/html/search.html +122 -0
  93. pqfilt-0.1.0/docs/_build/html/searchindex.js +1 -0
  94. pqfilt-0.1.0/docs/_build/html/usage.html +247 -0
  95. pqfilt-0.1.0/docs/api.rst +38 -0
  96. pqfilt-0.1.0/docs/changelog.rst +14 -0
  97. pqfilt-0.1.0/docs/conf.py +42 -0
  98. pqfilt-0.1.0/docs/index.rst +37 -0
  99. pqfilt-0.1.0/docs/usage.rst +123 -0
  100. pqfilt-0.1.0/pyproject.toml +55 -0
  101. pqfilt-0.1.0/src/pqfilt/__init__.py +17 -0
  102. pqfilt-0.1.0/src/pqfilt/_operators.py +104 -0
  103. pqfilt-0.1.0/src/pqfilt/_parser.py +403 -0
  104. pqfilt-0.1.0/src/pqfilt/cli.py +105 -0
  105. pqfilt-0.1.0/src/pqfilt/core.py +298 -0
  106. pqfilt-0.1.0/tests/conftest.py +39 -0
  107. pqfilt-0.1.0/tests/test_operators.py +78 -0
  108. pqfilt-0.1.0/tests/test_parser.py +145 -0
  109. pqfilt-0.1.0/tests/test_read.py +143 -0
  110. pqfilt-0.1.0/uv.lock +1101 -0
@@ -0,0 +1,39 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - name: Install uv
18
+ uses: astral-sh/setup-uv@v5
19
+ - name: Set up Python ${{ matrix.python-version }}
20
+ run: uv python install ${{ matrix.python-version }}
21
+ - name: Install dependencies
22
+ run: uv sync --all-extras
23
+ - name: Lint
24
+ run: uv run ruff check .
25
+ - name: Test
26
+ run: uv run pytest -v
27
+
28
+ docs:
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@v4
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v5
34
+ - name: Set up Python
35
+ run: uv python install 3.12
36
+ - name: Install dependencies
37
+ run: uv sync --extra docs
38
+ - name: Build docs
39
+ run: uv run sphinx-build -W docs docs/_build/html
@@ -0,0 +1,17 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ publish:
9
+ runs-on: ubuntu-latest
10
+ environment: pypi
11
+ permissions:
12
+ id-token: write # required for trusted publishing
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - uses: astral-sh/setup-uv@v5
16
+ - run: uv build
17
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,19 @@
1
+ # Read the Docs configuration file
2
+ # https://docs.readthedocs.io/en/stable/config-file/v2.html
3
+
4
+ version: 2
5
+
6
+ build:
7
+ os: ubuntu-24.04
8
+ tools:
9
+ python: "3.12"
10
+
11
+ sphinx:
12
+ configuration: docs/conf.py
13
+
14
+ python:
15
+ install:
16
+ - method: pip
17
+ path: .
18
+ extra_requirements:
19
+ - docs
@@ -0,0 +1,5 @@
1
+ {
2
+ "python-envs.defaultEnvManager": "ms-python.python:conda",
3
+ "python-envs.defaultPackageManager": "ms-python.python:conda",
4
+ "python-envs.pythonProjects": []
5
+ }
pqfilt-0.1.0/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ cd /Users/ysbach/Dropbox/github/pqfilt
2
+ cat > LICENSE << 'EOF'
3
+ MIT License
4
+
5
+ Copyright (c) 2026 Yoonsoo P. Bach
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all
15
+ copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ SOFTWARE.
24
+ EOF
pqfilt-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,100 @@
1
+ Metadata-Version: 2.4
2
+ Name: pqfilt
3
+ Version: 0.1.0
4
+ Summary: Generic Parquet filtering tool (CLI + API)
5
+ Author: Yoonsoo P. Bach
6
+ License-Expression: MIT
7
+ License-File: LICENSE
8
+ Keywords: data,filter,parquet,predicate-pushdown,pyarrow
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Intended Audience :: Science/Research
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Scientific/Engineering
19
+ Classifier: Topic :: Software Development :: Libraries
20
+ Requires-Python: >=3.10
21
+ Requires-Dist: click>=8.0
22
+ Requires-Dist: pandas>=1.5
23
+ Requires-Dist: pyarrow>=10.0
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest>=7.0; extra == 'dev'
26
+ Requires-Dist: ruff; extra == 'dev'
27
+ Provides-Extra: docs
28
+ Requires-Dist: sphinx-rtd-theme>=2.0; extra == 'docs'
29
+ Requires-Dist: sphinx>=7.0; extra == 'docs'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # pqfilt
33
+
34
+ Generic Parquet predicate-pushdown filter tool — CLI and Python API.
35
+
36
+ `pqfilt` wraps `pyarrow.dataset` to let you filter Parquet files **before** they
37
+ are fully read into memory, using row-group-level predicate pushdown.
38
+
39
+ ## Installation
40
+
41
+ ```bash
42
+ pip install pqfilt
43
+ # or
44
+ uv add pqfilt
45
+ ```
46
+
47
+ ## Python API
48
+
49
+ ```python
50
+ import pqfilt
51
+
52
+ # Simple filter
53
+ df = pqfilt.read("data.parquet", filters="vmag < 20")
54
+
55
+ # AND + OR with expression syntax
56
+ df = pqfilt.read("data.parquet", filters="(a < 30 & b > 50) | c == 1")
57
+
58
+ # Tuple syntax (flat AND)
59
+ df = pqfilt.read("data.parquet", filters=[("a", "<", 30), ("b", ">", 50)])
60
+
61
+ # DNF syntax (OR of ANDs)
62
+ df = pqfilt.read("data.parquet", filters=[
63
+ [("a", "<", 30)],
64
+ [("b", ">", 50)],
65
+ ])
66
+
67
+ # Column selection + output
68
+ df = pqfilt.read("data/*.parquet", columns=["a", "b"], output="out.parquet")
69
+ ```
70
+
71
+ ## CLI
72
+
73
+ ```bash
74
+ # Basic filter
75
+ pqfilt data/*.parquet -f "vmag < 20" -o filtered.parquet
76
+
77
+ # AND + OR expression
78
+ pqfilt data/*.parquet -f "(a < 30 & b > 50) | c == 1" -o filtered.parquet
79
+
80
+ # Multiple -f flags (AND-ed together)
81
+ pqfilt data/*.parquet -f "vmag < 20" -f "dec > 30" -o filtered.parquet
82
+
83
+ # Column selection
84
+ pqfilt data/*.parquet -f "vmag < 20" --columns vmag,ra,dec -o filtered.parquet
85
+
86
+ # Membership filter
87
+ pqfilt data/*.parquet -f "desig in 1,2,3" -o filtered.parquet
88
+ ```
89
+
90
+ ### Column names with special characters
91
+
92
+ Columns containing operator characters can be backtick-quoted:
93
+
94
+ ```python
95
+ pqfilt.read("data.parquet", filters="`alpha*360` > 100")
96
+ ```
97
+
98
+ ## License
99
+
100
+ MIT
pqfilt-0.1.0/README.md ADDED
@@ -0,0 +1,69 @@
1
+ # pqfilt
2
+
3
+ Generic Parquet predicate-pushdown filter tool — CLI and Python API.
4
+
5
+ `pqfilt` wraps `pyarrow.dataset` to let you filter Parquet files **before** they
6
+ are fully read into memory, using row-group-level predicate pushdown.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ pip install pqfilt
12
+ # or
13
+ uv add pqfilt
14
+ ```
15
+
16
+ ## Python API
17
+
18
+ ```python
19
+ import pqfilt
20
+
21
+ # Simple filter
22
+ df = pqfilt.read("data.parquet", filters="vmag < 20")
23
+
24
+ # AND + OR with expression syntax
25
+ df = pqfilt.read("data.parquet", filters="(a < 30 & b > 50) | c == 1")
26
+
27
+ # Tuple syntax (flat AND)
28
+ df = pqfilt.read("data.parquet", filters=[("a", "<", 30), ("b", ">", 50)])
29
+
30
+ # DNF syntax (OR of ANDs)
31
+ df = pqfilt.read("data.parquet", filters=[
32
+ [("a", "<", 30)],
33
+ [("b", ">", 50)],
34
+ ])
35
+
36
+ # Column selection + output
37
+ df = pqfilt.read("data/*.parquet", columns=["a", "b"], output="out.parquet")
38
+ ```
39
+
40
+ ## CLI
41
+
42
+ ```bash
43
+ # Basic filter
44
+ pqfilt data/*.parquet -f "vmag < 20" -o filtered.parquet
45
+
46
+ # AND + OR expression
47
+ pqfilt data/*.parquet -f "(a < 30 & b > 50) | c == 1" -o filtered.parquet
48
+
49
+ # Multiple -f flags (AND-ed together)
50
+ pqfilt data/*.parquet -f "vmag < 20" -f "dec > 30" -o filtered.parquet
51
+
52
+ # Column selection
53
+ pqfilt data/*.parquet -f "vmag < 20" --columns vmag,ra,dec -o filtered.parquet
54
+
55
+ # Membership filter
56
+ pqfilt data/*.parquet -f "desig in 1,2,3" -o filtered.parquet
57
+ ```
58
+
59
+ ### Column names with special characters
60
+
61
+ Columns containing operator characters can be backtick-quoted:
62
+
63
+ ```python
64
+ pqfilt.read("data.parquet", filters="`alpha*360` > 100")
65
+ ```
66
+
67
+ ## License
68
+
69
+ MIT
@@ -0,0 +1,14 @@
1
+ # Minimal Makefile for Sphinx documentation
2
+
3
+ SPHINXOPTS ?=
4
+ SPHINXBUILD ?= sphinx-build
5
+ SOURCEDIR = .
6
+ BUILDDIR = _build
7
+
8
+ help:
9
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
10
+
11
+ .PHONY: help Makefile
12
+
13
+ %: Makefile
14
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
@@ -0,0 +1,4 @@
1
+ # Sphinx build info version 1
2
+ # This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
3
+ config: b9d0962ee09329f0f0aaea835b4e83b9
4
+ tags: 645f666f9bcd5a90fca523b33c5a78b7
@@ -0,0 +1,105 @@
1
+
2
+
3
+ <!DOCTYPE html>
4
+ <html class="writer-html5" lang="en" data-content_root="../">
5
+ <head>
6
+ <meta charset="utf-8" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>Overview: module code &mdash; pqfilt 0.1.0 documentation</title>
9
+ <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
10
+ <link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />
11
+
12
+
13
+ <script src="../_static/jquery.js?v=5d32c60e"></script>
14
+ <script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
15
+ <script src="../_static/documentation_options.js?v=01f34227"></script>
16
+ <script src="../_static/doctools.js?v=fd6eb6e6"></script>
17
+ <script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
18
+ <script src="../_static/js/theme.js"></script>
19
+ <link rel="index" title="Index" href="../genindex.html" />
20
+ <link rel="search" title="Search" href="../search.html" />
21
+ </head>
22
+
23
+ <body class="wy-body-for-nav">
24
+ <div class="wy-grid-for-nav">
25
+ <nav data-toggle="wy-nav-shift" class="wy-nav-side">
26
+ <div class="wy-side-scroll">
27
+ <div class="wy-side-nav-search" >
28
+
29
+
30
+
31
+ <a href="../index.html" class="icon icon-home">
32
+ pqfilt
33
+ </a>
34
+ <div role="search">
35
+ <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
36
+ <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
37
+ <input type="hidden" name="check_keywords" value="yes" />
38
+ <input type="hidden" name="area" value="default" />
39
+ </form>
40
+ </div>
41
+ </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
42
+ <p class="caption" role="heading"><span class="caption-text">Contents</span></p>
43
+ <ul>
44
+ <li class="toctree-l1"><a class="reference internal" href="../usage.html">Usage Guide</a></li>
45
+ <li class="toctree-l1"><a class="reference internal" href="../api.html">API Reference</a></li>
46
+ <li class="toctree-l1"><a class="reference internal" href="../changelog.html">Changelog</a></li>
47
+ </ul>
48
+
49
+ </div>
50
+ </div>
51
+ </nav>
52
+
53
+ <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
54
+ <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
55
+ <a href="../index.html">pqfilt</a>
56
+ </nav>
57
+
58
+ <div class="wy-nav-content">
59
+ <div class="rst-content">
60
+ <div role="navigation" aria-label="Page navigation">
61
+ <ul class="wy-breadcrumbs">
62
+ <li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
63
+ <li class="breadcrumb-item active">Overview: module code</li>
64
+ <li class="wy-breadcrumbs-aside">
65
+ </li>
66
+ </ul>
67
+ <hr/>
68
+ </div>
69
+ <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
70
+ <div itemprop="articleBody">
71
+
72
+ <h1>All modules for which code is available</h1>
73
+ <ul><li><a href="pqfilt/_operators.html">pqfilt._operators</a></li>
74
+ <li><a href="pqfilt/_parser.html">pqfilt._parser</a></li>
75
+ <li><a href="pqfilt/core.html">pqfilt.core</a></li>
76
+ </ul>
77
+
78
+ </div>
79
+ </div>
80
+ <footer>
81
+
82
+ <hr/>
83
+
84
+ <div role="contentinfo">
85
+ <p>&#169; Copyright 2026, Yoonsoo P. Bach.</p>
86
+ </div>
87
+
88
+ Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
89
+ <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
90
+ provided by <a href="https://readthedocs.org">Read the Docs</a>.
91
+
92
+
93
+ </footer>
94
+ </div>
95
+ </div>
96
+ </section>
97
+ </div>
98
+ <script>
99
+ jQuery(function () {
100
+ SphinxRtdTheme.Navigation.enable(true);
101
+ });
102
+ </script>
103
+
104
+ </body>
105
+ </html>