tesorotools-python 0.1.4__tar.gz → 0.1.6__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 (158) hide show
  1. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/PKG-INFO +1 -1
  2. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/_common.py +27 -11
  3. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/box_plot.py +1 -1
  4. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/note/__init__.py +28 -3
  5. tesorotools_python-0.1.6/src/tesorotools/note/builder.py +1285 -0
  6. tesorotools_python-0.1.6/src/tesorotools/note/charts.py +134 -0
  7. tesorotools_python-0.1.6/src/tesorotools/note/cli.py +308 -0
  8. tesorotools_python-0.1.6/src/tesorotools/note/inline.py +358 -0
  9. tesorotools_python-0.1.6/src/tesorotools/note/issues.py +48 -0
  10. tesorotools_python-0.1.6/src/tesorotools/note/lint.py +1236 -0
  11. tesorotools_python-0.1.6/src/tesorotools/note/markdown.py +1585 -0
  12. tesorotools_python-0.1.6/src/tesorotools/note/pdf.py +123 -0
  13. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/note/skeleton.md +44 -10
  14. tesorotools_python-0.1.6/src/tesorotools/note/skill/SKILL.md +395 -0
  15. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/note/skill/reglas.md +43 -21
  16. tesorotools_python-0.1.4/src/tesorotools/note/builder.py +0 -749
  17. tesorotools_python-0.1.4/src/tesorotools/note/cli.py +0 -168
  18. tesorotools_python-0.1.4/src/tesorotools/note/inline.py +0 -129
  19. tesorotools_python-0.1.4/src/tesorotools/note/lint.py +0 -291
  20. tesorotools_python-0.1.4/src/tesorotools/note/markdown.py +0 -613
  21. tesorotools_python-0.1.4/src/tesorotools/note/skill/SKILL.md +0 -171
  22. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/.gitignore +0 -0
  23. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/pyproject.toml +0 -0
  24. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/__init__.py +0 -0
  25. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/_build_context.py +0 -0
  26. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/_registry.py +0 -0
  27. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/__init__.py +0 -0
  28. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/bar_line.py +0 -0
  29. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/barh_plot.py +0 -0
  30. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/compact.py +0 -0
  31. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/intraday_plot.py +0 -0
  32. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/line_plot.py +0 -0
  33. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/matrix.py +0 -0
  34. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/plotly_backend.py +0 -0
  35. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/sankey.py +0 -0
  36. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/scatter.py +0 -0
  37. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/sharing.py +0 -0
  38. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/shock_plot.py +0 -0
  39. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/stacked.py +0 -0
  40. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/tikz_backend.py +0 -0
  41. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/type_curve.py +0 -0
  42. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/vector_plot.py +0 -0
  43. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/artists/waterfall.py +0 -0
  44. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/README.md +0 -0
  45. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/fonts/CabinetGrotesk-Black.otf +0 -0
  46. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/fonts/CabinetGrotesk-Bold.otf +0 -0
  47. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/fonts/CabinetGrotesk-Extrabold.otf +0 -0
  48. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/fonts/CabinetGrotesk-Extralight.otf +0 -0
  49. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/fonts/CabinetGrotesk-Light.otf +0 -0
  50. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/fonts/CabinetGrotesk-Medium.otf +0 -0
  51. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/fonts/CabinetGrotesk-Regular.otf +0 -0
  52. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/fonts/CabinetGrotesk-Thin.otf +0 -0
  53. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/fonts/README.md +0 -0
  54. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/nota_template.dotx +0 -0
  55. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/plots.yaml +0 -0
  56. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/template.docx +0 -0
  57. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/assets/tesoro.mplstyle +0 -0
  58. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/data_sources/__init__.py +0 -0
  59. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/data_sources/debug.py +0 -0
  60. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/database/__init__.py +0 -0
  61. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/database/local.py +0 -0
  62. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/database/push.py +0 -0
  63. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/database/shared.py +0 -0
  64. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/dependencies/__init__.py +0 -0
  65. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/dependencies/node.py +0 -0
  66. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/dependencies/resolution.py +0 -0
  67. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/driver.py +0 -0
  68. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/__init__.py +0 -0
  69. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/cli.py +0 -0
  70. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/scaffold.py +0 -0
  71. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/article/main.tex.tmpl +0 -0
  72. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/article/sections/01-introduccion.tex +0 -0
  73. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/article/sections/02-analisis.tex +0 -0
  74. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/article/sections/03-conclusiones.tex +0 -0
  75. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/beamer/main.tex.tmpl +0 -0
  76. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/beamer/slides/01-contexto.tex +0 -0
  77. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/beamer/slides/02-analisis.tex +0 -0
  78. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/beamer/slides/03-conclusiones.tex +0 -0
  79. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/beamer/style/beamerthemeTesoro.sty +0 -0
  80. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/book/appendices/a-fuentes.tex +0 -0
  81. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/book/chapters/01-introduccion.tex +0 -0
  82. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/book/chapters/02-analisis.tex +0 -0
  83. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/book/frontmatter/resumen.tex +0 -0
  84. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/book/main.tex.tmpl +0 -0
  85. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/README.md.tmpl +0 -0
  86. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/dot-gitignore +0 -0
  87. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/dot-vscode/settings.json +0 -0
  88. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/figures/dot-gitkeep +0 -0
  89. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/fonts/README.md +0 -0
  90. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/latexmkrc +0 -0
  91. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/refs.bib +0 -0
  92. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/style/tesoro.sty +0 -0
  93. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/style/tesorobrand.sty.tmpl +0 -0
  94. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/latex/templates/common/style/tesorolocal.sty.tmpl +0 -0
  95. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/manifest.py +0 -0
  96. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/note/template.py +0 -0
  97. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/offsets/__init__.py +0 -0
  98. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/offsets/offsets.py +0 -0
  99. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/offsets/outliers.py +0 -0
  100. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/orchestration.py +0 -0
  101. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/palette.py +0 -0
  102. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/pipeline/__init__.py +0 -0
  103. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/pipeline/diagnose.py +0 -0
  104. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/pipeline/engine.py +0 -0
  105. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/pipeline/rules.py +0 -0
  106. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/providers/__init__.py +0 -0
  107. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/providers/base.py +0 -0
  108. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/providers/bde.py +0 -0
  109. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/providers/ecb.py +0 -0
  110. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/providers/fred.py +0 -0
  111. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/providers/imf_irfcl.py +0 -0
  112. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/providers/lseg.py +0 -0
  113. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/py.typed +0 -0
  114. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/__init__.py +0 -0
  115. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/content/__init__.py +0 -0
  116. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/content/content.py +0 -0
  117. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/content/images.py +0 -0
  118. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/content/section.py +0 -0
  119. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/content/subtitle.py +0 -0
  120. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/content/table.py +0 -0
  121. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/content/text.py +0 -0
  122. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/content/title.py +0 -0
  123. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/document.py +0 -0
  124. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/render/report.py +0 -0
  125. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/scaffold.py +0 -0
  126. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/testing/__init__.py +0 -0
  127. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/testing/compare.py +0 -0
  128. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/utils/__init__.py +0 -0
  129. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/utils/config.py +0 -0
  130. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/utils/format.py +0 -0
  131. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/utils/globals.py +0 -0
  132. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/utils/matplotlib.py +0 -0
  133. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/utils/series.py +0 -0
  134. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/utils/shortcuts.py +0 -0
  135. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/utils/template.py +0 -0
  136. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/__init__.py +0 -0
  137. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/app.py +0 -0
  138. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/brand.py +0 -0
  139. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/cli.py +0 -0
  140. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/components.py +0 -0
  141. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/formatting.py +0 -0
  142. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/launcher.py +0 -0
  143. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/palette.py +0 -0
  144. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/plotting.py +0 -0
  145. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/scaffold.py +0 -0
  146. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/Dockerfile.tmpl +0 -0
  147. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/README.md.tmpl +0 -0
  148. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/dot-dockerignore.tmpl +0 -0
  149. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/dot-gitignore.tmpl +0 -0
  150. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/dot-streamlit/config.toml.tmpl +0 -0
  151. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/pyproject.toml.tmpl +0 -0
  152. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/src/$package/__init__.py.tmpl +0 -0
  153. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/src/$package/cli.py.tmpl +0 -0
  154. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/src/$package/main.py.tmpl +0 -0
  155. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/src/$package/sections.py.tmpl +0 -0
  156. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/tests/__init__.py.tmpl +0 -0
  157. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/templates/tests/test_app.py.tmpl +0 -0
  158. {tesorotools_python-0.1.4 → tesorotools_python-0.1.6}/src/tesorotools/web/theme.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tesorotools-python
