kaxe 1.5.0.dev2__tar.gz → 1.5.0.dev3__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 (135) hide show
  1. {kaxe-1.5.0.dev2/src/kaxe.egg-info → kaxe-1.5.0.dev3}/PKG-INFO +19 -11
  2. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/README.md +9 -0
  3. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/pyproject.toml +8 -8
  4. kaxe-1.5.0.dev3/src/kaxe/_require_3d.py +9 -0
  5. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/openglrender.py +5 -6
  6. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/_lazy.py +2 -0
  7. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/arrow.py +2 -0
  8. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/equation.py +3 -0
  9. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/function.py +3 -0
  10. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/inequality.py +5 -2
  11. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/parameter.py +2 -0
  12. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d3/mesh.py +3 -1
  13. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/function.py +2 -0
  14. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/point.py +2 -0
  15. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/__init__.py +0 -1
  16. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/_lazy.py +2 -0
  17. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3/src/kaxe.egg-info}/PKG-INFO +19 -11
  18. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe.egg-info/SOURCES.txt +1 -0
  19. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe.egg-info/requires.txt +6 -5
  20. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/LICENSE +0 -0
  21. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/MANIFEST.in +0 -0
  22. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/setup.cfg +0 -0
  23. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/__init__.py +0 -0
  24. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/chart/__init__.py +0 -0
  25. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/chart/bar.py +0 -0
  26. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/chart/box.py +0 -0
  27. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/chart/pie.py +0 -0
  28. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/chart/qqplot.py +0 -0
  29. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/__init__.py +0 -0
  30. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/axis.py +0 -0
  31. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/bounds.py +0 -0
  32. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/color.py +0 -0
  33. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/backend.py +0 -0
  34. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/camera.py +0 -0
  35. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/helper.py +0 -0
  36. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/hud.py +0 -0
  37. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/objects/__init__.py +0 -0
  38. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/objects/color.py +0 -0
  39. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/objects/line.py +0 -0
  40. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/objects/point.py +0 -0
  41. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/objects/pointer.py +0 -0
  42. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/objects/triangle.py +0 -0
  43. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/d3/translator.py +0 -0
  44. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/draw.py +0 -0
  45. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/fileloader.py +0 -0
  46. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/helper.py +0 -0
  47. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/legend.py +0 -0
  48. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/line.py +0 -0
  49. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/marker.py +0 -0
  50. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/profiler.py +0 -0
  51. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/round.py +0 -0
  52. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/shapes.py +0 -0
  53. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/styles.py +0 -0
  54. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/svg.py +0 -0
  55. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/svg_pdf.py +0 -0
  56. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/symbol.py +0 -0
  57. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/text.py +0 -0
  58. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/core/window.py +0 -0
  59. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/data/__init__.py +0 -0
  60. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/data/excel.py +0 -0
  61. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/__init__.py +0 -0
  62. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/__init__.py +0 -0
  63. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/bubble.py +0 -0
  64. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/contour.py +0 -0
  65. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/fill.py +0 -0
  66. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/map.py +0 -0
  67. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/pillar.py +0 -0
  68. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d2/point.py +0 -0
  69. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d3/__init__.py +0 -0
  70. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d3/base.py +0 -0
  71. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d3/function.py +0 -0
  72. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d3/point.py +0 -0
  73. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/d3/potato.py +0 -0
  74. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/legend.py +0 -0
  75. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/mapdata.py +0 -0
  76. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/objects/text.py +0 -0
  77. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/box.py +0 -0
  78. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/constants.py +0 -0
  79. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/d3/__init__.py +0 -0
  80. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/d3/axes.py +0 -0
  81. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/d3/geometry.py +0 -0
  82. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/d3/plot3d.py +0 -0
  83. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/d3/variants.py +0 -0
  84. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/double.py +0 -0
  85. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/empty.py +0 -0
  86. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/grid.py +0 -0
  87. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/log.py +0 -0
  88. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/polar.py +0 -0
  89. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/standard.py +0 -0
  90. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/themes.py +0 -0
  91. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/zoom.py +0 -0
  92. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/plot/zoom_connector.py +0 -0
  93. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/__init__.py +0 -0
  94. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/__init__.py +0 -0
  95. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.bright-oblique.ttf +0 -0
  96. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.bright-roman.ttf +0 -0
  97. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.bright-semibold.ttf +0 -0
  98. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.bright-semiboldoblique.ttf +0 -0
  99. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.classical-serif-italic.ttf +0 -0
  100. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.concrete-bold.ttf +0 -0
  101. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.concrete-bolditalic.ttf +0 -0
  102. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.concrete-italic.ttf +0 -0
  103. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.concrete-roman.ttf +0 -0
  104. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-bold.ttf +0 -0
  105. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-boldoblique.ttf +0 -0
  106. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-demi-condensed-demicondensed.ttf +0 -0
  107. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-medium.ttf +0 -0
  108. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.sans-serif-oblique.ttf +0 -0
  109. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.serif-bold.ttf +0 -0
  110. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.serif-bolditalic.ttf +0 -0
  111. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.serif-extra-boldslanted.ttf +0 -0
  112. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.serif-extra-romanslanted.ttf +0 -0
  113. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.serif-italic.ttf +0 -0
  114. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.serif-roman.ttf +0 -0
  115. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.serif-upright-italic-uprightitalic.ttf +0 -0
  116. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-bold.ttf +0 -0
  117. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-bolditalic.ttf +0 -0
  118. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-italic.ttf +0 -0
  119. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-light.ttf +0 -0
  120. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-lightoblique.ttf +0 -0
  121. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-regular.ttf +0 -0
  122. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-variable-width-italic.ttf +0 -0
  123. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/cmu.typewriter-text-variable-width-medium.ttf +0 -0
  124. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/computer-modern-family/readme.txt +0 -0
  125. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/logo-small.png +0 -0
  126. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/symbolcross.png +0 -0
  127. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/symboldonut.png +0 -0
  128. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/symbollollipop.png +0 -0
  129. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe/resources/symboltriangle.png +0 -0
  130. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe.egg-info/dependency_links.txt +0 -0
  131. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/src/kaxe.egg-info/top_level.txt +0 -0
  132. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/tests/test.py +0 -0
  133. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/tests/test2.py +0 -0
  134. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/tests/test3.py +0 -0
  135. {kaxe-1.5.0.dev2 → kaxe-1.5.0.dev3}/tests/test_5.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kaxe
