piegy 1.1.1__py3-none-any.whl → 1.1.3__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.
piegy/__version__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = '1.0.0'
1
+ __version__ = '1.1.2'
2
2
 
3
3
  '''
4
4
  version history:
@@ -12,8 +12,10 @@ version history:
12
12
  0.1.8: updated installation in README
13
13
  0.1.9: first round of full debugging
14
14
 
15
- 1.0.0: first version in PyPI
15
+ 1.0.0: first version in PyPI.
16
16
  1.1.0: debugging. Updated a range of functions, in the following modules: figures, videos, test_var, model, figure_tools
17
17
  1.1.1: minor debugging in model module.
18
+ 1.1.2: fix text bad location in figure_tools, update labeling and titling in figures and test_var. Add dpi param to make_video in videos. Remove reset_data function in model.
19
+ 1.1.3: update README.
18
20
 
19
21
  '''
piegy/figures.py CHANGED
@@ -72,9 +72,9 @@ def UV_heatmap(sim, ax_U = None, ax_V = None, U_color = 'Purples', V_color = 'Gr
72
72
 
73
73
  #### plot ####
74
74
 
75
- U_title = figure_t.gen_title('U', start, end)
75
+ U_title = figure_t.gen_title('Popu U', start, end)
76
76
  U_text = figure_t.gen_text(np.mean(U_ave), np.std(U_ave))
77
- V_title = figure_t.gen_title('V', start, end)
77
+ V_title = figure_t.gen_title('Popu V', start, end)
78
78
  V_text = figure_t.gen_text(np.mean(V_ave), np.std(V_ave))
79
79
 
80
80
  ax_U = figure_t.heatmap(U_ave, ax_U, U_color, annot, fmt, U_title, U_text)
@@ -110,9 +110,9 @@ def UV_bar(sim, ax_U = None, ax_V = None, U_color = 'purple', V_color = 'green',
110
110
 
111
111
  #### plot ####
112
112
 
113
- U_title = figure_t.gen_title('U', start, end)
113
+ U_title = figure_t.gen_title('Population U', start, end)
114
114
  U_text = figure_t.gen_text(np.mean(U_ave), np.std(U_ave))
115
- V_title = figure_t.gen_title('V', start, end)
115
+ V_title = figure_t.gen_title('Population V', start, end)
116
116
  V_text = figure_t.gen_text(np.mean(V_ave), np.std(V_ave))
117
117
 
118
118
  ax_U = figure_t.bar(U_ave, ax = ax_U, color = U_color, xlabel = 'patches', ylabel = 'U', title = U_title, text = U_text)
@@ -405,7 +405,6 @@ def pi_dyna(sim, ax = None, interval = 20, grid = True):
405
405
  ax.plot(xaxis, U_curve, CURVE_TYPE, label = r'$p_U$')
406
406
  ax.plot(xaxis, V_curve, CURVE_TYPE, label = r'$p_V$')
407
407
  ax.plot(xaxis, total_curve, CURVE_TYPE, label = 'total')
408
- ax.set_xlim(0, sim.maxtime)
409
408
  ax.set_xlabel('Time')
410
409
  ax.set_ylabel('Payoff')
411
410
  ax.set_title('Payoff ' + r'$p_U$' + ' & ' + r'$p_V$' + ' over time')
@@ -492,7 +491,7 @@ def pi_std(sim, ax = None, interval = 20, grid = True):
492
491
 
493
492
 
494
493
 
495
- def UV_pi(sim, ax_U = None, ax_V = None, U_color = 'violet', V_color = 'yellowgreen', alpha = 0.4, start = 0.95, end = 1.0):
494
+ def UV_pi(sim, ax_U = None, ax_V = None, U_color = 'violet', V_color = 'yellowgreen', alpha = 0.5, start = 0.95, end = 1.0):
496
495
  '''
497
496
  Make two scatter plots: x-axes are population and y-axes are payoff in a specified time interval.
498
497
  Reveals relationship between population and payoff.
piegy/model.py CHANGED
@@ -33,7 +33,7 @@ from timeit import default_timer as timer
33
33
 
34
34
 
35
35
  # data type used by simulation.U and simulation.V
36
- UV_DTYPE = 'float32'
36
+ UV_DTYPE = 'float64'
37
37
 
38
38
  # data type used by simulation.U_pi and V_pi
39
39
  PI_DTYPE = 'float64'
@@ -282,7 +282,7 @@ class simulation:
282
282
 
283
283
  def __init__(self, N, M, maxtime, record_itv, sim_time, boundary, I, X, P, print_pct = 25, seed = None, UV_dtype = UV_DTYPE, pi_dtype = PI_DTYPE):
284
284
 
285
- self.check_valid_input(N, M, maxtime, record_itv, sim_time, boundary, I, X, P, print_pct, seed)
285
+ self.check_valid_input(N, M, maxtime, record_itv, sim_time, boundary, I, X, P, print_pct)
286
286
 
287
287
  self.N = N # int, N x M is spatial dimension
288
288
  self.M = M # int, can't be 1. If want to make 1D space, use N = 1. And this model doesn't work for 1x1 space (causes NaN)
@@ -318,7 +318,7 @@ class simulation:
318
318
  self.V_pi = np.zeros((self.N, self.M, self.max_record), dtype = self.pi_dtype)
319
319
 
320
320
 
321
- def check_valid_input(self, N, M, maxtime, record_itv, sim_time, boundary, I, X, P, print_pct, seed):
321
+ def check_valid_input(self, N, M, maxtime, record_itv, sim_time, boundary, I, X, P, print_pct):
322
322
  # check whether the inputs are valid
323
323
  # seed, UV_dtype, pi_dtype is handled by numpy
324
324
 
@@ -355,10 +355,8 @@ class simulation:
355
355
  if print_pct <= 0:
356
356
  raise ValueError('Please use an int > 0 for print_pct or None for not printing progress.')
357
357
 
358
- # seed is checked by number
359
-
360
358
 
361
- def check_valid_data(self, data_empty, max_record, compress_itv, U, V, U_pi, V_pi):
359
+ def check_valid_data(self, data_empty, max_record, compress_itv):
362
360
  # check whether a set of data is valid, used when reading a saved model
363
361
  if type(data_empty) != bool:
364
362
  raise TypeError('data_empty not a bool')
@@ -482,21 +480,16 @@ class simulation:
482
480
  # set seed
483
481
  self.seed = seed
484
482
 
485
-
486
- def reset_data(self):
487
- # clear all data stored, set all to 0
488
- self.init_storage()
489
-
490
483
 
491
484
  def clear(self):
492
- # clear data by simply reseting
493
- self.reset_data()
485
+ # clear all data stored, set all to 0
486
+ self.init_storage()
494
487
 
495
488
 
496
489
  def set_data(self, data_empty, max_record, compress_itv, U, V, U_pi, V_pi):
497
490
  # set data to the given data values
498
491
  # copies are made
499
- self.check_valid_data(data_empty, max_record, compress_itv, U, V, U_pi, V_pi)
492
+ self.check_valid_data(data_empty, max_record, compress_itv)
500
493
 
501
494
  self.data_empty = data_empty
502
495
  self.max_record = max_record
piegy/test_var.py CHANGED
@@ -193,12 +193,12 @@ def var_UV1(var, values, var_dirs, ax_U = None, ax_V = None, start = 0.95, end =
193
193
  var_disp = PATCH_VAR_DISP[var]
194
194
 
195
195
  ax_U.set_xlabel(var_disp)
196
- ax_U.set_ylabel(r'$U$')
196
+ ax_U.set_ylabel('Population ' + r'$U$')
197
197
  ax_U.plot(values, U_ave, DOTTED_CURVE_TYPE, color = U_color)
198
198
  ax_U.set_title(figure_t.gen_title(var_disp + r'$\,-\,U$', start, end))
199
199
 
200
200
  ax_V.set_xlabel(var_disp)
201
- ax_V.set_ylabel(r'$V$')
201
+ ax_V.set_ylabel('Population ' + r'$V$')
202
202
  ax_V.plot(values, V_ave, DOTTED_CURVE_TYPE, color = V_color)
203
203
  ax_V.set_title(figure_t.gen_title(var_disp + r'$\,-\,V$', start, end))
204
204
 
@@ -277,7 +277,7 @@ def var_UV2(var1, var2, values1, values2, var_dirs, ax_U = None, ax_V = None, va
277
277
  color_k = cmap_U(k / len(values1))[:3] + (rgb_alpha,)
278
278
  ax_U.plot(values2, U_ave[k], DOTTED_CURVE_TYPE, label = label, color = color_k)
279
279
  ax_U.set_xlabel(var2_disp)
280
- ax_U.set_ylabel(r'$U$')
280
+ ax_U.set_ylabel('Population ' + r'$U$')
281
281
  ax_U.set_title(figure_t.gen_title(var1_disp + ',' + var2_disp + r'$\,-\,U$', start, end))
282
282
  ax_U.legend()
283
283
 
@@ -294,7 +294,7 @@ def var_UV2(var1, var2, values1, values2, var_dirs, ax_U = None, ax_V = None, va
294
294
  color_k = cmap_V(k / len(values1))[:3] + (rgb_alpha,)
295
295
  ax_V.plot(values2, V_ave[k], DOTTED_CURVE_TYPE, label = label, color = color_k)
296
296
  ax_V.set_xlabel(var2_disp)
297
- ax_V.set_ylabel(r'$V$')
297
+ ax_V.set_ylabel('Population ' + r'$V$')
298
298
  ax_V.set_title(figure_t.gen_title(var1_disp + ',' + var2_disp + r'$\,-\,V$', start, end))
299
299
  ax_V.legend()
300
300
 
@@ -347,14 +347,14 @@ def var_pi1(var, values, var_dirs, ax_U = None, ax_V = None, start = 0.95, end =
347
347
  var_disp = PATCH_VAR_DISP[var]
348
348
 
349
349
  ax_U.set_xlabel(var_disp)
350
- ax_U.set_ylabel(r'$\pi_U$')
350
+ ax_U.set_ylabel('Payoff ' + r'$p_U$')
351
351
  ax_U.plot(values, U_ave, DOTTED_CURVE_TYPE, color = U_color)
352
- ax_U.set_title(figure_t.gen_title(var_disp + r'$\,-\,\pi_U$', start, end))
352
+ ax_U.set_title(figure_t.gen_title(var_disp + r'$\,-\,p_U$', start, end))
353
353
 
354
354
  ax_V.set_xlabel(var_disp)
355
- ax_V.set_ylabel(r'$\pi_V$')
355
+ ax_V.set_ylabel('Payoff ' + r'$p_V$')
356
356
  ax_V.plot(values, V_ave, DOTTED_CURVE_TYPE, color = V_color)
357
- ax_V.set_title(figure_t.gen_title(var_disp + r'$\,-\,\pi_V$', start, end))
357
+ ax_V.set_title(figure_t.gen_title(var_disp + r'$\,-\,p_V$', start, end))
358
358
 
359
359
  return ax_U, ax_V
360
360
 
@@ -428,8 +428,8 @@ def var_pi2(var1, var2, values1, values2, var_dirs, ax_U = None, ax_V = None, va
428
428
  color_k = cmap_U(k / len(values1))[:3] + (rgb_alpha,)
429
429
  ax_U.plot(values2, U_ave[k], DOTTED_CURVE_TYPE, label = label, color = color_k)
430
430
  ax_U.set_xlabel(var2_disp)
431
- ax_U.set_ylabel(r'$\pi_{V}$')
432
- ax_U.set_title(figure_t.gen_title(var1_disp + ',' + var2_disp + r'$\,-\,\pi_U$', start, end))
431
+ ax_U.set_ylabel('Payoff ' + r'$p_{V}$')
432
+ ax_U.set_title(figure_t.gen_title(var1_disp + ',' + var2_disp + r'$\,-\,p_U$', start, end))
433
433
  ax_U.legend()
434
434
 
435
435
  cmap_V = plt.get_cmap(V_color)
@@ -445,8 +445,8 @@ def var_pi2(var1, var2, values1, values2, var_dirs, ax_U = None, ax_V = None, va
445
445
  color_k = cmap_V(k / len(values1))[:3] + (rgb_alpha,)
446
446
  ax_V.plot(values2, V_ave[k], DOTTED_CURVE_TYPE, label = label, color = color_k)
447
447
  ax_V.set_xlabel(var2_disp)
448
- ax_V.set_ylabel(r'$\pi_{U}$')
449
- ax_V.set_title(figure_t.gen_title(var1_disp + ',' + var2_disp + r'$\,-\,\pi_V$', start, end))
448
+ ax_V.set_ylabel('Payoff ' + r'$p_{U}$')
449
+ ax_V.set_title(figure_t.gen_title(var1_disp + ',' + var2_disp + r'$\,-\,p_V$', start, end))
450
450
  ax_V.legend()
451
451
 
452
452
  return ax_U, ax_V
@@ -43,10 +43,10 @@ def heatmap(data, ax = None, cmap = "Greens", annot = False, fmt = '.3g', title
43
43
  _, ax = plt.subplots()
44
44
 
45
45
  if text != None:
46
- ax.text(0.66, 0.9, text, size = 10, linespacing = 1.5, transform = plt.gcf().transFigure)
46
+ ax.text(0.8, 1.025, text, size = 10, linespacing = 1.5, transform = ax.transAxes)
47
47
 
48
48
  ax = sns.heatmap(data, ax = ax, cmap = cmap, annot = annot, fmt = fmt)
49
- ax.set_title(title)
49
+ ax.set_title(title, x = 0.5, y = 1)
50
50
 
51
51
  return ax
52
52
 
@@ -80,12 +80,12 @@ def bar(data, ax = None, color = "green", xlabel = None, ylabel = None, title =
80
80
  _, ax = plt.subplots()
81
81
 
82
82
  if text != None:
83
- ax.text(0.66, 0.9, text, size = 10, linespacing = 1.5, transform = plt.gcf().transFigure)
83
+ ax.text(0.7, 1.025, text, size = 10, linespacing = 1.5, transform = ax.transAxes)
84
84
 
85
85
  ax.bar(x = xaxis, height = data, color = color)
86
86
  ax.set_xlabel(xlabel)
87
87
  ax.set_ylabel(ylabel)
88
- ax.set_title(title)
88
+ ax.set_title(title, x = 0.5, y = 1)
89
89
 
90
90
  return ax
91
91
 
@@ -121,7 +121,7 @@ def gen_title(title, start, end):
121
121
  '''
122
122
  Generate a title for plot when it's about an interval of time.
123
123
  '''
124
- title += ", " + str(round(start * 100, 1)) + " ~ " + str(round(end * 100, 1)) + "%"
124
+ title += ", " + str(round(start * 100, 1)) + "~" + str(round(end * 100, 1)) + "%"
125
125
  return title
126
126
 
127
127
 
piegy/videos.py CHANGED
@@ -201,7 +201,7 @@ def make_mp4(video_dir, frame_dir, fps):
201
201
 
202
202
 
203
203
 
204
- def make_video(sim, func_name = 'UV_heatmap', frames = 100, fps = 30, U_color = 'Greens', V_color = 'Purples', annot = False, fmt = '.3g', del_frames = False, dirs = 'videos'):
204
+ def make_video(sim, func_name = 'UV_heatmap', frames = 100, dpi = 200, fps = 30, U_color = 'Greens', V_color = 'Purples', annot = False, fmt = '.3g', del_frames = False, dirs = 'videos'):
205
205
  '''
206
206
  Make a mp4 video based on simulation results.
207
207
 
@@ -209,6 +209,7 @@ def make_video(sim, func_name = 'UV_heatmap', frames = 100, fps = 30, U_color =
209
209
  - sim: a stochastic_model.simulation object, the simulation results.
210
210
  - func_name: what function to use to make the frames. Should be one of the functions in figures.py
211
211
  - frames: how many frames to make. Use more frames for more smooth evolutions.
212
+ - dpi: dots per inch.
212
213
  - fps: frames per second.
213
214
  - U_color: color for U's videos. Color maps or regular colors, based on what function you use.
214
215
  - V_color: color for V's videos.
@@ -274,8 +275,8 @@ def make_video(sim, func_name = 'UV_heatmap', frames = 100, fps = 30, U_color =
274
275
  ax_V.set_xlim(U_xlim)
275
276
  ax_V.set_xlim(V_xlim)
276
277
 
277
- fig_U.savefig(U_frame_dirs + '/' + 'U_frame_' + str(i) + '.png', pad_inches = 0.25)
278
- fig_V.savefig(V_frame_dirs + '/' + 'V_frame_' + str(i) + '.png', pad_inches = 0.25)
278
+ fig_U.savefig(U_frame_dirs + '/' + 'U_frame_' + str(i) + '.png', pad_inches = 0.25, dpi = dpi)
279
+ fig_V.savefig(V_frame_dirs + '/' + 'V_frame_' + str(i) + '.png', pad_inches = 0.25, dpi = dpi)
279
280
 
280
281
  plt.close(fig_U)
281
282
  plt.close(fig_V)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: piegy
3
- Version: 1.1.1
3
+ Version: 1.1.3
4
4
  Summary: Payoff-Driven Stochastic Spatial Model for Evolutionary Game Theory
5
5
  Author-email: Chenning Xu <cxu7@caltech.edu>
6
6
  License: BSD 3-Clause License
@@ -55,7 +55,7 @@ Dynamic: license-file
55
55
 
56
56
  # piegy
57
57
 
58
- The package full name is: Payoff-Driven Stochastic Spatial Model for Evolutionary Game Theory
58
+ The package full name is: Payoff-Driven Stochastic Spatial Model for Evolutionary Game Theory. "pi" refers to "payoff, and "egy" are taken from "Evolutionary Game Theory".
59
59
 
60
60
  Provides a stochastic spatial model for simulating the interaction and evolution of two species in either 1D or 2D space, as well as analytic tools.
61
61
 
@@ -69,7 +69,7 @@ pip install piegy
69
69
 
70
70
  ## Documentation and Source
71
71
 
72
- See source code at: [piegy GitHub repository](https://github.com/Chenning04/piegy.git).
72
+ See source code at: [piegy GitHub-repo](https://github.com/Chenning04/piegy.git).
73
73
  The *piegy* documentation at: [piegy Documentation](https://piegy.readthedocs.io/en/).
74
74
 
75
75
  ## How the Model Works
@@ -80,7 +80,7 @@ We use the Gillepie algorithm as the fundamental event-selection algorithm. At e
80
80
 
81
81
  ## Analytic Tools
82
82
 
83
- The *piegy* package also provides a wide range of analytic and supportive tools alongside the main model, such as plotting, numerical tools, data saving & reading, etc. We also provide the *piegy.videos* module for more direct visualizations like how population distribution change over time.
83
+ The *piegy* package also provides a wide range of analytic and supportive tools alongside the main model, such as plotting, numerical tools, data saving & reading, etc. We also provide the *piegy.videos* module for more direct visualizations such as how population distribution change over time.
84
84
 
85
85
  ## Examples
86
86
 
@@ -88,15 +88,18 @@ To get started, simply get our demo model and run simulation:
88
88
 
89
89
  ```python
90
90
  from piegy import model, figures
91
+ import matplotlib.pyplot as plt
91
92
 
92
93
  sim = model.demo_model()
93
94
  model.run(sim)
94
95
 
95
- dynamics = figures.UV_dyna(sim)
96
- U_hmap, V_hmap = figures.UV_heatmap(sim)
96
+ fig1, ax1 = plt.subplots()
97
+ figures.UV_dyna(sim, ax1)
98
+ fig2, ax2 = plt.subplots(1, 2, figsize = (12.8, 4.8))
99
+ U_hmap, V_hmap = figures.UV_heatmap(sim, ax2[0], ax2[1])
97
100
  ```
98
101
 
99
- The figures reveal the population dynamics and steady state population distribution.
102
+ The figures reveal population dynamics and steady state population distribution.
100
103
 
101
104
 
102
105
  ## Acknowledgments
@@ -0,0 +1,16 @@
1
+ piegy/__init__.py,sha256=Lrh6NegSvo6LOCXg_tBTu804eicnHpQY2zmE0FchjKE,3241
2
+ piegy/__version__.py,sha256=bfx1My4_mpMZlHLCS9hPCp888d56dz178h1mb2itmNo,724
3
+ piegy/analysis.py,sha256=1cF06igQMGJGVjLiyhtgepGk8fYhzvL0orI48tOK1qY,8713
4
+ piegy/data_tools.py,sha256=lNFOX4H0o_WfRSNQoC9QGCK66-IdrZ0zCnz12N-Ael4,3599
5
+ piegy/figures.py,sha256=xXvr9LcGGhpeVibWTnIiDQlc_kBPibT8qYU5ALKS-zw,19063
6
+ piegy/model.py,sha256=iTC0Ybp4qtrCcX_NcmEEk4bbqIXqUh470eF0CPbeEK0,45311
7
+ piegy/test_var.py,sha256=HpdJf8i90iWteoJaVnYt37NJo1it2cf9srCsuYtwc7k,23628
8
+ piegy/videos.py,sha256=ReLrMwwgZfOgtsXPW5q29AAyFv0_E4A3DKo6BUFzups,10213
9
+ piegy/tools/__init__.py,sha256=eYOl_HJHDonYexfrmKh3koOlxvtSo46vH6jHvCEEB4k,300
10
+ piegy/tools/figure_tools.py,sha256=IWxMF_Yali37l2knzKLAcvrE8ndAQhCixfUu1_sWEf0,6975
11
+ piegy/tools/file_tools.py,sha256=ncxFWeHfIE-GYLQlOrahFlhBgqPyuY3R5_93fpQeCEs,630
12
+ piegy-1.1.3.dist-info/licenses/LICENSE.txt,sha256=wfzEht_CxOcfGGmg3f3at4mWJb9rTBjA51mXLl_3O3g,1498
13
+ piegy-1.1.3.dist-info/METADATA,sha256=HhWIqo8y685rQPZv-fZnDhz-n1O4gW4aZZ4FfcF3UHE,5291
14
+ piegy-1.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
+ piegy-1.1.3.dist-info/top_level.txt,sha256=k4QLYL8PqdqDuy95-4NZD_FVLqJDsmq67tpKkBn4vMw,6
16
+ piegy-1.1.3.dist-info/RECORD,,
@@ -1,16 +0,0 @@
1
- piegy/__init__.py,sha256=Lrh6NegSvo6LOCXg_tBTu804eicnHpQY2zmE0FchjKE,3241
2
- piegy/__version__.py,sha256=8IfclnXlmVE5p-odcoFI_9v7RIOmz2Cxd8Dvx1dMjNc,526
3
- piegy/analysis.py,sha256=1cF06igQMGJGVjLiyhtgepGk8fYhzvL0orI48tOK1qY,8713
4
- piegy/data_tools.py,sha256=lNFOX4H0o_WfRSNQoC9QGCK66-IdrZ0zCnz12N-Ael4,3599
5
- piegy/figures.py,sha256=xR4NKuHc-7E3ld6NjyAAVcJG8CtIoKoM4mqd8qPOXsg,19063
6
- piegy/model.py,sha256=NkP_Apnun3MhATSihR4_irnA-8p4FW879xQjCXVEPMA,45502
7
- piegy/test_var.py,sha256=PDtCCou-kFXumEe2EdAQNKJohwHH58ifLSsp5xQraVI,23532
8
- piegy/videos.py,sha256=vPl1aTIOaWxIUsxX5yL3JPiuf-Um0bPo7qYIHZP0bo0,10143
9
- piegy/tools/__init__.py,sha256=eYOl_HJHDonYexfrmKh3koOlxvtSo46vH6jHvCEEB4k,300
10
- piegy/tools/figure_tools.py,sha256=tAI5sBMsxN_1BN5_G_3UoMcDeYTj2DXr8l4HpPl9FSs,6961
11
- piegy/tools/file_tools.py,sha256=ncxFWeHfIE-GYLQlOrahFlhBgqPyuY3R5_93fpQeCEs,630
12
- piegy-1.1.1.dist-info/licenses/LICENSE.txt,sha256=wfzEht_CxOcfGGmg3f3at4mWJb9rTBjA51mXLl_3O3g,1498
13
- piegy-1.1.1.dist-info/METADATA,sha256=qawzMEDrKZITzujlqMf_9WJoEklAGFYcOw3I2u8plbQ,5097
14
- piegy-1.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
- piegy-1.1.1.dist-info/top_level.txt,sha256=k4QLYL8PqdqDuy95-4NZD_FVLqJDsmq67tpKkBn4vMw,6
16
- piegy-1.1.1.dist-info/RECORD,,
File without changes