vispy 0.15.0__cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vispy might be problematic. Click here for more details.
- 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-313-aarch64-linux-gnu.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,401 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# -----------------------------------------------------------------------------
|
|
3
|
+
# Copyright (c) 2014, Nicolas P. Rougier. All rights reserved.
|
|
4
|
+
# Distributed under the terms of the new BSD License.
|
|
5
|
+
# -----------------------------------------------------------------------------
|
|
6
|
+
"""
|
|
7
|
+
An ArrayList is a strongly typed list whose type can be anything that can be
|
|
8
|
+
interpreted as a numpy data type.
|
|
9
|
+
|
|
10
|
+
Example
|
|
11
|
+
-------
|
|
12
|
+
>>> L = ArrayList( [[0], [1,2], [3,4,5], [6,7,8,9]] )
|
|
13
|
+
>>> print L
|
|
14
|
+
[ [0] [1 2] [3 4 5] [6 7 8 9] ]
|
|
15
|
+
>>> print L.data
|
|
16
|
+
[0 1 2 3 4 5 6 7 8 9]
|
|
17
|
+
|
|
18
|
+
You can add several items at once by specifying common or individual size: a
|
|
19
|
+
single scalar means all items are the same size while a list of sizes is used
|
|
20
|
+
to specify individual item sizes.
|
|
21
|
+
|
|
22
|
+
Example
|
|
23
|
+
-------
|
|
24
|
+
>>> L = ArrayList( np.arange(10), [3,3,4])
|
|
25
|
+
>>> print L
|
|
26
|
+
[ [0 1 2] [3 4 5] [6 7 8 9] ]
|
|
27
|
+
>>> print L.data
|
|
28
|
+
[0 1 2 3 4 5 6 7 8 9]
|
|
29
|
+
"""
|
|
30
|
+
import numpy as np
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ArrayList(object):
|
|
34
|
+
"""
|
|
35
|
+
An ArrayList is a strongly typed list whose type can be anything that can
|
|
36
|
+
be interpreted as a numpy data type.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, data=None, itemsize=None, dtype=float,
|
|
40
|
+
sizeable=True, writeable=True):
|
|
41
|
+
"""Create a new buffer using given data and sizes or dtype
|
|
42
|
+
|
|
43
|
+
Parameters
|
|
44
|
+
----------
|
|
45
|
+
data : array_like
|
|
46
|
+
An array, any object exposing the array interface, an object
|
|
47
|
+
whose __array__ method returns an array, or any (nested) sequence.
|
|
48
|
+
|
|
49
|
+
itemsize: int or 1-D array
|
|
50
|
+
If `itemsize is an integer, N, the array will be divided
|
|
51
|
+
into elements of size N. If such partition is not possible,
|
|
52
|
+
an error is raised.
|
|
53
|
+
|
|
54
|
+
If `itemsize` is 1-D array, the array will be divided into
|
|
55
|
+
elements whose successive sizes will be picked from itemsize.
|
|
56
|
+
If the sum of itemsize values is different from array size,
|
|
57
|
+
an error is raised.
|
|
58
|
+
|
|
59
|
+
dtype: np.dtype
|
|
60
|
+
Any object that can be interpreted as a numpy data type.
|
|
61
|
+
|
|
62
|
+
sizeable : boolean
|
|
63
|
+
Indicate whether item can be appended/inserted/deleted
|
|
64
|
+
|
|
65
|
+
writeable : boolean
|
|
66
|
+
Indicate whether content can be changed
|
|
67
|
+
"""
|
|
68
|
+
self._sizeable = sizeable
|
|
69
|
+
self._writeable = writeable
|
|
70
|
+
|
|
71
|
+
if data is not None:
|
|
72
|
+
if isinstance(data, (list, tuple)):
|
|
73
|
+
if isinstance(data[0], (list, tuple)):
|
|
74
|
+
itemsize = [len(sublist) for sublist in data]
|
|
75
|
+
data = [item for sublist in data for item in sublist]
|
|
76
|
+
self._data = np.array(data)
|
|
77
|
+
self._size = self._data.size
|
|
78
|
+
|
|
79
|
+
# Default is one group with all data inside
|
|
80
|
+
_itemsize = np.ones(1) * self._data.size
|
|
81
|
+
|
|
82
|
+
# Check item sizes and get items count
|
|
83
|
+
if itemsize is not None:
|
|
84
|
+
if isinstance(itemsize, int):
|
|
85
|
+
if (self._size % itemsize) != 0:
|
|
86
|
+
raise ValueError("Cannot partition data as requested")
|
|
87
|
+
self._count = self._size // itemsize
|
|
88
|
+
_itemsize = np.ones(
|
|
89
|
+
self._count, dtype=int) * (self._size // self._count)
|
|
90
|
+
else:
|
|
91
|
+
_itemsize = np.array(itemsize)
|
|
92
|
+
self._count = len(itemsize)
|
|
93
|
+
if _itemsize.sum() != self._size:
|
|
94
|
+
raise ValueError("Cannot partition data as requested")
|
|
95
|
+
else:
|
|
96
|
+
self._count = 1
|
|
97
|
+
|
|
98
|
+
# Store items
|
|
99
|
+
self._items = np.zeros((self._count, 2), int)
|
|
100
|
+
C = _itemsize.cumsum()
|
|
101
|
+
self._items[1:, 0] += C[:-1]
|
|
102
|
+
self._items[0:, 1] += C
|
|
103
|
+
|
|
104
|
+
else:
|
|
105
|
+
self._data = np.zeros(1, dtype=dtype)
|
|
106
|
+
self._items = np.zeros((1, 2), dtype=int)
|
|
107
|
+
self._size = 0
|
|
108
|
+
self._count = 0
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def data(self):
|
|
112
|
+
"""The array's elements, in memory."""
|
|
113
|
+
return self._data[:self._size]
|
|
114
|
+
|
|
115
|
+
@property
|
|
116
|
+
def size(self):
|
|
117
|
+
"""Number of base elements, in memory."""
|
|
118
|
+
return self._size
|
|
119
|
+
|
|
120
|
+
@property
|
|
121
|
+
def itemsize(self):
|
|
122
|
+
"""Individual item sizes"""
|
|
123
|
+
return self._items[:self._count, 1] - self._items[:self._count, 0]
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def dtype(self):
|
|
127
|
+
"""Describes the format of the elements in the buffer."""
|
|
128
|
+
return self._data.dtype
|
|
129
|
+
|
|
130
|
+
def reserve(self, capacity):
|
|
131
|
+
"""Set current capacity of the underlying array"""
|
|
132
|
+
if capacity >= self._data.size:
|
|
133
|
+
capacity = int(2 ** np.ceil(np.log2(capacity)))
|
|
134
|
+
self._data = np.resize(self._data, capacity)
|
|
135
|
+
|
|
136
|
+
def __len__(self):
|
|
137
|
+
"""x.__len__() <==> len(x)"""
|
|
138
|
+
return self._count
|
|
139
|
+
|
|
140
|
+
def __str__(self):
|
|
141
|
+
s = '[ '
|
|
142
|
+
for item in self:
|
|
143
|
+
s += str(item) + ' '
|
|
144
|
+
s += ']'
|
|
145
|
+
return s
|
|
146
|
+
|
|
147
|
+
def __getitem__(self, key):
|
|
148
|
+
"""x.__getitem__(y) <==> x[y]"""
|
|
149
|
+
if isinstance(key, int):
|
|
150
|
+
if key < 0:
|
|
151
|
+
key += len(self)
|
|
152
|
+
if key < 0 or key >= len(self):
|
|
153
|
+
raise IndexError("Tuple index out of range")
|
|
154
|
+
dstart = self._items[key][0]
|
|
155
|
+
dstop = self._items[key][1]
|
|
156
|
+
return self._data[dstart:dstop]
|
|
157
|
+
|
|
158
|
+
elif isinstance(key, slice):
|
|
159
|
+
istart, istop, step = key.indices(len(self))
|
|
160
|
+
if istart > istop:
|
|
161
|
+
istart, istop = istop, istart
|
|
162
|
+
dstart = self._items[istart][0]
|
|
163
|
+
if istart == istop:
|
|
164
|
+
dstop = dstart
|
|
165
|
+
else:
|
|
166
|
+
dstop = self._items[istop - 1][1]
|
|
167
|
+
return self._data[dstart:dstop]
|
|
168
|
+
|
|
169
|
+
elif isinstance(key, str):
|
|
170
|
+
return self._data[key][:self._size]
|
|
171
|
+
|
|
172
|
+
elif key is Ellipsis:
|
|
173
|
+
return self.data
|
|
174
|
+
|
|
175
|
+
else:
|
|
176
|
+
raise TypeError("List indices must be integers")
|
|
177
|
+
|
|
178
|
+
def __setitem__(self, key, data):
|
|
179
|
+
"""x.__setitem__(i, y) <==> x[i]=y"""
|
|
180
|
+
if not self._writeable:
|
|
181
|
+
raise AttributeError("List is not writeable")
|
|
182
|
+
|
|
183
|
+
if isinstance(key, (int, slice)):
|
|
184
|
+
if isinstance(key, int):
|
|
185
|
+
if key < 0:
|
|
186
|
+
key += len(self)
|
|
187
|
+
if key < 0 or key > len(self):
|
|
188
|
+
raise IndexError("List assignment index out of range")
|
|
189
|
+
dstart = self._items[key][0]
|
|
190
|
+
dstop = self._items[key][1]
|
|
191
|
+
istart = key
|
|
192
|
+
elif isinstance(key, slice):
|
|
193
|
+
istart, istop, step = key.indices(len(self))
|
|
194
|
+
if istart == istop:
|
|
195
|
+
return
|
|
196
|
+
if istart > istop:
|
|
197
|
+
istart, istop = istop, istart
|
|
198
|
+
if istart > len(self) or istop > len(self):
|
|
199
|
+
raise IndexError("Can only assign iterable")
|
|
200
|
+
dstart = self._items[istart][0]
|
|
201
|
+
if istart == istop:
|
|
202
|
+
dstop = dstart
|
|
203
|
+
else:
|
|
204
|
+
dstop = self._items[istop - 1][1]
|
|
205
|
+
|
|
206
|
+
if hasattr(data, "__len__"):
|
|
207
|
+
if len(data) == dstop - dstart: # or len(data) == 1:
|
|
208
|
+
self._data[dstart:dstop] = data
|
|
209
|
+
else:
|
|
210
|
+
self.__delitem__(key)
|
|
211
|
+
self.insert(istart, data)
|
|
212
|
+
else: # we assume len(data) = 1
|
|
213
|
+
if dstop - dstart == 1:
|
|
214
|
+
self._data[dstart:dstop] = data
|
|
215
|
+
else:
|
|
216
|
+
self.__delitem__(key)
|
|
217
|
+
self.insert(istart, data)
|
|
218
|
+
|
|
219
|
+
elif key is Ellipsis:
|
|
220
|
+
self.data[...] = data
|
|
221
|
+
|
|
222
|
+
elif isinstance(key, str):
|
|
223
|
+
self._data[key][:self._size] = data
|
|
224
|
+
|
|
225
|
+
else:
|
|
226
|
+
raise TypeError("List assignment indices must be integers")
|
|
227
|
+
|
|
228
|
+
def __delitem__(self, key):
|
|
229
|
+
"""x.__delitem__(y) <==> del x[y]"""
|
|
230
|
+
if not self._sizeable:
|
|
231
|
+
raise AttributeError("List is not sizeable")
|
|
232
|
+
|
|
233
|
+
# Deleting a single item
|
|
234
|
+
if isinstance(key, int):
|
|
235
|
+
if key < 0:
|
|
236
|
+
key += len(self)
|
|
237
|
+
if key < 0 or key > len(self):
|
|
238
|
+
raise IndexError("List deletion index out of range")
|
|
239
|
+
istart, istop = key, key + 1
|
|
240
|
+
dstart, dstop = self._items[key]
|
|
241
|
+
|
|
242
|
+
# Deleting several items
|
|
243
|
+
elif isinstance(key, slice):
|
|
244
|
+
istart, istop, step = key.indices(len(self))
|
|
245
|
+
if istart > istop:
|
|
246
|
+
istart, istop = istop, istart
|
|
247
|
+
if istart == istop:
|
|
248
|
+
return
|
|
249
|
+
dstart = self._items[istart][0]
|
|
250
|
+
dstop = self._items[istop - 1][1]
|
|
251
|
+
|
|
252
|
+
elif key is Ellipsis:
|
|
253
|
+
istart = 0
|
|
254
|
+
istop = len(self)
|
|
255
|
+
dstart = 0
|
|
256
|
+
dstop = self.size
|
|
257
|
+
# Error
|
|
258
|
+
else:
|
|
259
|
+
raise TypeError("List deletion indices must be integers")
|
|
260
|
+
|
|
261
|
+
# Remove data
|
|
262
|
+
size = self._size - (dstop - dstart)
|
|
263
|
+
self._data[
|
|
264
|
+
dstart:dstart + self._size - dstop] = self._data[dstop:self._size]
|
|
265
|
+
self._size -= dstop - dstart
|
|
266
|
+
|
|
267
|
+
# Remove corresponding items
|
|
268
|
+
size = self._count - istop
|
|
269
|
+
self._items[istart:istart + size] = self._items[istop:istop + size]
|
|
270
|
+
|
|
271
|
+
# Update other items
|
|
272
|
+
size = dstop - dstart
|
|
273
|
+
self._items[istart:istop + size + 1] -= size, size
|
|
274
|
+
self._count -= istop - istart
|
|
275
|
+
|
|
276
|
+
def insert(self, index, data, itemsize=None):
|
|
277
|
+
"""Insert data before index
|
|
278
|
+
|
|
279
|
+
Parameters
|
|
280
|
+
----------
|
|
281
|
+
index : int
|
|
282
|
+
Index before which data will be inserted.
|
|
283
|
+
|
|
284
|
+
data : array_like
|
|
285
|
+
An array, any object exposing the array interface, an object
|
|
286
|
+
whose __array__ method returns an array, or any (nested) sequence.
|
|
287
|
+
|
|
288
|
+
itemsize: int or 1-D array
|
|
289
|
+
If `itemsize` is an integer, N, the array will be divided
|
|
290
|
+
into elements of size N. If such partition is not possible,
|
|
291
|
+
an error is raised.
|
|
292
|
+
|
|
293
|
+
If `itemsize` is 1-D array, the array will be divided into
|
|
294
|
+
elements whose successive sizes will be picked from itemsize.
|
|
295
|
+
If the sum of itemsize values is different from array size,
|
|
296
|
+
an error is raised.
|
|
297
|
+
"""
|
|
298
|
+
if not self._sizeable:
|
|
299
|
+
raise AttributeError("List is not sizeable")
|
|
300
|
+
|
|
301
|
+
if isinstance(data, (list, tuple)) and isinstance(data[0], (list, tuple)): # noqa
|
|
302
|
+
itemsize = [len(sublist) for sublist in data]
|
|
303
|
+
data = [item for sublist in data for item in sublist]
|
|
304
|
+
|
|
305
|
+
data = np.array(data).ravel()
|
|
306
|
+
size = data.size
|
|
307
|
+
|
|
308
|
+
# Check item size and get item number
|
|
309
|
+
if itemsize is not None:
|
|
310
|
+
if isinstance(itemsize, int):
|
|
311
|
+
if (size % itemsize) != 0:
|
|
312
|
+
raise ValueError("Cannot partition data as requested")
|
|
313
|
+
_count = size // itemsize
|
|
314
|
+
_itemsize = np.ones(_count, dtype=int) * (size // _count)
|
|
315
|
+
else:
|
|
316
|
+
_itemsize = np.array(itemsize)
|
|
317
|
+
_count = len(itemsize)
|
|
318
|
+
if _itemsize.sum() != size:
|
|
319
|
+
raise ValueError("Cannot partition data as requested")
|
|
320
|
+
else:
|
|
321
|
+
_count = 1
|
|
322
|
+
|
|
323
|
+
# Check if data array is big enough and resize it if necessary
|
|
324
|
+
if self._size + size >= self._data.size:
|
|
325
|
+
capacity = int(2 ** np.ceil(np.log2(self._size + size)))
|
|
326
|
+
self._data = np.resize(self._data, capacity)
|
|
327
|
+
|
|
328
|
+
# Check if item array is big enough and resize it if necessary
|
|
329
|
+
if self._count + _count >= len(self._items):
|
|
330
|
+
capacity = int(2 ** np.ceil(np.log2(self._count + _count)))
|
|
331
|
+
self._items = np.resize(self._items, (capacity, 2))
|
|
332
|
+
|
|
333
|
+
# Check index
|
|
334
|
+
if index < 0:
|
|
335
|
+
index += len(self)
|
|
336
|
+
if index < 0 or index > len(self):
|
|
337
|
+
raise IndexError("List insertion index out of range")
|
|
338
|
+
|
|
339
|
+
# Inserting
|
|
340
|
+
if index < self._count:
|
|
341
|
+
istart = index
|
|
342
|
+
dstart = self._items[istart][0]
|
|
343
|
+
dstop = self._items[istart][1]
|
|
344
|
+
# Move data
|
|
345
|
+
Z = self._data[dstart:self._size]
|
|
346
|
+
self._data[dstart + size:self._size + size] = Z
|
|
347
|
+
# Update moved items
|
|
348
|
+
items = self._items[istart:self._count] + size
|
|
349
|
+
self._items[istart + _count:self._count + _count] = items
|
|
350
|
+
|
|
351
|
+
# Appending
|
|
352
|
+
else:
|
|
353
|
+
dstart = self._size
|
|
354
|
+
istart = self._count
|
|
355
|
+
|
|
356
|
+
# Only one item (faster)
|
|
357
|
+
if _count == 1:
|
|
358
|
+
# Store data
|
|
359
|
+
self._data[dstart:dstart + size] = data
|
|
360
|
+
self._size += size
|
|
361
|
+
# Store data location (= item)
|
|
362
|
+
self._items[istart][0] = dstart
|
|
363
|
+
self._items[istart][1] = dstart + size
|
|
364
|
+
self._count += 1
|
|
365
|
+
|
|
366
|
+
# Several items
|
|
367
|
+
else:
|
|
368
|
+
# Store data
|
|
369
|
+
dstop = dstart + size
|
|
370
|
+
self._data[dstart:dstop] = data
|
|
371
|
+
self._size += size
|
|
372
|
+
|
|
373
|
+
# Store items
|
|
374
|
+
items = np.ones((_count, 2), int) * dstart
|
|
375
|
+
C = _itemsize.cumsum()
|
|
376
|
+
items[1:, 0] += C[:-1]
|
|
377
|
+
items[0:, 1] += C
|
|
378
|
+
istop = istart + _count
|
|
379
|
+
self._items[istart:istop] = items
|
|
380
|
+
self._count += _count
|
|
381
|
+
|
|
382
|
+
def append(self, data, itemsize=None):
|
|
383
|
+
"""Append data to the end.
|
|
384
|
+
|
|
385
|
+
Parameters
|
|
386
|
+
----------
|
|
387
|
+
data : array_like
|
|
388
|
+
An array, any object exposing the array interface, an object
|
|
389
|
+
whose __array__ method returns an array, or any (nested) sequence.
|
|
390
|
+
|
|
391
|
+
itemsize: int or 1-D array
|
|
392
|
+
If `itemsize` is an integer, N, the array will be divided
|
|
393
|
+
into elements of size N. If such partition is not possible,
|
|
394
|
+
an error is raised.
|
|
395
|
+
|
|
396
|
+
If `itemsize` is 1-D array, the array will be divided into
|
|
397
|
+
elements whose successive sizes will be picked from itemsize.
|
|
398
|
+
If the sum of itemsize values is different from array size,
|
|
399
|
+
an error is raised.
|
|
400
|
+
"""
|
|
401
|
+
self.insert(len(self), data, itemsize)
|