AIM-PIbd-32-Kurbanova-A-A/aimenv/Lib/site-packages/statsmodels/iolib/tests/test_table.py

264 lines
9.2 KiB
Python
Raw Normal View History

2024-10-02 22:15:59 +04:00
from numpy.testing import assert_equal
from statsmodels.iolib.table import SimpleTable, default_txt_fmt
from statsmodels.iolib.table import default_latex_fmt
from statsmodels.iolib.table import default_html_fmt
import pandas
from statsmodels.regression.linear_model import OLS
ltx_fmt1 = default_latex_fmt.copy()
html_fmt1 = default_html_fmt.copy()
class TestSimpleTable:
def test_simple_table_1(self):
# Basic test, test_simple_table_1
desired = '''
=====================
header1 header2
---------------------
stub1 1.30312 2.73999
stub2 1.95038 2.65765
---------------------
'''
test1data = [[1.30312, 2.73999],[1.95038, 2.65765]]
test1stubs = ('stub1', 'stub2')
test1header = ('header1', 'header2')
actual = SimpleTable(test1data, test1header, test1stubs,
txt_fmt=default_txt_fmt)
actual = '\n%s\n' % actual.as_text()
assert_equal(desired, str(actual))
def test_simple_table_2(self):
# Test SimpleTable.extend_right()
desired = '''
=============================================================
header s1 header d1 header s2 header d2
-------------------------------------------------------------
stub R1 C1 10.30312 10.73999 stub R1 C2 50.95038 50.65765
stub R2 C1 90.30312 90.73999 stub R2 C2 40.95038 40.65765
-------------------------------------------------------------
'''
data1 = [[10.30312, 10.73999], [90.30312, 90.73999]]
data2 = [[50.95038, 50.65765], [40.95038, 40.65765]]
stubs1 = ['stub R1 C1', 'stub R2 C1']
stubs2 = ['stub R1 C2', 'stub R2 C2']
header1 = ['header s1', 'header d1']
header2 = ['header s2', 'header d2']
actual1 = SimpleTable(data1, header1, stubs1, txt_fmt=default_txt_fmt)
actual2 = SimpleTable(data2, header2, stubs2, txt_fmt=default_txt_fmt)
actual1.extend_right(actual2)
actual = '\n%s\n' % actual1.as_text()
assert_equal(desired, str(actual))
def test_simple_table_3(self):
# Test SimpleTable.extend() as in extend down
desired = '''
==============================
header s1 header d1
------------------------------
stub R1 C1 10.30312 10.73999
stub R2 C1 90.30312 90.73999
header s2 header d2
------------------------------
stub R1 C2 50.95038 50.65765
stub R2 C2 40.95038 40.65765
------------------------------
'''
data1 = [[10.30312, 10.73999], [90.30312, 90.73999]]
data2 = [[50.95038, 50.65765], [40.95038, 40.65765]]
stubs1 = ['stub R1 C1', 'stub R2 C1']
stubs2 = ['stub R1 C2', 'stub R2 C2']
header1 = ['header s1', 'header d1']
header2 = ['header s2', 'header d2']
actual1 = SimpleTable(data1, header1, stubs1, txt_fmt=default_txt_fmt)
actual2 = SimpleTable(data2, header2, stubs2, txt_fmt=default_txt_fmt)
actual1.extend(actual2)
actual = '\n%s\n' % actual1.as_text()
assert_equal(desired, str(actual))
def test_simple_table_4(self):
# Basic test, test_simple_table_4 test uses custom txt_fmt
txt_fmt1 = dict(data_fmts = ['%3.2f', '%d'],
empty_cell = ' ',
colwidths = 1,
colsep=' * ',
row_pre = '* ',
row_post = ' *',
table_dec_above='*',
table_dec_below='*',
header_dec_below='*',
header_fmt = '%s',
stub_fmt = '%s',
title_align='r',
header_align = 'r',
data_aligns = "r",
stubs_align = "l",
fmt = 'txt'
)
ltx_fmt1 = default_latex_fmt.copy()
html_fmt1 = default_html_fmt.copy()
cell0data = 0.0000
cell1data = 1
row0data = [cell0data, cell1data]
row1data = [2, 3.333]
table1data = [ row0data, row1data ]
test1stubs = ('stub1', 'stub2')
test1header = ('header1', 'header2')
tbl = SimpleTable(table1data, test1header, test1stubs,txt_fmt=txt_fmt1,
ltx_fmt=ltx_fmt1, html_fmt=html_fmt1)
def test_txt_fmt1(self):
# Limited test of custom txt_fmt
desired = """
*****************************
* * header1 * header2 *
*****************************
* stub1 * 0.00 * 1 *
* stub2 * 2.00 * 3 *
*****************************
"""
actual = '\n%s\n' % tbl.as_text()
#print(actual)
#print(desired)
assert_equal(actual, desired)
def test_ltx_fmt1(self):
# Limited test of custom ltx_fmt
desired = r"""
\begin{tabular}{lcc}
\toprule
& \textbf{header1} & \textbf{header2} \\
\midrule
\textbf{stub1} & 0.0 & 1 \\
\textbf{stub2} & 2 & 3.333 \\
\bottomrule
\end{tabular}
"""
actual = '\n%s\n' % tbl.as_latex_tabular(center=False)
#print(actual)
#print(desired)
assert_equal(actual, desired)
# Test "center=True" (the default):
desired_centered = r"""
\begin{center}
%s
\end{center}
""" % desired[1:-1]
actual_centered = '\n%s\n' % tbl.as_latex_tabular()
assert_equal(actual_centered, desired_centered)
def test_html_fmt1(self):
# Limited test of custom html_fmt
desired = """
<table class="simpletable">
<tr>
<td></td> <th>header1</th> <th>header2</th>
</tr>
<tr>
<th>stub1</th> <td>0.0</td> <td>1</td>
</tr>
<tr>
<th>stub2</th> <td>2</td> <td>3.333</td>
</tr>
</table>
""" # noqa:W291
actual = '\n%s\n' % tbl.as_html()
assert_equal(actual, desired)
test_txt_fmt1(self)
test_ltx_fmt1(self)
test_html_fmt1(self)
def test_simple_table_special_chars(self):
# Simple table with characters: (%, >, |, _, $, &, #)
cell0c_data = 22
cell1c_data = 1053
row0c_data = [cell0c_data, cell1c_data]
row1c_data = [23, 6250.4]
table1c_data = [ row0c_data, row1c_data ]
test1c_stubs = ('>stub1%', 'stub_2')
test1c_header = ('#header1$', 'header&|')
tbl_c = SimpleTable(table1c_data, test1c_header, test1c_stubs, ltx_fmt=ltx_fmt1)
def test_ltx_special_chars(self):
# Test for special characters (latex) in headers and stubs
desired = r"""
\begin{tabular}{lcc}
\toprule
& \textbf{\#header1\$} & \textbf{header\&$|$} \\
\midrule
\textbf{$>$stub1\%} & 22 & 1053 \\
\textbf{stub\_2} & 23 & 6250.4 \\
\bottomrule
\end{tabular}
"""
actual = '\n%s\n' % tbl_c.as_latex_tabular(center=False)
assert_equal(actual, desired)
test_ltx_special_chars(self)
def test_regression_with_tuples(self):
i = pandas.Series([1, 2, 3, 4] * 10, name="i")
y = pandas.Series([1, 2, 3, 4, 5] * 8, name="y")
x = pandas.Series([1, 2, 3, 4, 5, 6, 7, 8] * 5, name="x")
df = pandas.DataFrame(index=i.index)
df = df.join(i)
endo = df.join(y)
exo = df.join(x)
endo_groups = endo.groupby("i")
exo_groups = exo.groupby("i")
exo_df = exo_groups.agg(['sum', 'max'])
endo_df = endo_groups.agg(['sum', 'max'])
reg = OLS(exo_df[[("x", "sum")]], endo_df).fit()
interesting_lines = []
import warnings
with warnings.catch_warnings():
# Catch ominormal warning, not interesting here
warnings.simplefilter("ignore")
for line in str(reg.summary()).splitlines():
if "_" in line:
interesting_lines.append(line[:38])
desired = ["Dep. Variable: x_sum ",
"y_sum 1.4595 0.209 ",
"y_max 0.2432 0.035 "]
assert_equal(sorted(desired), sorted(interesting_lines))
def test_default_alignment(self):
desired = '''
=====================
header1 header2
---------------------
stub1 1.30312 2.73
stub2 1.95038 2.6
---------------------
'''
test1data = [[1.30312, 2.73], [1.95038, 2.6]]
test1stubs = ('stub1', 'stub2')
test1header = ('header1', 'header2')
actual = SimpleTable(test1data, test1header, test1stubs,
txt_fmt=default_txt_fmt)
actual = '\n%s\n' % actual.as_text()
assert_equal(desired, str(actual))
def test__repr_latex(self):
desired = r"""
\begin{center}
\begin{tabular}{lcc}
\toprule
& \textbf{header1} & \textbf{header2} \\
\midrule
\textbf{stub1} & 5.394 & 29.3 \\
\textbf{stub2} & 343 & 34.2 \\
\bottomrule
\end{tabular}
\end{center}
"""
testdata = [[5.394, 29.3], [343, 34.2]]
teststubs = ('stub1', 'stub2')
testheader = ('header1', 'header2')
tbl = SimpleTable(testdata, testheader, teststubs,
txt_fmt=default_txt_fmt)
actual = '\n%s\n' % tbl._repr_latex_()
assert_equal(actual, desired)