freealg 0.7.17__py3-none-any.whl → 0.7.18__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.
Files changed (52) hide show
  1. freealg/__init__.py +8 -6
  2. freealg/__version__.py +1 -1
  3. freealg/_algebraic_form/_branch_points.py +18 -18
  4. freealg/_algebraic_form/_continuation_algebraic.py +13 -13
  5. freealg/_algebraic_form/_cusp.py +15 -15
  6. freealg/_algebraic_form/_cusp_wrap.py +6 -6
  7. freealg/_algebraic_form/_decompress.py +16 -16
  8. freealg/_algebraic_form/_decompress4.py +31 -31
  9. freealg/_algebraic_form/_decompress5.py +23 -23
  10. freealg/_algebraic_form/_decompress6.py +13 -13
  11. freealg/_algebraic_form/_decompress7.py +15 -15
  12. freealg/_algebraic_form/_decompress8.py +17 -17
  13. freealg/_algebraic_form/_decompress9.py +18 -18
  14. freealg/_algebraic_form/_decompress_new.py +17 -17
  15. freealg/_algebraic_form/_decompress_new_2.py +57 -57
  16. freealg/_algebraic_form/_decompress_util.py +10 -10
  17. freealg/_algebraic_form/_decompressible.py +292 -0
  18. freealg/_algebraic_form/_edge.py +10 -10
  19. freealg/_algebraic_form/_homotopy4.py +9 -9
  20. freealg/_algebraic_form/_homotopy5.py +9 -9
  21. freealg/_algebraic_form/_support.py +19 -19
  22. freealg/_algebraic_form/algebraic_form.py +262 -468
  23. freealg/_base_form.py +401 -0
  24. freealg/_free_form/__init__.py +1 -4
  25. freealg/_free_form/_density_util.py +1 -1
  26. freealg/_free_form/_plot_util.py +3 -511
  27. freealg/_free_form/free_form.py +8 -367
  28. freealg/_util.py +59 -11
  29. freealg/distributions/__init__.py +2 -1
  30. freealg/distributions/_base_distribution.py +163 -0
  31. freealg/distributions/_chiral_block.py +137 -11
  32. freealg/distributions/_compound_poisson.py +141 -47
  33. freealg/distributions/_deformed_marchenko_pastur.py +138 -33
  34. freealg/distributions/_deformed_wigner.py +98 -9
  35. freealg/distributions/_fuss_catalan.py +269 -0
  36. freealg/distributions/_kesten_mckay.py +4 -130
  37. freealg/distributions/_marchenko_pastur.py +8 -196
  38. freealg/distributions/_meixner.py +4 -130
  39. freealg/distributions/_wachter.py +4 -130
  40. freealg/distributions/_wigner.py +10 -127
  41. freealg/visualization/__init__.py +2 -2
  42. freealg/visualization/{_rgb_hsv.py → _domain_coloring.py} +37 -29
  43. freealg/visualization/_plot_util.py +513 -0
  44. {freealg-0.7.17.dist-info → freealg-0.7.18.dist-info}/METADATA +1 -1
  45. freealg-0.7.18.dist-info/RECORD +74 -0
  46. freealg-0.7.17.dist-info/RECORD +0 -69
  47. /freealg/{_free_form/_sample.py → _sample.py} +0 -0
  48. /freealg/{_free_form/_support.py → _support.py} +0 -0
  49. {freealg-0.7.17.dist-info → freealg-0.7.18.dist-info}/WHEEL +0 -0
  50. {freealg-0.7.17.dist-info → freealg-0.7.18.dist-info}/licenses/AUTHORS.txt +0 -0
  51. {freealg-0.7.17.dist-info → freealg-0.7.18.dist-info}/licenses/LICENSE.txt +0 -0
  52. {freealg-0.7.17.dist-info → freealg-0.7.18.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,513 @@
1
+ # SPDX-FileCopyrightText: Copyright 2025, Siavash Ameli <sameli@berkeley.edu>
2
+ # SPDX-License-Identifier: BSD-3-Clause
3
+ # SPDX-FileType: SOURCE
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify it under
6
+ # the terms of the license found in the LICENSE.txt file in the root directory
7
+ # of this source tree.
8
+
9
+
10
+ # =======
11
+ # Imports
12
+ # =======
13
+
14
+ import numpy
15
+ import matplotlib.pyplot as plt
16
+ import texplot
17
+ import matplotlib
18
+ import matplotlib.ticker as ticker
19
+ import matplotlib.gridspec as gridspec
20
+ from ..visualization import domain_coloring
21
+
22
+ __all__ = ['plot_density', 'plot_hilbert', 'plot_stieltjes',
23
+ 'plot_stieltjes_on_disk', 'plot_samples']
24
+
25
+
26
+ # =========
27
+ # auto bins
28
+ # =========
29
+
30
+ def _auto_bins(array, method='scott', factor=5):
31
+ """
32
+ Automatic choice for the number of bins for the histogram of an array.
33
+
34
+ Parameters
35
+ ----------
36
+
37
+ array : numpy.array
38
+ An array for histogram.
39
+
40
+ method : {``'freedman'``, ``'scott'``, ``'sturges'``}, default= ``'scott'``
41
+ Method of choosing number of bins.
42
+
43
+ Returns
44
+ -------
45
+
46
+ num_bins : int
47
+ Number of bins for histogram.
48
+ """
49
+
50
+ if method == 'freedman':
51
+
52
+ q75, q25 = numpy.percentile(array, [75, 25])
53
+ iqr = q75 - q25
54
+ bin_width = 2 * iqr / (len(array) ** (1/3))
55
+
56
+ if bin_width == 0:
57
+ # Fallback default
58
+ return
59
+ num_bins = 100
60
+ else:
61
+ num_bins = int(numpy.ceil((array.max() - array.min()) / bin_width))
62
+
63
+ elif method == 'scott':
64
+
65
+ std = numpy.std(array)
66
+ bin_width = 3.5 * std / (len(array) ** (1/3))
67
+ num_bins = int(numpy.ceil((array.max() - array.min()) / bin_width))
68
+
69
+ elif method == 'sturges':
70
+
71
+ num_bins = int(numpy.ceil(numpy.log2(len(array)) + 1))
72
+
73
+ else:
74
+ raise NotImplementedError('"method" is invalid.')
75
+
76
+ return num_bins * factor
77
+
78
+
79
+ # ============
80
+ # plot density
81
+ # ============
82
+
83
+ def plot_density(x, rho, eig=None, atoms=None, support=None, label='',
84
+ title='Spectral Density', latex=False, save=False):
85
+ """
86
+ Parameters
87
+ ----------
88
+
89
+ atoms : list of tuples, default=None
90
+ A list such as ``[(t1, w1), ..., (tk, wk)]`` where ``ti`` are the atom
91
+ locations and ``wi`` are their weight. The sum of the weights should be
92
+ one. If this is given, each atom is shown with a arrow, with the height
93
+ equals its weight corresponding to the right ordinate axis.
94
+ """
95
+
96
+ with texplot.theme(use_latex=latex):
97
+
98
+ fig, ax = plt.subplots(figsize=(6, 2.6))
99
+
100
+ ax.plot(x, rho, color='black', label=label, zorder=3)
101
+
102
+ ax.set_xlim([x[0], x[-1]])
103
+ ax.set_ylim(bottom=0)
104
+
105
+ # Lock y autoscaling so hist won't change it if there is an atom
106
+ ax.relim()
107
+ ax.autoscale_view(scalex=False, scaley=True)
108
+ ax.set_autoscaley_on(False)
109
+
110
+ if eig is not None:
111
+ if support is not None:
112
+ lam_m, lam_p = support
113
+ else:
114
+ lam_m, lam_p = min(eig), max(eig)
115
+ bins = numpy.linspace(lam_m, lam_p, _auto_bins(eig))
116
+ _ = ax.hist(eig, bins, density=True, color='silver',
117
+ edgecolor='none', label='Histogram')
118
+ else:
119
+ plt.fill_between(x, y1=rho, y2=0, color='silver', zorder=-1)
120
+
121
+ if atoms is not None:
122
+ ax2 = ax.twinx()
123
+ ax2.set_ylim([0, 1])
124
+ ax2.set_ylabel(r'Atom weight $w$')
125
+
126
+ for atom_loc, atom_w in atoms:
127
+ ax2.annotate('', xy=(atom_loc, atom_w), xytext=(atom_loc, 0.0),
128
+ zorder=10, annotation_clip=False,
129
+ arrowprops={
130
+ 'arrowstyle': '-|>',
131
+ 'linewidth': 1.4,
132
+ 'color': 'black',
133
+ 'shrinkA': 0.0,
134
+ 'shrinkB': 0.0,
135
+ 'mutation_scale': 9})
136
+
137
+ ax.set_xlabel(r'$\lambda$')
138
+ ax.set_ylabel(r'$\rho(\lambda)$''')
139
+ ax.set_title(title)
140
+
141
+ if label != '':
142
+ ax.legend(fontsize='small')
143
+
144
+ # Save
145
+ if save is False:
146
+ save_status = False
147
+ save_filename = ''
148
+ else:
149
+ save_status = True
150
+ if isinstance(save, str):
151
+ save_filename = save
152
+ else:
153
+ save_filename = 'density.pdf'
154
+
155
+ texplot.show_or_save_plot(plt, default_filename=save_filename,
156
+ transparent_background=True, dpi=400,
157
+ show_and_save=save_status, verbose=True)
158
+
159
+
160
+ # ============
161
+ # plot hilbert
162
+ # ============
163
+
164
+ def plot_hilbert(x, hilb, support=None, latex=False, save=False):
165
+ """
166
+ """
167
+
168
+ with texplot.theme(use_latex=latex):
169
+
170
+ fig, ax = plt.subplots(figsize=(6, 2.7))
171
+
172
+ if support is not None:
173
+ lam_m, lam_p = support
174
+ ax.plot(x, hilb, color='black', zorder=3)
175
+ ax.axvline(lam_m, linestyle='--', linewidth=1, color='darkgray',
176
+ label=r'$\lambda_{\pm}$')
177
+ ax.axvline(lam_p, linestyle='--', linewidth=1, color='darkgray')
178
+
179
+ ax.axhline(0, linestyle='--', linewidth=0.5, color='gray', zorder=-1)
180
+
181
+ ax.set_xlim([x[0], x[-1]])
182
+ ax.set_xlabel(r'$x$')
183
+ ax.set_ylabel(r'$\mathcal{H}[\rho](x)$')
184
+ ax.set_title('Hilbert Transform')
185
+ ax.legend(fontsize='small')
186
+
187
+ # Make sure y=0 is in the y ticks.
188
+ yt = list(ax.get_yticks())
189
+ if 0 not in yt:
190
+ yt.append(0)
191
+ yt = sorted(yt)
192
+ ax.set_yticks(yt)
193
+
194
+ # Save
195
+ if save is False:
196
+ save_status = False
197
+ save_filename = ''
198
+ else:
199
+ save_status = True
200
+ if isinstance(save, str):
201
+ save_filename = save
202
+ else:
203
+ save_filename = 'hilbert.pdf'
204
+
205
+ texplot.show_or_save_plot(plt, default_filename=save_filename,
206
+ transparent_background=True, dpi=400,
207
+ show_and_save=save_status, verbose=True)
208
+
209
+
210
+ # ===============
211
+ # value formatter
212
+ # ===============
213
+
214
+ def _value_formatter(v, pos):
215
+ """
216
+ """
217
+
218
+ # v is the normalized "value" channel: v = 1 - exp(-|m(z)|)
219
+ # Invert the mapping: |m(z)| = -ln(1-v)
220
+ if v >= 1:
221
+ return r'$\infty$'
222
+ elif v == 0:
223
+ return r'0'
224
+ else:
225
+ m_val = -numpy.log(1 - v)
226
+ return f"{m_val:.1f}"
227
+
228
+
229
+ # ==============
230
+ # plot stieltjes
231
+ # ==============
232
+
233
+ def plot_stieltjes(x, y, m1, m2, support, latex=False, save=False):
234
+ """
235
+ """
236
+
237
+ lam_m, lam_p = support
238
+ x_min = numpy.min(x)
239
+ x_max = numpy.max(x)
240
+ y_min = numpy.min(y)
241
+ y_max = numpy.max(y)
242
+ n_y = y.size
243
+
244
+ with texplot.theme(use_latex=latex):
245
+
246
+ fig = plt.figure(figsize=(12, 4))
247
+ gs = gridspec.GridSpec(1, 3, width_ratios=[1, 1, 0.2], wspace=0.3)
248
+
249
+ eps = 2 / n_y
250
+ shift = 0.0
251
+
252
+ ax0 = fig.add_subplot(gs[0])
253
+ ax0.imshow(domain_coloring(m1, shift=shift),
254
+ extent=[x_min, x_max, y_min, y_max], origin='lower',
255
+ interpolation='gaussian', rasterized=True)
256
+ ax0.plot([lam_m, lam_p], [eps, eps], 'o', markersize=1.5,
257
+ color='black')
258
+ ax0.plot([lam_m, lam_p], [eps, eps], '-', linewidth=1, color='black')
259
+ ax0.set_xlabel(r'$\mathrm{Re}(z)$')
260
+ ax0.set_ylabel(r'$\mathrm{Im}(z)$')
261
+ ax0.set_title(r'(a) Principal Branch on $\mathbb{C}^{+}$ and ' +
262
+ r'$\mathbb{C}^{-}$')
263
+ ax0.set_yticks(numpy.arange(y_min, y_max+0.01, 0.5))
264
+ ax0.set_xlim([x_min, x_max])
265
+ ax0.set_ylim([y_min, y_max])
266
+
267
+ ax1 = fig.add_subplot(gs[1])
268
+ ax1.imshow(domain_coloring(m2, shift=shift),
269
+ extent=[x_min, x_max, y_min, y_max], origin='lower',
270
+ interpolation='gaussian', rasterized=True)
271
+ ax1.plot([lam_m, lam_p], [eps, eps], 'o', markersize=1.5,
272
+ color='black')
273
+ ax1.plot([x_min, lam_m], [eps, eps], '-', linewidth=1, color='black')
274
+ ax1.plot([lam_p, x_max], [eps, eps], '-', linewidth=1, color='black')
275
+ ax1.set_xlabel(r'$\mathrm{Re}(z)$')
276
+ ax1.set_ylabel(r'$\mathrm{Im}(z)$')
277
+ ax1.set_title(r'(b) Principal Branch on $\mathbb{C}^{+}$, Secondary ' +
278
+ r'Branch on $\mathbb{C}^{-}$')
279
+ ax1.set_yticks(numpy.arange(y_min, y_max+0.01, 0.5))
280
+ ax1.set_xlim([x_min, x_max])
281
+ ax1.set_ylim([y_min, y_max])
282
+
283
+ pos = ax1.get_position()
284
+ cbar_width = 0.013
285
+ pad = 0.013
286
+
287
+ # gs_cb = gridspec.GridSpecFromSubplotSpec(2, 1, subplot_spec=gs[2],
288
+ # hspace=0.4)
289
+ gridspec.GridSpecFromSubplotSpec(1, 2, subplot_spec=gs[2],
290
+ width_ratios=[1, 1], wspace=0.05)
291
+
292
+ # Create two separate axes for colorbars using make_axes_locatable:
293
+ # divider = make_axes_locatable(ax[1])
294
+ # cax_hue = divider.append_axes("right", size="4%", pad=0.12)
295
+ # cax_value = divider.append_axes("right", size="4%", pad=0.7)
296
+
297
+ # cax_hue = fig.add_subplot(gs_cb[0])
298
+ cax_hue = fig.add_axes([pos.x1 + pad, pos.y0, cbar_width, pos.height])
299
+ norm_hue = matplotlib.colors.Normalize(vmin=-numpy.pi, vmax=numpy.pi)
300
+ cmap_hue = plt.get_cmap('hsv')
301
+ sm_hue = plt.cm.ScalarMappable(norm=norm_hue, cmap=cmap_hue)
302
+ sm_hue.set_array([])
303
+ cb_hue = fig.colorbar(sm_hue, cax=cax_hue)
304
+ cb_hue.set_label(r'$\mathrm{Arg}(m(z))$', labelpad=-6)
305
+ cb_hue.set_ticks([-numpy.pi, 0, numpy.pi])
306
+ cb_hue.set_ticklabels([r'$-\pi$', '0', r'$\pi$'])
307
+
308
+ # cax_value = fig.add_subplot(gs_cb[1])
309
+ cax_value = fig.add_axes([pos.x1 + 4.4*pad + cbar_width, pos.y0,
310
+ cbar_width, pos.height])
311
+ norm_value = matplotlib.colors.Normalize(vmin=0, vmax=1)
312
+ cmap_value = plt.get_cmap('gray')
313
+ sm_value = plt.cm.ScalarMappable(norm=norm_value, cmap=cmap_value)
314
+ sm_value.set_array([])
315
+ cb_value = fig.colorbar(sm_value, cax=cax_value)
316
+ ticks_norm = [0, 1 - numpy.exp(-0.5), 1 - numpy.exp(-1),
317
+ 1 - numpy.exp(-2), 1]
318
+ cb_value.set_ticks(ticks_norm)
319
+ cb_value.ax.yaxis.set_major_formatter(
320
+ ticker.FuncFormatter(_value_formatter))
321
+ cb_value.set_ticklabels(["0", r"$\frac{1}{2}$", "1", "2", r"$\infty$"])
322
+ cb_value.set_label(r'$|m(z)|$', labelpad=0)
323
+
324
+ plt.tight_layout()
325
+
326
+ # Save
327
+ if save is False:
328
+ save_status = False
329
+ save_filename = ''
330
+ else:
331
+ save_status = True
332
+ if isinstance(save, str):
333
+ save_filename = save
334
+ else:
335
+ save_filename = 'stieltjes.pdf'
336
+
337
+ texplot.show_or_save_plot(plt, default_filename=save_filename,
338
+ transparent_background=True, dpi=400,
339
+ show_and_save=save_status, verbose=True)
340
+
341
+
342
+ # ======================
343
+ # plot stieltjes on disk
344
+ # ======================
345
+
346
+ def plot_stieltjes_on_disk(r, t, m1_D, m2_D, support, latex=False, save=False):
347
+ """
348
+ """
349
+
350
+ grid_r, grid_t = numpy.meshgrid(r, t)
351
+
352
+ # Inverse Cayley
353
+ lam_m, lam_p = support
354
+ lam_p_z = (lam_p - 1j) / (lam_p + 1j)
355
+ lam_m_z = (lam_m - 1j) / (lam_m + 1j)
356
+ theta_p = numpy.angle(lam_p_z)
357
+ theta_n = numpy.angle(lam_m_z)
358
+
359
+ if theta_n < 0:
360
+ theta_n += 2.0 * numpy.pi
361
+ if theta_p < 0:
362
+ theta_p += 2.0 * numpy.pi
363
+
364
+ theta_branch = numpy.linspace(theta_n, theta_p, 100)
365
+ theta_alt_branch = numpy.linspace(theta_p, theta_n + 2*numpy.pi, 100)
366
+ r_branch = numpy.ones_like(theta_branch)
367
+
368
+ with texplot.theme(use_latex=latex):
369
+
370
+ fig = plt.figure(figsize=(12, 4))
371
+ # gs = gridspec.GridSpec(1, 3, width_ratios=[1, 1, 0.2], wspace=0.3)
372
+ gs = gridspec.GridSpec(1, 3, width_ratios=[1, 1, 0.2], wspace=-0.75)
373
+
374
+ shift = 0.0
375
+
376
+ ax0 = fig.add_subplot(gs[0], projection='polar')
377
+ ax0.pcolormesh(grid_t, grid_r, domain_coloring(m1_D, shift=shift),
378
+ shading='auto', rasterized=True)
379
+ ax0.plot(theta_branch, r_branch, '-', linewidth=1, color='black')
380
+ ax0.plot(theta_n, 0.994, 'o', markersize=1.5, color='black')
381
+ ax0.plot(theta_p, 0.994, 'o', markersize=1.5, color='black')
382
+ ax0.set_theta_zero_location("E") # zero on left
383
+ ax0.set_theta_direction(1) # angles increase anti-clockwise
384
+ # ax.set_rticks([1, r_max])
385
+ ax0.set_rticks([])
386
+ ax0.set_thetagrids(
387
+ angles=[0, 90, 180, 270],
388
+ labels=[r'$0$', r'$\frac{\pi}{2}$', r'$\pi$', r'$\frac{3\pi}{2}$'])
389
+ ax0.tick_params(axis='x', pad=-2)
390
+ ax0.grid(False)
391
+ # ax0.set_xlabel(r'$\mathrm{Re}(z)$')
392
+ # ax0.set_ylabel(r'$\mathrm{Im}(z)$')
393
+ ax0.set_title(
394
+ r'(a) Principal Branch on $\mathbb{D}$ and $\mathbb{D}^{c}$',
395
+ pad=25)
396
+
397
+ ax1 = fig.add_subplot(gs[1], projection='polar')
398
+ ax1.pcolormesh(grid_t, grid_r, domain_coloring(m2_D, shift=shift),
399
+ shading='auto', rasterized=True)
400
+ ax1.plot(theta_alt_branch, r_branch, '-', linewidth=1, color='black')
401
+ ax1.plot(theta_n, 0.994, 'o', markersize=1.5, color='black')
402
+ ax1.plot(theta_p, 0.994, 'o', markersize=1.5, color='black')
403
+ ax1.set_theta_zero_location("E") # zero on left
404
+ ax1.set_theta_direction(1) # angles increase anti-clockwise
405
+ # ax.set_rticks([1, r_max])
406
+ ax1.set_rticks([])
407
+ ax1.set_thetagrids(
408
+ angles=[0, 90, 180, 270],
409
+ labels=[r'$0$', r'$\frac{\pi}{2}$', r'$\pi$', r'$\frac{3\pi}{2}$'])
410
+ ax1.tick_params(axis='x', pad=-2)
411
+ ax1.grid(False)
412
+ # ax0.set_xlabel(r'$\mathrm{Re}(z)$')
413
+ # ax0.set_ylabel(r'$\mathrm{Im}(z)$')
414
+ ax1.set_title(r'(b) Principal Branch on $\mathbb{D}$, Secondary ' +
415
+ r'Branch on $\mathbb{D}^{c}$', pad=25)
416
+
417
+ pos = ax1.get_position()
418
+ cbar_width = 0.013
419
+ pad = 0.013
420
+
421
+ # gs_cb = gridspec.GridSpecFromSubplotSpec(2, 1, subplot_spec=gs[2],
422
+ # hspace=0.4)
423
+ gridspec.GridSpecFromSubplotSpec(1, 2, subplot_spec=gs[2],
424
+ width_ratios=[1, 1], wspace=0.08)
425
+
426
+ # Create two separate axes for colorbars using make_axes_locatable:
427
+ # divider = make_axes_locatable(ax[1])
428
+ # cax_hue = divider.append_axes("right", size="4%", pad=0.12)
429
+ # cax_value = divider.append_axes("right", size="4%", pad=0.7)
430
+
431
+ # cax_hue = fig.add_subplot(gs_cb[0])
432
+ cax_hue = fig.add_axes(
433
+ [pos.x1 + 2.5*pad, pos.y0, cbar_width, pos.height])
434
+ norm_hue = matplotlib.colors.Normalize(vmin=-numpy.pi, vmax=numpy.pi)
435
+ cmap_hue = plt.get_cmap('hsv')
436
+ sm_hue = plt.cm.ScalarMappable(norm=norm_hue, cmap=cmap_hue)
437
+ sm_hue.set_array([])
438
+ cb_hue = fig.colorbar(sm_hue, cax=cax_hue)
439
+ cb_hue.set_label(r'$\mathrm{Arg}(m(\zeta))$', labelpad=-6)
440
+ cb_hue.set_ticks([-numpy.pi, 0, numpy.pi])
441
+ cb_hue.set_ticklabels([r'$-\pi$', '0', r'$\pi$'])
442
+
443
+ # cax_value = fig.add_subplot(gs_cb[1])
444
+ cax_value = fig.add_axes([pos.x1 + (4.4+2.5)*pad + cbar_width, pos.y0,
445
+ cbar_width, pos.height])
446
+ norm_value = matplotlib.colors.Normalize(vmin=0, vmax=1)
447
+ cmap_value = plt.get_cmap('gray')
448
+ sm_value = plt.cm.ScalarMappable(norm=norm_value, cmap=cmap_value)
449
+ sm_value.set_array([])
450
+ cb_value = fig.colorbar(sm_value, cax=cax_value)
451
+ ticks_norm = [0, 1 - numpy.exp(-0.5), 1 - numpy.exp(-1),
452
+ 1 - numpy.exp(-2), 1]
453
+ cb_value.set_ticks(ticks_norm)
454
+ cb_value.ax.yaxis.set_major_formatter(ticker.FuncFormatter(
455
+ _value_formatter))
456
+ cb_value.set_ticklabels(["0", r"$\frac{1}{2}$", "1", "2", r"$\infty$"])
457
+ cb_value.set_label(r'$|m(\zeta)|$', labelpad=0)
458
+
459
+ plt.tight_layout()
460
+
461
+ # Save
462
+ if save is False:
463
+ save_status = False
464
+ save_filename = ''
465
+ else:
466
+ save_status = True
467
+ if isinstance(save, str):
468
+ save_filename = save
469
+ else:
470
+ save_filename = 'stieltjes_disk.pdf'
471
+
472
+ texplot.show_or_save_plot(plt, default_filename=save_filename,
473
+ transparent_background=True, dpi=400,
474
+ show_and_save=save_status, verbose=True)
475
+
476
+
477
+ # ============
478
+ # plot samples
479
+ # ============
480
+
481
+ def plot_samples(x, rho, x_min, x_max, samples, latex=False, save=False):
482
+ """
483
+ """
484
+
485
+ with texplot.theme(use_latex=latex):
486
+
487
+ fig, ax = plt.subplots(figsize=(6, 3))
488
+
489
+ bins = numpy.linspace(x_min, x_max, _auto_bins(samples))
490
+ _ = ax.hist(samples, bins, density=True, color='silver',
491
+ edgecolor='none', label='Samples histogram')
492
+ ax.plot(x, rho, color='black', label='Exact density')
493
+ ax.legend(fontsize='small')
494
+ ax.set_ylim(bottom=0)
495
+ ax.set_xlim([x[0], x[-1]])
496
+ ax.set_xlabel(r'$\lambda$')
497
+ ax.set_ylabel(r'$\rho(\lambda)$''')
498
+ ax.set_title('Histogram of Samples from Distribution')
499
+
500
+ # Save
501
+ if save is False:
502
+ save_status = False
503
+ save_filename = ''
504
+ else:
505
+ save_status = True
506
+ if isinstance(save, str):
507
+ save_filename = save
508
+ else:
509
+ save_filename = 'samples.pdf'
510
+
511
+ texplot.show_or_save_plot(plt, default_filename=save_filename,
512
+ transparent_background=True, dpi=400,
513
+ show_and_save=save_status, verbose=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: freealg
3
- Version: 0.7.17
3
+ Version: 0.7.18
4
4
  Summary: Free probability for large matrices
5
5
  Home-page: https://github.com/ameli/freealg
6
6
  Download-URL: https://github.com/ameli/freealg/archive/main.zip
@@ -0,0 +1,74 @@
1
+ freealg/__init__.py,sha256=cYlTK-p0vahmCwXA_y2h3vhsAxyQu9dv_kGR2H7U-Hw,910
2
+ freealg/__version__.py,sha256=vVEAGXrQny527lFZaiZOphUeWZVJTDThg2Wd7GndISQ,23
3
+ freealg/_base_form.py,sha256=ZZ6foORoZIf5hRl9m35eAMqZ0xazEDsToPWkIyqcM8g,10350
4
+ freealg/_sample.py,sha256=rhfd_83TCTvvJh8cG8TzEYO4OR8VbtND2YCNtWEhMa8,3205
5
+ freealg/_support.py,sha256=B6oSqW7MGikpJlTGzNbnMF63LhI5al2ccToqcncTPYs,6624
6
+ freealg/_util.py,sha256=t8scfvkzntXnpN7BsBP6lbshhdb2NkVJ1KVOzDv8JiY,3597
7
+ freealg/_algebraic_form/__init__.py,sha256=etgaRiuipcmxtwHzMVxZwO_qbX8R7m9j39mKvgRyTZg,463
8
+ freealg/_algebraic_form/_branch_points.py,sha256=jCLXZPL5AXkoSMrxToASlQUL0ow2WM-yho994DQMYMA,7787
9
+ freealg/_algebraic_form/_constraints.py,sha256=xBpsKAL0-Czxf9ZF9tspLpTaFJ1m2DDyqc2KH9bl5Xg,3601
10
+ freealg/_algebraic_form/_continuation_algebraic.py,sha256=ha7EhMaGqQEpcataOXR4ryVLXmBZHY3WhdrEZDrR-UI,19364
11
+ freealg/_algebraic_form/_cusp.py,sha256=4VydCNI3LGEGuVJSHNGO0kBhkvqHqdjDaBMbuImyJig,10551
12
+ freealg/_algebraic_form/_cusp_wrap.py,sha256=CSy8OoLmq11yNHGHcLk8vHW4vANmCaBoQaIHXbGnZcQ,8297
13
+ freealg/_algebraic_form/_decompress.py,sha256=k52w4oiMoFabkS5ji9m6KwnQ0pgFkiAgWpkMyl4wyMI,22240
14
+ freealg/_algebraic_form/_decompress2.py,sha256=2eSoIOj8R1ZuxIuDTXaKgMXY5OXfsNmaTIbE0IiUukk,6585
15
+ freealg/_algebraic_form/_decompress4.py,sha256=og5A80KSAFiJ4Ib9LMqLGtl7WcGXnY_axqSDdmaZl-k,21520
16
+ freealg/_algebraic_form/_decompress5.py,sha256=1oUcN2T8YhB7YLvcuXOAb8caWkdinpUz1aVK2GcE-iE,22572
17
+ freealg/_algebraic_form/_decompress6.py,sha256=4a-4MdRcn5jxr58HzoG8Sydyf-_zZr4ZPH7sJhd2lSw,16748
18
+ freealg/_algebraic_form/_decompress7.py,sha256=VoMq205eMIIS0k8V4p2uB3I_GvjcnUmrPPAQzyefHkQ,10098
19
+ freealg/_algebraic_form/_decompress8.py,sha256=Izopv7HQQ8QWXkfYUUG43BIsOYOtuuZ7n99hS_M8YQ4,11683
20
+ freealg/_algebraic_form/_decompress9.py,sha256=v0_xHe-Xe6p3BSOfvgeCb8KXeIi-hv9CACakvc0VIpk,11405
21
+ freealg/_algebraic_form/_decompress_new.py,sha256=LytmK-p7-Ke8eH9mhZSCH1_yeCyH5xrM9m1uGPQeIVE,12128
22
+ freealg/_algebraic_form/_decompress_new_2.py,sha256=t6kbAPvLO9N5Gksr3Ef2yWKQf22FaMmx2dgrAH3pOwA,54064
23
+ freealg/_algebraic_form/_decompress_util.py,sha256=nLsAYJ_vVrckRw7O2IYzxdyCUpbenVKRtkVoyaJC5aE,4816
24
+ freealg/_algebraic_form/_decompressible.py,sha256=KO--G8SqVu0Z-HKbq5RLfvJ5M6ILYEuUL4S6NPA8ZK8,7285
25
+ freealg/_algebraic_form/_edge.py,sha256=TH82SJnnwJSAiCqZr5tZa6si8ImcQG-CH8OPbep5SCc,9584
26
+ freealg/_algebraic_form/_homotopy.py,sha256=FdKQhUTjdk6Rmdd5zb8IzDJN0pteHUcgJL3eG_ySUzM,10912
27
+ freealg/_algebraic_form/_homotopy2.py,sha256=gvfm0cabEw57zLuOMgGNJGFVqJ8ScF4Zs2FoCQSWbYs,8868
28
+ freealg/_algebraic_form/_homotopy3.py,sha256=OfvvX6uc_fpcPuMa53zM8o7XHrCeWeRVjDoSjUlFySE,6345
29
+ freealg/_algebraic_form/_homotopy4.py,sha256=Y4Uj2aXiwk52XchG9Y8RZMMXMxGftc-WTQGKyR5AjdY,9993
30
+ freealg/_algebraic_form/_homotopy5.py,sha256=byoXEzr7eNDWmuYOGOAd3q0ozXSNGYRaxDOMPcgqnU4,6286
31
+ freealg/_algebraic_form/_moments.py,sha256=R1-EepGsni4he-kNfiP3E3tFqR2Z27fz-ixtSVU2fSE,12427
32
+ freealg/_algebraic_form/_sheets_util.py,sha256=6OLzWQKu-gN8rxM2rbpbN8TjNZFmD8UJ-8t9kcZdkCo,4174
33
+ freealg/_algebraic_form/_support.py,sha256=Kl8_BFOZscW8I9cepdbXPVD7rxGzLFdpKzHgzAE8r94,6771
34
+ freealg/_algebraic_form/algebraic_form.py,sha256=jDrw4iOHcybhKqUpDl8efFS_RbCCa-KX2d-BkDLntAg,33518
35
+ freealg/_free_form/__init__.py,sha256=R16-jGdSkGtfGw4gAUhix4WYXa_dLWOeHLq6NQ2PuRk,527
36
+ freealg/_free_form/_chebyshev.py,sha256=zkyVA8NLf7uUKlJdLz4ijd_SurdsqUgkA5nHGWSybaE,6916
37
+ freealg/_free_form/_damp.py,sha256=k2vtBtWOxQBf4qXaWu_En81lQBXbEO4QbxxWpvuVhdE,1802
38
+ freealg/_free_form/_decompress.py,sha256=_i37IToZ6oN9DdLXOM8r4y92EbazzcylhcnWwUOpaj0,32108
39
+ freealg/_free_form/_density_util.py,sha256=ZZJJsl2nfvfR_LxJFPxXQKjUxQpESeWc7KtzzDdtT2c,6760
40
+ freealg/_free_form/_jacobi.py,sha256=z0X6Ws_BEo_h8EQBzDNHGFhLF9F2PUmnGeBVs0bNL7w,10709
41
+ freealg/_free_form/_linalg.py,sha256=GNiQpT193VWxLOejVdAUPQdNJas4ms8US3YR8ZaYXGA,13143
42
+ freealg/_free_form/_pade.py,sha256=_y89r7rVc2E5lgiN_ZjnxzW2IaVevWwpq5ISor2NVOo,10310
43
+ freealg/_free_form/_plot_util.py,sha256=9JNz6qouH6sQctes4ueOEswgN7qVppajyVBZUhVxT1c,2689
44
+ freealg/_free_form/_series.py,sha256=33LLCUe4svmV0eWyzhP_XClfDzccQHTW9WBJlYlLfHY,11475
45
+ freealg/_free_form/free_form.py,sha256=hgOLLCIMkNHn1pYK0u5udoXWgouXb8sRZWaoy4JXOFM,34132
46
+ freealg/_geometric_form/__init__.py,sha256=mWsXP0nXs3pY8RfUDhPRTgIfhOigKqw_VmoWnJOw2a0,485
47
+ freealg/_geometric_form/_continuation_genus0.py,sha256=4jiXfQaA6w3IhVkJgtKVVjqqtBmavq78FY_YTGUQyY0,4026
48
+ freealg/_geometric_form/_continuation_genus1.py,sha256=X8NZ1_6PxhJJLXZk5ASeGwxej_KwH3-ftuXkBrOFmgU,6021
49
+ freealg/_geometric_form/_elliptic_functions.py,sha256=Rr_pb1A_FjrJlraYQj2G5shdO6f77aVQN2eQzrvIygI,4109
50
+ freealg/_geometric_form/_sphere_maps.py,sha256=NlhTgWXKWXKdyR2dQxMmePsIwHp7IWyYh6uoxgW5Osc,1465
51
+ freealg/_geometric_form/_torus_maps.py,sha256=7m5QsbmnXTWHJE5rWjKG3_TnErHEEQ41vW-3hsOc3lo,3338
52
+ freealg/_geometric_form/geometric_form.py,sha256=whHKYQdakqShtR-jCEugevnje72JEr9M0HSvZ2BYoKs,33379
53
+ freealg/distributions/__init__.py,sha256=UffA9_rQFJ7j2apgFSfcORZ7S0wkuyWONdk8JHWHJAI,929
54
+ freealg/distributions/_base_distribution.py,sha256=TleSuSfI_fF4z_aSRBTFDYZTCpkB9kGmXbmopZqLuzs,4338
55
+ freealg/distributions/_chiral_block.py,sha256=SHlmn4TTVrB-LDCDTn4pSGsB6oQ8wu9tFyMA_suqqvM,17763
56
+ freealg/distributions/_compound_poisson.py,sha256=OWBBgrLpKGwnnGVODIEjh2EFZKITkmI4dfafjfJPtnY,15501
57
+ freealg/distributions/_deformed_marchenko_pastur.py,sha256=_sCx0s3Jumk7GhLZyxVd_6S1P57kSn0xOd69X-DcoEI,22248
58
+ freealg/distributions/_deformed_wigner.py,sha256=PGU31cAKuCWIjP1y528nceomCZ2dKWGOfDT4Camw3_8,10916
59
+ freealg/distributions/_fuss_catalan.py,sha256=hSgveTUoXuzlL_9wA_ij0h5pEvGy3TqsHe732pmLek8,6548
60
+ freealg/distributions/_kesten_mckay.py,sha256=wPKa0NVg1LPcyeb9LvO9-X_soJkgBWB6GN3tEdiRU9o,16504
61
+ freealg/distributions/_marchenko_pastur.py,sha256=wP-7mdbVdMBQsDpJVED9z6-Z9b7D1FpoJ20XX939-vg,15023
62
+ freealg/distributions/_meixner.py,sha256=PvtT-tKuvsRJdxMLnB2Z9cMlj8L38vjzzehIB36Ss7A,14010
63
+ freealg/distributions/_wachter.py,sha256=Y5lWjoqRv5tmjfHVnf6WfUewtzowX_3AhiH12NzsdJA,13510
64
+ freealg/distributions/_wigner.py,sha256=GuB-tx53amBQHEdZPlxdgK9GFz3uOMlUfE1EUZZcNO8,12681
65
+ freealg/visualization/__init__.py,sha256=vn75pE0P2F8JorKLX3VCVoIXLEOkkNEeG95oWHkTDWs,459
66
+ freealg/visualization/_domain_coloring.py,sha256=wl9lShnLtpBUxJQ0ChvSpJxg7rAJX0IMk2Ug_L6QLsM,3899
67
+ freealg/visualization/_glue_util.py,sha256=2oKnEYjUOS4OZfivmciVLauVr53kyHMwi6c2zRKilTQ,693
68
+ freealg/visualization/_plot_util.py,sha256=RhfZEK0uFg3o6IKxCQodEXHsP0PfuqGsSG0quXsy3Yg,18063
69
+ freealg-0.7.18.dist-info/licenses/AUTHORS.txt,sha256=0b67Nz4_JgIzUupHJTAZxu5QdSUM_HRM_X_w4xCb17o,30
70
+ freealg-0.7.18.dist-info/licenses/LICENSE.txt,sha256=J-EEYEtxb3VVf_Bn1TYfWnpY5lMFIM15iLDDcnaDTPA,1443
71
+ freealg-0.7.18.dist-info/METADATA,sha256=CR1DlI06gmu7Blpd8WZUhdb-EzWpfWveuK_m_me-pqY,5537
72
+ freealg-0.7.18.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
73
+ freealg-0.7.18.dist-info/top_level.txt,sha256=eR2wrgYwDdnnJ9Zf5PruPqe4kQav0GMvRsqct6y00Q8,8
74
+ freealg-0.7.18.dist-info/RECORD,,
@@ -1,69 +0,0 @@
1
- freealg/__init__.py,sha256=is4de7kygj1be0S3EAcAlW_vGriWjdjHCR-J9NN6wyk,873
2
- freealg/__version__.py,sha256=OaW7Nqbk6j_afc_1rZbViV0T5t8K2yQ3XoJdd50o-lc,23
3
- freealg/_util.py,sha256=RzccUCORgzrI9NdNqwMVugiHU0uDKkJFcIyjFMUOnv8,2518
4
- freealg/_algebraic_form/__init__.py,sha256=etgaRiuipcmxtwHzMVxZwO_qbX8R7m9j39mKvgRyTZg,463
5
- freealg/_algebraic_form/_branch_points.py,sha256=jzvHszw7xFe9B15a5RZV3pGfCGtndvrKJ4GIX6F3qhc,7814
6
- freealg/_algebraic_form/_constraints.py,sha256=xBpsKAL0-Czxf9ZF9tspLpTaFJ1m2DDyqc2KH9bl5Xg,3601
7
- freealg/_algebraic_form/_continuation_algebraic.py,sha256=vVHFlMJYeXm97pgwEceJB2rGJeGOVhk_Ywg6mjoIA-g,19390
8
- freealg/_algebraic_form/_cusp.py,sha256=Vbk3V7pT9iyQSIGOoTMSzN7r7nfyoyXUMCIPXuHFVI4,10581
9
- freealg/_algebraic_form/_cusp_wrap.py,sha256=HkpJj6HEE_Qi2eVBPJYcpKUfDOAGqpbHfF7ccC0sEKE,8309
10
- freealg/_algebraic_form/_decompress.py,sha256=yCGTT3F-0NtGi3oENIS11Zcc7SVaMv_hxvzWuho5huw,22274
11
- freealg/_algebraic_form/_decompress2.py,sha256=2eSoIOj8R1ZuxIuDTXaKgMXY5OXfsNmaTIbE0IiUukk,6585
12
- freealg/_algebraic_form/_decompress4.py,sha256=kq0KJIf_il8ed_wy66hOiwD91ixr77ru3Ovdpz-aetY,21586
13
- freealg/_algebraic_form/_decompress5.py,sha256=I2y2Qvc09LjsSlW8Q1cdIdAFRTJm0cQDDBMBZ6XmuME,22618
14
- freealg/_algebraic_form/_decompress6.py,sha256=Kn2TqWOjH8ifZEnfJ2UlLJZTgYZR1pWQ6nEZwNsadcQ,16774
15
- freealg/_algebraic_form/_decompress7.py,sha256=hRstLXa2hD0QvDhdhsycHujjqFWWn0Z7PbKsFBH1COs,10128
16
- freealg/_algebraic_form/_decompress8.py,sha256=IH05swHhA4vieOUa-4Kbapk5Q4XRggGC2c30W1QpMsY,11717
17
- freealg/_algebraic_form/_decompress9.py,sha256=PR5uSo6BUZZWDyx19MA8KSQVrIxG0sUVn178lo75dq8,11445
18
- freealg/_algebraic_form/_decompress_new.py,sha256=fOHtc1iTvpep3ccQPQFUTWaluv_GS1ahrGE11fJhtAw,12162
19
- freealg/_algebraic_form/_decompress_new_2.py,sha256=kzjYSa4roWm8-ntCjSSG88y_82ZjSHY7jQOPSBgUrUg,54182
20
- freealg/_algebraic_form/_decompress_util.py,sha256=TIaqr3tdMhsKvFskmb5-RNxKWUR-hKkHuCWqq8eWo8o,4836
21
- freealg/_algebraic_form/_edge.py,sha256=X91GeX8nZZ_Lf7C3l7u-JpESDmwRqACYA_G2l1KVs2Y,9604
22
- freealg/_algebraic_form/_homotopy.py,sha256=FdKQhUTjdk6Rmdd5zb8IzDJN0pteHUcgJL3eG_ySUzM,10912
23
- freealg/_algebraic_form/_homotopy2.py,sha256=gvfm0cabEw57zLuOMgGNJGFVqJ8ScF4Zs2FoCQSWbYs,8868
24
- freealg/_algebraic_form/_homotopy3.py,sha256=OfvvX6uc_fpcPuMa53zM8o7XHrCeWeRVjDoSjUlFySE,6345
25
- freealg/_algebraic_form/_homotopy4.py,sha256=dxHisWPIPdzyw1NsW1qS0EbLWtM_uyIcTrHQV3jYGis,10013
26
- freealg/_algebraic_form/_homotopy5.py,sha256=lHWA5tknnZBMymcWt_KQXcI0qLrd_ftUGgd_Qp-o3fs,6306
27
- freealg/_algebraic_form/_moments.py,sha256=R1-EepGsni4he-kNfiP3E3tFqR2Z27fz-ixtSVU2fSE,12427
28
- freealg/_algebraic_form/_sheets_util.py,sha256=6OLzWQKu-gN8rxM2rbpbN8TjNZFmD8UJ-8t9kcZdkCo,4174
29
- freealg/_algebraic_form/_support.py,sha256=Gjp4nVQJb_Syou3M_uroSl52bPTafqKk6IUSJgglKu4,6791
30
- freealg/_algebraic_form/algebraic_form.py,sha256=NshXrMXJBxqfiwMckBD7tmgNjQ4TpawPUKNJuVIS4Gw,37780
31
- freealg/_free_form/__init__.py,sha256=5cnSX7kHci3wKx6-BEFhmVY_NjjmQAq1JjWPTEqETTg,611
32
- freealg/_free_form/_chebyshev.py,sha256=zkyVA8NLf7uUKlJdLz4ijd_SurdsqUgkA5nHGWSybaE,6916
33
- freealg/_free_form/_damp.py,sha256=k2vtBtWOxQBf4qXaWu_En81lQBXbEO4QbxxWpvuVhdE,1802
34
- freealg/_free_form/_decompress.py,sha256=_i37IToZ6oN9DdLXOM8r4y92EbazzcylhcnWwUOpaj0,32108
35
- freealg/_free_form/_density_util.py,sha256=C_0lKA5QzKAdxPRLJvajNO9zaw2QliZ-n7SI8g2a53M,6745
36
- freealg/_free_form/_jacobi.py,sha256=z0X6Ws_BEo_h8EQBzDNHGFhLF9F2PUmnGeBVs0bNL7w,10709
37
- freealg/_free_form/_linalg.py,sha256=GNiQpT193VWxLOejVdAUPQdNJas4ms8US3YR8ZaYXGA,13143
38
- freealg/_free_form/_pade.py,sha256=_y89r7rVc2E5lgiN_ZjnxzW2IaVevWwpq5ISor2NVOo,10310
39
- freealg/_free_form/_plot_util.py,sha256=GKvmc1wjVGeqoomrULPbzBEt6P86FdoR2idBLYh5EDY,20068
40
- freealg/_free_form/_sample.py,sha256=rhfd_83TCTvvJh8cG8TzEYO4OR8VbtND2YCNtWEhMa8,3205
41
- freealg/_free_form/_series.py,sha256=33LLCUe4svmV0eWyzhP_XClfDzccQHTW9WBJlYlLfHY,11475
42
- freealg/_free_form/_support.py,sha256=B6oSqW7MGikpJlTGzNbnMF63LhI5al2ccToqcncTPYs,6624
43
- freealg/_free_form/free_form.py,sha256=UaRLYSvA0ib5wy1xnLy3_9ndCJ6gUdhNswSm0m9-7go,43571
44
- freealg/_geometric_form/__init__.py,sha256=mWsXP0nXs3pY8RfUDhPRTgIfhOigKqw_VmoWnJOw2a0,485
45
- freealg/_geometric_form/_continuation_genus0.py,sha256=4jiXfQaA6w3IhVkJgtKVVjqqtBmavq78FY_YTGUQyY0,4026
46
- freealg/_geometric_form/_continuation_genus1.py,sha256=X8NZ1_6PxhJJLXZk5ASeGwxej_KwH3-ftuXkBrOFmgU,6021
47
- freealg/_geometric_form/_elliptic_functions.py,sha256=Rr_pb1A_FjrJlraYQj2G5shdO6f77aVQN2eQzrvIygI,4109
48
- freealg/_geometric_form/_sphere_maps.py,sha256=NlhTgWXKWXKdyR2dQxMmePsIwHp7IWyYh6uoxgW5Osc,1465
49
- freealg/_geometric_form/_torus_maps.py,sha256=7m5QsbmnXTWHJE5rWjKG3_TnErHEEQ41vW-3hsOc3lo,3338
50
- freealg/_geometric_form/geometric_form.py,sha256=whHKYQdakqShtR-jCEugevnje72JEr9M0HSvZ2BYoKs,33379
51
- freealg/distributions/__init__.py,sha256=sCx2NVcRTaHwvxXpFRU_9unN98ZED6B-xFoFZ2eU9-E,875
52
- freealg/distributions/_chiral_block.py,sha256=YSC_Sk1u1UKlWVE1GGJEjX6VrWqpEEYNxBZ2j8Csc3A,13897
53
- freealg/distributions/_compound_poisson.py,sha256=SFjplOK6NRl3YwFfV3t1TVR_yTn55hQBboFAjHve_ZA,12951
54
- freealg/distributions/_deformed_marchenko_pastur.py,sha256=9WyAYDhpzR2JLqWA8-yUpw6pWvPC5bu4FxrWof17NSM,19249
55
- freealg/distributions/_deformed_wigner.py,sha256=yMA-d2cDsRLyIWUjTlh0Aqh29mw68LNJHOnUUYSkVms,8067
56
- freealg/distributions/_kesten_mckay.py,sha256=Uv3QuUYsfXbPMovXSO_pN3wdkc1fTKGVX7iuHDgBRqk,20089
57
- freealg/distributions/_marchenko_pastur.py,sha256=eemaxDosKpV37TAn9uSiYpljIkVNoTWDJ9ZfYb8tAeY,20646
58
- freealg/distributions/_meixner.py,sha256=GbcWeHrXMxK3Hdj4pCTESlMts9dEPQE1DhClxYprWfg,17590
59
- freealg/distributions/_wachter.py,sha256=5nP4iqxgxltEHhZdb1ytei1zy_bDEI1cvldZdxlIXRk,17090
60
- freealg/distributions/_wigner.py,sha256=epgx6ne6R_7to5j6-QsWIAVFJQFquWMmYgnZYMN4wUI,16069
61
- freealg/visualization/__init__.py,sha256=NLq_zwueF7ytZ8sl8zLPqm-AODxxXNvfMozHGmmklcE,435
62
- freealg/visualization/_glue_util.py,sha256=2oKnEYjUOS4OZfivmciVLauVr53kyHMwi6c2zRKilTQ,693
63
- freealg/visualization/_rgb_hsv.py,sha256=rEskxXxSlKKxIrHRslVkgxHtD010L3ge9YtcVsOPl8E,3650
64
- freealg-0.7.17.dist-info/licenses/AUTHORS.txt,sha256=0b67Nz4_JgIzUupHJTAZxu5QdSUM_HRM_X_w4xCb17o,30
65
- freealg-0.7.17.dist-info/licenses/LICENSE.txt,sha256=J-EEYEtxb3VVf_Bn1TYfWnpY5lMFIM15iLDDcnaDTPA,1443
66
- freealg-0.7.17.dist-info/METADATA,sha256=aRVcV7-c3J0nYZgltd6sSnqeczyVL8deqHHKJ9LV1SQ,5537
67
- freealg-0.7.17.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
68
- freealg-0.7.17.dist-info/top_level.txt,sha256=eR2wrgYwDdnnJ9Zf5PruPqe4kQav0GMvRsqct6y00Q8,8
69
- freealg-0.7.17.dist-info/RECORD,,
File without changes
File without changes