vispy 0.14.0__cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vispy might be problematic. Click here for more details.
- 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 +968 -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 +1134 -0
- vispy/color/tests/__init__.py +0 -0
- vispy/color/tests/test_color.py +352 -0
- vispy/conftest.py +12 -0
- vispy/ext/__init__.py +0 -0
- vispy/ext/cocoapy.py +1542 -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 +134 -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 +698 -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 +506 -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 +566 -0
- vispy/gloo/gl/tests/test_names.py +246 -0
- vispy/gloo/gl/tests/test_use.py +71 -0
- vispy/gloo/glir.py +1816 -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 +1045 -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 +106 -0
- vispy/scene/cameras/base_camera.py +538 -0
- vispy/scene/cameras/fly.py +474 -0
- vispy/scene/cameras/magnify.py +163 -0
- vispy/scene/cameras/panzoom.py +308 -0
- vispy/scene/cameras/perspective.py +333 -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 +173 -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 +446 -0
- vispy/testing/_testing.py +416 -0
- vispy/testing/image_tester.py +473 -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 +17 -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 +4 -0
- vispy/visuals/__init__.py +50 -0
- vispy/visuals/_scalable_textures.py +485 -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 +163 -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 +796 -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 +105 -0
- vispy/visuals/gridmesh.py +98 -0
- vispy/visuals/histogram.py +58 -0
- vispy/visuals/image.py +688 -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 +810 -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_histogram.py +24 -0
- vispy/visuals/tests/test_image.py +390 -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 +180 -0
- vispy/visuals/tests/test_sdf.py +73 -0
- vispy/visuals/tests/test_spectrogram.py +42 -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-aarch64-linux-gnu.so +0 -0
- vispy/visuals/text/_sdf_cpu.pyx +110 -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 +1335 -0
- vispy/visuals/windbarb.py +291 -0
- vispy/visuals/xyz_axis.py +34 -0
- vispy-0.14.0.dist-info/LICENSE.txt +36 -0
- vispy-0.14.0.dist-info/METADATA +218 -0
- vispy-0.14.0.dist-info/RECORD +519 -0
- vispy-0.14.0.dist-info/WHEEL +6 -0
- vispy-0.14.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,36 @@
|
|
|
1
|
+
Vispy licensing terms
|
|
2
|
+
---------------------
|
|
3
|
+
|
|
4
|
+
Vispy is licensed under the terms of the (new) BSD license:
|
|
5
|
+
|
|
6
|
+
Copyright (c) 2013-2023, Vispy Development Team. All rights reserved.
|
|
7
|
+
|
|
8
|
+
Redistribution and use in source and binary forms, with or without
|
|
9
|
+
modification, are permitted provided that the following conditions are met:
|
|
10
|
+
* Redistributions of source code must retain the above copyright
|
|
11
|
+
notice, this list of conditions and the following disclaimer.
|
|
12
|
+
* Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
documentation and/or other materials provided with the distribution.
|
|
15
|
+
* Neither the name of Vispy Development Team nor the names of its
|
|
16
|
+
contributors may be used to endorse or promote products
|
|
17
|
+
derived from this software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
|
20
|
+
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
21
|
+
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
22
|
+
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
|
23
|
+
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
24
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
25
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
26
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
27
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
28
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
29
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
Exceptions
|
|
33
|
+
----------
|
|
34
|
+
|
|
35
|
+
The examples code in the examples directory can be considered public
|
|
36
|
+
domain, unless otherwise indicated in the corresponding source file.
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: vispy
|
|
3
|
+
Version: 0.14.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.8
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
26
|
+
Classifier: Framework :: IPython
|
|
27
|
+
Provides: vispy
|
|
28
|
+
Requires-Python: >=3.8
|
|
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: doc
|
|
37
|
+
Requires-Dist: pydata-sphinx-theme ; extra == 'doc'
|
|
38
|
+
Requires-Dist: numpydoc ; extra == 'doc'
|
|
39
|
+
Requires-Dist: sphinxcontrib-apidoc ; extra == 'doc'
|
|
40
|
+
Requires-Dist: sphinx-gallery ; extra == 'doc'
|
|
41
|
+
Requires-Dist: myst-parser ; extra == 'doc'
|
|
42
|
+
Requires-Dist: pillow ; extra == 'doc'
|
|
43
|
+
Requires-Dist: pytest ; extra == 'doc'
|
|
44
|
+
Requires-Dist: pyopengl ; extra == 'doc'
|
|
45
|
+
Provides-Extra: io
|
|
46
|
+
Requires-Dist: meshio ; extra == 'io'
|
|
47
|
+
Requires-Dist: Pillow ; extra == 'io'
|
|
48
|
+
Provides-Extra: ipython-static
|
|
49
|
+
Requires-Dist: ipython ; extra == 'ipython-static'
|
|
50
|
+
Provides-Extra: pyglet
|
|
51
|
+
Requires-Dist: pyglet >=1.2 ; extra == 'pyglet'
|
|
52
|
+
Provides-Extra: pyqt5
|
|
53
|
+
Requires-Dist: pyqt5 ; extra == 'pyqt5'
|
|
54
|
+
Provides-Extra: pyqt6
|
|
55
|
+
Requires-Dist: pyqt6 ; extra == 'pyqt6'
|
|
56
|
+
Provides-Extra: pyside
|
|
57
|
+
Requires-Dist: PySide ; extra == 'pyside'
|
|
58
|
+
Provides-Extra: pyside2
|
|
59
|
+
Requires-Dist: PySide2 ; extra == 'pyside2'
|
|
60
|
+
Provides-Extra: pyside6
|
|
61
|
+
Requires-Dist: PySide6 ; extra == 'pyside6'
|
|
62
|
+
Provides-Extra: sdl2
|
|
63
|
+
Requires-Dist: PySDL2 ; extra == 'sdl2'
|
|
64
|
+
Provides-Extra: tk
|
|
65
|
+
Requires-Dist: pyopengltk ; extra == 'tk'
|
|
66
|
+
Provides-Extra: wx
|
|
67
|
+
Requires-Dist: wxPython ; extra == 'wx'
|
|
68
|
+
|
|
69
|
+
VisPy: interactive scientific visualization in Python
|
|
70
|
+
-----------------------------------------------------
|
|
71
|
+
|
|
72
|
+
Main website: http://vispy.org
|
|
73
|
+
|
|
74
|
+
|Build Status| |Coverage Status| |Zenodo Link| |Contributor Covenant|
|
|
75
|
+
|
|
76
|
+
----
|
|
77
|
+
|
|
78
|
+
VisPy is a **high-performance interactive 2D/3D data visualization
|
|
79
|
+
library**. VisPy leverages the computational power of modern **Graphics
|
|
80
|
+
Processing Units (GPUs)** through the **OpenGL** library to display very
|
|
81
|
+
large datasets. Applications of VisPy include:
|
|
82
|
+
|
|
83
|
+
- High-quality interactive scientific plots with millions of points.
|
|
84
|
+
- Direct visualization of real-time data.
|
|
85
|
+
- Fast interactive visualization of 3D models (meshes, volume
|
|
86
|
+
rendering).
|
|
87
|
+
- OpenGL visualization demos.
|
|
88
|
+
- Scientific GUIs with fast, scalable visualization widgets (`Qt <http://www.qt.io>`__ or
|
|
89
|
+
`IPython notebook <http://ipython.org/notebook.html>`__ with WebGL).
|
|
90
|
+
|
|
91
|
+
Releases
|
|
92
|
+
--------
|
|
93
|
+
|
|
94
|
+
See `CHANGELOG.md <./CHANGELOG.md>`_.
|
|
95
|
+
|
|
96
|
+
Announcements
|
|
97
|
+
-------------
|
|
98
|
+
|
|
99
|
+
See the `VisPy Website <https://vispy.org/news.html>`_.
|
|
100
|
+
|
|
101
|
+
Using VisPy
|
|
102
|
+
-----------
|
|
103
|
+
|
|
104
|
+
VisPy is a young library under heavy development at this time. It
|
|
105
|
+
targets two categories of users:
|
|
106
|
+
|
|
107
|
+
1. **Users knowing OpenGL**, or willing to learn OpenGL, who want to
|
|
108
|
+
create beautiful and fast interactive 2D/3D visualizations in Python
|
|
109
|
+
as easily as possible.
|
|
110
|
+
2. **Scientists without any knowledge of OpenGL**, who are seeking a
|
|
111
|
+
high-level, high-performance plotting toolkit.
|
|
112
|
+
|
|
113
|
+
If you're in the first category, you can already start using VisPy.
|
|
114
|
+
VisPy offers a Pythonic, NumPy-aware, user-friendly interface for OpenGL
|
|
115
|
+
ES 2.0 called **gloo**. You can focus on writing your GLSL code instead
|
|
116
|
+
of dealing with the complicated OpenGL API - VisPy takes care of that
|
|
117
|
+
automatically for you.
|
|
118
|
+
|
|
119
|
+
If you're in the second category, we're starting to build experimental
|
|
120
|
+
high-level plotting interfaces. Notably, VisPy now ships a very basic
|
|
121
|
+
and experimental OpenGL backend for matplotlib.
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
Installation
|
|
125
|
+
------------
|
|
126
|
+
|
|
127
|
+
Please follow the detailed
|
|
128
|
+
`installation instructions <http://vispy.org/installation.html>`_
|
|
129
|
+
on the VisPy website.
|
|
130
|
+
|
|
131
|
+
Structure of VisPy
|
|
132
|
+
------------------
|
|
133
|
+
|
|
134
|
+
Currently, the main subpackages are:
|
|
135
|
+
|
|
136
|
+
- **app**: integrates an event system and offers a unified interface on
|
|
137
|
+
top of many window backends (Qt4, wx, glfw, jupyter notebook,
|
|
138
|
+
and others). Relatively stable API.
|
|
139
|
+
- **gloo**: a Pythonic, object-oriented interface to OpenGL. Relatively
|
|
140
|
+
stable API.
|
|
141
|
+
- **scene**: this is the system underlying our upcoming high level
|
|
142
|
+
visualization interfaces. Under heavy development and still
|
|
143
|
+
experimental, it contains several modules.
|
|
144
|
+
|
|
145
|
+
- **Visuals** are graphical abstractions representing 2D shapes, 3D
|
|
146
|
+
meshes, text, etc.
|
|
147
|
+
- **Transforms** implement 2D/3D transformations implemented on both
|
|
148
|
+
CPU and GPU.
|
|
149
|
+
- **Shaders** implements a shader composition system for plumbing
|
|
150
|
+
together snippets of GLSL code.
|
|
151
|
+
- The **scene graph** tracks all objects within a transformation
|
|
152
|
+
graph.
|
|
153
|
+
- **plot**: high-level plotting interfaces.
|
|
154
|
+
|
|
155
|
+
The API of all public interfaces are subject to change in the future,
|
|
156
|
+
although **app** and **gloo** are *relatively* stable at this point.
|
|
157
|
+
|
|
158
|
+
Code of Conduct
|
|
159
|
+
---------------
|
|
160
|
+
|
|
161
|
+
The VisPy community requires its members to abide by the
|
|
162
|
+
`Code of Conduct <./CODE_OF_CONDUCT.md>`_. In this CoC you will find the
|
|
163
|
+
expectations of members, the penalties for violating these expectations, and
|
|
164
|
+
how violations can be reported to the members of the community in charge of
|
|
165
|
+
enforcing this Code of Conduct.
|
|
166
|
+
|
|
167
|
+
Governance
|
|
168
|
+
----------
|
|
169
|
+
|
|
170
|
+
The VisPy project maintainers make decisions about the project based on a
|
|
171
|
+
simple consensus model. This is described in more detail on the
|
|
172
|
+
`governance page <https://vispy.org/governance/GOVERNANCE.html>`_ of the vispy
|
|
173
|
+
website as well as the
|
|
174
|
+
`list of maintainers <https://vispy.org/governance/MAINTAINERS.html>`_.
|
|
175
|
+
|
|
176
|
+
In addition to decisions about the VisPy project, there is also a steering
|
|
177
|
+
committee for the overall VisPy organization. More information about this
|
|
178
|
+
committee can also be found on the `steering committee page <https://vispy.org/org/STEERING-COMMITTEE.html>`_
|
|
179
|
+
of the vispy website,
|
|
180
|
+
along with the organization's `charter <https://vispy.org/org/CHARTER.html>`_ and
|
|
181
|
+
other related documents (linked in the charter).
|
|
182
|
+
|
|
183
|
+
Genesis
|
|
184
|
+
-------
|
|
185
|
+
|
|
186
|
+
VisPy began when four developers with their own visualization libraries
|
|
187
|
+
decided to team up:
|
|
188
|
+
`Luke Campagnola <http://luke.campagnola.me/>`__ with `PyQtGraph <http://www.pyqtgraph.org/>`__,
|
|
189
|
+
`Almar Klein <http://www.almarklein.org/>`__ with `Visvis <https://github.com/almarklein/visvis>`__,
|
|
190
|
+
`Cyrille Rossant <http://cyrille.rossant.net>`__ with `Galry <https://github.com/rossant/galry>`__,
|
|
191
|
+
`Nicolas Rougier <http://www.loria.fr/~rougier/index.html>`__ with `Glumpy <https://github.com/rougier/Glumpy>`__.
|
|
192
|
+
|
|
193
|
+
Now VisPy looks to build on the expertise of these developers and the
|
|
194
|
+
broader open-source community to build a high-performance OpenGL library.
|
|
195
|
+
|
|
196
|
+
----
|
|
197
|
+
|
|
198
|
+
External links
|
|
199
|
+
--------------
|
|
200
|
+
|
|
201
|
+
- `User mailing
|
|
202
|
+
list <https://groups.google.com/forum/#!forum/vispy>`__
|
|
203
|
+
- `Dev mailing
|
|
204
|
+
list <https://groups.google.com/forum/#!forum/vispy-dev>`__
|
|
205
|
+
- `Chat room <https://gitter.im/vispy/vispy>`__
|
|
206
|
+
- `Developer chat room <https://gitter.im/vispy/vispy-dev>`__
|
|
207
|
+
- `Wiki <http://github.com/vispy/vispy/wiki>`__
|
|
208
|
+
- `Gallery <http://vispy.org/gallery.html>`__
|
|
209
|
+
- `Documentation <http://vispy.readthedocs.org>`__
|
|
210
|
+
|
|
211
|
+
.. |Build Status| image:: https://github.com/vispy/vispy/workflows/CI/badge.svg
|
|
212
|
+
:target: https://github.com/vispy/vispy/actions
|
|
213
|
+
.. |Coverage Status| image:: https://img.shields.io/coveralls/vispy/vispy/main.svg
|
|
214
|
+
:target: https://coveralls.io/r/vispy/vispy?branch=main
|
|
215
|
+
.. |Zenodo Link| image:: https://zenodo.org/badge/5822/vispy/vispy.svg
|
|
216
|
+
:target: http://dx.doi.org/10.5281/zenodo.17869
|
|
217
|
+
.. |Contributor Covenant| image:: https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg
|
|
218
|
+
:target: CODE_OF_CONDUCT.md
|