mergeron 2024.739123.1__py3-none-any.whl → 2024.739123.8__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/__init__.py +1 -1
- mergeron/core/ftc_merger_investigations_data.py +36 -26
- mergeron/data/jinja2_LaTeX_templates/ftcinvdata_summarypaired_table_template.tex.jinja2 +35 -23
- mergeron/data/jinja2_LaTeX_templates/setup_tikz_tables.tex +5 -4
- mergeron/gen/enforcement_stats.py +65 -64
- {mergeron-2024.739123.1.dist-info → mergeron-2024.739123.8.dist-info}/METADATA +1 -1
- {mergeron-2024.739123.1.dist-info → mergeron-2024.739123.8.dist-info}/RECORD +8 -8
- {mergeron-2024.739123.1.dist-info → mergeron-2024.739123.8.dist-info}/WHEEL +0 -0
mergeron/__init__.py
CHANGED
|
@@ -165,7 +165,7 @@ def construct_data(
|
|
|
165
165
|
|
|
166
166
|
# Create data for industries with no evidence on entry
|
|
167
167
|
for _data_period in _invdata:
|
|
168
|
-
|
|
168
|
+
_construct_no_evidence_data(_invdata, _data_period)
|
|
169
169
|
|
|
170
170
|
# Create a list of exclusions to named industries in the base period,
|
|
171
171
|
# for construction of aggregate enforcement statistics where feasible
|
|
@@ -202,37 +202,47 @@ def construct_data(
|
|
|
202
202
|
return MappingProxyType(_invdata)
|
|
203
203
|
|
|
204
204
|
|
|
205
|
-
def
|
|
205
|
+
def _construct_no_evidence_data(_invdata: INVData, _data_period: str, /) -> None:
|
|
206
206
|
_invdata_ind_grp = "All Markets"
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
_invdata_sub_evid_cond_conc = _invdata[_data_period]["ByHHIandDelta"]
|
|
210
|
-
_invdata_sub_evid_cond_conc["Table 9.X"] = INVTableData(
|
|
211
|
-
_invdata_ind_grp,
|
|
212
|
-
_invdata_evid_cond,
|
|
213
|
-
np.column_stack((
|
|
214
|
-
_invdata_sub_evid_cond_conc["Table 3.1"].data_array[:, :2],
|
|
207
|
+
_table_nos_map = dict(
|
|
208
|
+
zip(
|
|
215
209
|
(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
210
|
+
"No Entry Evidence",
|
|
211
|
+
"No Evidence on Customer Complaints",
|
|
212
|
+
"No Evidence on Hot Documents",
|
|
219
213
|
),
|
|
220
|
-
)),
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
_invdata_sub_evid_cond_fcount = _invdata[_data_period]["ByFirmCount"]
|
|
224
|
-
_invdata_sub_evid_cond_fcount["Table 10.X"] = INVTableData(
|
|
225
|
-
_invdata_ind_grp,
|
|
226
|
-
_invdata_evid_cond,
|
|
227
|
-
np.column_stack((
|
|
228
|
-
_invdata_sub_evid_cond_fcount["Table 4.1"].data_array[:, :1],
|
|
229
214
|
(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
215
|
+
{"ByHHIandDelta": "Table 9.X", "ByFirmCount": "Table 10.X"},
|
|
216
|
+
{"ByHHIandDelta": "Table 7.X", "ByFirmCount": "Table 8.X"},
|
|
217
|
+
{"ByHHIandDelta": "Table 5.X", "ByFirmCount": "Table 6.X"},
|
|
233
218
|
),
|
|
234
|
-
|
|
219
|
+
strict=True,
|
|
220
|
+
)
|
|
235
221
|
)
|
|
222
|
+
for _invdata_evid_cond in (
|
|
223
|
+
"No Entry Evidence",
|
|
224
|
+
"No Evidence on Customer Complaints",
|
|
225
|
+
"No Evidence on Hot Documents",
|
|
226
|
+
):
|
|
227
|
+
for _stats_grp in ("ByHHIandDelta", "ByFirmCount"):
|
|
228
|
+
_invdata_sub_evid_cond_conc = _invdata[_data_period][_stats_grp]
|
|
229
|
+
|
|
230
|
+
_dtn = _table_nos_map[_invdata_evid_cond]["ByHHIandDelta"]
|
|
231
|
+
_stn0 = "Table 3.1" if _stats_grp == "ByHHIandDelta" else "Table 4.1"
|
|
232
|
+
_stn1, _stn2 = (_dtn.replace(".X", f".{_i}") for _i in ("1", "2"))
|
|
233
|
+
|
|
234
|
+
_invdata_sub_evid_cond_conc[_dtn] = INVTableData(
|
|
235
|
+
_invdata_ind_grp,
|
|
236
|
+
_invdata_evid_cond,
|
|
237
|
+
np.column_stack((
|
|
238
|
+
_invdata_sub_evid_cond_conc[_stn0].data_array[:, :2],
|
|
239
|
+
(
|
|
240
|
+
_invdata_sub_evid_cond_conc[_stn0].data_array[:, 2:]
|
|
241
|
+
- _invdata_sub_evid_cond_conc[_stn1].data_array[:, 2:]
|
|
242
|
+
- _invdata_sub_evid_cond_conc[_stn2].data_array[:, 2:]
|
|
243
|
+
),
|
|
244
|
+
)),
|
|
245
|
+
)
|
|
236
246
|
|
|
237
247
|
|
|
238
248
|
def _construct_new_period_data(
|
|
@@ -14,32 +14,44 @@
|
|
|
14
14
|
((* set obs_merger_class_0 = "Markets with, ``" + tmpl_data.obs_merger_class_0 + "''" *))
|
|
15
15
|
((* endif *))
|
|
16
16
|
|
|
17
|
+
((* if tmpl_data.obs_summary_type == 'ByConcZone' *))
|
|
18
|
+
((* set hdrcol_align = "left" *))
|
|
19
|
+
((* else *))
|
|
20
|
+
((* set hdrcol_align = "center" *))
|
|
21
|
+
((* endif *))
|
|
22
|
+
|
|
17
23
|
((* set obs_merger_class_1 = "Markets with, ``" + tmpl_data.obs_merger_class_1 + "''" *))
|
|
18
24
|
|
|
25
|
+
|
|
26
|
+
|
|
19
27
|
\centering
|
|
20
|
-
\caption{FTC Merger Investigations Data}\label{tbl:FTCInvData_\JINVAR{- obs_summary_type }}
|
|
21
|
-
{\footnotesize
|
|
22
|
-
|
|
28
|
+
\caption{FTC Merger Investigations Data}\label{tbl:FTCInvData_\JINVAR{- tmpl_data.obs_summary_type }}
|
|
29
|
+
{\footnotesize
|
|
30
|
+
\JINVAR{ tmpl_data.obs_summary_type_title } \\
|
|
31
|
+
Grouped by Entry Conditions and Reporting Period \\[0.5\baselineskip]
|
|
32
|
+
}
|
|
23
33
|
\begin{tikzpicture}[auto, font = \sffamily]
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
\matrix[
|
|
35
|
+
datatable,
|
|
36
|
+
nodes = {text width = 27pt,},
|
|
37
|
+
column 1/.style = {nodes = {
|
|
38
|
+
hdrtext,
|
|
39
|
+
text width=\JINVAR{ tmpl_data.hdrcol_width -}, fill=OBSHDRFill,
|
|
40
|
+
align=\JINVAR{ hdrcol_align -},
|
|
41
|
+
},},
|
|
42
|
+
record matrix dimensions,
|
|
43
|
+
] (invres_rate_raw) {
|
|
44
|
+
\JINVAR{ tmpl_data.invdata_datstr -}
|
|
35
45
|
};
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
% Horizontal scoring for totals
|
|
47
|
+
\draw[color = OBSHDRFill, line width = 1pt]
|
|
48
|
+
($(invres_rate_raw-\the\tnr-2.north west) + (- \JINVAR{ tmpl_data.hdrcol_width } - 6pt + 0.25\pgflinewidth, 0pt)$)
|
|
49
|
+
-- (invres_rate_raw-\the\tnr-\the\tnc.north east)
|
|
50
|
+
;
|
|
51
|
+
% Vertical scoring for column groups
|
|
52
|
+
\draw[color = OBSHDRFill, line width = 1pt] (invres_rate_raw-1-3.north east) -- (invres_rate_raw-\the\tnr-3.south east);
|
|
53
|
+
\draw[color = OBSHDRFill, line width = 1pt] (invres_rate_raw-1-5.north east) -- (invres_rate_raw-\the\tnr-5.south east);
|
|
54
|
+
\draw[color = OBSHDRFill, line width = 1pt] (invres_rate_raw-1-7.north east) -- (invres_rate_raw-\the\tnr-7.south east);
|
|
43
55
|
|
|
44
56
|
|
|
45
57
|
%% Header column - row heads - description
|
|
@@ -120,9 +132,9 @@
|
|
|
120
132
|
% \item Fed. Trade Comm'n (2003), at note~\cref{fn:FTCInvData1996to2003}
|
|
121
133
|
% \item Fed. Trade Comm'n (2011), at note~\cref{fn:FTCInvData1996to2011}
|
|
122
134
|
% \end{itemize}
|
|
123
|
-
\JINVAR{
|
|
135
|
+
\JINVAR{ tmpl_data.invdata_notestr }
|
|
124
136
|
\vspace{\baselineskip}
|
|
125
|
-
\JINVAR{ tmpl_data.invdata_sourcestr
|
|
137
|
+
\JINVAR{ tmpl_data.invdata_sourcestr }
|
|
126
138
|
}
|
|
127
139
|
\vspace{\baselineskip}
|
|
128
140
|
\end{table}
|
|
@@ -24,13 +24,17 @@
|
|
|
24
24
|
ifthenelse(iseven(\pgfmatrixcurrentrow),1,3))}
|
|
25
25
|
%\typeout{\the\pgfmatrixcurrentcolumn,\pgfmatrixcurrentrow->\itest}
|
|
26
26
|
\ifcase\itest
|
|
27
|
-
\tikzset{fill=
|
|
27
|
+
\tikzset{fill=none}%
|
|
28
28
|
\or
|
|
29
29
|
\tikzset{fill=DataFill}%
|
|
30
30
|
\else
|
|
31
31
|
\tikzset{fill=white}%
|
|
32
32
|
\fi
|
|
33
33
|
},
|
|
34
|
+
get matrix dims/.code={
|
|
35
|
+
\global\tnc=\pgf@matrix@numberofcolumns
|
|
36
|
+
\global\tnr=\pgfmatrixcurrentrow
|
|
37
|
+
},
|
|
34
38
|
% If you only have numbers, text depth = 0ex; if text, text depth = 0.25ex, (may need tweaking for alignment across cells)
|
|
35
39
|
anytext/.style = {
|
|
36
40
|
font = \sffamily\scriptsize\addfontfeatures{Numbers={Monospaced,Lining}},
|
|
@@ -66,9 +70,6 @@
|
|
|
66
70
|
fill = none,
|
|
67
71
|
green_bar_filler,
|
|
68
72
|
},
|
|
69
|
-
% every even row/.style = {
|
|
70
|
-
% nodes = {fill = DataFill}
|
|
71
|
-
% },
|
|
72
73
|
},
|
|
73
74
|
hdrtable/.style = {
|
|
74
75
|
anytable,
|
|
@@ -48,12 +48,16 @@ class IndustryGroup(enum.StrEnum):
|
|
|
48
48
|
|
|
49
49
|
@enum.unique
|
|
50
50
|
class OtherEvidence(enum.StrEnum):
|
|
51
|
+
UR = "Unrestricted on additional evidence"
|
|
51
52
|
HD = "Hot Documents Identified"
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
HN = "No Hot Documents Identified"
|
|
54
|
+
HU = "No Evidence on Hot Documents"
|
|
55
|
+
CN = "No Strong Customer Complaints"
|
|
56
|
+
CS = "Strong Customer Complaints"
|
|
57
|
+
CU = "No Evidence on Customer Complaints"
|
|
54
58
|
ED = "Entry Difficult"
|
|
55
59
|
EE = "Entry Easy"
|
|
56
|
-
|
|
60
|
+
NE = "No Entry Evidence"
|
|
57
61
|
|
|
58
62
|
|
|
59
63
|
@enum.unique
|
|
@@ -90,13 +94,13 @@ moe_tmpl = Template(R"""
|
|
|
90
94
|
""")
|
|
91
95
|
|
|
92
96
|
# Define the LaTeX jinja environment
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
_tmpl_resource = resources.files(f"{_PKG_NAME}.data.jinja2_LaTeX_templates")
|
|
98
|
+
_tmpl_folder = DATA_DIR.joinpath(_tmpl_resource.name)
|
|
99
|
+
with resources.as_file(
|
|
100
|
+
resources.files(f"{_PKG_NAME}.data.jinja2_LaTeX_templates")
|
|
101
|
+
) as _tmpl_src:
|
|
102
|
+
if not _tmpl_folder.is_dir():
|
|
103
|
+
shutil.copytree(_tmpl_src, _tmpl_folder)
|
|
100
104
|
|
|
101
105
|
LaTeX_jinja_env = Environment(
|
|
102
106
|
block_start_string=R"((*",
|
|
@@ -115,22 +119,11 @@ LaTeX_jinja_env = Environment(
|
|
|
115
119
|
|
|
116
120
|
# Place files related to rendering LaTeX in output data directory
|
|
117
121
|
if not (_out_path := DATA_DIR.joinpath(f"{_PKG_NAME}.cls")).is_file():
|
|
118
|
-
|
|
119
|
-
resources.files(f"{_PKG_NAME}.data.jinja2_LaTeX_templates").joinpath(
|
|
120
|
-
"{_PKG_NAME}.cls"
|
|
121
|
-
)
|
|
122
|
-
) as _in_path:
|
|
123
|
-
shutil.copy2(_in_path, _out_path)
|
|
124
|
-
|
|
122
|
+
shutil.move(_tmpl_folder / _out_path.name, _out_path)
|
|
125
123
|
|
|
124
|
+
# Write to LaTeX table settings file
|
|
126
125
|
if not (_DOTTEX := DATA_DIR / Rf"{_PKG_NAME}_TikZTableSettings.tex").is_file():
|
|
127
|
-
|
|
128
|
-
with resources.as_file(
|
|
129
|
-
resources.files(f"{_PKG_NAME}.data.jinja2_LaTeX_templates").joinpath(
|
|
130
|
-
"setup_tikz_tables.tex"
|
|
131
|
-
)
|
|
132
|
-
) as _tex_path:
|
|
133
|
-
shutil.copy2(_tex_path, _DOTTEX)
|
|
126
|
+
shutil.move(_tmpl_folder.joinpath("setup_tikz_tables.tex"), _DOTTEX)
|
|
134
127
|
|
|
135
128
|
|
|
136
129
|
LTX_ARRAY_LINEEND = "\\\\\n"
|
|
@@ -168,6 +161,32 @@ hhi_delta_ranger, hhi_zone_post_ranger = (
|
|
|
168
161
|
for _f in (HHI_DELTA_KNOTS, HHI_POST_ZONE_KNOTS)
|
|
169
162
|
)
|
|
170
163
|
|
|
164
|
+
|
|
165
|
+
HMG_PRESUMPTION_ZONE_MAP = {
|
|
166
|
+
HHI_POST_ZONE_KNOTS[0]: {
|
|
167
|
+
HHI_DELTA_KNOTS[0]: (0, 0, 0),
|
|
168
|
+
HHI_DELTA_KNOTS[1]: (0, 0, 0),
|
|
169
|
+
HHI_DELTA_KNOTS[2]: (0, 0, 0),
|
|
170
|
+
},
|
|
171
|
+
HHI_POST_ZONE_KNOTS[1]: {
|
|
172
|
+
HHI_DELTA_KNOTS[0]: (0, 1, 1),
|
|
173
|
+
HHI_DELTA_KNOTS[1]: (1, 1, 2),
|
|
174
|
+
HHI_DELTA_KNOTS[2]: (1, 1, 2),
|
|
175
|
+
},
|
|
176
|
+
HHI_POST_ZONE_KNOTS[2]: {
|
|
177
|
+
HHI_DELTA_KNOTS[0]: (0, 2, 1),
|
|
178
|
+
HHI_DELTA_KNOTS[1]: (1, 2, 3),
|
|
179
|
+
HHI_DELTA_KNOTS[2]: (2, 2, 4),
|
|
180
|
+
},
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
ZONE_VALS = np.unique(
|
|
184
|
+
np.vstack([
|
|
185
|
+
tuple(HMG_PRESUMPTION_ZONE_MAP[_k].values()) for _k in HMG_PRESUMPTION_ZONE_MAP
|
|
186
|
+
]),
|
|
187
|
+
axis=0,
|
|
188
|
+
)
|
|
189
|
+
|
|
171
190
|
ZONE_STRINGS = {
|
|
172
191
|
0: R"Green Zone (Safeharbor)",
|
|
173
192
|
1: R"Yellow Zone",
|
|
@@ -182,10 +201,10 @@ ZONE_DETAIL_STRINGS_HHI = {
|
|
|
182
201
|
|
|
183
202
|
ZONE_DETAIL_STRINGS_DELTA = {
|
|
184
203
|
0: "",
|
|
185
|
-
1: Rf"ΔHHI <
|
|
186
|
-
2: Rf"ΔHHI ⩾
|
|
187
|
-
3: R"ΔHHI ∈
|
|
188
|
-
4: Rf"ΔHHI ⩾
|
|
204
|
+
1: Rf"ΔHHI < {HHI_DELTA_KNOTS[1]} pts.",
|
|
205
|
+
2: Rf"ΔHHI ⩾ {HHI_DELTA_KNOTS[1]} pts.}}",
|
|
206
|
+
3: R"ΔHHI ∈ [{}, {}) pts.".format(*HHI_DELTA_KNOTS[1:3]),
|
|
207
|
+
4: Rf"ΔHHI ⩾ {HHI_DELTA_KNOTS[2]} pts.",
|
|
189
208
|
}
|
|
190
209
|
|
|
191
210
|
ZONE_STRINGS_LATEX = {
|
|
@@ -211,31 +230,6 @@ ZONE_DETAIL_STRINGS_DELTA_LATEX = {
|
|
|
211
230
|
4: Rf"\Delta HHI \geqslant \text{{{HHI_DELTA_KNOTS[2]} pts.}}",
|
|
212
231
|
}
|
|
213
232
|
|
|
214
|
-
HMG_PRESUMPTION_ZONE_MAP = {
|
|
215
|
-
HHI_POST_ZONE_KNOTS[0]: {
|
|
216
|
-
HHI_DELTA_KNOTS[0]: (0, 0, 0),
|
|
217
|
-
HHI_DELTA_KNOTS[1]: (0, 0, 0),
|
|
218
|
-
HHI_DELTA_KNOTS[2]: (0, 0, 0),
|
|
219
|
-
},
|
|
220
|
-
HHI_POST_ZONE_KNOTS[1]: {
|
|
221
|
-
HHI_DELTA_KNOTS[0]: (0, 1, 1),
|
|
222
|
-
HHI_DELTA_KNOTS[1]: (1, 1, 2),
|
|
223
|
-
HHI_DELTA_KNOTS[2]: (1, 1, 2),
|
|
224
|
-
},
|
|
225
|
-
HHI_POST_ZONE_KNOTS[2]: {
|
|
226
|
-
HHI_DELTA_KNOTS[0]: (0, 2, 1),
|
|
227
|
-
HHI_DELTA_KNOTS[1]: (1, 2, 3),
|
|
228
|
-
HHI_DELTA_KNOTS[2]: (2, 2, 4),
|
|
229
|
-
},
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
ZONE_VALS = np.unique(
|
|
233
|
-
np.vstack([
|
|
234
|
-
tuple(HMG_PRESUMPTION_ZONE_MAP[_k].values()) for _k in HMG_PRESUMPTION_ZONE_MAP
|
|
235
|
-
]),
|
|
236
|
-
axis=0,
|
|
237
|
-
)
|
|
238
|
-
|
|
239
233
|
|
|
240
234
|
def enf_stats_output(
|
|
241
235
|
_data_array_dict: fid.INVData,
|
|
@@ -277,8 +271,13 @@ def enf_stats_output(
|
|
|
277
271
|
_enf_spec,
|
|
278
272
|
)
|
|
279
273
|
|
|
274
|
+
_print_format: Literal["text", "LaTeX"] = "text" if print_to_screen else "LaTeX"
|
|
280
275
|
_enf_stats_hdr_list, _enf_stats_dat_list = _enf_stats_table_func(
|
|
281
|
-
_enf_stats_cnts,
|
|
276
|
+
_enf_stats_cnts,
|
|
277
|
+
None,
|
|
278
|
+
return_type_sel=return_type_sel,
|
|
279
|
+
sort_order=sort_order,
|
|
280
|
+
print_format=_print_format,
|
|
282
281
|
)
|
|
283
282
|
|
|
284
283
|
if print_to_screen:
|
|
@@ -289,7 +288,9 @@ def enf_stats_output(
|
|
|
289
288
|
f"{_table_ind_group};",
|
|
290
289
|
_table_evid_cond,
|
|
291
290
|
)
|
|
292
|
-
stats_print_rows(
|
|
291
|
+
stats_print_rows(
|
|
292
|
+
_enf_stats_hdr_list, _enf_stats_dat_list, print_format=_print_format
|
|
293
|
+
)
|
|
293
294
|
|
|
294
295
|
return _enf_stats_hdr_list, _enf_stats_dat_list
|
|
295
296
|
|
|
@@ -472,7 +473,7 @@ def enf_cnts_byconczone(_cnts_array: ArrayBIGINT, /) -> ArrayBIGINT:
|
|
|
472
473
|
|
|
473
474
|
for _hhi_zone_delta_lim in HHI_DELTA_KNOTS[:3]:
|
|
474
475
|
_delta_test = (
|
|
475
|
-
(_hhi_delta_ranged
|
|
476
|
+
(_hhi_delta_ranged >= _hhi_zone_delta_lim)
|
|
476
477
|
if _hhi_zone_delta_lim == HHI_DELTA_KNOTS[2]
|
|
477
478
|
else (_hhi_delta_ranged == _hhi_zone_delta_lim)
|
|
478
479
|
)
|
|
@@ -528,12 +529,10 @@ def enf_stats_table_onedim(
|
|
|
528
529
|
*,
|
|
529
530
|
return_type_sel: StatsReturnSelector = StatsReturnSelector.CNT,
|
|
530
531
|
sort_order: SortSelector = SortSelector.UCH,
|
|
531
|
-
print_format: Literal["text", "LaTeX"] = "
|
|
532
|
+
print_format: Literal["text", "LaTeX"] = "LaTeX",
|
|
532
533
|
) -> tuple[list[str], list[list[str]]]:
|
|
533
534
|
_ndim_in: int = 1
|
|
534
|
-
_dim_hdr_dict = {
|
|
535
|
-
_v: (_k if _k == "TOTAL" else f"{_k}") for _k, _v in fid.CNT_FCOUNT_DICT.items()
|
|
536
|
-
} | {
|
|
535
|
+
_dim_hdr_dict = {_v: _k for _k, _v in fid.CNT_FCOUNT_DICT.items()} | {
|
|
537
536
|
_v: (
|
|
538
537
|
"[2500, 5000]"
|
|
539
538
|
if _k == "2,500 +"
|
|
@@ -583,7 +582,7 @@ def enf_stats_table_byzone(
|
|
|
583
582
|
*,
|
|
584
583
|
return_type_sel: StatsReturnSelector = StatsReturnSelector.CNT,
|
|
585
584
|
sort_order: SortSelector = SortSelector.UCH,
|
|
586
|
-
print_format: Literal["text", "LaTeX"] = "
|
|
585
|
+
print_format: Literal["text", "LaTeX"] = "LaTeX",
|
|
587
586
|
) -> tuple[list[str], list[list[str]]]:
|
|
588
587
|
_ndim_in: int = ZONE_VALS.shape[1]
|
|
589
588
|
|
|
@@ -624,7 +623,7 @@ def enf_stats_table_byzone(
|
|
|
624
623
|
if print_format == "LaTeX":
|
|
625
624
|
_stats_text_color = "HiCoYellow" if _conc_zone == 1 else "BrightGreen"
|
|
626
625
|
_stats_hdr_list += [
|
|
627
|
-
R"{} {{ \({}{}\) }};".format(
|
|
626
|
+
R"{} {{\null\hfill \({}{}\) }};".format(
|
|
628
627
|
rf"\node[text = {_stats_text_color}, fill = white, align = right]",
|
|
629
628
|
ZONE_DETAIL_STRINGS_HHI_LATEX[_stats_byzone_detail[1]],
|
|
630
629
|
(
|
|
@@ -702,6 +701,8 @@ def _stats_formatted_row(
|
|
|
702
701
|
def stats_print_rows(
|
|
703
702
|
_enf_stats_hdr_list: list[str],
|
|
704
703
|
_enf_stats_dat_list: list[list[str]],
|
|
704
|
+
/,
|
|
705
|
+
*,
|
|
705
706
|
print_format: Literal["text", "LaTeX"] = "text",
|
|
706
707
|
) -> None:
|
|
707
708
|
for _idx, _hdr in enumerate(_enf_stats_hdr_list):
|
|
@@ -846,12 +847,12 @@ def render_table_pdf(
|
|
|
846
847
|
print("\n", file=_table_coll_file)
|
|
847
848
|
|
|
848
849
|
_run_rc = subprocess.run( # noqa: S603
|
|
849
|
-
f"
|
|
850
|
+
f"latexmk -f -quiet -synctex=0 -interaction=nonstopmode -file-line-error -pdflua {_table_coll_path}".split(),
|
|
850
851
|
check=True,
|
|
851
852
|
cwd=DATA_DIR,
|
|
852
853
|
)
|
|
853
854
|
if _run_rc:
|
|
854
|
-
subprocess.run("
|
|
855
|
+
subprocess.run("latexmk -quiet -c".split(), check=True, cwd=DATA_DIR) # noqa: S603
|
|
855
856
|
del _run_rc
|
|
856
857
|
|
|
857
858
|
print(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: mergeron
|
|
3
|
-
Version: 2024.739123.
|
|
3
|
+
Version: 2024.739123.8
|
|
4
4
|
Summary: Merger Policy Analysis using Python
|
|
5
5
|
License: MIT
|
|
6
6
|
Keywords: merger policy analysis,merger guidelines,merger screening,policy presumptions,concentration standards,upward pricing pressure,GUPPI
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
mergeron/License.txt,sha256=7iX-y0EyjkbVJKJLS4ZKzuuE1wd0lryfsD_IytLG8lQ,1246
|
|
2
|
-
mergeron/__init__.py,sha256=
|
|
2
|
+
mergeron/__init__.py,sha256=HeixyFFd-PRdJY-W_M6KiJ0m8WjB7ZbER0Lrh4d-jqI,1479
|
|
3
3
|
mergeron/core/__init__.py,sha256=KtjBlZOl7jwBCAUhrTJB9PdrN39YLYytNiSUSM_gRmA,62
|
|
4
4
|
mergeron/core/damodaran_margin_data.py,sha256=rMrgN1Qtw572a0ftY97OOj4otq8ldlLrcOi-bcE-org,8554
|
|
5
|
-
mergeron/core/ftc_merger_investigations_data.py,sha256=
|
|
5
|
+
mergeron/core/ftc_merger_investigations_data.py,sha256=dMt8M6_rMUEGQHpEcAG1MupQVCo1DTqhSdZsv5tB3vU,28635
|
|
6
6
|
mergeron/core/guidelines_boundaries.py,sha256=sEvIIaOvWl6tMDYeZCIr8EsBioXOn9RSXKyKlmxnH-k,15610
|
|
7
7
|
mergeron/core/guidelines_boundary_functions.py,sha256=GGn5mwBWmxkqcat4Ya0D-J6-7ujosgCCK3eJ9RFWASI,29749
|
|
8
8
|
mergeron/core/guidelines_boundary_functions_extra.py,sha256=HDwwKZDWlrj3Tw-I0gHm0TCSDcIyb9jDfwbuDvK55B8,11322
|
|
@@ -14,18 +14,18 @@ mergeron/data/ftc_invdata.msgpack,sha256=WBFHgi7Ld4R-h2zL2Zc3TOIlKqVrbVFMH1LoI4-
|
|
|
14
14
|
mergeron/data/jinja2_LaTeX_templates/clrrate_cis_summary_table_template.tex.jinja2,sha256=ae4JiciU-pt8YAM8mRbsmt4W6ePuN1y1NPCWD95oXIo,4833
|
|
15
15
|
mergeron/data/jinja2_LaTeX_templates/ftcinvdata_byhhianddelta_table_template.tex.jinja2,sha256=ODEurkC0UHuWpjRUiQpeW85njSeUEUJYRdYg8gqoEq0,3642
|
|
16
16
|
mergeron/data/jinja2_LaTeX_templates/ftcinvdata_summary_table_template.tex.jinja2,sha256=h8_DEE0iskT9tnga5lZtxcoevN7pY4iKF-maErt4UU4,2906
|
|
17
|
-
mergeron/data/jinja2_LaTeX_templates/ftcinvdata_summarypaired_table_template.tex.jinja2,sha256=
|
|
17
|
+
mergeron/data/jinja2_LaTeX_templates/ftcinvdata_summarypaired_table_template.tex.jinja2,sha256=OJuvD2urDh3M1HHGHf1Sz32iuMAN_Yb_ltt8ewX3f5c,5511
|
|
18
18
|
mergeron/data/jinja2_LaTeX_templates/mergeron.cls,sha256=aM2nx2GVQayZ8JPtD_OU4zjYlnddYx9k9WumN4WQc6g,4385
|
|
19
19
|
mergeron/data/jinja2_LaTeX_templates/mergeron_table_collection_template.tex.jinja2,sha256=FQ1uEwQv2QlGJS1DqlJwh0nLZp5h8dRjoYfWzbq6uMc,2546
|
|
20
|
-
mergeron/data/jinja2_LaTeX_templates/setup_tikz_tables.tex,sha256=
|
|
20
|
+
mergeron/data/jinja2_LaTeX_templates/setup_tikz_tables.tex,sha256=N_ykya_TceWxuygpPEEkCpPLopsF9KkJe6dEOu166QU,3399
|
|
21
21
|
mergeron/demo/__init__.py,sha256=KtjBlZOl7jwBCAUhrTJB9PdrN39YLYytNiSUSM_gRmA,62
|
|
22
22
|
mergeron/demo/visualize_empirical_margin_distribution.py,sha256=v1xFJumBX2Ooye82kSSgly-_GpFVkYSDqBwM__rcmZY,2363
|
|
23
23
|
mergeron/gen/__init__.py,sha256=0rfcWpKDhYE_jNsw6xKTGFJqgNtfJ-5JFxHS89CIEuI,16575
|
|
24
24
|
mergeron/gen/data_generation.py,sha256=ZwcVoAfqGTwVBL7PRil_A9kZU8DQK0eCHtsBFA1QElA,16773
|
|
25
25
|
mergeron/gen/data_generation_functions.py,sha256=bP3E0IPXINRc8s0dUxS_Wqo1byVzheZLX811A17WNbU,28571
|
|
26
|
-
mergeron/gen/enforcement_stats.py,sha256=
|
|
26
|
+
mergeron/gen/enforcement_stats.py,sha256=GdM-g-kHAITQI43Wf1uAr9WKxFXB5lsnYISp3HA3j7Q,27457
|
|
27
27
|
mergeron/gen/upp_tests.py,sha256=yzEwWK1bVfjtBYMwXnL5uEWWRiR0_9y0wmjNMB-O3rU,12589
|
|
28
28
|
mergeron/py.typed,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
|
|
29
|
-
mergeron-2024.739123.
|
|
30
|
-
mergeron-2024.739123.
|
|
31
|
-
mergeron-2024.739123.
|
|
29
|
+
mergeron-2024.739123.8.dist-info/METADATA,sha256=-fiMpxKpoEJI5wNkkxv-r9HnpRlBRMsWlbRZDvYHPv4,13976
|
|
30
|
+
mergeron-2024.739123.8.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
31
|
+
mergeron-2024.739123.8.dist-info/RECORD,,
|
|
File without changes
|