mergeron 2025.739439.23__tar.gz → 2025.739439.25__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 mergeron might be problematic. Click here for more details.

Files changed (22) hide show
  1. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/PKG-INFO +1 -1
  2. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/pyproject.toml +1 -1
  3. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/__init__.py +2 -2
  4. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/core/guidelines_boundaries.py +13 -13
  5. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/gen/data_generation.py +4 -4
  6. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/gen/upp_tests.py +3 -3
  7. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/README.rst +0 -0
  8. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/core/__init__.py +0 -0
  9. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/core/_process_ftc_merger_investigations_data.py +0 -0
  10. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/core/empirical_margin_distribution.py +0 -0
  11. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/core/ftc_merger_investigations_data.py +0 -0
  12. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/core/guidelines_boundary_functions.py +0 -0
  13. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/core/pseudorandom_numbers.py +0 -0
  14. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/data/__init__.py +0 -0
  15. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/data/damodaran_margin_data_serialized.zip +0 -0
  16. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/data/ftc_merger_investigations_data.zip +0 -0
  17. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/gen/__init__.py +0 -0
  18. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/gen/data_generation_functions.py +0 -0
  19. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/gen/enforcement_stats.py +0 -0
  20. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/perks/__init__.py +0 -0
  21. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/perks/guidelines_boundary_functions_extra.py +0 -0
  22. {mergeron-2025.739439.23 → mergeron-2025.739439.25}/src/mergeron/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mergeron
3
- Version: 2025.739439.23
3
+ Version: 2025.739439.25
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
@@ -15,7 +15,7 @@ keywords = [
15
15
  "upward pricing pressure",
16
16
  "GUPPI",
17
17
  ]
18
- version = "2025.739439.23"
18
+ version = "2025.739439.25"
19
19
  requires-python = ">=3.13,<4.0" # need math.fma
20
20
 
21
21
  # Classifiers list: https://pypi.org/classifiers/
@@ -15,7 +15,7 @@ from ruamel import yaml
15
15
 
16
16
  _PKG_NAME: str = Path(__file__).parent.name
17
17
 
18
- VERSION = "2025.739439.23"
18
+ VERSION = "2025.739439.25"
19
19
 
20
20
  __version__ = VERSION
21
21
 
@@ -41,7 +41,7 @@ PKG_ATTRS_MAP: dict[str, type] = {}
41
41
 
42
42
  np.set_printoptions(precision=28, floatmode="fixed", legacy=False)
43
43
 
44
- type HMGPubYear = Literal[1992, 2010, 2023]
44
+ type PubYear = Literal[1992, 2010, 2023]
45
45
 
46
46
  type ArrayBoolean = NDArray[np.bool_]
47
47
  type ArrayFloat = NDArray[np.floating]
