|
|
from sympy.core.singleton import S |
|
|
from sympy.printing.tableform import TableForm |
|
|
from sympy.printing.latex import latex |
|
|
from sympy.abc import x |
|
|
from sympy.functions.elementary.miscellaneous import sqrt |
|
|
from sympy.functions.elementary.trigonometric import sin |
|
|
from sympy.testing.pytest import raises |
|
|
|
|
|
from textwrap import dedent |
|
|
|
|
|
|
|
|
def test_TableForm(): |
|
|
s = str(TableForm([["a", "b"], ["c", "d"], ["e", 0]], |
|
|
headings="automatic")) |
|
|
assert s == ( |
|
|
' | 1 2\n' |
|
|
'-------\n' |
|
|
'1 | a b\n' |
|
|
'2 | c d\n' |
|
|
'3 | e ' |
|
|
) |
|
|
s = str(TableForm([["a", "b"], ["c", "d"], ["e", 0]], |
|
|
headings="automatic", wipe_zeros=False)) |
|
|
assert s == dedent('''\ |
|
|
| 1 2 |
|
|
------- |
|
|
1 | a b |
|
|
2 | c d |
|
|
3 | e 0''') |
|
|
s = str(TableForm([[x**2, "b"], ["c", x**2], ["e", "f"]], |
|
|
headings=("automatic", None))) |
|
|
assert s == ( |
|
|
'1 | x**2 b \n' |
|
|
'2 | c x**2\n' |
|
|
'3 | e f ' |
|
|
) |
|
|
s = str(TableForm([["a", "b"], ["c", "d"], ["e", "f"]], |
|
|
headings=(None, "automatic"))) |
|
|
assert s == dedent('''\ |
|
|
1 2 |
|
|
--- |
|
|
a b |
|
|
c d |
|
|
e f''') |
|
|
s = str(TableForm([[5, 7], [4, 2], [10, 3]], |
|
|
headings=[["Group A", "Group B", "Group C"], ["y1", "y2"]])) |
|
|
assert s == ( |
|
|
' | y1 y2\n' |
|
|
'---------------\n' |
|
|
'Group A | 5 7 \n' |
|
|
'Group B | 4 2 \n' |
|
|
'Group C | 10 3 ' |
|
|
) |
|
|
raises( |
|
|
ValueError, |
|
|
lambda: |
|
|
TableForm( |
|
|
[[5, 7], [4, 2], [10, 3]], |
|
|
headings=[["Group A", "Group B", "Group C"], ["y1", "y2"]], |
|
|
alignments="middle") |
|
|
) |
|
|
s = str(TableForm([[5, 7], [4, 2], [10, 3]], |
|
|
headings=[["Group A", "Group B", "Group C"], ["y1", "y2"]], |
|
|
alignments="right")) |
|
|
assert s == dedent('''\ |
|
|
| y1 y2 |
|
|
--------------- |
|
|
Group A | 5 7 |
|
|
Group B | 4 2 |
|
|
Group C | 10 3''') |
|
|
|
|
|
|
|
|
d = [[1, 100], [100, 1]] |
|
|
s = TableForm(d, headings=(('xxx', 'x'), None), alignments='l') |
|
|
assert str(s) == ( |
|
|
'xxx | 1 100\n' |
|
|
' x | 100 1 ' |
|
|
) |
|
|
s = TableForm(d, headings=(('xxx', 'x'), None), alignments='lr') |
|
|
assert str(s) == dedent('''\ |
|
|
xxx | 1 100 |
|
|
x | 100 1''') |
|
|
s = TableForm(d, headings=(('xxx', 'x'), None), alignments='clr') |
|
|
assert str(s) == dedent('''\ |
|
|
xxx | 1 100 |
|
|
x | 100 1''') |
|
|
|
|
|
s = TableForm(d, headings=(('xxx', 'x'), None)) |
|
|
assert str(s) == ( |
|
|
'xxx | 1 100\n' |
|
|
' x | 100 1 ' |
|
|
) |
|
|
|
|
|
raises(ValueError, lambda: TableForm(d, alignments='clr')) |
|
|
|
|
|
|
|
|
s = str(TableForm([[None, "-", 2], [1]], pad='?')) |
|
|
assert s == dedent('''\ |
|
|
? - 2 |
|
|
1 ? ?''') |
|
|
|
|
|
|
|
|
def test_TableForm_latex(): |
|
|
s = latex(TableForm([[0, x**3], ["c", S.One/4], [sqrt(x), sin(x**2)]], |
|
|
wipe_zeros=True, headings=("automatic", "automatic"))) |
|
|
assert s == ( |
|
|
'\\begin{tabular}{r l l}\n' |
|
|
' & 1 & 2 \\\\\n' |
|
|
'\\hline\n' |
|
|
'1 & & $x^{3}$ \\\\\n' |
|
|
'2 & $c$ & $\\frac{1}{4}$ \\\\\n' |
|
|
'3 & $\\sqrt{x}$ & $\\sin{\\left(x^{2} \\right)}$ \\\\\n' |
|
|
'\\end{tabular}' |
|
|
) |
|
|
s = latex(TableForm([[0, x**3], ["c", S.One/4], [sqrt(x), sin(x**2)]], |
|
|
wipe_zeros=True, headings=("automatic", "automatic"), alignments='l')) |
|
|
assert s == ( |
|
|
'\\begin{tabular}{r l l}\n' |
|
|
' & 1 & 2 \\\\\n' |
|
|
'\\hline\n' |
|
|
'1 & & $x^{3}$ \\\\\n' |
|
|
'2 & $c$ & $\\frac{1}{4}$ \\\\\n' |
|
|
'3 & $\\sqrt{x}$ & $\\sin{\\left(x^{2} \\right)}$ \\\\\n' |
|
|
'\\end{tabular}' |
|
|
) |
|
|
s = latex(TableForm([[0, x**3], ["c", S.One/4], [sqrt(x), sin(x**2)]], |
|
|
wipe_zeros=True, headings=("automatic", "automatic"), alignments='l'*3)) |
|
|
assert s == ( |
|
|
'\\begin{tabular}{l l l}\n' |
|
|
' & 1 & 2 \\\\\n' |
|
|
'\\hline\n' |
|
|
'1 & & $x^{3}$ \\\\\n' |
|
|
'2 & $c$ & $\\frac{1}{4}$ \\\\\n' |
|
|
'3 & $\\sqrt{x}$ & $\\sin{\\left(x^{2} \\right)}$ \\\\\n' |
|
|
'\\end{tabular}' |
|
|
) |
|
|
s = latex(TableForm([["a", x**3], ["c", S.One/4], [sqrt(x), sin(x**2)]], |
|
|
headings=("automatic", "automatic"))) |
|
|
assert s == ( |
|
|
'\\begin{tabular}{r l l}\n' |
|
|
' & 1 & 2 \\\\\n' |
|
|
'\\hline\n' |
|
|
'1 & $a$ & $x^{3}$ \\\\\n' |
|
|
'2 & $c$ & $\\frac{1}{4}$ \\\\\n' |
|
|
'3 & $\\sqrt{x}$ & $\\sin{\\left(x^{2} \\right)}$ \\\\\n' |
|
|
'\\end{tabular}' |
|
|
) |
|
|
s = latex(TableForm([["a", x**3], ["c", S.One/4], [sqrt(x), sin(x**2)]], |
|
|
formats=['(%s)', None], headings=("automatic", "automatic"))) |
|
|
assert s == ( |
|
|
'\\begin{tabular}{r l l}\n' |
|
|
' & 1 & 2 \\\\\n' |
|
|
'\\hline\n' |
|
|
'1 & (a) & $x^{3}$ \\\\\n' |
|
|
'2 & (c) & $\\frac{1}{4}$ \\\\\n' |
|
|
'3 & (sqrt(x)) & $\\sin{\\left(x^{2} \\right)}$ \\\\\n' |
|
|
'\\end{tabular}' |
|
|
) |
|
|
|
|
|
def neg_in_paren(x, i, j): |
|
|
if i % 2: |
|
|
return ('(%s)' if x < 0 else '%s') % x |
|
|
else: |
|
|
pass |
|
|
s = latex(TableForm([[-1, 2], [-3, 4]], |
|
|
formats=[neg_in_paren]*2, headings=("automatic", "automatic"))) |
|
|
assert s == ( |
|
|
'\\begin{tabular}{r l l}\n' |
|
|
' & 1 & 2 \\\\\n' |
|
|
'\\hline\n' |
|
|
'1 & -1 & 2 \\\\\n' |
|
|
'2 & (-3) & 4 \\\\\n' |
|
|
'\\end{tabular}' |
|
|
) |
|
|
s = latex(TableForm([["a", x**3], ["c", S.One/4], [sqrt(x), sin(x**2)]])) |
|
|
assert s == ( |
|
|
'\\begin{tabular}{l l}\n' |
|
|
'$a$ & $x^{3}$ \\\\\n' |
|
|
'$c$ & $\\frac{1}{4}$ \\\\\n' |
|
|
'$\\sqrt{x}$ & $\\sin{\\left(x^{2} \\right)}$ \\\\\n' |
|
|
'\\end{tabular}' |
|
|
) |
|
|
|