vispy 0.15.0__cp313-cp313-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 (521) 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 +1003 -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 +1213 -0
  45. vispy/color/tests/__init__.py +0 -0
  46. vispy/color/tests/test_color.py +378 -0
  47. vispy/conftest.py +12 -0
  48. vispy/ext/__init__.py +0 -0
  49. vispy/ext/cocoapy.py +1522 -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 +162 -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 +700 -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 +594 -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 +568 -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 +1824 -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 +1046 -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 +105 -0
  274. vispy/scene/cameras/base_camera.py +551 -0
  275. vispy/scene/cameras/fly.py +474 -0
  276. vispy/scene/cameras/magnify.py +163 -0
  277. vispy/scene/cameras/panzoom.py +311 -0
  278. vispy/scene/cameras/perspective.py +338 -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 +183 -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 +448 -0
  306. vispy/testing/_testing.py +416 -0
  307. vispy/testing/image_tester.py +494 -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 +32 -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 +21 -0
  377. vispy/visuals/__init__.py +50 -0
  378. vispy/visuals/_scalable_textures.py +487 -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 +162 -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 +801 -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 +161 -0
  430. vispy/visuals/gridmesh.py +98 -0
  431. vispy/visuals/histogram.py +58 -0
  432. vispy/visuals/image.py +701 -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 +819 -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_gridlines.py +30 -0
  477. vispy/visuals/tests/test_histogram.py +24 -0
  478. vispy/visuals/tests/test_image.py +392 -0
  479. vispy/visuals/tests/test_image_complex.py +36 -0
  480. vispy/visuals/tests/test_infinite_line.py +53 -0
  481. vispy/visuals/tests/test_instanced_mesh.py +50 -0
  482. vispy/visuals/tests/test_isosurface.py +22 -0
  483. vispy/visuals/tests/test_linear_region.py +152 -0
  484. vispy/visuals/tests/test_markers.py +54 -0
  485. vispy/visuals/tests/test_mesh.py +261 -0
  486. vispy/visuals/tests/test_mesh_normals.py +218 -0
  487. vispy/visuals/tests/test_polygon.py +112 -0
  488. vispy/visuals/tests/test_rectangle.py +163 -0
  489. vispy/visuals/tests/test_regular_polygon.py +111 -0
  490. vispy/visuals/tests/test_scalable_textures.py +196 -0
  491. vispy/visuals/tests/test_sdf.py +73 -0
  492. vispy/visuals/tests/test_spectrogram.py +42 -0
  493. vispy/visuals/tests/test_surface_plot.py +57 -0
  494. vispy/visuals/tests/test_text.py +95 -0
  495. vispy/visuals/tests/test_volume.py +542 -0
  496. vispy/visuals/tests/test_windbarb.py +33 -0
  497. vispy/visuals/text/__init__.py +7 -0
  498. vispy/visuals/text/_sdf_cpu.cpython-313-aarch64-linux-gnu.so +0 -0
  499. vispy/visuals/text/_sdf_cpu.pyx +112 -0
  500. vispy/visuals/text/_sdf_gpu.py +316 -0
  501. vispy/visuals/text/text.py +675 -0
  502. vispy/visuals/transforms/__init__.py +34 -0
  503. vispy/visuals/transforms/_util.py +191 -0
  504. vispy/visuals/transforms/base_transform.py +233 -0
  505. vispy/visuals/transforms/chain.py +300 -0
  506. vispy/visuals/transforms/interactive.py +98 -0
  507. vispy/visuals/transforms/linear.py +564 -0
  508. vispy/visuals/transforms/nonlinear.py +398 -0
  509. vispy/visuals/transforms/tests/__init__.py +0 -0
  510. vispy/visuals/transforms/tests/test_transforms.py +243 -0
  511. vispy/visuals/transforms/transform_system.py +339 -0
  512. vispy/visuals/tube.py +173 -0
  513. vispy/visuals/visual.py +923 -0
  514. vispy/visuals/volume.py +1366 -0
  515. vispy/visuals/windbarb.py +291 -0
  516. vispy/visuals/xyz_axis.py +34 -0
  517. vispy-0.15.0.dist-info/METADATA +243 -0
  518. vispy-0.15.0.dist-info/RECORD +521 -0
  519. vispy-0.15.0.dist-info/WHEEL +6 -0
  520. vispy-0.15.0.dist-info/licenses/LICENSE.txt +36 -0
  521. vispy-0.15.0.dist-info/top_level.txt +1 -0
