vispy 0.15.0__cp312-cp312-macosx_10_13_x86_64.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-312-darwin.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
@@ -0,0 +1,522 @@
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 ..import scene
6
+ from ..io import read_mesh
7
+ from ..geometry import MeshData
8
+
9
+ __all__ = ['PlotWidget']
10
+
11
+
12
+ class PlotWidget(scene.Widget):
13
+ """Widget to facilitate plotting
14
+
15
+ Parameters
16
+ ----------
17
+ *args : arguments
18
+ Arguments passed to the `ViewBox` super class.
19
+ **kwargs : keywoard arguments
20
+ Keyword arguments passed to the `ViewBox` super class.
21
+
22
+ Notes
23
+ -----
24
+ This class is typically instantiated implicitly by a `Figure`
25
+ instance, e.g., by doing ``fig[0, 0]``.
26
+ """
27
+
28
+ def __init__(self, *args, **kwargs):
29
+ self._fg = kwargs.pop('fg_color', 'k')
30
+ self.grid = None
31
+ self.camera = None
32
+ self.title = None
33
+ self.title_widget = None
34
+ self.yaxis = None
35
+ self.xaxis = None
36
+ self.xlabel = None
37
+ self.ylabel = None
38
+ self._configured = False
39
+ self.visuals = []
40
+ self.section_y_x = None
41
+
42
+ self.cbar_top = None
43
+ self.cbar_bottom = None
44
+ self.cbar_left = None
45
+ self.cbar_right = None
46
+
47
+ super(PlotWidget, self).__init__(*args, **kwargs)
48
+ self.grid = self.add_grid(spacing=0, margin=10)
49
+
50
+ self.title = scene.Label("", font_size=16, color="#ff0000")
51
+
52
+ def _configure_2d(self, fg_color=None):
53
+ if self._configured:
54
+ return
55
+
56
+ if fg_color is None:
57
+ fg = self._fg
58
+ else:
59
+ fg = fg_color
60
+
61
+ # c0 c1 c2 c3 c4 c5 c6
62
+ # r0 +---------+-------+-------+-------+-------+---------+---------+
63
+ # | | | title | | |
64
+ # r1 | +-----------------------+-------+---------+ |
65
+ # | | | cbar | | |
66
+ # r2 | +-------+-------+-------+-------+---------+ |
67
+ # | | cbar | ylabel| yaxis | view | cbar | padding |
68
+ # r3 | padding +-------+-------+-------+-------+---------+ |
69
+ # | | | xaxis | | |
70
+ # r4 | +-----------------------+-------+---------+ |
71
+ # | | | xlabel| | |
72
+ # r5 | +-----------------------+-------+---------+ |
73
+ # | | | cbar | | |
74
+ # r6 |---------+-----------------------+-------+---------+---------|
75
+ # | padding |
76
+ # +---------+-----------------------+-------+---------+---------+
77
+
78
+ # padding left
79
+ padding_left = self.grid.add_widget(None, row=0, row_span=5, col=0)
80
+ padding_left.width_min = 30
81
+ padding_left.width_max = 60
82
+
83
+ # padding right
84
+ padding_right = self.grid.add_widget(None, row=0, row_span=5, col=6)
85
+ padding_right.width_min = 30
86
+ padding_right.width_max = 60
87
+
88
+ # padding right
89
+ padding_bottom = self.grid.add_widget(None, row=6, col=0, col_span=6)
90
+ padding_bottom.height_min = 20
91
+ padding_bottom.height_max = 40
92
+
93
+ # row 0
94
+ # title - column 4 to 5
95
+ self.title_widget = self.grid.add_widget(self.title, row=0, col=4)
96
+ self.title_widget.height_min = self.title_widget.height_max = 40
97
+
98
+ # row 1
99
+ # colorbar - column 4 to 5
100
+ self.cbar_top = self.grid.add_widget(None, row=1, col=4)
101
+ self.cbar_top.height_max = 1
102
+
103
+ # row 2
104
+ # colorbar_left - column 1
105
+ # ylabel - column 2
106
+ # yaxis - column 3
107
+ # view - column 4
108
+ # colorbar_right - column 5
109
+ self.cbar_left = self.grid.add_widget(None, row=2, col=1)
110
+ self.cbar_left.width_max = 1
111
+
112
+ self.ylabel = scene.Label("", rotation=-90)
113
+ ylabel_widget = self.grid.add_widget(self.ylabel, row=2, col=2)
114
+ ylabel_widget.width_max = 1
115
+
116
+ self.yaxis = scene.AxisWidget(orientation='left',
117
+ text_color=fg,
118
+ axis_color=fg, tick_color=fg)
119
+
120
+ yaxis_widget = self.grid.add_widget(self.yaxis, row=2, col=3)
121
+ yaxis_widget.width_max = 40
122
+
123
+ # row 3
124
+ # xaxis - column 4
125
+ self.xaxis = scene.AxisWidget(orientation='bottom', text_color=fg,
126
+ axis_color=fg, tick_color=fg)
127
+ xaxis_widget = self.grid.add_widget(self.xaxis, row=3, col=4)
128
+ xaxis_widget.height_max = 40
129
+
130
+ self.cbar_right = self.grid.add_widget(None, row=2, col=5)
131
+ self.cbar_right.width_max = 1
132
+
133
+ # row 4
134
+ # xlabel - column 4
135
+ self.xlabel = scene.Label("")
136
+ xlabel_widget = self.grid.add_widget(self.xlabel, row=4, col=4)
137
+ xlabel_widget.height_max = 40
138
+
139
+ # row 5
140
+ self.cbar_bottom = self.grid.add_widget(None, row=5, col=4)
141
+ self.cbar_bottom.height_max = 1
142
+
143
+ # This needs to be added to the grid last (to fix #1742)
144
+ self.view = self.grid.add_view(row=2, col=4,
145
+ border_color='grey', bgcolor="#efefef")
146
+ self.view.camera = 'panzoom'
147
+ self.camera = self.view.camera
148
+
149
+ self._configured = True
150
+ self.xaxis.link_view(self.view)
151
+ self.yaxis.link_view(self.view)
152
+
153
+ def _configure_3d(self):
154
+ if self._configured:
155
+ return
156
+
157
+ self.view = self.grid.add_view(row=0, col=0,
158
+ border_color='grey', bgcolor="#efefef")
159
+
160
+ self.view.camera = 'turntable'
161
+ self.camera = self.view.camera
162
+
163
+ self._configured = True
164
+
165
+ def histogram(self, data, bins=10, color='w', orientation='h'):
166
+ """Calculate and show a histogram of data
167
+
168
+ Parameters
169
+ ----------
170
+ data : array-like
171
+ Data to histogram. Currently only 1D data is supported.
172
+ bins : int | array-like
173
+ Number of bins, or bin edges.
174
+ color : instance of Color
175
+ Color of the histogram.
176
+ orientation : {'h', 'v'}
177
+ Orientation of the histogram.
178
+
179
+ Returns
180
+ -------
181
+ hist : instance of Polygon
182
+ The histogram polygon.
183
+ """
184
+ self._configure_2d()
185
+ hist = scene.Histogram(data, bins, color, orientation)
186
+ self.view.add(hist)
187
+ self.view.camera.set_range()
188
+ return hist
189
+
190
+ def image(self, data, cmap='cubehelix', clim='auto', fg_color=None, **kwargs):
191
+ """Show an image
192
+
193
+ Parameters
194
+ ----------
195
+ data : ndarray
196
+ Should have shape (N, M), (N, M, 3) or (N, M, 4).
197
+ cmap : str
198
+ Colormap name.
199
+ clim : str | tuple
200
+ Colormap limits. Should be ``'auto'`` or a two-element tuple of
201
+ min and max values.
202
+ fg_color : Color or None
203
+ Sets the plot foreground color if specified.
204
+ kwargs : keyword arguments.
205
+ More args to pass to :class:`~vispy.visuals.image.Image`.
206
+
207
+ Returns
208
+ -------
209
+ image : instance of Image
210
+ The image.
211
+
212
+ Notes
213
+ -----
214
+ The colormap is only used if the image pixels are scalars.
215
+ """
216
+ self._configure_2d(fg_color)
217
+ image = scene.Image(data, cmap=cmap, clim=clim, **kwargs)
218
+ self.view.add(image)
219
+ self.view.camera.aspect = 1
220
+ self.view.camera.set_range()
221
+
222
+ return image
223
+
224
+ def mesh(self, vertices=None, faces=None, vertex_colors=None,
225
+ face_colors=None, color=(0.5, 0.5, 1.), fname=None,
226
+ meshdata=None, shading='auto'):
227
+ """Show a 3D mesh
228
+
229
+ Parameters
230
+ ----------
231
+ vertices : array
232
+ Vertices.
233
+ faces : array | None
234
+ Face definitions.
235
+ vertex_colors : array | None
236
+ Vertex colors.
237
+ face_colors : array | None
238
+ Face colors.
239
+ color : instance of Color
240
+ Color to use.
241
+ fname : str | None
242
+ Filename to load. If not None, then vertices, faces, and meshdata
243
+ must be None.
244
+ meshdata : MeshData | None
245
+ Meshdata to use. If not None, then vertices, faces, and fname
246
+ must be None.
247
+ shading : str
248
+ Shading to use, can be None, 'smooth', 'flat', or 'auto'.
249
+ Default ('auto') will use None if face_colors is set, and
250
+ 'smooth' otherwise.
251
+
252
+ Returns
253
+ -------
254
+ mesh : instance of Mesh
255
+ The mesh.
256
+ """
257
+ self._configure_3d()
258
+ if shading == 'auto':
259
+ shading = 'smooth'
260
+ if face_colors is not None:
261
+ shading = None
262
+ if fname is not None:
263
+ if not all(x is None for x in (vertices, faces, meshdata)):
264
+ raise ValueError('vertices, faces, and meshdata must be None '
265
+ 'if fname is not None')
266
+ vertices, faces = read_mesh(fname)[:2]
267
+ if meshdata is not None:
268
+ if not all(x is None for x in (vertices, faces, fname)):
269
+ raise ValueError('vertices, faces, and fname must be None if '
270
+ 'meshdata is not None')
271
+ else:
272
+ meshdata = MeshData(vertices, faces, vertex_colors=vertex_colors,
273
+ face_colors=face_colors)
274
+ mesh = scene.Mesh(meshdata=meshdata, vertex_colors=vertex_colors,
275
+ face_colors=face_colors, color=color,
276
+ shading=shading)
277
+ self.view.add(mesh)
278
+ self.view.camera.set_range()
279
+ return mesh
280
+
281
+ def plot(self, data, color='k', symbol=None, line_kind='-', width=1.,
282
+ marker_size=10., edge_color='k', face_color='b', edge_width=1.,
283
+ title=None, xlabel=None, ylabel=None, connect='strip'):
284
+ """Plot a series of data using lines and markers
285
+
286
+ Parameters
287
+ ----------
288
+ data : array | two arrays
289
+ Arguments can be passed as ``(Y,)``, ``(X, Y)`` or
290
+ ``np.array((X, Y))``.
291
+ color : instance of Color
292
+ Color of the line.
293
+ symbol : str
294
+ Marker symbol to use.
295
+ line_kind : str
296
+ Kind of line to draw. For now, only solid lines (``'-'``)
297
+ are supported.
298
+ width : float
299
+ Line width.
300
+ marker_size : float
301
+ Marker size. If `size == 0` markers will not be shown.
302
+ edge_color : instance of Color
303
+ Color of the marker edge.
304
+ face_color : instance of Color
305
+ Color of the marker face.
306
+ edge_width : float
307
+ Edge width of the marker.
308
+ title : str | None
309
+ The title string to be displayed above the plot
310
+ xlabel : str | None
311
+ The label to display along the bottom axis
312
+ ylabel : str | None
313
+ The label to display along the left axis.
314
+ connect : str | array
315
+ Determines which vertices are connected by lines.
316
+
317
+ Returns
318
+ -------
319
+ line : instance of LinePlot
320
+ The line plot.
321
+
322
+ See also
323
+ --------
324
+ LinePlot
325
+ """
326
+ self._configure_2d()
327
+ line = scene.LinePlot(data, connect=connect, color=color,
328
+ symbol=symbol, line_kind=line_kind,
329
+ width=width, marker_size=marker_size,
330
+ edge_color=edge_color,
331
+ face_color=face_color,
332
+ edge_width=edge_width)
333
+ self.view.add(line)
334
+ self.view.camera.set_range()
335
+ self.visuals.append(line)
336
+
337
+ if title is not None:
338
+ self.title.text = title
339
+ if xlabel is not None:
340
+ self.xlabel.text = xlabel
341
+ if ylabel is not None:
342
+ self.ylabel.text = ylabel
343
+
344
+ return line
345
+
346
+ def spectrogram(self, x, n_fft=256, step=None, fs=1., window='hann',
347
+ normalize=False, color_scale='log', cmap='cubehelix',
348
+ clim='auto'):
349
+ """Calculate and show a spectrogram
350
+
351
+ Parameters
352
+ ----------
353
+ x : array-like
354
+ 1D signal to operate on. ``If len(x) < n_fft``, x will be
355
+ zero-padded to length ``n_fft``.
356
+ n_fft : int
357
+ Number of FFT points. Much faster for powers of two.
358
+ step : int | None
359
+ Step size between calculations. If None, ``n_fft // 2``
360
+ will be used.
361
+ fs : float
362
+ The sample rate of the data.
363
+ window : str | None
364
+ Window function to use. Can be ``'hann'`` for Hann window, or None
365
+ for no windowing.
366
+ normalize : bool
367
+ Normalization of spectrogram values across frequencies.
368
+ color_scale : {'linear', 'log'}
369
+ Scale to apply to the result of the STFT.
370
+ ``'log'`` will use ``10 * log10(power)``.
371
+ cmap : str
372
+ Colormap name.
373
+ clim : str | tuple
374
+ Colormap limits. Should be ``'auto'`` or a two-element tuple of
375
+ min and max values.
376
+
377
+ Returns
378
+ -------
379
+ spec : instance of Spectrogram
380
+ The spectrogram.
381
+
382
+ See also
383
+ --------
384
+ Image
385
+ """
386
+ self._configure_2d()
387
+ # XXX once we have axes, we should use "fft_freqs", too
388
+ spec = scene.Spectrogram(x, n_fft, step, fs, window,
389
+ normalize, color_scale, cmap, clim)
390
+ self.view.add(spec)
391
+ self.view.camera.set_range()
392
+ return spec
393
+
394
+ def volume(self, vol, clim=None, method='mip', threshold=None,
395
+ cmap='grays', **kwargs):
396
+ """Show a 3D volume
397
+
398
+ Parameters
399
+ ----------
400
+ vol : ndarray
401
+ Volume to render.
402
+ clim : tuple of two floats | None
403
+ The contrast limits. The values in the volume are mapped to
404
+ black and white corresponding to these values. Default maps
405
+ between min and max.
406
+ method : {'mip', 'iso', 'translucent', 'additive'}
407
+ The render style to use. See corresponding docs for details.
408
+ Default 'mip'.
409
+ threshold : float
410
+ The threshold to use for the isosurafce render style. By default
411
+ the mean of the given volume is used.
412
+ cmap : str
413
+ The colormap to use.
414
+ kwargs : keyword arguments.
415
+ More args to pass to :class:`~vispy.visuals.volume.Volume`.
416
+
417
+ Returns
418
+ -------
419
+ volume : instance of Volume
420
+ The volume visualization.
421
+
422
+ See also
423
+ --------
424
+ Volume
425
+ """
426
+ self._configure_3d()
427
+ volume = scene.Volume(vol, clim, method, threshold, cmap=cmap, **kwargs)
428
+ self.view.add(volume)
429
+ self.view.camera.set_range()
430
+ return volume
431
+
432
+ def surface(self, zdata, **kwargs):
433
+ """Show a 3D surface plot.
434
+
435
+ Extra keyword arguments are passed to `SurfacePlot()`.
436
+
437
+ Parameters
438
+ ----------
439
+ zdata : array-like
440
+ A 2D array of the surface Z values.
441
+
442
+ """
443
+ self._configure_3d()
444
+ surf = scene.SurfacePlot(z=zdata, **kwargs)
445
+ self.view.add(surf)
446
+ self.view.camera.set_range()
447
+ return surf
448
+
449
+ def colorbar(self, cmap, position="right",
450
+ label="", clim=("", ""),
451
+ border_width=0.0, border_color="black",
452
+ **kwargs):
453
+ """Show a ColorBar
454
+
455
+ Parameters
456
+ ----------
457
+ cmap : str | vispy.color.ColorMap
458
+ Either the name of the ColorMap to be used from the standard
459
+ set of names (refer to `vispy.color.get_colormap`),
460
+ or a custom ColorMap object.
461
+ The ColorMap is used to apply a gradient on the colorbar.
462
+ position : {'left', 'right', 'top', 'bottom'}
463
+ The position of the colorbar with respect to the plot.
464
+ 'top' and 'bottom' are placed horizontally, while
465
+ 'left' and 'right' are placed vertically
466
+ label : str
467
+ The label that is to be drawn with the colorbar
468
+ that provides information about the colorbar.
469
+ clim : tuple (min, max)
470
+ the minimum and maximum values of the data that
471
+ is given to the colorbar. This is used to draw the scale
472
+ on the side of the colorbar.
473
+ border_width : float (in px)
474
+ The width of the border the colormap should have. This measurement
475
+ is given in pixels
476
+ border_color : str | vispy.color.Color
477
+ The color of the border of the colormap. This can either be a
478
+ str as the color's name or an actual instace of a vipy.color.Color
479
+
480
+ Returns
481
+ -------
482
+ colorbar : instance of ColorBarWidget
483
+
484
+ See also
485
+ --------
486
+ ColorBarWidget
487
+ """
488
+ self._configure_2d()
489
+
490
+ cbar = scene.ColorBarWidget(orientation=position,
491
+ label=label,
492
+ cmap=cmap,
493
+ clim=clim,
494
+ border_width=border_width,
495
+ border_color=border_color,
496
+ **kwargs)
497
+
498
+ CBAR_LONG_DIM = 50
499
+
500
+ if cbar.orientation == "bottom":
501
+ self.grid.remove_widget(self.cbar_bottom)
502
+ self.cbar_bottom = self.grid.add_widget(cbar, row=5, col=4)
503
+ self.cbar_bottom.height_max = \
504
+ self.cbar_bottom.height_max = CBAR_LONG_DIM
505
+
506
+ elif cbar.orientation == "top":
507
+ self.grid.remove_widget(self.cbar_top)
508
+ self.cbar_top = self.grid.add_widget(cbar, row=1, col=4)
509
+ self.cbar_top.height_max = self.cbar_top.height_max = CBAR_LONG_DIM
510
+
511
+ elif cbar.orientation == "left":
512
+ self.grid.remove_widget(self.cbar_left)
513
+ self.cbar_left = self.grid.add_widget(cbar, row=2, col=1)
514
+ self.cbar_left.width_max = self.cbar_left.width_min = CBAR_LONG_DIM
515
+
516
+ else: # cbar.orientation == "right"
517
+ self.grid.remove_widget(self.cbar_right)
518
+ self.cbar_right = self.grid.add_widget(cbar, row=2, col=5)
519
+ self.cbar_right.width_max = \
520
+ self.cbar_right.width_min = CBAR_LONG_DIM
521
+
522
+ return cbar
File without changes
@@ -0,0 +1,46 @@
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
+ import vispy.plot as vp
6
+ from vispy.testing import (assert_raises, requires_application,
7
+ run_tests_if_main)
8
+ from vispy.visuals.axis import AxisVisual
9
+ from unittest import mock
10
+
11
+
12
+ @requires_application()
13
+ def test_figure_creation():
14
+ """Test creating a figure"""
15
+ with vp.Fig(show=False) as fig:
16
+ fig[0, 0:2]
17
+ fig[1:3, 0:2]
18
+ ax_right = fig[1:3, 2]
19
+ assert fig[1:3, 2] is ax_right
20
+ # collision
21
+ assert_raises(ValueError, fig.__getitem__, (slice(1, 3), 1))
22
+
23
+
24
+ @requires_application()
25
+ def test_plot_widget_axes():
26
+ """Test that the axes domains are updated correctly when a figure is first drawn"""
27
+ fig = vp.Fig(size=(800, 800), show=False)
28
+ point = (0, 100)
29
+ fig[0, 0].plot((point, point))
30
+ # mocking the AxisVisual domain.setter
31
+ domain_setter = mock.Mock(wraps=AxisVisual.domain.fset)
32
+ mock_property = AxisVisual.domain.setter(domain_setter)
33
+
34
+ with mock.patch.object(AxisVisual, "domain", mock_property):
35
+ # note: fig.show() must be called for this test to work... otherwise
36
+ # Grid._update_child_widget_dim is not triggered and the axes aren't updated
37
+ fig.show(run=False)
38
+ # currently, the AxisWidget adds a buffer of 5% of the
39
+ # full range to either end of the axis domain
40
+ buffer = (point[1] - point[0]) * 0.05
41
+ expectation = [point[0] - buffer, point[1] + buffer]
42
+ for call in domain_setter.call_args_list:
43
+ assert [round(x, 2) for x in call[0][1]] == expectation
44
+
45
+
46
+ run_tests_if_main()
@@ -0,0 +1,43 @@
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
+ The vispy.scene subpackage provides high-level, flexible, and easy to use
6
+ functionality for creating scenes composed of multiple visual objects.
7
+
8
+ Overview
9
+ --------
10
+
11
+ Scenegraphs are a commonly used system for describing a scene as a
12
+ hierarchy of visual objects. Users need only create these visual objects and
13
+ specify their location in the scene, and the scenegraph system will
14
+ automatically draw the entire scene whenever an update is required.
15
+
16
+ Using the vispy scenegraph requires only a few steps:
17
+
18
+ 1. Create a SceneCanvas to display the scene. This object has a `scene`
19
+ property that is the top-level Node in the scene.
20
+ 2. Create one or more Node instances (see vispy.scene.visuals)
21
+ 3. Add these Node instances to the scene by making them children of
22
+ canvas.scene, or children of other nodes that are already in the scene.
23
+
24
+
25
+ For more information see:
26
+
27
+ * complete scenegraph documentation
28
+ * scene examples
29
+ * scene API reference
30
+
31
+ """
32
+
33
+ from .visuals import * # noqa
34
+ from .cameras import * # noqa
35
+ from ..visuals.transforms import * # noqa
36
+ from .widgets import * # noqa
37
+ from .canvas import SceneCanvas # noqa
38
+ from . import visuals # noqa
39
+ from ..visuals import transforms # noqa
40
+ from ..visuals import filters # noqa
41
+ from . import widgets # noqa
42
+ from . import cameras # noqa
43
+ from .node import Node # noqa
@@ -0,0 +1,27 @@
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
+ Cameras are responsible for determining which part of a scene is displayed
6
+ in a viewbox and for handling user input to change the view.
7
+
8
+ Several Camera subclasses are available to customize the projection of the
9
+ scene such as 3D perspective and orthographic projections, 2D
10
+ scale/translation, and other specialty cameras. A variety of user interaction
11
+ styles are available for each camera including arcball, turntable,
12
+ first-person, and pan/zoom interactions.
13
+
14
+ Internally, Cameras work by setting the transform of a SubScene object such
15
+ that a certain part of the scene is mapped to the bounding rectangle of the
16
+ ViewBox.
17
+ """
18
+ __all__ = ['ArcballCamera', 'BaseCamera', 'FlyCamera', 'MagnifyCamera',
19
+ 'Magnify1DCamera', 'PanZoomCamera', 'TurntableCamera']
20
+
21
+ from ._base import make_camera # noqa
22
+ from .base_camera import BaseCamera # noqa
23
+ from .panzoom import PanZoomCamera # noqa
24
+ from .arcball import ArcballCamera # noqa
25
+ from .turntable import TurntableCamera # noqa
26
+ from .fly import FlyCamera # noqa
27
+ from .magnify import MagnifyCamera, Magnify1DCamera # noqa
@@ -0,0 +1,38 @@
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
+ from .base_camera import BaseCamera
5
+ from .perspective import PerspectiveCamera
6
+ from .panzoom import PanZoomCamera
7
+ from .arcball import ArcballCamera
8
+ from .turntable import TurntableCamera
9
+ from .fly import FlyCamera
10
+
11
+
12
+ def make_camera(cam_type, *args, **kwargs):
13
+ """Factory function for creating new cameras using a string name.
14
+
15
+ Parameters
16
+ ----------
17
+ cam_type : str
18
+ May be one of:
19
+
20
+ * 'panzoom' : Creates :class:`PanZoomCamera`
21
+ * 'turntable' : Creates :class:`TurntableCamera`
22
+ * None : Creates :class:`Camera`
23
+
24
+ Notes
25
+ -----
26
+ All extra arguments are passed to the __init__ method of the selected
27
+ Camera class.
28
+ """
29
+ cam_types = {None: BaseCamera}
30
+ for camType in (BaseCamera, PanZoomCamera, PerspectiveCamera,
31
+ TurntableCamera, FlyCamera, ArcballCamera):
32
+ cam_types[camType.__name__[:-6].lower()] = camType
33
+
34
+ try:
35
+ return cam_types[cam_type](*args, **kwargs)
36
+ except KeyError:
37
+ raise KeyError('Unknown camera type "%s". Options are: %s' %
38
+ (cam_type, cam_types.keys()))