vispy 0.15.1__cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl → 0.15.2__cp311-cp311-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.

@@ -4,7 +4,11 @@
4
4
  """Grid widget for providing a gridded layout to child widgets."""
5
5
 
6
6
  from __future__ import division
7
+
8
+ from typing import Tuple, Union, Dict
9
+
7
10
  import numpy as np
11
+ from numpy.typing import NDArray
8
12
 
9
13
  from vispy.geometry import Rect
10
14
  from .widget import Widget
@@ -21,17 +25,19 @@ class Grid(Widget):
21
25
 
22
26
  Parameters
23
27
  ----------
24
- spacing : int
25
- Spacing between widgets.
28
+ spacing : int | tuple[int, int]
29
+ Spacing between widgets. If `tuple` then it must be of length two, the first element
30
+ being `width_spacing` and the second being `height_spacing`.
26
31
  **kwargs : dict
27
32
  Keyword arguments to pass to `Widget`.
28
33
  """
29
34
 
30
- def __init__(self, spacing=6, **kwargs):
35
+ def __init__(self, spacing=0, **kwargs):
31
36
  """Create solver and basic grid parameters."""
32
37
  self._next_cell = [0, 0] # row, col
33
38
  self._cells = {}
34
39
  self._grid_widgets = {}
40
+
35
41
  self.spacing = spacing
36
42
  self._n_added = 0
37
43
  self._default_class = ViewBox # what to add when __getitem__ is used
@@ -45,9 +51,6 @@ class Grid(Widget):
45
51
  self._width_grid = None
46
52
  self._height_grid = None
47
53
 
48
- # self._height_stay = None
49
- # self._width_stay = None
50
-
51
54
  Widget.__init__(self, **kwargs)
52
55
 
53
56
  def __getitem__(self, idxs):
@@ -256,53 +259,129 @@ class Grid(Widget):
256
259
  locs[r:r + rs, c:c + cs] = key
257
260
  return locs
258
261
 
262
+ @property
263
+ def spacing(self):
264
+ """
265
+ The spacing between individual Viewbox widgets in the grid.
266
+ """
267
+ return self._spacing
268
+
269
+ @spacing.setter
270
+ def spacing(self, value: Union[int, Tuple[int, int]]):
271
+ if not (
272
+ isinstance(value, int)
273
+ or isinstance(value, tuple)
274
+ and len(value) == 2
275
+ and isinstance(value[0], int)
276
+ and isinstance(value[1], int)
277
+ ):
278
+ raise ValueError('spacing must be of type int | tuple[int, int]')
279
+
280
+ self._spacing = value
281
+ self._need_solver_recreate = True
282
+
259
283
  def __repr__(self):
260
284
  return (('<Grid at %s:\n' % hex(id(self))) +
261
285
  str(self.layout_array + 1) + '>')
262
286
 
263
287
  @staticmethod
264
- def _add_total_width_constraints(solver, width_grid, _var_w):
265
- for ws in width_grid:
266
- width_expr = ws[0]
267
- for w in ws[1:]:
268
- width_expr += w
269
- solver.addConstraint(width_expr == _var_w)
288
+ def _add_total_dim_length_constraints(solver: Solver, grid_dim_variables: NDArray[Variable],
289
+ n_added: int, _var_dim_length: Variable, spacing: float):
290
+ """Add constraint: total height == sum(col heights) + sum(spacing).
270
291
 
