kaxe 1.6.1.dev0__tar.gz → 1.6.2.dev0__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 (147) hide show
  1. {kaxe-1.6.1.dev0/src/kaxe.egg-info → kaxe-1.6.2.dev0}/PKG-INFO +1 -1
  2. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/pyproject.toml +1 -1
  3. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/color.py +26 -0
  4. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/map.py +50 -31
  5. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0/src/kaxe.egg-info}/PKG-INFO +1 -1
  6. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/LICENSE +0 -0
  7. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/MANIFEST.in +0 -0
  8. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/README.md +0 -0
  9. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/setup.cfg +0 -0
  10. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/__init__.py +0 -0
  11. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/_require_3d.py +0 -0
  12. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/chart/__init__.py +0 -0
  13. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/chart/bar.py +0 -0
  14. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/chart/box.py +0 -0
  15. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/chart/pie.py +0 -0
  16. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/chart/qqplot.py +0 -0
  17. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/__init__.py +0 -0
  18. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/axis.py +0 -0
  19. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/bounds.py +0 -0
  20. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/backend.py +0 -0
  21. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/camera.py +0 -0
  22. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/helper.py +0 -0
  23. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/hud.py +0 -0
  24. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/objects/__init__.py +0 -0
  25. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/objects/color.py +0 -0
  26. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/objects/line.py +0 -0
  27. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/objects/point.py +0 -0
  28. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/objects/pointer.py +0 -0
  29. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/objects/triangle.py +0 -0
  30. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/openglrender.py +0 -0
  31. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/d3/translator.py +0 -0
  32. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/draw.py +0 -0
  33. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/fileloader.py +0 -0
  34. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/helper.py +0 -0
  35. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/ipython_display.py +0 -0
  36. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/legend.py +0 -0
  37. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/line.py +0 -0
  38. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/marker.py +0 -0
  39. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/profiler.py +0 -0
  40. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/progress.py +0 -0
  41. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/round.py +0 -0
  42. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/shapes.py +0 -0
  43. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/styles.py +0 -0
  44. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/svg.py +0 -0
  45. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/svg_pdf.py +0 -0
  46. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/symbol.py +0 -0
  47. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/text.py +0 -0
  48. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/core/window.py +0 -0
  49. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/data/__init__.py +0 -0
  50. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/data/excel.py +0 -0
  51. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/__init__.py +0 -0
  52. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/_lazy.py +0 -0
  53. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/__init__.py +0 -0
  54. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/arrow.py +0 -0
  55. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/bubble.py +0 -0
  56. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/contour.py +0 -0
  57. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/equation.py +0 -0
  58. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/fill.py +0 -0
  59. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/function.py +0 -0
  60. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/inequality.py +0 -0
  61. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/parameter.py +0 -0
  62. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/pillar.py +0 -0
  63. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d2/point.py +0 -0
  64. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d3/__init__.py +0 -0
  65. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d3/base.py +0 -0
  66. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d3/function.py +0 -0
  67. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d3/mesh.py +0 -0
  68. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d3/point.py +0 -0
  69. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/d3/potato.py +0 -0
  70. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/function.py +0 -0
  71. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/legend.py +0 -0
  72. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/mapdata.py +0 -0
  73. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/point.py +0 -0
  74. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/objects/text.py +0 -0
  75. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/__init__.py +0 -0
  76. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/_lazy.py +0 -0
  77. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/box.py +0 -0
  78. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/constants.py +0 -0
  79. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/d3/__init__.py +0 -0
  80. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/d3/axes.py +0 -0
  81. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/d3/geometry.py +0 -0
  82. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/d3/plot3d.py +0 -0
  83. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/d3/variants.py +0 -0
  84. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/double.py +0 -0
  85. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/empty.py +0 -0
  86. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/grid.py +0 -0
  87. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/log.py +0 -0
  88. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/polar.py +0 -0
  89. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/standard.py +0 -0
  90. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/themes.py +0 -0
  91. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/zoom.py +0 -0
  92. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/plot/zoom_connector.py +0 -0
  93. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/project/__init__.py +0 -0
  94. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/project/codec.py +0 -0
  95. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/project/context.py +0 -0
  96. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/project/document.py +0 -0
  97. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/project/registry.py +0 -0
  98. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/project/sample.py +0 -0
  99. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/project/sampled_curve.py +0 -0
  100. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/project/serializers.py +0 -0
  101. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/project/window.py +0 -0
  102. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/__init__.py +0 -0
  103. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/__init__.py +0 -0
  104. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.bright-oblique.ttf +0 -0
  105. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.bright-roman.ttf +0 -0
  106. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.bright-semibold.ttf +0 -0
  107. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.bright-semiboldoblique.ttf +0 -0
  108. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.classical-serif-italic.ttf +0 -0
  109. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.concrete-bold.ttf +0 -0
  110. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.concrete-bolditalic.ttf +0 -0
  111. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.concrete-italic.ttf +0 -0
  112. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.concrete-roman.ttf +0 -0
  113. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-bold.ttf +0 -0
  114. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-boldoblique.ttf +0 -0
  115. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-demi-condensed-demicondensed.ttf +0 -0
  116. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-medium.ttf +0 -0
  117. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-oblique.ttf +0 -0
  118. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.serif-bold.ttf +0 -0
  119. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.serif-bolditalic.ttf +0 -0
  120. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.serif-extra-boldslanted.ttf +0 -0
  121. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.serif-extra-romanslanted.ttf +0 -0
  122. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.serif-italic.ttf +0 -0
  123. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.serif-roman.ttf +0 -0
  124. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.serif-upright-italic-uprightitalic.ttf +0 -0
  125. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-bold.ttf +0 -0
  126. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-bolditalic.ttf +0 -0
  127. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-italic.ttf +0 -0
  128. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-light.ttf +0 -0
  129. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-lightoblique.ttf +0 -0
  130. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-regular.ttf +0 -0
  131. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-variable-width-italic.ttf +0 -0
  132. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-variable-width-medium.ttf +0 -0
  133. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/computer-modern-family/readme.txt +0 -0
  134. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/logo-small.png +0 -0
  135. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/symbolcross.png +0 -0
  136. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/symboldonut.png +0 -0
  137. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/symbollollipop.png +0 -0
  138. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe/resources/symboltriangle.png +0 -0
  139. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe.egg-info/SOURCES.txt +0 -0
  140. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe.egg-info/dependency_links.txt +0 -0
  141. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe.egg-info/requires.txt +0 -0
  142. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/src/kaxe.egg-info/top_level.txt +0 -0
  143. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/tests/test.py +0 -0
  144. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/tests/test2.py +0 -0
  145. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/tests/test3.py +0 -0
  146. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/tests/test_4.py +0 -0
  147. {kaxe-1.6.1.dev0 → kaxe-1.6.2.dev0}/tests/test_5.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kaxe
