mergeron 2025.739425.0__tar.gz → 2025.739439.3__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 (20) hide show
  1. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/PKG-INFO +4 -4
  2. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/pyproject.toml +9 -9
  3. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/__init__.py +1 -1
  4. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/core/guidelines_boundaries.py +5 -5
  5. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/core/guidelines_boundary_functions.py +4 -4
  6. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/core/guidelines_boundary_functions_extra.py +2 -2
  7. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/gen/__init__.py +9 -11
  8. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/README.rst +0 -0
  9. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/core/__init__.py +0 -0
  10. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/core/empirical_margin_distribution.py +0 -0
  11. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/core/ftc_merger_investigations_data.py +0 -0
  12. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/core/pseudorandom_numbers.py +0 -0
  13. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/data/__init__.py +0 -0
  14. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/data/damodaran_margin_data_serialized.zip +0 -0
  15. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/data/ftc_merger_investigations_data.zip +0 -0
  16. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/gen/data_generation.py +0 -0
  17. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/gen/data_generation_functions.py +0 -0
  18. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/gen/enforcement_stats.py +0 -0
  19. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/gen/upp_tests.py +0 -0
  20. {mergeron-2025.739425.0 → mergeron-2025.739439.3}/src/mergeron/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mergeron
3
- Version: 2025.739425.0
3
+ Version: 2025.739439.3
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
@@ -24,13 +24,13 @@ Requires-Dist: certifi (>=2025.6.15)
24
24
  Requires-Dist: h5py (>=3.14.0)
25
25
  Requires-Dist: jinja2 (>=3.1.6)
26
26
  Requires-Dist: joblib (>=1.5.1)
27
- Requires-Dist: lxml (>=5.4.0)
27
+ Requires-Dist: lxml (>=6.0.0)
28
28
  Requires-Dist: matplotlib (>=3.10.3)
29
29
  Requires-Dist: mpmath (>=1.3.0)
30
30
  Requires-Dist: numexpr (>=2.11.0,<3.0.0)
31
- Requires-Dist: python-calamine (>=0.3.2)
31
+ Requires-Dist: python-calamine (>=0.4.0)
32
32
  Requires-Dist: ruamel-yaml (>=0.18.14)
33
- Requires-Dist: scipy (>=1.15.3)
33
+ Requires-Dist: scipy (>=1.16.0)
34
34
  Requires-Dist: sympy (>=1.14.0)
35
35
  Requires-Dist: types-beautifulsoup4 (>=4.12.0.20250516)
36
36
  Requires-Dist: urllib3 (>=2.5.0)
@@ -15,7 +15,7 @@ keywords = [
15
15
  "upward pricing pressure",
16
16
  "GUPPI",
17
17
  ]
18
- version = "2025.739425.0"
18
+ version = "2025.739439.3"
19
19
  requires-python = ">=3.12,<4.0"
20
20
 
21
21
  # Classifiers list: https://pypi.org/classifiers/
@@ -40,13 +40,13 @@ dependencies = [
40
40
  "h5py>=3.14.0",
41
41
  "jinja2>=3.1.6",
42
42
  "joblib>=1.5.1",
43
- "lxml>=5.4.0",
43
+ "lxml>=6.0.0",
44
44
  "matplotlib>=3.10.3",
45
45
  "mpmath>=1.3.0",
46
46
  "numexpr (>=2.11.0,<3.0.0)",
47
- "python-calamine>=0.3.2",
47
+ "python-calamine>=0.4.0",
48
48
  "ruamel-yaml>=0.18.14",
49
- "scipy>=1.15.3",
49
+ "scipy>=1.16.0",
50
50
  "sympy>=1.14.0",
51
51
  "types-beautifulsoup4>=4.12.0.20250516",
52
52
  "urllib3>=2.5.0",
@@ -67,18 +67,18 @@ sphinx-autoapi = ">=3.6.0"
67
67
  sphinx-autodoc-typehints = ">=3.2.0"
68
68
  sphinx-immaterial = ">=0.13.5"
69
69
  linuxdoc = ">=20240924"
70
- ipython = ">=9.3.0"
70
+ ipython = ">=9.4.0"
71
71
  ipython-pygments-lexers = ">=1.1.1"
72
72
 
73
73
  [tool.poetry.group.lint.dependencies]
74
- ruff = ">=0.12.0"
74
+ ruff = ">=0.12.2"
75
75
  mypy = ">=1.16.1"
76
76
 
77
77
  [tool.poetry.group.test.dependencies]
78
78
  pytest = ">=8.4.1"
79
79
  pytest-cov = ">=6.2.1"
80
- pytest-xdist = ">=3.7.0"
81
- coverage = ">=7.9.1"
80
+ pytest-xdist = ">=3.8.0"
81
+ coverage = ">=7.9.2"
82
82
 
83
83
  [tool.poetry.group.other.dependencies]
84
84
  semver = ">=3.0.4"
@@ -207,7 +207,7 @@ minversion = "8.0"
207
207
  addopts = [
208
208
  "--import-mode=importlib",
209
209
  "--cov=mergeron",
210
- "--cov-report=html:../tests/cov_html",
210
+ "--cov-report=html:tests/cov_html",
211
211
  ]
212
212
  filterwarnings = [
213
213
  "all",
@@ -15,7 +15,7 @@ from ruamel import yaml
15
15
 
16
16
  _PKG_NAME: str = Path(__file__).parent.name
17
17
 
18
- VERSION = "2025.739425.0"
18
+ VERSION = "2025.739439.3"
19
19
 
20
20
  __version__ = VERSION
21
21
 
@@ -233,7 +233,7 @@ class DiversionRatioBoundary:
233
233
  ) -> None:
234
234
  if not (isinstance(_value, decimal.Decimal | float) and 0 <= _value <= 1):
235
235
  raise ValueError(
236
- "Margin-adjusted benchmark share ratio must lie between 0 and 1."
236
+ "Margin-adjusted benchmark diversion share must lie between 0 and 1."
237
237
  )
238
238
 
239
239
  recapture_ratio: float = field(
@@ -324,7 +324,7 @@ class DiversionRatioBoundary:
324
324
 
325
325
  def __attrs_post_init__(self, /) -> None:
326
326
  """Initialize boundary and area based on other attributes."""
327
- share_ratio = critical_share_ratio(
327
+ share_ratio = critical_diversion_share(
328
328
  self.diversion_ratio, r_bar=self.recapture_ratio
329
329
  )
330
330
 
@@ -403,7 +403,7 @@ def guppi_from_delta(
403
403
  )
404
404
 
405
405
 
406
- def critical_share_ratio(
406
+ def critical_diversion_share(
407
407
  _guppi_bound: float = 0.075,
408
408
  /,
409
409
  *,
@@ -425,7 +425,7 @@ def critical_share_ratio(
425
425
 
426
426
  Returns
427
427
  -------
428
- Critical share ratio (share ratio bound) corresponding to the GUPPI bound
428
+ Critical diversion share (diversion share bound) corresponding to the GUPPI bound
429
429
  for given margin and recapture ratio.
430
430
 
431
431
  """
@@ -459,7 +459,7 @@ def share_from_guppi(
459
459
 
460
460
  """
461
461
  return gbfn.round_cust(
462
- (_d0 := critical_share_ratio(_guppi_bound, m_star=m_star, r_bar=r_bar))
462
+ (_d0 := critical_diversion_share(_guppi_bound, m_star=m_star, r_bar=r_bar))
463
463
  / (1 + _d0)
464
464
  )
465
465
 
@@ -228,7 +228,7 @@ def diversion_share_boundary_wtd_avg(
228
228
  Parameters
229
229
  ----------
230
230
  _delta_star
231
- Share ratio (:math:`\overline{d} / \overline{r}`)
231
+ Diversion share (:math:`\overline{d} / \overline{r}`)
232
232
  _r_val
233
233
  recapture ratio
234
234
  agg_method
@@ -461,7 +461,7 @@ def diversion_share_boundary_xact_avg(
461
461
  Parameters
462
462
  ----------
463
463
  _delta_star
464
- Share ratio (:math:`\overline{d} / \overline{r}`).
464
+ Diversion share (:math:`\overline{d} / \overline{r}`).
465
465
  _r_val
466
466
  Recapture ratio
467
467
  recapture_form
@@ -590,7 +590,7 @@ def diversion_share_boundary_min(
590
590
  Parameters
591
591
  ----------
592
592
  _delta_star
593
- Share ratio (:math:`\overline{d} / \overline{r}`).
593
+ Diversion share (:math:`\overline{d} / \overline{r}`).
594
594
  _r_val
595
595
  Recapture ratio.
596
596
  recapture_form
@@ -634,7 +634,7 @@ def diversion_share_boundary_max(
634
634
  Parameters
635
635
  ----------
636
636
  _delta_star
637
- Share ratio (:math:`\overline{d} / \overline{r}`).
637
+ Diversion share (:math:`\overline{d} / \overline{r}`).
638
638
  _
639
639
  Placeholder for recapture ratio included for consistency with other
640
640
  share-ratio boundary functions.
@@ -409,7 +409,7 @@ def diversion_share_boundary_xact_avg_mp(
409
409
  Parameters
410
410
  ----------
411
411
  _delta_star
412
- Share ratio (:math:`\overline{d} / \overline{r}`).
412
+ Diversion share (:math:`\overline{d} / \overline{r}`).
413
413
  _r_val
414
414
  Recapture ratio
415
415
  recapture_form
@@ -534,7 +534,7 @@ def _diversion_share_boundary_wtd_avg_autoroot(
534
534
  Parameters
535
535
  ----------
536
536
  _delta_star
537
- Share ratio (:math:`\overline{d} / \overline{r}`)
537
+ Diversion share (:math:`\overline{d} / \overline{r}`)
538
538
  _r_val
539
539
  recapture ratio
540
540
  agg_method
@@ -89,9 +89,9 @@ class SHRDistribution(str, Enameled):
89
89
  """Share distribution for merging-firm shares has a higher peak share
90
90
 
91
91
  By default, shape parameter for merging-firm-share is 2.5, and
92
- 1.0 for all others. Defining, :attr:`mergeron.ShareSpec.dist_parms`
92
+ 1.0 for all others. Defining, :attr:`.ShareSpec.dist_parms`
93
93
  as a vector of shape parameters with length matching
94
- that of :attr:`mergeron.ShareSpec.dist_parms` allows flexible specification
94
+ that of :attr:`.ShareSpec.dist_parms` allows flexible specification
95
95
  of Dirichlet-distributed share-data generation.
96
96
  """
97
97
 
@@ -155,7 +155,7 @@ class ShareSpec:
155
155
  A salient feature of market-share specification in this package is that
156
156
  the draws represent markets with multiple different firm-counts.
157
157
  Firm-counts are unspecified if the share distribution is
158
- :attr:`mergeron.SHRDistribution.UNI`, for Dirichlet-distributed market-shares,
158
+ :attr:`.SHRDistribution.UNI`, for Dirichlet-distributed market-shares,
159
159
  the default specification is that firm-counts vary between
160
160
  2 and 7 firms with each value equally likely.
161
161
 
@@ -579,14 +579,12 @@ class MarginSampleData:
579
579
  mnl_test_array: ArrayBoolean
580
580
  """Flags infeasible observations as False and rest as True
581
581
 
582
- Applying restrictions from Bertrand-Nash oligopoly
583
- with MNL demand results in draws of Firm 2 PCM falling
584
- outside the feasible interval,:math:`[0, 1]`, depending
585
- on the configuration of merging firm shares. Such draws
586
- are are flagged as infeasible (False)in :code:`mnl_test_array` while
587
- draws with PCM values within the feasible range are
588
- flagged as True. Used from filtering-out draws with
589
- infeasible PCM.
582
+ Applying restrictions from Bertrand-Nash oligopoly with MNL demand results
583
+ in some draws of Firm 2 PCM falling outside the feasible interval, :math:`[0, 1]`
584
+ for certain combinations of merging firms shares as initially drawn. Such draws
585
+ are flagged as infeasible (False) in :code:`mnl_test_array` while draws with
586
+ feaseible PCM values flagged True. This array is used to exclude infeasible draws
587
+ when imposing MNL demand in simulations.
590
588
  """
591
589
 
592
590