vispy/io/wavefront.py ADDED
@@ -0,0 +1,350 @@
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
+ # This module was taken from visvis
5
+ """This module produces functionality to read and write wavefront (.OBJ) files.
6
+
7
+ See `wikipedia <http://en.wikipedia.org/wiki/Wavefront_.obj_file>`_ for more details.
8
+
9
+ The wavefront format is quite powerful and allows a wide variety of surfaces
10
+ to be described.
11
+
12
+ This implementation does only supports mesh stuff, so no nurbs etc. Further,
13
+ material properties are ignored, although this might be implemented later,
14
+
15
+ The classes are written with compatibility of Python3 in mind.
16
+
17
+ """
18
+
19
+ import numpy as np
20
+ import time
21
+ from gzip import GzipFile
22
+ from os import path as op
23
+
24
+ from ..geometry import _calculate_normals
25
+ from ..util import logger
26
+
27
+
28
+ class WavefrontReader(object):
29
+
30
+ def __init__(self, f):
31
+ self._f = f
32
+
33
+ # Original vertices, normals and texture coords.
34
+ # These are not necessarily of the same length.
35
+ self._v = []
36
+ self._vn = []
37
+ self._vt = []
38
+
39
+ # Final vertices, normals and texture coords.
40
+ # All three lists are of the same length, as opengl wants it.
41
+ self._vertices = []
42
+ self._normals = []
43
+ self._texcords = []
44
+
45
+ # The faces, indices to vertex/normal/texcords arrays.
46
+ self._faces = []
47
+
48
+ # Dictionary to keep track of processed face data, so we can
49
+ # convert the original v/vn/vn to the final vertices/normals/texcords.
50
+ self._facemap = {}
51
+
52
+ @classmethod
53
+ def read(cls, fname):
54
+ """Entry point for reading OBJ files.
55
+
56
+ Parameters
57
+ ----------
58
+ fname : str
59
+ The name of the file to read.
60
+
61
+ """
62
+ # Open file
63
+ fmt = op.splitext(fname)[1].lower()
64
+ assert fmt in ('.obj', '.gz')
65
+ opener = open if fmt == '.obj' else GzipFile
66
+ with opener(fname, 'rb') as f:
67
+ try:
68
+ reader = WavefrontReader(f)
69
+ while True:
70
+ reader.readLine()
71
+ except EOFError:
72
+ pass
73
+
74
+ # Done
75
+ t0 = time.time()
76
+ mesh = reader.finish()
77
+ logger.debug('reading mesh took ' +
78
+ str(time.time() - t0) +
79
+ ' seconds')
80
+ return mesh
81
+
82
+ def readLine(self):
83
+ """The method that reads a line and processes it."""
84
+ # Read line
85
+ line = self._f.readline().decode('ascii', 'ignore')
86
+ if not line:
87
+ raise EOFError()
88
+ line = line.strip()
89
+
90
+ if line.startswith('v '):
91
+ # self._vertices.append( *self.readTuple(line) )
92
+ self._v.append(self.readTuple(line))
93
+ elif line.startswith('vt '):
94
+ self._vt.append(self.readTuple(line, 3))
95
+ elif line.startswith('vn '):
96
+ self._vn.append(self.readTuple(line))
97
+ elif line.startswith('f '):
98
+ self._faces.append(self.readFace(line))
99
+ elif line.startswith('#'):
100
+ pass # Comment
101
+ elif line.startswith('mtllib '):
102
+ logger.warning('Notice reading .OBJ: material properties are '
103
+ 'ignored.')
104
+ elif any(line.startswith(x) for x in ('g ', 's ', 'o ', 'usemtl ')):
105
+ pass # Ignore groups and smoothing groups, obj names, material
106
+ elif not line.strip():
107
+ pass
108
+ else:
109
+ logger.warning('Notice reading .OBJ: ignoring %s command.'
110
+ % line.strip())
111
+
112
+ def readTuple(self, line, n=3):
113
+ """Reads a tuple of numbers. e.g. vertices, normals or teture coords."""
114
+ numbers = [num for num in line.split(' ') if num]
115
+ return [float(num) for num in numbers[1:n + 1]]
116
+
117
+ def readFace(self, line):
118
+ """Each face consists of three or more sets of indices. Each set
119
+ consists of 1, 2 or 3 indices to vertices/normals/texcords.
120
+ """
121
+ # Get parts (skip first)
122
+ indexSets = [num for num in line.split(' ') if num][1:]
123
+
124
+ final_face = []
125
+ for indexSet in indexSets:
126
+
127
+ # Did we see this exact index earlier? If so, it's easy
128
+ final_index = self._facemap.get(indexSet)
129
+ if final_index is not None:
130
+ final_face.append(final_index)
131
+ continue
132
+
133
+ # If not, we need to sync the vertices/normals/texcords ...
134
+
135
+ # Get and store final index
136
+ final_index = len(self._vertices)
137
+ final_face.append(final_index)
138
+ self._facemap[indexSet] = final_index
139
+
140
+ # What indices were given?
141
+ indices = [i for i in indexSet.split('/')]
142
+
143
+ # Store new set of vertex/normal/texcords.
144
+ # If there is a single face that does not specify the texcord
145
+ # index, the texcords are ignored. Likewise for the normals.
146
+ if True:
147
+ vertex_index = self._absint(indices[0], len(self._v))
148
+ self._vertices.append(self._v[vertex_index])
149
+ if self._texcords is not None:
150
+ if len(indices) > 1 and indices[1]:
151
+ texcord_index = self._absint(indices[1], len(self._vt))
152
+ self._texcords.append(self._vt[texcord_index])
153
+ else:
154
+ if self._texcords:
155
+ logger.warning('Ignoring texture coordinates because '
156
+ 'it is not specified for all faces.')
157
+ self._texcords = None
158
+ if self._normals is not None:
159
+ if len(indices) > 2 and indices[2]:
160
+ normal_index = self._absint(indices[2], len(self._vn))
161
+ self._normals.append(self._vn[normal_index])
162
+ else:
163
+ if self._normals:
164
+ logger.warning('Ignoring normals because it is not '
165
+ 'specified for all faces.')
166
+ self._normals = None
167
+
168
+ # Check face
169
+ if self._faces and len(self._faces[0]) != len(final_face):
170
+ raise RuntimeError(
171
+ 'Vispy requires that all faces are either triangles or quads.')
172
+
173
+ # Done
174
+ return final_face
175
+
176
+ def _absint(self, i, ref):
177
+ i = int(i)
178
+ if i > 0:
179
+ return i - 1
180
+ else:
181
+ return ref + i
182
+
183
+ def _calculate_normals(self):
184
+ vertices, faces = self._vertices, self._faces
185
+ if faces is None:
186
+ # ensure it's always 2D so we can use our methods
187
+ faces = np.arange(0, vertices.size, dtype=np.uint32)[:, np.newaxis]
188
+ normals = _calculate_normals(vertices, faces)
189
+ return normals
190
+
191
+ def finish(self):
192
+ """Converts gathere lists to numpy arrays and creates
193
+ BaseMesh instance.
194
+ """
195
+ self._vertices = np.array(self._vertices, 'float32')
196
+ if self._faces:
197
+ self._faces = np.array(self._faces, 'uint32')
198
+ else:
199
+ # Use vertices only
200
+ self._vertices = np.array(self._v, 'float32')
201
+ self._faces = None
202
+ if self._normals:
203
+ self._normals = np.array(self._normals, 'float32')
204
+ else:
205
+ self._normals = self._calculate_normals()
206
+ if self._texcords:
207
+ self._texcords = np.array(self._texcords, 'float32')
208
+ else:
209
+ self._texcords = None
210
+
211
+ return self._vertices, self._faces, self._normals, self._texcords
212
+
213
+
214
+ class WavefrontWriter(object):
215
+
216
+ def __init__(self, f):
217
+ self._f = f
218
+
219
+ @classmethod
220
+ def write(cls, fname, vertices, faces, normals,
221
+ texcoords, name='', reshape_faces=True):
222
+ """This classmethod is the entry point for writing mesh data to OBJ.
223
+
224
+ Parameters
225
+ ----------
226
+ fname : string
227
+ The filename to write to. Must end with ".obj" or ".gz".
228
+ vertices : numpy array
229
+ The vertex data
230
+ faces : numpy array
231
+ The face data
232
+ texcoords : numpy array
233
+ The texture coordinate per vertex
234
+ name : str
235
+ The name of the object (e.g. 'teapot')
236
+ reshape_faces : bool
237
+ Reshape the `faces` array to (Nf, 3). Set to `False`
238
+ if you need to write a mesh with non triangular faces.
239
+ """
240
+ # Open file
241
+ fmt = op.splitext(fname)[1].lower()
242
+ if fmt not in ('.obj', '.gz'):
243
+ raise ValueError('Filename must end with .obj or .gz, not "%s"'
244
+ % (fmt,))
245
+ opener = open if fmt == '.obj' else GzipFile
246
+ f = opener(fname, 'wb')
247
+ try:
248
+ writer = WavefrontWriter(f)
249
+ writer.writeMesh(vertices, faces, normals,
250
+ texcoords, name, reshape_faces=reshape_faces)
251
+ except EOFError:
252
+ pass
253
+ finally:
254
+ f.close()
255
+
256
+ def writeLine(self, text):
257
+ """Simple writeLine function to write a line of code to the file.
258
+ The encoding is done here, and a newline character is added.
259
+ """
260
+ text += '\n'
261
+ self._f.write(text.encode('ascii'))
262
+
263
+ def writeTuple(self, val, what):
264
+ """Writes a tuple of numbers (on one line)."""
265
+ # Limit to three values. so RGBA data drops the alpha channel
266
+ # Format can handle up to 3 texcords
267
+ val = val[:3]
268
+ # Make string
269
+ val = ' '.join([str(v) for v in val])
270
+ # Write line
271
+ self.writeLine('%s %s' % (what, val))
272
+
273
+ def writeFace(self, val, what='f'):
274
+ """Write the face info to the net line."""
275
+ # OBJ counts from 1
276
+ val = [v + 1 for v in val]
277
+ # Make string
278
+ if self._hasValues and self._hasNormals:
279
+ val = ' '.join(['%i/%i/%i' % (v, v, v) for v in val])
280
+ elif self._hasNormals:
281
+ val = ' '.join(['%i//%i' % (v, v) for v in val])
282
+ elif self._hasValues:
283
+ val = ' '.join(['%i/%i' % (v, v) for v in val])
284
+ else:
285
+ val = ' '.join(['%i' % v for v in val])
286
+ # Write line
287
+ self.writeLine('%s %s' % (what, val))
288
+
289
+ def writeMesh(self, vertices, faces, normals, values,
290
+ name='', reshape_faces=True):
291
+ """Write the given mesh instance."""
292
+ # Store properties
293
+ self._hasNormals = normals is not None
294
+ self._hasValues = values is not None
295
+ self._hasFaces = faces is not None
296
+
297
+ # Get faces and number of vertices
298
+ if faces is None:
299
+ faces = np.arange(len(vertices))
300
+ reshape_faces = True
301
+
302
+ if reshape_faces:
303
+ Nfaces = faces.size // 3
304
+ faces = faces.reshape((Nfaces, 3))
305
+ else:
306
+ is_triangular = np.array([len(f) == 3
307
+ for f in faces])
308
+ if not(np.all(is_triangular)):
309
+ logger.warning('''Faces doesn't appear to be triangular,
310
+ be advised the file cannot be read back in vispy''')
311
+ # Number of vertices
312
+ N = vertices.shape[0]
313
+
314
+ # Get string with stats
315
+ stats = []
316
+ stats.append('%i vertices' % N)
317
+ if self._hasValues:
318
+ stats.append('%i texcords' % N)
319
+ else:
320
+ stats.append('no texcords')
321
+ if self._hasNormals:
322
+ stats.append('%i normals' % N)
323
+ else:
324
+ stats.append('no normals')
325
+ stats.append('%i faces' % faces.shape[0])
326
+
327
+ # Write header
328
+ self.writeLine('# Wavefront OBJ file')
329
+ self.writeLine('# Created by vispy.')
330
+ self.writeLine('#')
331
+ if name:
332
+ self.writeLine('# object %s' % name)
333
+ else:
334
+ self.writeLine('# unnamed object')
335
+ self.writeLine('# %s' % ', '.join(stats))
336
+ self.writeLine('')
337
+
338
+ # Write data
339
+ if True:
340
+ for i in range(N):
341
+ self.writeTuple(vertices[i], 'v')
342
+ if self._hasNormals:
343
+ for i in range(N):
344
+ self.writeTuple(normals[i], 'vn')
345
+ if self._hasValues:
346
+ for i in range(N):
347
+ self.writeTuple(values[i], 'vt')
348
+ if True:
349
+ for i in range(faces.shape[0]):
350
+ self.writeFace(faces[i])
vispy/plot/__init__.py ADDED
@@ -0,0 +1,36 @@
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
+ """
5
+ This module provides functions for displaying data from a command-line
6
+ interface.
7
+
8
+ **NOTE**: This module is still experimental, and under development.
9
+ It currently lacks axes, but that is a high-priority target for
10
+ the next release.
11
+
12
+ Usage
13
+ -----
14
+ To use `vispy.plot` typically the main class `Fig` is first instantiated::
15
+
16
+ >>> from vispy.plot import Fig
17
+ >>> fig = Fig()
18
+
19
+ And then `PlotWidget` instances are automatically created by accessing
20
+ the ``fig`` instance::
21
+
22
+ >>> ax_left = fig[0, 0]
23
+ >>> ax_right = fig[0, 1]
24
+
25
+ Then plots are accomplished via methods of the `PlotWidget` instances::
26
+
27
+ >>> import numpy as np
28
+ >>> data = np.random.randn(2, 10)
29
+ >>> ax_left.plot(data)
30
+ >>> ax_right.histogram(data[1])
31
+
32
+ """
33
+
34
+ from .fig import Fig # noqa
35
+ from .plotwidget import PlotWidget # noqa
36
+ from ..scene import * # noqa
vispy/plot/fig.py ADDED
@@ -0,0 +1,58 @@
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
+
5
+ from ..scene import SceneCanvas
6
+ from .plotwidget import PlotWidget
7
+
8
+
9
+ class Fig(SceneCanvas):
10
+ """Create a figure window
11
+
12
+ Parameters
13
+ ----------
14
+ bgcolor : instance of Color
15
+ Color to use for the background.
16
+ size : tuple
17
+ Size of the figure window in pixels.
18
+ show : bool
19
+ If True, show the window.
20
+ **kwargs : dict
21
+ Keywoard arguments to pass to `SceneCanvas` base class.
22
+
23
+ Notes
24
+ -----
25
+ You can create a Figure, PlotWidget, and diagonal line plot like this::
26
+
27
+ >>> from vispy.plot import Fig
28
+ >>> fig = Fig()
29
+ >>> ax = fig[0, 0] # this creates a PlotWidget
30
+ >>> ax.plot([[0, 1], [1, 0]])
31
+
32
+ See the gallery for many other examples.
33
+
34
+ See Also
35
+ --------
36
+ PlotWidget : the axis widget for plotting
37
+ SceneCanvas : the super class
38
+ """
39
+
40
+ def __init__(self, bgcolor='w', size=(800, 600), show=True,
41
+ keys='interactive', **kwargs):
42
+ self._plot_widgets = []
43
+ self._grid = None # initialize before the freeze occurs
44
+ super(Fig, self).__init__(bgcolor=bgcolor, keys=keys,
45
+ show=show, size=size, **kwargs)
46
+ self._grid = self.central_widget.add_grid()
47
+ self._grid._default_class = PlotWidget
48
+
49
+ @property
50
+ def plot_widgets(self):
51
+ """List of the associated PlotWidget instances"""
52
+ return tuple(self._plot_widgets)
53
+
54
+ def __getitem__(self, idxs):
55
+ """Get an axis"""
56
+ pw = self._grid.__getitem__(idxs)
57
+ self._plot_widgets += [pw]
58
+ return pw