ocdkit 0.0.6__tar.gz → 0.0.7__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 (249) hide show
  1. {ocdkit-0.0.6/src/ocdkit.egg-info → ocdkit-0.0.7}/PKG-INFO +3 -1
  2. ocdkit-0.0.7/badges/coverage.svg +1 -0
  3. ocdkit-0.0.7/badges/tests.svg +1 -0
  4. {ocdkit-0.0.6 → ocdkit-0.0.7}/pyproject.toml +4 -0
  5. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/text_metrics.py +16 -1
  6. {ocdkit-0.0.6 → ocdkit-0.0.7/src/ocdkit.egg-info}/PKG-INFO +3 -1
  7. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit.egg-info/requires.txt +2 -0
  8. ocdkit-0.0.6/badges/coverage.svg +0 -1
  9. ocdkit-0.0.6/badges/tests.svg +0 -1
  10. {ocdkit-0.0.6 → ocdkit-0.0.7}/.github/workflows/test_and_deploy.yml +0 -0
  11. {ocdkit-0.0.6 → ocdkit-0.0.7}/.gitignore +0 -0
  12. {ocdkit-0.0.6 → ocdkit-0.0.7}/LICENSE +0 -0
  13. {ocdkit-0.0.6 → ocdkit-0.0.7}/MANIFEST.in +0 -0
  14. {ocdkit-0.0.6 → ocdkit-0.0.7}/README.md +0 -0
  15. {ocdkit-0.0.6 → ocdkit-0.0.7}/docs/plot-backend-roadmap.md +0 -0
  16. {ocdkit-0.0.6 → ocdkit-0.0.7}/docs/plugin-authoring.md +0 -0
  17. {ocdkit-0.0.6 → ocdkit-0.0.7}/docs/pywebview-desktop-integration.md +0 -0
  18. {ocdkit-0.0.6 → ocdkit-0.0.7}/jupyter-config/jupyter_server_config.d/ocdkit_tileserve.json +0 -0
  19. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/bench_colorize.py +0 -0
  20. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/bench_contour_alignment.py +0 -0
  21. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/bench_hdr_cmap.py +0 -0
  22. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/bench_vector_contours.py +0 -0
  23. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/bench_vector_contours_tier2.py +0 -0
  24. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/check_compare_pixels.py +0 -0
  25. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/check_hdr_cmap.py +0 -0
  26. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/check_image_grid_auto_color.py +0 -0
  27. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/check_jxl_p3_bytes.py +0 -0
  28. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/check_playwright_render.py +0 -0
  29. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/check_uhdr_sdr_base.py +0 -0
  30. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/coverage_cross_device.env.example +0 -0
  31. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/coverage_cross_device.sh +0 -0
  32. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/hdr_harness.py +0 -0
  33. {ocdkit-0.0.6 → ocdkit-0.0.7}/scripts/make_chromaticity_p3.py +0 -0
  34. {ocdkit-0.0.6 → ocdkit-0.0.7}/setup.cfg +0 -0
  35. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/__init__.py +0 -0
  36. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/__main__.py +0 -0
  37. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/__init__.py +0 -0
  38. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/convert.py +0 -0
  39. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/filters.py +0 -0
  40. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/imports.py +0 -0
  41. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/index.py +0 -0
  42. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/morphology.py +0 -0
  43. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/normalize.py +0 -0
  44. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/ops.py +0 -0
  45. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/parallel.py +0 -0
  46. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/spatial.py +0 -0
  47. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/transform.py +0 -0
  48. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/union_find.py +0 -0
  49. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/array/warp.py +0 -0
  50. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/cli/__init__.py +0 -0
  51. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/cli/__main__.py +0 -0
  52. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/cli/main.py +0 -0
  53. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/cli/migrate.py +0 -0
  54. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/cli/paths.py +0 -0
  55. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/desktop/__init__.py +0 -0
  56. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/desktop/pinning.py +0 -0
  57. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/imports.py +0 -0
  58. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/__init__.py +0 -0
  59. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/fig_export.py +0 -0
  60. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/figure.py +0 -0
  61. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/figure_server.py +0 -0
  62. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/files.py +0 -0
  63. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/image.py +0 -0
  64. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/imports.py +0 -0
  65. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/live_figure.py +0 -0
  66. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/mpl_axes_cropper.py +0 -0
  67. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/path.py +0 -0
  68. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/pptx.py +0 -0
  69. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/io/result.py +0 -0
  70. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/load/__init__.py +0 -0
  71. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/load/module.py +0 -0
  72. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/load/object.py +0 -0
  73. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/logging/__init__.py +0 -0
  74. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/logging/handler.py +0 -0
  75. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/measure/__init__.py +0 -0
  76. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/measure/bbox.py +0 -0
  77. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/measure/diameter.py +0 -0
  78. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/measure/imports.py +0 -0
  79. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/measure/medoid.py +0 -0
  80. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/measure/metrics.py +0 -0
  81. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/__init__.py +0 -0
  82. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/bench.py +0 -0
  83. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/color.py +0 -0
  84. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/composite.py +0 -0
  85. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/composite_grid.py +0 -0
  86. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/contour.py +0 -0
  87. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/defaults.py +0 -0
  88. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/display.py +0 -0
  89. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/export.py +0 -0
  90. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/figure.py +0 -0
  91. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/grid.py +0 -0
  92. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/hdr_cmap.py +0 -0
  93. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/image_grid.py +0 -0
  94. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/imports.py +0 -0
  95. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/label.py +0 -0
  96. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/layout.py +0 -0
  97. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/luts.py +0 -0
  98. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/ncolor.py +0 -0
  99. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/pyramid.py +0 -0
  100. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/style.py +0 -0
  101. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/svg.py +0 -0
  102. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/web/colormap_image.js +0 -0
  103. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/web/hdr_colormap.js +0 -0
  104. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/web/hdr_headroom.js +0 -0
  105. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/web/label_gl.js +0 -0
  106. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/web/scatter_gl.js +0 -0
  107. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/web/spectra_density_element.js +0 -0
  108. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/web/spectra_density_gl.js +0 -0
  109. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/plot/web/tile_grid_element.js +0 -0
  110. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/testing/__init__.py +0 -0
  111. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/testing/collisions.py +0 -0
  112. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/testing/imports.py +0 -0
  113. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tileserve/__init__.py +0 -0
  114. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tileserve/headless.py +0 -0
  115. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tileserve/jupyter_ext.py +0 -0
  116. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tileserve/layout.py +0 -0
  117. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tileserve/server.py +0 -0
  118. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tileserve/shaders.py +0 -0
  119. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tileserve/viewer.py +0 -0
  120. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tls/__init__.py +0 -0
  121. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tls/external_ca.py +0 -0
  122. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tls/hostnames.py +0 -0
  123. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tls/imports.py +0 -0
  124. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tls/local_ca.py +0 -0
  125. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tls/paths.py +0 -0
  126. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/tls/trust.py +0 -0
  127. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/utils/__init__.py +0 -0
  128. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/utils/collections.py +0 -0
  129. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/utils/gpu.py +0 -0
  130. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/utils/kwargs.py +0 -0
  131. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/utils/paths.py +0 -0
  132. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/__init__.py +0 -0
  133. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/__main__.py +0 -0
  134. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/app.py +0 -0
  135. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/assets.py +0 -0
  136. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/cli.py +0 -0
  137. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/demo.html +0 -0
  138. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/dependencies.py +0 -0
  139. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/edr_bridge.py +0 -0
  140. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/exceptions.py +0 -0
  141. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/masks.py +0 -0
  142. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/middleware.py +0 -0
  143. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/model_registry.py +0 -0
  144. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/plugins/__init__.py +0 -0
  145. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/plugins/base.py +0 -0
  146. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/plugins/registry.py +0 -0
  147. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/plugins/schema.py +0 -0
  148. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/plugins/threshold.py +0 -0
  149. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routers/__init__.py +0 -0
  150. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routers/index.py +0 -0
  151. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routers/log.py +0 -0
  152. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routers/mask.py +0 -0
  153. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routers/plugin.py +0 -0
  154. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routers/segment.py +0 -0
  155. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routers/session_routes.py +0 -0
  156. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routers/system.py +0 -0
  157. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routers/trust.py +0 -0
  158. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/routes.py +0 -0
  159. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/sample_image.py +0 -0
  160. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/schemas.py +0 -0
  161. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/segmentation.py +0 -0
  162. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/session.py +0 -0
  163. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/system.py +0 -0
  164. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/app.js +0 -0
  165. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/css/controls.css +0 -0
  166. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/css/layout.css +0 -0
  167. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/css/tools.css +0 -0
  168. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/css/viewer.css +0 -0
  169. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/hdr_cmap_prototype.html +0 -0
  170. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/hdr_cmap_uhdr.html +0 -0
  171. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/hdr_css_test.html +0 -0
  172. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/html/_attic_omnipose-panel.html +0 -0
  173. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/html/left-panel.html +0 -0
  174. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/html/sidebar.html +0 -0
  175. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/html/viewer.html +0 -0
  176. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/affinity.svg +0 -0
  177. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/arrow-back-up.svg +0 -0
  178. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/arrow-forward-up.svg +0 -0
  179. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/dbscan-nested-arcs.svg +0 -0
  180. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/download.svg +0 -0
  181. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/droplet-half-2.svg +0 -0
  182. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/eraser.svg +0 -0
  183. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/home-2.svg +0 -0
  184. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/minus.svg +0 -0
  185. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/palette.svg +0 -0
  186. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/pencil.svg +0 -0
  187. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/plus.svg +0 -0
  188. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/rotate-rectangle.svg +0 -0
  189. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/icons/topology-star.svg +0 -0
  190. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/index.html +0 -0
  191. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/brush.js +0 -0
  192. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/colormap.js +0 -0
  193. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/debug-apple-material.js +0 -0
  194. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/file-navigation.js +0 -0
  195. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/hdr_image_layer.js +0 -0
  196. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/hdr_ui.js +0 -0
  197. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/history.js +0 -0
  198. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/interactions.js +0 -0
  199. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/logging.js +0 -0
  200. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/mask-pipeline.js +0 -0
  201. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/painting.js +0 -0
  202. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/plugin-panel.js +0 -0
  203. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/pointer-state.js +0 -0
  204. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/state-persistence.js +0 -0
  205. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/tooltip-editor.js +0 -0
  206. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/ui-utils.js +0 -0
  207. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit/viewer/web/js/wasm_fill.c +0 -0
  208. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit.egg-info/SOURCES.txt +0 -0
  209. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit.egg-info/dependency_links.txt +0 -0
  210. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit.egg-info/entry_points.txt +0 -0
  211. {ocdkit-0.0.6 → ocdkit-0.0.7}/src/ocdkit.egg-info/top_level.txt +0 -0
  212. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/e2e/__init__.py +0 -0
  213. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/e2e/conftest.py +0 -0
  214. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/e2e/test_browser_smoke.py +0 -0
  215. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/e2e/test_pywebview_snapshot.py +0 -0
  216. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/fixtures/multichan_3c_4x4.czi +0 -0
  217. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/fixtures/tiny_8x8.czi +0 -0
  218. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_array.py +0 -0
  219. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_gpu.py +0 -0
  220. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_import_cycles.py +0 -0
  221. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_io.py +0 -0
  222. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_io_live_figure.py +0 -0
  223. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_io_pptx.py +0 -0
  224. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_measure.py +0 -0
  225. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_module_collisions.py +0 -0
  226. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_module_discovery.py +0 -0
  227. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_morphology.py +0 -0
  228. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_paths_migration.py +0 -0
  229. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_plot_color.py +0 -0
  230. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_plot_contour.py +0 -0
  231. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_plot_display.py +0 -0
  232. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_plot_export.py +0 -0
  233. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_plot_figure.py +0 -0
  234. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_plot_grid.py +0 -0
  235. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_plot_label.py +0 -0
  236. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_plot_notebook.py +0 -0
  237. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_registration.py +0 -0
  238. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_slice.py +0 -0
  239. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_spatial.py +0 -0
  240. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/test_tileserve_pick_level.py +0 -0
  241. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/viewer/__init__.py +0 -0
  242. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/viewer/test_active_plugin_cache.py +0 -0
  243. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/viewer/test_app.py +0 -0
  244. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/viewer/test_async_dispatch.py +0 -0
  245. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/viewer/test_envelope_and_middleware.py +0 -0
  246. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/viewer/test_plugin_contract.py +0 -0
  247. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/viewer/test_session_eviction.py +0 -0
  248. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/viewer/test_title_config.py +0 -0
  249. {ocdkit-0.0.6 → ocdkit-0.0.7}/tests/viewer/test_ui_mode.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ocdkit
3
- Version: 0.0.6
3
+ Version: 0.0.7
4
4
  Summary: Obsessive Coder's Dependency Toolkit — Python utilities for array manipulation, GPU dispatch, image I/O, morphology, and plotting.
5
5
  License: BSD-3-Clause
6
6
  Requires-Python: >=3.11
@@ -27,6 +27,8 @@ Requires-Dist: platformdirs
27
27
  Requires-Dist: cryptography
28
28
  Requires-Dist: lxml
29
29
  Requires-Dist: python-pptx
30
+ Requires-Dist: freetype-py
31
+ Requires-Dist: rich
30
32
  Provides-Extra: viewer
31
33
  Requires-Dist: fastapi; extra == "viewer"
32
34
  Requires-Dist: uvicorn[standard]; extra == "viewer"
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 32.58%"><title>coverage: 32.58%</title><filter id="blur"><feGaussianBlur stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#dd4343"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="315" y="150" fill-opacity=".8" filter="url(#blur)" textLength="510">coverage</text><text x="315" y="150" fill-opacity=".3" textLength="510">coverage</text></g><text x="315" y="140" textLength="510">coverage</text></g><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="865" y="150" fill-opacity=".8" filter="url(#blur)" textLength="430">32.58%</text><text x="865" y="150" fill-opacity=".3" textLength="430">32.58%</text></g><text x="865" y="140" textLength="430">32.58%</text></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="68" height="20" role="img" aria-label="tests: 423"><title>tests: 423</title><filter id="blur"><feGaussianBlur stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="68" height="20" rx="3"/></clipPath><g clip-path="url(#r)"><rect width="37" height="20" fill="#555"/><rect x="37" width="31" height="20" fill="#4b0"/><rect width="68" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="195" y="150" fill-opacity=".8" filter="url(#blur)" textLength="270">tests</text><text x="195" y="150" fill-opacity=".3" textLength="270">tests</text></g><text x="195" y="140" textLength="270">tests</text></g><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="515" y="150" fill-opacity=".8" filter="url(#blur)" textLength="210">423</text><text x="515" y="150" fill-opacity=".3" textLength="210">423</text></g><text x="515" y="140" textLength="210">423</text></g></g></svg>
@@ -39,6 +39,10 @@ dependencies = [
39
39
  "lxml",
40
40
  # python-pptx: figs_to_deck PPTX export (ocdkit.io.pptx)
41
41
  "python-pptx",
42
+ # freetype-py: glyph metrics for ocdkit.plot.text_metrics (measure_text etc.)
43
+ "freetype-py",
44
+ # rich: used by ocdkit.logging.handler (lazy import) for the rich logging handler
45
+ "rich",
42
46
  ]
