vispy 0.15.0__cp313-cp313-win_amd64.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.cp313-win_amd64.pyd +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 +5 -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
@@ -0,0 +1,291 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+ """Windbarb Visual and shader definitions."""
7
+
8
+ import numpy as np
9
+
10
+ from vispy.color import ColorArray
11
+ from vispy.gloo import VertexBuffer
12
+ from vispy.visuals.shaders import Variable
13
+ from vispy.visuals.visual import Visual
14
+
15
+ _VERTEX_SHADER = """
16
+ uniform float u_antialias;
17
+ uniform float u_px_scale;
18
+ uniform float u_scale;
19
+
20
+ attribute vec3 a_position;
21
+ attribute vec2 a_wind;
22
+ attribute vec4 a_fg_color;
23
+ attribute vec4 a_bg_color;
24
+ attribute float a_edgewidth;
25
+ attribute float a_size;
26
+ attribute float a_trig;
27
+
28
+ varying vec4 v_fg_color;
29
+ varying vec4 v_bg_color;
30
+ varying vec2 v_wind;
31
+ varying float v_trig;
32
+ varying float v_edgewidth;
33
+ varying float v_antialias;
34
+
35
+ void main (void) {
36
+ $v_size = a_size * u_px_scale * u_scale;
37
+ v_edgewidth = a_edgewidth * float(u_px_scale);
38
+ v_wind = a_wind.xy;
39
+ v_trig = a_trig;
40
+ v_antialias = u_antialias;
41
+ v_fg_color = a_fg_color;
42
+ v_bg_color = a_bg_color;
43
+ gl_Position = $transform(vec4(a_position,1.0));
44
+ float edgewidth = max(v_edgewidth, 1.0);
45
+ gl_PointSize = ($v_size) + 4.*(edgewidth + 1.5*v_antialias);
46
+ }
47
+ """
48
+
49
+ _FRAGMENT_SHADER = """
50
+ #include "math/constants.glsl"
51
+ #include "math/signed-segment-distance.glsl"
52
+ #include "antialias/antialias.glsl"
53
+ varying vec4 v_fg_color;
54
+ varying vec4 v_bg_color;
55
+ varying vec2 v_wind;
56
+ varying float v_trig;
57
+ varying float v_edgewidth;
58
+ varying float v_antialias;
59
+
60
+ // SDF-Triangle by @rougier
61
+ // https://github.com/rougier/python-opengl/blob/master/code/chapter-06/SDF-triangle.py
62
+ float sdf_triangle(vec2 p, vec2 p0, vec2 p1, vec2 p2)
63
+ {
64
+ vec2 e0 = p1 - p0;
65
+ vec2 e1 = p2 - p1;
66
+ vec2 e2 = p0 - p2;
67
+ vec2 v0 = p - p0;
68
+ vec2 v1 = p - p1;
69
+ vec2 v2 = p - p2;
70
+ vec2 pq0 = v0 - e0*clamp( dot(v0,e0)/dot(e0,e0), 0.0, 1.0 );
71
+ vec2 pq1 = v1 - e1*clamp( dot(v1,e1)/dot(e1,e1), 0.0, 1.0 );
72
+ vec2 pq2 = v2 - e2*clamp( dot(v2,e2)/dot(e2,e2), 0.0, 1.0 );
73
+ float s = sign( e0.x*e2.y - e0.y*e2.x );
74
+ vec2 d = min( min( vec2( dot( pq0, pq0 ), s*(v0.x*e0.y-v0.y*e0.x) ),
75
+ vec2( dot( pq1, pq1 ), s*(v1.x*e1.y-v1.y*e1.x) )),
76
+ vec2( dot( pq2, pq2 ), s*(v2.x*e2.y-v2.y*e2.x) ));
77
+ return -sqrt(d.x)*sign(d.y);
78
+ }
79
+
80
+ void main()
81
+ {
82
+ // Discard plotting marker body and edge if zero-size
83
+ if ($v_size <= 0.)
84
+ discard;
85
+
86
+ float edgewidth = max(v_edgewidth, 1.0);
87
+ float linewidth = max(v_edgewidth, 1.0);
88
+ float edgealphafactor = min(v_edgewidth, 1.0);
89
+
90
+ float size = $v_size + 4.*(edgewidth + 1.5*v_antialias);
91
+ // factor 6 for acute edge angles that need room as for star marker
92
+
93
+ vec2 wind = v_wind;
94
+
95
+ if (v_trig > 0.)
96
+ {
97
+ float u = wind.x * cos(radians(wind.y));
98
+ float v = wind.x * sin(radians(wind.y));
99
+ wind = vec2(u, v);
100
+ }
101
+
102
+ // knots to m/s
103
+ wind *= 2.;
104
+
105
+ // normalized distance
106
+ float dx = 0.5;
107
+ // normalized center point
108
+ vec2 O = vec2(dx);
109
+ // normalized x-component
110
+ vec2 X = normalize(wind) * dx / M_SQRT2 / 1.1 * vec2(1, -1);
111
+ // normalized y-component
112
+ // here the barb can be mirrored for southern earth * (vec2(1., -1.)
113
+ //vec2 Y = X.yx * vec2(1., -1.); // southern hemisphere
114
+ vec2 Y = X.yx * vec2(-1., 1.); // northern hemisphere
115
+ // PointCoordinate
116
+ vec2 P = gl_PointCoord;
117
+
118
+ // calculate barb items
119
+ float speed = length(wind);
120
+ int flag = int(floor(speed / 50.));
121
+ speed -= float (50 * flag);
122
+ int longbarb = int(floor(speed / 10.));
123
+ speed -= float (longbarb * 10);
124
+ int shortbarb = int(floor(speed / 5.));
125
+ int calm = shortbarb + longbarb + flag;
126
+
127
+ // starting distance
128
+ float r;
129
+ // calm, plot circles
130
+ if (calm == 0)
131
+ {
132
+ r = abs(length(O-P)- dx * 0.2);
133
+ r = min(r, abs(length(O-P)- dx * 0.1));
134
+ }
135
+ else
136
+ {
137
+ // plot shaft
138
+ r = segment_distance(P, O, O-X);
139
+ float pos = 1.;
140
+
141
+ // plot flag(s)
142
+ while(flag >= 1)
143
+ {
144
+ r = min(r, sdf_triangle(P, O-X*pos, O-X*pos-X*.4-Y*.4, O-X*pos-X*.4));
145
+ flag -= 1;
146
+ pos -= 0.15;
147
+ }
148
+ // plot longbarb(s)
149
+ while(longbarb >= 1)
150
+ {
151
+ r = min(r, segment_distance(P, O-X*pos, O-X*pos-X*.4-Y*.4));
152
+ longbarb -= 1;
153
+ pos -= 0.15;
154
+ }
155
+ // plot shortbarb
156
+ while(shortbarb >= 1)
157
+ {
158
+ if (pos == 1.0)
159
+ pos -= 0.15;
160
+ r = min(r, segment_distance(P, O-X*pos, O-X*pos-X*.2-Y*.2));
161
+ shortbarb -= 1;
162
+ pos -= 0.15;
163
+ }
164
+ }
165
+
166
+ // apply correction for size
167
+ r *= size;
168
+
169
+ vec4 edgecolor = vec4(v_fg_color.rgb, edgealphafactor*v_fg_color.a);
170
+
171
+ if (r > 0.5 * v_edgewidth + v_antialias)
172
+ {
173
+ // out of the marker (beyond the outer edge of the edge
174
+ // including transition zone due to antialiasing)
175
+ discard;
176
+ }
177
+
178
+ gl_FragColor = filled(r, edgewidth, v_antialias, edgecolor);
179
+ }
180
+ """
181
+
182
+
183
+ class WindbarbVisual(Visual):
184
+ """Visual displaying windbarbs."""
185
+
186
+ _shaders = {
187
+ 'vertex': _VERTEX_SHADER,
188
+ 'fragment': _FRAGMENT_SHADER,
189
+ }
190
+
191
+ def __init__(self, **kwargs):
192
+ self._vbo = VertexBuffer()
193
+ self._v_size_var = Variable('varying float v_size')
194
+ self._marker_fun = None
195
+ self._data = None
196
+ Visual.__init__(self, vcode=self._shaders['vertex'], fcode=self._shaders['fragment'])
197
+ self.shared_program.vert['v_size'] = self._v_size_var
198
+ self.shared_program.frag['v_size'] = self._v_size_var
199
+ self.set_gl_state(depth_test=True, blend=True,
200
+ blend_func=('src_alpha', 'one_minus_src_alpha'))
201
+ self._draw_mode = 'points'
202
+ if len(kwargs) > 0:
203
+ self.set_data(**kwargs)
204
+ self.freeze()
205
+
206
+ def set_data(self, pos=None, wind=None, trig=True, size=50.,
207
+ antialias=1., edge_width=1., edge_color='black',
208
+ face_color='white'):
209
+ """Set the data used to display this visual.
210
+
211
+ Parameters
212
+ ----------
213
+ pos : array
214
+ The array of locations to display each windbarb.
215
+ wind : array
216
+ The array of wind vector components to display each windbarb.
217
+ in m/s. For knots divide by two.
218
+ trig : bool
219
+ True - wind contains (mag, ang)
220
+ False - wind contains (u, v)
221
+ defaults to True
222
+ size : float or array
223
+ The windbarb size in px.
224
+ antialias : float
225
+ The antialiased area (in pixels).
226
+ edge_width : float | None
227
+ The width of the windbarb outline in pixels.
228
+ edge_color : Color | ColorArray
229
+ The color used to draw each symbol outline.
230
+ face_color : Color | ColorArray
231
+ The color used to draw each symbol interior.
232
+ """
233
+ assert (isinstance(pos, np.ndarray) and
234
+ pos.ndim == 2 and pos.shape[1] in (2, 3))
235
+ assert (isinstance(wind, np.ndarray) and
236
+ pos.ndim == 2 and pos.shape[1] == 2)
237
+ if edge_width < 0:
238
+ raise ValueError('edge_width cannot be negative')
239
+
240
+ # since the windbarb starts in the fragment center,
241
+ # we need to multiply by 2 for correct length
242
+ size *= 2
243
+
244
+ edge_color = ColorArray(edge_color).rgba
245
+ if len(edge_color) == 1:
246
+ edge_color = edge_color[0]
247
+
248
+ face_color = ColorArray(face_color).rgba
249
+ if len(face_color) == 1:
250
+ face_color = face_color[0]
251
+
252
+ n = len(pos)
253
+ data = np.zeros(n, dtype=[('a_position', np.float32, 3),
254
+ ('a_wind', np.float32, 2),
255
+ ('a_trig', np.float32, 0),
256
+ ('a_fg_color', np.float32, 4),
257
+ ('a_bg_color', np.float32, 4),
258
+ ('a_size', np.float32),
259
+ ('a_edgewidth', np.float32)])
260
+ data['a_fg_color'] = edge_color
261
+ data['a_bg_color'] = face_color
262
+ data['a_edgewidth'] = edge_width
263
+ data['a_position'][:, :pos.shape[1]] = pos
264
+ data['a_wind'][:, :wind.shape[1]] = wind
265
+ if trig:
266
+ data['a_trig'] = 1.
267
+ else:
268
+ data['a_trig'] = 0.
269
+ data['a_size'] = size
270
+ self.shared_program['u_antialias'] = antialias
271
+ self._data = data
272
+ self._vbo.set_data(data)
273
+ self.shared_program.bind(self._vbo)
274
+ self.update()
275
+
276
+ def _prepare_transforms(self, view):
277
+ xform = view.transforms.get_transform()
278
+ view.view_program.vert['transform'] = xform
279
+
280
+ def _prepare_draw(self, view):
281
+ view.view_program['u_px_scale'] = view.transforms.pixel_scale
282
+ view.view_program['u_scale'] = 1
283
+
284
+ def _compute_bounds(self, axis, view):
285
+ pos = self._data['a_position']
286
+ if pos is None:
287
+ return None
288
+ if pos.shape[1] > axis:
289
+ return (pos[:, axis].min(), pos[:, axis].max())
290
+ else:
291
+ return (0, 0)
@@ -0,0 +1,34 @@
1
+
2
+ import numpy as np
3
+
4
+ from .line import LineVisual
5
+
6
+
7
+ class XYZAxisVisual(LineVisual):
8
+ """
9
+ Simple 3D axis for indicating coordinate system orientation. Axes are
10
+ x=red, y=green, z=blue.
11
+ """
12
+
13
+ def __init__(self, **kwargs):
14
+ pos = np.array([[0, 0, 0],
15
+ [1, 0, 0],
16
+ [0, 0, 0],
17
+ [0, 1, 0],
18
+ [0, 0, 0],
19
+ [0, 0, 1]])
20
+ color = np.array([[1, 0, 0, 1],
21
+ [1, 0, 0, 1],
22
+ [0, 1, 0, 1],
23
+ [0, 1, 0, 1],
24
+ [0, 0, 1, 1],
25
+ [0, 0, 1, 1]])
26
+ connect = 'segments'
27
+ method = 'gl'
28
+
29
+ kwargs.setdefault('pos', pos)
30
+ kwargs.setdefault('color', color)
31
+ kwargs.setdefault('connect', connect)
32
+ kwargs.setdefault('method', method)
33
+
34
+ LineVisual.__init__(self, **kwargs)
@@ -0,0 +1,243 @@
1
+ Metadata-Version: 2.4
2
+ Name: vispy
3
+ Version: 0.15.0
4
+ Summary: Interactive visualization in Python
5
+ Home-page: http://vispy.org
6
+ Download-URL: https://pypi.python.org/pypi/vispy
7
+ Author: Vispy contributors
8
+ Author-email: vispy@googlegroups.com
9
+ License: BSD-3-Clause
10
+ Keywords: visualization,OpenGl,ES,medical,imaging,3D,plotting,numpy,bigdata,ipython,jupyter,widgets
11
+ Platform: any
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Intended Audience :: Education
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Topic :: Scientific/Engineering :: Visualization
17
+ Classifier: License :: OSI Approved :: BSD License
18
+ Classifier: Operating System :: MacOS :: MacOS X
19
+ Classifier: Operating System :: Microsoft :: Windows
20
+ Classifier: Operating System :: POSIX
21
+ Classifier: Programming Language :: Python
22
+ Classifier: Programming Language :: Python :: 3.9
23
+ Classifier: Programming Language :: Python :: 3.10
24
+ Classifier: Programming Language :: Python :: 3.11
25
+ Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Framework :: IPython
27
+ Provides: vispy
28
+ Requires-Python: >=3.9
29
+ Description-Content-Type: text/x-rst
30
+ License-File: LICENSE.txt
31
+ Requires-Dist: numpy
32
+ Requires-Dist: freetype-py
33
+ Requires-Dist: hsluv
34
+ Requires-Dist: kiwisolver
35
+ Requires-Dist: packaging
36
+ Provides-Extra: ipython-static
37
+ Requires-Dist: ipython; extra == "ipython-static"
38
+ Provides-Extra: pyglet
39
+ Requires-Dist: pyglet>=1.2; extra == "pyglet"
40
+ Provides-Extra: pyqt5
41
+ Requires-Dist: pyqt5; extra == "pyqt5"
42
+ Provides-Extra: pyqt6
43
+ Requires-Dist: pyqt6; extra == "pyqt6"
44
+ Provides-Extra: pyside
45
+ Requires-Dist: PySide; extra == "pyside"
46
+ Provides-Extra: pyside2
47
+ Requires-Dist: PySide2; extra == "pyside2"
48
+ Provides-Extra: pyside6
49
+ Requires-Dist: PySide6; extra == "pyside6"
50
+ Provides-Extra: glfw
51
+ Requires-Dist: glfw; extra == "glfw"
52
+ Provides-Extra: sdl2
53
+ Requires-Dist: PySDL2; extra == "sdl2"
54
+ Provides-Extra: wx
55
+ Requires-Dist: wxPython; extra == "wx"
56
+ Provides-Extra: tk
57
+ Requires-Dist: pyopengltk; extra == "tk"
58
+ Provides-Extra: doc
59
+ Requires-Dist: pydata-sphinx-theme; extra == "doc"
60
+ Requires-Dist: numpydoc; extra == "doc"
61
+ Requires-Dist: sphinxcontrib-apidoc; extra == "doc"
62
+ Requires-Dist: sphinx-gallery; extra == "doc"
63
+ Requires-Dist: myst-parser; extra == "doc"
64
+ Requires-Dist: pillow; extra == "doc"
65
+ Requires-Dist: pytest; extra == "doc"
66
+ Requires-Dist: pyopengl; extra == "doc"
67
+ Provides-Extra: io
68
+ Requires-Dist: meshio; extra == "io"
69
+ Requires-Dist: Pillow; extra == "io"
70
+ Provides-Extra: test
71
+ Requires-Dist: pytest; extra == "test"
72
+ Requires-Dist: pytest-sugar; extra == "test"
73
+ Requires-Dist: meshio; extra == "test"
74
+ Requires-Dist: pillow; extra == "test"
75
+ Requires-Dist: sphinx_gallery; extra == "test"
76
+ Requires-Dist: imageio; extra == "test"
77
+ Dynamic: author
78
+ Dynamic: author-email
79
+ Dynamic: classifier
80
+ Dynamic: description
81
+ Dynamic: description-content-type
82
+ Dynamic: download-url
83
+ Dynamic: home-page
84
+ Dynamic: keywords
85
+ Dynamic: license
86
+ Dynamic: license-file
87
+ Dynamic: platform
88
+ Dynamic: provides
89
+ Dynamic: provides-extra
90
+ Dynamic: requires-dist
91
+ Dynamic: requires-python
92
+ Dynamic: summary
93
+
94
+ VisPy: interactive scientific visualization in Python
95
+ -----------------------------------------------------
96
+
97
+ Main website: http://vispy.org
98
+
99
+ |Build Status| |Coverage Status| |Zenodo Link| |Contributor Covenant|
100
+
101
+ ----
102
+
103
+ VisPy is a **high-performance interactive 2D/3D data visualization
104
+ library**. VisPy leverages the computational power of modern **Graphics
105
+ Processing Units (GPUs)** through the **OpenGL** library to display very
106
+ large datasets. Applications of VisPy include:
107
+
108
+ - High-quality interactive scientific plots with millions of points.
109
+ - Direct visualization of real-time data.
110
+ - Fast interactive visualization of 3D models (meshes, volume
111
+ rendering).
112
+ - OpenGL visualization demos.
113
+ - Scientific GUIs with fast, scalable visualization widgets (`Qt <http://www.qt.io>`__ or
114
+ `IPython notebook <http://ipython.org/notebook.html>`__ with WebGL).
115
+
116
+ Releases
117
+ --------
118
+
119
+ See `CHANGELOG.md <./CHANGELOG.md>`_.
120
+
121
+ Announcements
122
+ -------------
123
+
124
+ See the `VisPy Website <https://vispy.org/news.html>`_.
125
+
126
+ Using VisPy
127
+ -----------
128
+
129
+ VisPy is a young library under heavy development at this time. It
130
+ targets two categories of users:
131
+
132
+ 1. **Users knowing OpenGL**, or willing to learn OpenGL, who want to
133
+ create beautiful and fast interactive 2D/3D visualizations in Python
134
+ as easily as possible.
135
+ 2. **Scientists without any knowledge of OpenGL**, who are seeking a
136
+ high-level, high-performance plotting toolkit.
137
+
138
+ If you're in the first category, you can already start using VisPy.
139
+ VisPy offers a Pythonic, NumPy-aware, user-friendly interface for OpenGL
140
+ ES 2.0 called **gloo**. You can focus on writing your GLSL code instead
141
+ of dealing with the complicated OpenGL API - VisPy takes care of that
142
+ automatically for you.
143
+
144
+ If you're in the second category, we're starting to build experimental
145
+ high-level plotting interfaces. Notably, VisPy now ships a very basic
146
+ and experimental OpenGL backend for matplotlib.
147
+
148
+
149
+ Installation
150
+ ------------
151
+
152
+ Please follow the detailed
153
+ `installation instructions <http://vispy.org/installation.html>`_
154
+ on the VisPy website.
155
+
156
+ Structure of VisPy
157
+ ------------------
158
+
159
+ Currently, the main subpackages are:
160
+
161
+ - **app**: integrates an event system and offers a unified interface on
162
+ top of many window backends (Qt4, wx, glfw, jupyter notebook,
163
+ and others). Relatively stable API.
164
+ - **gloo**: a Pythonic, object-oriented interface to OpenGL. Relatively
165
+ stable API.
166
+ - **scene**: this is the system underlying our upcoming high level
167
+ visualization interfaces. Under heavy development and still
168
+ experimental, it contains several modules.
169
+
170
+ - **Visuals** are graphical abstractions representing 2D shapes, 3D
171
+ meshes, text, etc.
172
+ - **Transforms** implement 2D/3D transformations implemented on both
173
+ CPU and GPU.
174
+ - **Shaders** implements a shader composition system for plumbing
175
+ together snippets of GLSL code.
176
+ - The **scene graph** tracks all objects within a transformation
177
+ graph.
178
+ - **plot**: high-level plotting interfaces.
179
+
180
+ The API of all public interfaces are subject to change in the future,
181
+ although **app** and **gloo** are *relatively* stable at this point.
182
+
183
+ Code of Conduct
184
+ ---------------
185
+
186
+ The VisPy community requires its members to abide by the
187
+ `Code of Conduct <./CODE_OF_CONDUCT.md>`_. In this CoC you will find the
188
+ expectations of members, the penalties for violating these expectations, and
189
+ how violations can be reported to the members of the community in charge of
190
+ enforcing this Code of Conduct.
191
+
192
+ Governance
193
+ ----------
194
+
195
+ The VisPy project maintainers make decisions about the project based on a
196
+ simple consensus model. This is described in more detail on the
197
+ `governance page <https://vispy.org/governance/GOVERNANCE.html>`_ of the vispy
198
+ website as well as the
199
+ `list of maintainers <https://vispy.org/governance/MAINTAINERS.html>`_.
200
+
201
+ In addition to decisions about the VisPy project, there is also a steering
202
+ committee for the overall VisPy organization. More information about this
203
+ committee can also be found on the `steering committee page <https://vispy.org/org/STEERING-COMMITTEE.html>`_
204
+ of the vispy website,
205
+ along with the organization's `charter <https://vispy.org/org/CHARTER.html>`_ and
206
+ other related documents (linked in the charter).
207
+
208
+ Genesis
209
+ -------
210
+
211
+ VisPy began when four developers with their own visualization libraries
212
+ decided to team up:
213
+ `Luke Campagnola <http://luke.campagnola.me/>`__ with `PyQtGraph <http://www.pyqtgraph.org/>`__,
214
+ `Almar Klein <http://www.almarklein.org/>`__ with `Visvis <https://github.com/almarklein/visvis>`__,
215
+ `Cyrille Rossant <http://cyrille.rossant.net>`__ with `Galry <https://github.com/rossant/galry>`__,
216
+ `Nicolas Rougier <http://www.loria.fr/~rougier/index.html>`__ with `Glumpy <https://github.com/rougier/Glumpy>`__.
217
+
218
+ Now VisPy looks to build on the expertise of these developers and the
219
+ broader open-source community to build a high-performance OpenGL library.
220
+
221
+ ----
222
+
223
+ External links
224
+ --------------
225
+
226
+ - `User mailing
227
+ list <https://groups.google.com/forum/#!forum/vispy>`__
228
+ - `Dev mailing
229
+ list <https://groups.google.com/forum/#!forum/vispy-dev>`__
230
+ - `Chat room <https://gitter.im/vispy/vispy>`__
231
+ - `Developer chat room <https://gitter.im/vispy/vispy-dev>`__
232
+ - `Wiki <http://github.com/vispy/vispy/wiki>`__
233
+ - `Gallery <http://vispy.org/gallery/index.html>`__
234
+ - `Documentation <http://vispy.readthedocs.org>`__
235
+
236
+ .. |Build Status| image:: https://github.com/vispy/vispy/workflows/CI/badge.svg
237
+ :target: https://github.com/vispy/vispy/actions
238
+ .. |Coverage Status| image:: https://img.shields.io/coveralls/vispy/vispy/main.svg
239
+ :target: https://coveralls.io/r/vispy/vispy?branch=main
240
+ .. |Zenodo Link| image:: https://zenodo.org/badge/5822/vispy/vispy.svg
241
+ :target: http://dx.doi.org/10.5281/zenodo.17869
242
+ .. |Contributor Covenant| image:: https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg
243
+ :target: CODE_OF_CONDUCT.md