monograph 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.
- monograph-0.1.0/.gitignore +26 -0
- monograph-0.1.0/PKG-INFO +200 -0
- monograph-0.1.0/README.md +154 -0
- monograph-0.1.0/examples/lenses_parenting.py +65 -0
- monograph-0.1.0/examples/run_pipeline.py +48 -0
- monograph-0.1.0/examples/sample_diary/2019-06-02.md +5 -0
- monograph-0.1.0/examples/sample_diary/2019-06-09.md +4 -0
- monograph-0.1.0/pyproject.toml +42 -0
- monograph-0.1.0/src/monograph/__init__.py +11 -0
- monograph-0.1.0/src/monograph/app.py +113 -0
- monograph-0.1.0/src/monograph/arc/__init__.py +21 -0
- monograph-0.1.0/src/monograph/arc/analyze.py +64 -0
- monograph-0.1.0/src/monograph/arc/recon.py +137 -0
- monograph-0.1.0/src/monograph/arc/scenes.py +172 -0
- monograph-0.1.0/src/monograph/arc/spine.py +80 -0
- monograph-0.1.0/src/monograph/cli.py +187 -0
- monograph-0.1.0/src/monograph/config.py +67 -0
- monograph-0.1.0/src/monograph/index/__init__.py +25 -0
- monograph-0.1.0/src/monograph/index/base.py +22 -0
- monograph-0.1.0/src/monograph/index/embedding.py +46 -0
- monograph-0.1.0/src/monograph/index/local.py +77 -0
- monograph-0.1.0/src/monograph/ingest/__init__.py +4 -0
- monograph-0.1.0/src/monograph/ingest/parser.py +251 -0
- monograph-0.1.0/src/monograph/llm/__init__.py +22 -0
- monograph-0.1.0/src/monograph/llm/base.py +28 -0
- monograph-0.1.0/src/monograph/llm/ollama_backend.py +51 -0
- monograph-0.1.0/src/monograph/narrate/__init__.py +26 -0
- monograph-0.1.0/src/monograph/narrate/audio.py +55 -0
- monograph-0.1.0/src/monograph/narrate/backends/__init__.py +2 -0
- monograph-0.1.0/src/monograph/narrate/backends/f5.py +32 -0
- monograph-0.1.0/src/monograph/narrate/backends/xtts.py +50 -0
- monograph-0.1.0/src/monograph/narrate/base.py +69 -0
- monograph-0.1.0/src/monograph/narrate/chapterize.py +73 -0
- monograph-0.1.0/src/monograph/narrate/pronunciation.py +34 -0
- monograph-0.1.0/src/monograph/narrate/voice.py +63 -0
- monograph-0.1.0/src/monograph/types.py +131 -0
- monograph-0.1.0/src/monograph/write/__init__.py +6 -0
- monograph-0.1.0/src/monograph/write/engine.py +164 -0
- monograph-0.1.0/src/monograph/write/style.py +15 -0
- monograph-0.1.0/tests/test_arc.py +88 -0
- monograph-0.1.0/tests/test_chapterize.py +28 -0
- monograph-0.1.0/tests/test_config.py +16 -0
- monograph-0.1.0/tests/test_index.py +48 -0
- monograph-0.1.0/tests/test_ingest.py +54 -0
- monograph-0.1.0/tests/test_pronunciation.py +21 -0
- monograph-0.1.0/tests/test_write.py +82 -0
- monograph-0.1.0/venv/.gitignore +2 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/__init__.py +13 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/__main__.py +24 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/__init__.py +18 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/build_env.py +417 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cache.py +291 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +184 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/base_command.py +244 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1110 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/command_context.py +28 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/index_command.py +175 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/main.py +80 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/main_parser.py +134 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/parser.py +298 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +151 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/req_command.py +371 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/spinners.py +235 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/__init__.py +139 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/cache.py +231 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/check.py +66 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/completion.py +135 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/configuration.py +288 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/debug.py +203 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/download.py +142 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/freeze.py +107 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/hash.py +58 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/help.py +40 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/index.py +159 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/install.py +803 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/list.py +400 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/lock.py +167 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/search.py +178 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/show.py +231 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/wheel.py +176 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/configuration.py +396 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/base.py +55 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/installed.py +33 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/sdist.py +164 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/wheel.py +44 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/exceptions.py +898 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/index/__init__.py +1 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/index/collector.py +489 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/index/package_finder.py +1059 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/index/sources.py +287 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/locations/__init__.py +441 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +215 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/locations/base.py +82 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/main.py +12 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/__init__.py +169 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/_json.py +87 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/base.py +685 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +229 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/__init__.py +1 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/auth.py +564 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/cache.py +128 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/download.py +342 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +215 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/session.py +528 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/utils.py +98 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +61 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/check.py +175 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/freeze.py +259 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +1 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +746 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/prepare.py +748 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/pyproject.py +123 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/__init__.py +103 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/constructors.py +566 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_dependency_group.py +75 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_file.py +619 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_install.py +828 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_set.py +81 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +639 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +142 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +591 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +845 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +285 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +98 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +247 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +332 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/self_outdated_check.py +262 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/compat.py +85 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/datetime.py +10 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/deprecation.py +126 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/egg_link.py +81 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +88 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/filesystem.py +164 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/filetypes.py +24 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/glibc.py +102 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/hashes.py +150 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/logging.py +364 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/misc.py +765 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/packaging.py +44 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/retry.py +45 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/subprocess.py +248 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +294 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/unpacking.py +362 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +105 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/wheel.py +132 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +130 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/git.py +571 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +186 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/subversion.py +335 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +693 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_internal/wheel_builder.py +261 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/README.rst +180 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/__init__.py +117 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +29 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +168 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +119 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/LICENSE +20 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +4800 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/core.py +83 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/LICENSE.txt +9 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +13 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +65 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +209 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +59 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +62 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +9 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/LICENSE.txt +284 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1137 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +447 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/util.py +1984 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/LICENSE +202 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/distro.py +1403 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/LICENSE.md +31 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/__init__.py +45 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/codec.py +122 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/compat.py +15 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/core.py +437 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +4243 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/intranges.py +57 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8681 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/COPYING +14 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +170 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/LICENSE +3 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/LICENSE.APACHE +177 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/LICENSE.BSD +23 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +15 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +109 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +353 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +61 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +195 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +145 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +759 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/markers.py +362 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +862 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +91 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +1019 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/tags.py +656 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/utils.py +163 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/version.py +582 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pkg_resources/LICENSE +17 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +249 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +299 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +146 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +34 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +272 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/LICENSE +25 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/filter.py +70 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +129 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +963 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +72 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/style.py +203 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/token.py +214 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/util.py +324 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/LICENSE +175 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/__init__.py +179 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/adapters.py +696 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/auth.py +314 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/certs.py +17 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/compat.py +90 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +151 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/help.py +127 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/models.py +1039 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/packages.py +25 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/sessions.py +831 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/utils.py +1086 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/LICENSE +13 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +627 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/LICENSE +19 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/__main__.py +245 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +268 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +153 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_windows.py +71 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +93 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/align.py +306 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/ansi.py +241 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/bar.py +93 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/box.py +474 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/cells.py +174 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/color.py +621 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/console.py +2680 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/control.py +219 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +193 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +39 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/emoji.py +91 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/filesize.py +88 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/json.py +139 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/layout.py +442 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/live.py +400 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/live_render.py +106 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/logging.py +297 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/markup.py +251 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/panel.py +317 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/pretty.py +1016 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/progress.py +1715 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/prompt.py +400 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/segment.py +752 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/spinner.py +132 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/status.py +131 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/style.py +792 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/syntax.py +985 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/table.py +1006 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/text.py +1361 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/traceback.py +899 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/tree.py +257 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +8 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +777 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/_re.py +115 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli_w/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +36 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_api.py +341 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +571 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +68 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +567 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/LICENSE.txt +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +355 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1140 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +540 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/vendor.txt +19 -0
- monograph-0.1.0/venv/Lib/site-packages/pip/py.typed +4 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/INSTALLER +1 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/METADATA +111 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/RECORD +872 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/REQUESTED +0 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/WHEEL +4 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/entry_points.txt +4 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/AUTHORS.txt +842 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/LICENSE.txt +20 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/certifi/LICENSE +20 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt +9 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt +284 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/distro/LICENSE +202 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md +31 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/msgpack/COPYING +14 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/packaging/LICENSE +3 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE +177 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD +23 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE +17 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/pygments/LICENSE +25 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/requests/LICENSE +175 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE +13 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/rich/LICENSE +19 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/tomli/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/truststore/LICENSE +21 -0
- monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt +21 -0
- monograph-0.1.0/venv/Scripts/Activate.ps1 +248 -0
- monograph-0.1.0/venv/Scripts/activate +76 -0
- monograph-0.1.0/venv/Scripts/activate.bat +34 -0
- monograph-0.1.0/venv/Scripts/activate.fish +69 -0
- monograph-0.1.0/venv/Scripts/deactivate.bat +22 -0
- monograph-0.1.0/venv/Scripts/pip.exe +0 -0
- monograph-0.1.0/venv/Scripts/pip3.13.exe +0 -0
- monograph-0.1.0/venv/Scripts/pip3.exe +0 -0
- monograph-0.1.0/venv/Scripts/python.exe +0 -0
- monograph-0.1.0/venv/Scripts/pythonw.exe +0 -0
- monograph-0.1.0/venv/pyvenv.cfg +5 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
build/
|
|
6
|
+
dist/
|
|
7
|
+
.venv/
|
|
8
|
+
.pytest_cache/
|
|
9
|
+
|
|
10
|
+
# monograph โ never commit anyone's private content or large artifacts
|
|
11
|
+
# (diaries, voices, generated books, model caches)
|
|
12
|
+
*.wav
|
|
13
|
+
*.mp3
|
|
14
|
+
*.m4a
|
|
15
|
+
/out/
|
|
16
|
+
/book/
|
|
17
|
+
/audio/
|
|
18
|
+
/narration_audio/
|
|
19
|
+
my-diary/
|
|
20
|
+
voice.wav
|
|
21
|
+
pronunciation.txt
|
|
22
|
+
*.index
|
|
23
|
+
*.faiss
|
|
24
|
+
.chroma/
|
|
25
|
+
models/
|
|
26
|
+
.cache/
|
monograph-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: monograph
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Turn a personal diary into a memoir โ explore it, find its arcs, draft it, and narrate it in your own voice. Local-first.
|
|
5
|
+
Author: Bonnie Bingham
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: diary,memoir,rag,tts,voice-cloning,writing
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
|
+
Requires-Dist: numpy>=1.23
|
|
10
|
+
Provides-Extra: all
|
|
11
|
+
Requires-Dist: f5-tts>=1.0; extra == 'all'
|
|
12
|
+
Requires-Dist: pandas>=1.5; extra == 'all'
|
|
13
|
+
Requires-Dist: pytest>=7; extra == 'all'
|
|
14
|
+
Requires-Dist: python-docx>=0.8; extra == 'all'
|
|
15
|
+
Requires-Dist: scikit-learn>=1.1; extra == 'all'
|
|
16
|
+
Requires-Dist: sentence-transformers>=2.2; extra == 'all'
|
|
17
|
+
Requires-Dist: soundfile>=0.12; extra == 'all'
|
|
18
|
+
Requires-Dist: streamlit>=1.30; extra == 'all'
|
|
19
|
+
Provides-Extra: app
|
|
20
|
+
Requires-Dist: streamlit>=1.30; extra == 'app'
|
|
21
|
+
Provides-Extra: arc
|
|
22
|
+
Requires-Dist: pandas>=1.5; extra == 'arc'
|
|
23
|
+
Requires-Dist: scikit-learn>=1.1; extra == 'arc'
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: pandas>=1.5; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest>=7; extra == 'dev'
|
|
27
|
+
Requires-Dist: python-docx>=0.8; extra == 'dev'
|
|
28
|
+
Requires-Dist: scikit-learn>=1.1; extra == 'dev'
|
|
29
|
+
Requires-Dist: soundfile>=0.12; extra == 'dev'
|
|
30
|
+
Provides-Extra: index
|
|
31
|
+
Requires-Dist: sentence-transformers>=2.2; extra == 'index'
|
|
32
|
+
Provides-Extra: ingest
|
|
33
|
+
Requires-Dist: python-docx>=0.8; extra == 'ingest'
|
|
34
|
+
Provides-Extra: llm-ollama
|
|
35
|
+
Provides-Extra: llm-openai
|
|
36
|
+
Requires-Dist: openai>=1.0; extra == 'llm-openai'
|
|
37
|
+
Provides-Extra: narrate
|
|
38
|
+
Requires-Dist: soundfile>=0.12; extra == 'narrate'
|
|
39
|
+
Provides-Extra: narrate-f5
|
|
40
|
+
Requires-Dist: f5-tts>=1.0; extra == 'narrate-f5'
|
|
41
|
+
Requires-Dist: soundfile>=0.12; extra == 'narrate-f5'
|
|
42
|
+
Provides-Extra: narrate-xtts
|
|
43
|
+
Requires-Dist: coqui-tts>=0.24; extra == 'narrate-xtts'
|
|
44
|
+
Requires-Dist: soundfile>=0.12; extra == 'narrate-xtts'
|
|
45
|
+
Description-Content-Type: text/markdown
|
|
46
|
+
|
|
47
|
+
# monograph
|
|
48
|
+
|
|
49
|
+
Turn a personal diary into a memoir: **explore** it, find its **arcs**, **write**
|
|
50
|
+
it, and **narrate** it in your own voice. Local-first by design.
|
|
51
|
+
|
|
52
|
+
`monograph` is a pipeline with five stages, each usable on its own:
|
|
53
|
+
|
|
54
|
+
1. **ingest** โ parse a diary (any format) into structured entries.
|
|
55
|
+
2. **index** โ build a searchable index and query it (retrieval over your own writing).
|
|
56
|
+
3. **arc** โ find scenes, propose narrative spines, and reconstruct a memoir structure.
|
|
57
|
+
4. **write** โ draft prose from the chosen spine, in a style you supply.
|
|
58
|
+
5. **narrate** โ turn the finished text into audio read in the author's own cloned voice.
|
|
59
|
+
|
|
60
|
+
A thin `cli` wires the stages together, and an optional `app` gives a GUI.
|
|
61
|
+
|
|
62
|
+
## Privacy, first
|
|
63
|
+
|
|
64
|
+
A diary is the most sensitive text someone owns. `monograph` runs **local by
|
|
65
|
+
default** โ local parsing, local embeddings, local files, local TTS โ and never
|
|
66
|
+
sends your words anywhere unless you explicitly choose a cloud backend and pass a
|
|
67
|
+
key. `Config.local\_only` defaults to `True`, and any backend that would make a
|
|
68
|
+
network call must check it and refuse when it's set. Treat that flag as a
|
|
69
|
+
load-bearing contract, not a suggestion.
|
|
70
|
+
|
|
71
|
+
## Getting started (step by step)
|
|
72
|
+
|
|
73
|
+
If you don't write code, follow this once and you'll have a working setup. You need
|
|
74
|
+
**Python 3.10 or newer** installed first (python.org โ Downloads; on Windows, tick
|
|
75
|
+
"Add Python to PATH" during install).
|
|
76
|
+
|
|
77
|
+
**1. Open a terminal.**
|
|
78
|
+
|
|
79
|
+
* macOS: open the **Terminal** app (Cmd-Space, type "Terminal").
|
|
80
|
+
* Windows: open **PowerShell** (Start menu, type "PowerShell").
|
|
81
|
+
|
|
82
|
+
**2. Go to the folder that holds monograph.** Use `cd` ("change directory"):
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
cd path/to/monograph # e.g. cd Desktop/monograph
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Tip: type `cd ` (with a space), then drag the folder onto the terminal window โ it
|
|
89
|
+
fills in the path for you.
|
|
90
|
+
|
|
91
|
+
**3. Create a virtual environment** (a private sandbox for this project's packages),
|
|
92
|
+
and **activate** it:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# macOS / Linux
|
|
96
|
+
python3 -m venv .venv
|
|
97
|
+
source .venv/bin/activate
|
|
98
|
+
|
|
99
|
+
# Windows (PowerShell)
|
|
100
|
+
python -m venv .venv
|
|
101
|
+
.venv\\Scripts\\Activate.ps1
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
When it's active you'll see `(.venv)` at the start of the line. Do this (step 3,
|
|
105
|
+
activate) every time you open a new terminal to work on the project.
|
|
106
|
+
|
|
107
|
+
**4. Install monograph** and the pieces you want:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
pip install -e ".\[app,arc,index]" # GUI + arc engine + local search
|
|
111
|
+
pip install -e ".\[narrate-f5]" # add the F5 narrator (big download)
|
|
112
|
+
pip install -e ".\[all]" # everything at once
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Narration and model backends are heavy and optional โ install only what you'll use.
|
|
116
|
+
|
|
117
|
+
**5. Launch the app:**
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
monograph app
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
That opens the GUI in your web browser. Close it with Ctrl-C in the terminal.
|
|
124
|
+
|
|
125
|
+
## Using it from the command line
|
|
126
|
+
|
|
127
|
+
You can also drive each stage directly (handy for long narration runs):
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
monograph prepare-voice --src recording.m4a --out voice.wav
|
|
131
|
+
monograph narrate --text chapters/ --out audio/ --voice voice.wav --ref-text "I am recording my voice ..."
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Using it from Python
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
from monograph import Config
|
|
138
|
+
from monograph.narrate import get\_narrator
|
|
139
|
+
|
|
140
|
+
cfg = Config(voice\_ref="voice.wav", voice\_ref\_text="I am recording my voice ...")
|
|
141
|
+
get\_narrator("f5", cfg).narrate\_dir("chapters/", "audio/") # one wav per .txt, resumable
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## File names: how the stages connect
|
|
145
|
+
|
|
146
|
+
You never have to rename your diary to match the code โ every path is an argument
|
|
147
|
+
(the original scripts hardcoded names like `journal\_all.docx`; this doesn't). Two
|
|
148
|
+
things matter:
|
|
149
|
+
|
|
150
|
+
* **Your diary** can have any name and live anywhere. Point `--diary` (or the app's
|
|
151
|
+
sidebar, or `Config.diary\_path`) at it โ `.docx`, `.txt`/`.md`, `.json`, `.csv`,
|
|
152
|
+
`.pkl`, or a folder of them.
|
|
153
|
+
* **The index** is saved under a base name you choose with `--out` (default
|
|
154
|
+
`diary\_index`); building it writes `<base>.npy` and `<base>.meta.json`. Every stage
|
|
155
|
+
that *reads* the index โ `search`, `write`, and `app` โ takes that same base name
|
|
156
|
+
via `--index` (the app via its sidebar or the `MONOGRAPH\_INDEX` env var). The one
|
|
157
|
+
rule: **use the same base name to build and to read.**
|
|
158
|
+
|
|
159
|
+
A consistent run:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
monograph index --diary my\_journal.docx --out diary\_index
|
|
163
|
+
monograph scenes --diary my\_journal.docx
|
|
164
|
+
monograph search --index diary\_index "feeling alone"
|
|
165
|
+
monograph write --index diary\_index "breaking the cycle"
|
|
166
|
+
monograph app # reads diary\_index by default
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Change `diary\_index` everywhere together if you want a different name โ nothing is
|
|
170
|
+
hardcoded, and no file needs renaming. (Age labels in the app are optional: add a
|
|
171
|
+
`monograph.toml` with a `\[people]` table of `Name = "YYYY-MM-DD"` birthdates.)
|
|
172
|
+
|
|
173
|
+
## Package layout
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
monograph/
|
|
177
|
+
config.py Config + privacy defaults
|
|
178
|
+
types.py shared dataclasses (DiaryEntry, Scene, Spine, Chapter, ...)
|
|
179
|
+
ingest/ parse diaries -> entries
|
|
180
|
+
index/ build + search (pluggable: base.Index, local.LocalIndex)
|
|
181
|
+
arc/ scenes, spine, recon (the memoir-structure engine)
|
|
182
|
+
write/ memoir engine + style profiles
|
|
183
|
+
narrate/ Narrator backends (F5, XTTS) + chapterize + pronunciation + voice prep
|
|
184
|
+
llm/ LLM interface (pluggable; local or cloud, opt-in)
|
|
185
|
+
cli.py thin command line
|
|
186
|
+
app.py optional Streamlit front-end
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Each backend sits behind a small interface (`index.Index`, `llm.LLM`,
|
|
190
|
+
`narrate.Narrator`) so anyone can swap in their own without touching the core.
|
|
191
|
+
|
|
192
|
+
## Status
|
|
193
|
+
|
|
194
|
+
All five stages are implemented and tested โ `ingest`, `index`, `arc`, `write`,
|
|
195
|
+
`narrate` โ so the full chain runs end to end: parse the diary, build the index,
|
|
196
|
+
run recon / scene / spine analysis, draft the memoir, and narrate it in the
|
|
197
|
+
author's voice. The `write` stage drafts a passage from a theme or date range, and
|
|
198
|
+
`write\_memoir()` assembles one chapter per aspect a chosen spine draws on; treat
|
|
199
|
+
that assembly as a sensible default to reorder or merge to taste.
|
|
200
|
+
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# monograph
|
|
2
|
+
|
|
3
|
+
Turn a personal diary into a memoir: **explore** it, find its **arcs**, **write**
|
|
4
|
+
it, and **narrate** it in your own voice. Local-first by design.
|
|
5
|
+
|
|
6
|
+
`monograph` is a pipeline with five stages, each usable on its own:
|
|
7
|
+
|
|
8
|
+
1. **ingest** โ parse a diary (any format) into structured entries.
|
|
9
|
+
2. **index** โ build a searchable index and query it (retrieval over your own writing).
|
|
10
|
+
3. **arc** โ find scenes, propose narrative spines, and reconstruct a memoir structure.
|
|
11
|
+
4. **write** โ draft prose from the chosen spine, in a style you supply.
|
|
12
|
+
5. **narrate** โ turn the finished text into audio read in the author's own cloned voice.
|
|
13
|
+
|
|
14
|
+
A thin `cli` wires the stages together, and an optional `app` gives a GUI.
|
|
15
|
+
|
|
16
|
+
## Privacy, first
|
|
17
|
+
|
|
18
|
+
A diary is the most sensitive text someone owns. `monograph` runs **local by
|
|
19
|
+
default** โ local parsing, local embeddings, local files, local TTS โ and never
|
|
20
|
+
sends your words anywhere unless you explicitly choose a cloud backend and pass a
|
|
21
|
+
key. `Config.local\_only` defaults to `True`, and any backend that would make a
|
|
22
|
+
network call must check it and refuse when it's set. Treat that flag as a
|
|
23
|
+
load-bearing contract, not a suggestion.
|
|
24
|
+
|
|
25
|
+
## Getting started (step by step)
|
|
26
|
+
|
|
27
|
+
If you don't write code, follow this once and you'll have a working setup. You need
|
|
28
|
+
**Python 3.10 or newer** installed first (python.org โ Downloads; on Windows, tick
|
|
29
|
+
"Add Python to PATH" during install).
|
|
30
|
+
|
|
31
|
+
**1. Open a terminal.**
|
|
32
|
+
|
|
33
|
+
* macOS: open the **Terminal** app (Cmd-Space, type "Terminal").
|
|
34
|
+
* Windows: open **PowerShell** (Start menu, type "PowerShell").
|
|
35
|
+
|
|
36
|
+
**2. Go to the folder that holds monograph.** Use `cd` ("change directory"):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
cd path/to/monograph # e.g. cd Desktop/monograph
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Tip: type `cd ` (with a space), then drag the folder onto the terminal window โ it
|
|
43
|
+
fills in the path for you.
|
|
44
|
+
|
|
45
|
+
**3. Create a virtual environment** (a private sandbox for this project's packages),
|
|
46
|
+
and **activate** it:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# macOS / Linux
|
|
50
|
+
python3 -m venv .venv
|
|
51
|
+
source .venv/bin/activate
|
|
52
|
+
|
|
53
|
+
# Windows (PowerShell)
|
|
54
|
+
python -m venv .venv
|
|
55
|
+
.venv\\Scripts\\Activate.ps1
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
When it's active you'll see `(.venv)` at the start of the line. Do this (step 3,
|
|
59
|
+
activate) every time you open a new terminal to work on the project.
|
|
60
|
+
|
|
61
|
+
**4. Install monograph** and the pieces you want:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pip install -e ".\[app,arc,index]" # GUI + arc engine + local search
|
|
65
|
+
pip install -e ".\[narrate-f5]" # add the F5 narrator (big download)
|
|
66
|
+
pip install -e ".\[all]" # everything at once
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Narration and model backends are heavy and optional โ install only what you'll use.
|
|
70
|
+
|
|
71
|
+
**5. Launch the app:**
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
monograph app
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
That opens the GUI in your web browser. Close it with Ctrl-C in the terminal.
|
|
78
|
+
|
|
79
|
+
## Using it from the command line
|
|
80
|
+
|
|
81
|
+
You can also drive each stage directly (handy for long narration runs):
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
monograph prepare-voice --src recording.m4a --out voice.wav
|
|
85
|
+
monograph narrate --text chapters/ --out audio/ --voice voice.wav --ref-text "I am recording my voice ..."
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Using it from Python
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
from monograph import Config
|
|
92
|
+
from monograph.narrate import get\_narrator
|
|
93
|
+
|
|
94
|
+
cfg = Config(voice\_ref="voice.wav", voice\_ref\_text="I am recording my voice ...")
|
|
95
|
+
get\_narrator("f5", cfg).narrate\_dir("chapters/", "audio/") # one wav per .txt, resumable
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## File names: how the stages connect
|
|
99
|
+
|
|
100
|
+
You never have to rename your diary to match the code โ every path is an argument
|
|
101
|
+
(the original scripts hardcoded names like `journal\_all.docx`; this doesn't). Two
|
|
102
|
+
things matter:
|
|
103
|
+
|
|
104
|
+
* **Your diary** can have any name and live anywhere. Point `--diary` (or the app's
|
|
105
|
+
sidebar, or `Config.diary\_path`) at it โ `.docx`, `.txt`/`.md`, `.json`, `.csv`,
|
|
106
|
+
`.pkl`, or a folder of them.
|
|
107
|
+
* **The index** is saved under a base name you choose with `--out` (default
|
|
108
|
+
`diary\_index`); building it writes `<base>.npy` and `<base>.meta.json`. Every stage
|
|
109
|
+
that *reads* the index โ `search`, `write`, and `app` โ takes that same base name
|
|
110
|
+
via `--index` (the app via its sidebar or the `MONOGRAPH\_INDEX` env var). The one
|
|
111
|
+
rule: **use the same base name to build and to read.**
|
|
112
|
+
|
|
113
|
+
A consistent run:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
monograph index --diary my\_journal.docx --out diary\_index
|
|
117
|
+
monograph scenes --diary my\_journal.docx
|
|
118
|
+
monograph search --index diary\_index "feeling alone"
|
|
119
|
+
monograph write --index diary\_index "breaking the cycle"
|
|
120
|
+
monograph app # reads diary\_index by default
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Change `diary\_index` everywhere together if you want a different name โ nothing is
|
|
124
|
+
hardcoded, and no file needs renaming. (Age labels in the app are optional: add a
|
|
125
|
+
`monograph.toml` with a `\[people]` table of `Name = "YYYY-MM-DD"` birthdates.)
|
|
126
|
+
|
|
127
|
+
## Package layout
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
monograph/
|
|
131
|
+
config.py Config + privacy defaults
|
|
132
|
+
types.py shared dataclasses (DiaryEntry, Scene, Spine, Chapter, ...)
|
|
133
|
+
ingest/ parse diaries -> entries
|
|
134
|
+
index/ build + search (pluggable: base.Index, local.LocalIndex)
|
|
135
|
+
arc/ scenes, spine, recon (the memoir-structure engine)
|
|
136
|
+
write/ memoir engine + style profiles
|
|
137
|
+
narrate/ Narrator backends (F5, XTTS) + chapterize + pronunciation + voice prep
|
|
138
|
+
llm/ LLM interface (pluggable; local or cloud, opt-in)
|
|
139
|
+
cli.py thin command line
|
|
140
|
+
app.py optional Streamlit front-end
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Each backend sits behind a small interface (`index.Index`, `llm.LLM`,
|
|
144
|
+
`narrate.Narrator`) so anyone can swap in their own without touching the core.
|
|
145
|
+
|
|
146
|
+
## Status
|
|
147
|
+
|
|
148
|
+
All five stages are implemented and tested โ `ingest`, `index`, `arc`, `write`,
|
|
149
|
+
`narrate` โ so the full chain runs end to end: parse the diary, build the index,
|
|
150
|
+
run recon / scene / spine analysis, draft the memoir, and narrate it in the
|
|
151
|
+
author's voice. The `write` stage drafts a passage from a theme or date range, and
|
|
152
|
+
`write\_memoir()` assembles one chapter per aspect a chosen spine draws on; treat
|
|
153
|
+
that assembly as a sensible default to reorder or merge to taste.
|
|
154
|
+
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""A worked, domain-specific Lenses config โ an intergenerational *parenting*
|
|
2
|
+
memoir (present: parenting your own kids; past: how you were parented).
|
|
3
|
+
|
|
4
|
+
This is the kind of thing that used to be hardcoded at the top of memoir_recon.py
|
|
5
|
+
and spine_proposer.py. It lives here as an *example of customization*, not in the
|
|
6
|
+
library: swap the seeds and aspects for whatever your memoir is about.
|
|
7
|
+
|
|
8
|
+
from examples.lenses_parenting import LENSES
|
|
9
|
+
report = recon_report(entries, embed, lenses=LENSES)
|
|
10
|
+
"""
|
|
11
|
+
from datetime import date
|
|
12
|
+
from monograph.types import Lenses, StyleProfile
|
|
13
|
+
|
|
14
|
+
# Age context for the write stage (name -> birthdate). Pass as people= to
|
|
15
|
+
# MemoirEngine so a child's age at each entry's date is always right.
|
|
16
|
+
PEOPLE = {
|
|
17
|
+
"Cash": date(2007, 1, 10),
|
|
18
|
+
"Camille": date(2008, 1, 31),
|
|
19
|
+
"Ruby": date(2010, 4, 15),
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
# Sample the author's voice from older entries, where it's truest.
|
|
23
|
+
VOICE_WINDOW = ("2018-01-01", "2021-12-31")
|
|
24
|
+
|
|
25
|
+
# The voice characterization that used to be hardcoded in memoir.py โ now a
|
|
26
|
+
# StyleProfile the engine drops into its prompt.
|
|
27
|
+
STYLE = StyleProfile(
|
|
28
|
+
name="author",
|
|
29
|
+
notes=("Her voice is dry and sarcastic, with dark humor. She makes light of hard "
|
|
30
|
+
"things and deflects pain with wit โ MATCH that voice; the sarcasm and humor "
|
|
31
|
+
"are essential to sounding like her."),
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
LENSES = Lenses(
|
|
36
|
+
aspects={
|
|
37
|
+
"pride": "pride in my child, so proud of them, celebrating who they are",
|
|
38
|
+
"cycle": "the parent I want to be, breaking the cycle, not repeating how I "
|
|
39
|
+
"was raised, doing it differently than my own parents did",
|
|
40
|
+
"repair": "repairing things with my child after I got it wrong, apologizing "
|
|
41
|
+
"to my kid, reconnecting after a rupture with them",
|
|
42
|
+
"temper": "losing my temper, yelling at my kids, snapping, and the guilt after",
|
|
43
|
+
"overwhelm": "exhausted, depleted, no patience left, burned out, stretched too thin",
|
|
44
|
+
"worry": "worried and afraid for my child, scared something is wrong",
|
|
45
|
+
"affection": "a tender, close moment with my child, warmth, holding them",
|
|
46
|
+
"discipline": "setting a limit, a consequence, correcting behavior",
|
|
47
|
+
"letting_go": "my child growing up, becoming independent, learning to let them go",
|
|
48
|
+
"faith": "my faith, God, church, prayer, what I believe and how it steadies me",
|
|
49
|
+
},
|
|
50
|
+
emo_pos=["joy and happiness", "love and tenderness", "pride", "gratitude", "calm and peace"],
|
|
51
|
+
emo_neg=["anger and frustration", "fear, anxiety and worry", "sadness and grief",
|
|
52
|
+
"guilt and shame", "exhaustion and being overwhelmed"],
|
|
53
|
+
strands={
|
|
54
|
+
"present": ["parenting my children", "being a mom to my kids", "raising my children",
|
|
55
|
+
"disciplining my child", "comforting my child when upset",
|
|
56
|
+
"bedtime with the kids", "losing my patience with my kids",
|
|
57
|
+
"apologizing to my child", "being proud of my kid",
|
|
58
|
+
"worrying about my child", "being a single parent"],
|
|
59
|
+
"past": ["how I was parented", "the way I was raised", "when I was a child",
|
|
60
|
+
"growing up", "my mother", "my father", "my parents", "my childhood",
|
|
61
|
+
"how my parents treated me", "my own upbringing"],
|
|
62
|
+
},
|
|
63
|
+
name_stop=Lenses.default().name_stop | {"Mom", "Dad", "Happy", "Christmas",
|
|
64
|
+
"Thanksgiving", "Easter", "New", "Year"},
|
|
65
|
+
)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""End-to-end sketch: diary -> memoir -> audio in the author's voice.
|
|
2
|
+
|
|
3
|
+
The `arc` and `narrate` stages are implemented; `ingest`/`index`/`write` run once
|
|
4
|
+
you've ported your own logic into their stubs. This file *uses* the library โ it's
|
|
5
|
+
the general version of your project-specific driver scripts.
|
|
6
|
+
"""
|
|
7
|
+
from monograph import Config
|
|
8
|
+
from monograph.narrate import get_narrator
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def narrate_only():
|
|
12
|
+
"""Works today: a folder of chapter .txt -> one .wav each, resumable."""
|
|
13
|
+
cfg = Config(
|
|
14
|
+
voice_ref="voice.wav",
|
|
15
|
+
voice_ref_text="I am recording my voice so I can read my own book aloud, "
|
|
16
|
+
"in a calm and natural tone, the way I would read a story to someone I love.",
|
|
17
|
+
narrate_backend="f5",
|
|
18
|
+
cross_fade=0.30,
|
|
19
|
+
)
|
|
20
|
+
get_narrator(cfg.narrate_backend, cfg).narrate_dir("chapters/", "audio/")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def find_the_arc():
|
|
24
|
+
"""Works today (needs the `arc` + `index` extras and a local LLM via Ollama).
|
|
25
|
+
Turns parsed entries into a recon report and candidate spines."""
|
|
26
|
+
from monograph.ingest import parse_diary
|
|
27
|
+
from monograph.index import get_embedder
|
|
28
|
+
from monograph.arc import recon_report, build_evidence, propose_spines
|
|
29
|
+
from monograph.llm import get_llm
|
|
30
|
+
from monograph.types import Lenses
|
|
31
|
+
|
|
32
|
+
# Bring your own lenses; see examples/lenses_parenting.py, or Lenses.default().
|
|
33
|
+
lenses = Lenses.default()
|
|
34
|
+
|
|
35
|
+
entries = parse_diary("./my-diary") # once ingest is ported
|
|
36
|
+
embed = get_embedder("local")
|
|
37
|
+
|
|
38
|
+
open("recon_report.md", "w").write(recon_report(entries, embed, lenses=lenses))
|
|
39
|
+
|
|
40
|
+
cfg = Config(llm_backend="ollama", options={"llm_model": "llama3.1:8b"})
|
|
41
|
+
evidence = build_evidence(entries, embed, lenses=lenses)
|
|
42
|
+
spines = propose_spines(evidence, get_llm(cfg.llm_backend, cfg))
|
|
43
|
+
for s in spines:
|
|
44
|
+
print(s.title, "โ", s.premise)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
if __name__ == "__main__":
|
|
48
|
+
narrate_only()
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "monograph"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Turn a personal diary into a memoir โ explore it, find its arcs, draft it, and narrate it in your own voice. Local-first."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [{ name = "Bonnie Bingham" }]
|
|
13
|
+
keywords = ["diary", "memoir", "writing", "tts", "voice-cloning", "rag"]
|
|
14
|
+
|
|
15
|
+
# Core stays tiny and dependency-light. Heavy pieces are opt-in extras so the
|
|
16
|
+
# library installs small and runs local-first; a user only pulls the backend
|
|
17
|
+
# they actually use.
|
|
18
|
+
dependencies = [
|
|
19
|
+
"numpy>=1.23",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
[project.optional-dependencies]
|
|
23
|
+
ingest = ["python-docx>=0.8"] # read .docx diaries
|
|
24
|
+
index = ["sentence-transformers>=2.2"] # local embeddings (store is numpy; no faiss)
|
|
25
|
+
arc = ["pandas>=1.5", "scikit-learn>=1.1"] # signal extraction + clustering
|
|
26
|
+
narrate = ["soundfile>=0.12"] # shared audio I/O
|
|
27
|
+
narrate-f5 = ["monograph[narrate]", "f5-tts>=1.0"]
|
|
28
|
+
narrate-xtts = ["monograph[narrate]", "coqui-tts>=0.24"]
|
|
29
|
+
llm-ollama = [] # local LLM via stdlib HTTP (just run Ollama)
|
|
30
|
+
llm-openai = ["openai>=1.0"]
|
|
31
|
+
app = ["streamlit>=1.30"]
|
|
32
|
+
dev = ["pytest>=7", "soundfile>=0.12", "pandas>=1.5", "scikit-learn>=1.1", "python-docx>=0.8"]
|
|
33
|
+
all = ["monograph[ingest,index,arc,narrate-f5,app,dev]"]
|
|
34
|
+
|
|
35
|
+
[project.scripts]
|
|
36
|
+
monograph = "monograph.cli:main"
|
|
37
|
+
|
|
38
|
+
[tool.hatch.build.targets.wheel]
|
|
39
|
+
packages = ["src/monograph"]
|
|
40
|
+
|
|
41
|
+
[tool.pytest.ini_options]
|
|
42
|
+
testpaths = ["tests"]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""monograph โ diary -> memoir -> narrated audio, local-first.
|
|
2
|
+
|
|
3
|
+
Only light things are imported at top level so `import monograph` stays cheap and
|
|
4
|
+
free of heavy optional dependencies. Pull backends from their submodules
|
|
5
|
+
(`monograph.narrate`, `monograph.index`, ...) when you need them.
|
|
6
|
+
"""
|
|
7
|
+
from .config import Config
|
|
8
|
+
from . import types
|
|
9
|
+
|
|
10
|
+
__version__ = "0.1.0"
|
|
11
|
+
__all__ = ["Config", "types", "__version__"]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"""Diary Companion โ a local, private Streamlit app for exploring a journal:
|
|
2
|
+
find forgotten entries, follow a thread across the years, see your story freshly.
|
|
3
|
+
Ported from diary_app.py. Retrieval goes through monograph's LocalIndex (no faiss
|
|
4
|
+
/ pickle), and the family age context is optional config, not hardcoded.
|
|
5
|
+
|
|
6
|
+
Launch it with: monograph app
|
|
7
|
+
|
|
8
|
+
It reads an index built by `monograph index` (default base name "diary_index").
|
|
9
|
+
Age labels appear if a monograph.toml with a [people] table sits in the folder:
|
|
10
|
+
|
|
11
|
+
[people]
|
|
12
|
+
Cash = "2007-01-10"
|
|
13
|
+
Camille = "2008-01-31"
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import os
|
|
17
|
+
from datetime import date
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
import streamlit as st
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@st.cache_resource
|
|
24
|
+
def _load_index(base: str):
|
|
25
|
+
from monograph.index.local import LocalIndex
|
|
26
|
+
return LocalIndex.load(base)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _load_people() -> dict:
|
|
30
|
+
try:
|
|
31
|
+
import tomllib
|
|
32
|
+
p = Path("monograph.toml")
|
|
33
|
+
if p.exists():
|
|
34
|
+
data = tomllib.loads(p.read_text(encoding="utf-8"))
|
|
35
|
+
return {k: date.fromisoformat(v) for k, v in data.get("people", {}).items()}
|
|
36
|
+
except Exception:
|
|
37
|
+
pass
|
|
38
|
+
return {}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _age_at(birth: date, d: date) -> int:
|
|
42
|
+
return d.year - birth.year - ((d.month, d.day) < (birth.month, birth.day))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def run():
|
|
46
|
+
st.set_page_config(page_title="Diary Companion", page_icon="๐", layout="wide")
|
|
47
|
+
st.title("๐ Diary Companion")
|
|
48
|
+
st.caption("A private, local space to find, revisit, and reflect on your own "
|
|
49
|
+
"entries. Nothing leaves this machine.")
|
|
50
|
+
|
|
51
|
+
base = st.sidebar.text_input("Index path",
|
|
52
|
+
value=os.environ.get("MONOGRAPH_INDEX", "diary_index"))
|
|
53
|
+
try:
|
|
54
|
+
idx = _load_index(base)
|
|
55
|
+
except Exception as e:
|
|
56
|
+
st.error(f"Couldn't load an index at '{base}'. Build one first:\n\n"
|
|
57
|
+
f"`monograph index --diary <your diary> --out {base}`\n\n({e})")
|
|
58
|
+
st.stop()
|
|
59
|
+
|
|
60
|
+
people = _load_people()
|
|
61
|
+
dated = [e for e in idx.entries if e.entry_date]
|
|
62
|
+
span = (f"{min(e.entry_date for e in dated)} โ {max(e.entry_date for e in dated)}"
|
|
63
|
+
if dated else "no dates")
|
|
64
|
+
st.sidebar.success(f"{len(idx.entries)} entries loaded ({span})")
|
|
65
|
+
|
|
66
|
+
st.sidebar.header("Find a thread")
|
|
67
|
+
theme = st.sidebar.text_input("Search by theme or feeling",
|
|
68
|
+
placeholder="e.g. a recovery, feeling alone, hope")
|
|
69
|
+
k = st.sidebar.slider("How many entries to surface", 5, 100, 30, step=5)
|
|
70
|
+
min_score = st.sidebar.slider("Relevance threshold", 0.0, 0.6, 0.20, step=0.02,
|
|
71
|
+
help="Higher = only stronger matches.")
|
|
72
|
+
order = st.sidebar.radio("Show in order of", ["Chronological", "Relevance"])
|
|
73
|
+
|
|
74
|
+
if not theme:
|
|
75
|
+
st.info("Enter a theme or feeling in the sidebar to surface related entries "
|
|
76
|
+
"from across your journal, shown with their dates so you can follow "
|
|
77
|
+
"how a thread developed over time.")
|
|
78
|
+
st.stop()
|
|
79
|
+
|
|
80
|
+
hits = [(e, s) for e, s in idx.search(theme, k=k) if s >= min_score]
|
|
81
|
+
if not hits:
|
|
82
|
+
st.warning("No entries matched. Lower the relevance threshold or rephrase.")
|
|
83
|
+
st.stop()
|
|
84
|
+
|
|
85
|
+
if order == "Chronological":
|
|
86
|
+
hits.sort(key=lambda es: es[0].entry_date or date.min)
|
|
87
|
+
else:
|
|
88
|
+
hits.sort(key=lambda es: es[1], reverse=True)
|
|
89
|
+
|
|
90
|
+
st.subheader(f"{len(hits)} entries related to โ{theme}โ")
|
|
91
|
+
years = [e.entry_date.year for e, _ in hits if e.entry_date]
|
|
92
|
+
if years:
|
|
93
|
+
counts = {y: years.count(y) for y in range(min(years), max(years) + 1)}
|
|
94
|
+
st.caption("When these entries fall (a first glimpse of the pattern):")
|
|
95
|
+
st.bar_chart({"entries": counts})
|
|
96
|
+
st.divider()
|
|
97
|
+
|
|
98
|
+
for e, score in hits:
|
|
99
|
+
d = e.entry_date
|
|
100
|
+
weekday = e.meta.get("weekday") or (d.strftime("%A") if d else "")
|
|
101
|
+
cols = st.columns([3, 1])
|
|
102
|
+
cols[0].markdown(f"**{d or '?'} ยท {weekday}**")
|
|
103
|
+
if people and d:
|
|
104
|
+
ages = " ยท ".join(f"{n} {_age_at(b, d)}" for n, b in people.items())
|
|
105
|
+
cols[1].markdown(f"<div style='text-align:right;color:gray;font-size:0.8em'>"
|
|
106
|
+
f"{ages}</div>", unsafe_allow_html=True)
|
|
107
|
+
st.write(e.text)
|
|
108
|
+
st.caption(f"relevance {score:.2f}")
|
|
109
|
+
st.divider()
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
if __name__ == "__main__":
|
|
113
|
+
run()
|