@@ -19,7 +19,7 @@ from .. import ( # noqa: TID252
19
19
  DEFAULT_REC,
20
20
  VERSION,
21
21
  ArrayDouble,
22
- HMGPubYear,
22
+ PubYear,
23
23
  RECForm,
24
24
  UPPAggrSelector,
25
25
  this_yaml,
@@ -35,14 +35,14 @@ mp.trap_complex = True
35
35
 
36
36
 
37
37
  @frozen
38
- class HMGThresholds:
38
+ class MGThresholds:
39
39
  """Thresholds for Guidelines standards."""
40
40
 
41
41
  delta: float
42
42
  fc: float
43
43
  rec: float
44
44
  guppi: float
45
- divr: float
45
+ dr: float
46
46
  cmcr: float
47
47
  ipr: float
48
48
 
@@ -58,13 +58,13 @@ class GuidelinesThresholds:
58
58
  1992, 2010, and 2023.
59
59
  """
60
60
 
61
- pub_year: HMGPubYear = field(
61
+ pub_year: PubYear = field(
62
62
  kw_only=False, default=2023, validator=validators.in_([1992, 2010, 2023])
63
63
  )
64
64
  """
65
65
  Year of publication of the Guidelines.
66
66
  """
67
- safeharbor: HMGThresholds = field(kw_only=True, default=None, init=False)
67
+ safeharbor: MGThresholds = field(kw_only=True, default=None, init=False)
68
68
  """
69
69
  Negative presumption quantified on various measures.
70
70
 
@@ -72,7 +72,7 @@ class GuidelinesThresholds:
72
72
  diversion ratio limit, CMCR, and IPR.
73
73
  """
74
74
 
75
- presumption: HMGThresholds = field(kw_only=True, default=None, init=False)
75
+ presumption: MGThresholds = field(kw_only=True, default=None, init=False)
76
76
  """
77
77
  Presumption of harm defined in HMG.
78
78
 
@@ -80,7 +80,7 @@ class GuidelinesThresholds:
80
80
  diversion ratio limit, CMCR, and IPR.
81
81
  """
82
82
 
83
- imputed_presumption: HMGThresholds = field(kw_only=True, default=None, init=False)
83
+ imputed_presumption: MGThresholds = field(kw_only=True, default=None, init=False)
84
84
  """
85
85
  Presumption of harm imputed from Guidelines.
86
86
 
@@ -109,7 +109,7 @@ class GuidelinesThresholds:
109
109
  object.__setattr__(
110
110
  self,
111
111
  "safeharbor",
112
- HMGThresholds(
112
+ MGThresholds(
113
113
  dh_s,
114
114
  _fc := int(np.ceil(1 / hhi_p)),
115
115
  _r := gbfn.round_cust(_fc / (_fc + 1), frac=0.05),
@@ -121,17 +121,17 @@ class GuidelinesThresholds:
121
121
  )
122
122
 
123
123
  object.__setattr__(
124
- self, "presumption", HMGThresholds(dh_p, _fc, _r, _g, _dr, _cmcr, _ipr)
124
+ self, "presumption", MGThresholds(dh_p, _fc, _r, _g, _dr, _cmcr, _ipr)
125
125
  )
126
126
 
127
127
  # imputed_presumption is relevant for presumptions implicating
128
- # mergers *to* symmetry in numbers-equivalent of post-merger HHI
128
+ # mergers *to* symmetry in numbers-equivalent of post-merger HHI,
129
129
  # as in 2010 U.S.Guidelines.
130
130
  object.__setattr__(
131
131
  self,
132
132
  "imputed_presumption",
133
133
  (
134
- HMGThresholds(
134
+ MGThresholds(
135
135
  2 * (0.5 / _fc) ** 2,
136
136
  _fc,
137
137
  _r_i := gbfn.round_cust((_fc - 1 / 2) / (_fc + 1 / 2), frac=0.05),
@@ -141,7 +141,7 @@ class GuidelinesThresholds:
141
141
  _ipr,
142
142
  )
143
143
  if self.pub_year == 2010
144
- else HMGThresholds(
144
+ else MGThresholds(
145
145
  2 * (1 / (_fc + 1)) ** 2, _fc, _r, _g, _dr, _cmcr, _ipr
146
146
  )
147
147
  ),
@@ -458,6 +458,6 @@ for _typ in (
458
458
  ConcentrationBoundary,
459
459
  DiversionBoundary,
460
460
  GuidelinesThresholds,
461
- HMGThresholds,
461
+ MGThresholds,
462
462
  ):
463
463
  yamelize_attrs(_typ)
@@ -21,7 +21,7 @@ from .. import ( # noqa: TID252 # noqa
21
21
  yaml_rt_mapper,
22
22
  )
23
23
  from ..core import guidelines_boundaries as gbl # noqa: TID252
24
- from ..core.guidelines_boundaries import HMGThresholds # noqa: TID252
24
+ from ..core.guidelines_boundaries import MGThresholds # noqa: TID252
25
25
  from . import (
26
26
  INVResolution, # noqa: F401
27
27
  MarketsData,
@@ -264,7 +264,7 @@ class MarketSample:
264
264
 
265
265
  def __sim_enf_cnts(
266
266
  self,
267
- _upp_test_parms: gbl.HMGThresholds,
267
+ _upp_test_parms: gbl.MGThresholds,
268
268
  _sim_test_regime: UPPTestRegime,
269
269
  /,
270
270
  *,
@@ -310,7 +310,7 @@ class MarketSample:
310
310
  return upp_test_arrays
311
311
 
312
312
  def __sim_enf_cnts_ll(
313
- self, _enf_parm_vec: gbl.HMGThresholds, _sim_test_regime: UPPTestRegime, /
313
+ self, _enf_parm_vec: gbl.MGThresholds, _sim_test_regime: UPPTestRegime, /
314
314
  ) -> UPPTestsCounts:
315
315
  """Parallelize data-generation and testing.
316
316
 
@@ -410,7 +410,7 @@ class MarketSample:
410
410
  return upp_test_results
411
411
 
412
412
  def estimate_enf_counts(
413
- self, _enf_parm_vec: HMGThresholds, _upp_test_regime: UPPTestRegime, /
413
+ self, _enf_parm_vec: MGThresholds, _upp_test_regime: UPPTestRegime, /
414
414
  ) -> None:
415
415
  """Populate :attr:`enf_counts` with estimated UPP test counts.
416
416
 
@@ -13,7 +13,7 @@ from .. import ( # noqa
13
13
  ArrayDouble,
14
14
  ArrayFloat,
15
15
  ArrayINT,
16
- HMGPubYear,
16
+ PubYear,
17
17
  UPPAggrSelector,
18
18
  )
19
19
  from ..core import guidelines_boundaries as gbl # noqa: TID252
@@ -33,7 +33,7 @@ class INVRESCntsArgs(TypedDict, total=False):
33
33
 
34
34
  def compute_upp_test_counts(
35
35
  _market_data_sample: MarketsData,
36
- _upp_test_parms: gbl.HMGThresholds,
36
+ _upp_test_parms: gbl.MGThresholds,
37
37
  _upp_test_regime: UPPTestRegime,
38
38
  /,
39
39
  ) -> UPPTestsCounts:
@@ -61,7 +61,7 @@ def compute_upp_test_counts(
61
61
 
62
62
  """
63
63
  g_bar_, divr_bar_, cmcr_bar_, ipr_bar_ = (
64
- getattr(_upp_test_parms, _f) for _f in ("guppi", "divr", "cmcr", "ipr")
64
+ getattr(_upp_test_parms, _f) for _f in ("guppi", "dr", "cmcr", "ipr")
65
65
  )
66
66
 
67
67
  guppi_array, ipr_array, cmcr_array = (