mergechannels 0.3.0__tar.gz → 0.4.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.

Potentially problematic release.


This version of mergechannels might be problematic. Click here for more details.

Files changed (364) hide show
  1. {mergechannels-0.3.0 → mergechannels-0.4.0}/Cargo.lock +2 -2
  2. {mergechannels-0.3.0 → mergechannels-0.4.0}/Cargo.toml +1 -1
  3. {mergechannels-0.3.0 → mergechannels-0.4.0}/PKG-INFO +6 -5
  4. {mergechannels-0.3.0 → mergechannels-0.4.0}/README.md +5 -4
  5. {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/__init__.py +2 -1
  6. {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/__init__.pyi +13 -4
  7. mergechannels-0.4.0/python/mergechannels/_internal.py +59 -0
  8. {mergechannels-0.3.0 → mergechannels-0.4.0}/src/blend.rs +0 -23
  9. {mergechannels-0.3.0 → mergechannels-0.4.0}/src/colorize.rs +2 -1
  10. mergechannels-0.4.0/src/errors.rs +51 -0
  11. {mergechannels-0.3.0 → mergechannels-0.4.0}/src/interface.rs +7 -34
  12. {mergechannels-0.3.0 → mergechannels-0.4.0}/src/lib.rs +1 -0
  13. mergechannels-0.3.0/python/mergechannels/_internal.py +0 -65
  14. {mergechannels-0.3.0 → mergechannels-0.4.0}/.gitattributes +0 -0
  15. {mergechannels-0.3.0 → mergechannels-0.4.0}/.github/workflows/CI.yml +0 -0
  16. {mergechannels-0.3.0 → mergechannels-0.4.0}/.gitignore +0 -0
  17. {mergechannels-0.3.0 → mergechannels-0.4.0}/.pre-commit-config.yaml +0 -0
  18. {mergechannels-0.3.0 → mergechannels-0.4.0}/LICENSE +0 -0
  19. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/16_colors.lut +0 -0
  20. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/5_ramps.lut +0 -0
  21. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/6_shades.lut +0 -0
  22. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Cyan Hot.lut +0 -0
  23. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Green Fire Blue.lut +0 -0
  24. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/HiLo.lut +0 -0
  25. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/ICA.lut +0 -0
  26. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/ICA2.lut +0 -0
  27. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/ICA3.lut +0 -0
  28. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Magenta Hot.lut +0 -0
  29. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Orange Hot.lut +0 -0
  30. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Rainbow RGB.lut +0 -0
  31. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Red Hot.lut +0 -0
  32. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Thermal.lut +0 -0
  33. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/Yellow Hot.lut +0 -0
  34. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/blue_orange_icb.lut +0 -0
  35. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/brgbcmyw.lut +0 -0
  36. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/cool.lut +0 -0
  37. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/edges.lut +0 -0
  38. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/gem.lut +0 -0
  39. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/glasbey.lut +0 -0
  40. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/glasbey_inverted.lut +0 -0
  41. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/glasbey_on_dark.lut +0 -0
  42. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/glow.lut +0 -0
  43. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/mpl-inferno.lut +0 -0
  44. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/mpl-magma.lut +0 -0
  45. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/mpl-plasma.lut +0 -0
  46. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/mpl-viridis.lut +0 -0
  47. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/phase.lut +0 -0
  48. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/physics.lut +0 -0
  49. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/royal.lut +0 -0
  50. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/sepia.lut +0 -0
  51. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/smart.lut +0 -0
  52. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/thal.lut +0 -0
  53. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/thallium.lut +0 -0
  54. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/builtin_luts/unionjack.lut +0 -0
  55. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/3color-BMR.lut +0 -0
  56. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/3color-CGY.lut +0 -0
  57. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/3color-RMB.lut +0 -0
  58. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/3color-YGC.lut +0 -0
  59. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/BOP blue.lut +0 -0
  60. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/BOP orange.lut +0 -0
  61. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/BOP purple.lut +0 -0
  62. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Blue.lut +0 -0
  63. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Bordeaux.lut +0 -0
  64. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Cyan.lut +0 -0
  65. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Forest.lut +0 -0
  66. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Green.lut +0 -0
  67. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Magenta.lut +0 -0
  68. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Purple.lut +0 -0
  69. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Red.lut +0 -0
  70. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/I Yellow.lut +0 -0
  71. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/LICENSE +0 -0
  72. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/NOTICE +0 -0
  73. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/OPF fresh.lut +0 -0
  74. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/OPF orange.lut +0 -0
  75. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/OPF purple.lut +0 -0
  76. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/christ_luts/Turbo.lut +0 -0
  77. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/16_colors.txt +0 -0
  78. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3-3-2 RGB.txt +0 -0
  79. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3color-BMR.txt +0 -0
  80. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3color-CGY.txt +0 -0
  81. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3color-RMB.txt +0 -0
  82. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/3color-YGC.txt +0 -0
  83. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/5_ramps.txt +0 -0
  84. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/6_shades.txt +0 -0
  85. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/BOP blue.txt +0 -0
  86. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/BOP orange.txt +0 -0
  87. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/BOP purple.txt +0 -0
  88. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Blue.txt +0 -0
  89. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Cherry.txt +0 -0
  90. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Cyan.txt +0 -0
  91. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Green.txt +0 -0
  92. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Black.txt +0 -0
  93. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Cherry.txt +0 -0
  94. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Cyan.txt +0 -0
  95. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Green.txt +0 -0
  96. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Mint.txt +0 -0
  97. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Purple.txt +0 -0
  98. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Ink Yellow.txt +0 -0
  99. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Mint.txt +0 -0
  100. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Purple.txt +0 -0
  101. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Circus Yellow.txt +0 -0
  102. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Cyan Hot.txt +0 -0
  103. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Cyan.txt +0 -0
  104. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Cherry.txt +0 -0
  105. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Cyan.txt +0 -0
  106. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Green.txt +0 -0
  107. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Cherry.txt +0 -0
  108. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Cyan.txt +0 -0
  109. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Green.txt +0 -0
  110. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Mint.txt +0 -0
  111. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Purple.txt +0 -0
  112. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Intense Yellow.txt +0 -0
  113. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Mint.txt +0 -0
  114. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Purple.txt +0 -0
  115. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Duo Yellow.txt +0 -0
  116. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Fire.txt +0 -0
  117. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.25 inverted.txt +0 -0
  118. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.25.txt +0 -0
  119. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.50 inverted.txt +0 -0
  120. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.50.txt +0 -0
  121. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.75 inverted.txt +0 -0
  122. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=0.75.txt +0 -0
  123. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.00 inverted.txt +0 -0
  124. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.25 inverted.txt +0 -0
  125. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.25.txt +0 -0
  126. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.50 inverted.txt +0 -0
  127. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.50.txt +0 -0
  128. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.75 inverted.txt +0 -0
  129. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=1.75.txt +0 -0
  130. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=2.00 inverted.txt +0 -0
  131. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays g=2.00.txt +0 -0
  132. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Grays.txt +0 -0
  133. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Green Fire Blue.txt +0 -0
  134. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Green Hot.txt +0 -0
  135. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Green.txt +0 -0
  136. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/HiLo.txt +0 -0
  137. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Blue.txt +0 -0
  138. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Bordeaux.txt +0 -0
  139. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Cyan.txt +0 -0
  140. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Forest.txt +0 -0
  141. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Green.txt +0 -0
  142. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Magenta.txt +0 -0
  143. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Purple.txt +0 -0
  144. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Red.txt +0 -0
  145. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/I Yellow.txt +0 -0
  146. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/ICA.txt +0 -0
  147. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/ICA2.txt +0 -0
  148. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/ICA3.txt +0 -0
  149. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ice.txt +0 -0
  150. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Black.txt +0 -0
  151. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Cherry.txt +0 -0
  152. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Cyan.txt +0 -0
  153. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Green.txt +0 -0
  154. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Mint.txt +0 -0
  155. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Purple.txt +0 -0
  156. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Black.txt +0 -0
  157. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Cherry.txt +0 -0
  158. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Cyan.txt +0 -0
  159. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Green.txt +0 -0
  160. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Mint.txt +0 -0
  161. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Purple.txt +0 -0
  162. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Wash Yellow.txt +0 -0
  163. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Ink Yellow.txt +0 -0
  164. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Magenta Hot.txt +0 -0
  165. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Magenta.txt +0 -0
  166. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OIMB1.txt +0 -0
  167. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OIMB2.txt +0 -0
  168. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OIMB3.txt +0 -0
  169. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OPF fresh.txt +0 -0
  170. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OPF orange.txt +0 -0
  171. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/OPF purple.txt +0 -0
  172. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Orange Hot.txt +0 -0
  173. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Parabolic RGB.txt +0 -0
  174. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Green-Magenta.txt +0 -0
  175. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Ink Green-Magenta.txt +0 -0
  176. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Ink Mint-Cherry.txt +0 -0
  177. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Ink Yellow-Cyan.txt +0 -0
  178. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Mint-Cherry.txt +0 -0
  179. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Bold Yellow-Cyan.txt +0 -0
  180. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Green-Magenta.txt +0 -0
  181. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Ink Green-Magenta.txt +0 -0
  182. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Ink Mint-Cherry.txt +0 -0
  183. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Ink Yellow-Cyan.txt +0 -0
  184. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Mint-Cherry.txt +0 -0
  185. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Phase Yellow-Cyan.txt +0 -0
  186. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop blue inverted.txt +0 -0
  187. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop blue.txt +0 -0
  188. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop cherry inverted.txt +0 -0
  189. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop cherry.txt +0 -0
  190. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop cyan inverted.txt +0 -0
  191. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop cyan.txt +0 -0
  192. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop green inverted.txt +0 -0
  193. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop green.txt +0 -0
  194. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop lavender inverted.txt +0 -0
  195. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop magenta inverted.txt +0 -0
  196. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop magenta.txt +0 -0
  197. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop mint inverted.txt +0 -0
  198. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop mint.txt +0 -0
  199. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop purple inverted.txt +0 -0
  200. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop purple.txt +0 -0
  201. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop red inverted.txt +0 -0
  202. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop red.txt +0 -0
  203. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop yellow inverted.txt +0 -0
  204. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Pop yellow.txt +0 -0
  205. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto MYGB Blue.txt +0 -0
  206. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto MYGB Green.txt +0 -0
  207. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto MYGB Magenta.txt +0 -0
  208. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto MYGB Yellow.txt +0 -0
  209. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto RYGB Blue.txt +0 -0
  210. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto RYGB Green.txt +0 -0
  211. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto RYGB Red.txt +0 -0
  212. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Quartetto RYGB Yellow.txt +0 -0
  213. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Rainbow RGB.txt +0 -0
  214. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Red Hot.txt +0 -0
  215. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Red%Green.txt +0 -0
  216. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Red.txt +0 -0
  217. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Spectrum Parabolic Ramp.txt +0 -0
  218. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Spectrum.txt +0 -0
  219. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Thermal.txt +0 -0
  220. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Turbo.txt +0 -0
  221. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Yellow Hot.txt +0 -0
  222. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/Yellow.txt +0 -0
  223. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterBlue.txt +0 -0
  224. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterCyan.txt +0 -0
  225. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterGreen.txt +0 -0
  226. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterOrange.txt +0 -0
  227. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterRed.txt +0 -0
  228. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/betterYellow.txt +0 -0
  229. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/blue_orange_icb.txt +0 -0
  230. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/brgbcmyw.txt +0 -0
  231. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/cool.txt +0 -0
  232. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/edges.txt +0 -0
  233. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/gem.txt +0 -0
  234. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/glasbey.txt +0 -0
  235. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/glasbey_inverted.txt +0 -0
  236. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/glasbey_on_dark.txt +0 -0
  237. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/glow.txt +0 -0
  238. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/mpl-inferno.txt +0 -0
  239. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/mpl-magma.txt +0 -0
  240. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/mpl-plasma.txt +0 -0
  241. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/mpl-viridis.txt +0 -0
  242. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/phase.txt +0 -0
  243. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/physics.txt +0 -0
  244. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/royal.txt +0 -0
  245. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/sepia.txt +0 -0
  246. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/smart.txt +0 -0
  247. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/thal.txt +0 -0
  248. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/thallium.txt +0 -0
  249. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/converted/unionjack.txt +0 -0
  250. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Cherry.lut +0 -0
  251. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Cyan.lut +0 -0
  252. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Green.lut +0 -0
  253. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Black.lut +0 -0
  254. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Cherry.lut +0 -0
  255. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Cyan.lut +0 -0
  256. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Green.lut +0 -0
  257. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Mint.lut +0 -0
  258. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Purple.lut +0 -0
  259. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Ink Yellow.lut +0 -0
  260. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Mint.lut +0 -0
  261. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Purple.lut +0 -0
  262. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Circus Yellow.lut +0 -0
  263. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Cherry.lut +0 -0
  264. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Cyan.lut +0 -0
  265. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Green.lut +0 -0
  266. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Cherry.lut +0 -0
  267. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Cyan.lut +0 -0
  268. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Green.lut +0 -0
  269. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Mint.lut +0 -0
  270. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Purple.lut +0 -0
  271. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Intense Yellow.lut +0 -0
  272. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Mint.lut +0 -0
  273. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Purple.lut +0 -0
  274. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Duo Yellow.lut +0 -0
  275. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.25 inverted.lut +0 -0
  276. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.25.lut +0 -0
  277. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.50 inverted.lut +0 -0
  278. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.50.lut +0 -0
  279. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.75 inverted.lut +0 -0
  280. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=0.75.lut +0 -0
  281. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.00 inverted.lut +0 -0
  282. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.25 inverted.lut +0 -0
  283. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.25.lut +0 -0
  284. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.50 inverted.lut +0 -0
  285. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.50.lut +0 -0
  286. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.75 inverted.lut +0 -0
  287. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=1.75.lut +0 -0
  288. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=2.00 inverted.lut +0 -0
  289. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Grays g=2.00.lut +0 -0
  290. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Black.lut +0 -0
  291. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Cherry.lut +0 -0
  292. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Cyan.lut +0 -0
  293. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Green.lut +0 -0
  294. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Mint.lut +0 -0
  295. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Purple.lut +0 -0
  296. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Black.lut +0 -0
  297. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Cherry.lut +0 -0
  298. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Cyan.lut +0 -0
  299. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Green.lut +0 -0
  300. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Mint.lut +0 -0
  301. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Purple.lut +0 -0
  302. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Wash Yellow.lut +0 -0
  303. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Ink Yellow.lut +0 -0
  304. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Parabolic RGB.lut +0 -0
  305. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Green-Magenta.lut +0 -0
  306. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Ink Green-Magenta.lut +0 -0
  307. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Ink Mint-Cherry.lut +0 -0
  308. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Ink Yellow-Cyan.lut +0 -0
  309. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Mint-Cherry.lut +0 -0
  310. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Bold Yellow-Cyan.lut +0 -0
  311. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Green-Magenta.lut +0 -0
  312. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Ink Green-Magenta.lut +0 -0
  313. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Ink Mint-Cherry.lut +0 -0
  314. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Ink Yellow-Cyan.lut +0 -0
  315. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Mint-Cherry.lut +0 -0
  316. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Phase Yellow-Cyan.lut +0 -0
  317. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop blue inverted.lut +0 -0
  318. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop blue.lut +0 -0
  319. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop cherry inverted.lut +0 -0
  320. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop cherry.lut +0 -0
  321. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop cyan inverted.lut +0 -0
  322. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop cyan.lut +0 -0
  323. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop green inverted.lut +0 -0
  324. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop green.lut +0 -0
  325. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop lavender inverted.lut +0 -0
  326. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop magenta inverted.lut +0 -0
  327. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop magenta.lut +0 -0
  328. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop mint inverted.lut +0 -0
  329. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop mint.lut +0 -0
  330. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop purple inverted.lut +0 -0
  331. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop purple.lut +0 -0
  332. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop red inverted.lut +0 -0
  333. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop red.lut +0 -0
  334. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop yellow inverted.lut +0 -0
  335. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Pop yellow.lut +0 -0
  336. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto MYGB Blue.lut +0 -0
  337. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto MYGB Green.lut +0 -0
  338. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto MYGB Magenta.lut +0 -0
  339. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto MYGB Yellow.lut +0 -0
  340. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto RYGB Blue.lut +0 -0
  341. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto RYGB Green.lut +0 -0
  342. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto RYGB Red.lut +0 -0
  343. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/jdm_luts/Quartetto RYGB Yellow.lut +0 -0
  344. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/OIMB1.lut +0 -0
  345. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/OIMB2.lut +0 -0
  346. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/OIMB3.lut +0 -0
  347. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterBlue.lut +0 -0
  348. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterCyan.lut +0 -0
  349. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterGreen.lut +0 -0
  350. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterOrange.lut +0 -0
  351. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterRed.lut +0 -0
  352. {mergechannels-0.3.0 → mergechannels-0.4.0}/assets/zac_luts/betterYellow.lut +0 -0
  353. {mergechannels-0.3.0 → mergechannels-0.4.0}/pyproject.toml +0 -0
  354. {mergechannels-0.3.0 → mergechannels-0.4.0}/pytests/test_colorize.py +0 -0
  355. {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/_blending.py +0 -0
  356. {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/_luts.py +0 -0
  357. {mergechannels-0.3.0 → mergechannels-0.4.0}/python/mergechannels/py.typed +0 -0
  358. {mergechannels-0.3.0 → mergechannels-0.4.0}/ruff.toml +0 -0
  359. {mergechannels-0.3.0 → mergechannels-0.4.0}/scripts/convert_luts_to_txt.ijm +0 -0
  360. {mergechannels-0.3.0 → mergechannels-0.4.0}/scripts/populate_luts.py +0 -0
  361. {mergechannels-0.3.0 → mergechannels-0.4.0}/src/cmaps.rs +0 -0
  362. {mergechannels-0.3.0 → mergechannels-0.4.0}/src/normalize.rs +0 -0
  363. {mergechannels-0.3.0 → mergechannels-0.4.0}/tox.ini +0 -0
  364. {mergechannels-0.3.0 → mergechannels-0.4.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  # This file is automatically @generated by Cargo.
2
2
  # It is not intended for manual editing.
3
- version = 4
3
+ version = 3
4
4
 
5
5
  [[package]]
6
6
  name = "autocfg"
@@ -59,7 +59,7 @@ dependencies = [
59
59
 
60
60
  [[package]]
61
61
  name = "mergechannels"
62
- version = "0.3.0"
62
+ version = "0.4.0"
63
63
  dependencies = [
64
64
  "lazy_static",
65
65
  "ndarray",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "mergechannels"
3
- version = "0.3.0"
3
+ version = "0.4.0"
4
4
  edition = "2021"
5
5
 
6
6
  # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mergechannels
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -50,6 +50,7 @@ pip install git+https://github.com/zacswider/mergechannels.git
50
50
 
51
51
  ```python
52
52
  from skimage import data
53
+ import matplotlib.pyplot as plt
53
54
  import mergechannels as mc
54
55
 
55
56
  img = data.camera()
@@ -116,10 +117,10 @@ b.imshow(
116
117
  channels,
117
118
  colormaps,
118
119
  blending='min',
119
- saturation_limits=(
120
- 0.01, # bottom 1% of pixels set to black point
121
- 0.97, # top 3% of pixels set to white point
122
- ),
120
+ percentiles=[(
121
+ 1, # bottom 1% of pixels set to black point
122
+ 97, # top 3% of pixels set to white point
123
+ )]*len(channels),
123
124
  ),
124
125
  )
125
126
  fig.tight_layout()
@@ -28,6 +28,7 @@ pip install git+https://github.com/zacswider/mergechannels.git
28
28
 
29
29
  ```python
30
30
  from skimage import data
31
+ import matplotlib.pyplot as plt
31
32
  import mergechannels as mc
32
33
 
33
34
  img = data.camera()
@@ -94,10 +95,10 @@ b.imshow(
94
95
  channels,
95
96
  colormaps,
96
97
  blending='min',
97
- saturation_limits=(
98
- 0.01, # bottom 1% of pixels set to black point
99
- 0.97, # top 3% of pixels set to white point
100
- ),
98
+ percentiles=[(
99
+ 1, # bottom 1% of pixels set to black point
100
+ 97, # top 3% of pixels set to white point
101
+ )]*len(channels),
101
102
  ),
102
103
  )
103
104
  fig.tight_layout()
@@ -3,11 +3,12 @@ from .mergechannels import ( # type: ignore
3
3
  dispatch_single_channel,
4
4
  dispatch_multi_channel,
5
5
  )
6
- from ._internal import merge
6
+ from ._internal import merge, apply_color_map
7
7
 
8
8
 
9
9
  __all__ = [
10
10
  'dispatch_single_channel',
11
11
  'dispatch_multi_channel',
12
12
  'merge',
13
+ 'apply_color_map',
13
14
  ]
@@ -6,11 +6,20 @@ from python.mergechannels._blending import BLENDING_OPTIONS
6
6
  from python.mergechannels._luts import COLORMAPS
7
7
 
8
8
 
9
+ def apply_color_map(
10
+ arr: np.ndarray,
11
+ color: COLORMAPS,
12
+ percentiles: tuple[float, float] | None = None,
13
+ saturation_limits: tuple[float, float] | None = None,
14
+ ) -> np.ndarray:
15
+ ...
16
+
9
17
  def merge(
10
- arrs: np.ndarray | Sequence[np.ndarray],
11
- colors: Sequence[COLORMAPS] = (),
12
- blending: Literal[BLENDING_OPTIONS] = 'max',
13
- saturation_limits: tuple[float, float] = (0.2, 99.8),
18
+ arrs: Sequence[np.ndarray],
19
+ colors: Sequence[COLORMAPS],
20
+ blending: BLENDING_OPTIONS = 'max',
21
+ percentiles: tuple[float, float] | Sequence[tuple[float, float]] | None = None,
22
+ saturation_limits: tuple[float, float] | Sequence[tuple[float, float]] | None = None,
14
23
  ) -> np.ndarray:
15
24
  ...
16
25
 
@@ -0,0 +1,59 @@
1
+ from typing import (
2
+ Sequence,
3
+ Union,
4
+ )
5
+
6
+ import numpy as np
7
+
8
+ from mergechannels import (
9
+ dispatch_single_channel,
10
+ dispatch_multi_channel,
11
+ )
12
+ from ._luts import COLORMAPS
13
+ from ._blending import BLENDING_OPTIONS
14
+
15
+ def apply_color_map(
16
+ arr: np.ndarray,
17
+ color: COLORMAPS,
18
+ percentiles: Union[tuple[float, float], None] = None,
19
+ saturation_limits: Union[tuple[float, float], None] = None,
20
+ ) -> np.ndarray:
21
+ '''
22
+ apply a color map to an array
23
+ '''
24
+ if saturation_limits is None:
25
+ if percentiles is None:
26
+ percentiles = (1.1, 99.9)
27
+ low, high = np.percentile(arr, percentiles)
28
+ saturation_limits = (low, high)
29
+
30
+ return dispatch_single_channel(
31
+ array_reference=arr,
32
+ cmap_name=color,
33
+ limits=saturation_limits,
34
+ )
35
+
36
+
37
+ def merge(
38
+ arrs: Sequence[np.ndarray],
39
+ colors: Sequence[COLORMAPS],
40
+ blending: BLENDING_OPTIONS = 'max',
41
+ percentiles: Union[Sequence[tuple[float, float]], None] = None,
42
+ saturation_limits: Union[Sequence[tuple[float, float]], None] = None,
43
+ ) -> np.ndarray:
44
+ '''
45
+ apply cmaps to arrays and blend the colors
46
+ '''
47
+ if saturation_limits is None:
48
+ if percentiles is None:
49
+ percentiles = [(1.1, 99.9)] * len(arrs)
50
+ saturation_limits = tuple(
51
+ np.percentile(arr, ch_percentiles)
52
+ for arr, ch_percentiles in zip(arrs, percentiles) # type: ignore
53
+ )
54
+ return dispatch_multi_channel(
55
+ array_references=arrs,
56
+ cmap_names=colors,
57
+ blending=blending,
58
+ limits=saturation_limits, # type: ignore
59
+ )
@@ -1,32 +1,9 @@
1
1
  use smallvec::SmallVec;
2
- use std::error::Error;
3
- use std::fmt;
4
2
 
5
3
  pub const MAX_N_CH: usize = 5;
6
4
 
7
5
  pub type BlendFn = fn(&SmallVec<[[u8; 3]; 5]>) -> [u8; 3];
8
6
 
9
- #[derive(Debug)]
10
- pub enum MergeError {
11
- InvalidBlendingMode(String),
12
- }
13
-
14
- impl fmt::Display for MergeError {
15
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16
- match self {
17
- MergeError::InvalidBlendingMode(mode) => {
18
- write!(
19
- f,
20
- "Invalid blending mode: `{}`. Valid modes are 'max', 'sum', 'min', and 'mean'.",
21
- mode
22
- )
23
- }
24
- }
25
- }
26
- }
27
-
28
- impl Error for MergeError {}
29
-
30
7
  pub fn max_blending(px_vals: &SmallVec<[[u8; 3]; 5]>) -> [u8; 3] {
31
8
  let mut r: u8 = 0;
32
9
  let mut g: u8 = 0;
@@ -1,4 +1,5 @@
1
- use crate::blend::{self, MergeError};
1
+ use crate::blend::{self};
2
+ use crate::errors::MergeError;
2
3
  use numpy::ndarray::{Array, Array3, Array4, ArrayView2, ArrayView3};
3
4
  use smallvec::SmallVec;
4
5
 
@@ -0,0 +1,51 @@
1
+ use pyo3::exceptions::PyValueError;
2
+ use pyo3::prelude::*;
3
+ use std::error::Error;
4
+
5
+ #[derive(Debug)]
6
+ pub enum DispatchError {
7
+ UnsupportedDataType(String),
8
+ UnsupportedNumberOfDimensions(usize),
9
+ }
10
+
11
+ impl std::fmt::Display for DispatchError {
12
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13
+ match self {
14
+ DispatchError::UnsupportedDataType(dtype) => {
15
+ write!(f, "Received unsupported dtype: {}", dtype)
16
+ }
17
+ DispatchError::UnsupportedNumberOfDimensions(ndim) => {
18
+ write!(f, "Received unsupported number of dimensions: {}", ndim)
19
+ }
20
+ }
21
+ }
22
+ }
23
+
24
+ impl std::error::Error for DispatchError {}
25
+
26
+ impl From<DispatchError> for PyErr {
27
+ fn from(err: DispatchError) -> Self {
28
+ PyValueError::new_err(err.to_string())
29
+ }
30
+ }
31
+
32
+ #[derive(Debug)]
33
+ pub enum MergeError {
34
+ InvalidBlendingMode(String),
35
+ }
36
+
37
+ impl std::fmt::Display for MergeError {
38
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
39
+ match self {
40
+ MergeError::InvalidBlendingMode(mode) => {
41
+ write!(
42
+ f,
43
+ "Invalid blending mode: `{}`. Valid modes are 'max', 'sum', 'min', and 'mean'.",
44
+ mode
45
+ )
46
+ }
47
+ }
48
+ }
49
+ }
50
+
51
+ impl Error for MergeError {}
@@ -1,43 +1,16 @@
1
1
  use crate::cmaps;
2
2
  use crate::colorize;
3
+ use crate::errors;
3
4
  use ndarray::ArrayView2;
4
5
  use ndarray::ArrayView3;
5
6
  use numpy::{
6
7
  IntoPyArray, PyArrayDyn, PyReadonlyArray2, PyReadonlyArray3, PyUntypedArray,
7
8
  PyUntypedArrayMethods,
8
9
  };
9
- use pyo3::exceptions::PyValueError;
10
10
  use pyo3::prelude::*;
11
11
  use pyo3::types::PyAny;
12
12
  use pyo3::{Bound, Python};
13
13
 
14
- #[derive(Debug)]
15
- pub enum DispatchError {
16
- UnsupportedDataType(String),
17
- UnsupportedNumberOfDimensions(usize),
18
- }
19
-
20
- impl std::fmt::Display for DispatchError {
21
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
22
- match self {
23
- DispatchError::UnsupportedDataType(dtype) => {
24
- write!(f, "Received unsupported dtype: {}", dtype)
25
- }
26
- DispatchError::UnsupportedNumberOfDimensions(ndim) => {
27
- write!(f, "Received unsupported number of dimensions: {}", ndim)
28
- }
29
- }
30
- }
31
- }
32
-
33
- impl std::error::Error for DispatchError {}
34
-
35
- impl From<DispatchError> for PyErr {
36
- fn from(err: DispatchError) -> Self {
37
- PyValueError::new_err(err.to_string())
38
- }
39
- }
40
-
41
14
  #[pyfunction]
42
15
  #[pyo3(name = "dispatch_single_channel")]
43
16
  pub fn dispatch_single_channel_py<'py>(
@@ -65,7 +38,7 @@ pub fn dispatch_single_channel_py<'py>(
65
38
  let rgb = colorize::colorize_stack_8bit(arr, cmap, limits);
66
39
  Ok(rgb.into_dyn().into_pyarray(py))
67
40
  }
68
- _ => Err(DispatchError::UnsupportedNumberOfDimensions(ndim).into()),
41
+ _ => Err(errors::DispatchError::UnsupportedNumberOfDimensions(ndim).into()),
69
42
  },
70
43
  "uint16" => match ndim {
71
44
  2 => {
@@ -82,9 +55,9 @@ pub fn dispatch_single_channel_py<'py>(
82
55
  let rgb = colorize::colorize_stack_16bit(arr, cmap, limits);
83
56
  Ok(rgb.into_dyn().into_pyarray(py))
84
57
  }
85
- _ => Err(DispatchError::UnsupportedNumberOfDimensions(ndim).into()),
58
+ _ => Err(errors::DispatchError::UnsupportedNumberOfDimensions(ndim).into()),
86
59
  },
87
- _ => Err(DispatchError::UnsupportedDataType(dtype).into()),
60
+ _ => Err(errors::DispatchError::UnsupportedDataType(dtype).into()),
88
61
  }
