CUQIpy 0.5.0__tar.gz → 0.5.0.post0.dev9__tar.gz
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 CUQIpy might be problematic. Click here for more details.
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/CUQIpy.egg-info/PKG-INFO +1 -1
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/PKG-INFO +1 -1
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/_version.py +3 -3
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/geometry/_geometry.py +0 -1
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/problem/_problem.py +4 -4
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_hmc.py +77 -4
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/CUQIpy.egg-info/SOURCES.txt +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/CUQIpy.egg-info/dependency_links.txt +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/CUQIpy.egg-info/requires.txt +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/CUQIpy.egg-info/top_level.txt +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/LICENSE +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/README.md +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/_messages.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/array/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/array/_array.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/config.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/data/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/data/_data.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/data/astronaut.npz +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/data/camera.npz +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/data/cat.npz +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/data/satellite.mat +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/density/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/density/_density.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/diagnostics.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_beta.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_cauchy.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_cmrf.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_custom.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_distribution.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_gamma.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_gaussian.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_gmrf.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_inverse_gamma.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_joint_distribution.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_laplace.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_lmrf.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_lognormal.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_normal.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_posterior.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/distribution/_uniform.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/geometry/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/likelihood/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/likelihood/_likelihood.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/model/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/model/_model.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/operator/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/operator/_operator.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/pde/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/pde/_pde.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/problem/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_conjugate.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_conjugate_approx.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_cwmh.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_gibbs.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_langevin_algorithm.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_laplace_approximation.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_mh.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_pcn.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_rto.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/sampler/_sampler.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/samples/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/samples/_samples.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/solver/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/solver/_solver.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/testproblem/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/testproblem/_testproblem.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/utilities/__init__.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/utilities/_get_python_variable_name.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/cuqi/utilities/_utilities.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/pyproject.toml +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/requirements.txt +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/setup.cfg +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/setup.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_MRFs.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_abstract_distribution_density.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_bayesian_inversion.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_density.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_distribution.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_distributions_shape.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_geometry.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_joint_distribution.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_likelihood.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_model.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_pde.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_posterior.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_problem.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_sampler.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_samples.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_solver.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_testproblem.py +0 -0
- {CUQIpy-0.5.0 → CUQIpy-0.5.0.post0.dev9}/tests/test_utilities.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: CUQIpy
|
|
3
|
-
Version: 0.5.0
|
|
3
|
+
Version: 0.5.0.post0.dev9
|
|
4
4
|
Summary: Computational Uncertainty Quantification for Inverse problems in Python
|
|
5
5
|
Maintainer-email: "Nicolai A. B. Riis" <nabr@dtu.dk>, "Jakob S. Jørgensen" <jakj@dtu.dk>, "Amal M. Alghamdi" <amaal@dtu.dk>
|
|
6
6
|
License: Apache License
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: CUQIpy
|
|
3
|
-
Version: 0.5.0
|
|
3
|
+
Version: 0.5.0.post0.dev9
|
|
4
4
|
Summary: Computational Uncertainty Quantification for Inverse problems in Python
|
|
5
5
|
Maintainer-email: "Nicolai A. B. Riis" <nabr@dtu.dk>, "Jakob S. Jørgensen" <jakj@dtu.dk>, "Amal M. Alghamdi" <amaal@dtu.dk>
|
|
6
6
|
License: Apache License
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2023-09-
|
|
11
|
+
"date": "2023-09-20T08:59:50+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "0.5.0"
|
|
14
|
+
"full-revisionid": "5aa5af171cc495556f93f0ceecc78606ad9b9185",
|
|
15
|
+
"version": "0.5.0.post0.dev9"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -444,10 +444,10 @@ class BayesianProblem(object):
|
|
|
444
444
|
try:
|
|
445
445
|
samples.plot_ci(percent=percent, exact=exact)
|
|
446
446
|
except NotImplementedError as nie:
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
447
|
+
print(
|
|
448
|
+
"Unable to plot CI for samples with the underlying " +
|
|
449
|
+
f"geometry: {samples.geometry}. Plotting the CI for the " +
|
|
450
|
+
"parameters instead.")
|
|
451
451
|
self._alternative_plot_UQ_for_variable(
|
|
452
452
|
samples, percent=percent, exact=exact)
|
|
453
453
|
|
|
@@ -58,20 +58,75 @@ class NUTS(Sampler):
|
|
|
58
58
|
# Plot samples
|
|
59
59
|
samples.plot_pair()
|
|
60
60
|
|
|
61
|
+
After running the NUTS sampler, run diagnostics can be accessed via the
|
|
62
|
+
following attributes:
|
|
63
|
+
|
|
64
|
+
.. code-block:: python
|
|
65
|
+
|
|
66
|
+
# Number of tree nodes created each NUTS iteration
|
|
67
|
+
sampler.num_tree_node_list
|
|
68
|
+
|
|
69
|
+
# Step size used in each NUTS iteration
|
|
70
|
+
sampler.epsilon_list
|
|
71
|
+
|
|
72
|
+
# Suggested step size during adaptation (the value of this step size is
|
|
73
|
+
# only used after adaptation). The suggested step size is None if
|
|
74
|
+
# adaptation is not requested.
|
|
75
|
+
sampler.epsilon_bar_list
|
|
76
|
+
|
|
77
|
+
# Additionally, iterations' number can be accessed via
|
|
78
|
+
sampler.iteration_list
|
|
79
|
+
|
|
61
80
|
"""
|
|
62
81
|
def __init__(self, target, x0=None, max_depth=15, adapt_step_size=True, opt_acc_rate=0.6, **kwargs):
|
|
63
82
|
super().__init__(target, x0=x0, **kwargs)
|
|
64
83
|
self.max_depth = max_depth
|
|
65
84
|
self.adapt_step_size = adapt_step_size
|
|
66
85
|
self.opt_acc_rate = opt_acc_rate
|
|
67
|
-
|
|
86
|
+
|
|
87
|
+
# NUTS run diagnostic
|
|
88
|
+
# number of tree nodes created each NUTS iteration
|
|
89
|
+
self._num_tree_node = 0
|
|
90
|
+
# Create lists to store NUTS run diagnostics
|
|
91
|
+
self._create_run_diagnostic_attributes()
|
|
92
|
+
|
|
93
|
+
def _create_run_diagnostic_attributes(self):
|
|
94
|
+
"""A method to create attributes to store NUTS run diagnostic."""
|
|
95
|
+
self._reset_run_diagnostic_attributes()
|
|
96
|
+
|
|
97
|
+
def _reset_run_diagnostic_attributes(self):
|
|
98
|
+
"""A method to reset attributes to store NUTS run diagnostic."""
|
|
99
|
+
# NUTS iterations
|
|
100
|
+
self.iteration_list = []
|
|
101
|
+
# List to store number of tree nodes created each NUTS iteration
|
|
102
|
+
self.num_tree_node_list = []
|
|
103
|
+
# List of step size used in each NUTS iteration
|
|
104
|
+
self.epsilon_list = []
|
|
105
|
+
# List of burn-in step size suggestion during adaptation
|
|
106
|
+
# only used when adaptation is done
|
|
107
|
+
# remains fixed after adaptation (after burn-in)
|
|
108
|
+
self.epsilon_bar_list = []
|
|
109
|
+
|
|
110
|
+
def _update_run_diagnostic_attributes(self, k, n_tree, eps, eps_bar):
|
|
111
|
+
"""A method to update attributes to store NUTS run diagnostic."""
|
|
112
|
+
# Store the current iteration number k
|
|
113
|
+
self.iteration_list.append(k)
|
|
114
|
+
# Store the number of tree nodes created in iteration k
|
|
115
|
+
self.num_tree_node_list.append(n_tree)
|
|
116
|
+
# Store the step size used in iteration k
|
|
117
|
+
self.epsilon_list.append(eps)
|
|
118
|
+
# Store the step size suggestion during adaptation in iteration k
|
|
119
|
+
self.epsilon_bar_list.append(eps_bar)
|
|
120
|
+
|
|
68
121
|
def _nuts_target(self, x): # returns logposterior tuple evaluation-gradient
|
|
69
122
|
return self.target.logd(x), self.target.gradient(x)
|
|
70
123
|
|
|
71
124
|
def _sample_adapt(self, N, Nb):
|
|
72
125
|
return self._sample(N, Nb)
|
|
73
|
-
|
|
126
|
+
|
|
74
127
|
def _sample(self, N, Nb):
|
|
128
|
+
# Reset run diagnostic attributes
|
|
129
|
+
self._reset_run_diagnostic_attributes()
|
|
75
130
|
|
|
76
131
|
if self.adapt_step_size is True and Nb == 0:
|
|
77
132
|
raise ValueError("Adaptive step size is True but number of burn-in steps is 0. Please set Nb > 0.")
|
|
@@ -86,6 +141,9 @@ class NUTS(Sampler):
|
|
|
86
141
|
theta[:, 0] = self.x0
|
|
87
142
|
joint_eval[0], grad = self._nuts_target(self.x0)
|
|
88
143
|
|
|
144
|
+
# Step size variables
|
|
145
|
+
epsilon, epsilon_bar = None, None
|
|
146
|
+
|
|
89
147
|
# parameters dual averaging
|
|
90
148
|
if (self.adapt_step_size == True):
|
|
91
149
|
epsilon = self._FindGoodEpsilon(theta[:, 0], joint_eval[0], grad)
|
|
@@ -101,6 +159,9 @@ class NUTS(Sampler):
|
|
|
101
159
|
|
|
102
160
|
# run NUTS
|
|
103
161
|
for k in range(1, Ns):
|
|
162
|
+
# reset number of tree nodes for each iteration
|
|
163
|
+
self._num_tree_node = 0
|
|
164
|
+
|
|
104
165
|
theta_k, joint_k = theta[:, k-1], joint_eval[k-1] # initial position (parameters)
|
|
105
166
|
r_k = self._Kfun(1, 'sample') # resample momentum vector
|
|
106
167
|
Ham = joint_k - self._Kfun(r_k, 'eval') # Hamiltonian
|
|
@@ -143,6 +204,10 @@ class NUTS(Sampler):
|
|
|
143
204
|
s = s_prime * int((dtheta @ r_minus.T) >= 0) * int((dtheta @ r_plus.T) >= 0)
|
|
144
205
|
j += 1
|
|
145
206
|
|
|
207
|
+
# update run diagnostic attributes
|
|
208
|
+
self._update_run_diagnostic_attributes(
|
|
209
|
+
k, self._num_tree_node, epsilon, epsilon_bar)
|
|
210
|
+
|
|
146
211
|
# adapt epsilon during burn-in using dual averaging
|
|
147
212
|
if (k <= Nb) and (self.adapt_step_size == True):
|
|
148
213
|
eta1 = 1/(k + t_0)
|
|
@@ -160,7 +225,7 @@ class NUTS(Sampler):
|
|
|
160
225
|
|
|
161
226
|
if np.isnan(joint_eval[k]):
|
|
162
227
|
raise NameError('NaN potential func')
|
|
163
|
-
|
|
228
|
+
|
|
164
229
|
# apply burn-in
|
|
165
230
|
theta = theta[:, Nb:]
|
|
166
231
|
joint_eval = joint_eval[Nb:]
|
|
@@ -211,6 +276,9 @@ class NUTS(Sampler):
|
|
|
211
276
|
#=========================================================================
|
|
212
277
|
# @functools.lru_cache(maxsize=128)
|
|
213
278
|
def _BuildTree(self, theta, r, grad, Ham, log_u, v, j, epsilon, Delta_max=1000):
|
|
279
|
+
# Increment the number of tree nodes counter
|
|
280
|
+
self._num_tree_node += 1
|
|
281
|
+
|
|
214
282
|
if (j == 0): # base case
|
|
215
283
|
# single leapfrog step in the direction v
|
|
216
284
|
theta_prime, r_prime, joint_prime, grad_prime = self._Leapfrog(theta, r, grad, v*epsilon)
|
|
@@ -219,7 +287,12 @@ class NUTS(Sampler):
|
|
|
219
287
|
s_prime = int(log_u < Delta_max + Ham_prime) # check U-turn
|
|
220
288
|
#
|
|
221
289
|
diff_Ham = Ham_prime - Ham
|
|
222
|
-
|
|
290
|
+
|
|
291
|
+
# Compute the acceptance probability
|
|
292
|
+
# alpha_prime = min(1, np.exp(diff_Ham))
|
|
293
|
+
# written in a stable way to avoid overflow when computing
|
|
294
|
+
# exp(diff_Ham) for large values of diff_Ham
|
|
295
|
+
alpha_prime = 1 if diff_Ham > 0 else np.exp(diff_Ham)
|
|
223
296
|
n_alpha_prime = 1
|
|
224
297
|
#
|
|
225
298
|
theta_minus, theta_plus = theta_prime, theta_prime
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|