3
- Version: 1.5.0.dev2
3
+ Version: 1.5.0.dev3
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
@@ -11,20 +11,19 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.9
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
+ Requires-Dist: numpy
14
15
  Requires-Dist: pillow
15
16
  Requires-Dist: fondi>=0.2.0
16
- Requires-Dist: sympy
17
- Requires-Dist: scipy
18
17
  Requires-Dist: openpyxl
19
18
  Requires-Dist: tqdm
20
- Requires-Dist: numba
21
- Requires-Dist: python-dotenv
22
- Requires-Dist: pyopengl
23
- Requires-Dist: PySDL2
24
- Requires-Dist: pysdl2-dll
25
- Requires-Dist: numpy-stl
26
- Requires-Dist: psutil
27
- Requires-Dist: opencv-python-headless
19
+ Provides-Extra: core
20
+ Provides-Extra: 3d
21
+ Requires-Dist: scipy; extra == "3d"
22
+ Requires-Dist: pyopengl; extra == "3d"
23
+ Requires-Dist: PySDL2; extra == "3d"
24
+ Requires-Dist: pysdl2-dll; extra == "3d"
25
+ Requires-Dist: numpy-stl; extra == "3d"
26
+ Requires-Dist: psutil; extra == "3d"
28
27
  Provides-Extra: pdf
29
28
  Requires-Dist: reportlab>=4.0; extra == "pdf"
30
29
  Requires-Dist: fonttools>=4.0; extra == "pdf"
@@ -39,6 +38,15 @@ Kaxe is a lightweight, pure-Python plotting library for publication-quality figu
39
38
 