89
62
  }
90
63
 
@@ -215,7 +188,7 @@ pub fn dispatch_multi_channel_py<'py>(
215
188
  let rgb = colorize::merge_3d_u8(arrs, cmaps, blending, limits).unwrap();
216
189
  Ok(rgb.into_dyn().into_pyarray(py))
217
190
  }
218
- _ => Err(DispatchError::UnsupportedNumberOfDimensions(*ndim).into()),
191
+ _ => Err(errors::DispatchError::UnsupportedNumberOfDimensions(*ndim).into()),
219
192
  },
220
193
  "uint16" => match ndim {
221
194
  2 => {
@@ -232,8 +205,8 @@ pub fn dispatch_multi_channel_py<'py>(
232
205
  let rgb = colorize::merge_3d_u16(arrs, cmaps, blending, limits).unwrap();
233
206
  Ok(rgb.into_dyn().into_pyarray(py))
234
207
  }
235
- _ => Err(DispatchError::UnsupportedNumberOfDimensions(*ndim).into()),
208
+ _ => Err(errors::DispatchError::UnsupportedNumberOfDimensions(*ndim).into()),
236
209
  },
237
- _ => Err(DispatchError::UnsupportedDataType(dtype.clone()).into()),
210
+ _ => Err(errors::DispatchError::UnsupportedDataType(dtype.clone()).into()),
238
211
  }