43
47
 
44
48
  [project.optional-dependencies]
@@ -33,6 +33,8 @@ _FONT_CANDIDATES_REGULAR = [
33
33
  "/System/Library/Fonts/Supplemental/Arial.ttf",
34
34
  "/Library/Fonts/Arial.ttf",
35
35
  "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
36
+ r"C:\Windows\Fonts\arial.ttf",
37
+ r"C:\Windows\Fonts\segoeui.ttf",
36
38
  ]
37
39
  _FONT_CANDIDATES_BOLD = [
38
40
  # Helvetica.ttc face 1 = Bold; freetype defaults to face 0 (Regular).
@@ -40,11 +42,15 @@ _FONT_CANDIDATES_BOLD = [
40
42
  "/System/Library/Fonts/Supplemental/Arial Bold.ttf",
41
43
  "/Library/Fonts/Arial Bold.ttf",
42
44
  "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf",
45
+ r"C:\Windows\Fonts\arialbd.ttf",
46
+ r"C:\Windows\Fonts\seguisb.ttf",
43
47
  ]
44
48
  _FONT_CANDIDATES_MONO = [
45
49
  "/System/Library/Fonts/Menlo.ttc",
46
50
  "/System/Library/Fonts/SFNSMono.ttf",
47
51
  "/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf",
52
+ r"C:\Windows\Fonts\consola.ttf",
53
+ r"C:\Windows\Fonts\cour.ttf",
48
54
  ]
49
55
 
50
56
 
@@ -69,7 +75,16 @@ def load_face(weight: str = 'regular') -> freetype.Face:
69
75
  for p in paths:
70
76
  if os.path.exists(p):
71
77
  return freetype.Face(p)
72
- raise SystemExit("no usable system font found for freetype")
78
+ # Last resort: matplotlib always bundles DejaVu Sans, so findfont never
79
+ # fails — guarantees a usable face on any platform whose system-font paths
80
+ # aren't in the list above (e.g. headless Linux, or a Windows CI runner).
81
+ try:
82
+ import matplotlib.font_manager as _fm
83
+ family = 'monospace' if weight == 'mono' else 'sans-serif'
84
+ mpl_weight = 'bold' if weight == 'bold' else 'normal'
85
+ return freetype.Face(_fm.findfont(_fm.FontProperties(family=family, weight=mpl_weight)))
86
+ except Exception as e:
87
+ raise SystemExit(f"no usable system font found for freetype: {e}")
73
88
 
74
89
 
75
90
  def measure_text(text: str, size_px: float,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ocdkit
3
- Version: 0.0.6
3
+ Version: 0.0.7
4
4
  Summary: Obsessive Coder's Dependency Toolkit — Python utilities for array manipulation, GPU dispatch, image I/O, morphology, and plotting.
5
5
  License: BSD-3-Clause
6
6
  Requires-Python: >=3.11
@@ -27,6 +27,8 @@ Requires-Dist: platformdirs
27
27
  Requires-Dist: cryptography
28
28
  Requires-Dist: lxml
29
29
  Requires-Dist: python-pptx
30
+ Requires-Dist: freetype-py
31
+ Requires-Dist: rich
30
32
  Provides-Extra: viewer
31
33
  Requires-Dist: fastapi; extra == "viewer"
32
34
  Requires-Dist: uvicorn[standard]; extra == "viewer"
@@ -19,6 +19,8 @@ platformdirs
19
19
  cryptography
20
20
  lxml
21
21
  python-pptx
22
+ freetype-py
23
+ rich
22
24
 
23
25
  [desktop]
24
26
  pywebview
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 34.16%"><title>coverage: 34.16%</title><filter id="blur"><feGaussianBlur in="SourceGraphic" stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#dd4343"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".80" filter="url(#blur)" transform="scale(.1)" textLength="510">coverage</text><text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text><text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text><text aria-hidden="true" x="865" y="150" fill="#010101" fill-opacity=".80" filter="url(#blur)" transform="scale(.1)" textLength="430">34.16%</text><text aria-hidden="true" x="865" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">34.16%</text><text x="865" y="140" transform="scale(.1)" fill="#fff" textLength="430">34.16%</text></g></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="68" height="20" role="img" aria-label="tests: 408"><title>tests: 408</title><filter id="blur"><feGaussianBlur in="SourceGraphic" stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="68" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="37" height="20" fill="#555"/><rect x="37" width="31" height="20" fill="#4b0"/><rect width="68" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="195" y="150" fill="#010101" fill-opacity=".80" filter="url(#blur)" transform="scale(.1)" textLength="270">tests</text><text aria-hidden="true" x="195" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="270">tests</text><text x="195" y="140" transform="scale(.1)" fill="#fff" textLength="270">tests</text><text aria-hidden="true" x="515" y="150" fill="#010101" fill-opacity=".80" filter="url(#blur)" transform="scale(.1)" textLength="210">408</text><text aria-hidden="true" x="515" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="210">408</text><text x="515" y="140" transform="scale(.1)" fill="#fff" textLength="210">408</text></g></svg>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes