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.
- vispy/__init__.py +33 -0
- vispy/app/__init__.py +15 -0
- vispy/app/_default_app.py +76 -0
- vispy/app/_detect_eventloop.py +148 -0
- vispy/app/application.py +263 -0
- vispy/app/backends/__init__.py +52 -0
- vispy/app/backends/_egl.py +264 -0
- vispy/app/backends/_glfw.py +513 -0
- vispy/app/backends/_jupyter_rfb.py +278 -0
- vispy/app/backends/_offscreen_util.py +121 -0
- vispy/app/backends/_osmesa.py +235 -0
- vispy/app/backends/_pyglet.py +451 -0
- vispy/app/backends/_pyqt4.py +36 -0
- vispy/app/backends/_pyqt5.py +36 -0
- vispy/app/backends/_pyqt6.py +40 -0
- vispy/app/backends/_pyside.py +37 -0
- vispy/app/backends/_pyside2.py +52 -0
- vispy/app/backends/_pyside6.py +53 -0
- vispy/app/backends/_qt.py +1003 -0
- vispy/app/backends/_sdl2.py +444 -0
- vispy/app/backends/_template.py +244 -0
- vispy/app/backends/_test.py +8 -0
- vispy/app/backends/_tk.py +800 -0
- vispy/app/backends/_wx.py +476 -0
- vispy/app/backends/tests/__init__.py +0 -0
- vispy/app/backends/tests/test_offscreen_util.py +52 -0
- vispy/app/backends/tests/test_rfb.py +77 -0
- vispy/app/base.py +294 -0
- vispy/app/canvas.py +828 -0
- vispy/app/qt.py +92 -0
- vispy/app/tests/__init__.py +0 -0
- vispy/app/tests/qt-designer.ui +58 -0
- vispy/app/tests/test_app.py +442 -0
- vispy/app/tests/test_backends.py +164 -0
- vispy/app/tests/test_canvas.py +122 -0
- vispy/app/tests/test_context.py +92 -0
- vispy/app/tests/test_qt.py +47 -0
- vispy/app/tests/test_simultaneous.py +134 -0
- vispy/app/timer.py +174 -0
- vispy/color/__init__.py +17 -0
- vispy/color/_color_dict.py +193 -0
- vispy/color/color_array.py +447 -0
- vispy/color/color_space.py +181 -0
- vispy/color/colormap.py +1213 -0
- vispy/color/tests/__init__.py +0 -0
- vispy/color/tests/test_color.py +378 -0
- vispy/conftest.py +12 -0
- vispy/ext/__init__.py +0 -0
- vispy/ext/cocoapy.py +1522 -0
- vispy/ext/cubehelix.py +138 -0
- vispy/ext/egl.py +375 -0
- vispy/ext/fontconfig.py +118 -0
- vispy/ext/gdi32plus.py +206 -0
- vispy/ext/osmesa.py +105 -0
- vispy/geometry/__init__.py +23 -0
- vispy/geometry/_triangulation_debugger.py +171 -0
- vispy/geometry/calculations.py +162 -0
- vispy/geometry/curves.py +399 -0
- vispy/geometry/generation.py +643 -0
- vispy/geometry/isocurve.py +175 -0
- vispy/geometry/isosurface.py +465 -0
- vispy/geometry/meshdata.py +700 -0
- vispy/geometry/normals.py +78 -0
- vispy/geometry/parametric.py +56 -0
- vispy/geometry/polygon.py +137 -0
- vispy/geometry/rect.py +210 -0
- vispy/geometry/tests/__init__.py +0 -0
- vispy/geometry/tests/test_calculations.py +23 -0
- vispy/geometry/tests/test_generation.py +56 -0
- vispy/geometry/tests/test_meshdata.py +106 -0
- vispy/geometry/tests/test_triangulation.py +594 -0
- vispy/geometry/torusknot.py +142 -0
- vispy/geometry/triangulation.py +876 -0
- vispy/gloo/__init__.py +56 -0
- vispy/gloo/buffer.py +505 -0
- vispy/gloo/context.py +272 -0
- vispy/gloo/framebuffer.py +257 -0
- vispy/gloo/gl/__init__.py +234 -0
- vispy/gloo/gl/_constants.py +332 -0
- vispy/gloo/gl/_es2.py +986 -0
- vispy/gloo/gl/_gl2.py +1365 -0
- vispy/gloo/gl/_proxy.py +499 -0
- vispy/gloo/gl/_pyopengl2.py +362 -0
- vispy/gloo/gl/dummy.py +24 -0
- vispy/gloo/gl/es2.py +62 -0
- vispy/gloo/gl/gl2.py +98 -0
- vispy/gloo/gl/glplus.py +168 -0
- vispy/gloo/gl/pyopengl2.py +97 -0
- vispy/gloo/gl/tests/__init__.py +0 -0
- vispy/gloo/gl/tests/test_basics.py +282 -0
- vispy/gloo/gl/tests/test_functionality.py +568 -0
- vispy/gloo/gl/tests/test_names.py +246 -0
- vispy/gloo/gl/tests/test_use.py +71 -0
- vispy/gloo/glir.py +1824 -0
- vispy/gloo/globject.py +101 -0
- vispy/gloo/preprocessor.py +67 -0
- vispy/gloo/program.py +543 -0
- vispy/gloo/tests/__init__.py +0 -0
- vispy/gloo/tests/test_buffer.py +558 -0
- vispy/gloo/tests/test_context.py +119 -0
- vispy/gloo/tests/test_framebuffer.py +195 -0
- vispy/gloo/tests/test_glir.py +307 -0
- vispy/gloo/tests/test_globject.py +35 -0
- vispy/gloo/tests/test_program.py +302 -0
- vispy/gloo/tests/test_texture.py +732 -0
- vispy/gloo/tests/test_use_gloo.py +187 -0
- vispy/gloo/tests/test_util.py +60 -0
- vispy/gloo/tests/test_wrappers.py +261 -0
- vispy/gloo/texture.py +1046 -0
- vispy/gloo/util.py +129 -0
- vispy/gloo/wrappers.py +762 -0
- vispy/glsl/__init__.py +42 -0
- vispy/glsl/antialias/antialias.glsl +7 -0
- vispy/glsl/antialias/cap-butt.glsl +31 -0
- vispy/glsl/antialias/cap-round.glsl +29 -0
- vispy/glsl/antialias/cap-square.glsl +30 -0
- vispy/glsl/antialias/cap-triangle-in.glsl +30 -0
- vispy/glsl/antialias/cap-triangle-out.glsl +30 -0
- vispy/glsl/antialias/cap.glsl +67 -0
- vispy/glsl/antialias/caps.glsl +67 -0
- vispy/glsl/antialias/filled.glsl +50 -0
- vispy/glsl/antialias/outline.glsl +40 -0
- vispy/glsl/antialias/stroke.glsl +43 -0
- vispy/glsl/arrowheads/angle.glsl +99 -0
- vispy/glsl/arrowheads/arrowheads.frag +60 -0
- vispy/glsl/arrowheads/arrowheads.glsl +12 -0
- vispy/glsl/arrowheads/arrowheads.vert +83 -0
- vispy/glsl/arrowheads/curved.glsl +48 -0
- vispy/glsl/arrowheads/inhibitor.glsl +26 -0
- vispy/glsl/arrowheads/stealth.glsl +46 -0
- vispy/glsl/arrowheads/triangle.glsl +97 -0
- vispy/glsl/arrowheads/util.glsl +13 -0
- vispy/glsl/arrows/angle-30.glsl +12 -0
- vispy/glsl/arrows/angle-60.glsl +12 -0
- vispy/glsl/arrows/angle-90.glsl +12 -0
- vispy/glsl/arrows/arrow.frag +39 -0
- vispy/glsl/arrows/arrow.vert +49 -0
- vispy/glsl/arrows/arrows.glsl +17 -0
- vispy/glsl/arrows/common.glsl +187 -0
- vispy/glsl/arrows/curved.glsl +63 -0
- vispy/glsl/arrows/stealth.glsl +50 -0
- vispy/glsl/arrows/triangle-30.glsl +12 -0
- vispy/glsl/arrows/triangle-60.glsl +12 -0
- vispy/glsl/arrows/triangle-90.glsl +12 -0
- vispy/glsl/arrows/util.glsl +98 -0
- vispy/glsl/build_spatial_filters.py +660 -0
- vispy/glsl/collections/agg-fast-path.frag +20 -0
- vispy/glsl/collections/agg-fast-path.vert +78 -0
- vispy/glsl/collections/agg-glyph.frag +60 -0
- vispy/glsl/collections/agg-glyph.vert +33 -0
- vispy/glsl/collections/agg-marker.frag +35 -0
- vispy/glsl/collections/agg-marker.vert +48 -0
- vispy/glsl/collections/agg-path.frag +55 -0
- vispy/glsl/collections/agg-path.vert +166 -0
- vispy/glsl/collections/agg-point.frag +21 -0
- vispy/glsl/collections/agg-point.vert +35 -0
- vispy/glsl/collections/agg-segment.frag +32 -0
- vispy/glsl/collections/agg-segment.vert +75 -0
- vispy/glsl/collections/marker.frag +38 -0
- vispy/glsl/collections/marker.vert +48 -0
- vispy/glsl/collections/raw-path.frag +15 -0
- vispy/glsl/collections/raw-path.vert +24 -0
- vispy/glsl/collections/raw-point.frag +14 -0
- vispy/glsl/collections/raw-point.vert +31 -0
- vispy/glsl/collections/raw-segment.frag +18 -0
- vispy/glsl/collections/raw-segment.vert +26 -0
- vispy/glsl/collections/raw-triangle.frag +13 -0
- vispy/glsl/collections/raw-triangle.vert +26 -0
- vispy/glsl/collections/sdf-glyph-ticks.vert +69 -0
- vispy/glsl/collections/sdf-glyph.frag +80 -0
- vispy/glsl/collections/sdf-glyph.vert +59 -0
- vispy/glsl/collections/tick-labels.vert +71 -0
- vispy/glsl/colormaps/autumn.glsl +20 -0
- vispy/glsl/colormaps/blues.glsl +20 -0
- vispy/glsl/colormaps/color-space.glsl +17 -0
- vispy/glsl/colormaps/colormaps.glsl +24 -0
- vispy/glsl/colormaps/cool.glsl +20 -0
- vispy/glsl/colormaps/fire.glsl +21 -0
- vispy/glsl/colormaps/gray.glsl +20 -0
- vispy/glsl/colormaps/greens.glsl +20 -0
- vispy/glsl/colormaps/hot.glsl +22 -0
- vispy/glsl/colormaps/ice.glsl +20 -0
- vispy/glsl/colormaps/icefire.glsl +23 -0
- vispy/glsl/colormaps/parse.py +40 -0
- vispy/glsl/colormaps/reds.glsl +20 -0
- vispy/glsl/colormaps/spring.glsl +20 -0
- vispy/glsl/colormaps/summer.glsl +20 -0
- vispy/glsl/colormaps/user.glsl +22 -0
- vispy/glsl/colormaps/util.glsl +41 -0
- vispy/glsl/colormaps/wheel.glsl +21 -0
- vispy/glsl/colormaps/winter.glsl +20 -0
- vispy/glsl/lines/agg.frag +320 -0
- vispy/glsl/lines/agg.vert +241 -0
- vispy/glsl/markers/arrow.glsl +12 -0
- vispy/glsl/markers/asterisk.glsl +16 -0
- vispy/glsl/markers/chevron.glsl +14 -0
- vispy/glsl/markers/clover.glsl +20 -0
- vispy/glsl/markers/club.glsl +31 -0
- vispy/glsl/markers/cross.glsl +17 -0
- vispy/glsl/markers/diamond.glsl +12 -0
- vispy/glsl/markers/disc.glsl +9 -0
- vispy/glsl/markers/ellipse.glsl +67 -0
- vispy/glsl/markers/hbar.glsl +9 -0
- vispy/glsl/markers/heart.glsl +15 -0
- vispy/glsl/markers/infinity.glsl +15 -0
- vispy/glsl/markers/marker-sdf.frag +74 -0
- vispy/glsl/markers/marker-sdf.vert +41 -0
- vispy/glsl/markers/marker.frag +36 -0
- vispy/glsl/markers/marker.vert +46 -0
- vispy/glsl/markers/markers.glsl +24 -0
- vispy/glsl/markers/pin.glsl +18 -0
- vispy/glsl/markers/ring.glsl +11 -0
- vispy/glsl/markers/spade.glsl +28 -0
- vispy/glsl/markers/square.glsl +10 -0
- vispy/glsl/markers/tag.glsl +11 -0
- vispy/glsl/markers/triangle.glsl +14 -0
- vispy/glsl/markers/vbar.glsl +9 -0
- vispy/glsl/math/circle-through-2-points.glsl +30 -0
- vispy/glsl/math/constants.glsl +48 -0
- vispy/glsl/math/double.glsl +114 -0
- vispy/glsl/math/functions.glsl +20 -0
- vispy/glsl/math/point-to-line-distance.glsl +31 -0
- vispy/glsl/math/point-to-line-projection.glsl +29 -0
- vispy/glsl/math/signed-line-distance.glsl +27 -0
- vispy/glsl/math/signed-segment-distance.glsl +30 -0
- vispy/glsl/misc/regular-grid.frag +244 -0
- vispy/glsl/misc/spatial-filters.frag +1407 -0
- vispy/glsl/misc/viewport-NDC.glsl +20 -0
- vispy/glsl/transforms/azimuthal-equal-area.glsl +32 -0
- vispy/glsl/transforms/azimuthal-equidistant.glsl +38 -0
- vispy/glsl/transforms/hammer.glsl +44 -0
- vispy/glsl/transforms/identity.glsl +6 -0
- vispy/glsl/transforms/identity_forward.glsl +23 -0
- vispy/glsl/transforms/identity_inverse.glsl +23 -0
- vispy/glsl/transforms/linear-scale.glsl +127 -0
- vispy/glsl/transforms/log-scale.glsl +126 -0
- vispy/glsl/transforms/mercator-transverse-forward.glsl +40 -0
- vispy/glsl/transforms/mercator-transverse-inverse.glsl +40 -0
- vispy/glsl/transforms/panzoom.glsl +10 -0
- vispy/glsl/transforms/polar.glsl +41 -0
- vispy/glsl/transforms/position.glsl +44 -0
- vispy/glsl/transforms/power-scale.glsl +139 -0
- vispy/glsl/transforms/projection.glsl +7 -0
- vispy/glsl/transforms/pvm.glsl +13 -0
- vispy/glsl/transforms/rotate.glsl +45 -0
- vispy/glsl/transforms/trackball.glsl +15 -0
- vispy/glsl/transforms/translate.glsl +35 -0
- vispy/glsl/transforms/transverse_mercator.glsl +38 -0
- vispy/glsl/transforms/viewport-clipping.glsl +14 -0
- vispy/glsl/transforms/viewport-transform.glsl +16 -0
- vispy/glsl/transforms/viewport.glsl +50 -0
- vispy/glsl/transforms/x.glsl +24 -0
- vispy/glsl/transforms/y.glsl +19 -0
- vispy/glsl/transforms/z.glsl +14 -0
- vispy/io/__init__.py +20 -0
- vispy/io/_data/spatial-filters.npy +0 -0
- vispy/io/datasets.py +94 -0
- vispy/io/image.py +231 -0
- vispy/io/mesh.py +122 -0
- vispy/io/stl.py +167 -0
- vispy/io/tests/__init__.py +0 -0
- vispy/io/tests/test_image.py +47 -0
- vispy/io/tests/test_io.py +121 -0
- vispy/io/wavefront.py +350 -0
- vispy/plot/__init__.py +36 -0
- vispy/plot/fig.py +58 -0
- vispy/plot/plotwidget.py +522 -0
- vispy/plot/tests/__init__.py +0 -0
- vispy/plot/tests/test_plot.py +46 -0
- vispy/scene/__init__.py +43 -0
- vispy/scene/cameras/__init__.py +27 -0
- vispy/scene/cameras/_base.py +38 -0
- vispy/scene/cameras/arcball.py +105 -0
- vispy/scene/cameras/base_camera.py +551 -0
- vispy/scene/cameras/fly.py +474 -0
- vispy/scene/cameras/magnify.py +163 -0
- vispy/scene/cameras/panzoom.py +311 -0
- vispy/scene/cameras/perspective.py +338 -0
- vispy/scene/cameras/tests/__init__.py +0 -0
- vispy/scene/cameras/tests/test_cameras.py +27 -0
- vispy/scene/cameras/tests/test_link.py +53 -0
- vispy/scene/cameras/tests/test_perspective.py +122 -0
- vispy/scene/cameras/turntable.py +183 -0
- vispy/scene/canvas.py +639 -0
- vispy/scene/events.py +85 -0
- vispy/scene/node.py +644 -0
- vispy/scene/subscene.py +20 -0
- vispy/scene/tests/__init__.py +0 -0
- vispy/scene/tests/test_canvas.py +119 -0
- vispy/scene/tests/test_node.py +142 -0
- vispy/scene/tests/test_visuals.py +141 -0
- vispy/scene/visuals.py +276 -0
- vispy/scene/widgets/__init__.py +18 -0
- vispy/scene/widgets/anchor.py +25 -0
- vispy/scene/widgets/axis.py +88 -0
- vispy/scene/widgets/colorbar.py +176 -0
- vispy/scene/widgets/console.py +351 -0
- vispy/scene/widgets/grid.py +509 -0
- vispy/scene/widgets/label.py +50 -0
- vispy/scene/widgets/tests/__init__.py +0 -0
- vispy/scene/widgets/tests/test_colorbar.py +47 -0
- vispy/scene/widgets/viewbox.py +199 -0
- vispy/scene/widgets/widget.py +478 -0
- vispy/testing/__init__.py +51 -0
- vispy/testing/_runners.py +448 -0
- vispy/testing/_testing.py +416 -0
- vispy/testing/image_tester.py +494 -0
- vispy/testing/rendered_array_tester.py +85 -0
- vispy/testing/tests/__init__.py +0 -0
- vispy/testing/tests/test_testing.py +20 -0
- vispy/util/__init__.py +32 -0
- vispy/util/bunch.py +15 -0
- vispy/util/check_environment.py +57 -0
- vispy/util/config.py +490 -0
- vispy/util/dpi/__init__.py +19 -0
- vispy/util/dpi/_linux.py +69 -0
- vispy/util/dpi/_quartz.py +26 -0
- vispy/util/dpi/_win32.py +34 -0
- vispy/util/dpi/tests/__init__.py +0 -0
- vispy/util/dpi/tests/test_dpi.py +16 -0
- vispy/util/eq.py +41 -0
- vispy/util/event.py +774 -0
- vispy/util/fetching.py +276 -0
- vispy/util/filter.py +44 -0
- vispy/util/fonts/__init__.py +14 -0
- vispy/util/fonts/_freetype.py +73 -0
- vispy/util/fonts/_quartz.py +192 -0
- vispy/util/fonts/_triage.py +36 -0
- vispy/util/fonts/_vispy_fonts.py +20 -0
- vispy/util/fonts/_win32.py +105 -0
- vispy/util/fonts/data/OpenSans-Bold.ttf +0 -0
- vispy/util/fonts/data/OpenSans-BoldItalic.ttf +0 -0
- vispy/util/fonts/data/OpenSans-Italic.ttf +0 -0
- vispy/util/fonts/data/OpenSans-Regular.ttf +0 -0
- vispy/util/fonts/tests/__init__.py +0 -0
- vispy/util/fonts/tests/test_font.py +45 -0
- vispy/util/fourier.py +69 -0
- vispy/util/frozen.py +25 -0
- vispy/util/gallery_scraper.py +268 -0
- vispy/util/keys.py +91 -0
- vispy/util/logs.py +358 -0
- vispy/util/osmesa_gl.py +17 -0
- vispy/util/profiler.py +135 -0
- vispy/util/ptime.py +16 -0
- vispy/util/quaternion.py +229 -0
- vispy/util/svg/__init__.py +18 -0
- vispy/util/svg/base.py +20 -0
- vispy/util/svg/color.py +219 -0
- vispy/util/svg/element.py +51 -0
- vispy/util/svg/geometry.py +478 -0
- vispy/util/svg/group.py +66 -0
- vispy/util/svg/length.py +81 -0
- vispy/util/svg/number.py +25 -0
- vispy/util/svg/path.py +332 -0
- vispy/util/svg/shapes.py +57 -0
- vispy/util/svg/style.py +59 -0
- vispy/util/svg/svg.py +40 -0
- vispy/util/svg/transform.py +223 -0
- vispy/util/svg/transformable.py +28 -0
- vispy/util/svg/viewport.py +73 -0
- vispy/util/tests/__init__.py +0 -0
- vispy/util/tests/test_config.py +58 -0
- vispy/util/tests/test_docstring_parameters.py +123 -0
- vispy/util/tests/test_emitter_group.py +262 -0
- vispy/util/tests/test_event_emitter.py +743 -0
- vispy/util/tests/test_fourier.py +35 -0
- vispy/util/tests/test_gallery_scraper.py +112 -0
- vispy/util/tests/test_import.py +127 -0
- vispy/util/tests/test_key.py +22 -0
- vispy/util/tests/test_logging.py +45 -0
- vispy/util/tests/test_run.py +14 -0
- vispy/util/tests/test_transforms.py +42 -0
- vispy/util/tests/test_vispy.py +48 -0
- vispy/util/transforms.py +201 -0
- vispy/util/wrappers.py +155 -0
- vispy/version.py +21 -0
- vispy/visuals/__init__.py +50 -0
- vispy/visuals/_scalable_textures.py +487 -0
- vispy/visuals/axis.py +678 -0
- vispy/visuals/border.py +208 -0
- vispy/visuals/box.py +79 -0
- vispy/visuals/collections/__init__.py +30 -0
- vispy/visuals/collections/agg_fast_path_collection.py +219 -0
- vispy/visuals/collections/agg_path_collection.py +197 -0
- vispy/visuals/collections/agg_point_collection.py +52 -0
- vispy/visuals/collections/agg_segment_collection.py +142 -0
- vispy/visuals/collections/array_list.py +401 -0
- vispy/visuals/collections/base_collection.py +482 -0
- vispy/visuals/collections/collection.py +253 -0
- vispy/visuals/collections/path_collection.py +23 -0
- vispy/visuals/collections/point_collection.py +19 -0
- vispy/visuals/collections/polygon_collection.py +25 -0
- vispy/visuals/collections/raw_path_collection.py +119 -0
- vispy/visuals/collections/raw_point_collection.py +113 -0
- vispy/visuals/collections/raw_polygon_collection.py +77 -0
- vispy/visuals/collections/raw_segment_collection.py +112 -0
- vispy/visuals/collections/raw_triangle_collection.py +78 -0
- vispy/visuals/collections/segment_collection.py +19 -0
- vispy/visuals/collections/triangle_collection.py +16 -0
- vispy/visuals/collections/util.py +168 -0
- vispy/visuals/colorbar.py +699 -0
- vispy/visuals/cube.py +41 -0
- vispy/visuals/ellipse.py +162 -0
- vispy/visuals/filters/__init__.py +10 -0
- vispy/visuals/filters/base_filter.py +242 -0
- vispy/visuals/filters/clipper.py +60 -0
- vispy/visuals/filters/clipping_planes.py +122 -0
- vispy/visuals/filters/color.py +181 -0
- vispy/visuals/filters/markers.py +28 -0
- vispy/visuals/filters/mesh.py +801 -0
- vispy/visuals/filters/picking.py +60 -0
- vispy/visuals/filters/tests/__init__.py +3 -0
- vispy/visuals/filters/tests/test_primitive_picking_filters.py +70 -0
- vispy/visuals/filters/tests/test_wireframe_filter.py +16 -0
- vispy/visuals/glsl/__init__.py +1 -0
- vispy/visuals/glsl/antialiasing.py +133 -0
- vispy/visuals/glsl/color.py +63 -0
- vispy/visuals/graphs/__init__.py +1 -0
- vispy/visuals/graphs/graph.py +240 -0
- vispy/visuals/graphs/layouts/__init__.py +55 -0
- vispy/visuals/graphs/layouts/circular.py +49 -0
- vispy/visuals/graphs/layouts/force_directed.py +211 -0
- vispy/visuals/graphs/layouts/networkx_layout.py +87 -0
- vispy/visuals/graphs/layouts/random.py +52 -0
- vispy/visuals/graphs/tests/__init__.py +1 -0
- vispy/visuals/graphs/tests/test_layouts.py +139 -0
- vispy/visuals/graphs/tests/test_networkx_layout.py +47 -0
- vispy/visuals/graphs/util.py +120 -0
- vispy/visuals/gridlines.py +161 -0
- vispy/visuals/gridmesh.py +98 -0
- vispy/visuals/histogram.py +58 -0
- vispy/visuals/image.py +701 -0
- vispy/visuals/image_complex.py +130 -0
- vispy/visuals/infinite_line.py +199 -0
- vispy/visuals/instanced_mesh.py +152 -0
- vispy/visuals/isocurve.py +213 -0
- vispy/visuals/isoline.py +241 -0
- vispy/visuals/isosurface.py +113 -0
- vispy/visuals/line/__init__.py +6 -0
- vispy/visuals/line/arrow.py +289 -0
- vispy/visuals/line/dash_atlas.py +90 -0
- vispy/visuals/line/line.py +545 -0
- vispy/visuals/line_plot.py +135 -0
- vispy/visuals/linear_region.py +199 -0
- vispy/visuals/markers.py +819 -0
- vispy/visuals/mesh.py +373 -0
- vispy/visuals/mesh_normals.py +159 -0
- vispy/visuals/plane.py +54 -0
- vispy/visuals/polygon.py +145 -0
- vispy/visuals/rectangle.py +196 -0
- vispy/visuals/regular_polygon.py +56 -0
- vispy/visuals/scrolling_lines.py +197 -0
- vispy/visuals/shaders/__init__.py +17 -0
- vispy/visuals/shaders/compiler.py +206 -0
- vispy/visuals/shaders/expression.py +99 -0
- vispy/visuals/shaders/function.py +788 -0
- vispy/visuals/shaders/multiprogram.py +145 -0
- vispy/visuals/shaders/parsing.py +140 -0
- vispy/visuals/shaders/program.py +161 -0
- vispy/visuals/shaders/shader_object.py +162 -0
- vispy/visuals/shaders/tests/__init__.py +0 -0
- vispy/visuals/shaders/tests/test_function.py +486 -0
- vispy/visuals/shaders/tests/test_multiprogram.py +78 -0
- vispy/visuals/shaders/tests/test_parsing.py +57 -0
- vispy/visuals/shaders/variable.py +272 -0
- vispy/visuals/spectrogram.py +169 -0
- vispy/visuals/sphere.py +80 -0
- vispy/visuals/surface_plot.py +192 -0
- vispy/visuals/tests/__init__.py +0 -0
- vispy/visuals/tests/test_arrows.py +109 -0
- vispy/visuals/tests/test_axis.py +120 -0
- vispy/visuals/tests/test_collections.py +15 -0
- vispy/visuals/tests/test_colorbar.py +179 -0
- vispy/visuals/tests/test_colormap.py +97 -0
- vispy/visuals/tests/test_ellipse.py +122 -0
- vispy/visuals/tests/test_gridlines.py +30 -0
- vispy/visuals/tests/test_histogram.py +24 -0
- vispy/visuals/tests/test_image.py +392 -0
- vispy/visuals/tests/test_image_complex.py +36 -0
- vispy/visuals/tests/test_infinite_line.py +53 -0
- vispy/visuals/tests/test_instanced_mesh.py +50 -0
- vispy/visuals/tests/test_isosurface.py +22 -0
- vispy/visuals/tests/test_linear_region.py +152 -0
- vispy/visuals/tests/test_markers.py +54 -0
- vispy/visuals/tests/test_mesh.py +261 -0
- vispy/visuals/tests/test_mesh_normals.py +218 -0
- vispy/visuals/tests/test_polygon.py +112 -0
- vispy/visuals/tests/test_rectangle.py +163 -0
- vispy/visuals/tests/test_regular_polygon.py +111 -0
- vispy/visuals/tests/test_scalable_textures.py +196 -0
- vispy/visuals/tests/test_sdf.py +73 -0
- vispy/visuals/tests/test_spectrogram.py +42 -0
- vispy/visuals/tests/test_surface_plot.py +57 -0
- vispy/visuals/tests/test_text.py +95 -0
- vispy/visuals/tests/test_volume.py +542 -0
- vispy/visuals/tests/test_windbarb.py +33 -0
- vispy/visuals/text/__init__.py +7 -0
- vispy/visuals/text/_sdf_cpu.cpython-312-darwin.so +0 -0
- vispy/visuals/text/_sdf_cpu.pyx +112 -0
- vispy/visuals/text/_sdf_gpu.py +316 -0
- vispy/visuals/text/text.py +675 -0
- vispy/visuals/transforms/__init__.py +34 -0
- vispy/visuals/transforms/_util.py +191 -0
- vispy/visuals/transforms/base_transform.py +233 -0
- vispy/visuals/transforms/chain.py +300 -0
- vispy/visuals/transforms/interactive.py +98 -0
- vispy/visuals/transforms/linear.py +564 -0
- vispy/visuals/transforms/nonlinear.py +398 -0
- vispy/visuals/transforms/tests/__init__.py +0 -0
- vispy/visuals/transforms/tests/test_transforms.py +243 -0
- vispy/visuals/transforms/transform_system.py +339 -0
- vispy/visuals/tube.py +173 -0
- vispy/visuals/visual.py +923 -0
- vispy/visuals/volume.py +1366 -0
- vispy/visuals/windbarb.py +291 -0
- vispy/visuals/xyz_axis.py +34 -0
- vispy-0.15.0.dist-info/METADATA +243 -0
- vispy-0.15.0.dist-info/RECORD +521 -0
- vispy-0.15.0.dist-info/WHEEL +6 -0
- vispy-0.15.0.dist-info/licenses/LICENSE.txt +36 -0
- vispy-0.15.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,135 @@
|
|
|
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 numpy as np
|
|
6
|
+
|
|
7
|
+
from .line import LineVisual
|
|
8
|
+
from .markers import MarkersVisual
|
|
9
|
+
from .visual import CompoundVisual
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class LinePlotVisual(CompoundVisual):
|
|
13
|
+
"""Visual displaying a plot line with optional markers.
|
|
14
|
+
|
|
15
|
+
Parameters
|
|
16
|
+
----------
|
|
17
|
+
data : array-like
|
|
18
|
+
Arguments can be passed as ``(Y,)``, ``(X, Y)``, ``(X, Y, Z)`` or
|
|
19
|
+
``np.array((X, Y))``, ``np.array((X, Y, Z))``.
|
|
20
|
+
color : instance of Color
|
|
21
|
+
Color of the line.
|
|
22
|
+
symbol : str
|
|
23
|
+
Marker symbol to use.
|
|
24
|
+
line_kind : str
|
|
25
|
+
Kind of line to draw. For now, only solid lines (``'-'``)
|
|
26
|
+
are supported.
|
|
27
|
+
width : float
|
|
28
|
+
Line width.
|
|
29
|
+
marker_size : float
|
|
30
|
+
Marker size. If `size == 0` markers will not be shown.
|
|
31
|
+
edge_color : instance of Color
|
|
32
|
+
Color of the marker edge.
|
|
33
|
+
face_color : instance of Color
|
|
34
|
+
Color of the marker face.
|
|
35
|
+
edge_width : float
|
|
36
|
+
Edge width of the marker.
|
|
37
|
+
connect : str | array
|
|
38
|
+
See LineVisual.
|
|
39
|
+
**kwargs : keyword arguments
|
|
40
|
+
Argements to pass to the super class.
|
|
41
|
+
|
|
42
|
+
Examples
|
|
43
|
+
--------
|
|
44
|
+
All of these syntaxes will work:
|
|
45
|
+
|
|
46
|
+
>>> LinePlotVisual(y_vals)
|
|
47
|
+
>>> LinePlotVisual(x_vals, y_vals)
|
|
48
|
+
>>> LinePlotVisual(xy_vals)
|
|
49
|
+
|
|
50
|
+
See also
|
|
51
|
+
--------
|
|
52
|
+
LineVisual, MarkersVisual
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
_line_kwargs = ('color', 'width', 'connect')
|
|
56
|
+
_marker_kwargs = ('edge_color', 'face_color', 'edge_width',
|
|
57
|
+
'marker_size', 'symbol')
|
|
58
|
+
_valid_kwargs = set(_line_kwargs).union(set(_marker_kwargs))
|
|
59
|
+
_kw_trans = dict(marker_size='size')
|
|
60
|
+
|
|
61
|
+
def __init__(self, data=None, color='k', symbol=None, line_kind='-',
|
|
62
|
+
width=1., marker_size=10., edge_color='k', face_color='w',
|
|
63
|
+
edge_width=1., connect='strip'):
|
|
64
|
+
if line_kind != '-':
|
|
65
|
+
raise ValueError('Only solid lines currently supported')
|
|
66
|
+
self._line = LineVisual(method='gl', antialias=False)
|
|
67
|
+
self._markers = MarkersVisual()
|
|
68
|
+
self._kwargs = {}
|
|
69
|
+
CompoundVisual.__init__(self, [self._line, self._markers])
|
|
70
|
+
self.set_data(data, color=color, symbol=symbol,
|
|
71
|
+
width=width, marker_size=marker_size,
|
|
72
|
+
edge_color=edge_color, face_color=face_color,
|
|
73
|
+
edge_width=edge_width, connect=connect)
|
|
74
|
+
|
|
75
|
+
def set_data(self, data=None, **kwargs):
|
|
76
|
+
"""Set the line data
|
|
77
|
+
|
|
78
|
+
Parameters
|
|
79
|
+
----------
|
|
80
|
+
data : array-like
|
|
81
|
+
The data.
|
|
82
|
+
**kwargs : dict
|
|
83
|
+
Keywoard arguments to pass to MarkerVisual and LineVisal.
|
|
84
|
+
"""
|
|
85
|
+
bad_keys = set(kwargs) - self._valid_kwargs
|
|
86
|
+
if bad_keys:
|
|
87
|
+
raise TypeError("Invalid keyword arguments: {}".format(", ".join(bad_keys)))
|
|
88
|
+
|
|
89
|
+
# remember these kwargs for future updates
|
|
90
|
+
self._kwargs.update(kwargs)
|
|
91
|
+
if data is None:
|
|
92
|
+
pos = None
|
|
93
|
+
else:
|
|
94
|
+
if isinstance(data, tuple):
|
|
95
|
+
pos = np.array(data).T.astype(np.float32)
|
|
96
|
+
else:
|
|
97
|
+
pos = np.atleast_1d(data).astype(np.float32)
|
|
98
|
+
|
|
99
|
+
if pos.ndim == 1:
|
|
100
|
+
pos = pos[:, np.newaxis]
|
|
101
|
+
elif pos.ndim > 2:
|
|
102
|
+
raise ValueError('data must have at most two dimensions')
|
|
103
|
+
|
|
104
|
+
if pos.size == 0:
|
|
105
|
+
pos = self._line.pos
|
|
106
|
+
|
|
107
|
+
# if both args and keywords are zero, then there is no
|
|
108
|
+
# point in calling this function.
|
|
109
|
+
if len(self._kwargs) == 0:
|
|
110
|
+
raise TypeError("neither line points nor line properties"
|
|
111
|
+
"are provided")
|
|
112
|
+
elif pos.shape[1] == 1:
|
|
113
|
+
x = np.arange(pos.shape[0], dtype=np.float32)[:, np.newaxis]
|
|
114
|
+
pos = np.concatenate((x, pos), axis=1)
|
|
115
|
+
# if args are empty, don't modify position
|
|
116
|
+
elif pos.shape[1] > 3:
|
|
117
|
+
raise TypeError("Too many coordinates given (%s; max is 3)."
|
|
118
|
+
% pos.shape[1])
|
|
119
|
+
|
|
120
|
+
# todo: have both sub-visuals share the same buffers.
|
|
121
|
+
line_kwargs = {}
|
|
122
|
+
for k in self._line_kwargs:
|
|
123
|
+
if k in self._kwargs:
|
|
124
|
+
k_ = self._kw_trans[k] if k in self._kw_trans else k
|
|
125
|
+
line_kwargs[k] = self._kwargs.get(k_)
|
|
126
|
+
if pos is not None or len(line_kwargs) > 0:
|
|
127
|
+
self._line.set_data(pos=pos, **line_kwargs)
|
|
128
|
+
|
|
129
|
+
marker_kwargs = {}
|
|
130
|
+
for k in self._marker_kwargs:
|
|
131
|
+
if k in self._kwargs:
|
|
132
|
+
k_ = self._kw_trans[k] if k in self._kw_trans else k
|
|
133
|
+
marker_kwargs[k_] = self._kwargs.get(k)
|
|
134
|
+
if pos is not None or len(marker_kwargs) > 0:
|
|
135
|
+
self._markers.set_data(pos=pos, **marker_kwargs)
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
from .. import gloo
|
|
4
|
+
from .visual import Visual
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
_VERTEX_SHADER = """
|
|
8
|
+
attribute vec2 a_pos;
|
|
9
|
+
varying vec4 v_color;
|
|
10
|
+
|
|
11
|
+
void main() {
|
|
12
|
+
vec4 pos = vec4(a_pos, 0, 1);
|
|
13
|
+
|
|
14
|
+
if($is_vertical==1)
|
|
15
|
+
{
|
|
16
|
+
pos.y = $render_to_visual(pos).y;
|
|
17
|
+
}
|
|
18
|
+
else
|
|
19
|
+
{
|
|
20
|
+
pos.x = $render_to_visual(pos).x;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
gl_Position = $transform(pos);
|
|
24
|
+
gl_PointSize = 10.;
|
|
25
|
+
v_color = $color;
|
|
26
|
+
}
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
_FRAGMENT_SHADER = """
|
|
30
|
+
varying vec4 v_color;
|
|
31
|
+
|
|
32
|
+
void main() {
|
|
33
|
+
gl_FragColor = v_color;
|
|
34
|
+
}
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class LinearRegionVisual(Visual):
|
|
39
|
+
"""Infinite horizontal or vertical region for 2D plots.
|
|
40
|
+
|
|
41
|
+
Parameters
|
|
42
|
+
----------
|
|
43
|
+
pos : list, tuple or numpy array
|
|
44
|
+
Bounds of the region along the axis. len(pos) must be >=2.
|
|
45
|
+
color : list, tuple, or array
|
|
46
|
+
The color to use when drawing the line. It must have a shape of
|
|
47
|
+
(1, 4) for a single color region or (len(pos), 4) for a multicolor
|
|
48
|
+
region.
|
|
49
|
+
vertical:
|
|
50
|
+
True for drawing a vertical region, False for an horizontal region
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
_shaders = {
|
|
54
|
+
'vertex': _VERTEX_SHADER,
|
|
55
|
+
'fragment': _FRAGMENT_SHADER,
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
def __init__(self, pos=None, color=[1.0, 1.0, 1.0, 1.0],
|
|
59
|
+
vertical=True, **kwargs):
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
"""
|
|
63
|
+
Visual.__init__(self, vcode=self._shaders['vertex'], fcode=self._shaders['fragment'])
|
|
64
|
+
|
|
65
|
+
self._changed = {'pos': False, 'color': False}
|
|
66
|
+
|
|
67
|
+
self.pos_buf = gloo.VertexBuffer()
|
|
68
|
+
self.color_buf = gloo.VertexBuffer()
|
|
69
|
+
# The Visual superclass contains a MultiProgram, which is an object
|
|
70
|
+
# that behaves like a normal shader program (you can assign shader
|
|
71
|
+
# code, upload values, set template variables, etc.) but internally
|
|
72
|
+
# manages multiple ModularProgram instances, one per view.
|
|
73
|
+
|
|
74
|
+
# The MultiProgram is accessed via the `shared_program` property, so
|
|
75
|
+
# the following modifications to the program will be applied to all
|
|
76
|
+
# views:
|
|
77
|
+
self.shared_program['a_pos'] = self.pos_buf
|
|
78
|
+
self._program.vert['is_vertical'] = 1 if vertical else 0
|
|
79
|
+
|
|
80
|
+
self._need_upload = False
|
|
81
|
+
self._is_vertical = bool(vertical)
|
|
82
|
+
self._pos = np.zeros((4, 2), dtype=np.float32)
|
|
83
|
+
self._color = np.ones((1, 4), dtype=np.float32)
|
|
84
|
+
|
|
85
|
+
# Visual keeps track of draw mode, index buffer, and GL state. These
|
|
86
|
+
# are shared between all views.
|
|
87
|
+
self._draw_mode = 'triangle_strip'
|
|
88
|
+
self.set_gl_state('translucent', depth_test=False)
|
|
89
|
+
|
|
90
|
+
self.set_data(pos=pos, color=color)
|
|
91
|
+
|
|
92
|
+
def set_data(self, pos=None, color=None):
|
|
93
|
+
"""Set the data
|
|
94
|
+
|
|
95
|
+
Parameters
|
|
96
|
+
----------
|
|
97
|
+
pos : list, tuple or numpy array
|
|
98
|
+
Bounds of the region along the axis. len(pos) must be >=2.
|
|
99
|
+
color : list, tuple, or array
|
|
100
|
+
The color to use when drawing the line. It must have a shape of
|
|
101
|
+
(1, 4) for a single color region or (len(pos), 4) for a multicolor
|
|
102
|
+
region.
|
|
103
|
+
"""
|
|
104
|
+
new_pos = self._pos
|
|
105
|
+
new_color = self._color
|
|
106
|
+
|
|
107
|
+
if pos is not None:
|
|
108
|
+
num_elements = len(pos)
|
|
109
|
+
pos = np.array(pos, dtype=np.float32)
|
|
110
|
+
if pos.ndim != 1:
|
|
111
|
+
raise ValueError('Expected 1D array')
|
|
112
|
+
vertex = np.empty((num_elements * 2, 2), dtype=np.float32)
|
|
113
|
+
if self._is_vertical:
|
|
114
|
+
vertex[:, 0] = np.repeat(pos, 2)
|
|
115
|
+
vertex[:, 1] = np.tile([-1, 1], num_elements)
|
|
116
|
+
else:
|
|
117
|
+
vertex[:, 1] = np.repeat(pos, 2)
|
|
118
|
+
vertex[:, 0] = np.tile([1, -1], num_elements)
|
|
119
|
+
new_pos = vertex
|
|
120
|
+
self._changed['pos'] = True
|
|
121
|
+
|
|
122
|
+
if color is not None:
|
|
123
|
+
color = np.array(color, dtype=np.float32)
|
|
124
|
+
num_elements = new_pos.shape[0] / 2
|
|
125
|
+
if color.ndim == 2:
|
|
126
|
+
if color.shape[0] != num_elements:
|
|
127
|
+
raise ValueError('Expected a color for each pos')
|
|
128
|
+
if color.shape[1] != 4:
|
|
129
|
+
raise ValueError('Each color must be a RGBA array')
|
|
130
|
+
color = np.repeat(color, 2, axis=0).astype(np.float32)
|
|
131
|
+
elif color.ndim == 1:
|
|
132
|
+
if color.shape[0] != 4:
|
|
133
|
+
raise ValueError('Each color must be a RGBA array')
|
|
134
|
+
color = np.repeat([color], new_pos.shape[0], axis=0)
|
|
135
|
+
color = color.astype(np.float32)
|
|
136
|
+
else:
|
|
137
|
+
raise ValueError('Expected a numpy array of shape '
|
|
138
|
+
'(%d, 4) or (1, 4)' % num_elements)
|
|
139
|
+
new_color = color
|
|
140
|
+
self._changed['color'] = True
|
|
141
|
+
|
|
142
|
+
# Ensure pos and color have the same size
|
|
143
|
+
if new_pos.shape[0] != new_color.shape[0]:
|
|
144
|
+
raise ValueError('pos and color does must have the same size')
|
|
145
|
+
|
|
146
|
+
self._color = new_color
|
|
147
|
+
self._pos = new_pos
|
|
148
|
+
|
|
149
|
+
@property
|
|
150
|
+
def color(self):
|
|
151
|
+
return self._color[::2]
|
|
152
|
+
|
|
153
|
+
@property
|
|
154
|
+
def pos(self):
|
|
155
|
+
if self._is_vertical:
|
|
156
|
+
return self._pos[:, 0].ravel()[::2]
|
|
157
|
+
else:
|
|
158
|
+
return self._pos[:, 1].ravel()[::2]
|
|
159
|
+
|
|
160
|
+
def _compute_bounds(self, axis, view):
|
|
161
|
+
"""Return the (min, max) bounding values of this visual along *axis*
|
|
162
|
+
in the local coordinate system.
|
|
163
|
+
"""
|
|
164
|
+
is_vertical = self._is_vertical
|
|
165
|
+
pos = self._pos
|
|
166
|
+
if axis == 0 and is_vertical:
|
|
167
|
+
return (pos[0, 0], pos[-1, 0])
|
|
168
|
+
elif axis == 1 and not is_vertical:
|
|
169
|
+
return (pos[0, 1], pos[-1, 1])
|
|
170
|
+
|
|
171
|
+
return None
|
|
172
|
+
|
|
173
|
+
@property
|
|
174
|
+
def is_vertical(self):
|
|
175
|
+
return self._is_vertical
|
|
176
|
+
|
|
177
|
+
def _prepare_transforms(self, view=None):
|
|
178
|
+
program = view.view_program
|
|
179
|
+
transforms = view.transforms
|
|
180
|
+
program.vert['render_to_visual'] = transforms.get_transform('render',
|
|
181
|
+
'visual')
|
|
182
|
+
program.vert['transform'] = transforms.get_transform('visual',
|
|
183
|
+
'render')
|
|
184
|
+
|
|
185
|
+
def _prepare_draw(self, view=None):
|
|
186
|
+
"""This method is called immediately before each draw.
|
|
187
|
+
|
|
188
|
+
The *view* argument indicates which view is about to be drawn.
|
|
189
|
+
"""
|
|
190
|
+
if self._changed['pos']:
|
|
191
|
+
self.pos_buf.set_data(self._pos)
|
|
192
|
+
self._changed['pos'] = False
|
|
193
|
+
|
|
194
|
+
if self._changed['color']:
|
|
195
|
+
self.color_buf.set_data(self._color)
|
|
196
|
+
self._program.vert['color'] = self.color_buf
|
|
197
|
+
self._changed['color'] = False
|
|
198
|
+
|
|
199
|
+
return True
|