239
212
  }
@@ -1,6 +1,7 @@
1
1
  mod blend;
2
2
  mod cmaps;
3
3
  mod colorize;
4
+ mod errors;
4
5
  mod interface;
5
6
 
6
7
  use interface::{dispatch_multi_channel_py, dispatch_single_channel_py};
@@ -1,65 +0,0 @@
1
- from typing import Sequence
2
-
3
- import numpy as np
4
-
5
- from mergechannels import (
6
- dispatch_single_channel,
7
- dispatch_multi_channel,
8
- )
9
- from ._luts import COLORMAPS
10
- from ._blending import BLENDING_OPTIONS
11
-
12
- def merge(
13
- arrs: Sequence[np.ndarray],
14
- colors: Sequence[COLORMAPS],
15
- blending: BLENDING_OPTIONS = 'max',
16
- saturation_limits: tuple[float, float] = (0.011, 0.999),
17
- ) -> np.ndarray:
18
- '''
19
- apply cmaps to arrays and blend the colors
20
- '''
21
- # region validation
22
- n_arrs = len(arrs)
23
- n_colors = len(colors)
24
- if not n_arrs == n_colors and n_arrs > 0:
25
- raise ValueError(
26
- 'Expected an equal number of arrays to colorize and colormap names to apply. '
27
- f'Got {n_arrs} arrays and {n_colors} colors'
28
- )
29
- arr_shapes = [arr.shape for arr in arrs]
30
- if not len(set(arr_shapes)) == 1:
31
- raise ValueError(
32
- f'Expected every array to have the same shape, got {arr_shapes}'
33
- )
34
- if len(arr_shapes[0]) not in (2, 3):
35
- raise ValueError(
36
- f'Expected every array to be 2D or 3D, got {arr_shapes[0]}'
37
- )
38
- arr_dtypes = [arr.dtype for arr in arrs]
39
- if not len(set(arr_dtypes)) == 1:
40
- raise ValueError(
41
- f'Expected every array to have the same dtype, got {arr_dtypes}'
42
- )
43
- # endregion
44
- if n_arrs == 1:
45
- if arrs[0].dtype == 'uint8':
46
- limits = (0, 255)
47
- else:
48
- low, high = np.percentile(arrs[0], np.array(saturation_limits) * 100)
49
- limits = (low, high)
50
- return dispatch_single_channel(
51
- array_reference=arrs[0],
52
- cmap_name=colors[0],
53
- limits=limits,
54
- )
55
- else:
56
- if all(arr.dtype == 'uint8' for arr in arrs):
57
- limits = (0, 255)
58
- else:
59
- limits = tuple(np.percentile(arr, np.array(saturation_limits) * 100) for arr in arrs)
60
- return dispatch_multi_channel(
61
- array_references=arrs,
62
- cmap_names=colors,
63
- blending=blending,
64
- limits=limits, # type: ignore
65
- )
File without changes
File without changes