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.
Files changed (510) hide show
  1. monograph-0.1.0/.gitignore +26 -0
  2. monograph-0.1.0/PKG-INFO +200 -0
  3. monograph-0.1.0/README.md +154 -0
  4. monograph-0.1.0/examples/lenses_parenting.py +65 -0
  5. monograph-0.1.0/examples/run_pipeline.py +48 -0
  6. monograph-0.1.0/examples/sample_diary/2019-06-02.md +5 -0
  7. monograph-0.1.0/examples/sample_diary/2019-06-09.md +4 -0
  8. monograph-0.1.0/pyproject.toml +42 -0
  9. monograph-0.1.0/src/monograph/__init__.py +11 -0
  10. monograph-0.1.0/src/monograph/app.py +113 -0
  11. monograph-0.1.0/src/monograph/arc/__init__.py +21 -0
  12. monograph-0.1.0/src/monograph/arc/analyze.py +64 -0
  13. monograph-0.1.0/src/monograph/arc/recon.py +137 -0
  14. monograph-0.1.0/src/monograph/arc/scenes.py +172 -0
  15. monograph-0.1.0/src/monograph/arc/spine.py +80 -0
  16. monograph-0.1.0/src/monograph/cli.py +187 -0
  17. monograph-0.1.0/src/monograph/config.py +67 -0
  18. monograph-0.1.0/src/monograph/index/__init__.py +25 -0
  19. monograph-0.1.0/src/monograph/index/base.py +22 -0
  20. monograph-0.1.0/src/monograph/index/embedding.py +46 -0
  21. monograph-0.1.0/src/monograph/index/local.py +77 -0
  22. monograph-0.1.0/src/monograph/ingest/__init__.py +4 -0
  23. monograph-0.1.0/src/monograph/ingest/parser.py +251 -0
  24. monograph-0.1.0/src/monograph/llm/__init__.py +22 -0
  25. monograph-0.1.0/src/monograph/llm/base.py +28 -0
  26. monograph-0.1.0/src/monograph/llm/ollama_backend.py +51 -0
  27. monograph-0.1.0/src/monograph/narrate/__init__.py +26 -0
  28. monograph-0.1.0/src/monograph/narrate/audio.py +55 -0
  29. monograph-0.1.0/src/monograph/narrate/backends/__init__.py +2 -0
  30. monograph-0.1.0/src/monograph/narrate/backends/f5.py +32 -0
  31. monograph-0.1.0/src/monograph/narrate/backends/xtts.py +50 -0
  32. monograph-0.1.0/src/monograph/narrate/base.py +69 -0
  33. monograph-0.1.0/src/monograph/narrate/chapterize.py +73 -0
  34. monograph-0.1.0/src/monograph/narrate/pronunciation.py +34 -0
  35. monograph-0.1.0/src/monograph/narrate/voice.py +63 -0
  36. monograph-0.1.0/src/monograph/types.py +131 -0
  37. monograph-0.1.0/src/monograph/write/__init__.py +6 -0
  38. monograph-0.1.0/src/monograph/write/engine.py +164 -0
  39. monograph-0.1.0/src/monograph/write/style.py +15 -0
  40. monograph-0.1.0/tests/test_arc.py +88 -0
  41. monograph-0.1.0/tests/test_chapterize.py +28 -0
  42. monograph-0.1.0/tests/test_config.py +16 -0
  43. monograph-0.1.0/tests/test_index.py +48 -0
  44. monograph-0.1.0/tests/test_ingest.py +54 -0
  45. monograph-0.1.0/tests/test_pronunciation.py +21 -0
  46. monograph-0.1.0/tests/test_write.py +82 -0
  47. monograph-0.1.0/venv/.gitignore +2 -0
  48. monograph-0.1.0/venv/Lib/site-packages/pip/__init__.py +13 -0
  49. monograph-0.1.0/venv/Lib/site-packages/pip/__main__.py +24 -0
  50. monograph-0.1.0/venv/Lib/site-packages/pip/__pip-runner__.py +50 -0
  51. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/__init__.py +18 -0
  52. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/build_env.py +417 -0
  53. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cache.py +291 -0
  54. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/__init__.py +3 -0
  55. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/autocompletion.py +184 -0
  56. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/base_command.py +244 -0
  57. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/cmdoptions.py +1110 -0
  58. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/command_context.py +28 -0
  59. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/index_command.py +175 -0
  60. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/main.py +80 -0
  61. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/main_parser.py +134 -0
  62. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/parser.py +298 -0
  63. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/progress_bars.py +151 -0
  64. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/req_command.py +371 -0
  65. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/spinners.py +235 -0
  66. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/cli/status_codes.py +6 -0
  67. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/__init__.py +139 -0
  68. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/cache.py +231 -0
  69. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/check.py +66 -0
  70. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/completion.py +135 -0
  71. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/configuration.py +288 -0
  72. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/debug.py +203 -0
  73. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/download.py +142 -0
  74. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/freeze.py +107 -0
  75. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/hash.py +58 -0
  76. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/help.py +40 -0
  77. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/index.py +159 -0
  78. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/inspect.py +92 -0
  79. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/install.py +803 -0
  80. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/list.py +400 -0
  81. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/lock.py +167 -0
  82. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/search.py +178 -0
  83. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/show.py +231 -0
  84. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/uninstall.py +113 -0
  85. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/commands/wheel.py +176 -0
  86. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/configuration.py +396 -0
  87. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/__init__.py +21 -0
  88. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/base.py +55 -0
  89. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/installed.py +33 -0
  90. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/sdist.py +164 -0
  91. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/distributions/wheel.py +44 -0
  92. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/exceptions.py +898 -0
  93. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/index/__init__.py +1 -0
  94. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/index/collector.py +489 -0
  95. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/index/package_finder.py +1059 -0
  96. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/index/sources.py +287 -0
  97. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/locations/__init__.py +441 -0
  98. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/locations/_distutils.py +173 -0
  99. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/locations/_sysconfig.py +215 -0
  100. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/locations/base.py +82 -0
  101. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/main.py +12 -0
  102. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/__init__.py +169 -0
  103. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/_json.py +87 -0
  104. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/base.py +685 -0
  105. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/importlib/__init__.py +6 -0
  106. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/importlib/_compat.py +87 -0
  107. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/importlib/_dists.py +229 -0
  108. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/importlib/_envs.py +143 -0
  109. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/metadata/pkg_resources.py +298 -0
  110. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/__init__.py +1 -0
  111. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/auth.py +564 -0
  112. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/cache.py +128 -0
  113. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/download.py +342 -0
  114. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/lazy_wheel.py +215 -0
  115. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/session.py +528 -0
  116. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/utils.py +98 -0
  117. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/network/xmlrpc.py +61 -0
  118. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/__init__.py +0 -0
  119. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/check.py +175 -0
  120. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/freeze.py +259 -0
  121. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/install/__init__.py +1 -0
  122. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/install/wheel.py +746 -0
  123. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/operations/prepare.py +748 -0
  124. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/pyproject.py +123 -0
  125. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/__init__.py +103 -0
  126. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/constructors.py +566 -0
  127. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_dependency_group.py +75 -0
  128. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_file.py +619 -0
  129. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_install.py +828 -0
  130. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_set.py +81 -0
  131. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/req/req_uninstall.py +639 -0
  132. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/__init__.py +0 -0
  133. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/base.py +20 -0
  134. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/legacy/__init__.py +0 -0
  135. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/legacy/resolver.py +598 -0
  136. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/__init__.py +0 -0
  137. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/base.py +142 -0
  138. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/candidates.py +591 -0
  139. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/factory.py +845 -0
  140. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py +166 -0
  141. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/provider.py +285 -0
  142. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/reporter.py +98 -0
  143. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/requirements.py +247 -0
  144. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/resolution/resolvelib/resolver.py +332 -0
  145. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/self_outdated_check.py +262 -0
  146. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/__init__.py +0 -0
  147. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/_jaraco_text.py +109 -0
  148. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/_log.py +38 -0
  149. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/appdirs.py +52 -0
  150. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/compat.py +85 -0
  151. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/compatibility_tags.py +201 -0
  152. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/datetime.py +10 -0
  153. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/deprecation.py +126 -0
  154. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/direct_url_helpers.py +87 -0
  155. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/egg_link.py +81 -0
  156. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/entrypoints.py +88 -0
  157. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/filesystem.py +164 -0
  158. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/filetypes.py +24 -0
  159. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/glibc.py +102 -0
  160. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/hashes.py +150 -0
  161. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/logging.py +364 -0
  162. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/misc.py +765 -0
  163. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/packaging.py +44 -0
  164. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/retry.py +45 -0
  165. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/subprocess.py +248 -0
  166. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/temp_dir.py +294 -0
  167. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/unpacking.py +362 -0
  168. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/urls.py +55 -0
  169. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/virtualenv.py +105 -0
  170. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/utils/wheel.py +132 -0
  171. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/__init__.py +15 -0
  172. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/bazaar.py +130 -0
  173. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/git.py +571 -0
  174. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/mercurial.py +186 -0
  175. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/subversion.py +335 -0
  176. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/vcs/versioncontrol.py +693 -0
  177. monograph-0.1.0/venv/Lib/site-packages/pip/_internal/wheel_builder.py +261 -0
  178. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/README.rst +180 -0
  179. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/__init__.py +117 -0
  180. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
  181. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/__init__.py +29 -0
  182. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/_cmd.py +70 -0
  183. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/adapter.py +168 -0
  184. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/cache.py +75 -0
  185. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/__init__.py +8 -0
  186. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py +145 -0
  187. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py +48 -0
  188. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/controller.py +511 -0
  189. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/filewrapper.py +119 -0
  190. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/heuristics.py +157 -0
  191. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/py.typed +0 -0
  192. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/serialize.py +146 -0
  193. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/cachecontrol/wrapper.py +43 -0
  194. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/LICENSE +20 -0
  195. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/__init__.py +4 -0
  196. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/__main__.py +12 -0
  197. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/cacert.pem +4800 -0
  198. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/core.py +83 -0
  199. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/certifi/py.typed +0 -0
  200. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/LICENSE.txt +9 -0
  201. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/__init__.py +13 -0
  202. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/__main__.py +65 -0
  203. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/_implementation.py +209 -0
  204. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py +59 -0
  205. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py +62 -0
  206. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/_toml_compat.py +9 -0
  207. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/dependency_groups/py.typed +0 -0
  208. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/LICENSE.txt +284 -0
  209. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/__init__.py +33 -0
  210. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/compat.py +1137 -0
  211. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/resources.py +358 -0
  212. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/scripts.py +447 -0
  213. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/t32.exe +0 -0
  214. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/t64-arm.exe +0 -0
  215. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/t64.exe +0 -0
  216. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/util.py +1984 -0
  217. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/w32.exe +0 -0
  218. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/w64-arm.exe +0 -0
  219. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distlib/w64.exe +0 -0
  220. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/LICENSE +202 -0
  221. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/__init__.py +54 -0
  222. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/__main__.py +4 -0
  223. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/distro.py +1403 -0
  224. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/distro/py.typed +0 -0
  225. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/LICENSE.md +31 -0
  226. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/__init__.py +45 -0
  227. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/codec.py +122 -0
  228. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/compat.py +15 -0
  229. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/core.py +437 -0
  230. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/idnadata.py +4243 -0
  231. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/intranges.py +57 -0
  232. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/package_data.py +1 -0
  233. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/py.typed +0 -0
  234. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/idna/uts46data.py +8681 -0
  235. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/COPYING +14 -0
  236. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/__init__.py +55 -0
  237. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/exceptions.py +48 -0
  238. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/ext.py +170 -0
  239. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/msgpack/fallback.py +929 -0
  240. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/LICENSE +3 -0
  241. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/LICENSE.APACHE +177 -0
  242. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/LICENSE.BSD +23 -0
  243. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/__init__.py +15 -0
  244. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_elffile.py +109 -0
  245. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_manylinux.py +262 -0
  246. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_musllinux.py +85 -0
  247. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_parser.py +353 -0
  248. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_structures.py +61 -0
  249. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/_tokenizer.py +195 -0
  250. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/licenses/__init__.py +145 -0
  251. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/licenses/_spdx.py +759 -0
  252. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/markers.py +362 -0
  253. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/metadata.py +862 -0
  254. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/py.typed +0 -0
  255. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/requirements.py +91 -0
  256. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/specifiers.py +1019 -0
  257. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/tags.py +656 -0
  258. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/utils.py +163 -0
  259. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/packaging/version.py +582 -0
  260. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pkg_resources/LICENSE +17 -0
  261. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pkg_resources/__init__.py +3676 -0
  262. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/LICENSE +21 -0
  263. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/__init__.py +631 -0
  264. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/__main__.py +55 -0
  265. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/android.py +249 -0
  266. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/api.py +299 -0
  267. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/macos.py +146 -0
  268. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/py.typed +0 -0
  269. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/unix.py +272 -0
  270. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/version.py +34 -0
  271. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/platformdirs/windows.py +272 -0
  272. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/LICENSE +25 -0
  273. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/__init__.py +82 -0
  274. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/__main__.py +17 -0
  275. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/console.py +70 -0
  276. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/filter.py +70 -0
  277. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/filters/__init__.py +940 -0
  278. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/formatter.py +129 -0
  279. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/formatters/__init__.py +157 -0
  280. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/formatters/_mapping.py +23 -0
  281. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/lexer.py +963 -0
  282. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/lexers/__init__.py +362 -0
  283. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/lexers/_mapping.py +602 -0
  284. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/lexers/python.py +1201 -0
  285. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/modeline.py +43 -0
  286. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/plugin.py +72 -0
  287. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/regexopt.py +91 -0
  288. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/scanner.py +104 -0
  289. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/sphinxext.py +247 -0
  290. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/style.py +203 -0
  291. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/styles/__init__.py +61 -0
  292. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/styles/_mapping.py +54 -0
  293. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/token.py +214 -0
  294. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/unistring.py +153 -0
  295. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pygments/util.py +324 -0
  296. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/LICENSE +21 -0
  297. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/__init__.py +31 -0
  298. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_impl.py +410 -0
  299. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py +21 -0
  300. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py +389 -0
  301. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/pyproject_hooks/py.typed +0 -0
  302. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/LICENSE +175 -0
  303. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/__init__.py +179 -0
  304. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/__version__.py +14 -0
  305. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/_internal_utils.py +50 -0
  306. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/adapters.py +696 -0
  307. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/api.py +157 -0
  308. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/auth.py +314 -0
  309. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/certs.py +17 -0
  310. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/compat.py +90 -0
  311. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/cookies.py +561 -0
  312. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/exceptions.py +151 -0
  313. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/help.py +127 -0
  314. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/hooks.py +33 -0
  315. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/models.py +1039 -0
  316. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/packages.py +25 -0
  317. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/sessions.py +831 -0
  318. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/status_codes.py +128 -0
  319. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/structures.py +99 -0
  320. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/requests/utils.py +1086 -0
  321. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/LICENSE +13 -0
  322. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/__init__.py +27 -0
  323. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/providers.py +196 -0
  324. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/py.typed +0 -0
  325. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/reporters.py +55 -0
  326. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py +27 -0
  327. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py +47 -0
  328. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py +48 -0
  329. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py +57 -0
  330. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py +627 -0
  331. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/resolvelib/structs.py +209 -0
  332. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/LICENSE +19 -0
  333. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/__init__.py +177 -0
  334. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/__main__.py +245 -0
  335. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_cell_widths.py +454 -0
  336. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_emoji_codes.py +3610 -0
  337. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_emoji_replace.py +32 -0
  338. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_export_format.py +76 -0
  339. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_extension.py +10 -0
  340. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_fileno.py +24 -0
  341. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_inspect.py +268 -0
  342. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_log_render.py +94 -0
  343. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_loop.py +43 -0
  344. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_null_file.py +69 -0
  345. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_palettes.py +309 -0
  346. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_pick.py +17 -0
  347. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_ratio.py +153 -0
  348. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_spinners.py +482 -0
  349. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_stack.py +16 -0
  350. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_timer.py +19 -0
  351. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_win32_console.py +661 -0
  352. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_windows.py +71 -0
  353. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_windows_renderer.py +56 -0
  354. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/_wrap.py +93 -0
  355. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/abc.py +33 -0
  356. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/align.py +306 -0
  357. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/ansi.py +241 -0
  358. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/bar.py +93 -0
  359. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/box.py +474 -0
  360. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/cells.py +174 -0
  361. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/color.py +621 -0
  362. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/color_triplet.py +38 -0
  363. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/columns.py +187 -0
  364. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/console.py +2680 -0
  365. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/constrain.py +37 -0
  366. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/containers.py +167 -0
  367. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/control.py +219 -0
  368. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/default_styles.py +193 -0
  369. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/diagnose.py +39 -0
  370. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/emoji.py +91 -0
  371. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/errors.py +34 -0
  372. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/file_proxy.py +57 -0
  373. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/filesize.py +88 -0
  374. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/highlighter.py +232 -0
  375. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/json.py +139 -0
  376. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/jupyter.py +101 -0
  377. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/layout.py +442 -0
  378. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/live.py +400 -0
  379. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/live_render.py +106 -0
  380. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/logging.py +297 -0
  381. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/markup.py +251 -0
  382. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/measure.py +151 -0
  383. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/padding.py +141 -0
  384. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/pager.py +34 -0
  385. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/palette.py +100 -0
  386. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/panel.py +317 -0
  387. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/pretty.py +1016 -0
  388. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/progress.py +1715 -0
  389. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/progress_bar.py +223 -0
  390. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/prompt.py +400 -0
  391. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/protocol.py +42 -0
  392. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/py.typed +0 -0
  393. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/region.py +10 -0
  394. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/repr.py +149 -0
  395. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/rule.py +130 -0
  396. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/scope.py +86 -0
  397. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/screen.py +54 -0
  398. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/segment.py +752 -0
  399. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/spinner.py +132 -0
  400. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/status.py +131 -0
  401. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/style.py +792 -0
  402. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/styled.py +42 -0
  403. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/syntax.py +985 -0
  404. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/table.py +1006 -0
  405. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/terminal_theme.py +153 -0
  406. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/text.py +1361 -0
  407. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/theme.py +115 -0
  408. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/themes.py +5 -0
  409. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/traceback.py +899 -0
  410. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/rich/tree.py +257 -0
  411. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/LICENSE +21 -0
  412. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/__init__.py +8 -0
  413. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/_parser.py +777 -0
  414. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/_re.py +115 -0
  415. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/_types.py +10 -0
  416. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli/py.typed +1 -0
  417. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli_w/LICENSE +21 -0
  418. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli_w/__init__.py +4 -0
  419. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli_w/_writer.py +229 -0
  420. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/tomli_w/py.typed +1 -0
  421. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/LICENSE +21 -0
  422. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/__init__.py +36 -0
  423. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_api.py +341 -0
  424. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_macos.py +571 -0
  425. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_openssl.py +68 -0
  426. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_ssl_constants.py +31 -0
  427. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/_windows.py +567 -0
  428. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/truststore/py.typed +0 -0
  429. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/LICENSE.txt +21 -0
  430. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/__init__.py +102 -0
  431. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/_collections.py +355 -0
  432. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/_version.py +2 -0
  433. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/connection.py +572 -0
  434. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/connectionpool.py +1140 -0
  435. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/__init__.py +0 -0
  436. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py +36 -0
  437. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py +0 -0
  438. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +519 -0
  439. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +397 -0
  440. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/appengine.py +314 -0
  441. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py +130 -0
  442. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py +518 -0
  443. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/securetransport.py +920 -0
  444. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/contrib/socks.py +216 -0
  445. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/exceptions.py +323 -0
  446. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/fields.py +274 -0
  447. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/filepost.py +98 -0
  448. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/__init__.py +0 -0
  449. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py +0 -0
  450. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py +51 -0
  451. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py +155 -0
  452. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/packages/six.py +1076 -0
  453. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/poolmanager.py +540 -0
  454. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/request.py +191 -0
  455. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/response.py +879 -0
  456. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/__init__.py +49 -0
  457. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/connection.py +149 -0
  458. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/proxy.py +57 -0
  459. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/queue.py +22 -0
  460. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/request.py +137 -0
  461. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  462. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
  463. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
  464. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
  465. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  466. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
  467. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
  468. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
  469. monograph-0.1.0/venv/Lib/site-packages/pip/_vendor/vendor.txt +19 -0
  470. monograph-0.1.0/venv/Lib/site-packages/pip/py.typed +4 -0
  471. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/INSTALLER +1 -0
  472. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/METADATA +111 -0
  473. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/RECORD +872 -0
  474. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/REQUESTED +0 -0
  475. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/WHEEL +4 -0
  476. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/entry_points.txt +4 -0
  477. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/AUTHORS.txt +842 -0
  478. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/LICENSE.txt +20 -0
  479. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
  480. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/certifi/LICENSE +20 -0
  481. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt +9 -0
  482. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt +284 -0
  483. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/distro/LICENSE +202 -0
  484. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md +31 -0
  485. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/msgpack/COPYING +14 -0
  486. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/packaging/LICENSE +3 -0
  487. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE +177 -0
  488. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD +23 -0
  489. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE +17 -0
  490. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE +21 -0
  491. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/pygments/LICENSE +25 -0
  492. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE +21 -0
  493. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/requests/LICENSE +175 -0
  494. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE +13 -0
  495. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/rich/LICENSE +19 -0
  496. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/tomli/LICENSE +21 -0
  497. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE +21 -0
  498. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/truststore/LICENSE +21 -0
  499. monograph-0.1.0/venv/Lib/site-packages/pip-25.3.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt +21 -0
  500. monograph-0.1.0/venv/Scripts/Activate.ps1 +248 -0
  501. monograph-0.1.0/venv/Scripts/activate +76 -0
  502. monograph-0.1.0/venv/Scripts/activate.bat +34 -0
  503. monograph-0.1.0/venv/Scripts/activate.fish +69 -0
  504. monograph-0.1.0/venv/Scripts/deactivate.bat +22 -0
  505. monograph-0.1.0/venv/Scripts/pip.exe +0 -0
  506. monograph-0.1.0/venv/Scripts/pip3.13.exe +0 -0
  507. monograph-0.1.0/venv/Scripts/pip3.exe +0 -0
  508. monograph-0.1.0/venv/Scripts/python.exe +0 -0
  509. monograph-0.1.0/venv/Scripts/pythonw.exe +0 -0
  510. 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/
@@ -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,5 @@
1
+ # June 2, 2019
2
+
3
+ Synthetic sample entry (safe to commit โ€” not anyone's real diary). Rain all day.
4
+ Started the garden boxes anyway and got soaked. Felt good to build something with
5
+ my hands for once instead of staring at a screen.
@@ -0,0 +1,4 @@
1
+ # June 9, 2019
2
+
3
+ Synthetic sample entry. The seedlings came up. Small thing, but I keep going back
4
+ to the window to look at them. A week ago it was just dirt and a stubborn idea.
@@ -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()