Formatting utilities¶
This module defines helper functions that are not class methods.
AUTHORS:
Eric Gourgoulhon, Michal Bejger (2014-2015): initial version
Joris Vankerschaver (2010): for the function
is_atomic()
Michael Jung (2020): extended usage of
is_atomic()
- class sage.tensor.modules.format_utilities.FormattedExpansion(txt=None, latex=None)[source]¶
Bases:
SageObject
Helper class for displaying tensor expansions.
EXAMPLES:
sage: from sage.tensor.modules.format_utilities import FormattedExpansion sage: f = FormattedExpansion('v', r'\tilde v') sage: f v sage: latex(f) \tilde v sage: f = FormattedExpansion('x/2', r'\frac{x}{2}') sage: f x/2 sage: latex(f) \frac{x}{2}
>>> from sage.all import * >>> from sage.tensor.modules.format_utilities import FormattedExpansion >>> f = FormattedExpansion('v', r'\tilde v') >>> f v >>> latex(f) \tilde v >>> f = FormattedExpansion('x/2', r'\frac{x}{2}') >>> f x/2 >>> latex(f) \frac{x}{2}
from sage.tensor.modules.format_utilities import FormattedExpansion f = FormattedExpansion('v', r'\tilde v') f latex(f) f = FormattedExpansion('x/2', r'\frac{x}{2}') f latex(f)
- sage.tensor.modules.format_utilities.format_mul_latex(name1, operator, name2)[source]¶
Helper function for LaTeX names of results of multiplication or tensor product.
EXAMPLES:
sage: from sage.tensor.modules.format_utilities import format_mul_latex sage: format_mul_latex('a', '*', 'b') 'a*b' sage: format_mul_latex('a+b', '*', 'c') '\\left(a+b\\right)*c' sage: format_mul_latex('a', '*', 'b+c') 'a*\\left(b+c\\right)' sage: format_mul_latex('a+b', '*', 'c+d') '\\left(a+b\\right)*\\left(c+d\\right)' sage: format_mul_latex(None, '*', 'b') sage: format_mul_latex('a', '*', None)
>>> from sage.all import * >>> from sage.tensor.modules.format_utilities import format_mul_latex >>> format_mul_latex('a', '*', 'b') 'a*b' >>> format_mul_latex('a+b', '*', 'c') '\\left(a+b\\right)*c' >>> format_mul_latex('a', '*', 'b+c') 'a*\\left(b+c\\right)' >>> format_mul_latex('a+b', '*', 'c+d') '\\left(a+b\\right)*\\left(c+d\\right)' >>> format_mul_latex(None, '*', 'b') >>> format_mul_latex('a', '*', None)
from sage.tensor.modules.format_utilities import format_mul_latex format_mul_latex('a', '*', 'b') format_mul_latex('a+b', '*', 'c') format_mul_latex('a', '*', 'b+c') format_mul_latex('a+b', '*', 'c+d') format_mul_latex(None, '*', 'b') format_mul_latex('a', '*', None)
- sage.tensor.modules.format_utilities.format_mul_txt(name1, operator, name2)[source]¶
Helper function for text-formatted names of results of multiplication or tensor product.
EXAMPLES:
sage: from sage.tensor.modules.format_utilities import format_mul_txt sage: format_mul_txt('a', '*', 'b') 'a*b' sage: format_mul_txt('a+b', '*', 'c') '(a+b)*c' sage: format_mul_txt('a', '*', 'b+c') 'a*(b+c)' sage: format_mul_txt('a+b', '*', 'c+d') '(a+b)*(c+d)' sage: format_mul_txt(None, '*', 'b') sage: format_mul_txt('a', '*', None)
>>> from sage.all import * >>> from sage.tensor.modules.format_utilities import format_mul_txt >>> format_mul_txt('a', '*', 'b') 'a*b' >>> format_mul_txt('a+b', '*', 'c') '(a+b)*c' >>> format_mul_txt('a', '*', 'b+c') 'a*(b+c)' >>> format_mul_txt('a+b', '*', 'c+d') '(a+b)*(c+d)' >>> format_mul_txt(None, '*', 'b') >>> format_mul_txt('a', '*', None)
from sage.tensor.modules.format_utilities import format_mul_txt format_mul_txt('a', '*', 'b') format_mul_txt('a+b', '*', 'c') format_mul_txt('a', '*', 'b+c') format_mul_txt('a+b', '*', 'c+d') format_mul_txt(None, '*', 'b') format_mul_txt('a', '*', None)
- sage.tensor.modules.format_utilities.format_unop_latex(operator, name)[source]¶
Helper function for LaTeX names of results of unary operator.
EXAMPLES:
sage: from sage.tensor.modules.format_utilities import format_unop_latex sage: format_unop_latex('-', 'a') '-a' sage: format_unop_latex('-', 'a+b') '-\\left(a+b\\right)' sage: format_unop_latex('-', '(a+b)') '-(a+b)' sage: format_unop_latex('-', None)
>>> from sage.all import * >>> from sage.tensor.modules.format_utilities import format_unop_latex >>> format_unop_latex('-', 'a') '-a' >>> format_unop_latex('-', 'a+b') '-\\left(a+b\\right)' >>> format_unop_latex('-', '(a+b)') '-(a+b)' >>> format_unop_latex('-', None)
from sage.tensor.modules.format_utilities import format_unop_latex format_unop_latex('-', 'a') format_unop_latex('-', 'a+b') format_unop_latex('-', '(a+b)') format_unop_latex('-', None)
- sage.tensor.modules.format_utilities.format_unop_txt(operator, name)[source]¶
Helper function for text-formatted names of results of unary operator.
EXAMPLES:
sage: from sage.tensor.modules.format_utilities import format_unop_txt sage: format_unop_txt('-', 'a') '-a' sage: format_unop_txt('-', 'a+b') '-(a+b)' sage: format_unop_txt('-', '(a+b)') '-(a+b)' sage: format_unop_txt('-', None)
>>> from sage.all import * >>> from sage.tensor.modules.format_utilities import format_unop_txt >>> format_unop_txt('-', 'a') '-a' >>> format_unop_txt('-', 'a+b') '-(a+b)' >>> format_unop_txt('-', '(a+b)') '-(a+b)' >>> format_unop_txt('-', None)
from sage.tensor.modules.format_utilities import format_unop_txt format_unop_txt('-', 'a') format_unop_txt('-', 'a+b') format_unop_txt('-', '(a+b)') format_unop_txt('-', None)
- sage.tensor.modules.format_utilities.is_atomic(expr, sep=['+', '-'])[source]¶
Helper function to check whether some LaTeX expression is atomic.
Adapted from method
_is_atomic()
of classDifferentialFormFormatter
written by Joris Vankerschaver (2010) and modified by Michael Jung (2020).INPUT:
expr
– string representing the expression (e.g. LaTeX string)sep
– (default:['+', '-']
) a list of strings representing the operations (e.g. LaTeX strings)
OUTPUT:
True
if the operations are enclosed in parentheses andFalse
otherwise.
EXAMPLES:
sage: from sage.tensor.modules.format_utilities import is_atomic sage: is_atomic("2*x") True sage: is_atomic("2+x") False sage: is_atomic("(2+x)") True
>>> from sage.all import * >>> from sage.tensor.modules.format_utilities import is_atomic >>> is_atomic("2*x") True >>> is_atomic("2+x") False >>> is_atomic("(2+x)") True
from sage.tensor.modules.format_utilities import is_atomic is_atomic("2*x") is_atomic("2+x") is_atomic("(2+x)")
Moreover the separator can be changed:
sage: is_atomic("a*b", sep=['*']) False sage: is_atomic("(a*b)", sep=['*']) True sage: is_atomic("a mod b", sep=['mod']) False sage: is_atomic("(a mod b)", sep=['mod']) True
>>> from sage.all import * >>> is_atomic("a*b", sep=['*']) False >>> is_atomic("(a*b)", sep=['*']) True >>> is_atomic("a mod b", sep=['mod']) False >>> is_atomic("(a mod b)", sep=['mod']) True
is_atomic("a*b", sep=['*']) is_atomic("(a*b)", sep=['*']) is_atomic("a mod b", sep=['mod']) is_atomic("(a mod b)", sep=['mod'])
- sage.tensor.modules.format_utilities.is_atomic_wedge_latex(expression)[source]¶
Helper function to check whether LaTeX-formatted expression is atomic in terms of wedge products.
Adapted from method
_is_atomic()
of classDifferentialFormFormatter
written by Joris Vankerschaver (2010) and modified by Michael Jung (2020).INPUT:
expression
– string representing the LaTeX expression
OUTPUT:
True
if wedge products are enclosed in parentheses andFalse
otherwise.
EXAMPLES:
sage: from sage.tensor.modules.format_utilities import is_atomic_wedge_latex sage: is_atomic_wedge_latex(r"a") True sage: is_atomic_wedge_latex(r"a\wedge b") False sage: is_atomic_wedge_latex(r"(a\wedge b)") True sage: is_atomic_wedge_latex(r"(a\wedge b)\wedge c") False sage: is_atomic_wedge_latex(r"((a\wedge b)\wedge c)") True sage: is_atomic_wedge_latex(r"(a\wedge b\wedge c)") True sage: is_atomic_wedge_latex(r"\omega\wedge\theta") False sage: is_atomic_wedge_latex(r"(\omega\wedge\theta)") True sage: is_atomic_wedge_latex(r"\omega\wedge(\theta+a)") False
>>> from sage.all import * >>> from sage.tensor.modules.format_utilities import is_atomic_wedge_latex >>> is_atomic_wedge_latex(r"a") True >>> is_atomic_wedge_latex(r"a\wedge b") False >>> is_atomic_wedge_latex(r"(a\wedge b)") True >>> is_atomic_wedge_latex(r"(a\wedge b)\wedge c") False >>> is_atomic_wedge_latex(r"((a\wedge b)\wedge c)") True >>> is_atomic_wedge_latex(r"(a\wedge b\wedge c)") True >>> is_atomic_wedge_latex(r"\omega\wedge\theta") False >>> is_atomic_wedge_latex(r"(\omega\wedge\theta)") True >>> is_atomic_wedge_latex(r"\omega\wedge(\theta+a)") False
from sage.tensor.modules.format_utilities import is_atomic_wedge_latex is_atomic_wedge_latex(r"a") is_atomic_wedge_latex(r"a\wedge b") is_atomic_wedge_latex(r"(a\wedge b)") is_atomic_wedge_latex(r"(a\wedge b)\wedge c") is_atomic_wedge_latex(r"((a\wedge b)\wedge c)") is_atomic_wedge_latex(r"(a\wedge b\wedge c)") is_atomic_wedge_latex(r"\omega\wedge\theta") is_atomic_wedge_latex(r"(\omega\wedge\theta)") is_atomic_wedge_latex(r"\omega\wedge(\theta+a)")
- sage.tensor.modules.format_utilities.is_atomic_wedge_txt(expression)[source]¶
Helper function to check whether some text-formatted expression is atomic in terms of wedge products.
Adapted from method
_is_atomic()
of classDifferentialFormFormatter
written by Joris Vankerschaver (2010) and modified by Michael Jung (2020).INPUT:
expression
– string representing the text-formatted expression
OUTPUT:
True
if wedge products are enclosed in parentheses andFalse
otherwise.
EXAMPLES:
sage: from sage.tensor.modules.format_utilities import is_atomic_wedge_txt sage: is_atomic_wedge_txt("a") True sage: is_atomic_wedge_txt(r"a∧b") False sage: is_atomic_wedge_txt(r"(a∧b)") True sage: is_atomic_wedge_txt(r"(a∧b)∧c") False sage: is_atomic_wedge_txt(r"(a∧b∧c)") True
>>> from sage.all import * >>> from sage.tensor.modules.format_utilities import is_atomic_wedge_txt >>> is_atomic_wedge_txt("a") True >>> is_atomic_wedge_txt(r"a∧b") False >>> is_atomic_wedge_txt(r"(a∧b)") True >>> is_atomic_wedge_txt(r"(a∧b)∧c") False >>> is_atomic_wedge_txt(r"(a∧b∧c)") True
from sage.tensor.modules.format_utilities import is_atomic_wedge_txt is_atomic_wedge_txt("a") is_atomic_wedge_txt(r"a∧b") is_atomic_wedge_txt(r"(a∧b)") is_atomic_wedge_txt(r"(a∧b)∧c") is_atomic_wedge_txt(r"(a∧b∧c)")