vispy 0.14.0__cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

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 vispy might be problematic. Click here for more details.

Files changed (519) hide show
  1. vispy/__init__.py +33 -0
  2. vispy/app/__init__.py +15 -0
  3. vispy/app/_default_app.py +76 -0
  4. vispy/app/_detect_eventloop.py +148 -0
  5. vispy/app/application.py +263 -0
  6. vispy/app/backends/__init__.py +52 -0
  7. vispy/app/backends/_egl.py +264 -0
  8. vispy/app/backends/_glfw.py +513 -0
  9. vispy/app/backends/_jupyter_rfb.py +278 -0
  10. vispy/app/backends/_offscreen_util.py +121 -0
  11. vispy/app/backends/_osmesa.py +235 -0
  12. vispy/app/backends/_pyglet.py +451 -0
  13. vispy/app/backends/_pyqt4.py +36 -0
  14. vispy/app/backends/_pyqt5.py +36 -0
  15. vispy/app/backends/_pyqt6.py +40 -0
  16. vispy/app/backends/_pyside.py +37 -0
  17. vispy/app/backends/_pyside2.py +52 -0
  18. vispy/app/backends/_pyside6.py +53 -0
  19. vispy/app/backends/_qt.py +968 -0
  20. vispy/app/backends/_sdl2.py +444 -0
  21. vispy/app/backends/_template.py +244 -0
  22. vispy/app/backends/_test.py +8 -0
  23. vispy/app/backends/_tk.py +800 -0
  24. vispy/app/backends/_wx.py +476 -0
  25. vispy/app/backends/tests/__init__.py +0 -0
  26. vispy/app/backends/tests/test_offscreen_util.py +52 -0
  27. vispy/app/backends/tests/test_rfb.py +77 -0
  28. vispy/app/base.py +294 -0
  29. vispy/app/canvas.py +828 -0
  30. vispy/app/qt.py +92 -0
  31. vispy/app/tests/__init__.py +0 -0
  32. vispy/app/tests/qt-designer.ui +58 -0
  33. vispy/app/tests/test_app.py +442 -0
  34. vispy/app/tests/test_backends.py +164 -0
  35. vispy/app/tests/test_canvas.py +122 -0
  36. vispy/app/tests/test_context.py +92 -0
  37. vispy/app/tests/test_qt.py +47 -0
  38. vispy/app/tests/test_simultaneous.py +134 -0
  39. vispy/app/timer.py +174 -0
  40. vispy/color/__init__.py +17 -0
  41. vispy/color/_color_dict.py +193 -0
  42. vispy/color/color_array.py +447 -0
  43. vispy/color/color_space.py +181 -0
  44. vispy/color/colormap.py +1134 -0
  45. vispy/color/tests/__init__.py +0 -0
  46. vispy/color/tests/test_color.py +352 -0
  47. vispy/conftest.py +12 -0
  48. vispy/ext/__init__.py +0 -0
  49. vispy/ext/cocoapy.py +1542 -0
  50. vispy/ext/cubehelix.py +138 -0
  51. vispy/ext/egl.py +375 -0
  52. vispy/ext/fontconfig.py +118 -0
  53. vispy/ext/gdi32plus.py +206 -0
  54. vispy/ext/osmesa.py +105 -0
  55. vispy/geometry/__init__.py +23 -0
  56. vispy/geometry/_triangulation_debugger.py +171 -0
  57. vispy/geometry/calculations.py +134 -0
  58. vispy/geometry/curves.py +399 -0
  59. vispy/geometry/generation.py +643 -0
  60. vispy/geometry/isocurve.py +175 -0
  61. vispy/geometry/isosurface.py +465 -0
  62. vispy/geometry/meshdata.py +698 -0
  63. vispy/geometry/normals.py +78 -0
  64. vispy/geometry/parametric.py +56 -0
  65. vispy/geometry/polygon.py +137 -0
  66. vispy/geometry/rect.py +210 -0
  67. vispy/geometry/tests/__init__.py +0 -0
  68. vispy/geometry/tests/test_calculations.py +23 -0
  69. vispy/geometry/tests/test_generation.py +56 -0
  70. vispy/geometry/tests/test_meshdata.py +106 -0
  71. vispy/geometry/tests/test_triangulation.py +506 -0
  72. vispy/geometry/torusknot.py +142 -0
  73. vispy/geometry/triangulation.py +876 -0
  74. vispy/gloo/__init__.py +56 -0
  75. vispy/gloo/buffer.py +505 -0
  76. vispy/gloo/context.py +272 -0
  77. vispy/gloo/framebuffer.py +257 -0
  78. vispy/gloo/gl/__init__.py +234 -0
  79. vispy/gloo/gl/_constants.py +332 -0
  80. vispy/gloo/gl/_es2.py +986 -0
  81. vispy/gloo/gl/_gl2.py +1365 -0
  82. vispy/gloo/gl/_proxy.py +499 -0
  83. vispy/gloo/gl/_pyopengl2.py +362 -0
  84. vispy/gloo/gl/dummy.py +24 -0
  85. vispy/gloo/gl/es2.py +62 -0
  86. vispy/gloo/gl/gl2.py +98 -0
  87. vispy/gloo/gl/glplus.py +168 -0
  88. vispy/gloo/gl/pyopengl2.py +97 -0
  89. vispy/gloo/gl/tests/__init__.py +0 -0
  90. vispy/gloo/gl/tests/test_basics.py +282 -0
  91. vispy/gloo/gl/tests/test_functionality.py +566 -0
  92. vispy/gloo/gl/tests/test_names.py +246 -0
  93. vispy/gloo/gl/tests/test_use.py +71 -0
  94. vispy/gloo/glir.py +1816 -0
  95. vispy/gloo/globject.py +101 -0
  96. vispy/gloo/preprocessor.py +67 -0
  97. vispy/gloo/program.py +543 -0
  98. vispy/gloo/tests/__init__.py +0 -0
  99. vispy/gloo/tests/test_buffer.py +558 -0
  100. vispy/gloo/tests/test_context.py +119 -0
  101. vispy/gloo/tests/test_framebuffer.py +195 -0
  102. vispy/gloo/tests/test_glir.py +307 -0
  103. vispy/gloo/tests/test_globject.py +35 -0
  104. vispy/gloo/tests/test_program.py +302 -0
  105. vispy/gloo/tests/test_texture.py +732 -0
  106. vispy/gloo/tests/test_use_gloo.py +187 -0
  107. vispy/gloo/tests/test_util.py +60 -0
  108. vispy/gloo/tests/test_wrappers.py +261 -0
  109. vispy/gloo/texture.py +1045 -0
  110. vispy/gloo/util.py +129 -0
  111. vispy/gloo/wrappers.py +762 -0
  112. vispy/glsl/__init__.py +42 -0
  113. vispy/glsl/antialias/antialias.glsl +7 -0
  114. vispy/glsl/antialias/cap-butt.glsl +31 -0
  115. vispy/glsl/antialias/cap-round.glsl +29 -0
  116. vispy/glsl/antialias/cap-square.glsl +30 -0
  117. vispy/glsl/antialias/cap-triangle-in.glsl +30 -0
  118. vispy/glsl/antialias/cap-triangle-out.glsl +30 -0
  119. vispy/glsl/antialias/cap.glsl +67 -0
  120. vispy/glsl/antialias/caps.glsl +67 -0
  121. vispy/glsl/antialias/filled.glsl +50 -0
  122. vispy/glsl/antialias/outline.glsl +40 -0
  123. vispy/glsl/antialias/stroke.glsl +43 -0
  124. vispy/glsl/arrowheads/angle.glsl +99 -0
  125. vispy/glsl/arrowheads/arrowheads.frag +60 -0
  126. vispy/glsl/arrowheads/arrowheads.glsl +12 -0
  127. vispy/glsl/arrowheads/arrowheads.vert +83 -0
  128. vispy/glsl/arrowheads/curved.glsl +48 -0
  129. vispy/glsl/arrowheads/inhibitor.glsl +26 -0
  130. vispy/glsl/arrowheads/stealth.glsl +46 -0
  131. vispy/glsl/arrowheads/triangle.glsl +97 -0
  132. vispy/glsl/arrowheads/util.glsl +13 -0
  133. vispy/glsl/arrows/angle-30.glsl +12 -0
  134. vispy/glsl/arrows/angle-60.glsl +12 -0
  135. vispy/glsl/arrows/angle-90.glsl +12 -0
  136. vispy/glsl/arrows/arrow.frag +39 -0
  137. vispy/glsl/arrows/arrow.vert +49 -0
  138. vispy/glsl/arrows/arrows.glsl +17 -0
  139. vispy/glsl/arrows/common.glsl +187 -0
  140. vispy/glsl/arrows/curved.glsl +63 -0
  141. vispy/glsl/arrows/stealth.glsl +50 -0
  142. vispy/glsl/arrows/triangle-30.glsl +12 -0
  143. vispy/glsl/arrows/triangle-60.glsl +12 -0
  144. vispy/glsl/arrows/triangle-90.glsl +12 -0
  145. vispy/glsl/arrows/util.glsl +98 -0
  146. vispy/glsl/build_spatial_filters.py +660 -0
  147. vispy/glsl/collections/agg-fast-path.frag +20 -0
  148. vispy/glsl/collections/agg-fast-path.vert +78 -0
  149. vispy/glsl/collections/agg-glyph.frag +60 -0
  150. vispy/glsl/collections/agg-glyph.vert +33 -0
  151. vispy/glsl/collections/agg-marker.frag +35 -0
  152. vispy/glsl/collections/agg-marker.vert +48 -0
  153. vispy/glsl/collections/agg-path.frag +55 -0
  154. vispy/glsl/collections/agg-path.vert +166 -0
  155. vispy/glsl/collections/agg-point.frag +21 -0
  156. vispy/glsl/collections/agg-point.vert +35 -0
  157. vispy/glsl/collections/agg-segment.frag +32 -0
  158. vispy/glsl/collections/agg-segment.vert +75 -0
  159. vispy/glsl/collections/marker.frag +38 -0
  160. vispy/glsl/collections/marker.vert +48 -0
  161. vispy/glsl/collections/raw-path.frag +15 -0
  162. vispy/glsl/collections/raw-path.vert +24 -0
  163. vispy/glsl/collections/raw-point.frag +14 -0
  164. vispy/glsl/collections/raw-point.vert +31 -0
  165. vispy/glsl/collections/raw-segment.frag +18 -0
  166. vispy/glsl/collections/raw-segment.vert +26 -0
  167. vispy/glsl/collections/raw-triangle.frag +13 -0
  168. vispy/glsl/collections/raw-triangle.vert +26 -0
  169. vispy/glsl/collections/sdf-glyph-ticks.vert +69 -0
  170. vispy/glsl/collections/sdf-glyph.frag +80 -0
  171. vispy/glsl/collections/sdf-glyph.vert +59 -0
  172. vispy/glsl/collections/tick-labels.vert +71 -0
  173. vispy/glsl/colormaps/autumn.glsl +20 -0
  174. vispy/glsl/colormaps/blues.glsl +20 -0
  175. vispy/glsl/colormaps/color-space.glsl +17 -0
  176. vispy/glsl/colormaps/colormaps.glsl +24 -0
  177. vispy/glsl/colormaps/cool.glsl +20 -0
  178. vispy/glsl/colormaps/fire.glsl +21 -0
  179. vispy/glsl/colormaps/gray.glsl +20 -0
  180. vispy/glsl/colormaps/greens.glsl +20 -0
  181. vispy/glsl/colormaps/hot.glsl +22 -0
  182. vispy/glsl/colormaps/ice.glsl +20 -0
  183. vispy/glsl/colormaps/icefire.glsl +23 -0
  184. vispy/glsl/colormaps/parse.py +40 -0
  185. vispy/glsl/colormaps/reds.glsl +20 -0
  186. vispy/glsl/colormaps/spring.glsl +20 -0
  187. vispy/glsl/colormaps/summer.glsl +20 -0
  188. vispy/glsl/colormaps/user.glsl +22 -0
  189. vispy/glsl/colormaps/util.glsl +41 -0
  190. vispy/glsl/colormaps/wheel.glsl +21 -0
  191. vispy/glsl/colormaps/winter.glsl +20 -0
  192. vispy/glsl/lines/agg.frag +320 -0
  193. vispy/glsl/lines/agg.vert +241 -0
  194. vispy/glsl/markers/arrow.glsl +12 -0
  195. vispy/glsl/markers/asterisk.glsl +16 -0
  196. vispy/glsl/markers/chevron.glsl +14 -0
  197. vispy/glsl/markers/clover.glsl +20 -0
  198. vispy/glsl/markers/club.glsl +31 -0
  199. vispy/glsl/markers/cross.glsl +17 -0
  200. vispy/glsl/markers/diamond.glsl +12 -0
  201. vispy/glsl/markers/disc.glsl +9 -0
  202. vispy/glsl/markers/ellipse.glsl +67 -0
  203. vispy/glsl/markers/hbar.glsl +9 -0
  204. vispy/glsl/markers/heart.glsl +15 -0
  205. vispy/glsl/markers/infinity.glsl +15 -0
  206. vispy/glsl/markers/marker-sdf.frag +74 -0
  207. vispy/glsl/markers/marker-sdf.vert +41 -0
  208. vispy/glsl/markers/marker.frag +36 -0
  209. vispy/glsl/markers/marker.vert +46 -0
  210. vispy/glsl/markers/markers.glsl +24 -0
  211. vispy/glsl/markers/pin.glsl +18 -0
  212. vispy/glsl/markers/ring.glsl +11 -0
  213. vispy/glsl/markers/spade.glsl +28 -0
  214. vispy/glsl/markers/square.glsl +10 -0
  215. vispy/glsl/markers/tag.glsl +11 -0
  216. vispy/glsl/markers/triangle.glsl +14 -0
  217. vispy/glsl/markers/vbar.glsl +9 -0
  218. vispy/glsl/math/circle-through-2-points.glsl +30 -0
  219. vispy/glsl/math/constants.glsl +48 -0
  220. vispy/glsl/math/double.glsl +114 -0
  221. vispy/glsl/math/functions.glsl +20 -0
  222. vispy/glsl/math/point-to-line-distance.glsl +31 -0
  223. vispy/glsl/math/point-to-line-projection.glsl +29 -0
  224. vispy/glsl/math/signed-line-distance.glsl +27 -0
  225. vispy/glsl/math/signed-segment-distance.glsl +30 -0
  226. vispy/glsl/misc/regular-grid.frag +244 -0
  227. vispy/glsl/misc/spatial-filters.frag +1407 -0
  228. vispy/glsl/misc/viewport-NDC.glsl +20 -0
  229. vispy/glsl/transforms/azimuthal-equal-area.glsl +32 -0
  230. vispy/glsl/transforms/azimuthal-equidistant.glsl +38 -0
  231. vispy/glsl/transforms/hammer.glsl +44 -0
  232. vispy/glsl/transforms/identity.glsl +6 -0
  233. vispy/glsl/transforms/identity_forward.glsl +23 -0
  234. vispy/glsl/transforms/identity_inverse.glsl +23 -0
  235. vispy/glsl/transforms/linear-scale.glsl +127 -0
  236. vispy/glsl/transforms/log-scale.glsl +126 -0
  237. vispy/glsl/transforms/mercator-transverse-forward.glsl +40 -0
  238. vispy/glsl/transforms/mercator-transverse-inverse.glsl +40 -0
  239. vispy/glsl/transforms/panzoom.glsl +10 -0
  240. vispy/glsl/transforms/polar.glsl +41 -0
  241. vispy/glsl/transforms/position.glsl +44 -0
  242. vispy/glsl/transforms/power-scale.glsl +139 -0
  243. vispy/glsl/transforms/projection.glsl +7 -0
  244. vispy/glsl/transforms/pvm.glsl +13 -0
  245. vispy/glsl/transforms/rotate.glsl +45 -0
  246. vispy/glsl/transforms/trackball.glsl +15 -0
  247. vispy/glsl/transforms/translate.glsl +35 -0
  248. vispy/glsl/transforms/transverse_mercator.glsl +38 -0
  249. vispy/glsl/transforms/viewport-clipping.glsl +14 -0
  250. vispy/glsl/transforms/viewport-transform.glsl +16 -0
  251. vispy/glsl/transforms/viewport.glsl +50 -0
  252. vispy/glsl/transforms/x.glsl +24 -0
  253. vispy/glsl/transforms/y.glsl +19 -0
  254. vispy/glsl/transforms/z.glsl +14 -0
  255. vispy/io/__init__.py +20 -0
  256. vispy/io/_data/spatial-filters.npy +0 -0
  257. vispy/io/datasets.py +94 -0
  258. vispy/io/image.py +231 -0
  259. vispy/io/mesh.py +122 -0
  260. vispy/io/stl.py +167 -0
  261. vispy/io/tests/__init__.py +0 -0
  262. vispy/io/tests/test_image.py +47 -0
  263. vispy/io/tests/test_io.py +121 -0
  264. vispy/io/wavefront.py +350 -0
  265. vispy/plot/__init__.py +36 -0
  266. vispy/plot/fig.py +58 -0
  267. vispy/plot/plotwidget.py +522 -0
  268. vispy/plot/tests/__init__.py +0 -0
  269. vispy/plot/tests/test_plot.py +46 -0
  270. vispy/scene/__init__.py +43 -0
  271. vispy/scene/cameras/__init__.py +27 -0
  272. vispy/scene/cameras/_base.py +38 -0
  273. vispy/scene/cameras/arcball.py +106 -0
  274. vispy/scene/cameras/base_camera.py +538 -0
  275. vispy/scene/cameras/fly.py +474 -0
  276. vispy/scene/cameras/magnify.py +163 -0
  277. vispy/scene/cameras/panzoom.py +308 -0
  278. vispy/scene/cameras/perspective.py +333 -0
  279. vispy/scene/cameras/tests/__init__.py +0 -0
  280. vispy/scene/cameras/tests/test_cameras.py +27 -0
  281. vispy/scene/cameras/tests/test_link.py +53 -0
  282. vispy/scene/cameras/tests/test_perspective.py +122 -0
  283. vispy/scene/cameras/turntable.py +173 -0
  284. vispy/scene/canvas.py +639 -0
  285. vispy/scene/events.py +85 -0
  286. vispy/scene/node.py +644 -0
  287. vispy/scene/subscene.py +20 -0
  288. vispy/scene/tests/__init__.py +0 -0
  289. vispy/scene/tests/test_canvas.py +119 -0
  290. vispy/scene/tests/test_node.py +142 -0
  291. vispy/scene/tests/test_visuals.py +141 -0
  292. vispy/scene/visuals.py +276 -0
  293. vispy/scene/widgets/__init__.py +18 -0
  294. vispy/scene/widgets/anchor.py +25 -0
  295. vispy/scene/widgets/axis.py +88 -0
  296. vispy/scene/widgets/colorbar.py +176 -0
  297. vispy/scene/widgets/console.py +351 -0
  298. vispy/scene/widgets/grid.py +509 -0
  299. vispy/scene/widgets/label.py +50 -0
  300. vispy/scene/widgets/tests/__init__.py +0 -0
  301. vispy/scene/widgets/tests/test_colorbar.py +47 -0
  302. vispy/scene/widgets/viewbox.py +199 -0
  303. vispy/scene/widgets/widget.py +478 -0
  304. vispy/testing/__init__.py +51 -0
  305. vispy/testing/_runners.py +446 -0
  306. vispy/testing/_testing.py +416 -0
  307. vispy/testing/image_tester.py +473 -0
  308. vispy/testing/rendered_array_tester.py +85 -0
  309. vispy/testing/tests/__init__.py +0 -0
  310. vispy/testing/tests/test_testing.py +20 -0
  311. vispy/util/__init__.py +17 -0
  312. vispy/util/bunch.py +15 -0
  313. vispy/util/check_environment.py +57 -0
  314. vispy/util/config.py +490 -0
  315. vispy/util/dpi/__init__.py +19 -0
  316. vispy/util/dpi/_linux.py +69 -0
  317. vispy/util/dpi/_quartz.py +26 -0
  318. vispy/util/dpi/_win32.py +34 -0
  319. vispy/util/dpi/tests/__init__.py +0 -0
  320. vispy/util/dpi/tests/test_dpi.py +16 -0
  321. vispy/util/eq.py +41 -0
  322. vispy/util/event.py +774 -0
  323. vispy/util/fetching.py +276 -0
  324. vispy/util/filter.py +44 -0
  325. vispy/util/fonts/__init__.py +14 -0
  326. vispy/util/fonts/_freetype.py +73 -0
  327. vispy/util/fonts/_quartz.py +192 -0
  328. vispy/util/fonts/_triage.py +36 -0
  329. vispy/util/fonts/_vispy_fonts.py +20 -0
  330. vispy/util/fonts/_win32.py +105 -0
  331. vispy/util/fonts/data/OpenSans-Bold.ttf +0 -0
  332. vispy/util/fonts/data/OpenSans-BoldItalic.ttf +0 -0
  333. vispy/util/fonts/data/OpenSans-Italic.ttf +0 -0
  334. vispy/util/fonts/data/OpenSans-Regular.ttf +0 -0
  335. vispy/util/fonts/tests/__init__.py +0 -0
  336. vispy/util/fonts/tests/test_font.py +45 -0
  337. vispy/util/fourier.py +69 -0
  338. vispy/util/frozen.py +25 -0
  339. vispy/util/gallery_scraper.py +268 -0
  340. vispy/util/keys.py +91 -0
  341. vispy/util/logs.py +358 -0
  342. vispy/util/osmesa_gl.py +17 -0
  343. vispy/util/profiler.py +135 -0
  344. vispy/util/ptime.py +16 -0
  345. vispy/util/quaternion.py +229 -0
  346. vispy/util/svg/__init__.py +18 -0
  347. vispy/util/svg/base.py +20 -0
  348. vispy/util/svg/color.py +219 -0
  349. vispy/util/svg/element.py +51 -0
  350. vispy/util/svg/geometry.py +478 -0
  351. vispy/util/svg/group.py +66 -0
  352. vispy/util/svg/length.py +81 -0
  353. vispy/util/svg/number.py +25 -0
  354. vispy/util/svg/path.py +332 -0
  355. vispy/util/svg/shapes.py +57 -0
  356. vispy/util/svg/style.py +59 -0
  357. vispy/util/svg/svg.py +40 -0
  358. vispy/util/svg/transform.py +223 -0
  359. vispy/util/svg/transformable.py +28 -0
  360. vispy/util/svg/viewport.py +73 -0
  361. vispy/util/tests/__init__.py +0 -0
  362. vispy/util/tests/test_config.py +58 -0
  363. vispy/util/tests/test_docstring_parameters.py +123 -0
  364. vispy/util/tests/test_emitter_group.py +262 -0
  365. vispy/util/tests/test_event_emitter.py +743 -0
  366. vispy/util/tests/test_fourier.py +35 -0
  367. vispy/util/tests/test_gallery_scraper.py +112 -0
  368. vispy/util/tests/test_import.py +127 -0
  369. vispy/util/tests/test_key.py +22 -0
  370. vispy/util/tests/test_logging.py +45 -0
  371. vispy/util/tests/test_run.py +14 -0
  372. vispy/util/tests/test_transforms.py +42 -0
  373. vispy/util/tests/test_vispy.py +48 -0
  374. vispy/util/transforms.py +201 -0
  375. vispy/util/wrappers.py +155 -0
  376. vispy/version.py +4 -0
  377. vispy/visuals/__init__.py +50 -0
  378. vispy/visuals/_scalable_textures.py +485 -0
  379. vispy/visuals/axis.py +678 -0
  380. vispy/visuals/border.py +208 -0
  381. vispy/visuals/box.py +79 -0
  382. vispy/visuals/collections/__init__.py +30 -0
  383. vispy/visuals/collections/agg_fast_path_collection.py +219 -0
  384. vispy/visuals/collections/agg_path_collection.py +197 -0
  385. vispy/visuals/collections/agg_point_collection.py +52 -0
  386. vispy/visuals/collections/agg_segment_collection.py +142 -0
  387. vispy/visuals/collections/array_list.py +401 -0
  388. vispy/visuals/collections/base_collection.py +482 -0
  389. vispy/visuals/collections/collection.py +253 -0
  390. vispy/visuals/collections/path_collection.py +23 -0
  391. vispy/visuals/collections/point_collection.py +19 -0
  392. vispy/visuals/collections/polygon_collection.py +25 -0
  393. vispy/visuals/collections/raw_path_collection.py +119 -0
  394. vispy/visuals/collections/raw_point_collection.py +113 -0
  395. vispy/visuals/collections/raw_polygon_collection.py +77 -0
  396. vispy/visuals/collections/raw_segment_collection.py +112 -0
  397. vispy/visuals/collections/raw_triangle_collection.py +78 -0
  398. vispy/visuals/collections/segment_collection.py +19 -0
  399. vispy/visuals/collections/triangle_collection.py +16 -0
  400. vispy/visuals/collections/util.py +168 -0
  401. vispy/visuals/colorbar.py +699 -0
  402. vispy/visuals/cube.py +41 -0
  403. vispy/visuals/ellipse.py +163 -0
  404. vispy/visuals/filters/__init__.py +10 -0
  405. vispy/visuals/filters/base_filter.py +242 -0
  406. vispy/visuals/filters/clipper.py +60 -0
  407. vispy/visuals/filters/clipping_planes.py +122 -0
  408. vispy/visuals/filters/color.py +181 -0
  409. vispy/visuals/filters/markers.py +28 -0
  410. vispy/visuals/filters/mesh.py +796 -0
  411. vispy/visuals/filters/picking.py +60 -0
  412. vispy/visuals/filters/tests/__init__.py +3 -0
  413. vispy/visuals/filters/tests/test_primitive_picking_filters.py +70 -0
  414. vispy/visuals/filters/tests/test_wireframe_filter.py +16 -0
  415. vispy/visuals/glsl/__init__.py +1 -0
  416. vispy/visuals/glsl/antialiasing.py +133 -0
  417. vispy/visuals/glsl/color.py +63 -0
  418. vispy/visuals/graphs/__init__.py +1 -0
  419. vispy/visuals/graphs/graph.py +240 -0
  420. vispy/visuals/graphs/layouts/__init__.py +55 -0
  421. vispy/visuals/graphs/layouts/circular.py +49 -0
  422. vispy/visuals/graphs/layouts/force_directed.py +211 -0
  423. vispy/visuals/graphs/layouts/networkx_layout.py +87 -0
  424. vispy/visuals/graphs/layouts/random.py +52 -0
  425. vispy/visuals/graphs/tests/__init__.py +1 -0
  426. vispy/visuals/graphs/tests/test_layouts.py +139 -0
  427. vispy/visuals/graphs/tests/test_networkx_layout.py +47 -0
  428. vispy/visuals/graphs/util.py +120 -0
  429. vispy/visuals/gridlines.py +105 -0
  430. vispy/visuals/gridmesh.py +98 -0
  431. vispy/visuals/histogram.py +58 -0
  432. vispy/visuals/image.py +688 -0
  433. vispy/visuals/image_complex.py +130 -0
  434. vispy/visuals/infinite_line.py +199 -0
  435. vispy/visuals/instanced_mesh.py +152 -0
  436. vispy/visuals/isocurve.py +213 -0
  437. vispy/visuals/isoline.py +241 -0
  438. vispy/visuals/isosurface.py +113 -0
  439. vispy/visuals/line/__init__.py +6 -0
  440. vispy/visuals/line/arrow.py +289 -0
  441. vispy/visuals/line/dash_atlas.py +90 -0
  442. vispy/visuals/line/line.py +545 -0
  443. vispy/visuals/line_plot.py +135 -0
  444. vispy/visuals/linear_region.py +199 -0
  445. vispy/visuals/markers.py +810 -0
  446. vispy/visuals/mesh.py +373 -0
  447. vispy/visuals/mesh_normals.py +159 -0
  448. vispy/visuals/plane.py +54 -0
  449. vispy/visuals/polygon.py +145 -0
  450. vispy/visuals/rectangle.py +196 -0
  451. vispy/visuals/regular_polygon.py +56 -0
  452. vispy/visuals/scrolling_lines.py +197 -0
  453. vispy/visuals/shaders/__init__.py +17 -0
  454. vispy/visuals/shaders/compiler.py +206 -0
  455. vispy/visuals/shaders/expression.py +99 -0
  456. vispy/visuals/shaders/function.py +788 -0
  457. vispy/visuals/shaders/multiprogram.py +145 -0
  458. vispy/visuals/shaders/parsing.py +140 -0
  459. vispy/visuals/shaders/program.py +161 -0
  460. vispy/visuals/shaders/shader_object.py +162 -0
  461. vispy/visuals/shaders/tests/__init__.py +0 -0
  462. vispy/visuals/shaders/tests/test_function.py +486 -0
  463. vispy/visuals/shaders/tests/test_multiprogram.py +78 -0
  464. vispy/visuals/shaders/tests/test_parsing.py +57 -0
  465. vispy/visuals/shaders/variable.py +272 -0
  466. vispy/visuals/spectrogram.py +169 -0
  467. vispy/visuals/sphere.py +80 -0
  468. vispy/visuals/surface_plot.py +192 -0
  469. vispy/visuals/tests/__init__.py +0 -0
  470. vispy/visuals/tests/test_arrows.py +109 -0
  471. vispy/visuals/tests/test_axis.py +120 -0
  472. vispy/visuals/tests/test_collections.py +15 -0
  473. vispy/visuals/tests/test_colorbar.py +179 -0
  474. vispy/visuals/tests/test_colormap.py +97 -0
  475. vispy/visuals/tests/test_ellipse.py +122 -0
  476. vispy/visuals/tests/test_histogram.py +24 -0
  477. vispy/visuals/tests/test_image.py +390 -0
  478. vispy/visuals/tests/test_image_complex.py +36 -0
  479. vispy/visuals/tests/test_infinite_line.py +53 -0
  480. vispy/visuals/tests/test_instanced_mesh.py +50 -0
  481. vispy/visuals/tests/test_isosurface.py +22 -0
  482. vispy/visuals/tests/test_linear_region.py +152 -0
  483. vispy/visuals/tests/test_markers.py +54 -0
  484. vispy/visuals/tests/test_mesh.py +261 -0
  485. vispy/visuals/tests/test_mesh_normals.py +218 -0
  486. vispy/visuals/tests/test_polygon.py +112 -0
  487. vispy/visuals/tests/test_rectangle.py +163 -0
  488. vispy/visuals/tests/test_regular_polygon.py +111 -0
  489. vispy/visuals/tests/test_scalable_textures.py +180 -0
  490. vispy/visuals/tests/test_sdf.py +73 -0
  491. vispy/visuals/tests/test_spectrogram.py +42 -0
  492. vispy/visuals/tests/test_text.py +95 -0
  493. vispy/visuals/tests/test_volume.py +542 -0
  494. vispy/visuals/tests/test_windbarb.py +33 -0
  495. vispy/visuals/text/__init__.py +7 -0
  496. vispy/visuals/text/_sdf_cpu.cpython-312-aarch64-linux-gnu.so +0 -0
  497. vispy/visuals/text/_sdf_cpu.pyx +110 -0
  498. vispy/visuals/text/_sdf_gpu.py +316 -0
  499. vispy/visuals/text/text.py +675 -0
  500. vispy/visuals/transforms/__init__.py +34 -0
  501. vispy/visuals/transforms/_util.py +191 -0
  502. vispy/visuals/transforms/base_transform.py +233 -0
  503. vispy/visuals/transforms/chain.py +300 -0
  504. vispy/visuals/transforms/interactive.py +98 -0
  505. vispy/visuals/transforms/linear.py +564 -0
  506. vispy/visuals/transforms/nonlinear.py +398 -0
  507. vispy/visuals/transforms/tests/__init__.py +0 -0
  508. vispy/visuals/transforms/tests/test_transforms.py +243 -0
  509. vispy/visuals/transforms/transform_system.py +339 -0
  510. vispy/visuals/tube.py +173 -0
  511. vispy/visuals/visual.py +923 -0
  512. vispy/visuals/volume.py +1335 -0
  513. vispy/visuals/windbarb.py +291 -0
  514. vispy/visuals/xyz_axis.py +34 -0
  515. vispy-0.14.0.dist-info/LICENSE.txt +36 -0
  516. vispy-0.14.0.dist-info/METADATA +218 -0
  517. vispy-0.14.0.dist-info/RECORD +519 -0
  518. vispy-0.14.0.dist-info/WHEEL +6 -0
  519. vispy-0.14.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,180 @@
