pyvale 2025.4.1__py3-none-any.whl → 2025.5.1__py3-none-any.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 pyvale might be problematic. Click here for more details.

Files changed (126) hide show
  1. pyvale/__init__.py +18 -3
  2. pyvale/analyticmeshgen.py +1 -0
  3. pyvale/analyticsimdatafactory.py +18 -13
  4. pyvale/analyticsimdatagenerator.py +105 -72
  5. pyvale/blendercalibrationdata.py +15 -0
  6. pyvale/blenderlightdata.py +26 -0
  7. pyvale/blendermaterialdata.py +15 -0
  8. pyvale/blenderrenderdata.py +30 -0
  9. pyvale/blenderscene.py +488 -0
  10. pyvale/blendertools.py +420 -0
  11. pyvale/camera.py +6 -5
  12. pyvale/cameradata.py +25 -7
  13. pyvale/cameradata2d.py +6 -4
  14. pyvale/camerastereo.py +217 -0
  15. pyvale/cameratools.py +206 -11
  16. pyvale/cython/rastercyth.py +6 -2
  17. pyvale/data/cal_target.tiff +0 -0
  18. pyvale/dataset.py +73 -14
  19. pyvale/errorcalculator.py +8 -10
  20. pyvale/errordriftcalc.py +10 -9
  21. pyvale/errorintegrator.py +19 -21
  22. pyvale/errorrand.py +33 -39
  23. pyvale/errorsyscalib.py +134 -0
  24. pyvale/errorsysdep.py +19 -22
  25. pyvale/errorsysfield.py +49 -41
  26. pyvale/errorsysindep.py +79 -175
  27. pyvale/examples/basics/ex1_1_basicscalars_therm2d.py +131 -0
  28. pyvale/examples/basics/ex1_2_sensormodel_therm2d.py +158 -0
  29. pyvale/examples/basics/ex1_3_customsens_therm3d.py +216 -0
  30. pyvale/examples/basics/ex1_4_basicerrors_therm3d.py +153 -0
  31. pyvale/examples/basics/ex1_5_fielderrs_therm3d.py +168 -0
  32. pyvale/examples/basics/ex1_6_caliberrs_therm2d.py +133 -0
  33. pyvale/examples/basics/ex1_7_spatavg_therm2d.py +123 -0
  34. pyvale/examples/basics/ex2_1_basicvectors_disp2d.py +112 -0
  35. pyvale/examples/basics/ex2_2_vectorsens_disp2d.py +111 -0
  36. pyvale/examples/basics/ex2_3_sensangle_disp2d.py +139 -0
  37. pyvale/examples/basics/ex2_4_chainfielderrs_disp2d.py +196 -0
  38. pyvale/examples/basics/ex2_5_vectorfields3d_disp3d.py +109 -0
  39. pyvale/examples/basics/ex3_1_basictensors_strain2d.py +114 -0
  40. pyvale/examples/basics/ex3_2_tensorsens2d_strain2d.py +111 -0
  41. pyvale/examples/basics/ex3_3_tensorsens3d_strain3d.py +182 -0
  42. pyvale/examples/basics/ex4_1_expsim2d_thermmech2d.py +171 -0
  43. pyvale/examples/basics/ex4_2_expsim3d_thermmech3d.py +252 -0
  44. pyvale/examples/{analyticdatagen → genanalyticdata}/ex1_1_scalarvisualisation.py +6 -9
  45. pyvale/examples/{analyticdatagen → genanalyticdata}/ex1_2_scalarcasebuild.py +8 -11
  46. pyvale/examples/{analyticdatagen → genanalyticdata}/ex2_1_analyticsensors.py +9 -12
  47. pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py +8 -15
  48. pyvale/examples/renderblender/ex1_1_blenderscene.py +121 -0
  49. pyvale/examples/renderblender/ex1_2_blenderdeformed.py +119 -0
  50. pyvale/examples/renderblender/ex2_1_stereoscene.py +128 -0
  51. pyvale/examples/renderblender/ex2_2_stereodeformed.py +131 -0
  52. pyvale/examples/renderblender/ex3_1_blendercalibration.py +120 -0
  53. pyvale/examples/{rasterisation → renderrasterisation}/ex_rastenp.py +3 -2
  54. pyvale/examples/{rasterisation → renderrasterisation}/ex_rastercyth_oneframe.py +2 -2
  55. pyvale/examples/{rasterisation → renderrasterisation}/ex_rastercyth_static_cypara.py +3 -8
  56. pyvale/examples/{rasterisation → renderrasterisation}/ex_rastercyth_static_pypara.py +6 -7
  57. pyvale/examples/{ex1_4_thermal2d.py → visualisation/ex1_1_plot_traces.py} +32 -16
  58. pyvale/examples/{features/ex_animation_tools_3dmonoblock.py → visualisation/ex2_1_animate_sim.py} +37 -31
  59. pyvale/experimentsimulator.py +107 -30
  60. pyvale/field.py +2 -9
  61. pyvale/fieldconverter.py +98 -22
  62. pyvale/fieldsampler.py +2 -2
  63. pyvale/fieldscalar.py +10 -10
  64. pyvale/fieldtensor.py +15 -17
  65. pyvale/fieldtransform.py +7 -2
  66. pyvale/fieldvector.py +6 -7
  67. pyvale/generatorsrandom.py +25 -47
  68. pyvale/imagedef2d.py +6 -2
  69. pyvale/integratorfactory.py +2 -2
  70. pyvale/integratorquadrature.py +50 -24
  71. pyvale/integratorrectangle.py +85 -7
  72. pyvale/integratorspatial.py +4 -4
  73. pyvale/integratortype.py +3 -3
  74. pyvale/output.py +17 -0
  75. pyvale/pyvaleexceptions.py +11 -0
  76. pyvale/raster.py +6 -5
  77. pyvale/rastercy.py +6 -4
  78. pyvale/rasternp.py +6 -4
  79. pyvale/rendermesh.py +6 -2
  80. pyvale/sensorarray.py +2 -2
  81. pyvale/sensorarrayfactory.py +52 -65
  82. pyvale/sensorarraypoint.py +29 -30
  83. pyvale/sensordata.py +2 -2
  84. pyvale/sensordescriptor.py +138 -25
  85. pyvale/sensortools.py +3 -3
  86. pyvale/simtools.py +67 -0
  87. pyvale/visualexpplotter.py +99 -57
  88. pyvale/visualimagedef.py +11 -7
  89. pyvale/visualimages.py +6 -4
  90. pyvale/visualopts.py +372 -58
  91. pyvale/visualsimanimator.py +42 -13
  92. pyvale/visualsimsensors.py +318 -0
  93. pyvale/visualtools.py +69 -13
  94. pyvale/visualtraceplotter.py +52 -165
  95. {pyvale-2025.4.1.dist-info → pyvale-2025.5.1.dist-info}/METADATA +17 -14
  96. pyvale-2025.5.1.dist-info/RECORD +172 -0
  97. {pyvale-2025.4.1.dist-info → pyvale-2025.5.1.dist-info}/WHEEL +1 -1
  98. pyvale/examples/analyticdatagen/__init__.py +0 -5
  99. pyvale/examples/ex1_1_thermal2d.py +0 -86
  100. pyvale/examples/ex1_2_thermal2d.py +0 -108
  101. pyvale/examples/ex1_3_thermal2d.py +0 -110
  102. pyvale/examples/ex1_5_thermal2d.py +0 -102
  103. pyvale/examples/ex2_1_thermal3d .py +0 -84
  104. pyvale/examples/ex2_2_thermal3d.py +0 -51
  105. pyvale/examples/ex2_3_thermal3d.py +0 -106
  106. pyvale/examples/ex3_1_displacement2d.py +0 -44
  107. pyvale/examples/ex3_2_displacement2d.py +0 -76
  108. pyvale/examples/ex3_3_displacement2d.py +0 -101
  109. pyvale/examples/ex3_4_displacement2d.py +0 -102
  110. pyvale/examples/ex4_1_strain2d.py +0 -54
  111. pyvale/examples/ex4_2_strain2d.py +0 -76
  112. pyvale/examples/ex4_3_strain2d.py +0 -97
  113. pyvale/examples/ex5_1_multiphysics2d.py +0 -75
  114. pyvale/examples/ex6_1_multiphysics2d_expsim.py +0 -115
  115. pyvale/examples/ex6_2_multiphysics3d_expsim.py +0 -160
  116. pyvale/examples/features/__init__.py +0 -5
  117. pyvale/examples/features/ex_area_avg.py +0 -89
  118. pyvale/examples/features/ex_calibration_error.py +0 -108
  119. pyvale/examples/features/ex_chain_field_errs.py +0 -141
  120. pyvale/examples/features/ex_field_errs.py +0 -78
  121. pyvale/examples/features/ex_sensor_single_angle_batch.py +0 -110
  122. pyvale/optimcheckfuncs.py +0 -153
  123. pyvale/visualsimplotter.py +0 -182
  124. pyvale-2025.4.1.dist-info/RECORD +0 -163
  125. {pyvale-2025.4.1.dist-info → pyvale-2025.5.1.dist-info}/licenses/LICENSE +0 -0
  126. {pyvale-2025.4.1.dist-info → pyvale-2025.5.1.dist-info}/top_level.txt +0 -0
pyvale/optimcheckfuncs.py DELETED
@@ -1,153 +0,0 @@
1
- """
2
- OPTIMISATION TEST FUNCTIONS - N DIMS
3
- https://gist.github.com/denis-bz/da697d8bc74fae4598bf
4
- https://www.sfu.ca/~ssurjano/optimization.html
5
- https://en.wikipedia.org/wiki/Test_functions_for_optimization
6
- """
7
- from typing import Callable,Any
8
- import numpy as np
9
- import matplotlib.pyplot as plt
10
- from pyvale.visualopts import PlotOptsGeneral
11
-
12
-
13
- def ackley(x: np.ndarray,
14
- a: float = 20.0,
15
- b: float = 0.2,
16
- c: float = 2*np.pi) -> np.ndarray:
17
- """ACKLEY
18
- Dimension: N
19
- Local Minima: many
20
- Global Minimum: f(x) = 0 @ (0,0,....,0)
21
- Eval: [-32.768,32.768] or smaller
22
- """
23
- n = x.shape[1]
24
- sum1 = np.sum(x**2,axis=1)
25
- sum2 = np.sum(np.cos(c*x),axis=1)
26
- f = -a*np.exp(-b*np.sqrt(sum1/n)) - np.exp(sum2/n) + a + np.exp(1)
27
- return f
28
-
29
-
30
- def dixonprice(x: np.ndarray) -> np.ndarray:
31
- """DIXON-PRICE
32
- Dimension: N
33
- Local Minima: Large valley
34
- Global Minimum: f(x) = 0 @ x_i = 2^-((2^i-2)/2^i) for i = 1,...,d
35
- Eval: [-10.0,10.0] or smaller
36
- """
37
- n = x.shape[1]
38
- j = np.arange( 2, n+1 )
39
- x2 = 2 * x**2
40
- f = np.sum( j * (x2[:,1:] - x[:,:-1]) **2, axis=1) + (x[:,0] - 1) **2
41
- return f
42
-
43
-
44
- def griewank(x: np.ndarray, div: float = 4000.0) -> np.ndarray:
45
- """GRIEWANK
46
- Dimension: N
47
- Local Minima: many
48
- Global Minimum: f(x) = 0 @ (0,0,....,0)
49
- Eval: [-600,600] or smaller
50
- """
51
- n = x.shape[1]
52
- j = np.arange( 1., n+1 )
53
- sum1 = np.sum( x**2, axis=1 )
54
- p = np.prod( np.cos( x / np.sqrt(j) ), axis=1)
55
- f = sum1/div - p + 1
56
- return f
57
-
58
-
59
- def rastrigin(x: np.ndarray, a: float = 10) -> np.ndarray:
60
- """RASTRIGIN
61
- Dimension: N
62
- Local Minima: many
63
- Global Minimum: f(x) = 0 @ (0,0,....,0)
64
- Eval: [-5.12,5.12] or smaller
65
- """
66
- n = x.shape[1]
67
- sum1 = np.sum(x**2 - a*np.cos(2*np.pi*x),axis=1)
68
- f = a*n + sum1
69
- return f
70
-
71
-
72
- def rosenbrock(x: np.ndarray, a: float = 100) -> float:
73
- """ROSENBROCK
74
- Dimension: N
75
- Local Minima: Large valley
76
- Global minimum: at (x,y) = (1,1) where f(x,y)=0
77
- Eval: [-5.0,10.0] or smaller
78
- """
79
- x0 = x[:,:-1] # x_(i) ... to n-1
80
- x1 = x[:,1:] # x_(i+1) ... to n-1
81
- f = a*np.sum((x1-x0**2)**2,axis=1) + np.sum((1-x0)**2, axis=1)
82
- return f
83
-
84
-
85
- def sphere(x: np.ndarray) -> np.ndarray:
86
- """SPHERE
87
- Dimension: N
88
- Local Minima: none
89
- Global minimum: f(x) = 0 @ (0,0,....,0)
90
- Eval: [-inf,inf] or smaller
91
- """
92
- f = np.sum(x**2,axis=1)
93
- return f
94
-
95
-
96
- def get_mesh_x_2d(xlim1: tuple[float,float],
97
- xlim2: tuple[float,float],
98
- n: int = 100):
99
- xv1 = np.linspace(xlim1[0],xlim1[1],n)
100
- xv2 = np.linspace(xlim2[0],xlim2[1],n)
101
- (xm1,xm2) = np.meshgrid(xv1,xv2)
102
- return (xm1,xm2)
103
-
104
-
105
- def get_flat_x_2d(xlim1: tuple[float,float],
106
- xlim2: tuple[float,float],
107
- n: int = 100) -> np.ndarray:
108
-
109
- (xm1,xm2) = get_mesh_x_2d(xlim1,xlim2,n)
110
- xf1 = xm1.flatten()
111
- xf2 = xm2.flatten()
112
- return np.column_stack((xf1,xf2))
113
-
114
-
115
- def f_mesh_2d(fun: Callable,
116
- xlim1: tuple[float,float],
117
- xlim2: tuple[float,float],
118
- n: int = 100) -> np.ndarray:
119
-
120
- (xm1,_) = get_mesh_x_2d(xlim1,xlim2,n)
121
- xf = get_flat_x_2d(xlim1,xlim2,n)
122
- f_flat = fun(xf)
123
- f_mesh = f_flat.reshape(xm1.shape)
124
-
125
- return f_mesh
126
-
127
-
128
- def plot_fun_2d(tStr: str,
129
- fun: Callable,
130
- xlim1: tuple[float,float],
131
- xlim2: tuple[float,float],
132
- n: int =100) -> tuple[Any,Any]:
133
-
134
- (xm1,xm2) = get_mesh_x_2d(xlim1,xlim2,n)
135
- f_mesh = f_mesh_2d(fun,xlim1,xlim2,n)
136
- # Plot the function
137
- pp = PlotOptsGeneral()
138
- fig, ax = plt.subplots(figsize=pp.single_fig_size_square,
139
- layout="constrained")
140
- fig.set_dpi(pp.resolution)
141
-
142
- plt.contourf(xm1, xm2, f_mesh, 20, cmap=pp.cmap_seq)
143
-
144
- plt.colorbar()
145
- plt.title(tStr,fontsize=pp.font_head_size,fontname=pp.font_name)
146
- plt.xlabel("x1",fontsize=pp.font_ax_size,fontname=pp.font_name)
147
- plt.ylabel("x2",fontsize=pp.font_ax_size,fontname=pp.font_name)
148
-
149
- #plt.show()
150
- #plt.savefig(save_path+save_name, dpi=pp.resolution, format="png", bbox_inches="tight")
151
- return fig,ax
152
-
153
-
@@ -1,182 +0,0 @@
1
- # ================================================================================
2
- # pyvale: the python validation engine
3
- # License: MIT
4
- # Copyright (C) 2025 The Computer Aided Validation Team
5
- # ================================================================================
6
-
7
- # import vtk #NOTE: has to be here to fix latex bug in pyvista/vtk
8
- # See: https://github.com/pyvista/pyvista/discussions/2928
9
- #NOTE: causes output to console to be suppressed unfortunately
10
- import pyvista as pv
11
-
12
- import mooseherder as mh
13
-
14
- from pyvale.sensorarraypoint import SensorArrayPoint
15
- from pyvale.fieldconverter import simdata_to_pyvista
16
- from pyvale.visualopts import (VisOptsSimSensors,VisOptsImageSave)
17
- from pyvale.visualtools import (create_pv_plotter,
18
- get_colour_lims,
19
- save_image)
20
-
21
-
22
- #TODO: Docstrings
23
-
24
- def add_sim_field(pv_plot: pv.Plotter,
25
- sensor_array: SensorArrayPoint,
26
- component: str,
27
- time_step: int,
28
- vis_opts: VisOptsSimSensors,
29
- ) -> tuple[pv.Plotter,pv.UnstructuredGrid]:
30
-
31
- sim_vis = sensor_array.field.get_visualiser()
32
- sim_data = sensor_array.field.get_sim_data()
33
- sim_vis[component] = sim_data.node_vars[component][:,time_step]
34
- comp_ind = sensor_array.field.get_component_index(component)
35
-
36
- scalar_bar_args = {"title":sensor_array.descriptor.create_label(comp_ind),
37
- "vertical":vis_opts.colour_bar_vertical,
38
- "title_font_size":vis_opts.colour_bar_font_size,
39
- "label_font_size":vis_opts.colour_bar_font_size}
40
-
41
- pv_plot.add_mesh(sim_vis,
42
- scalars=component,
43
- label="sim-data",
44
- show_edges=vis_opts.show_edges,
45
- show_scalar_bar=vis_opts.colour_bar_show,
46
- scalar_bar_args=scalar_bar_args,
47
- lighting=False,
48
- clim=vis_opts.colour_bar_lims)
49
-
50
- if vis_opts.time_label_show:
51
- pv_plot.add_text(f"Time: {sim_data.time[time_step]} " + \
52
- f"{sensor_array.descriptor.time_units}",
53
- position=vis_opts.time_label_position,
54
- font_size=vis_opts.time_label_font_size,
55
- name='time-label')
56
-
57
- return (pv_plot,sim_vis)
58
-
59
-
60
- def add_sensor_points_nom(pv_plot: pv.Plotter,
61
- sensor_array: SensorArrayPoint,
62
- vis_opts: VisOptsSimSensors,
63
- ) -> pv.Plotter:
64
-
65
- vis_sens_nominal = pv.PolyData(sensor_array.sensor_data.positions)
66
- vis_sens_nominal["labels"] = sensor_array.descriptor.create_sensor_tags(
67
- sensor_array.get_measurement_shape()[0])
68
-
69
- # Add points to show sensor locations
70
- pv_plot.add_point_labels(vis_sens_nominal,"labels",
71
- font_size=vis_opts.sens_label_font_size,
72
- shape_color=vis_opts.sens_label_colour,
73
- point_color=vis_opts.sens_colour_nom,
74
- render_points_as_spheres=True,
75
- point_size=vis_opts.sens_point_size,
76
- always_visible=True)
77
-
78
- return pv_plot
79
-
80
-
81
- def add_sensor_points_pert(pv_plot: pv.Plotter,
82
- sensor_array: SensorArrayPoint,
83
- vis_opts: VisOptsSimSensors,
84
- ) -> pv.Plotter:
85
-
86
- sens_data_perturbed = sensor_array.get_sensor_data_perturbed()
87
-
88
- if sens_data_perturbed is not None and vis_opts.show_perturbed_pos:
89
- vis_sens_perturbed = pv.PolyData(sens_data_perturbed.positions)
90
- vis_sens_perturbed["labels"] = ["",]*sensor_array.get_measurement_shape()[0]
91
-
92
- pv_plot.add_point_labels(vis_sens_perturbed,"labels",
93
- font_size=vis_opts.sens_label_font_size,
94
- shape_color=vis_opts.sens_label_colour,
95
- point_color=vis_opts.sens_colour_pert,
96
- render_points_as_spheres=True,
97
- point_size=vis_opts.sens_point_size,
98
- always_visible=True)
99
-
100
- return pv_plot
101
-
102
-
103
- def plot_sim_mesh(sim_data: mh.SimData,
104
- elem_dims: int,
105
- vis_opts: VisOptsSimSensors | None = None,
106
- ) -> pv.Plotter:
107
-
108
- if vis_opts is None:
109
- vis_opts = VisOptsSimSensors()
110
-
111
- (_,sim_vis) = simdata_to_pyvista(sim_data=sim_data,
112
- components=None,
113
- elem_dims=elem_dims)
114
-
115
- pv_plot = create_pv_plotter(vis_opts)
116
- pv_plot.add_mesh(sim_vis,
117
- label="sim-data",
118
- show_edges=vis_opts.show_edges,
119
- lighting=False)
120
- return pv_plot
121
-
122
-
123
- def plot_sim_data(sim_data: mh.SimData,
124
- component: str,
125
- elem_dims: int,
126
- time_step: int = -1,
127
- vis_opts: VisOptsSimSensors | None = None
128
- ) -> pv.Plotter:
129
-
130
- if vis_opts is None:
131
- vis_opts = VisOptsSimSensors()
132
-
133
- (_,sim_vis) = simdata_to_pyvista(sim_data,
134
- (component,),
135
- elem_dims)
136
-
137
- sim_vis[component] = sim_data.node_vars[component][:,time_step]
138
-
139
- pv_plot = create_pv_plotter(vis_opts)
140
- pv_plot.add_mesh(sim_vis,
141
- scalars=component,
142
- label="sim-data",
143
- show_edges=vis_opts.show_edges,
144
- show_scalar_bar=vis_opts.colour_bar_show,
145
- lighting=False,
146
- clim=vis_opts.colour_bar_lims)
147
-
148
- return pv_plot
149
-
150
-
151
- def plot_point_sensors_on_sim(sensor_array: SensorArrayPoint,
152
- component: str,
153
- time_step: int = -1,
154
- vis_opts: VisOptsSimSensors | None = None,
155
- image_save_opts: VisOptsImageSave | None = None,
156
- ) -> pv.Plotter:
157
-
158
- if vis_opts is None:
159
- vis_opts = VisOptsSimSensors()
160
-
161
- sim_data = sensor_array.field.get_sim_data()
162
- vis_opts.colour_bar_lims = get_colour_lims(
163
- sim_data.node_vars[component][:,time_step],
164
- vis_opts.colour_bar_lims)
165
-
166
- pv_plot = create_pv_plotter(vis_opts)
167
-
168
- pv_plot = add_sensor_points_pert(pv_plot,sensor_array,vis_opts)
169
- pv_plot = add_sensor_points_nom(pv_plot,sensor_array,vis_opts)
170
- (pv_plot,_) = add_sim_field(pv_plot,
171
- sensor_array,
172
- component,
173
- time_step,
174
- vis_opts)
175
-
176
- pv_plot.camera_position = vis_opts.camera_position
177
-
178
- if image_save_opts is not None:
179
- save_image(pv_plot,image_save_opts)
180
-
181
- return pv_plot
182
-
@@ -1,163 +0,0 @@
1
- pyvale/__init__.py,sha256=URV7AtTezLI19PJv359Pajs-TXEtZoQVG0xB8S1uabQ,2425
2
- pyvale/analyticmeshgen.py,sha256=Mps6YwpM7PACKIIqsZMb9XQ8N8hLde1Xl9FUqgA--kU,3423
3
- pyvale/analyticsimdatafactory.py,sha256=NIg3VysG-C2V0Eu86mVQbA75kuwaPVL9d7TlDiZkQFs,2590
4
- pyvale/analyticsimdatagenerator.py,sha256=1T7RUIgHF8qDXVdz_jfgmoD0qClddD5mwwtVhqkwSXE,9998
5
- pyvale/camera.py,sha256=HaOqqYeItbTGKZ-f50Lqt-U04rjwrMmuZDy5PAsShSM,5330
6
- pyvale/cameradata.py,sha256=Ury4ARaD3AfAgaxUqz0XLC-rdQojj8PUH1xImZ04zkc,1525
7
- pyvale/cameradata2d.py,sha256=nOlxNP87mqGbXLbULn7ZiZJFT_zHapRkqnrmitVkG4w,2734
8
- pyvale/cameratools.py,sha256=EahFPfv54Yssj8kfgT8ZIhdOYu92MFZFh7VPMs8KlaI,13495
9
- pyvale/dataset.py,sha256=l0tDa8TQebMyU7BVUk5X34ok73jWuLF402jlN_Mc04Q,10055
10
- pyvale/errorcalculator.py,sha256=jdAfbPx92rWuTjKcjTB-I4inIq83QpSs7BS9CNrXWiw,3495
11
- pyvale/errordriftcalc.py,sha256=euhCEgbiesRiJ87UHNT5ZVB8p8_grAIwrdwd3bfTuUw,4477
12
- pyvale/errorintegrator.py,sha256=iQigDo9qNEHlGLwpW9WrVxgZlYlimeIKb-E45u6kNow,14096
13
- pyvale/errorrand.py,sha256=P793R9RbORCgz08qPsy-9iL8EthCiV-4d7Ql736RbXw,22655
14
- pyvale/errorsysdep.py,sha256=uEY1J-sqrotKhXJahUkjOv1WhELah5Tf4gGFdTn3K0o,11809
15
- pyvale/errorsysfield.py,sha256=Sf-CW4Vj1jF5vs2AB962NxPdKX60xHR5Ycbcsn4yWlo,16767
16
- pyvale/errorsysindep.py,sha256=4ySd2uvJ8CF0_82XYDkindGeq260rDGYrS8qwwF4nFU,33976
17
- pyvale/experimentsimulator.py,sha256=ZN4WO2vDaGv8HcDl0II922WU_y4wPdP5kga7l2KVJ8k,3577
18
- pyvale/field.py,sha256=6Iyn_xOghF0KaCfZjOEtCcOmHtb5x_yB-_zfhc6bZOw,4627
19
- pyvale/fieldconverter.py,sha256=blFRVH1sidiSbd-EY3mSBO5_Q13_W_0BtulAW_G877I,10173
20
- pyvale/fieldsampler.py,sha256=Euadjj1-ZGUqdRPBK3iQ_2T5QNna7zTWgD_gGO42_hg,4447
21
- pyvale/fieldscalar.py,sha256=QMf7iPFTRBCo8esSw2GwOGHo5iKSKqOlVQBWiD9wYdU,5958
22
- pyvale/fieldtensor.py,sha256=wdwAiEXJ8nB87kRLd6hAyIcQnAQvEihuD66aO3feDSk,8259
23
- pyvale/fieldtransform.py,sha256=bRmTG-vcyGnKoU7rhvqckrZhHrGjOKbScd9d4Uw2u74,17866
24
- pyvale/fieldvector.py,sha256=fmDJMLFJIm6HnYWM485hIJrcs8oknjs1GubDnqO_77g,7971
25
- pyvale/generatorsrandom.py,sha256=qjTBa0IkPXrplK1b1wNUu09rTD-z79xBO-P0iO0RMbI,18396
26
- pyvale/imagedef2d.py,sha256=wYl96CRK6jjekRAbkSOInaVeQjdfUwNRwqHIyj2fvdU,25061
27
- pyvale/integratorfactory.py,sha256=aCUvTf5h09zwKufE2-QTuZToL3HXZ__kKuxkMTulgkA,9624
28
- pyvale/integratorquadrature.py,sha256=JohyvmFn4iYehoIOkQRFcU9St3QJ8n1Jbua4PJ-Meo8,6697
29
- pyvale/integratorrectangle.py,sha256=DRW2i10kpkhUnq6ung5atNnabLoCXnMcXQiA0BehXNA,2939
30
- pyvale/integratorspatial.py,sha256=NCYxE-qPZTxqV9JckV_I7SGGMoPGKlRs3-6YM4JEpXM,3223
31
- pyvale/integratortype.py,sha256=5_l9k9_TId_2KvPqbmrCfzHOEi3sj-IDAfW6ytpDnAo,1308
32
- pyvale/optimcheckfuncs.py,sha256=OPrKXweEgdAuVCUHW3ObrM0Kqf4raq4MsWOeTAwkQ6o,4191
33
- pyvale/raster.py,sha256=tZNEkUV8Fpasl_65DPgVb_kcgC_LFLt45xo1E42ccBY,787
34
- pyvale/rastercy.py,sha256=QYOcXlmFVpUVaSx_9hCUViXvI8dwS-LsXdlJkso59W4,2879
35
- pyvale/rasternp.py,sha256=IWs4qRaZ9kFza5o74j41oQpK5_vqZb5I8RxX8Iro8ik,25991
36
- pyvale/rendermesh.py,sha256=D7WL8-7E_g-SpbnZb9uX1nFiCLMiMP9IeGJUR_OdF1o,5358
37
- pyvale/sensorarray.py,sha256=lmdei0U4psrBHKkg8-RbZLFGaCufZct8e61bJj-IUXA,7023
38
- pyvale/sensorarrayfactory.py,sha256=cmZHipCZIvKE1Y9I_f2vGReP5zRmNS1gnev2VMOhhXE,8311
39
- pyvale/sensorarraypoint.py,sha256=Tk_FOdCPxR_1eMEo8rAvTbzwqLpP94z8tm2f7dd1OYc,11236
40
- pyvale/sensordata.py,sha256=iQLc9UTuFyMiXgsOg1C9VZORI25t7SGl-HMm132aw_8,2768
41
- pyvale/sensordescriptor.py,sha256=IiHLWJ6C6A7pRA_weruQkO366cu2kBFMTuqqQ6XOSHw,2963
42
- pyvale/sensortools.py,sha256=xWfQCkMYEGYKzJ0sxhIsjn7jPb2pylLkJYAwoStzKOc,5735
43
- pyvale/visualexpplotter.py,sha256=4tHyoLJ5x6BIJbk41tAiMkmTUjCoKVj1bcI6FhMeCjs,6021
44
- pyvale/visualimagedef.py,sha256=ZZ115m9egh2TnpwC3_mLFZDvIaSBucRdyhAUY8ZuH3k,2735
45
- pyvale/visualimages.py,sha256=AvGeek7XTy_C6zZg1WS0ulCdyIonIoIBA5fiRlhXrL4,2847
46
- pyvale/visualopts.py,sha256=REvKhXpHQVOR8y5Yn7qjOmlshBMygOMHVvJZsTr-o8E,4733
47
- pyvale/visualsimanimator.py,sha256=mU3gjdFmxwPMAg3jFY2wcmpbcvN2zm5rcZ0xPeEgqus,3208
48
- pyvale/visualsimplotter.py,sha256=Kr3aPWFVouADqDXFF_LXg21lNlTOjYJYbR1HiArI0Sw,6994
49
- pyvale/visualtools.py,sha256=GYZAqL4ZkTfdSRzwm9DYuTEp4TA37AWklQMOFFIDShM,2981
50
- pyvale/visualtraceplotter.py,sha256=_ExBVx8L9EqIsDGcofGS5axSpzAX4mSWjOh2MrRUuWk,10499
51
- pyvale/cython/rastercyth.py,sha256=rYteBnFIrUyB6jAmUQTv96i02AT42y_0ELDaakAjPEs,24423
52
- pyvale/data/__init__.py,sha256=h1zJBQZxFSPPUksp_ErTC1uTQLdSmoc-ry3D_naPKYE,271
53
- pyvale/data/case00_HEX20_out.e,sha256=wTdEWvGyQBhP1D1bIy5YZKu7I_QISWLEjl9K9VOOnbI,241172
54
- pyvale/data/case00_HEX27_out.e,sha256=XF1nLiBQcCJuZ4bXi8FUG3hbj5hpnno4by_hdyTVm4I,316644
55
- pyvale/data/case00_HEX8_out.e,sha256=V52yZoQ4egI6v6JVkmA8DUVX6Q0K3AEWG8U3BbGHzSg,148268
56
- pyvale/data/case00_TET10_out.e,sha256=eoIiAiQ5yLgiH2S01eMQRyHWGLfplnIAk6MPPcqEoPs,214036
57
- pyvale/data/case00_TET14_out.e,sha256=t9s7WCV6gUlZfNcaj9q4_U7Sct9v9F77NQ0KU596GGk,316996
58
- pyvale/data/case00_TET4_out.e,sha256=coeIyrkviOfgpgYauenoXldWnYulKgteOts6FolKYBM,127868
59
- pyvale/data/case13_out.e,sha256=cqgs7TbyDtrlV4AxXUzULa0Qu50gbp_3VeQkehNT82g,150820
60
- pyvale/data/case16_out.e,sha256=hmkiJQo4phaAPiEa9mgjggcUMn_yY2h348DSqMIj0pA,11614464
61
- pyvale/data/case17_out.e,sha256=C5Zx0Xx8_iZqypPFbcutGPQtO5VNQaJmqg9YxWi0FHc,6095004
62
- pyvale/data/case18_1_out.e,sha256=4ITunHIxCBCekUPipSv8j7IKDlhlwTaHe1e3wTN4qLE,1470776
63
- pyvale/data/case18_2_out.e,sha256=Uz8U1TMBSe1YkRE4nRFMQ38Y11UQo9wb1cIbTRPua1Y,1470776
64
- pyvale/data/case18_3_out.e,sha256=8dTnKLQOSCL-gle-1shL68GBQPW1go05aDvjO6AawAg,1470776
65
- pyvale/data/case25_out.e,sha256=LWnCKG7GDUvzCs7GI1h25dhIhq6_qJgXnkhiTmdynPw,93748
66
- pyvale/data/case26_out.e,sha256=UAoxPN0K1bbk9R0r2hDehuQZVCPHcAV5NA1PckRyXDY,225744
67
- pyvale/data/optspeckle_2464x2056px_spec5px_8bit_gblur1px.tiff,sha256=cRmbiTzxc8QJ_aO9dc7YT21lV1c9K7pH-L9uQZvUQ8M,5046422
68
- pyvale/examples/__init__.py,sha256=h1zJBQZxFSPPUksp_ErTC1uTQLdSmoc-ry3D_naPKYE,271
69
- pyvale/examples/ex1_1_thermal2d.py,sha256=U9Ga08R5Z4o6VbSdRdAG9gdoWkyD0fLrhaAIlCJimnk,3372
70
- pyvale/examples/ex1_2_thermal2d.py,sha256=umgsT2sh6CRoVIyyqF-jWG__MZhG5PmZLbjSFg-8U5s,3897
71
- pyvale/examples/ex1_3_thermal2d.py,sha256=haIYN-u8XNlCIxt06mTHmDk1IWqYB_ZmpXKybWgsmFE,4023
72
- pyvale/examples/ex1_4_thermal2d.py,sha256=9SJTSuvDDjBr5zVe1aeH-iNNk6pyrjg7KmZg2BpTZeI,3050
73
- pyvale/examples/ex1_5_thermal2d.py,sha256=kzdxuMa-0lev9FYMreWQOt2a5ePThXWrs81_Vh8KViA,3929
74
- pyvale/examples/ex2_1_thermal3d .py,sha256=_DX-obv_bBb3dTDvVbC-Lbs6q8pwzmz09KtULUyuGkk,3260
75
- pyvale/examples/ex2_2_thermal3d.py,sha256=1oH4xmFo-6hpBka0wCzVzr1x7G2XgYRbn_ndhMnAgEY,1674
76
- pyvale/examples/ex2_3_thermal3d.py,sha256=g4GbSrImy7vpVfdJ_VJwJmqNY443R8msobulBg4rT68,3521
77
- pyvale/examples/ex3_1_displacement2d.py,sha256=iaHMNmv2sKtsr8QXZQMJxGTq4C-s1wBIpa-anYLOZmY,1577
78
- pyvale/examples/ex3_2_displacement2d.py,sha256=CDIEkUu_Oo_T3BQzBsOG2dXoV9fexU9hBJxLjO5_84U,2594
79
- pyvale/examples/ex3_3_displacement2d.py,sha256=VhkjdBdN58KboR9P3ozaVAmJ4oc7hvnY1CtQ4J-3VBE,3607
80
- pyvale/examples/ex3_4_displacement2d.py,sha256=QxQC-KVuSIbFn0A5r3EpBRNUdUGyWqBrLE9penD6gS0,3949
81
- pyvale/examples/ex4_1_strain2d.py,sha256=5U7AsUAvUm6QRHrAp9IGVeXl76Z8ZhkUXmPfgA3AK1M,1897
82
- pyvale/examples/ex4_2_strain2d.py,sha256=d2pD4V603vhsf1tjUSf6t60ErJ8qt8UokD_uGBs6MnA,2699
83
- pyvale/examples/ex4_3_strain2d.py,sha256=Tl1lwUyptY44cBwJx3FJHUWwAphlusYOj7_WMS7dQzE,3482
84
- pyvale/examples/ex5_1_multiphysics2d.py,sha256=cI2YxiAQ41YH_CuBe7GAGurGst0BtFFSmixl0-jeG_Y,2787
85
- pyvale/examples/ex6_1_multiphysics2d_expsim.py,sha256=TwXd2WjmKhWFAIgCuvXpUiNUIMvgiTAfjXA5ZZZbTHI,4284
86
- pyvale/examples/ex6_2_multiphysics3d_expsim.py,sha256=_pR_8sEJuAEeKJEMmGHuEkPwbqvHve9ZOJh5fa965-M,5958
87
- pyvale/examples/analyticdatagen/__init__.py,sha256=h1zJBQZxFSPPUksp_ErTC1uTQLdSmoc-ry3D_naPKYE,271
88
- pyvale/examples/analyticdatagen/ex1_1_scalarvisualisation.py,sha256=X8OaNz1bYSiFVj7AZP1u8w7r0T0yTST8C5gHpzf1nE4,973
89
- pyvale/examples/analyticdatagen/ex1_2_scalarcasebuild.py,sha256=iXY9wqoBUCaDwkLH1zMahxefsvX3TBbPjSrPGYUiuGQ,1317
90
- pyvale/examples/analyticdatagen/ex2_1_analyticsensors.py,sha256=ln5U4g7XP-oLvtoAhAH_ombM01czEiPeG6pmzGVpyTc,2889
91
- pyvale/examples/features/__init__.py,sha256=h1zJBQZxFSPPUksp_ErTC1uTQLdSmoc-ry3D_naPKYE,271
92
- pyvale/examples/features/ex_animation_tools_3dmonoblock.py,sha256=4gNCiX831iankXOZrf_uji4iciRryhiFcaBUUSArvGc,2940
93
- pyvale/examples/features/ex_area_avg.py,sha256=rNuwLwQwEikZ9Hz8i2AQPqsN8EY8mOTi73f8LDEgCf8,3110
94
- pyvale/examples/features/ex_calibration_error.py,sha256=CoB2HulJ68XH7K1p6sQSCjKzRsjlUspcu2ELijvB3f8,3566
95
- pyvale/examples/features/ex_chain_field_errs.py,sha256=BfkwFm9u8iZQfqtmvdZB7qMZzSTexvsKOkxkDREhf1M,4993
96
- pyvale/examples/features/ex_field_errs.py,sha256=80w8GOpMS_NXay9XinNCx5XsPqwzPVzFWZJRZXm2Iq4,2762
97
- pyvale/examples/features/ex_sensor_single_angle_batch.py,sha256=oiLKI46PBpluJXRBC9TUaEm709Wknqv-o0To1tY--tc,4295
98
- pyvale/examples/imagedef2d/ex_imagedef2d_todisk.py,sha256=zA5EE_hq1ZeZijV6mpppqp14tH1VCjgo6m1MHVH2k2k,3039
99
- pyvale/examples/rasterisation/ex_rastenp.py,sha256=1GJz5IO36fE6K8tREO6fGXd1CzYMcvBLfL946Q0CPes,4847
100
- pyvale/examples/rasterisation/ex_rastercyth_oneframe.py,sha256=6iJxYQF714B9RQklkBT1dyHa6AGbhRIQmJhlsyOYVlg,7437
101
- pyvale/examples/rasterisation/ex_rastercyth_static_cypara.py,sha256=NGvt9tRspYtsbILN7eqsQAsVBDKGFKa93rdmOwX2XtE,6951
102
- pyvale/examples/rasterisation/ex_rastercyth_static_pypara.py,sha256=f7hjUpZF26k_dNsF6IWzWdfFtDSNWK7jH4vCD0qTuEY,6929
103
- pyvale/simcases/case00_HEX20.i,sha256=UiKSQOGgAQwS3cWLxSMVixmp-1RzpZS3nKxVaIgWWKg,5149
104
- pyvale/simcases/case00_HEX27.i,sha256=MJ3jXHf8hDQP-Y3Ew9FU3EAnD-7E4l8C4QjdeAoRrFc,5149
105
- pyvale/simcases/case00_HEX8.i,sha256=R4NiWVjoyG8_y6Hhh_I_QySYzbEQ70QuiD0I4auA4Bc,5159
106
- pyvale/simcases/case00_TET10.i,sha256=ijpTfoLb7ucLdgLyV7LimdIEnB3lLfykM_QJxAs2B9Q,5149
107
- pyvale/simcases/case00_TET14.i,sha256=PlMC60P6prgpqCOSWAgU5VZ_0g_2WTxtQUYbAM2EaWk,5149
108
- pyvale/simcases/case00_TET4.i,sha256=Ot9VqNO0s2RVWVmGqLcFcZ0dg9E3Z00BhfYFsOQkiKE,5159
109
- pyvale/simcases/case01.i,sha256=R6t_uui6DywA1m5HLt4EsdkGDzobpGrfxBrfIY-5YiI,2184
110
- pyvale/simcases/case02.i,sha256=gOPdUDVDnMUgqevcRO7vT5HnXTY64a7rmugSgkUqQ0s,3406
111
- pyvale/simcases/case03.i,sha256=6LkfehTSTXuJ390mdn6tYp2Tkgo15KVpGmFmBrHo-AA,2848
112
- pyvale/simcases/case04.i,sha256=Ao5z2qey2eJrqW1TmCm6LZRDeTwPTOFtMNPocH4zQO4,3757
113
- pyvale/simcases/case05.i,sha256=VO2D38xsUrZmEMuEJF6JzjF_InpGAdrf9y_5FhvvvDw,5959
114
- pyvale/simcases/case06.i,sha256=DLMHzOp3Kgu4EIXSg58Ltz4NRVTPC-dZbJp-g-vY3Uo,7298
115
- pyvale/simcases/case07.geo,sha256=DxJjqex1zlQewGEcr_JiwbHSDczhOi-34ogvwAFfx_Q,4442
116
- pyvale/simcases/case07.i,sha256=73YrdZUAGCddorbBBxY-oK0tLOw12lISYR5xzzi3ddc,1921
117
- pyvale/simcases/case08.geo,sha256=d9QEIzMRRXynWOAHx07i8RxTA-uvKNVvpMAEBVZamKs,4795
118
- pyvale/simcases/case08.i,sha256=G4MqwcZWAaKcXD3toDNtaghbJ3rxiZHWvL-zT6n021Y,3253
119
- pyvale/simcases/case09.geo,sha256=zW9w_MQlfdbzXat7XfttiAP5HKIo6aCnUBWyGd8SlQQ,6858
120
- pyvale/simcases/case09.i,sha256=3tZCH7MtvjE4GPLO-Tsigm8kmvc_Ma8H9kZ2e5wb3uQ,1924
121
- pyvale/simcases/case10.geo,sha256=y4RRENzZyfzUey-wNK3dr448_j7ta70EgxReoaKP2vY,6839
122
- pyvale/simcases/case10.i,sha256=5X7xsgqiXAZDx-q5erxiWg1XOdGlmfD9UZ7i4Lqg-nk,6377
123
- pyvale/simcases/case11.geo,sha256=HDEMxIpANKUrDEgBfokxDohEoVpWMcfAcKJ1Rr8RW8c,10429
124
- pyvale/simcases/case11.i,sha256=f34kuvrDNKjqjiyV0BmCeH3ZDDJFUTtkKmorK4YbAhc,3093
125
- pyvale/simcases/case12.geo,sha256=FQ-Ck1LBsqnV4HDdLbIP1U2cRot7dRBTIlQ1n6GnxgE,12477
126
- pyvale/simcases/case12.i,sha256=N-lJnOenl_PQhhatkjMLhUGNNGKLV0QPjLiWU0QfXGo,7932
127
- pyvale/simcases/case13.i,sha256=q1KLk_S9AC15-ZNV_PydIp2QZsf_EUE1sth6a3t8cG8,3308
128
- pyvale/simcases/case14.i,sha256=-Yq-ecGcs153-t-fHNM4kWBR3d4_joxmM7WAnm4O57w,3502
129
- pyvale/simcases/case15.geo,sha256=Sgat1JQJeBCaSlGEEJ1o_WSZMpLpDkbhIrTaUKDiRX4,10429
130
- pyvale/simcases/case15.i,sha256=88TAhiFxU9jGKnxJu8Ne4pWnbh9pHKkzSs0e0IjfUDM,3187
131
- pyvale/simcases/case16.geo,sha256=SHB_GMofxN6WYq8JZ1Ktm8B8F_0L7K5hu4-DHtm3CX4,12554
132
- pyvale/simcases/case16.i,sha256=TJDlkIcdQz2JypfVDobYXg6N86rk03w-AUlIdWV1l7s,8758
133
- pyvale/simcases/case17.geo,sha256=lBMnrWGnYYivRqOIg5hfExRVr_jRjs1Zd9-f_ugitwA,4442
134
- pyvale/simcases/case17.i,sha256=G0o57umdzOkzWoroREpV1IH6DA8QM2zAhdemul6-Y7w,3056
135
- pyvale/simcases/case18.i,sha256=W3Hu6wwWCwOzxwZFmEB2tMlQ1VeCrs-r8erdbFWrqd0,6292
136
- pyvale/simcases/case18_1.i,sha256=W3Hu6wwWCwOzxwZFmEB2tMlQ1VeCrs-r8erdbFWrqd0,6292
137
- pyvale/simcases/case18_2.i,sha256=9Y2F3FCrLUJ78cP95CUKvsdCWGkWQLZbcqQ_WbeWPVs,6292
138
- pyvale/simcases/case18_3.i,sha256=0K1IDUiK1WSjWJOpJi7hvUqJApFD4Z0m9JkCkivAevM,6292
139
- pyvale/simcases/case19.geo,sha256=nT1Hch8Llv96z3QAPYqzpzIlaV01xXf1sozuA-m0-7I,9102
140
- pyvale/simcases/case19.i,sha256=jRDSAWaC-bTxCeFgSyj1gapbo6iqteySuPR5QhPLKqo,2191
141
- pyvale/simcases/case20.geo,sha256=TKBX8JKDwXKyXfXCi6fmOzDV_7_1Kpfpne9yeute11o,9102
142
- pyvale/simcases/case20.i,sha256=wAQGXJbY_VniZPG-PzeL5-Sk6_ZUiwuf8zRV3c8nEz0,6655
143
- pyvale/simcases/case21.geo,sha256=AzFNKkQp7-a9PojtR4y0GNI6g12BLvTRvkHDglYPRFQ,2387
144
- pyvale/simcases/case21.i,sha256=QjKU97PMsswLkaGkutC7gdJhGY8lRq5VEf5b-gRhT4E,3417
145
- pyvale/simcases/case22.geo,sha256=3OHJhFTm9P_G6vIB9fqgcpeT1DQt5xq5tWxOsRhvj2A,2491
146
- pyvale/simcases/case22.i,sha256=b3IeO0hs4IU0PJlS_MIkF1gtPkKYQXklfNs5rhy9KNc,3189
147
- pyvale/simcases/case23.geo,sha256=53NyuNJrPBgUWRHhgz0zS2fCZ8lavn_flpnfLUO2GNY,5448
148
- pyvale/simcases/case23.i,sha256=0sRJTmiieHxb4YBnYH5foJGteQZfn5Fo0Z3TkDuLSoQ,3188
149
- pyvale/simcases/case24.geo,sha256=3qiwipPbwaOjmPySISOZycYKdXCSDFrQpccnXHWhiU0,2408
150
- pyvale/simcases/case24.i,sha256=6scn1ujqyQ2FUHm30NNZPwTzXD9w7AEDkzbrncah-xQ,2950
151
- pyvale/simcases/case25.geo,sha256=k33GLvsApxTbxDbnOGueA3rTIazqcgYQ5DP37kCAPA4,2492
152
- pyvale/simcases/case25.i,sha256=8lArbbZOCJ4aLuJCaEO5FW1kzJI4JquOmbA-nVpNRRI,2994
153
- pyvale/simcases/case26.geo,sha256=7Qj0siF2FqgElxcmtX_7UDp4tdX6scnJgKffpP6iRQY,5468
154
- pyvale/simcases/case26.i,sha256=V-pS7MeAo9vl3QUDtu-i6MQyeftryxSj0r8n7t6hY0k,2992
155
- pyvale/simcases/run_1case.py,sha256=QmmZcawWmfkmImciEqM-8NedwlzuIOgLT2Te3fVb574,1928
156
- pyvale/simcases/run_all_cases.py,sha256=9b3JYcxC8PA2CR-htum7wCICwwnLNeC01xAhk0m6yxw,1903
157
- pyvale/simcases/run_build_case.py,sha256=IlyZC_VU095ayi7nz57xSSboTeJB54y7nsQXpBTUXFM,1938
158
- pyvale/simcases/run_example_cases.py,sha256=l5KOQvPMNRUkJMotaReG2nmrFtVBNWCwKVezNyRwKb0,1910
159
- pyvale-2025.4.1.dist-info/licenses/LICENSE,sha256=h2qWsRIazuLLhALyUsCP6aE0DFcswL9SSSt9sgMzZi4,1099
160
- pyvale-2025.4.1.dist-info/METADATA,sha256=Id2viAv30Ni56VjcmT-qWnRuF8tORpbWIsRKQPiGzqA,6923
161
- pyvale-2025.4.1.dist-info/WHEEL,sha256=ooBFpIzZCPdw3uqIQsOo4qqbA4ZRPxHnOH7peeONza0,91
162
- pyvale-2025.4.1.dist-info/top_level.txt,sha256=u1d_f4iZ3b3_96Rb_zrs9hyrpC4yE5e1Lg6Ey_Wgr0c,7
163
- pyvale-2025.4.1.dist-info/RECORD,,