bluer-objects 6.305.1__tar.gz → 6.309.1__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.

Potentially problematic release.


This version of bluer-objects might be problematic. Click here for more details.

Files changed (199) hide show
  1. {bluer_objects-6.305.1/bluer_objects.egg-info → bluer_objects-6.309.1}/PKG-INFO +2 -2
  2. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/README.md +1 -1
  3. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/__init__.py +1 -1
  4. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/graphics/gif.py +5 -6
  5. bluer_objects-6.309.1/bluer_objects/logger/stitch.py +107 -0
  6. bluer_objects-6.309.1/bluer_objects/tests/test_logger_stitch_images.py +47 -0
  7. {bluer_objects-6.305.1 → bluer_objects-6.309.1/bluer_objects.egg-info}/PKG-INFO +2 -2
  8. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects.egg-info/SOURCES.txt +2 -0
  9. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/LICENSE +0 -0
  10. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/MANIFEST.in +0 -0
  11. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/abcli.sh +0 -0
  12. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/actions.sh +0 -0
  13. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/aka.sh +0 -0
  14. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/alias.sh +0 -0
  15. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/assets/cd.sh +0 -0
  16. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/assets/mv.sh +0 -0
  17. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/assets/publish.sh +0 -0
  18. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/assets.sh +0 -0
  19. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/bluer_objects.sh +0 -0
  20. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/clone.sh +0 -0
  21. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/create_test_asset.sh +0 -0
  22. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/download.sh +0 -0
  23. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/file.sh +0 -0
  24. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/gif.sh +0 -0
  25. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/host.sh +0 -0
  26. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/ls.sh +0 -0
  27. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/metadata/get.sh +0 -0
  28. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/metadata/post.sh +0 -0
  29. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/metadata.sh +0 -0
  30. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/browse.sh +0 -0
  31. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/cache.sh +0 -0
  32. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/deploy.sh +0 -0
  33. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/list_registered_models.sh +0 -0
  34. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/lock/lock.sh +0 -0
  35. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/lock/unlock.sh +0 -0
  36. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/lock.sh +0 -0
  37. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/log_artifacts.sh +0 -0
  38. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/log_run.sh +0 -0
  39. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/run.sh +0 -0
  40. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/tags/clone.sh +0 -0
  41. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/tags/get.sh +0 -0
  42. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/tags/search.sh +0 -0
  43. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/tags/set.sh +0 -0
  44. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/tags.sh +0 -0
  45. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/test.sh +0 -0
  46. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow/transition.sh +0 -0
  47. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/mlflow.sh +0 -0
  48. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/object.sh +0 -0
  49. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/select.sh +0 -0
  50. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/storage/clear.sh +0 -0
  51. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/storage/status.sh +0 -0
  52. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/storage.sh +0 -0
  53. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/README.sh +0 -0
  54. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/clone.sh +0 -0
  55. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/create_test_asset.sh +0 -0
  56. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/gif.sh +0 -0
  57. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/help.sh +0 -0
  58. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/host.sh +0 -0
  59. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/ls.sh +0 -0
  60. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/metadata.sh +0 -0
  61. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/mlflow_cache.sh +0 -0
  62. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/mlflow_lock.sh +0 -0
  63. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/mlflow_logging.sh +0 -0
  64. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/mlflow_tags.sh +0 -0
  65. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/mlflow_test.sh +0 -0
  66. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/open.sh +0 -0
  67. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/open_gif_open.sh +0 -0
  68. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/storage_public_upload.sh +0 -0
  69. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/storage_upload_download.sh +0 -0
  70. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/version.sh +0 -0
  71. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/web_is_accessible.sh +0 -0
  72. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/tests/web_where_am_ai.sh +0 -0
  73. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/upload.sh +0 -0
  74. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/url.sh +0 -0
  75. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/web/is_accessible.sh +0 -0
  76. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/.abcli/web/where_am_i.sh +0 -0
  77. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/README/__init__.py +0 -0
  78. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/README/consts.py +0 -0
  79. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/README/functions.py +0 -0
  80. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/README/items.py +0 -0
  81. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/README/utils.py +0 -0
  82. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/__main__.py +0 -0
  83. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/assets/__init__.py +0 -0
  84. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/assets/__main__.py +0 -0
  85. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/assets/functions.py +0 -0
  86. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/config.env +0 -0
  87. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/env.py +0 -0
  88. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/file/__init__.py +0 -0
  89. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/file/__main__.py +0 -0
  90. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/file/classes.py +0 -0
  91. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/file/functions.py +0 -0
  92. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/file/load.py +0 -0
  93. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/file/save.py +0 -0
  94. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/graphics/__init__.py +0 -0
  95. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/graphics/__main__.py +0 -0
  96. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/graphics/frame.py +0 -0
  97. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/graphics/screen.py +0 -0
  98. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/graphics/signature.py +0 -0
  99. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/graphics/text.py +0 -0
  100. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/__init__.py +0 -0
  101. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/__main__.py +0 -0
  102. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/assets.py +0 -0
  103. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/clone.py +0 -0
  104. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/create_test_asset.py +0 -0
  105. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/download.py +0 -0
  106. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/functions.py +0 -0
  107. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/gif.py +0 -0
  108. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/host.py +0 -0
  109. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/ls.py +0 -0
  110. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/metadata.py +0 -0
  111. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/mlflow/__init__.py +0 -0
  112. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/mlflow/cache.py +0 -0
  113. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/mlflow/lock.py +0 -0
  114. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/mlflow/tags.py +0 -0
  115. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/upload.py +0 -0
  116. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/help/web.py +0 -0
  117. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/host/__init__.py +0 -0
  118. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/host/__main__.py +0 -0
  119. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/host/functions.py +0 -0
  120. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/logger/__init__.py +0 -0
  121. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/logger/image.py +0 -0
  122. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/logger/matrix.py +0 -0
  123. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/markdown.py +0 -0
  124. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/metadata/__init__.py +0 -0
  125. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/metadata/__main__.py +0 -0
  126. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/metadata/enums.py +0 -0
  127. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/metadata/flatten.py +0 -0
  128. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/metadata/get.py +0 -0
  129. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/metadata/post.py +0 -0
  130. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/__init__.py +0 -0
  131. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/__main__.py +0 -0
  132. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/cache.py +0 -0
  133. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/lock/__init__.py +0 -0
  134. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/lock/__main__.py +0 -0
  135. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/lock/functions.py +0 -0
  136. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/logging.py +0 -0
  137. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/models.py +0 -0
  138. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/objects.py +0 -0
  139. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/runs.py +0 -0
  140. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/tags.py +0 -0
  141. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/mlflow/testing.py +0 -0
  142. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/objects.py +0 -0
  143. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/path.py +0 -0
  144. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/sample.env +0 -0
  145. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/storage/WebDAV.py +0 -0
  146. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/storage/WebDAVrequest.py +0 -0
  147. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/storage/WebDAVzip.py +0 -0
  148. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/storage/__init__.py +0 -0
  149. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/storage/__main__.py +0 -0
  150. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/storage/base.py +0 -0
  151. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/storage/policies.py +0 -0
  152. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/storage/s3.py +0 -0
  153. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/testing/__init__.py +0 -0
  154. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/testing/__main__.py +0 -0
  155. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/testing/functions.py +0 -0
  156. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/__init__.py +0 -0
  157. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_README.py +0 -0
  158. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_README_consts.py +0 -0
  159. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_README_items.py +0 -0
  160. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_env.py +0 -0
  161. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_file_download.py +0 -0
  162. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_file_load_save.py +0 -0
  163. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_file_load_save_text.py +0 -0
  164. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_fullname.py +0 -0
  165. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_graphics.py +0 -0
  166. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_graphics_frame.py +0 -0
  167. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_graphics_gif.py +0 -0
  168. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_graphics_screen.py +0 -0
  169. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_graphics_signature.py +0 -0
  170. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_graphics_text.py +0 -0
  171. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_log_image_grid.py +0 -0
  172. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_logger.py +0 -0
  173. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_logger_matrix.py +0 -0
  174. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_markdown.py +0 -0
  175. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_metadata.py +0 -0
  176. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_metadata_flatten.py +0 -0
  177. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_mlflow.py +0 -0
  178. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_mlflow_lock.py +0 -0
  179. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_objects.py +0 -0
  180. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_path.py +0 -0
  181. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_storage.py +0 -0
  182. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_storage_base.py +0 -0
  183. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_storage_s3.py +0 -0
  184. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_storage_webdav_request.py +0 -0
  185. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_storage_webdav_zip.py +0 -0
  186. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_testing.py +0 -0
  187. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_version.py +0 -0
  188. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/tests/test_web_is_accessible.py +0 -0
  189. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/urls.py +0 -0
  190. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/web/__init__.py +0 -0
  191. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/web/__main__.py +0 -0
  192. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects/web/functions.py +0 -0
  193. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects.egg-info/dependency_links.txt +0 -0
  194. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects.egg-info/requires.txt +0 -0
  195. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/bluer_objects.egg-info/top_level.txt +0 -0
  196. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/pyproject.toml +0 -0
  197. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/requirements.txt +0 -0
  198. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/setup.cfg +0 -0
  199. {bluer_objects-6.305.1 → bluer_objects-6.309.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.305.1
3
+ Version: 6.309.1
4
4
  Summary: 🌀 Object management in Bash.
5
5
  Home-page: https://github.com/kamangir/bluer-objects
6
6
  Author: Arash Abadpour (Kamangir)
@@ -65,6 +65,6 @@ pip install bluer-objects
65
65
 
66
66
  [![pylint](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-objects.svg)](https://pypi.org/project/bluer-objects/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/bluer-objects)](https://pypistats.org/packages/bluer-objects)
67
67
 
68
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.305.1`](https://github.com/kamangir/bluer-objects).
68
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.309.1`](https://github.com/kamangir/bluer-objects).
69
69
 
70
70
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -31,4 +31,4 @@ pip install bluer-objects
31
31
 
32
32
  [![pylint](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-objects.svg)](https://pypi.org/project/bluer-objects/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/bluer-objects)](https://pypistats.org/packages/bluer-objects)
33
33
 
34
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.305.1`](https://github.com/kamangir/bluer-objects).
34
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.309.1`](https://github.com/kamangir/bluer-objects).
@@ -4,7 +4,7 @@ ICON = "🌀"
4
4
 
5
5
  DESCRIPTION = f"{ICON} Object management in Bash."
6
6
 
7
- VERSION = "6.305.1"
7
+ VERSION = "6.309.1"
8
8
 
9
9
  REPO_NAME = "bluer-objects"
10
10
 
@@ -30,13 +30,12 @@ def generate_animated_gif(
30
30
  max_height = 0
31
31
  frames = []
32
32
  for filename in tqdm(list_of_images):
33
- image = Image.open(filename)
33
+ with Image.open(filename) as image:
34
+ frames.append(image.copy())
34
35
 
35
- frames.append(image)
36
-
37
- width, height = image.size
38
- max_width = max(max_width, width)
39
- max_height = max(max_height, height)
36
+ width, height = image.size
37
+ max_width = max(max_width, width)
38
+ max_height = max(max_height, height)
40
39
 
41
40
  padded_frames = []
42
41
  for image in frames:
@@ -0,0 +1,107 @@
1
+ from typing import List
2
+ import numpy as np
3
+
4
+ from blueness import module
5
+ from bluer_options import string
6
+
7
+ from bluer_objects import NAME
8
+ from bluer_objects.logger import logger
9
+
10
+ NAME = module.name(__file__, NAME)
11
+
12
+
13
+ def stitch_images(
14
+ list_of_images: List[np.ndarray],
15
+ cols: int = -1,
16
+ rows: int = -1,
17
+ log: bool = False,
18
+ ) -> np.ndarray:
19
+ if not list_of_images:
20
+ return np.zeros((1, 1, 3), dtype=np.uint8)
21
+
22
+ list_of_images = list_of_images.copy()
23
+
24
+ if rows == -1:
25
+ rows = int(np.floor(np.sqrt(len(list_of_images))))
26
+ cols = -1
27
+
28
+ if cols == -1:
29
+ cols = int(np.ceil(len(list_of_images) / rows))
30
+
31
+ if log:
32
+ logger.info(
33
+ "{}.stitch_images[{}x{}]({}): {}".format(
34
+ NAME,
35
+ rows,
36
+ cols,
37
+ len(list_of_images),
38
+ ", ".join(
39
+ [string.pretty_shape_of_matrix(image) for image in list_of_images]
40
+ ),
41
+ )
42
+ )
43
+
44
+ for image in list_of_images:
45
+ if len(image.shape) == 2:
46
+ image = np.stack([image, image, image], axis=2)
47
+
48
+ if rows == 1:
49
+ output = np.zeros(
50
+ (
51
+ max([image.shape[0] for image in list_of_images]),
52
+ sum([image.shape[1] for image in list_of_images]),
53
+ 3,
54
+ ),
55
+ dtype=np.uint8,
56
+ )
57
+ x: int = 0
58
+ for image in list_of_images:
59
+ x_new = x + image.shape[1]
60
+
61
+ output[
62
+ : image.shape[0],
63
+ x:x_new,
64
+ :,
65
+ ] = image
66
+
67
+ x = x_new
68
+
69
+ return output
70
+
71
+ if cols == 1:
72
+ output = np.zeros(
73
+ (
74
+ sum([image.shape[0] for image in list_of_images]),
75
+ max([image.shape[1] for image in list_of_images]),
76
+ 3,
77
+ ),
78
+ dtype=np.uint8,
79
+ )
80
+ y: int = 0
81
+ for image in list_of_images:
82
+ y_new = y + image.shape[0]
83
+
84
+ output[
85
+ y:y_new,
86
+ : image.shape[1],
87
+ :,
88
+ ] = image
89
+
90
+ y = y_new
91
+
92
+ return output
93
+
94
+ return stitch_images(
95
+ list_of_images=[
96
+ stitch_images(
97
+ list_of_images[row * cols : (row + 1) * cols],
98
+ cols=cols,
99
+ rows=1,
100
+ log=log,
101
+ )
102
+ for row in range(rows)
103
+ ],
104
+ cols=1,
105
+ rows=rows,
106
+ log=log,
107
+ )
@@ -0,0 +1,47 @@
1
+ import pytest
2
+ import numpy as np
3
+ import random
4
+
5
+ from bluer_objects.logger.stitch import stitch_images
6
+
7
+
8
+ @pytest.mark.parametrize(
9
+ ["count"],
10
+ [[count] for count in range(10)],
11
+ )
12
+ @pytest.mark.parametrize(
13
+ ["cols"],
14
+ [[cols] for cols in [-1, 1, 3]],
15
+ )
16
+ @pytest.mark.parametrize(
17
+ ["rows"],
18
+ [[rows] for rows in [-1, 1, 3]],
19
+ )
20
+ def test_logger_stitch_images(
21
+ count: int,
22
+ cols: int,
23
+ rows: int,
24
+ ):
25
+ rng = np.random.default_rng()
26
+
27
+ list_of_images = list_of_images = [
28
+ rng.integers(
29
+ 0,
30
+ 256,
31
+ (
32
+ random.randint(1, 512),
33
+ random.randint(1, 512),
34
+ random.choice([1, 3]),
35
+ ),
36
+ dtype=np.uint8,
37
+ )
38
+ for _ in range(count)
39
+ ]
40
+
41
+ image = stitch_images(
42
+ list_of_images,
43
+ cols=cols,
44
+ rows=rows,
45
+ log=True,
46
+ )
47
+ assert isinstance(image, np.ndarray)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bluer_objects
3
- Version: 6.305.1
3
+ Version: 6.309.1
4
4
  Summary: 🌀 Object management in Bash.
5
5
  Home-page: https://github.com/kamangir/bluer-objects
6
6
  Author: Arash Abadpour (Kamangir)
@@ -65,6 +65,6 @@ pip install bluer-objects
65
65
 
66
66
  [![pylint](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/bluer-objects/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/bluer-objects.svg)](https://pypi.org/project/bluer-objects/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/bluer-objects)](https://pypistats.org/packages/bluer-objects)
67
67
 
68
- built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.305.1`](https://github.com/kamangir/bluer-objects).
68
+ built by 🌀 [`bluer README`](https://github.com/kamangir/bluer-objects/tree/main/bluer_objects/README), based on 🌀 [`bluer_objects-6.309.1`](https://github.com/kamangir/bluer-objects).
69
69
 
70
70
  built by 🌀 [`blueness-3.118.1`](https://github.com/kamangir/blueness).
@@ -128,6 +128,7 @@ bluer_objects/host/functions.py
128
128
  bluer_objects/logger/__init__.py
129
129
  bluer_objects/logger/image.py
130
130
  bluer_objects/logger/matrix.py
131
+ bluer_objects/logger/stitch.py
131
132
  bluer_objects/metadata/__init__.py
132
133
  bluer_objects/metadata/__main__.py
133
134
  bluer_objects/metadata/enums.py
@@ -175,6 +176,7 @@ bluer_objects/tests/test_graphics_text.py
175
176
  bluer_objects/tests/test_log_image_grid.py
176
177
  bluer_objects/tests/test_logger.py
177
178
  bluer_objects/tests/test_logger_matrix.py
179
+ bluer_objects/tests/test_logger_stitch_images.py
178
180
  bluer_objects/tests/test_markdown.py
179
181
  bluer_objects/tests/test_metadata.py
180
182
  bluer_objects/tests/test_metadata_flatten.py
File without changes