271
- @staticmethod
272
- def _add_total_height_constraints(solver, height_grid, _var_h):
273
- for hs in height_grid:
274
- height_expr = hs[0]
275
- for h in hs[1:]:
276
- height_expr += h
277
- solver.addConstraint(height_expr == _var_h)
292
+ The total height of the grid is constrained to be equal to the sum of the heights of
293
+ its columns, including spacing between widgets.
294
+
295
+ Parameters
296
+ ----------
297
+ solver: Solver
298
+ Solver for a system of linear equations.
299
+ grid_dim_variables: NDArray[Variable]:
300
+ The grid of width or height variables of either shape col * row or row * col with each element being a
301
+ Variable in the solver representing the height or width of each grid box.
302
+ n_added: int
303
+ The number of ViewBoxes added to the grid.
304
+ _var_dim_length: Variable
305
+ The solver variable representing either total width or height of the grid.
306
+ spacing: float
307
+ The amount of spacing between single adjacent Viewbox widgets in the grid.
308
+ """
309
+ total_spacing = 0
310
+ if n_added > 1:
311
+ for _ in range(grid_dim_variables.shape[1] - 1):
312
+ total_spacing += spacing
313
+
314
+ for ds in grid_dim_variables:
315
+ dim_length_expr = ds[0]
316
+ for d in ds[1:]:
317
+ dim_length_expr += d
318
+ dim_length_expr += total_spacing
319
+ solver.addConstraint(dim_length_expr == _var_dim_length)
278
320
 
279
321
  @staticmethod
280
- def _add_gridding_width_constraints(solver, width_grid):
322
+ def _add_gridding_dim_constraints(solver: Solver, grid_dim_variables: NDArray[Variable]):
323
+ """Add constraint: all viewbox dims in each dimension are equal.
324
+
325
+ With all dims the reserved space for a widget with a col_span and row_span of 1 is meant, e.g. we have 3
326
+ widgets arranged in columns or rows with col_span or row_span 1 and those are being constrained to all be of
327
+ width/height 100. In other words the same dim length is reserved for each position in the grid, not taking
328
+ into account the spacing between grid positions.
329
+
330
+ Parameters
331
+ ----------
332
+ solver: Solver
333
+ Solver for a system of linear equations.
334
+ grid_dim_variables:
335
+ The grid of width or height variables of either shape col * row or row * col with each element being a
336
+ Variable in the solver representing the height or width of each grid box.
337
+ """
281
338
  # access widths of one "y", different x
282
- for ws in width_grid.T:
283
- for w in ws[1:]:
284
- solver.addConstraint(ws[0] == w)
339
+ for ds in grid_dim_variables.T:
340
+ for d in ds[1:]:
341
+ solver.addConstraint(ds[0] == d)
285
342
 
286
343
  @staticmethod
287
- def _add_gridding_height_constraints(solver, height_grid):
288
- # access heights of one "y"
289
- for hs in height_grid.T:
290
- for h in hs[1:]:
291
- solver.addConstraint(hs[0] == h)
344
+ def _add_stretch_constraints(solver: Solver, width_grid: NDArray[Variable] , height_grid: NDArray[Variable],
345
+ grid_widgets: Dict[int, Tuple[int, int, int, int, ViewBox]],
346
+ widget_grid: NDArray[ViewBox]):
347
+ """
348
+ Add proportional stretch constraints to the linear system solver of the grid.
292
349
 