3
- Version: 0.1.4
3
+ Version: 0.1.6
4
4
  Requires-Python: >=3.13
5
5
  Requires-Dist: babel>=2.17
6
6
  Requires-Dist: matplotlib>=3.10
@@ -24,6 +24,7 @@ overrides only need to update ``plots.yaml``.
24
24
  from __future__ import annotations
25
25
 
26
26
  import math
27
+ import warnings
27
28
  from collections.abc import Sequence
28
29
  from pathlib import Path
29
30
  from typing import Any, Literal, Protocol, Self, cast, runtime_checkable
@@ -624,7 +625,7 @@ def compact_legend_font_pt() -> float:
624
625
  )
625
626
 
626
627
 
627
- def compact_legend_kwargs() -> dict[str, Any]:
628
+ def compact_legend_kwargs(ax: Axes | None = None) -> dict[str, Any]:
628
629
  """Legend styling for compact charts, from the ``compact`` config.
629
630
 
630
631
  Returns ``fontsize`` / ``handlelength`` / ``handletextpad`` /
@@ -633,9 +634,17 @@ def compact_legend_kwargs() -> dict[str, Any]:
633
634
  the metrics used to *draw* the legend in :func:`legend_above` -- the
634
635
  invariant that prevents an over-counted ``ncol``. The smaller font
635
636
  and shorter handles let several wide labels share one legend row.
637
+
638
+ With *ax*, the legend is never larger than its tick labels: a chart
639
+ drawn with a small ``font_pt`` (the 7 pt of the notes) keeps the
640
+ legend at that size instead of ``legend_font_pt``.
636
641
  """