3
- Version: 1.6.1.dev0
3
+ Version: 1.6.2.dev0
4
4
  Summary: A small graphing tool for functions, points, equations and more
5
5
  Author-email: Valter Yde Daugberg <valteryde@hotmail.com>
6
6
  Project-URL: Homepage, https://github.com/valteryde/kaxe
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kaxe"
3
- version = "1.6.1.dev0"
3
+ version = "1.6.2.dev0"
4
4
  authors = [
5
5
  { name="Valter Yde Daugberg", email="valteryde@hotmail.com" },
6
6
  ]
@@ -134,6 +134,32 @@ class Colormap:
134
134
  x -= x0
135
135
  return tuple(round(i) for i in (1 - x) * self.colorGradientSteps[x0] + (x) * self.colorGradientSteps[x1])
136
136
 
137
+ def map_array(self, values: np.ndarray, start: Union[int, float], end: Union[int, float]) -> np.ndarray:
138
+ """
139
+ Map a numeric array to RGBA colors using this colormap.
140
+
141
+ Returns an array with shape ``(*values.shape, 4)`` and dtype ``uint8``.
142
+ """
143
+ steps = np.asarray(self.colorGradientSteps, dtype=np.float64)
144
+ if end == start:
145
+ return np.broadcast_to(steps[0].astype(np.uint8), (*values.shape, 4)).copy()
146
+
147
+ n = len(steps) - 1
148
+ t = (values - start) / (end - start) * n
149
+ t = np.clip(t, 0, n)
150
+ i0 = np.floor(t).astype(np.intp)
151
+ i1 = np.minimum(i0 + 1, n)
152
+ frac = (t - i0)[..., np.newaxis]
153
+ colors = np.round((1 - frac) * steps[i0] + frac * steps[i1]).astype(np.uint8)
154
+
155
+ below = values < start
156
+ above = values > end
157
+ if np.any(below):
158
+ colors[below] = steps[0].astype(np.uint8)
159
+ if np.any(above):
160
+ colors[above] = steps[-1].astype(np.uint8)
161
+ return colors
162
+
137
163
  def setAlpha(self, alpha255):