293
- @staticmethod
294
- def _add_stretch_constraints(solver, width_grid, height_grid,
295
- grid_widgets, widget_grid):
350
+ This method enforces that grid rows and columns stretch in proportion
351
+ to the widgets' specified stretch factors. It uses weak constraints
352
+ so that proportionality is preserved when possible but can be violated
353
+ if stronger layout constraints are present.
354
+
355
+ Parameters
356
+ ----------
357
+ solver : Solver
358
+ Solver for a system of linear equations.
359
+ width_grid : NDArray[Variable]
360
+ The grid of width variables in the linear system of equations to be solved.
361
+ height_grid : NDArray[Variable]
362
+ The grid of height variables in the linear system of equations to be solved.
363
+ grid_widgets : dict[int, tuple[int, int, int, int, ViewBox]]
364
+ Dictionary mapping order of viewboxes added as int to their grid layout description:
365
+ (start_y, start_x, span_y, span_x, ViewBox).
366
+ widget_grid : NDArray[ViewBox]
367
+ Array of viewboxes in shape n_columns x n_rows.
368
+
369
+ Notes
370
+ -----
371
+ - Stretch constraints are added with 'weak' strength, allowing them to
372
+ be overridden by stronger constraints such as fixed sizes or min/max bounds.
373
+ - The constraint `total_size / stretch_factor` is used to maintain
374
+ proportional relationships among rows and columns.
375
+ """
296
376
  xmax = len(height_grid)
297
377
  ymax = len(width_grid)
298
378
 
299
- stretch_widths = [[] for _ in range(0, ymax)]
300
- stretch_heights = [[] for _ in range(0, xmax)]
379
+ stretch_widths = [[] for _ in range(ymax)]
380
+ stretch_heights = [[] for _ in range(xmax)]
301
381
 
302
382
  for (y, x, ys, xs, widget) in grid_widgets.values():
303
383
  for ws in width_grid[y:y+ys]:
304
384
  total_w = np.sum(ws[x:x+xs])
305
-
306
385
  for sw in stretch_widths[y:y+ys]:
307
386
  sw.append((total_w, widget.stretch[0]))
308
387
 
@@ -339,14 +418,36 @@ class Grid(Widget):
339
418
  'weak')
340
419
 
341
420
  @staticmethod
342
- def _add_widget_dim_constraints(solver, width_grid, height_grid,
343
- total_var_w, total_var_h, grid_widgets):
421
+ def _add_widget_dim_constraints(solver: Solver, width_grid: NDArray[Variable], height_grid: NDArray[Variable],
422
+ total_var_w: Variable, total_var_h: Variable,
423
+ grid_widgets: Dict[int, Tuple[int, int, int, int, ViewBox]]):
424
+ """Add constraints based on min/max width/height of widgets.
425
+
426
+ These constraints ensure that each widget's dimensions stay within its
427
+ specified minimum and maximum values.
428
+
429
+ Parameters
430
+ ----------
431
+ solver : Solver
432
+ Solver for a system of linear equations.
433
+ width_grid : NDArray[Variable]
434
+ The grid of width variables in the linear system of equations to be solved.
435
+ height_grid : NDArray[Variable]
436
+ The grid of height variables in the linear system of equations to be solved.
437
+ total_var_w : Variable
438
+ The Variable representing the total width of the grid in the linear system of equations.
439
+ total_var_w : Variable
440
+ The Variable representing the total height of the grid in the linear system of equations.
441
+ grid_widgets : dict[int, tuple[int, int, int, int, ViewBox]]
442
+ Dictionary mapping order of viewboxes added as int to their grid layout description:
443
+ (start_y, start_x, span_y, span_x, ViewBox).
444
+ """
344
445
  assert(total_var_w is not None)
345
446
  assert(total_var_h is not None)
346
447
 
347
448
  for ws in width_grid:
348
449
  for w in ws:
349
- solver.addConstraint(w >= 0,)
450
+ solver.addConstraint(w >= 0)
350
451
 
351
452
  for hs in height_grid:
352
453
  for h in hs:
@@ -375,6 +476,7 @@ class Grid(Widget):
375
476
  solver.addConstraint(total_h <= total_var_h)
376
477
 
377
478
  def _recreate_solver(self):
479
+ """Recreate the linear system solver with all constraints."""
378
480
  self._solver.reset()
379
481
  self._var_w = Variable("w_rect")
380
482
  self._var_h = Variable("h_rect")
@@ -390,43 +492,40 @@ class Grid(Widget):
390
492
  self._solver.addConstraint(self._var_w >= 0)
391
493
  self._solver.addConstraint(self._var_h >= 0)
392
494
 
393
- # self._height_stay = None
394
- # self._width_stay = None
395
-
396
495
  # add widths
397
- self._width_grid = np.array([[Variable("width(x: %s, y: %s)" % (x, y))
398
- for x in range(0, xmax)]
399
- for y in range(0, ymax)])
496
+ self._width_grid = np.array(
497
+ [
498
+ [Variable(f"width(x: {x}, y: {y})") for x in range(xmax)]
499
+ for y in range(ymax)
500
+ ]
501
+ )
400
502
 
401
503
  # add heights
402
- self._height_grid = np.array([[Variable("height(x: %s, y: %s" % (x, y))
403
- for y in range(0, ymax)]
404
- for x in range(0, xmax)])
405
-
406
- # setup stretch
407
- stretch_grid = np.zeros(shape=(xmax, ymax, 2), dtype=float)
408
- stretch_grid.fill(1)
409
-
410
- for (_, val) in self._grid_widgets.items():
411
- (y, x, ys, xs, widget) = val
412
- stretch_grid[x:x+xs, y:y+ys] = widget.stretch
413
-
504
+ self._height_grid = np.array(
505
+ [
506
+ [Variable(f"height(x: {x}, y: {y})") for y in range(ymax)]
507
+ for x in range(xmax)
508
+ ]
509
+ )
510
+
511
+ if isinstance(self.spacing, tuple):
512
+ width_spacing, height_spacing = self.spacing
513
+ else:
514
+ width_spacing = height_spacing = self.spacing
414
515
  # even though these are REQUIRED, these should never fail
415
516
  # since they're added first, and thus the slack will "simply work".
416
- Grid._add_total_width_constraints(self._solver,
417
- self._width_grid, self._var_w)
418
- Grid._add_total_height_constraints(self._solver,
419
- self._height_grid, self._var_h)
517
+ Grid._add_total_dim_length_constraints(self._solver,
518
+ self._width_grid, self._n_added, self._var_w, width_spacing)
519
+ Grid._add_total_dim_length_constraints(self._solver,
520
+ self._height_grid, self._n_added, self._var_h, height_spacing)
420
521
 
421
522
  try:
422
523
  # these are REQUIRED constraints for width and height.
423
524
  # These are the constraints which can fail if
424
525
  # the corresponding dimension of the widget cannot be fit in the
425
526
  # grid.
426
- Grid._add_gridding_width_constraints(self._solver,
427
- self._width_grid)
428
- Grid._add_gridding_height_constraints(self._solver,
429
- self._height_grid)
527
+ Grid._add_gridding_dim_constraints(self._solver, self._width_grid)
528
+ Grid._add_gridding_dim_constraints(self._solver, self._height_grid)
430
529
  except UnsatisfiableConstraint:
431
530
  self._need_solver_recreate = True
432
531
 
@@ -436,24 +535,27 @@ class Grid(Widget):
436
535
  self._width_grid,
437
536
  self._height_grid,
438
537
  self._grid_widgets,
439
- self._widget_grid)
538
+ self._widget_grid,
539
+ )
440
540
 
441
541
  Grid._add_widget_dim_constraints(self._solver,
442
542
  self._width_grid,
443
543
  self._height_grid,
444
544
  self._var_w,
445
545
  self._var_h,
446
- self._grid_widgets)
546
+ self._grid_widgets
547
+ )
447
548
 
448
549
  self._solver.updateVariables()
449
550
 
450
551
  def _update_child_widget_dim(self):
552
+ """Solve the linear system of equations in order to assign Viewbox parameters such as position."""
451
553
  # think in terms of (x, y). (row, col) makes code harder to read
452
554
  ymax, xmax = self.grid_size
453
555
  if ymax <= 0 or xmax <= 0:
454
556
  return
455
557
 
456
- rect = self.rect # .padded(self.padding + self.margin)
558
+ rect = self.rect.padded(self.padding + self.margin)
457
559
  if rect.width <= 0 or rect.height <= 0:
458
560
  return
459
561
  if self._need_solver_recreate:
@@ -474,22 +576,40 @@ class Grid(Widget):
474
576
 
475
577
  value_vectorized = np.vectorize(lambda x: x.value())
476
578
 
477
- for (_, val) in self._grid_widgets.items():
579
+ if isinstance(self.spacing, tuple):
580
+ width_spacing, height_spacing = self.spacing
581
+ else:
582
+ width_spacing = height_spacing = self.spacing
583
+
584
+ for index, (_, val) in enumerate(self._grid_widgets.items()):
478
585
  (row, col, rspan, cspan, widget) = val
479
586
 
587
+ # If spacing, always one spacing unit between 2 grid positions, even when span is > 1.
588
+ # If span is > 1, spacing will be added to the dim length of Viewbox
589
+ spacing_width_offset = col * width_spacing if self._n_added > 1 else 0
590
+ spacing_height_offset = row * height_spacing if self._n_added > 1 else 0
591
+
592
+ # Add one spacing unit to dim length of the Viewbox per grid positions the ViewBox spans if span > 1.
593
+ width_increase_spacing = width_spacing * (cspan - 1)
594
+ height_increase_spacing = height_spacing * (rspan - 1)
595
+
480
596
  width = np.sum(value_vectorized(
481
- self._width_grid[row][col:col+cspan]))
597
+ self._width_grid[row][col:col+cspan])) + width_increase_spacing
482
598
  height = np.sum(value_vectorized(
483
- self._height_grid[col][row:row+rspan]))
599
+ self._height_grid[col][row:row+rspan])) + height_increase_spacing
600
+
484
601
  if col == 0:
485
602
  x = 0
486
603
  else:
487
- x = np.sum(value_vectorized(self._width_grid[row][0:col]))
604
+ x = np.sum(value_vectorized(self._width_grid[row][:col])) + spacing_width_offset
488
605
 
489
606
  if row == 0:
490
607
  y = 0
491
608
  else:
492
- y = np.sum(value_vectorized(self._height_grid[col][0:row]))
609
+ y = np.sum(value_vectorized(self._height_grid[col][:row])) + spacing_height_offset
610
+
611
+ x += self.padding
612
+ y += self.padding
493
613
 
494
614
  if isinstance(widget, ViewBox):
495
615
  widget.rect = Rect(x, y, width, height)
@@ -312,6 +312,17 @@ class Widget(Compound):
312
312
  self._update_line()
313
313
  self.update()
314
314
 
315
+ @property
316
+ def border_width(self):
317
+ """The width of the border."""
318
+ return self._border_width
319
+
320
+ @border_width.setter
321
+ def border_width(self, b):
322
+ self._border_width = float(b)
323
+ self._update_line()
324
+ self.update()
325
+
315
326
  @property
316
327
  def bgcolor(self):
317
328
  """The background color of the Widget."""
vispy/version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.15.1'
21
- __version_tuple__ = version_tuple = (0, 15, 1)
20
+ __version__ = version = '0.15.2'
21
+ __version_tuple__ = version_tuple = (0, 15, 2)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vispy
3
- Version: 0.15.1
3
+ Version: 0.15.2
4
4
  Summary: Interactive visualization in Python
5
5
  Home-page: http://vispy.org
6
6
  Download-URL: https://pypi.python.org/pypi/vispy
@@ -1,6 +1,6 @@
1
1
  vispy/__init__.py,sha256=Sm3hzOs_-fXTikZnwAFZoLOvETmFCw8BsSoAguXvhdY,902
2
2
  vispy/conftest.py,sha256=1qkMPiB5SHGll3Sbvz9iBIAVeyaIuW7YDw8VpfKTMzk,489
3
- vispy/version.py,sha256=tQzj2BXuQVT8ur10Vpw9erM-ZknJX1RqcwqYbcqo3NY,513
3
+ vispy/version.py,sha256=KRKlaCoLoYRe3lmREqbhkmA_Yhx41a2BsvZ95EM3lt0,513
4
4
  vispy/app/__init__.py,sha256=bS3jZwya_8MmPiYQcoERJIoO5PotaahaOaOqVbhbH6Y,625
5
5
  vispy/app/_default_app.py,sha256=Iu-ILcsMAP7s6URR_0c7DKw04JtL6m8l01oKQYwvoPo,2421
6
6
  vispy/app/_detect_eventloop.py,sha256=hMht958_W6MVGEfJS7UMTRnIHyoODeJ6oVCaDXJZ5H8,6474
@@ -296,10 +296,10 @@ vispy/scene/widgets/anchor.py,sha256=gDhPq73VDtyCZDDEzGNLFW9tIMtAjDpjEToEn2pAXxQ
296
296
  vispy/scene/widgets/axis.py,sha256=NBeL6TuebyV5VCexWaOBW0OtNwF8k9r22nu5egDg52g,2954
297
297
  vispy/scene/widgets/colorbar.py,sha256=rLryyZim6W0_EYx5QdxW9o7WnBII43yAc_ShnoXvh_E,6158
298
298
  vispy/scene/widgets/console.py,sha256=wkon8nst3I0Pkga93QgVORhFicbVCLZE8tv7y9nfEmM,14013
299
- vispy/scene/widgets/grid.py,sha256=JaNLT0QK5p3ZrqJzaVZgjDqT48wvDHb2HVwj4e0yFvE,18656
299
+ vispy/scene/widgets/grid.py,sha256=AMzQJa6xWrFkEkijBdRNYO73OADN2derhVVsasT8RNE,24800
300
300
  vispy/scene/widgets/label.py,sha256=2ynsXsQNgIRFFkLzftVr1p94nLYLRlr_WWATDuJq7-8,1308
301
301
  vispy/scene/widgets/viewbox.py,sha256=gZekx8GSoJj8vRvqJ7Hw5Y5L1kVCmQQrF_f5YQOkkE0,6674
302
- vispy/scene/widgets/widget.py,sha256=tJE2Ohm84GH_L1S9syQKbqYpYwOrm2kdY6CK0StUcL0,13863
302
+ vispy/scene/widgets/widget.py,sha256=ao2Ie47Y-oZBpxgf0ix8RFMe4e4VsZqFepiKLxhnFrM,14124
303
303
  vispy/scene/widgets/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
304
304
  vispy/scene/widgets/tests/test_colorbar.py,sha256=Yp1A_nZKC9NTSzdTM6OYKAcMEk0QH1CYUlhpMuxmQ3A,1362
305
305
  vispy/testing/__init__.py,sha256=k7KagAl3LhX_2EblFK6x_ekO23Un_9CAIuHdEgHdmps,2437
@@ -500,7 +500,7 @@ vispy/visuals/tests/test_text.py,sha256=-dMbyBkrclEVp_PSmC1LWeUOyBcAa4_bewAR-nf6
500
500
  vispy/visuals/tests/test_volume.py,sha256=VY3NBuGjc90d2EWAjbKv-rxPTRKdKZB4LQ8CSheck0I,17578
501
501
  vispy/visuals/tests/test_windbarb.py,sha256=NCdMvOBhcL1xoy85efdPEkyUempiTWA6pM6dX674MDo,1102
502
502
  vispy/visuals/text/__init__.py,sha256=XyFi9zGWKpgWKC6xm0uMQZD1yzWU5TBi3jzoIehZ-dM,357
503
- vispy/visuals/text/_sdf_cpu.cpython-311-aarch64-linux-gnu.so,sha256=HOPM7SsHf9X0LhQssi5gixwKnU32WZEwNTjphyPA8aQ,1685128
503
+ vispy/visuals/text/_sdf_cpu.cpython-311-aarch64-linux-gnu.so,sha256=ZHmgvOtBT92Qn6tMkatKtw8SewdYpehI06vEQY6fSr4,1685280
504
504
  vispy/visuals/text/_sdf_cpu.pyx,sha256=uXBK9RDoLGfkNjfUvrTbkfdBQ3K06ReReswwN8bKN7M,3810
505
505
  vispy/visuals/text/_sdf_gpu.py,sha256=uQwtOfH0tzZSlOP7uSY28SUK4_yk-dWwmmJRPXVAgD0,10480
506
506
  vispy/visuals/text/text.py,sha256=nyenaB3kj0YI6EpO9PCMH9RHMa4l9G1OoygZbOwksaE,25253
@@ -514,8 +514,8 @@ vispy/visuals/transforms/nonlinear.py,sha256=3-3Y2V9nD30ZVzJAc013Cbj7BrP2hgNnb6k
514
514
  vispy/visuals/transforms/transform_system.py,sha256=ynOGbDhvLkujjV3Y389lJsTUr_-KjZ0QvMV7s0KgX9M,13759
515
515
  vispy/visuals/transforms/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
516
516
  vispy/visuals/transforms/tests/test_transforms.py,sha256=u8TbJ0ZJJBqGR78SCZTCC9HxyxShIlaaMK1EVFao2e4,6871
517
- vispy-0.15.1.dist-info/METADATA,sha256=LIS2ucCJABqjJlmnVVf5Zcq04xa9dwTHUI_VsiYOBKw,8978
518
- vispy-0.15.1.dist-info/WHEEL,sha256=tQPVbWkEA5kW5mks9ExhiE7QbghQmHHgJqgfeYqA4io,153
519
- vispy-0.15.1.dist-info/top_level.txt,sha256=mciStn1SI48jYwEhJXlrMJ3HaJ90XOr5ZGJ8YdFI674,6
520
- vispy-0.15.1.dist-info/RECORD,,
521
- vispy-0.15.1.dist-info/licenses/LICENSE.txt,sha256=hLBPzUmDb8t3_W75Epf9lzxiqgPLHIyBEYSomgeTc8I,1774
517
+ vispy-0.15.2.dist-info/METADATA,sha256=6PfToxMK1J3Wmrthbth2z3TwlUNwSQzj8mnNm_ea0ZI,8978
518
+ vispy-0.15.2.dist-info/WHEEL,sha256=AKBHhzURqqUE5Bb9LDUoYqPR1ASY5DC5S1zOdvq8Px4,153
519
+ vispy-0.15.2.dist-info/top_level.txt,sha256=mciStn1SI48jYwEhJXlrMJ3HaJ90XOr5ZGJ8YdFI674,6
520
+ vispy-0.15.2.dist-info/RECORD,,
521
+ vispy-0.15.2.dist-info/licenses/LICENSE.txt,sha256=hLBPzUmDb8t3_W75Epf9lzxiqgPLHIyBEYSomgeTc8I,1774
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.6.0)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp311-cp311-manylinux_2_17_aarch64
5
5
  Tag: cp311-cp311-manylinux2014_aarch64