1
+ import numpy as np
2
+ import pytest
3
+
4
+ from vispy.testing import run_tests_if_main
5
+
6
+ from vispy.visuals._scalable_textures import (
7
+ get_default_clim_from_dtype,
8
+ get_default_clim_from_data,
9
+ CPUScaledTextureMixin,
10
+ GPUScaledTextureMixin,
11
+ )
12
+
13
+
14
+ class Stub:
15
+ _ndim = 2
16
+
17
+ def __init__(self, data, **kwargs):
18
+ pass
19
+
20
+ def set_data(self, data, *args, **kwargs):
21
+ self._data = data
22
+
23
+
24
+ class CPUScaledStub(CPUScaledTextureMixin, Stub):
25
+ pass
26
+
27
+
28
+ class GPUScaledStub(GPUScaledTextureMixin, Stub):
29
+
30
+ internalformat = "r32f"
31
+
32
+ def _get_texture_format_for_data(self, data, internalformat=None):
33
+ return None
34
+
35
+
36
+ def test_default_clim():
37
+ ref_data = np.array([10, 5, 15, 25, 15])
38
+
39
+ # f32
40
+ data = ref_data.astype(np.float32)
41
+ clim = get_default_clim_from_dtype(data.dtype)
42
+ assert clim == (0, 1)
43
+ clim = get_default_clim_from_data(data)
44
+ assert clim == (5, 25)
45
+
46
+ # i32
47
+ data = ref_data.astype(np.int32)
48
+ clim = get_default_clim_from_dtype(data.dtype)
49
+ assert clim == (-2**31, 2**31 - 1)
50
+ clim = get_default_clim_from_data(data)
51
+ assert clim == (5, 25)
52
+
53
+ # u8
54
+ data = ref_data.astype(np.uint8)
55
+ clim = get_default_clim_from_dtype(data.dtype)
56
+ assert clim == (0, 255)
57
+ clim = get_default_clim_from_data(data)
58
+ assert clim == (5, 25)
59
+
60
+
61
+ def test_default_clim_non_finite():
62
+
63
+ data = np.array([10, np.nan, 5, 15, 25, 15]).astype(np.float32)
64
+ clim = get_default_clim_from_dtype(data.dtype)
65
+ assert clim == (0, 1)
66
+ clim = get_default_clim_from_data(data)
67
+ assert clim == (5, 25)
68
+
69
+ data = np.array([10, np.inf, 5, 15, 25, 15]).astype(np.float32)
70
+ clim = get_default_clim_from_dtype(data.dtype)
71
+ assert clim == (0, 1)
72
+ clim = get_default_clim_from_data(data)
73
+ assert clim == (5, 25)
74
+
75
+ data = np.array([10, -np.inf, 5, 15, 25, 15]).astype(np.float32)
76
+ clim = get_default_clim_from_dtype(data.dtype)
77
+ assert clim == (0, 1)
78
+ clim = get_default_clim_from_data(data)
79
+ assert clim == (5, 25)
80
+
81
+ data = np.array([np.nan, np.nan, np.nan]).astype(np.float32)
82
+ clim = get_default_clim_from_dtype(data.dtype)
83
+ assert clim == (0, 1)
84
+ clim = get_default_clim_from_data(data)
85
+ assert clim == (0, 0)
86
+
87
+ data = np.array([np.nan, np.inf, -np.inf]).astype(np.float32)
88
+ clim = get_default_clim_from_dtype(data.dtype)
89
+ assert clim == (0, 1)
90
+ clim = get_default_clim_from_data(data)
91
+ assert clim == (0, 0)
92
+
93
+
94
+ def test_clim_handling_cpu():
95
+ ref_data = np.array([[10, 10, 5], [15, 25, 15]])
96
+
97
+ # f32 - auto clim
98
+ st = CPUScaledStub()
99
+ st.set_clim("auto")
100
+ st.scale_and_set_data(ref_data.astype(np.float32))
101
+ assert st.clim == (5, 25)
102
+ assert st.clim_normalized == (0, 1)
103
+ assert np.all(st._data == (ref_data - 5) / 20)
104
+
105
+ # Updating clim keeps data the same if not changing too much
106
+ st.set_clim((0, 20))
107
+ assert st.clim == (0, 20)
108
+ assert st.clim_normalized == (-0.25, 0.75)
109
+ assert np.all(st._data == (ref_data - 5) / 20)
110
+
111
+ # f32 - custom clim
112
+ st = CPUScaledStub()
113
+ st.set_clim((0, 20))
114
+ st.scale_and_set_data(ref_data.astype(np.float32))
115
+ assert st.clim == (0, 20)
116
+ assert st.clim_normalized == (0, 1)
117
+ assert np.all(st._data == ref_data / 20)
118
+
119
+ # f32 - flat clim
120
+ st = CPUScaledStub()
121
+ st.set_clim((10, 10))
122
+ st.scale_and_set_data(ref_data.astype(np.float32))
123
+ assert st.clim == (10, 10)
124
+ assert st.clim_normalized == (0, np.inf)
125
+ # assert np.min(st._data) == 0 - does not matter
126
+
127
+ # f32 - auto clim
128
+ st = CPUScaledStub()
129
+ st.set_clim("auto")
130
+ assert st.clim == "auto"
131
+ pytest.raises(RuntimeError, getattr, st, "clim_normalized")
132
+ st.scale_and_set_data(ref_data.astype(np.float32))
133
+ assert st.clim == (5, 25)
134
+ assert st.clim_normalized == (0, 1)
135
+
136
+
137
+ def test_clim_handling_gpu():
138
+ ref_data = np.array([[10, 10, 5], [15, 25, 15]])
139
+
140
+ # f32 - auto clim
141
+ st = GPUScaledStub()
142
+ st.set_clim("auto")
143
+ st.scale_and_set_data(ref_data.astype(np.float32))
144
+ assert st.clim == (5, 25)
145
+ assert st.clim_normalized == (5, 25)
146
+ assert np.all(st._data == ref_data)
147
+
148
+ # Updating clim keeps data the same if not changing too much
149
+ st.set_clim((0, 20))
150
+ assert st.clim == (0, 20)
151
+ assert st.clim_normalized == (0, 20)
152
+ assert np.all(st._data == ref_data)
153
+
154
+ # f32 - custom clim
155
+ st = GPUScaledStub()
156
+ st.set_clim((0, 20))
157
+ st.scale_and_set_data(ref_data.astype(np.float32))
158
+ assert st.clim == (0, 20)
159
+ assert st.clim_normalized == (0, 20)
160
+ assert np.all(st._data == ref_data)
161
+
162
+ # f32 - flat clim
163
+ st = GPUScaledStub()
164
+ st.set_clim((10, 10))
165
+ st.scale_and_set_data(ref_data.astype(np.float32))
166
+ assert st.clim == (10, 10)
167
+ assert st.clim_normalized == (10, np.inf)
168
+ # assert np.min(st._data) == 0 - does not matter
169
+
170
+ # f32 - auto clim
171
+ st = GPUScaledStub()
172
+ st.set_clim("auto")
173
+ assert st.clim == "auto"
174
+ pytest.raises(RuntimeError, getattr, st, "clim_normalized")
175
+ st.scale_and_set_data(ref_data.astype(np.float32))
176
+ assert st.clim == (5.0, 25.0)
177
+ assert st.clim_normalized == (5.0, 25.0)
178
+
179
+
180
+ run_tests_if_main()
@@ -0,0 +1,73 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+ import gc
5
+
6
+ import numpy as np
7
+ from numpy.testing import assert_allclose
8
+
9
+ from vispy.app import Canvas
10
+ from vispy.visuals.text.text import SDFRendererCPU
11
+ from vispy.visuals.text._sdf_gpu import SDFRendererGPU
12
+ from vispy import gloo
13
+ from vispy.testing import requires_application, run_tests_if_main
14
+
15
+
16
+ @requires_application()
17
+ def test_sdf():
18
+ """Test basic text support - sdf"""
19
+ # test a simple case
20
+ data = (np.array(
21
+ [[0, 0, 0, 0, 0, 0, 0, 0, 0],
22
+ [0, 0, 0, 0, 0, 0, 0, 0, 0],
23
+ [0, 0, 1, 1, 1, 1, 1, 0, 0],
24
+ [0, 0, 1, 1, 1, 1, 1, 0, 0],
25
+ [0, 0, 1, 1, 1, 1, 1, 0, 0],
26
+ [0, 0, 1, 1, 1, 1, 1, 0, 0]]) * 255).astype(np.uint8)
27
+
28
+ # The GPU data at one point were derived this way:
29
+ # gpu = np.array(
30
+ # [[8, 5, 4, 4, 4, 4, 4, 5, 8],
31
+ # [5, 2, 1, 1, 1, 1, 1, 2, 5],
32
+ # [4, 1, 0, 0, 0, 0, 0, 1, 4],
33
+ # [4, 1, 0, -1, -4, -1, 0, 1, 4], # XXX artifact
34
+ # [4, 1, 0, -1, -4, -1, 0, 1, 4],
35
+ # [4, 1, 0, -1, -4, -1, 0, 1, 4]])
36
+ # gpu = 0.5 - (np.sqrt(np.abs(gpu)) * np.sign(gpu)) / 256. * 8
37
+ # gpu = np.round(256 * gpu).astype(np.int)
38
+ #
39
+ # But it's perhaps clearer just to give what will actually be compared:
40
+ gpu = np.array(
41
+ [[105, 110, 112, 112, 112, 112, 112, 110, 105],
42
+ [110, 117, 120, 120, 120, 120, 120, 117, 110],
43
+ [112, 120, 128, 128, 128, 128, 128, 120, 112],
44
+ [112, 120, 128, 136, 144, 136, 128, 120, 112],
45
+ [112, 120, 128, 136, 144, 136, 128, 120, 112],
46
+ [112, 120, 128, 136, 144, 136, 128, 120, 112]])
47
+ cpu = np.array(
48
+ [[0, 0, 0, 0, 0, 0, 0, 0, 0],
49
+ [0, 115, 118, 118, 118, 118, 118, 115, 0],
50
+ [0, 118, 137, 137, 137, 137, 137, 118, 0],
51
+ [0, 118, 137, 143, 143, 143, 137, 118, 0],
52
+ [0, 118, 137, 143, 149, 143, 137, 118, 0],
53
+ [0, 0, 255, 255, 255, 255, 255, 0, 0]])
54
+ # XXX: The GPU and CPU solutions are quite different.
55
+ # It doesn't seem to have much effect on the visualizations but would be
56
+ # good to fix eventually.
57
+
58
+ for Rend, expd in zip((SDFRendererGPU, SDFRendererCPU), (gpu, cpu)):
59
+ with Canvas(size=(100, 100)) as c:
60
+ tex = gloo.Texture2D(data.shape + (3,), format='rgb')
61
+ Rend().render_to_texture(data, tex, (0, 0), data.shape[::-1])
62
+ gloo.set_viewport(0, 0, *data.shape[::-1])
63
+ gloo.util.draw_texture(tex)
64
+ result = gloo.util._screenshot()[:, :, 0].astype(np.int64)
65
+ assert_allclose(result, expd, atol=1,
66
+ err_msg=Rend.__name__)
67
+ del tex, result
68
+ del c
69
+ # Do some garbage collection to make sure backend applications (PyQt5) actually clear things out
70
+ gc.collect()
71
+
72
+
73
+ run_tests_if_main()
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+ import numpy as np
3
+
4
+ from vispy.scene.visuals import Spectrogram
5
+ from vispy.testing import (requires_application, TestingCanvas,
6
+ run_tests_if_main, raises)
7
+ from vispy.testing.image_tester import assert_image_approved
8
+
9
+
10
+ @requires_application()
11
+ def test_spectrogram():
12
+ """Test spectrogram visual"""
13
+ n_fft = 256
14
+ n_freqs = n_fft // 2 + 1
15
+ size = (100, n_freqs)
16
+ with TestingCanvas(size=size) as c:
17
+ np.random.seed(67853498)
18
+ data = np.random.normal(size=n_fft * 100)
19
+ spec = Spectrogram(data, n_fft=n_fft, step=n_fft, window=None,
20
+ color_scale='linear', cmap='grays')
21
+ c.draw_visual(spec)
22
+ # expected = np.zeros(size[::-1] + (3,))
23
+ # expected[0] = 1.
24
+ assert_image_approved("screenshot", "visuals/spectrogram.png")
25
+ freqs = spec.freqs
26
+ assert len(freqs) == n_freqs
27
+ assert freqs[0] == 0
28
+ assert freqs[-1] == 0.5
29
+
30
+ # Try changing all properties
31
+ spec.n_fft = 128
32
+ spec.step = 128
33
+ spec.fs = 2
34
+ spec.window = 'hann'
35
+ spec.normalize = True
36
+ spec.color_scale = 'log'
37
+
38
+ # Check color scale can be only 'log' or 'linear'
39
+ with raises(ValueError):
40
+ spec.color_scale = 'line_log'
41
+
42
+ run_tests_if_main()
@@ -0,0 +1,95 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ import numpy as np
4
+ from numpy.testing import assert_allclose
5
+
6
+ from vispy.scene.visuals import Text
7
+ from vispy.testing import (requires_application, TestingCanvas,
8
+ run_tests_if_main)
9
+ from vispy.testing.image_tester import assert_image_approved
10
+
11
+
12
+ @requires_application()
13
+ def test_text():
14
+ """Test basic text support"""
15
+ with TestingCanvas(bgcolor='w', size=(92, 92), dpi=92) as c:
16
+ pos = [92 // 2] * 2
17
+ text = Text('testing', font_size=20, color='k',
18
+ pos=pos, anchor_x='center', anchor_y='baseline',
19
+ parent=c.scene)
20
+ # Test image created in Illustrator CS5, 1"x1" output @ 92 DPI
21
+ assert_image_approved(c.render(), 'visuals/text1.png')
22
+
23
+ text.text = ['foo', 'bar']
24
+ text.pos = [10, 10] # should auto-replicate
25
+ text.rotation = [180, 270]
26
+ try:
27
+ text.pos = [10]
28
+ except Exception:
29
+ pass
30
+ else:
31
+ raise AssertionError('Exception not raised')
32
+ c.update()
33
+ c.app.process_events()
34
+ text.pos = [[10, 10], [10, 20]]
35
+ text.text = 'foobar'
36
+ c.update()
37
+ c.app.process_events()
38
+
39
+
40
+ @requires_application()
41
+ def test_text_rotation_update():
42
+
43
+ # Regression test for a bug that caused text labels to not be redrawn
44
+ # if the rotation angle was updated
45
+
46
+ with TestingCanvas() as c:
47
+ text = Text('testing', pos=(100, 100), parent=c.scene)
48
+ c.update()
49
+ c.app.process_events()
50
+ assert_allclose(text.shared_program['a_rotation'], 0.)
51
+ text.rotation = 30.
52
+ c.update()
53
+ c.app.process_events()
54
+ assert_allclose(text.shared_program['a_rotation'], np.radians(30.))
55
+
56
+
57
+ @requires_application()
58
+ def test_face_bold_italic():
59
+
60
+ with TestingCanvas() as c:
61
+
62
+ # Check defaults
63
+ text = Text('testing', pos=(100, 100), parent=c.scene)
64
+ assert not text.bold and not text.italic
65
+
66
+ # Check getter properties
67
+ text = Text('testing', pos=(100, 100), bold=True, italic=True, parent=c.scene)
68
+ assert text.bold and text.italic
69
+
70
+ # Check that changing a property changes the font object
71
+ font1 = text._font
72
+ text.bold = False
73
+ font2 = text._font
74
+ assert font1 is not font2
75
+ text.italic = False
76
+ font3 = text._font
77
+ assert font2 is not font3
78
+ text.bold = True
79
+ text.italic = True
80
+ font4 = text._font
81
+ assert font1 is font4
82
+
83
+
84
+ def test_text_depth_test():
85
+ t = Text(depth_test=False)
86
+ assert not t._vshare.gl_state["depth_test"]
87
+
88
+ t = Text(depth_test=True)
89
+ assert t._vshare.gl_state["depth_test"]
90
+
91
+ t = Text() # Default is false
92
+ assert not t._vshare.gl_state["depth_test"]
93
+
94
+
95
+ run_tests_if_main()