138
164
  """
139
165
  Update the alpha (transparency) value for each color in the color gradient steps.
@@ -2,6 +2,7 @@
2
2
  import numpy as np
3
3
  from ..mapdata import heatcolormap
4
4
  import math
5
+ from PIL import Image
5
6
  from ...core.shapes import shapes
6
7
  from ...core.text import Text
7
8
  from ...core.round import koundTeX
@@ -297,37 +298,55 @@ class HeatMap:
297
298
  )
298
299
 
299
300
  def finalize(self, parent):
300
-
301
- # get size of one box
302
- width, height = parent.scaled(*self.unitPerPixel)
303
- width, height = math.ceil(width), math.ceil(height)
304
-
305
- for rowNum, row in enumerate(self.data):
306
-
307
- for cellNum, cell in enumerate(row):
308
-
309
- p = parent.pixel(
310
- cellNum*self.unitPerPixel[0] + self.position[0],
311
- rowNum*self.unitPerPixel[1] + self.position[1]
312
- )
313
- if not parent.inside(*p): continue
314
-
315
- w, h = width, height
316
- p1 = parent.inversepixel(p[0]+w, p[1]+h)
317
- p1 = parent.pixel(p1[0], p1[1])
318
- if not parent.inside(*p1):
319
- p1 = parent.clamp(*p1)
320
- w = p1[0] - p[0]
321
- h = p1[1] - p[1]
322
-
323
- if w == 0 or h == 0:
324
- continue
325
-
326
- shapes.Rectangle(
327
- *p, math.ceil(w), math.ceil(h),
328
- color=self.cmap.getColor(cell, self.minValue, self.maxValue),
329
- batch=self.batch
330
- )
301
+ nrows = len(self.data)
302
+ if nrows == 0:
303
+ return
304
+ ncols = len(self.data[0])
305
+ if ncols == 0:
306
+ return
307
+
308
+ x0, y0 = self.position
309
+ x1 = x0 + ncols * self.unitPerPixel[0]
310
+ y1 = y0 + nrows * self.unitPerPixel[1]
311
+
312
+ px0, py0 = parent.pixel(x0, y0)
313
+ px1, py1 = parent.pixel(x1, y1)
314
+
315
+ left = int(math.floor(px0))
316
+ bottom = int(math.floor(py0))
317
+ right = int(math.ceil(px1))
318
+ top = int(math.ceil(py1))
319
+ pw = max(right - left, 1)
320
+ ph = max(top - bottom, 1)
321
+
322
+ rgba = self.cmap.map_array(
323
+ np.asarray(self.data, dtype=np.float64),
324
+ self.minValue,
325
+ self.maxValue,
326
+ )
327
+ rgba = rgba[::-1]
328
+
329
+ img = Image.fromarray(rgba)
330
+ if (pw, ph) != (ncols, nrows):
331
+ img = img.resize((pw, ph), Image.NEAREST)
332
+
333
+ wb = parent.windowBox
334
+ clip_l = max(left, wb[0])
335
+ clip_b = max(bottom, wb[1])
336
+ clip_r = min(left + pw, wb[2])
337
+ clip_t = min(bottom + ph, wb[3])
338
+ if clip_l >= clip_r or clip_b >= clip_t:
339
+ return
340
+
341
+ if (clip_l, clip_b, clip_r, clip_t) != (left, bottom, left + pw, bottom + ph):
342
+ src_left = clip_l - left
343
+ src_right = clip_r - left
344
+ src_top = ph - (clip_t - bottom)
345
+ src_bottom = ph - (clip_b - bottom)
346
+ img = img.crop((src_left, src_top, src_right, src_bottom))
347
+ left, bottom = clip_l, clip_b
348
+
349
+ self.img = shapes.ImageArray(np.asarray(img), left, bottom, batch=self.batch)
331
350
 
332
351
 
333
352
  def addColorScale(self, parent, digits=64):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kaxe
3
- Version: 1.6.1.dev0
3
+ Version: 1.6.2.dev0
4
4
  Summary: A small graphing tool for functions, points, equations and more
5
5
  Author-email: Valter Yde Daugberg <valteryde@hotmail.com>
6
6
  Project-URL: Homepage, https://github.com/valteryde/kaxe
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