mergeron 2025.739439.11__py3-none-any.whl → 2025.739439.13__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 mergeron might be problematic. Click here for more details.

mergeron/gen/upp_tests.py CHANGED
@@ -17,7 +17,7 @@ from .. import ( # noqa
17
17
  UPPAggrSelector,
18
18
  )
19
19
  from ..core import guidelines_boundaries as gbl # noqa: TID252
20
- from . import INVResolution, MarketSampleData, UPPTestRegime, UPPTestsCounts
20
+ from . import INVResolution, MarketsData, UPPTestRegime, UPPTestsCounts
21
21
  from . import enforcement_stats as esl
22
22
 
23
23
  __version__ = VERSION
@@ -32,7 +32,7 @@ class INVRESCntsArgs(TypedDict, total=False):
32
32
 
33
33
 
34
34
  def compute_upp_test_counts(
35
- _market_data_sample: MarketSampleData,
35
+ _market_data_sample: MarketsData,
36
36
  _upp_test_parms: gbl.HMGThresholds,
37
37
  _upp_test_regime: UPPTestRegime,
38
38
  /,
@@ -70,7 +70,7 @@ def compute_upp_test_counts(
70
70
 
71
71
  np.einsum(
72
72
  "ij,ij,ij->ij",
73
- _market_data_sample.divr_array,
73
+ _market_data_sample.divratio_array,
74
74
  _market_data_sample.pcm_array[:, ::-1],
75
75
  _market_data_sample.price_array[:, ::-1] / _market_data_sample.price_array,
76
76
  out=guppi_array,
@@ -78,16 +78,18 @@ def compute_upp_test_counts(
78
78
 
79
79
  np.divide(
80
80
  np.einsum(
81
- "ij,ij->ij", _market_data_sample.pcm_array, _market_data_sample.divr_array
81
+ "ij,ij->ij",
82
+ _market_data_sample.pcm_array,
83
+ _market_data_sample.divratio_array,
82
84
  ),
83
- 1 - _market_data_sample.divr_array,
85
+ 1 - _market_data_sample.divratio_array,
84
86
  out=ipr_array,
85
87
  )
86
88
 
87
89
  np.divide(ipr_array, 1 - _market_data_sample.pcm_array, out=cmcr_array)
88
90
 
89
91
  (divr_test_vector,) = _compute_test_array_seq(
90
- (_market_data_sample.divr_array,),
92
+ (_market_data_sample.divratio_array,),
91
93
  _market_data_sample.frmshr_array,
92
94
  _upp_test_regime.divr_aggregator,
93
95
  )
@@ -155,78 +157,42 @@ def compute_upp_test_counts(
155
157
 
156
158
  def _compute_test_array_seq(
157
159
  _test_measure_seq: tuple[ArrayDouble, ...],
158
- _wt_array: ArrayDouble,
160
+ _weights: ArrayDouble,
159
161
  _aggregator: UPPAggrSelector,
160
162
  ) -> tuple[ArrayDouble, ...]:
161
- _wt_array = (
162
- _wt_array / np.einsum("ij->i", _wt_array)[:, None]
163
- if _aggregator
164
- in {
165
- UPPAggrSelector.CPA,
166
- UPPAggrSelector.CPD,
167
- UPPAggrSelector.OSA,
168
- UPPAggrSelector.OSD,
169
- }
170
- else np.array([0.5, 0.5], float)
171
- )
172
-
173
- match _aggregator:
174
- case UPPAggrSelector.AVG:
175
- test_array_seq = (
176
- 1 / 2 * np.einsum("ij->i", _g)[:, None] for _g in _test_measure_seq
177
- )
178
- case UPPAggrSelector.CPA:
179
- test_array_seq = (
180
- np.einsum("ij,ij->i", _wt_array[:, ::-1], _g)[:, None]
181
- for _g in _test_measure_seq
182
- )
183
- case UPPAggrSelector.CPD:
184
- test_array_seq = (
185
- np.sqrt(np.einsum("ij,ij,ij->i", _wt_array[:, ::-1], _g, _g))[:, None]
186
- for _g in _test_measure_seq
187
- )
188
- case UPPAggrSelector.CPG:
189
- test_array_seq = (
190
- np.expm1(
191
- np.einsum("ij,ij->i", _wt_array[:, ::-1], np.log1p(_g))[:, None]
192
- )
193
- for _g in _test_measure_seq
194
- )
195
- case UPPAggrSelector.DIS:
196
- test_array_seq = (
197
- np.sqrt(1 / 2 * np.einsum("ij,ij->i", _g, _g))[:, None]
198
- for _g in _test_measure_seq
199
- )
200
- case UPPAggrSelector.GMN:
201
- test_array_seq = (
202
- np.expm1(np.einsum("ij->i", np.log1p(_g))[:, None] / _g.shape[1])
203
- for _g in _test_measure_seq
204
- )
205
- case UPPAggrSelector.MAX:
206
- test_array_seq = (_g.max(axis=1, keepdims=True) for _g in _test_measure_seq)
207
- case UPPAggrSelector.MIN:
208
- test_array_seq = (_g.min(axis=1, keepdims=True) for _g in _test_measure_seq)
209
- case UPPAggrSelector.OSA:
210
- test_array_seq = (
211
- np.einsum("ij,ij->i", _wt_array, _g)[:, None]
212
- for _g in _test_measure_seq
213
- )
214
- case UPPAggrSelector.OSD:
215
- test_array_seq = (
216
- np.sqrt(np.einsum("ij,ij,ij->i", _wt_array, _g, _g)[:, None])
217
- for _g in _test_measure_seq
218
- )
219
- case UPPAggrSelector.OSG:
220
- test_array_seq = (
221
- np.expm1(np.einsum("ij,ij->i", _wt_array, np.log1p(_g))[:, None])
222
- for _g in _test_measure_seq
223
- )
224
- case _:
225
- raise ValueError("GUPPI/diversion ratio aggregation method is invalid.")
163
+ if _aggregator in {UPPAggrSelector.CPA, UPPAggrSelector.CPD}:
164
+ _weights = _weights[:, ::-1] / np.einsum("ij->i", _weights)[:, None]
165
+ elif _aggregator in {UPPAggrSelector.OSA, UPPAggrSelector.OSD}:
166
+ _weights = _weights / np.einsum("ij->i", _weights)[:, None]
167
+ else:
168
+ _weights = np.array([0.5, 0.5], float)
169
+
170
+ # Use weights calculated above to compute average, distance, and geometric mean:
171
+ if _aggregator in {UPPAggrSelector.AVG, UPPAggrSelector.CPA, UPPAggrSelector.OSA}:
172
+ test_array_seq = (
173
+ np.einsum("ij,ij->i", _weights, _g)[:, None] for _g in _test_measure_seq
174
+ )
175
+ elif _aggregator in {UPPAggrSelector.DIS, UPPAggrSelector.CPD, UPPAggrSelector.OSD}:
176
+ test_array_seq = (
177
+ np.sqrt(np.einsum("ij,ij,ij->i", _weights, _g, _g))[:, None]
178
+ for _g in _test_measure_seq
179
+ )
180
+ elif _aggregator in {UPPAggrSelector.CPG, UPPAggrSelector.GMN, UPPAggrSelector.OSG}:
181
+ test_array_seq = (
182
+ np.expm1(np.einsum("ij,ij->i", _weights[:, ::-1], np.log1p(_g)))[:, None]
183
+ for _g in _test_measure_seq
184
+ )
185
+ elif _aggregator == UPPAggrSelector.MAX:
186
+ test_array_seq = (_g.max(axis=1, keepdims=True) for _g in _test_measure_seq)
187
+ elif _aggregator == UPPAggrSelector.MIN:
188
+ test_array_seq = (_g.min(axis=1, keepdims=True) for _g in _test_measure_seq)
189
+ else:
190
+ raise ValueError("GUPPI/diversion ratio aggregation method is invalid.")
226
191
  return tuple(test_array_seq)
227
192
 
228
193
 
229
194
  if __name__ == "__main__":
230
195
  print(
231
- "This module defines classes with methods for generating UPP test arrays and UPP test-counts arrays on given data."
196
+ "This module defines functionsfor generating UPP test arrays "
197
+ "and UPP test-counts arrays on given data."
232
198
  )
@@ -6,6 +6,7 @@ and may provide improved precision than core functions, but tend to have
6
6
  poor performance
7
7
 
8
8
  """
9
+
9
10
  from __future__ import annotations
10
11
 
11
12
  from typing import Literal
@@ -15,7 +16,7 @@ from mpmath import mp, mpf # type: ignore
15
16
  from scipy.spatial.distance import minkowski # type: ignore
16
17
  from sympy import lambdify, simplify, solve, symbols # type: ignore
17
18
 
18
- from .. import DEFAULT_REC_RATIO, VERSION # noqa: TID252
19
+ from .. import DEFAULT_REC, VERSION # noqa: TID252
19
20
  from ..core import GuidelinesBoundary, MPFloat # noqa: TID252
20
21
  from ..core import guidelines_boundary_functions as gbf # noqa: TID252
21
22
  from . import GuidelinesBoundaryCallable
@@ -98,11 +99,11 @@ def hhi_delta_boundary_qdtr(_dh_val: float = 0.01, /) -> GuidelinesBoundaryCalla
98
99
 
99
100
  def diversion_share_boundary_qdtr_wtd_avg(
100
101
  _delta_star: float = 0.075,
101
- _r_val: float = DEFAULT_REC_RATIO,
102
+ _r_val: float = DEFAULT_REC,
102
103
  /,
103
104
  *,
104
105
  weighting: Literal["own-share", "cross-product-share"] | None = "own-share",
105
- recapture_form: Literal["inside-out", "proportional"] = "inside-out",
106
+ recapture_form: Literal["inside-out", "fixed"] = "inside-out",
106
107
  ) -> GuidelinesBoundaryCallable:
107
108
  R"""
108
109
  Share combinations for the share-weighted average share-ratio boundary.
@@ -112,12 +113,12 @@ def diversion_share_boundary_qdtr_wtd_avg(
112
113
  _delta_star
113
114
  Diversion share, :math:`\overline{d} / \overline{r}` or :math:`\overline{g} / (m^* \cdot \overline{r})`.
114
115
  _r_val
115
- Recapture ratio.
116
+ Recapture rate.
116
117
  weighting
117
118
  Whether "own-share" or "cross-product-share" (or None for simple, unweighted average)
118
119
  recapture_form
119
- Whether recapture-ratio is MNL-consistent ("inside-out") or has fixed
120
- value for both merging firms ("proportional").
120
+ Whether recapture rate is share-proportional ("inside-out") or has fixed
121
+ value for both merging firms ("fixed").
121
122
 
122
123
  Returns
123
124
  -------
@@ -211,12 +212,12 @@ def diversion_share_boundary_qdtr_wtd_avg(
211
212
 
212
213
  def diversion_share_boundary_distance(
213
214
  _delta_star: float = 0.075,
214
- _r_val: float = DEFAULT_REC_RATIO,
215
+ _r_val: float = DEFAULT_REC,
215
216
  /,
216
217
  *,
217
218
  agg_method: Literal["arithmetic mean", "distance"] = "arithmetic mean",
218
219
  weighting: Literal["own-share", "cross-product-share"] | None = "own-share",
219
- recapture_form: Literal["inside-out", "proportional"] = "inside-out",
220
+ recapture_form: Literal["inside-out", "fixed"] = "inside-out",
220
221
  dps: int = 5,
221
222
  ) -> GuidelinesBoundary:
222
223
  R"""
@@ -233,14 +234,14 @@ def diversion_share_boundary_distance(
233
234
  _delta_star
234
235
  Diversion share, :math:`\overline{d} / \overline{r}` or :math:`\overline{g} / (m^* \cdot \overline{r})`.
235
236
  _r_val
236
- Recapture ratio.
237
+ Recapture rate.
237
238
  agg_method
238
239
  Whether "arithmetic mean" or "distance".
239
240
  weighting
240
241
  Whether "own-share" or "cross-product-share".
241
242
  recapture_form
242
- Whether recapture-ratio is MNL-consistent ("inside-out") or has fixed
243
- value for both merging firms ("proportional").
243
+ Whether recapture rate is share-proportional ("inside-out") or has fixed
244
+ value for both merging firms ("fixed").
244
245
  dps
245
246
  Number of decimal places for rounding returned shares and area.
246
247
 
@@ -292,13 +293,9 @@ def diversion_share_boundary_distance(
292
293
 
293
294
  match agg_method:
294
295
  case "arithmetic mean":
295
- delta_test = minkowski(
296
- (de_1, de_2), (0.0, 0.0), p=1, w=weights_i
297
- )
296
+ delta_test = minkowski((de_1, de_2), (0.0, 0.0), p=1, w=weights_i)
298
297
  case "distance":
299
- delta_test = minkowski(
300
- (de_1, de_2), (0.0, 0.0), p=2, w=weights_i
301
- )
298
+ delta_test = minkowski((de_1, de_2), (0.0, 0.0), p=2, w=weights_i)
302
299
 
303
300
  _test_flag, _incr_decr = (
304
301
  (delta_test > _delta_star, -1)
@@ -366,10 +363,10 @@ def diversion_share_boundary_distance(
366
363
 
367
364
  def diversion_share_boundary_xact_avg_mp(
368
365
  _delta_star: float = 0.075,
369
- _r_val: float = DEFAULT_REC_RATIO,
366
+ _r_val: float = DEFAULT_REC,
370
367
  /,
371
368
  *,
372
- recapture_form: Literal["inside-out", "proportional"] = "inside-out",
369
+ recapture_form: Literal["inside-out", "fixed"] = "inside-out",
373
370
  dps: int = 5,
374
371
  ) -> GuidelinesBoundary:
375
372
  R"""
@@ -400,7 +397,7 @@ def diversion_share_boundary_xact_avg_mp(
400
397
  ylabel=s_2
401
398
  )
402
399
 
403
- # recapture_form = "proportional"
400
+ # recapture_form = "fixed"
404
401
  sag = solve((s_2/(1 - s_1)) + (s_1/(1 - s_2)) - 2 * d_hat, s_2)[0]
405
402
  symplot(
406
403
  sag,
@@ -413,10 +410,10 @@ def diversion_share_boundary_xact_avg_mp(
413
410
  _delta_star
414
411
  Diversion share, :math:`\overline{d} / \overline{r}` or :math:`\overline{g} / (m^* \cdot \overline{r})`.
415
412
  _r_val
416
- Recapture ratio.
413
+ Recapture rate.
417
414
  recapture_form
418
- Whether recapture-ratio is MNL-consistent ("inside-out") or has fixed
419
- value for both merging firms ("proportional").
415
+ Whether recapture rate is share-proportional ("inside-out") or has fixed
416
+ value for both merging firms ("fixed").
420
417
  dps
421
418
  Number of decimal places for rounding returned shares.
422
419
 
@@ -520,14 +517,14 @@ def diversion_share_boundary_xact_avg_mp(
520
517
  # this function is about half as fast as the manual one! ... and a touch less precise
521
518
  def _diversion_share_boundary_wtd_avg_autoroot(
522
519
  _delta_star: float = 0.075,
523
- _r_val: float = DEFAULT_REC_RATIO,
520
+ _r_val: float = DEFAULT_REC,
524
521
  /,
525
522
  *,
526
523
  agg_method: Literal[
527
524
  "arithmetic mean", "geometric mean", "distance"
528
525
  ] = "arithmetic mean",
529
526
  weighting: Literal["own-share", "cross-product-share", None] = "own-share",
530
- recapture_form: Literal["inside-out", "proportional"] = "inside-out",
527
+ recapture_form: Literal["inside-out", "fixed"] = "inside-out",
531
528
  dps: int = 5,
532
529
  ) -> GuidelinesBoundary:
533
530
  R"""
@@ -538,14 +535,14 @@ def _diversion_share_boundary_wtd_avg_autoroot(
538
535
  _delta_star
539
536
  Diversion share, :math:`\overline{d} / \overline{r}` or :math:`\overline{g} / (m^* \cdot \overline{r})`.
540
537
  _r_val
541
- Recapture ratio.
538
+ Recapture rate.
542
539
  agg_method
543
540
  Whether "arithmetic mean", "geometric mean", or "distance".
544
541
  weighting
545
542
  Whether "own-share" or "cross-product-share" (or None for simple, unweighted average).
546
543
  recapture_form
547
- Whether recapture-ratio is MNL-consistent ("inside-out") or has fixed
548
- value for both merging firms ("proportional").
544
+ Whether recapture rate is share-proportional ("inside-out") or has fixed
545
+ value for both merging firms ("fixed").
549
546
  dps
550
547
  Number of decimal places for rounding returned shares and area.
551
548
 
@@ -588,7 +585,7 @@ def _diversion_share_boundary_wtd_avg_autoroot(
588
585
  (s_1, 0.0, d_hat / (1 + d_hat)), ylabel=s_2
589
586
  )
590
587
 
591
- # recapture_form == "proportional"
588
+ # recapture_form == "fixed"
592
589
  oswag = solve(
593
590
  s_1 * s_2 / (1 - s_1)
594
591
  + s_2 * s_1 / (1 - s_2)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mergeron
3
- Version: 2025.739439.11
3
+ Version: 2025.739439.13
4
4
  Summary: Python for analyzing merger enforcement policy
5
5
  License: MIT
6
6
  Keywords: merger enforcement policy,merger guidelines,merger screening,enforcement presumptions,concentration standards,diversion ratio,upward pricing pressure,GUPPI
@@ -26,7 +26,6 @@ Requires-Dist: joblib (>=1.5.1)
26
26
  Requires-Dist: lxml (>=6.0.0)
27
27
  Requires-Dist: matplotlib (>=3.10.3)
28
28
  Requires-Dist: mpmath (>=1.3.0)
29
- Requires-Dist: numexpr (>=2.11.0,<3.0.0)
30
29
  Requires-Dist: python-calamine (>=0.4.0)
31
30
  Requires-Dist: ruamel-yaml (>=0.18.14)
32
31
  Requires-Dist: scipy (>=1.16.0)
@@ -0,0 +1,21 @@
1
+ mergeron/__init__.py,sha256=7EfQoQmwD1jpLMoPnuXOjraGsAmq44OP39XMiqoadxM,6736
2
+ mergeron/core/__init__.py,sha256=zJcc50CAwm0oNKwk4p-P7oRwVfB_Fp4u0Do5dUeUXfI,3027
3
+ mergeron/core/empirical_margin_distribution.py,sha256=61U-KLB563BPWM5zWyWp82c4PhcsAG-IKI0WWYGjBKg,11740
4
+ mergeron/core/ftc_merger_investigations_data.py,sha256=oM4cs2PnyeSwyV1LOE_EYCUEzCKPm7lnCGxLIc6JQY8,28820
5
+ mergeron/core/guidelines_boundaries.py,sha256=Z8rZvhHrxXBgrLGFpb6yldc8h3lN9rGtGj4yu-fyVBA,15450
6
+ mergeron/core/guidelines_boundary_functions.py,sha256=fdWbqOb3Khz0OkbSTO7amE1q_ao3puZY5tEzj0p4h1o,30695
7
+ mergeron/core/pseudorandom_numbers.py,sha256=CFp-8eu0q2g-81LA0k2oCFltmp6Er7EkrAkoG19G7Os,10138
8
+ mergeron/data/__init__.py,sha256=SAFkR23RBM0zwGam2TeWmw08oHAKmU2YF-Nygj73ies,1845
9
+ mergeron/data/damodaran_margin_data_serialized.zip,sha256=Wc1v9buSrYTWWAravG8W9nPbgsU07zMtSAR2RvMQU5s,623482
10
+ mergeron/data/ftc_merger_investigations_data.zip,sha256=tiB2TLFyS9LMSFIv8DBA_oEEx12DU4MyjHni4NlsRMU,24002
11
+ mergeron/gen/__init__.py,sha256=6xUhaG4kWj2Qx8hLjgjupFWcJ0ZzAKDY9TN7mAFrANI,23880
12
+ mergeron/gen/data_generation.py,sha256=cZW3Dc6bNiBUPXjTDHZDwTc6x1sxXq2STCzfsvk6_tw,17638
13
+ mergeron/gen/data_generation_functions.py,sha256=SWzZ3I7ulkGBcL2F5CCKw2IvCm_wEplvqBasnSjSyU0,26129
14
+ mergeron/gen/enforcement_stats.py,sha256=V3ZeVv-iLFUuKPeM503cMKiVVaYeGVrA_6lInAdXA5w,14387
15
+ mergeron/gen/upp_tests.py,sha256=v-tnhQ85j8zL-TTE52GC61GEZSRFfdCkjaitVQIz0FI,6464
16
+ mergeron/perks/__init__.py,sha256=gGRIuRc7I6OuWLzwSiSZSIE0PEoxAy2DRFWg0VVLlbE,484
17
+ mergeron/perks/guidelines_boundary_functions_extra.py,sha256=q-Cqk9t5oj4yiAsmZJcsfrH434oGvza4YVspFYpdV0g,22113
18
+ mergeron/py.typed,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
19
+ mergeron-2025.739439.13.dist-info/METADATA,sha256=pW4fkwJwFD_eALAZ-TSIryYrJu1AMfczHcoDq1u9LdE,4167
20
+ mergeron-2025.739439.13.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
21
+ mergeron-2025.739439.13.dist-info/RECORD,,
@@ -1,21 +0,0 @@
1
- mergeron/__init__.py,sha256=h6iafamitU2GozjC36LB3hqIfiNPehoVj5ME7qlJIWg,6752
2
- mergeron/core/__init__.py,sha256=zJcc50CAwm0oNKwk4p-P7oRwVfB_Fp4u0Do5dUeUXfI,3027
3
- mergeron/core/empirical_margin_distribution.py,sha256=61U-KLB563BPWM5zWyWp82c4PhcsAG-IKI0WWYGjBKg,11740
4
- mergeron/core/ftc_merger_investigations_data.py,sha256=oM4cs2PnyeSwyV1LOE_EYCUEzCKPm7lnCGxLIc6JQY8,28820
5
- mergeron/core/guidelines_boundaries.py,sha256=PvSOLB6KlXu9KX6NdpStuRluP6nrZqUzSHT6usa5600,15630
6
- mergeron/core/guidelines_boundary_functions.py,sha256=mW5jW7qgn1Z4wMY3P_l86jtJoSke_Wcnd-JKxoWmYKI,30838
7
- mergeron/core/pseudorandom_numbers.py,sha256=-mPveXjJJ446NrBMAmWIa2jI6j0Px0xcCJTGEEsn3bo,10149
8
- mergeron/data/__init__.py,sha256=SAFkR23RBM0zwGam2TeWmw08oHAKmU2YF-Nygj73ies,1845
9
- mergeron/data/damodaran_margin_data_serialized.zip,sha256=Wc1v9buSrYTWWAravG8W9nPbgsU07zMtSAR2RvMQU5s,623482
10
- mergeron/data/ftc_merger_investigations_data.zip,sha256=tiB2TLFyS9LMSFIv8DBA_oEEx12DU4MyjHni4NlsRMU,24002
11
- mergeron/gen/__init__.py,sha256=apcCVC29yVjIM1yLM-wVpwrIwfi3BvJp_fPThe0Bgoc,23864
12
- mergeron/gen/data_generation.py,sha256=pdQl_uBENCjVt2aPtAcus2md4Qx-j5rOWGJJAzdnlO0,17617
13
- mergeron/gen/data_generation_functions.py,sha256=hXUq5D2CIUkM4_NdGXiOb4XATYwIUeUcCGadzQGDqLw,26126
14
- mergeron/gen/enforcement_stats.py,sha256=etTax-sBSn8DveF-IxuBJDdX0XSBD6oFU9vaZe6cYks,14387
15
- mergeron/gen/upp_tests.py,sha256=gRJISQ2jGmIDmFOvaTIkvYooI4mK-QbgkfgL46RrRio,7445
16
- mergeron/perks/__init__.py,sha256=gGRIuRc7I6OuWLzwSiSZSIE0PEoxAy2DRFWg0VVLlbE,484
17
- mergeron/perks/guidelines_boundary_functions_extra.py,sha256=lbqjmeLjrqXBm7dEmhiMcqzlv89cDlmyrG3TDzUFSEY,22296
18
- mergeron/py.typed,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
19
- mergeron-2025.739439.11.dist-info/METADATA,sha256=na0otI3x199j_ks6Qr6oigSYe8aZ7NL4FND9L_417zY,4208
20
- mergeron-2025.739439.11.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
21
- mergeron-2025.739439.11.dist-info/RECORD,,