kaxe 1.6.1.dev0__tar.gz → 1.6.2__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}/PKG-INFO +1 -1
  2. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/pyproject.toml +1 -1
  3. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/color.py +26 -0
  4. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/map.py +50 -31
  5. {kaxe-1.6.1.dev0 → kaxe-1.6.2/src/kaxe.egg-info}/PKG-INFO +1 -1
  6. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/LICENSE +0 -0
  7. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/MANIFEST.in +0 -0
  8. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/README.md +0 -0
  9. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/setup.cfg +0 -0
  10. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/__init__.py +0 -0
  11. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/_require_3d.py +0 -0
  12. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/chart/__init__.py +0 -0
  13. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/chart/bar.py +0 -0
  14. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/chart/box.py +0 -0
  15. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/chart/pie.py +0 -0
  16. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/chart/qqplot.py +0 -0
  17. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/__init__.py +0 -0
  18. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/axis.py +0 -0
  19. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/bounds.py +0 -0
  20. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/backend.py +0 -0
  21. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/camera.py +0 -0
  22. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/helper.py +0 -0
  23. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/hud.py +0 -0
  24. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/objects/__init__.py +0 -0
  25. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/objects/color.py +0 -0
  26. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/objects/line.py +0 -0
  27. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/objects/point.py +0 -0
  28. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/objects/pointer.py +0 -0
  29. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/objects/triangle.py +0 -0
  30. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/openglrender.py +0 -0
  31. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/d3/translator.py +0 -0
  32. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/draw.py +0 -0
  33. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/fileloader.py +0 -0
  34. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/helper.py +0 -0
  35. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/ipython_display.py +0 -0
  36. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/legend.py +0 -0
  37. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/line.py +0 -0
  38. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/marker.py +0 -0
  39. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/profiler.py +0 -0
  40. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/progress.py +0 -0
  41. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/round.py +0 -0
  42. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/shapes.py +0 -0
  43. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/styles.py +0 -0
  44. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/svg.py +0 -0
  45. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/svg_pdf.py +0 -0
  46. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/symbol.py +0 -0
  47. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/text.py +0 -0
  48. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/core/window.py +0 -0
  49. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/data/__init__.py +0 -0
  50. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/data/excel.py +0 -0
  51. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/__init__.py +0 -0
  52. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/_lazy.py +0 -0
  53. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/__init__.py +0 -0
  54. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/arrow.py +0 -0
  55. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/bubble.py +0 -0
  56. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/contour.py +0 -0
  57. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/equation.py +0 -0
  58. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/fill.py +0 -0
  59. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/function.py +0 -0
  60. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/inequality.py +0 -0
  61. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/parameter.py +0 -0
  62. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/pillar.py +0 -0
  63. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d2/point.py +0 -0
  64. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d3/__init__.py +0 -0
  65. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d3/base.py +0 -0
  66. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d3/function.py +0 -0
  67. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d3/mesh.py +0 -0
  68. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d3/point.py +0 -0
  69. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/d3/potato.py +0 -0
  70. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/function.py +0 -0
  71. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/legend.py +0 -0
  72. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/mapdata.py +0 -0
  73. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/point.py +0 -0
  74. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/objects/text.py +0 -0
  75. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/__init__.py +0 -0
  76. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/_lazy.py +0 -0
  77. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/box.py +0 -0
  78. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/constants.py +0 -0
  79. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/d3/__init__.py +0 -0
  80. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/d3/axes.py +0 -0
  81. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/d3/geometry.py +0 -0
  82. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/d3/plot3d.py +0 -0
  83. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/d3/variants.py +0 -0
  84. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/double.py +0 -0
  85. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/empty.py +0 -0
  86. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/grid.py +0 -0
  87. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/log.py +0 -0
  88. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/polar.py +0 -0
  89. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/standard.py +0 -0
  90. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/themes.py +0 -0
  91. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/zoom.py +0 -0
  92. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/plot/zoom_connector.py +0 -0
  93. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/project/__init__.py +0 -0
  94. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/project/codec.py +0 -0
  95. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/project/context.py +0 -0
  96. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/project/document.py +0 -0
  97. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/project/registry.py +0 -0
  98. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/project/sample.py +0 -0
  99. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/project/sampled_curve.py +0 -0
  100. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/project/serializers.py +0 -0
  101. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/project/window.py +0 -0
  102. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/__init__.py +0 -0
  103. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/__init__.py +0 -0
  104. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.bright-oblique.ttf +0 -0
  105. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.bright-roman.ttf +0 -0
  106. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.bright-semibold.ttf +0 -0
  107. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.bright-semiboldoblique.ttf +0 -0
  108. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.classical-serif-italic.ttf +0 -0
  109. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.concrete-bold.ttf +0 -0
  110. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.concrete-bolditalic.ttf +0 -0
  111. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.concrete-italic.ttf +0 -0
  112. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.concrete-roman.ttf +0 -0
  113. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-bold.ttf +0 -0
  114. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-boldoblique.ttf +0 -0
  115. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/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}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-medium.ttf +0 -0
  117. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-oblique.ttf +0 -0
  118. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.serif-bold.ttf +0 -0
  119. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.serif-bolditalic.ttf +0 -0
  120. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.serif-extra-boldslanted.ttf +0 -0
  121. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.serif-extra-romanslanted.ttf +0 -0
  122. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.serif-italic.ttf +0 -0
  123. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.serif-roman.ttf +0 -0
  124. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.serif-upright-italic-uprightitalic.ttf +0 -0
  125. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-bold.ttf +0 -0
  126. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-bolditalic.ttf +0 -0
  127. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-italic.ttf +0 -0
  128. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-light.ttf +0 -0
  129. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-lightoblique.ttf +0 -0
  130. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-regular.ttf +0 -0
  131. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/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}/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}/src/kaxe/resources/computer-modern-family/readme.txt +0 -0
  134. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/logo-small.png +0 -0
  135. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/symbolcross.png +0 -0
  136. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/symboldonut.png +0 -0
  137. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/symbollollipop.png +0 -0
  138. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe/resources/symboltriangle.png +0 -0
  139. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe.egg-info/SOURCES.txt +0 -0
  140. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe.egg-info/dependency_links.txt +0 -0
  141. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe.egg-info/requires.txt +0 -0
  142. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/src/kaxe.egg-info/top_level.txt +0 -0
  143. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/tests/test.py +0 -0
  144. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/tests/test2.py +0 -0
  145. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/tests/test3.py +0 -0
  146. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/tests/test_4.py +0 -0
  147. {kaxe-1.6.1.dev0 → kaxe-1.6.2}/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
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"
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
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes