lavavu 1.9.6__cp310-cp310-win_amd64.whl → 1.9.8__cp310-cp310-win_amd64.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.
Binary file
lavavu/dict.json CHANGED
@@ -2147,6 +2147,17 @@
2147
2147
  false
2148
2148
  ]
2149
2149
  },
2150
+ "upscalelines": {
2151
+ "default": false,
2152
+ "target": "global",
2153
+ "type": "real",
2154
+ "desc": "Enable to scale lines with the viewport size.",
2155
+ "strict": true,
2156
+ "redraw": 0,
2157
+ "control": [
2158
+ true
2159
+ ]
2160
+ },
2150
2161
  "fps": {
2151
2162
  "default": false,
2152
2163
  "target": "global",
lavavu/html/control.js CHANGED
@@ -87,7 +87,7 @@ function WindowInteractor(id, uid, port) {
87
87
 
88
88
  //Several possible modes to try
89
89
  //Modern JupyterHub lab URL
90
- var regex = /\/lab\//;
90
+ var regex = /\/lab(\/|\?|$)/; //Match "/lab" at end of url or "/lab/" or "/lab?" anywhere
91
91
  var parsed = regex.exec(loc.href);
92
92
  if (parsed && parsed.length > 0) {
93
93
  connect(loc.href.substring(0,parsed.index) + "/proxy/" + port);
lavavu/html/webview.html CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  <input id="fileinput" type="file" style="visibility:hidden" onchange="useFileInput(this)" />
29
29
 
30
- <script async src="https://cdn.jsdelivr.net/gh/lavavu/lavavu.github.io@1.9.6/LavaVu-amalgamated.min.js"></script>
30
+ <script async src="https://cdn.jsdelivr.net/gh/lavavu/lavavu.github.io@1.9.8/LavaVu-amalgamated.min.js"></script>
31
31
  <!--script src="dat.gui.min.js"></script>
32
32
  <script src="OK-min.js"></script>
33
33
 
lavavu/lavavu.py CHANGED
@@ -23,7 +23,7 @@ __all__ = ['Viewer', 'Object', 'Properties', 'ColourMap', 'DrawData', 'Figure',
23
23
  import os
24
24
  #must be an object or won't be referenced from __init__.py import
25
25
  #(enures values are passed on when set externally)
26
- settings = {"default_args" : [], "echo_fails" : False, "quality_override" : None}
26
+ settings = {"default_args" : [], "echo_fails" : False, "quality_override" : None, "test_mode" : False}
27
27
  #Default arguments for viewer creation
28
28
  _val = os.environ.get('LV_ARGS')
29
29
  if _val:
@@ -36,6 +36,10 @@ if _val:
36
36
  _val = os.environ.get('LV_QUALITY')
37
37
  if _val:
38
38
  settings["quality_override"] = int(_val)
39
+ #Test mode - changes some behaviour to support automated testing
40
+ _val = os.environ.get('LV_TEST')
41
+ if _val:
42
+ settings["test_mode"] = bool(_val)
39
43
 
40
44
  import json
41
45
  import math
@@ -54,6 +58,7 @@ import asyncio
54
58
  import quaternion as quat
55
59
  import platform
56
60
  import matplotlib
61
+ from pathlib import Path
57
62
 
58
63
  if sys.version_info[0] < 3:
59
64
  print("Python 3 required. LavaVu no longer supports Python 2.7.")
@@ -3562,7 +3567,6 @@ class Viewer(dict):
3562
3567
  ll = len(self.objects.list) #Save list length before load
3563
3568
  if not self.app.loadFile(filename):
3564
3569
  #Support trimesh formats
3565
- from pathlib import Path
3566
3570
  path = Path(filename)
3567
3571
  ext = path.suffix.lower()[1:]
3568
3572
  import convert
@@ -3876,6 +3880,9 @@ class Viewer(dict):
3876
3880
  """
3877
3881
  Render a new frame, explicit display update
3878
3882
  """
3883
+ if settings["test_mode"] and self.recording and self.recording.framecount != 0:
3884
+ #Skip rendering all except first and last frames when testing
3885
+ return
3879
3886
  self.app.render()
3880
3887
  #Video recording?
3881
3888
  if self.recording:
@@ -4305,7 +4312,7 @@ class Viewer(dict):
4305
4312
  #This is thread safe as doesn't load texture
4306
4313
  return self.app.imageFromFile(filename)
4307
4314
 
4308
- def testimages(self, imagelist=None, tolerance=TOL_DEFAULT, expectedPath='expected/', outputPath='./', clear=True):
4315
+ def testimages(self, imagelist=None, tolerance=TOL_DEFAULT, expectedPath='expected/', outputPath='./', png=True, jpg=False, clear=True):
4309
4316
  """
4310
4317
  Compare a list of images to expected images for testing
4311
4318
 
@@ -4320,6 +4327,10 @@ class Viewer(dict):
4320
4327
  Where to find the expected result images (should have the same filenames as output images)
4321
4328
  outputPath : str
4322
4329
  Where to find the output images
4330
+ png : boolean
4331
+ Check png image outputs, defaults to True
4332
+ jpng : boolean
4333
+ Check jpg image outputs, defaults to False
4323
4334
  clear : boolean
4324
4335
  If the test passes the output images will be deleted, set to False to disable deletion
4325
4336
  """
@@ -4333,14 +4344,17 @@ class Viewer(dict):
4333
4344
  #No expected images yet, just get images in cwd
4334
4345
  #will be copied in to expected in testimage()
4335
4346
  pass
4336
- imagelist = glob.glob("*.png")
4337
- imagelist += glob.glob("*.jpg")
4347
+ imagelist = []
4348
+ if png:
4349
+ imagelist += glob.glob("*.png")
4350
+ if jpg:
4351
+ imagelist += glob.glob("*.jpg")
4338
4352
  imagelist.sort(key=os.path.getmtime)
4339
4353
  os.chdir(cwd)
4340
4354
 
4341
4355
  for f in sorted(imagelist):
4342
- outfile = outputPath+f
4343
- expfile = expectedPath+f
4356
+ outfile = os.path.join(outputPath, f)
4357
+ expfile = os.path.join(expectedPath, f)
4344
4358
  results.append(self.testimage(expfile, outfile, tolerance, clear))
4345
4359
 
4346
4360
  #Combined result
@@ -5504,9 +5518,6 @@ class Video(object):
5504
5518
  **kwargs :
5505
5519
  Any additional keyword args will also be passed as options to the encoder
5506
5520
  """
5507
- if av is None:
5508
- raise(ImportError("Video output not supported without pyAV - pip install av"))
5509
- return
5510
5521
  self.resolution = list(resolution)
5511
5522
  if self.resolution[0] == 0 or self.resolution[1] == 0:
5512
5523
  self.resolution = (viewer.app.viewer.width, viewer.app.viewer.height)
@@ -5515,7 +5526,20 @@ class Video(object):
5515
5526
  self.framerate = framerate
5516
5527
  self.quality = quality
5517
5528
  self.viewer = viewer
5518
- self.filename = filename
5529
+ self.filename = Path(filename)
5530
+ if settings["test_mode"]:
5531
+ #Force png output when testing
5532
+ encoder = 'png'
5533
+ if av is None or encoder == 'png' or encoder == 'jpg':
5534
+ if av is None:
5535
+ print("Video output not supported without pyAV - pip install av, writing image frames instead")
5536
+ self.encoder = 'png' if encoder == 'png' else 'jpg'
5537
+ p = self.filename
5538
+ self.basename = p.stem
5539
+ self.filename = p.parent / p.stem
5540
+ self.framecount = 0
5541
+ return
5542
+
5519
5543
  self.player = player
5520
5544
  if self.player is None:
5521
5545
  #Default player is half output resolution, unless < 900 then full
@@ -5547,6 +5571,12 @@ class Video(object):
5547
5571
  #Compression level, lower = high quality
5548
5572
  #See also: https://github.com/PyAV-Org/PyAV/blob/main/tests/test_encode.py
5549
5573
  options = {}
5574
+ if self.encoder == 'jpg' or self.encoder == 'png':
5575
+ if not settings["test_mode"]:
5576
+ self.filename.mkdir(exist_ok=True)
5577
+ self.viewer.recording = self
5578
+ return
5579
+
5550
5580
  if self.encoder == 'h264' or self.encoder == 'libx265':
5551
5581
  #Only have default options for h264/265 for now
5552
5582
  if self.quality == 1:
@@ -5576,7 +5606,7 @@ class Video(object):
5576
5606
  options.update(self.options)
5577
5607
 
5578
5608
  #print(options)
5579
- self.container = av.open(self.filename, mode="w")
5609
+ self.container = av.open(str(self.filename), mode="w")
5580
5610
  self.stream = self.container.add_stream(self.encoder, rate=self.framerate, options=options)
5581
5611
  self.stream.width = self.resolution[0]
5582
5612
  self.stream.height = self.resolution[1]
@@ -5602,10 +5632,19 @@ class Video(object):
5602
5632
  Write a frame, called when viewer.render() is called
5603
5633
  while a recording is in progress
5604
5634
  """
5605
- img = self.viewer.rawimage(resolution=self.resolution, channels=3)
5606
- frame = av.VideoFrame.from_ndarray(img.data, format="rgb24")
5607
- for packet in self.stream.encode(frame):
5608
- self.container.mux(packet)
5635
+ if self.encoder == 'jpg' or self.encoder == 'png':
5636
+ if settings["test_mode"]:
5637
+ #Don't output in subdir
5638
+ fn = f"{self.framecount:06}_{self.basename}.{self.encoder}"
5639
+ else:
5640
+ fn = self.filename / f"{self.framecount:06}_{self.basename}.{self.encoder}"
5641
+ self.framecount += 1
5642
+ self.viewer.image(str(fn), resolution=self.resolution)
5643
+ else:
5644
+ img = self.viewer.rawimage(resolution=self.resolution, channels=3)
5645
+ frame = av.VideoFrame.from_ndarray(img.data, format="rgb24")
5646
+ for packet in self.stream.encode(frame):
5647
+ self.container.mux(packet)
5609
5648
 
5610
5649
  def pause(self):
5611
5650
  """
@@ -5621,6 +5660,15 @@ class Video(object):
5621
5660
  Stop recording, final frames will be written and file closed, ready to play.
5622
5661
  No further frames will be added to the video
5623
5662
  """
5663
+ if self.encoder == 'jpg' or self.encoder == 'png':
5664
+ self.viewer.recording = None
5665
+ if settings["test_mode"]:
5666
+ #Render the last frame for tests
5667
+ self.viewer.app.render()
5668
+ fn = f"{self.framecount:06}_{self.basename}.{self.encoder}"
5669
+ self.viewer.image(str(fn), resolution=self.resolution)
5670
+ self.framecount = 0
5671
+ return
5624
5672
  # Flush stream
5625
5673
  for packet in self.stream.encode():
5626
5674
  self.container.mux(packet)
@@ -5648,7 +5696,14 @@ class Video(object):
5648
5696
  if image.size == self.resolution[0] * self.resolution[1] * 4:
5649
5697
  image = image.reshape(self.resolution[0], self.resolution[1], 4)
5650
5698
  image = image[::,::,:3] #Remove alpha channel
5651
- #self.encoder.copyframe(image.ravel())
5699
+
5700
+ if self.encoder == 'jpg' or self.encoder == 'png':
5701
+ from PIL import Image as PILImage
5702
+ img = PILImage.fromarray(image)
5703
+ fn = self.filename / f"{self.framecount:06}_{self.basename}.{self.encoder}"
5704
+ self.framecount += 1
5705
+ img.save(fn)
5706
+ return
5652
5707
 
5653
5708
  frame = av.VideoFrame.from_ndarray(image, format="rgb24")
5654
5709
  for packet in self.stream.encode(frame):
@@ -5658,7 +5713,11 @@ class Video(object):
5658
5713
  """
5659
5714
  Show the video in an inline player if in an interactive notebook
5660
5715
  """
5661
- player(self.filename, **self.player)
5716
+ if self.encoder == 'jpg' or self.encoder == 'png':
5717
+ from IPython.display import display,HTML
5718
+ display(HTML('<p>Video written to images, no player available</p>'))
5719
+ else:
5720
+ player(self.filename, **self.player)
5662
5721
 
5663
5722
  def __enter__(self):
5664
5723
  self.start()
@@ -5671,6 +5730,8 @@ class Video(object):
5671
5730
  self.play()
5672
5731
  else:
5673
5732
  print('Recording failed: ', exc_value)
5733
+ import traceback
5734
+ print(traceback.format_exc())
5674
5735
  return True
5675
5736
 
5676
5737
  #Wrapper class for raw image data
@@ -8,7 +8,6 @@ uniform mat4 uMVMatrix;
8
8
  uniform mat4 uPMatrix;
9
9
  uniform mat4 uNMatrix;
10
10
 
11
- uniform vec4 uColour;
12
11
  uniform vec4 uLightPos;
13
12
 
14
13
  out vec4 vColour;
@@ -26,11 +25,10 @@ void main(void)
26
25
 
27
26
  vNormal = normalize(mat3(uNMatrix) * aVertexNormal);
28
27
 
29
- if (uColour.a > 0.0)
30
- vColour = uColour;
31
- else
32
- vColour = aVertexColour;
33
-
28
+ //This shader only applies attribute colour
29
+ //uColour is set for other/custom shaders
30
+ //Note uOpacity is "alpha" prop, "oapcity" is passed via attrib
31
+ vColour = aVertexColour;
34
32
  vTexCoord = aVertexTexCoord;
35
33
  vFlatColour = vColour;
36
34
  vVertex = aVertexPosition;
lavavu/tracers.py CHANGED
@@ -24,7 +24,7 @@ def random_particles(count, lowerbound=[0,0,0], upperbound=[1,1,1], dims=3):
24
24
  return numpy.stack(p).T
25
25
 
26
26
  class Tracers():
27
- def __init__(self, grid, count=1000, lowerbound=None, upperbound=None, limit=None, age=4, respawn_chance=0.2, speed_multiply=1.0, height=0.0, viewer=None):
27
+ def __init__(self, grid, count=1000, lowerbound=None, upperbound=None, limit=None, age=4, respawn_chance=0.2, speed_multiply=1.0, height=0.0, label='', viewer=None):
28
28
  """
29
29
  Seed random particles into a vector field and trace their positions
30
30
 
@@ -52,6 +52,8 @@ class Tracers():
52
52
  Speed multiplier, scaling factor for the velocity taken from the vector values
53
53
  height : float
54
54
  A fixed height value, all positions will be given this height as their Z component
55
+ label : str
56
+ Name label prefix for the visualisation objects when plotting
55
57
  viewer : lavavu.Viewer
56
58
  Viewer object for plotting functions
57
59
  """
@@ -100,6 +102,7 @@ class Tracers():
100
102
  self.speed_multiply = speed_multiply
101
103
  self.height = height
102
104
 
105
+ self.label = label
103
106
  self.lv = viewer
104
107
  self.points = None
105
108
  self.arrows = None
@@ -157,8 +160,8 @@ class Tracers():
157
160
  self.speed[r] = 0.0
158
161
 
159
162
  if self.lv:
160
- positions = self.positions
161
- if self.dims == 2 and self.height != 0:
163
+ positions = self.get_positions()
164
+ if positions.shape[1] == 2 and self.height != 0:
162
165
  #Convert to 3d and set z coord to height
163
166
  shape = list(positions.shape)
164
167
  shape[-1] = 3
@@ -180,15 +183,25 @@ class Tracers():
180
183
  if len(self.tracers["colourmap"]):
181
184
  self.tracers.values(self.speed)
182
185
 
186
+ def get_positions(self):
187
+ """
188
+ This funcion can be overridden if positions need to be transformed
189
+ in any way before plotting, eg: plotting on spherical earth model
190
+ """
191
+ return self.positions
192
+
193
+ def prefix(self):
194
+ return self.label + '_' if len(self.label) else ''
195
+
183
196
  def plot_points(self, **kwargs):
184
197
  if self.lv is not None and self.points is None:
185
- self.points = self.lv.points('tracer_points', **kwargs)
198
+ self.points = self.lv.points(self.prefix() + 'tracer_points', **kwargs)
186
199
 
187
200
  def plot_arrows(self, **kwargs):
188
201
  if self.lv is not None and self.arrows is None:
189
- self.arrows = self.lv.vectors('tracer_arrows', **kwargs)
202
+ self.arrows = self.lv.vectors(self.prefix() + 'tracer_arrows', **kwargs)
190
203
 
191
204
  def plot_tracers(self, **kwargs):
192
205
  if self.lv is not None and self.tracers is None:
193
- self.tracers = self.lv.tracers('tracers', dims=self.count, limit=self.limit, **kwargs)
206
+ self.tracers = self.lv.tracers(self.prefix() + 'tracers', dims=self.count, limit=self.limit, **kwargs)
194
207
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lavavu
3
- Version: 1.9.6
3
+ Version: 1.9.8
4
4
  Summary: Python interface to LavaVu OpenGL 3D scientific visualisation utilities
5
5
  Author-email: Owen Kaluza <owen@kaluza.id.au>
6
6
  License: ### Licensing
@@ -224,7 +224,7 @@ Dynamic: license-file
224
224
  [![Build Status](https://github.com/lavavu/LavaVu/workflows/Test/badge.svg)](https://github.com/lavavu/LavaVu/actions?query=workflow:Test)
225
225
  [![Deploy Status](https://github.com/lavavu/LavaVu/workflows/Deploy/badge.svg?branch=1.7.3)](https://github.com/lavavu/LavaVu/actions?query=workflow:Deploy)
226
226
  [![DOI](https://zenodo.org/badge/45163055.svg)](https://zenodo.org/badge/latestdoi/45163055)
227
- [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/lavavu/LavaVu/1.9.6)
227
+ [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/lavavu/LavaVu/1.9.8)
228
228
 
229
229
  A scientific visualisation tool with a python interface for fast and flexible visual analysis.
230
230
 
@@ -1,5 +1,5 @@
1
1
  lavavu/LavaVuPython.py,sha256=uTyBhkTp-Gcg468mS7EXZWxUU4TVtQ0R6D169CnMUZ0,33768
2
- lavavu/_LavaVuPython.cp310-win_amd64.pyd,sha256=zlgxAc1E79PVZ5CfLz1FteoT_xEA9qGfuO4rCmVQMsc,3132416
2
+ lavavu/_LavaVuPython.cp310-win_amd64.pyd,sha256=DD42m2GAVTkMYTfdduvkgZH5wwzd-mfVSPz0bvlBheg,3133440
3
3
  lavavu/__init__.py,sha256=ZOkoA9N5M5swxkeLDlrc9NGFQ1PggLWW4GheseTtq8I,206
4
4
  lavavu/__main__.py,sha256=9L7Rfhb_U9Oqkop7MVJ4fi9XUnx4t2vpajOMKNNVunc,247
5
5
  lavavu/amalgamate.py,sha256=goS8OLot2q400zRMMRoksYkaNyBgRJlrpU1UxSKwLmA,601
@@ -11,10 +11,10 @@ lavavu/avformat-58.dll,sha256=PB5bD4mq62vBBY8tdagrGaYD2AQjaz3Lgc6wpp0UIr0,110940
11
11
  lavavu/avutil-56.dll,sha256=VsAhkveudbox9BBMuLEjnJ6yzoyJDoy2SzgPnMgMug0,866304
12
12
  lavavu/control.py,sha256=tucSLYj9KAD2IJoNbiOrGRSytO0xnlulB-jOnqlpOlk,68486
13
13
  lavavu/convert.py,sha256=3F79LHdsi74pvewvDuvnlYR_Zsh5mCc1QI7XZnQSMN8,36404
14
- lavavu/dict.json,sha256=1q3o7wF_siDIwmA2Sw1nh8Y1knlfmWJ64EHki21iWRU,55246
14
+ lavavu/dict.json,sha256=GoN4DlKy2x2_d9br2X4tC4B17388eqqw9FYyqqlVBLM,55480
15
15
  lavavu/font.bin,sha256=fvi5zkvmq6gh9v3jXedBVuxNJWKmHtbjECzv6eT9wb4,225360
16
16
  lavavu/glfw3.dll,sha256=zI-Qy4RDHQo4mYYgW4QLREz-WZ5l5HCXJzyksyTy0bY,83456
17
- lavavu/lavavu.py,sha256=Sh1DAgP8SaYsO7NyKA667WMzoGsS2adAu7Pdp2x4eKQ,224667
17
+ lavavu/lavavu.py,sha256=2zrwiMeC8ncs84q6PHD67EFRxoCAOiQU23rHh6Tmsjs,227423
18
18
  lavavu/liblzma.dll,sha256=_n95XbzYpeaXq6wB884fmpf8nqs2Ot9gyxUL_CS2TCI,154624
19
19
  lavavu/points.py,sha256=bp5XFMUHShjeRW7XUNgq8uxj3wjk4EE-qnWEJjAn-uM,6062
20
20
  lavavu/postproc-55.dll,sha256=DwfCHwxbuZiEzRcfbh5aa-5Ax3xIsWkxEN0achBvJPU,133120
@@ -23,7 +23,7 @@ lavavu/server.py,sha256=oYVKr51a5wSedl6n25kvAE8lHEb-EX2tUUk8zDuagaM,12811
23
23
  lavavu/swresample-3.dll,sha256=hlz9EYJ8_DjhqGYcevhIDwM_9qSuZFAxK4MgeAetqE4,433664
24
24
  lavavu/swscale-5.dll,sha256=s1IjI1-IaDVYiY3P9TouwS0OQRCG620yF-kLkKMiz70,552960
25
25
  lavavu/tiff.dll,sha256=fz7vpqGN9PbzO-zgiDnOlSicYj8eJBf3lhp-sY_j6uk,646656
26
- lavavu/tracers.py,sha256=I58vJP4jNGJEE-nujz3FOTfJCZrMwEmtpczuUVVinwU,8682
26
+ lavavu/tracers.py,sha256=5pq6M_oHC0YUBYSp3pcin7JQVxSBvjsGWPA8GMlqfUo,9204
27
27
  lavavu/vutils.py,sha256=69Aygnjdz7l8-6PVYHKtOmSNFz9bGSKCv79ZI3MHY6M,5648
28
28
  lavavu/zlib.dll,sha256=4tlDhqlDl2vb-ztXfk8WIhbyfNrMRvtmygwk4s9fRQM,84992
29
29
  lavavu/zstd.dll,sha256=NJIIlGtaKrXDSlaIzizhDVEMxjuccfkSqhgy-DSUN80,491008
@@ -31,7 +31,7 @@ lavavu/html/LavaVu-amalgamated.css,sha256=oHR0Xcn58ve_InCszKUR_Lw4RTK7DbGk_2FjP2
31
31
  lavavu/html/OK-min.js,sha256=mttgRf4CxbVBSBSW3wrONkUpRoznhOh9a0luh24UL70,39214
32
32
  lavavu/html/baseviewer.js,sha256=xCXHU7PqgUOV8JMSBPTurFkljzezRK682qAkpbFxJvc,9874
33
33
  lavavu/html/control.css,sha256=N73ydH9J7IWZsMyARGUPYIkc1Wp3ykCSsFJtJxTg3zw,3363
34
- lavavu/html/control.js,sha256=exeECH57Blntt4hrkN1RwcxB8Q01V9w-ptMqkRubZrg,11992
34
+ lavavu/html/control.js,sha256=3aVVmd_8gY-1jKy2-1CMfswi-BMWXRm7LtahxVzZeT0,12059
35
35
  lavavu/html/dat-gui-light-theme.css,sha256=ltfUmBSxso6IGcqkVxRwcGXRnxMDnuUjj3sSmyFyWLo,1210
36
36
  lavavu/html/dat.gui.min.js,sha256=orheAPn_tR1rCQK7KxVCXPmFYpqLT7MGTJ9tG_BsrQo,56993
37
37
  lavavu/html/draw.js,sha256=gcdGLddyYmuCMcflIPAFL6LsmOCHVbftd0gL_L9A3xA,86367
@@ -46,7 +46,7 @@ lavavu/html/server.js,sha256=WXuAnY6aE4h8vYs4U2sl4Xq5RjrkuDi-mIgM-x3Nkj0,7325
46
46
  lavavu/html/stats.min.js,sha256=q9kZjkwmWu8F8HV-4m2EfZRJXQBzyibceJoz-tDgB94,1970
47
47
  lavavu/html/styles.css,sha256=8JE8l7zcc0PV8CfOQpfDyhM226-Sq9eDLXvTCe-wSgw,3041
48
48
  lavavu/html/webview-template.html,sha256=E5w7pd91z0WL3244PQxDKMNZorWzoRT5G7wuBHXJc6Y,1573
49
- lavavu/html/webview.html,sha256=07nQPUnc0F-qN9be9gL30JQMgS9Sg5gvR6NvYm2g8OY,1564
49
+ lavavu/html/webview.html,sha256=-A_1oij-P7rI3Jz8Jx_QNQvWuPCJlLrBXTJ3VddAa4s,1564
50
50
  lavavu/osmesa/LavaVuPython.py,sha256=uTyBhkTp-Gcg468mS7EXZWxUU4TVtQ0R6D169CnMUZ0,33768
51
51
  lavavu/osmesa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  lavavu/shaders/default.frag,sha256=SHdqowe24zRNKnffZX7XilwD_I0NhVx9_rR04YJlLTE,194
@@ -58,12 +58,12 @@ lavavu/shaders/lineShader.vert,sha256=KpeKdUKStdL3_6WG9H4rCYU3oQ6qY1vWbhTaZnCb_F
58
58
  lavavu/shaders/pointShader.frag,sha256=ua2SDQMU6b9and4aM17TGqLtyEW4FhoqbQNPo41v3AY,3418
59
59
  lavavu/shaders/pointShader.vert,sha256=Mbit_gPM2jKiePIgpl2eRLiaY4brSIQ2WTDiJDMabZw,1213
60
60
  lavavu/shaders/triShader.frag,sha256=6VhNYBN5encmiE6jM-Y_titqCteTnL4AcefGprVDqxM,4754
61
- lavavu/shaders/triShader.vert,sha256=haljW2eQwyB24QWR1SURspU1z6ndskdZG7mrILfgXzo,1129
61
+ lavavu/shaders/triShader.vert,sha256=El7AdLI_XOTRRGYtQ2Wx56zNykZkz42PzpUH2n7KouM,1205
62
62
  lavavu/shaders/volumeShader.frag,sha256=6NeP_bgEl0SNOAjMxOWORhU62-TA9KyveDZ93mVtkKE,14594
63
63
  lavavu/shaders/volumeShader.vert,sha256=CroiEfEIe7pP66w14KwmKxfbTuKN6EuXYbZJvt_bfHk,83
64
- lavavu-1.9.6.dist-info/licenses/LICENSE.md,sha256=zHOh_qOPkfR76vdrTRP7J-BqPieAIWVDTl2ZP0SN6lQ,8782
65
- lavavu-1.9.6.dist-info/METADATA,sha256=8uElwm8qg73dYqmStSy5z9iZmmva_24pDWbLGy7dwzI,18200
66
- lavavu-1.9.6.dist-info/WHEEL,sha256=xtqxYTqke_XhXNhgwydvlroVayIzBVjJDMBpIgge99s,101
67
- lavavu-1.9.6.dist-info/entry_points.txt,sha256=LC2qXR6EMe45Cb7zGAF99R9HFrAECP6Qkp_YuG6HZB0,44
68
- lavavu-1.9.6.dist-info/top_level.txt,sha256=JptS0k1nlBumjLs_0hITr3_XUJhxqvKBXD2jGho3E3A,7
69
- lavavu-1.9.6.dist-info/RECORD,,
64
+ lavavu-1.9.8.dist-info/licenses/LICENSE.md,sha256=zHOh_qOPkfR76vdrTRP7J-BqPieAIWVDTl2ZP0SN6lQ,8782
65
+ lavavu-1.9.8.dist-info/METADATA,sha256=3NRNbDQxzw9LsPINirWELCmAKQq3tmJzClh9JWc5OUE,18200
66
+ lavavu-1.9.8.dist-info/WHEEL,sha256=KUuBC6lxAbHCKilKua8R9W_TM71_-9Sg5uEP3uDWcoU,101
67
+ lavavu-1.9.8.dist-info/entry_points.txt,sha256=LC2qXR6EMe45Cb7zGAF99R9HFrAECP6Qkp_YuG6HZB0,44
68
+ lavavu-1.9.8.dist-info/top_level.txt,sha256=JptS0k1nlBumjLs_0hITr3_XUJhxqvKBXD2jGho3E3A,7
69
+ lavavu-1.9.8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp310-cp310-win_amd64
5
5