40
39
  Documentation: [kaxe.readthedocs.io](https://kaxe.readthedocs.io/en/latest/)
41
40
 
41
+ ## Installation
42
+
43
+ ```bash
44
+ pip install kaxe # 2D plotting (default)
45
+ pip install kaxe[3d] # add 3D plotting (OpenGL)
46
+ pip install kaxe[pdf] # add PDF export
47
+ pip install kaxe[3d,pdf] # 3D + PDF
48
+ ```
49
+
42
50
  ## Quick example
43
51
 
44
52
  ```python
@@ -7,6 +7,15 @@ Kaxe is a lightweight, pure-Python plotting library for publication-quality figu
7
7
 
8
8
  Documentation: [kaxe.readthedocs.io](https://kaxe.readthedocs.io/en/latest/)
9
9
 
10
+ ## Installation
11
+
12
+ ```bash
13
+ pip install kaxe # 2D plotting (default)
14
+ pip install kaxe[3d] # add 3D plotting (OpenGL)
15
+ pip install kaxe[pdf] # add PDF export
16
+ pip install kaxe[3d,pdf] # 3D + PDF
17
+ ```
18
+
10
19
  ## Quick example
11
20
 
12
21
  ```python
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kaxe"
3
- version = "1.5.0.dev2"
3
+ version = "1.5.0.dev3"
4
4
  authors = [
5
5
  { name="Valter Yde Daugberg", email="valteryde@hotmail.com" },
6
6
  ]
@@ -13,23 +13,23 @@ classifiers = [
13
13
  "Operating System :: OS Independent",
14
14
  ]
15
15
  dependencies = [
16
+ "numpy",
16
17
  "pillow",
17
18
  "fondi>=0.2.0",
18
- "sympy",
19
- "scipy",
20
19
  "openpyxl",
21
20
  "tqdm",
22
- "numba",
23
- "python-dotenv",
21
+ ]
22
+
23
+ [project.optional-dependencies]
24
+ core = []
25
+ 3d = [
26
+ "scipy",
24
27
  "pyopengl",
25
28
  "PySDL2",
26
29
  "pysdl2-dll",
27
30
  "numpy-stl",
28
31
  "psutil",
29
- "opencv-python-headless",
30
32
  ]
31
-
32
- [project.optional-dependencies]
33
33
  pdf = ["reportlab>=4.0", "fonttools>=4.0"]
34
34
 
35
35
  [project.urls]
@@ -0,0 +1,9 @@
1
+ _MSG = "3D features require optional dependencies. Install with: pip install kaxe[3d]"
2
+
3
+
4
+ def require_3d():
5
+ try:
6
+ import OpenGL # noqa: F401
7
+ import sdl2 # noqa: F401
8
+ except ImportError as exc:
9
+ raise ImportError(_MSG) from exc
@@ -18,7 +18,6 @@ import sdl2.ext
18
18
  import sdl2.video
19
19
  import ctypes
20
20
  from ..fileloader import loadFile
21
- import cv2
22
21
  from ..profiler import Profiler
23
22
  from ..helper import to_numpy
24
23
  from .hud import ViewportHud
@@ -808,12 +807,12 @@ class OpenGLRender:
808
807
  if overlay_np.shape[1] > self.width or overlay_np.shape[0] > self.height:
809
808
  overlay_np = overlay_np[:self.height, :self.width]
810
809
 
811
- with self.profiler.measure("opencv_resize"):
810
+ with self.profiler.measure("overlay_resize"):
812
811
  if overlay_np.shape[1] != self.guiWidth or overlay_np.shape[0] != self.guiHeight:
813
- overlay_np = cv2.resize(
814
- overlay_np,
815
- (self.guiWidth, self.guiHeight),
816
- interpolation=cv2.INTER_LINEAR,
812
+ overlay_np = np.asarray(
813
+ Image.fromarray(overlay_np).resize(
814
+ (self.guiWidth, self.guiHeight), Image.BILINEAR
815
+ )
817
816
  )
818
817
 
819
818
  return overlay_np
@@ -12,6 +12,8 @@ _D3_EXPORTS = frozenset({
12
12
 
13
13
  def lazy_getattr(module_globals, name):
14
14
  if name in _D3_EXPORTS:
15
+ from .._require_3d import require_3d
16
+ require_3d()
15
17
  from . import d3 as _d3
16
18
  value = getattr(_d3, name)
17
19
  module_globals[name] = value
@@ -121,6 +121,8 @@ class Arrow:
121
121
  return np.cos(theta) * ortho1 + np.sin(theta) * ortho2
122
122
 
123
123
  def finalize3D(self, parent):
124
+ from ..._require_3d import require_3d
125
+ require_3d()
124
126
  from ...core.d3.objects import Triangle, Line3D
125
127
 
126
128
  pixel0 = parent.pixel(*self.p0)
@@ -185,10 +185,12 @@ class Equation:
185
185
 
186
186
 
187
187
  def finalize(self, parent):
188
+ from ..._require_3d import require_3d
188
189
  from ...core.d3.translator import translate2DTo3DObjects, getEquivalent2DPlot, has3DReference
189
190
 
190
191
  # Translate to 3D plot
191
192
  if parent == identities.XYZPLOT:
193
+ require_3d()
192
194
  parent = getEquivalent2DPlot(parent)
193
195
  scale = getattr(parent, 'getVisualScale', lambda: 1.0)()
194
196
  self._effectiveWidth = max(1, int(self.width * scale))
@@ -201,6 +203,7 @@ class Equation:
201
203
 
202
204
  # Translate to 3D plot
203
205
  if has3DReference(parent):
206
+ require_3d()
204
207
  translate2DTo3DObjects(parent, self.batch)
205
208
 
206
209
  # algoritmen burde findes alle pixels hvor ligningen går op
@@ -220,6 +220,7 @@ class Function2D:
220
220
 
221
221
  def finalize(self, parent):
222
222
 
223
+ from ..._require_3d import require_3d
223
224
  from ...core.d3.translator import translate2DTo3DObjects, getEquivalent2DPlot, has3DReference
224
225
 
225
226
  self.lineSegments = [[]]
@@ -228,6 +229,7 @@ class Function2D:
228
229
 
229
230
  # translate xyz
230
231
  if parent == identities.XYZPLOT:
232
+ require_3d()
231
233
  parent = getEquivalent2DPlot(parent)
232
234
 
233
235
 
@@ -298,6 +300,7 @@ class Function2D:
298
300
 
299
301
  # translate fully to xyz
300
302
  if has3DReference(parent):
303
+ require_3d()
301
304
  translate2DTo3DObjects(parent, self.batch)
302
305
  # translate2DTo3DObjects(parent, self.fillbatch)
303
306
 
@@ -20,9 +20,10 @@ _OPS = {
20
20
 
21
21
 
22
22
  def _resolve_plot(parent):
23
- from ...core.d3.translator import getEquivalent2DPlot
24
-
25
23
  if getattr(parent, 'identity', None) == identities.XYZPLOT:
24
+ from ..._require_3d import require_3d
25
+ require_3d()
26
+ from ...core.d3.translator import getEquivalent2DPlot
26
27
  return getEquivalent2DPlot(parent)
27
28
  return parent
28
29
 
@@ -187,6 +188,7 @@ class Inequality:
187
188
  )
188
189
 
189
190
  def finalize(self, parent):
191
+ from ..._require_3d import require_3d
190
192
  from ...core.d3.translator import translate2DTo3DObjects, has3DReference
191
193
 
192
194
  plot = _resolve_plot(parent)
@@ -194,6 +196,7 @@ class Inequality:
194
196
  self.__build_hatch__(plot)
195
197
 
196
198
  if has3DReference(plot):
199
+ require_3d()
197
200
  translate2DTo3DObjects(plot, self.hatch_batch)
198
201
 
199
202
  def push(self, x, y):
@@ -139,6 +139,8 @@ class ParametricEquation:
139
139
  parent.add(tf)
140
140
 
141
141
  elif parent == identities.XYZPLOT:
142
+ from ..._require_3d import require_3d
143
+ require_3d()
142
144
  from ...core.d3.objects import Line3D, Point3D
143
145
  from ...core.d3.backend import RenderBackend
144
146
 
@@ -86,7 +86,9 @@ class Mesh(Base3DObject):
86
86
  """
87
87
 
88
88
  if not STLLIBIMPORTED:
89
- raise ImportError('Please ensure that the numpy-stl library is installed')
89
+ raise ImportError(
90
+ '3D features require optional dependencies. Install with: pip install kaxe[3d]'
91
+ )
90
92
 
91
93
  return Mesh(stlmesh.Mesh.from_file(fpath), **kwargs)
92
94
 
@@ -57,6 +57,8 @@ class Function:
57
57
  return Function2D(f, color=color, width=width, *args, **kwargs)
58
58
 
59
59
  if n == 2:
60
+ from .._require_3d import require_3d
61
+ require_3d()
60
62
  from .d3.function import Function3D
61
63
  return Function3D(f, color=color, numPoints=numPoints, fill=fill, *args, **kwargs)
62
64
 
@@ -38,6 +38,8 @@ class Points:
38
38
  def __new__(self, x, y, z = None, **kwargs) -> Union[Points2D, "Points3D"]:
39
39
 
40
40
  if z:
41
+ from .._require_3d import require_3d
42
+ require_3d()
41
43
  from .d3.point import Points3D
42
44
  return Points3D(x, y, z, **kwargs)
43
45
  return Points2D(x, y, **kwargs)
@@ -16,7 +16,6 @@ __all__ = [
16
16
  'Plot', 'XYPLOT', 'PolarPlot', 'POLARPLOT',
17
17
  'BoxedPlot', 'EmptyPlot', 'EmptyWindow',
18
18
  'DoubleAxisPlot', 'Grid', 'XYZPLOT', 'identities',
19
- 'Plot3D', 'PlotCenter3D', 'PlotFrame3D', 'PlotEmpty3D',
20
19
  ]
21
20
 
22
21
  if TYPE_CHECKING:
@@ -11,6 +11,8 @@ _D3_EXPORTS = frozenset({
11
11
 
12
12
  def lazy_getattr(module_globals, name):
13
13
  if name in _D3_EXPORTS:
14
+ from .._require_3d import require_3d
15
+ require_3d()
14
16
  from . import d3 as _d3
15
17
  value = getattr(_d3, name)
16
18
  module_globals[name] = value
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kaxe
3
- Version: 1.5.0.dev2
3
+ Version: 1.5.0.dev3
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
@@ -11,20 +11,19 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.9
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
+ Requires-Dist: numpy
14
15
  Requires-Dist: pillow
15
16
  Requires-Dist: fondi>=0.2.0
16
- Requires-Dist: sympy
17
- Requires-Dist: scipy
18
17
  Requires-Dist: openpyxl
19
18
  Requires-Dist: tqdm
20
- Requires-Dist: numba
21
- Requires-Dist: python-dotenv
22
- Requires-Dist: pyopengl
23
- Requires-Dist: PySDL2
24
- Requires-Dist: pysdl2-dll
25
- Requires-Dist: numpy-stl
26
- Requires-Dist: psutil
27
- Requires-Dist: opencv-python-headless
19
+ Provides-Extra: core
20
+ Provides-Extra: 3d
21
+ Requires-Dist: scipy; extra == "3d"
22
+ Requires-Dist: pyopengl; extra == "3d"
23
+ Requires-Dist: PySDL2; extra == "3d"
24
+ Requires-Dist: pysdl2-dll; extra == "3d"
25
+ Requires-Dist: numpy-stl; extra == "3d"
26
+ Requires-Dist: psutil; extra == "3d"
28
27
  Provides-Extra: pdf
29
28
  Requires-Dist: reportlab>=4.0; extra == "pdf"
30
29
  Requires-Dist: fonttools>=4.0; extra == "pdf"
@@ -39,6 +38,15 @@ Kaxe is a lightweight, pure-Python plotting library for publication-quality figu
39
38
 
40
39
  Documentation: [kaxe.readthedocs.io](https://kaxe.readthedocs.io/en/latest/)
41
40
 
41
+ ## Installation
42
+
43
+ ```bash
44
+ pip install kaxe # 2D plotting (default)
45
+ pip install kaxe[3d] # add 3D plotting (OpenGL)
46
+ pip install kaxe[pdf] # add PDF export
47
+ pip install kaxe[3d,pdf] # 3D + PDF
48
+ ```
49
+
42
50
  ## Quick example
43
51
 
44
52
  ```python
@@ -3,6 +3,7 @@ MANIFEST.in
3
3
  README.md
4
4
  pyproject.toml
5
5
  src/kaxe/__init__.py
6
+ src/kaxe/_require_3d.py
6
7
  src/kaxe.egg-info/PKG-INFO
7
8
  src/kaxe.egg-info/SOURCES.txt
8
9
  src/kaxe.egg-info/dependency_links.txt
@@ -1,17 +1,18 @@
1
+ numpy
1
2
  pillow
2
3
  fondi>=0.2.0
3
- sympy
4
- scipy
5
4
  openpyxl
6
5
  tqdm
7
- numba
8
- python-dotenv
6
+
7
+ [3d]
8
+ scipy
9
9
  pyopengl
10
10
  PySDL2
11
11
  pysdl2-dll
12
12
  numpy-stl
13
13
  psutil
14
- opencv-python-headless
14
+
15
+ [core]
15
16
 
16
17
  [pdf]
17
18
  reportlab>=4.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes