vispy 0.14.2__cp312-cp312-macosx_10_9_x86_64.whl → 0.14.3__cp312-cp312-macosx_10_9_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/geometry/__init__.py +1 -1
- vispy/geometry/calculations.py +30 -2
- vispy/geometry/triangulation.py +4 -2
- vispy/gloo/buffer.py +4 -4
- vispy/gloo/gl/tests/test_functionality.py +4 -2
- vispy/gloo/glir.py +7 -2
- vispy/gloo/texture.py +4 -3
- vispy/testing/_runners.py +3 -1
- vispy/util/__init__.py +15 -0
- vispy/version.py +2 -2
- vispy/visuals/_scalable_textures.py +2 -1
- vispy/visuals/collections/array_list.py +4 -4
- vispy/visuals/image.py +2 -1
- vispy/visuals/text/_sdf_cpu.cpython-312-darwin.so +0 -0
- vispy/visuals/text/_sdf_cpu.pyx +2 -0
- vispy/visuals/volume.py +35 -4
- {vispy-0.14.2.dist-info → vispy-0.14.3.dist-info}/METADATA +6 -4
- {vispy-0.14.2.dist-info → vispy-0.14.3.dist-info}/RECORD +21 -21
- {vispy-0.14.2.dist-info → vispy-0.14.3.dist-info}/LICENSE.txt +0 -0
- {vispy-0.14.2.dist-info → vispy-0.14.3.dist-info}/WHEEL +0 -0
- {vispy-0.14.2.dist-info → vispy-0.14.3.dist-info}/top_level.txt +0 -0
vispy/geometry/__init__.py
CHANGED
|
@@ -16,7 +16,7 @@ from .meshdata import MeshData # noqa
|
|
|
16
16
|
from .rect import Rect # noqa
|
|
17
17
|
from .triangulation import Triangulation, triangulate # noqa
|
|
18
18
|
from .torusknot import TorusKnot # noqa
|
|
19
|
-
from .calculations import (_calculate_normals, _fast_cross_3d, # noqa
|
|
19
|
+
from .calculations import (_calculate_normals, _cross_2d, _fast_cross_3d, # noqa
|
|
20
20
|
resize) # noqa
|
|
21
21
|
from .generation import (create_arrow, create_box, create_cone, # noqa
|
|
22
22
|
create_cube, create_cylinder, create_grid_mesh, # noqa
|
vispy/geometry/calculations.py
CHANGED
|
@@ -7,8 +7,33 @@
|
|
|
7
7
|
import numpy as np
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
def _cross_2d(x, y):
|
|
11
|
+
"""Compute the z-component of the cross product of (arrays of) 2D vectors.
|
|
12
|
+
|
|
13
|
+
This is meant to replicate the 2D functionality of np.cross(), which is
|
|
14
|
+
deprecated in numpy 2.0.
|
|
15
|
+
|
|
16
|
+
x and y must have broadcastable shapes, with the last dimension being 2.
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
x : array
|
|
21
|
+
Input array 1, shape (..., 2).
|
|
22
|
+
y : array
|
|
23
|
+
Input array 2, shape (..., 2).
|
|
24
|
+
|
|
25
|
+
Returns
|
|
26
|
+
-------
|
|
27
|
+
z : array
|
|
28
|
+
z-component of cross products of x and y.
|
|
29
|
+
|
|
30
|
+
See: https://github.com/numpy/numpy/issues/26620
|
|
31
|
+
"""
|
|
32
|
+
if x.shape[-1] != 2 or y.shape[-1] != 2:
|
|
33
|
+
raise ValueError("Input arrays must have shape (..., 2)")
|
|
34
|
+
|
|
35
|
+
return x[..., 0] * y[..., 1] - x[..., 1] * y[..., 0]
|
|
36
|
+
|
|
12
37
|
|
|
13
38
|
def _fast_cross_3d(x, y):
|
|
14
39
|
"""Compute cross product between list of 3D vectors
|
|
@@ -47,6 +72,9 @@ def _fast_cross_3d(x, y):
|
|
|
47
72
|
return np.cross(x, y)
|
|
48
73
|
|
|
49
74
|
|
|
75
|
+
###############################################################################
|
|
76
|
+
# These fast normal calculation routines are adapted from mne-python
|
|
77
|
+
|
|
50
78
|
def _calculate_normals(rr, tris):
|
|
51
79
|
"""Efficiently compute vertex normals for triangulated surface"""
|
|
52
80
|
# ensure highest precision for our summation/vectorization "trick"
|
vispy/geometry/triangulation.py
CHANGED
|
@@ -7,6 +7,8 @@ import numpy as np
|
|
|
7
7
|
|
|
8
8
|
from collections import OrderedDict
|
|
9
9
|
|
|
10
|
+
from .calculations import _cross_2d
|
|
11
|
+
|
|
10
12
|
|
|
11
13
|
class Triangulation(object):
|
|
12
14
|
"""Constrained delaunay triangulation
|
|
@@ -676,7 +678,7 @@ class Triangulation(object):
|
|
|
676
678
|
A = self.pts[a]
|
|
677
679
|
B = self.pts[b]
|
|
678
680
|
C = self.pts[c]
|
|
679
|
-
return
|
|
681
|
+
return _cross_2d(B - A, C - B) > 0
|
|
680
682
|
|
|
681
683
|
def _edges_intersect(self, edge1, edge2):
|
|
682
684
|
"""Return 1 if edges intersect completely (endpoints excluded)"""
|
|
@@ -739,7 +741,7 @@ class Triangulation(object):
|
|
|
739
741
|
"""
|
|
740
742
|
v1 = self.pts[point] - self.pts[edge[0]]
|
|
741
743
|
v2 = self.pts[edge[1]] - self.pts[edge[0]]
|
|
742
|
-
c =
|
|
744
|
+
c = _cross_2d(v1, v2) # positive if v1 is CW from v2
|
|
743
745
|
return 1 if c > 0 else (-1 if c < 0 else 0)
|
|
744
746
|
|
|
745
747
|
def _add_tri(self, a, b, c):
|
vispy/gloo/buffer.py
CHANGED
|
@@ -10,7 +10,7 @@ from traceback import extract_stack, format_list
|
|
|
10
10
|
import weakref
|
|
11
11
|
|
|
12
12
|
from . globject import GLObject
|
|
13
|
-
from ..util import logger
|
|
13
|
+
from ..util import logger, np_copy_if_needed
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# ------------------------------------------------------------ Buffer class ---
|
|
@@ -70,7 +70,7 @@ class Buffer(GLObject):
|
|
|
70
70
|
data is actually uploaded to GPU memory.
|
|
71
71
|
Asking explicitly for a copy will prevent this behavior.
|
|
72
72
|
"""
|
|
73
|
-
data = np.array(data, copy=copy)
|
|
73
|
+
data = np.array(data, copy=copy or np_copy_if_needed)
|
|
74
74
|
nbytes = data.nbytes
|
|
75
75
|
|
|
76
76
|
if offset < 0:
|
|
@@ -98,7 +98,7 @@ class Buffer(GLObject):
|
|
|
98
98
|
data is actually uploaded to GPU memory.
|
|
99
99
|
Asking explicitly for a copy will prevent this behavior.
|
|
100
100
|
"""
|
|
101
|
-
data = np.array(data, copy=copy)
|
|
101
|
+
data = np.array(data, copy=copy or np_copy_if_needed)
|
|
102
102
|
nbytes = data.nbytes
|
|
103
103
|
|
|
104
104
|
if nbytes != self._nbytes:
|
|
@@ -283,7 +283,7 @@ class DataBuffer(Buffer):
|
|
|
283
283
|
|
|
284
284
|
# Make sure data is an array
|
|
285
285
|
if not isinstance(data, np.ndarray):
|
|
286
|
-
data = np.array(data, dtype=self.dtype
|
|
286
|
+
data = np.array(data, dtype=self.dtype)
|
|
287
287
|
|
|
288
288
|
# Make sure data is big enough
|
|
289
289
|
if data.size < stop - start:
|
|
@@ -192,8 +192,10 @@ quad = np.array([[0, 0, 0], [-1, 0, 0], [-1, -1, 0],
|
|
|
192
192
|
N = quad.shape[0] * 4
|
|
193
193
|
|
|
194
194
|
# buf3 contains coordinates in device coordinates for four quadrants
|
|
195
|
-
buf3 = np.
|
|
196
|
-
|
|
195
|
+
buf3 = np.vstack([
|
|
196
|
+
quad + (0, 0, 0), quad + (0, 1, 0),
|
|
197
|
+
quad + (1, 1, 0), quad + (1, 0, 0),
|
|
198
|
+
]).astype(np.float32)
|
|
197
199
|
|
|
198
200
|
# buf2 is texture coords. Note that this is a view on buf2
|
|
199
201
|
buf2 = ((buf3+1.0)*0.5)[:, :2] # not C-contiguous
|
vispy/gloo/glir.py
CHANGED
|
@@ -1283,8 +1283,13 @@ class GlirProgram(GlirObject):
|
|
|
1283
1283
|
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, vbo_handle)
|
|
1284
1284
|
gl.glEnableVertexAttribArray(attr_handle)
|
|
1285
1285
|
func(attr_handle, *args)
|
|
1286
|
-
if
|
|
1287
|
-
gl.glVertexAttribDivisor(attr_handle, divisor)
|
|
1286
|
+
if hasattr(gl, "glVertexAttribDivisor"):
|
|
1287
|
+
gl.glVertexAttribDivisor(attr_handle, divisor or 0)
|
|
1288
|
+
elif divisor is not None:
|
|
1289
|
+
logger.warning(
|
|
1290
|
+
'Instanced rendering is not supported by the current'
|
|
1291
|
+
f'backend ("{gl.current_backend.__name__}")'
|
|
1292
|
+
)
|
|
1288
1293
|
else:
|
|
1289
1294
|
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, 0)
|
|
1290
1295
|
gl.glDisableVertexAttribArray(attr_handle)
|
vispy/gloo/texture.py
CHANGED
|
@@ -11,6 +11,7 @@ import warnings
|
|
|
11
11
|
|
|
12
12
|
from .globject import GLObject
|
|
13
13
|
from .util import check_enum
|
|
14
|
+
from ..util import np_copy_if_needed
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
def get_dtype_limits(dtype):
|
|
@@ -29,7 +30,7 @@ def convert_dtype_and_clip(data, dtype, copy=False):
|
|
|
29
30
|
new_min, new_max = get_dtype_limits(dtype)
|
|
30
31
|
if new_max >= old_max and new_min <= old_min:
|
|
31
32
|
# no need to clip
|
|
32
|
-
return np.array(data, dtype=dtype, copy=copy)
|
|
33
|
+
return np.array(data, dtype=dtype, copy=copy or np_copy_if_needed)
|
|
33
34
|
else:
|
|
34
35
|
# to reduce copying, we clip into a pre-generated array of the right dtype
|
|
35
36
|
new_data = np.empty_like(data, dtype=dtype)
|
|
@@ -158,7 +159,7 @@ class BaseTexture(GLObject):
|
|
|
158
159
|
if data is not None:
|
|
159
160
|
if shape is not None:
|
|
160
161
|
raise ValueError('Texture needs data or shape, not both.')
|
|
161
|
-
data = np.array(data
|
|
162
|
+
data = np.array(data)
|
|
162
163
|
# So we can test the combination
|
|
163
164
|
self._resize(data.shape, format, internalformat)
|
|
164
165
|
self._set_data(data)
|
|
@@ -427,7 +428,7 @@ class BaseTexture(GLObject):
|
|
|
427
428
|
|
|
428
429
|
# Make sure data is an array
|
|
429
430
|
if not isinstance(data, np.ndarray):
|
|
430
|
-
data = np.array(data
|
|
431
|
+
data = np.array(data)
|
|
431
432
|
# Make sure data is big enough
|
|
432
433
|
if data.shape != shape:
|
|
433
434
|
data = np.resize(data, shape)
|
vispy/testing/_runners.py
CHANGED
|
@@ -164,7 +164,9 @@ def _flake():
|
|
|
164
164
|
print('Running flake8... ') # if end='', first error gets ugly
|
|
165
165
|
sys.stdout.flush()
|
|
166
166
|
try:
|
|
167
|
-
main
|
|
167
|
+
# flake8 used to exit on failure, but instead `main` now returns an exit code
|
|
168
|
+
# see https://github.com/PyCQA/flake8/pull/1461
|
|
169
|
+
raise SystemExit(main())
|
|
168
170
|
except SystemExit as ex:
|
|
169
171
|
if ex.code in (None, 0):
|
|
170
172
|
pass # do not exit yet, we want to print a success msg
|
vispy/util/__init__.py
CHANGED
|
@@ -15,3 +15,18 @@ from . import fonts # noqa
|
|
|
15
15
|
from . import transforms # noqa
|
|
16
16
|
from .wrappers import use, run_subprocess # noqa
|
|
17
17
|
from .bunch import SimpleBunch # noqa
|
|
18
|
+
|
|
19
|
+
from typing import Optional
|
|
20
|
+
|
|
21
|
+
import numpy as np
|
|
22
|
+
|
|
23
|
+
# `copy` keyword semantics changed in NumPy 2.0
|
|
24
|
+
# this maintains compatibility with older versions
|
|
25
|
+
# if/when NumPy 2.0 becomes the minimum version, we can remove this
|
|
26
|
+
# we don't worry about early dev versions of NumPy 2.0 (that may or may not have the kwarg) here
|
|
27
|
+
# see:
|
|
28
|
+
# https://numpy.org/devdocs/numpy_2_0_migration_guide.html#adapting-to-changes-in-the-copy-keyword
|
|
29
|
+
# https://github.com/scipy/scipy/pull/20172
|
|
30
|
+
np_copy_if_needed: Optional[bool] = None
|
|
31
|
+
if np.lib.NumpyVersion(np.__version__) < "1.28.0":
|
|
32
|
+
np_copy_if_needed = False
|
vispy/version.py
CHANGED
|
@@ -6,6 +6,7 @@ import warnings
|
|
|
6
6
|
import numpy as np
|
|
7
7
|
|
|
8
8
|
from vispy.gloo.texture import Texture2D, Texture3D, convert_dtype_and_clip
|
|
9
|
+
from vispy.util import np_copy_if_needed
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
def get_default_clim_from_dtype(dtype):
|
|
@@ -298,7 +299,7 @@ class CPUScaledTextureMixin(_ScaledTextureMixin):
|
|
|
298
299
|
|
|
299
300
|
@staticmethod
|
|
300
301
|
def _scale_data_on_cpu(data, clim, copy=True):
|
|
301
|
-
data = np.array(data, dtype=np.float32, copy=copy)
|
|
302
|
+
data = np.array(data, dtype=np.float32, copy=copy or np_copy_if_needed)
|
|
302
303
|
if clim[0] != clim[1]:
|
|
303
304
|
# we always must copy the data if we change it here, otherwise it might change
|
|
304
305
|
# unexpectedly the data held outside of here
|
|
@@ -73,7 +73,7 @@ class ArrayList(object):
|
|
|
73
73
|
if isinstance(data[0], (list, tuple)):
|
|
74
74
|
itemsize = [len(sublist) for sublist in data]
|
|
75
75
|
data = [item for sublist in data for item in sublist]
|
|
76
|
-
self._data = np.array(data
|
|
76
|
+
self._data = np.array(data)
|
|
77
77
|
self._size = self._data.size
|
|
78
78
|
|
|
79
79
|
# Default is one group with all data inside
|
|
@@ -88,7 +88,7 @@ class ArrayList(object):
|
|
|
88
88
|
_itemsize = np.ones(
|
|
89
89
|
self._count, dtype=int) * (self._size // self._count)
|
|
90
90
|
else:
|
|
91
|
-
_itemsize = np.array(itemsize
|
|
91
|
+
_itemsize = np.array(itemsize)
|
|
92
92
|
self._count = len(itemsize)
|
|
93
93
|
if _itemsize.sum() != self._size:
|
|
94
94
|
raise ValueError("Cannot partition data as requested")
|
|
@@ -302,7 +302,7 @@ class ArrayList(object):
|
|
|
302
302
|
itemsize = [len(sublist) for sublist in data]
|
|
303
303
|
data = [item for sublist in data for item in sublist]
|
|
304
304
|
|
|
305
|
-
data = np.array(data
|
|
305
|
+
data = np.array(data).ravel()
|
|
306
306
|
size = data.size
|
|
307
307
|
|
|
308
308
|
# Check item size and get item number
|
|
@@ -313,7 +313,7 @@ class ArrayList(object):
|
|
|
313
313
|
_count = size // itemsize
|
|
314
314
|
_itemsize = np.ones(_count, dtype=int) * (size // _count)
|
|
315
315
|
else:
|
|
316
|
-
_itemsize = np.array(itemsize
|
|
316
|
+
_itemsize = np.array(itemsize)
|
|
317
317
|
_count = len(itemsize)
|
|
318
318
|
if _itemsize.sum() != size:
|
|
319
319
|
raise ValueError("Cannot partition data as requested")
|
vispy/visuals/image.py
CHANGED
|
@@ -16,6 +16,7 @@ from .transforms import NullTransform
|
|
|
16
16
|
from .visual import Visual
|
|
17
17
|
from ..io import load_spatial_filters
|
|
18
18
|
from ._scalable_textures import CPUScaledTexture2D, GPUScaledTexture2D
|
|
19
|
+
from ..util import np_copy_if_needed
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
_VERTEX_SHADER = """
|
|
@@ -380,7 +381,7 @@ class ImageVisual(Visual):
|
|
|
380
381
|
texture_format : str or None
|
|
381
382
|
|
|
382
383
|
"""
|
|
383
|
-
data = np.array(image, copy=copy)
|
|
384
|
+
data = np.array(image, copy=copy or np_copy_if_needed)
|
|
384
385
|
if np.iscomplexobj(data):
|
|
385
386
|
raise TypeError(
|
|
386
387
|
"Complex data types not supported. Please use 'ComplexImage' instead"
|
|
Binary file
|
vispy/visuals/text/_sdf_cpu.pyx
CHANGED
vispy/visuals/volume.py
CHANGED
|
@@ -417,8 +417,8 @@ _ATTENUATED_MIP_SNIPPETS = dict(
|
|
|
417
417
|
// Scale and clamp accumulation in `sumval` by contrast limits so that:
|
|
418
418
|
// * attenuation value does not depend on data values
|
|
419
419
|
// * negative values do not amplify instead of attenuate
|
|
420
|
-
sumval = sumval + clamp((val - clim.x) / (clim.y - clim.x), 0.0, 1.0);
|
|
421
|
-
scale = exp(-u_attenuation * (sumval - 1)
|
|
420
|
+
sumval = sumval + u_relative_step_size * clamp((val - clim.x) / (clim.y - clim.x), 0.0, 1.0);
|
|
421
|
+
scale = exp(-u_attenuation * (sumval - 1));
|
|
422
422
|
if( maxval > scale * clim.y ) {
|
|
423
423
|
// stop if no chance of finding a higher maxval
|
|
424
424
|
iter = nsteps;
|
|
@@ -1165,9 +1165,40 @@ class VolumeVisual(Visual):
|
|
|
1165
1165
|
|
|
1166
1166
|
@relative_step_size.setter
|
|
1167
1167
|
def relative_step_size(self, value):
|
|
1168
|
+
"""Set the relative step size used during raycasting.
|
|
1169
|
+
|
|
1170
|
+
Very small values give increased detail when rendering volumes with
|
|
1171
|
+
few voxels, but values that are too small give worse performance
|
|
1172
|
+
(framerate), in extreme cases causing a GPU hang and for the process
|
|
1173
|
+
to be killed by the OS. See discussion at:
|
|
1174
|
+
|
|
1175
|
+
https://github.com/vispy/vispy/pull/2587
|
|
1176
|
+
|
|
1177
|
+
For this reason, this setter issues a warning when the value is
|
|
1178
|
+
smaller than ``side_len / (2 * MAX_CANVAS_SIZE)``, where ``side_len``
|
|
1179
|
+
is the smallest side of the volume and ``MAX_CANVAS_SIZE`` is what
|
|
1180
|
+
we consider to be the largest likely monitor resolution along its
|
|
1181
|
+
longest side: 7680 pixels, equivalent to an 8K monitor.
|
|
1182
|
+
|
|
1183
|
+
This setter also raises a ValueError when the value is 0 or negative.
|
|
1184
|
+
"""
|
|
1168
1185
|
value = float(value)
|
|
1169
|
-
|
|
1170
|
-
|
|
1186
|
+
side_len = np.min(self._vol_shape)
|
|
1187
|
+
MAX_CANVAS_SIZE = 7680
|
|
1188
|
+
minimum_val = side_len / (2 * MAX_CANVAS_SIZE)
|
|
1189
|
+
if value <= 0:
|
|
1190
|
+
raise ValueError('relative_step_size cannot be 0 or negative.')
|
|
1191
|
+
elif value < minimum_val:
|
|
1192
|
+
warnings.warn(
|
|
1193
|
+
f'To display a volume of shape {self._vol_shape} without '
|
|
1194
|
+
f'artifacts, you need a step size no smaller than {side_len} /'
|
|
1195
|
+
f'(2 * {MAX_CANVAS_SIZE}) = {minimum_val:,.3g}. To prevent '
|
|
1196
|
+
'extreme degradation in rendering performance, the provided '
|
|
1197
|
+
f'value of {value} is being clipped to {minimum_val:,.3g}. If '
|
|
1198
|
+
'you believe you need a smaller step size, please raise an '
|
|
1199
|
+
'issue at https://github.com/vispy/vispy/issues.'
|
|
1200
|
+
)
|
|
1201
|
+
value = minimum_val
|
|
1171
1202
|
self._relative_step_size = value
|
|
1172
1203
|
self.shared_program['u_relative_step_size'] = value
|
|
1173
1204
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: vispy
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.3
|
|
4
4
|
Summary: Interactive visualization in Python
|
|
5
5
|
Home-page: http://vispy.org
|
|
6
6
|
Download-URL: https://pypi.python.org/pypi/vispy
|
|
@@ -19,13 +19,13 @@ Classifier: Operating System :: MacOS :: MacOS X
|
|
|
19
19
|
Classifier: Operating System :: Microsoft :: Windows
|
|
20
20
|
Classifier: Operating System :: POSIX
|
|
21
21
|
Classifier: Programming Language :: Python
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.9
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.10
|
|
25
24
|
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
26
26
|
Classifier: Framework :: IPython
|
|
27
27
|
Provides: vispy
|
|
28
|
-
Requires-Python: >=3.
|
|
28
|
+
Requires-Python: >=3.9
|
|
29
29
|
Description-Content-Type: text/x-rst
|
|
30
30
|
License-File: LICENSE.txt
|
|
31
31
|
Requires-Dist: numpy
|
|
@@ -42,6 +42,8 @@ Requires-Dist: myst-parser ; extra == 'doc'
|
|
|
42
42
|
Requires-Dist: pillow ; extra == 'doc'
|
|
43
43
|
Requires-Dist: pytest ; extra == 'doc'
|
|
44
44
|
Requires-Dist: pyopengl ; extra == 'doc'
|
|
45
|
+
Provides-Extra: glfw
|
|
46
|
+
Requires-Dist: glfw ; extra == 'glfw'
|
|
45
47
|
Provides-Extra: io
|
|
46
48
|
Requires-Dist: meshio ; extra == 'io'
|
|
47
49
|
Requires-Dist: Pillow ; extra == 'io'
|
|
@@ -205,7 +207,7 @@ External links
|
|
|
205
207
|
- `Chat room <https://gitter.im/vispy/vispy>`__
|
|
206
208
|
- `Developer chat room <https://gitter.im/vispy/vispy-dev>`__
|
|
207
209
|
- `Wiki <http://github.com/vispy/vispy/wiki>`__
|
|
208
|
-
- `Gallery <http://vispy.org/gallery.html>`__
|
|
210
|
+
- `Gallery <http://vispy.org/gallery/index.html>`__
|
|
209
211
|
- `Documentation <http://vispy.readthedocs.org>`__
|
|
210
212
|
|
|
211
213
|
.. |Build Status| image:: https://github.com/vispy/vispy/workflows/CI/badge.svg
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
vispy-0.14.3.dist-info/RECORD,,
|
|
2
|
+
vispy-0.14.3.dist-info/WHEEL,sha256=KYtn_mzb_QwZSHwPlosUO3fDl70znfUFngLlrLVHeBY,111
|
|
3
|
+
vispy-0.14.3.dist-info/top_level.txt,sha256=mciStn1SI48jYwEhJXlrMJ3HaJ90XOr5ZGJ8YdFI674,6
|
|
4
|
+
vispy-0.14.3.dist-info/LICENSE.txt,sha256=L7orAx3saMGRPfxOnpOKfVQ6JKCc5XtadZSWrPSuW0A,1774
|
|
5
|
+
vispy-0.14.3.dist-info/METADATA,sha256=B_Jf7eW8JW4R4qZxYjGSCn4CbjPj1Q4zsZ_JpshpnSg,8394
|
|
1
6
|
vispy/conftest.py,sha256=1qkMPiB5SHGll3Sbvz9iBIAVeyaIuW7YDw8VpfKTMzk,489
|
|
2
|
-
vispy/version.py,sha256=
|
|
7
|
+
vispy/version.py,sha256=3mnQHEW9gizHocB0ULApMUw7E4CZd4qai5GsjMH_Vo4,413
|
|
3
8
|
vispy/__init__.py,sha256=Sm3hzOs_-fXTikZnwAFZoLOvETmFCw8BsSoAguXvhdY,902
|
|
4
9
|
vispy/app/_detect_eventloop.py,sha256=hMht958_W6MVGEfJS7UMTRnIHyoODeJ6oVCaDXJZ5H8,6474
|
|
5
10
|
vispy/app/timer.py,sha256=zIQwcF-XmowAHqe25z4nMwiRTMaNOnjz4IeTQClE8bg,5754
|
|
@@ -52,7 +57,7 @@ vispy/util/ptime.py,sha256=7RHg21z-msNvkOCFh1Erbbryd5Rhe3oyhDexa9MAqYU,493
|
|
|
52
57
|
vispy/util/check_environment.py,sha256=QD-D2swX5JAOfp4BRhsvYiuMiZN3EasEe3MHescu7Dc,1754
|
|
53
58
|
vispy/util/quaternion.py,sha256=y-6Eyd4RpN4uV30IpO3tqhbqcRNuqZbRDSYd4C7x1SM,6776
|
|
54
59
|
vispy/util/eq.py,sha256=GGbEZCxj9cAw-3GE9jitgAy7UrMqkcWBDhse4n-1JW0,1100
|
|
55
|
-
vispy/util/__init__.py,sha256=
|
|
60
|
+
vispy/util/__init__.py,sha256=onztfB9EufnRPDimoyIGcGPV68Ah4Des1EWX5iMBtYQ,1289
|
|
56
61
|
vispy/util/fetching.py,sha256=6WirJTJIlXHZUfzvUNyfKUiPQosl2QcPeQFQuSSxMSk,10304
|
|
57
62
|
vispy/util/keys.py,sha256=qEy7e0icUg-cUHv8a_RSmg5sLT4_yt3-2T-LKfWASSM,2443
|
|
58
63
|
vispy/util/frozen.py,sha256=KYpO-5s71zGMLLinnlImvSwRV6E2ws61yDiTS2nSpqc,891
|
|
@@ -110,15 +115,15 @@ vispy/util/fonts/data/OpenSans-Bold.ttf,sha256=WJSjZJshPPWy1nO256hxgV_R0SD6aKRjW
|
|
|
110
115
|
vispy/util/fonts/data/OpenSans-Regular.ttf,sha256=5k5QiyqiiA-QfkcMRVCYDsTAaU0QOkPzYVCsP5MYm-4,217360
|
|
111
116
|
vispy/util/fonts/data/OpenSans-BoldItalic.ttf,sha256=PKaA8kRMyeUER9BXwAZGRWbpLy53sLbiZJHlvXV-1Oc,213292
|
|
112
117
|
vispy/gloo/globject.py,sha256=Lpfhws2E8nQ3WaZDdVF8pm4LioqeFgHPRvQnYijN0bs,3912
|
|
113
|
-
vispy/gloo/glir.py,sha256=
|
|
118
|
+
vispy/gloo/glir.py,sha256=kCvfcpIEYSDyH-OpHVT8bCG7byIIAZwQTx-d8oPzFes,66439
|
|
114
119
|
vispy/gloo/util.py,sha256=teg0SbQheFdFIz6KpI2FfCyb_9eI7KOcXwJc-a2EC_s,4419
|
|
115
120
|
vispy/gloo/__init__.py,sha256=5WufpLo64kGzkZCyCvjm-DN_Cvd4Ihuxsn7sJUbREJ0,2022
|
|
116
121
|
vispy/gloo/preprocessor.py,sha256=dclY2vLpfLRLfezct3O2s5wk8XMvoqvEfLABZNUa1g8,2291
|
|
117
122
|
vispy/gloo/context.py,sha256=cFlSfTlr-WQLWfksOqFXjqCel2F5kk9nR1RTdjLhyPM,8640
|
|
118
123
|
vispy/gloo/wrappers.py,sha256=38_YO3Td70B_CNFKysff61jfAyMaaDu_lteIeotVu0c,26460
|
|
119
124
|
vispy/gloo/framebuffer.py,sha256=77lIv9iojJ3tPm6ZsE8hRS0Iv9UdyoCRDC0RtxKTR-o,9350
|
|
120
|
-
vispy/gloo/buffer.py,sha256=
|
|
121
|
-
vispy/gloo/texture.py,sha256=
|
|
125
|
+
vispy/gloo/buffer.py,sha256=uZkAqm5_mV9Nryyu5wSXgdY2KZxf-JsEAGQ7_qTtJt0,16795
|
|
126
|
+
vispy/gloo/texture.py,sha256=9e8t1aUl1X7MbEF6thAFsH2korrb2WqvBVhVTDYRr_c,38456
|
|
122
127
|
vispy/gloo/program.py,sha256=fsrl5kJ5aLX46M7cwPBl9QuZ4DP55Oa0I0QUprKUvok,22324
|
|
123
128
|
vispy/gloo/tests/test_glir.py,sha256=e8hiifOuNehzDAqg4x5zqNKB-pzcPe-lP_RL4ZpLKoo,9644
|
|
124
129
|
vispy/gloo/tests/test_buffer.py,sha256=RMbQeeKSG2lO2gxqmHx2CfMP841MbnbYDYNb6SxLc40,19819
|
|
@@ -146,7 +151,7 @@ vispy/gloo/gl/tests/test_names.py,sha256=v0Mnl8T1KKE9VJSCweDkuBxBy0WV2JZALEvS1cX
|
|
|
146
151
|
vispy/gloo/gl/tests/test_basics.py,sha256=jTnERZwk3Qeg86__8N7oBfu3A02OHVfoT204cn_k3cQ,9223
|
|
147
152
|
vispy/gloo/gl/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
148
153
|
vispy/gloo/gl/tests/test_use.py,sha256=C4S4BXTg2_2snJnwISvJecufesxVgC6zfqicTZINGb8,1838
|
|
149
|
-
vispy/gloo/gl/tests/test_functionality.py,sha256=
|
|
154
|
+
vispy/gloo/gl/tests/test_functionality.py,sha256=Q4DMHIczjHBEgl4-0-IUCLhHqYbJk7Kfyhl9ed6zrbE,17327
|
|
150
155
|
vispy/color/colormap.py,sha256=Xp7e05oaJausMOvl1UciqDagPuq61GJA9iJq4wpdMfw,42586
|
|
151
156
|
vispy/color/__init__.py,sha256=aePQV4OX_2QsRcILIHdzlirVfGvfAxFgmaajLFqMjXo,644
|
|
152
157
|
vispy/color/color_space.py,sha256=WcVdx-Bio8GSC9-VTcjpXBZ970uE3OZGgDF27MpBFX0,6051
|
|
@@ -316,7 +321,7 @@ vispy/glsl/colormaps/wheel.glsl,sha256=J1Yyv8w5flWe5Jt7FNcoOtN5sT3b4Cb2d-KY5X905
|
|
|
316
321
|
vispy/glsl/colormaps/colormaps.glsl,sha256=rHkMnlGW8hT-NDVgoW2tyH12nWxXM0497gLDQaMRbHE,781
|
|
317
322
|
vispy/testing/image_tester.py,sha256=jIWc2NSssUSaHmKHRRfCod9UqfqFewdhyK3nRytd9zw,18011
|
|
318
323
|
vispy/testing/__init__.py,sha256=k7KagAl3LhX_2EblFK6x_ekO23Un_9CAIuHdEgHdmps,2437
|
|
319
|
-
vispy/testing/_runners.py,sha256=
|
|
324
|
+
vispy/testing/_runners.py,sha256=Qte6dMbYNGYGMcID35ZhIoiy55Q2s2d2Fo-YE-d-YWA,16071
|
|
320
325
|
vispy/testing/rendered_array_tester.py,sha256=aK_wUjyk7M3_eXPJkTLgfjt-cLPAf10u9PSGSdp_0rg,2770
|
|
321
326
|
vispy/testing/_testing.py,sha256=e6iw11e2VSsBqeQ40UCu12GimkTdsZY1PNFxHnxELAc,12302
|
|
322
327
|
vispy/testing/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -336,8 +341,8 @@ vispy/visuals/windbarb.py,sha256=SXO3DNmXinkzeAJBAgCJL-vTBXs_O1j1f4Jxnliv_Rg,930
|
|
|
336
341
|
vispy/visuals/linear_region.py,sha256=XUc80U7Mt4VTAXHqs03IwCcQifQJvop7AGXbXRt7vQQ,6614
|
|
337
342
|
vispy/visuals/__init__.py,sha256=rVc88pQhwxpfdoa8H034MxfQOV9lipAW1sGIgDt_UWI,2228
|
|
338
343
|
vispy/visuals/mesh.py,sha256=8dwELjgrY42GCBZK4xyP9YNqi5FD1hhH7mSubRDXZJk,11967
|
|
339
|
-
vispy/visuals/_scalable_textures.py,sha256=
|
|
340
|
-
vispy/visuals/volume.py,sha256=
|
|
344
|
+
vispy/visuals/_scalable_textures.py,sha256=y2pJNnV1wsKeNr3RyJ8Wws8g0TGi3GVfuPAZ0etm_g4,19713
|
|
345
|
+
vispy/visuals/volume.py,sha256=0lX0en71Tn4Kl-NUN9QuZm_2sZrztwKjntx7j-awZt0,50740
|
|
341
346
|
vispy/visuals/infinite_line.py,sha256=A5D8zn_6M_4U0SCa2JacRIxmofBGgQMxa4gn8f3wgAk,6006
|
|
342
347
|
vispy/visuals/gridmesh.py,sha256=It0s6Mj4A5kVuDVy6-xkUqC0Yq1mgoqH8JF9uN02zf8,3346
|
|
343
348
|
vispy/visuals/surface_plot.py,sha256=D7AI6g2RUjtrM-IQk1Pb721kxryAEl_QDYd2H0Zt5eU,7316
|
|
@@ -351,7 +356,7 @@ vispy/visuals/spectrogram.py,sha256=cf8PfG_hHZ3aUM8SExpIG5Tmr57N9gEF0-R6jPQ2K00,
|
|
|
351
356
|
vispy/visuals/gridlines.py,sha256=0Tiub9xZtLOD8n-QYEKsdj-11YW8ddXOlZ0rHnFBdeY,3521
|
|
352
357
|
vispy/visuals/xyz_axis.py,sha256=ZwqRecj0FvCWsELd3dg8voVxjzgR--hH9ndEH_fv5kk,957
|
|
353
358
|
vispy/visuals/plane.py,sha256=pZGzHVBwh6AgAC-7jKyMzMGbk8mo1DwFcCPhl2S6XN4,2203
|
|
354
|
-
vispy/visuals/image.py,sha256=
|
|
359
|
+
vispy/visuals/image.py,sha256=U_iYuVRRF7JRmpxlrLhVwEXdf7Yw5mNAs6QMTyhTs3A,26668
|
|
355
360
|
vispy/visuals/border.py,sha256=fkhYCFdaYSVpGNJ8Sb4-MZhAFq9ki1gAlvs7NDoLd3k,6877
|
|
356
361
|
vispy/visuals/sphere.py,sha256=CpV8Syhp1Ujp8lafmuWcdABc-2lwAns91h8X142uS8Q,3091
|
|
357
362
|
vispy/visuals/isosurface.py,sha256=r3PsFKDXd8T-HrtWo5MboRdJusrIwzj5JaBwEla3oP0,3900
|
|
@@ -436,11 +441,11 @@ vispy/visuals/graphs/layouts/force_directed.py,sha256=uEquUaboL_26QG3IeIhN20AzAS
|
|
|
436
441
|
vispy/visuals/graphs/layouts/random.py,sha256=ox3JXQ1ysTGYHYYicIDBAZzNzzIKBbFln2yY1dNRtz8,1674
|
|
437
442
|
vispy/visuals/graphs/layouts/circular.py,sha256=hEKjN2ow9mtQRZCslOpIkZWMTp5QM_HI9NuObNH0P7g,1559
|
|
438
443
|
vispy/visuals/graphs/layouts/networkx_layout.py,sha256=pqF1JClCUYj-Cjf-tcphzo4Z3Ym_ha5Arxo68tYj-es,3583
|
|
439
|
-
vispy/visuals/text/_sdf_cpu.pyx,sha256=
|
|
444
|
+
vispy/visuals/text/_sdf_cpu.pyx,sha256=uXBK9RDoLGfkNjfUvrTbkfdBQ3K06ReReswwN8bKN7M,3810
|
|
440
445
|
vispy/visuals/text/__init__.py,sha256=XyFi9zGWKpgWKC6xm0uMQZD1yzWU5TBi3jzoIehZ-dM,357
|
|
441
446
|
vispy/visuals/text/text.py,sha256=nyenaB3kj0YI6EpO9PCMH9RHMa4l9G1OoygZbOwksaE,25253
|
|
442
447
|
vispy/visuals/text/_sdf_gpu.py,sha256=uQwtOfH0tzZSlOP7uSY28SUK4_yk-dWwmmJRPXVAgD0,10480
|
|
443
|
-
vispy/visuals/text/_sdf_cpu.cpython-312-darwin.so,sha256=
|
|
448
|
+
vispy/visuals/text/_sdf_cpu.cpython-312-darwin.so,sha256=jSz7sARL-gXvMQWZaBOlGtANCN3GovnLlVSy1-9i4FA,205816
|
|
444
449
|
vispy/visuals/collections/raw_point_collection.py,sha256=yCVyZY1qfR_4FMY7T2UzoVaasjolD6W3Fbz4Db8H9lg,3582
|
|
445
450
|
vispy/visuals/collections/triangle_collection.py,sha256=Kg3tucLaNHZiOfMUYp4APp2JyF3w9CRSwBnQwHo-uaQ,625
|
|
446
451
|
vispy/visuals/collections/agg_segment_collection.py,sha256=EldTAMaMTuntVeYlumTkRRPPHUdHZhYn8wXS8gZw6ns,4710
|
|
@@ -455,7 +460,7 @@ vispy/visuals/collections/raw_triangle_collection.py,sha256=f2K8-Aj6GPesVOpPonF0
|
|
|
455
460
|
vispy/visuals/collections/base_collection.py,sha256=g0yWPNAEv-owvmADHw0Jd_ehc2kvTYUSbLgMDdz4iJ8,16739
|
|
456
461
|
vispy/visuals/collections/raw_polygon_collection.py,sha256=2ax1mWVS10gm07TsEqNbggSqRsQfFR74saWbvCYgz8I,2672
|
|
457
462
|
vispy/visuals/collections/path_collection.py,sha256=ZFmuNy4_7EtiIOmXxMwvEvNSoA2RZBFU9Rg1clo_8dI,992
|
|
458
|
-
vispy/visuals/collections/array_list.py,sha256=
|
|
463
|
+
vispy/visuals/collections/array_list.py,sha256=sZrKoLeFyqEWYb8oKyAgwCRO3z-7o2nQyuacxUdWPaI,14050
|
|
459
464
|
vispy/visuals/collections/segment_collection.py,sha256=sHaxBiA4CQ9bBBe1tzWO_15wJwVRbdVmm7GiSf_120w,797
|
|
460
465
|
vispy/visuals/collections/collection.py,sha256=a-NomLwYKzHwQkUSTbK9d61dYtPxNjv8R6fAQuY2q2A,8924
|
|
461
466
|
vispy/visuals/collections/agg_point_collection.py,sha256=NAQfPjrgAknCvlECU4EHHQ4AcU3qmW3XF4vqvOK2kCI,1714
|
|
@@ -465,15 +470,15 @@ vispy/geometry/isocurve.py,sha256=ChKH1vL1yLyvhjjCnMQgS8lY7xoLusqYfedWk68CrVg,57
|
|
|
465
470
|
vispy/geometry/generation.py,sha256=vT7JvjSDB4j3jNI-9qBjrqXZ-yb7aHN1-R6Y5c2cVlU,20941
|
|
466
471
|
vispy/geometry/meshdata.py,sha256=fXYlvVNfc40YVFMwPMv7cMG0R_5BdBNfPtMG4UVqrBc,26830
|
|
467
472
|
vispy/geometry/polygon.py,sha256=lq14n_ftvtCM31-CU-6pUX7qZI5vB2wIMfS_IFvGUKo,4201
|
|
468
|
-
vispy/geometry/__init__.py,sha256=
|
|
469
|
-
vispy/geometry/calculations.py,sha256=
|
|
473
|
+
vispy/geometry/__init__.py,sha256=EYyu3uN22nLfOFkgt0K4R1Vt9sMD2qMtXkUG00hPrkY,1080
|
|
474
|
+
vispy/geometry/calculations.py,sha256=s9zQP1FthrLNBzWkFr07_BcvSMPpNcnQiL0wUY2T8tk,4988
|
|
470
475
|
vispy/geometry/rect.py,sha256=uzCJibtsD1M8oR86fzB79Qookw5suwAnhs06kKVmrB0,5684
|
|
471
476
|
vispy/geometry/_triangulation_debugger.py,sha256=zvQlPkTIuoB-96T3lomOa26NjG-pp-OcTNnbL-vCXKo,5130
|
|
472
477
|
vispy/geometry/curves.py,sha256=vZ3ZdH6lozUTyAPq7_0sjT6U20WPkUu8OjZWVyktQj4,13145
|
|
473
478
|
vispy/geometry/torusknot.py,sha256=09D8aAU-0BsHZ57pnKYQ0_jQ1IMnLD88VieqR53jXlM,4262
|
|
474
479
|
vispy/geometry/normals.py,sha256=U6cDCSpnUey5xXL2sDEvs6iY91zaToOjqXhFQURR3tk,2436
|
|
475
480
|
vispy/geometry/isosurface.py,sha256=w-3aIM2BwjinptFP31mEM5jx44Clkfx9XSwE3HcEydk,20651
|
|
476
|
-
vispy/geometry/triangulation.py,sha256=
|
|
481
|
+
vispy/geometry/triangulation.py,sha256=Gcx1o0StWDNq4JcdTPbz_5W4j2b1NzZ1b-f7nBrJ31Y,32011
|
|
477
482
|
vispy/geometry/tests/test_meshdata.py,sha256=fgTGmoOyPHtQcH5tp8KVFmeWmAWKCxjvrSdohUxIOTo,4229
|
|
478
483
|
vispy/geometry/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
479
484
|
vispy/geometry/tests/test_calculations.py,sha256=KXUvAM5hzF_0bx8Dz1hlfS_wxW-IbM12M4uThBCukik,1038
|
|
@@ -513,8 +518,3 @@ vispy/scene/widgets/viewbox.py,sha256=gZekx8GSoJj8vRvqJ7Hw5Y5L1kVCmQQrF_f5YQOkkE
|
|
|
513
518
|
vispy/scene/widgets/label.py,sha256=2ynsXsQNgIRFFkLzftVr1p94nLYLRlr_WWATDuJq7-8,1308
|
|
514
519
|
vispy/scene/widgets/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
515
520
|
vispy/scene/widgets/tests/test_colorbar.py,sha256=Yp1A_nZKC9NTSzdTM6OYKAcMEk0QH1CYUlhpMuxmQ3A,1362
|
|
516
|
-
vispy-0.14.2.dist-info/RECORD,,
|
|
517
|
-
vispy-0.14.2.dist-info/WHEEL,sha256=KYtn_mzb_QwZSHwPlosUO3fDl70znfUFngLlrLVHeBY,111
|
|
518
|
-
vispy-0.14.2.dist-info/top_level.txt,sha256=mciStn1SI48jYwEhJXlrMJ3HaJ90XOr5ZGJ8YdFI674,6
|
|
519
|
-
vispy-0.14.2.dist-info/LICENSE.txt,sha256=L7orAx3saMGRPfxOnpOKfVQ6JKCc5XtadZSWrPSuW0A,1774
|
|
520
|
-
vispy-0.14.2.dist-info/METADATA,sha256=Pk-QpO-7-BJLOD7LKpjwkQU2B43cahTybvvQV_IKmKs,8328
|
|
File without changes
|
|
File without changes
|
|
File without changes
|