642
+ fontsize = compact_legend_font_pt()
643
+ ticks = (ax.get_yticklabels() or ax.get_xticklabels()) if ax else []
644
+ if ticks:
645
+ fontsize = min(fontsize, float(ticks[0].get_fontsize()))
637
646
  return {
638
- "fontsize": compact_legend_font_pt(),
647
+ "fontsize": fontsize,
639
648
  "handlelength": float(COMPACT_CONFIG.get("legend_handlelength", 1.2)),
640
649
  "handletextpad": float(COMPACT_CONFIG.get("legend_handletextpad", 0.4)),
641
650
  "columnspacing": float(COMPACT_CONFIG.get("legend_columnspacing", 0.8)),
@@ -690,14 +699,21 @@ def date_span_ticks(
690
699
  lo: float = float(cast(Any, date2num(data_min)))
691
700
  hi: float = float(cast(Any, date2num(data_max)))
692
701
  locator = AutoDateLocator(minticks=2, maxticks=maxticks)
693
- candidates: list[float] = cast(
694
- "list[float]", locator.tick_values(data_min, data_max)
695
- )
696
- if not pin_start:
697
- return [t for t in candidates if lo <= t <= hi] or [lo, hi]
698
- chosen: Any = locator.get_locator( # type: ignore[reportUnknownMemberType]
699
- data_min, data_max
700
- )
702
+ # With few ticks over a long span the locator finds no interval in its
703
+ # table, warns and falls back to a sensible default: the fallback is
704
+ # the wanted result, the warning only noise for whoever draws a chart.
705
+ with warnings.catch_warnings():
706
+ warnings.filterwarnings(
707
+ "ignore", "AutoDateLocator was unable", UserWarning
708
+ )
709
+ candidates: list[float] = cast(
710
+ "list[float]", locator.tick_values(data_min, data_max)
711
+ )
712
+ if not pin_start:
713
+ return [t for t in candidates if lo <= t <= hi] or [lo, hi]
714
+ chosen: Any = locator.get_locator( # type: ignore[reportUnknownMemberType]
715
+ data_min, data_max
716
+ )
701
717
  if isinstance(chosen, YearLocator):
702
718
  step = int(cast(Any, chosen.base).step)
703
719
  if step > 1:
@@ -1251,7 +1267,7 @@ def place_legend(
1251
1267
  side = resolve_legend_position(position, compact=compact)
1252
1268
  fig_w_px: float = fig.get_size_inches()[0] * fig.dpi
1253
1269
  if compact:
1254
- legend_kw = compact_legend_kwargs()
1270
+ legend_kw = compact_legend_kwargs(ax)
1255
1271
  if ncol is None:
1256
1272
  ncol = auto_ncol(
1257
1273
  ax, labels, available_width_px=fig_w_px, **legend_kw
@@ -499,7 +499,7 @@ class BoxPlot(FigureLifecycle):
499
499
  self.legend.position, compact=self.compact
500
500
  )
501
501
  if self.compact:
502
- kw = compact_legend_kwargs()
502
+ kw = compact_legend_kwargs(ax)
503
503
  ncol = self.legend.ncol or auto_ncol(
504
504
  ax, labels, available_width_px=fig_w_px, **kw
505
505
  )
@@ -15,26 +15,51 @@ from tesorotools.note.builder import (
15
15
  Chart,
16
16
  Note,
17
17
  Table,
18
- chart_size,
19
18
  format_number,
19
+ normalize_unit,
20
20
  spanish_date,
21
21
  )
22
- from tesorotools.note.lint import Issue, check
23
- from tesorotools.note.markdown import NoteSource, build, parse, read
22
+ from tesorotools.note.charts import (
23
+ NOTE_COLORS,
24
+ axis_decimals,
25
+ axis_format,
26
+ chart_size,
27
+ note_palette,
28
+ )
29
+ from tesorotools.note.cli import skill_text
30
+ from tesorotools.note.issues import Issue, NoteError
31
+ from tesorotools.note.lint import check
32
+ from tesorotools.note.markdown import (
33
+ ChartRenderer,
34
+ NoteSource,
35
+ assemble,
36
+ build,
37
+ parse,
38
+ read,
39
+ )
24
40
  from tesorotools.note.template import open_template
25
41
 
26
42
  __all__ = [
43
+ "NOTE_COLORS",
27
44
  "Chart",
45
+ "ChartRenderer",
28
46
  "Issue",
29
47
  "Note",
48
+ "NoteError",
30
49
  "NoteSource",
31
50
  "Table",
51
+ "assemble",
52
+ "axis_decimals",
53
+ "axis_format",
32
54
  "build",
33
55
  "chart_size",
34
56
  "check",
35
57
  "format_number",
58
+ "normalize_unit",
59
+ "note_palette",
36
60
  "open_template",
37
61
  "parse",
38
62
  "read",
63
+ "skill_text",
39
64
  "spanish_date",
40
65
  ]