123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- def pprint_nodes(subtrees):
- """
- Prettyprints systems of nodes.
- Examples
- ========
- >>> from sympy.printing.tree import pprint_nodes
- >>> print(pprint_nodes(["a", "b1\\nb2", "c"]))
- +-a
- +-b1
- | b2
- +-c
- """
- def indent(s, type=1):
- x = s.split("\n")
- r = "+-%s\n" % x[0]
- for a in x[1:]:
- if a == "":
- continue
- if type == 1:
- r += "| %s\n" % a
- else:
- r += " %s\n" % a
- return r
- if not subtrees:
- return ""
- f = ""
- for a in subtrees[:-1]:
- f += indent(a)
- f += indent(subtrees[-1], 2)
- return f
- def print_node(node, assumptions=True):
- """
- Returns information about the "node".
- This includes class name, string representation and assumptions.
- Parameters
- ==========
- assumptions : bool, optional
- See the ``assumptions`` keyword in ``tree``
- """
- s = "%s: %s\n" % (node.__class__.__name__, str(node))
- if assumptions:
- d = node._assumptions
- else:
- d = None
- if d:
- for a in sorted(d):
- v = d[a]
- if v is None:
- continue
- s += "%s: %s\n" % (a, v)
- return s
- def tree(node, assumptions=True):
- """
- Returns a tree representation of "node" as a string.
- It uses print_node() together with pprint_nodes() on node.args recursively.
- Parameters
- ==========
- asssumptions : bool, optional
- The flag to decide whether to print out all the assumption data
- (such as ``is_integer`, ``is_real``) associated with the
- expression or not.
- Enabling the flag makes the result verbose, and the printed
- result may not be determinisitic because of the randomness used
- in backtracing the assumptions.
- See Also
- ========
- print_tree
- """
- subtrees = []
- for arg in node.args:
- subtrees.append(tree(arg, assumptions=assumptions))
- s = print_node(node, assumptions=assumptions) + pprint_nodes(subtrees)
- return s
- def print_tree(node, assumptions=True):
- """
- Prints a tree representation of "node".
- Parameters
- ==========
- asssumptions : bool, optional
- The flag to decide whether to print out all the assumption data
- (such as ``is_integer`, ``is_real``) associated with the
- expression or not.
- Enabling the flag makes the result verbose, and the printed
- result may not be determinisitic because of the randomness used
- in backtracing the assumptions.
- Examples
- ========
- >>> from sympy.printing import print_tree
- >>> from sympy import Symbol
- >>> x = Symbol('x', odd=True)
- >>> y = Symbol('y', even=True)
- Printing with full assumptions information:
- >>> print_tree(y**x)
- Pow: y**x
- +-Symbol: y
- | algebraic: True
- | commutative: True
- | complex: True
- | even: True
- | extended_real: True
- | finite: True
- | hermitian: True
- | imaginary: False
- | infinite: False
- | integer: True
- | irrational: False
- | noninteger: False
- | odd: False
- | rational: True
- | real: True
- | transcendental: False
- +-Symbol: x
- algebraic: True
- commutative: True
- complex: True
- even: False
- extended_nonzero: True
- extended_real: True
- finite: True
- hermitian: True
- imaginary: False
- infinite: False
- integer: True
- irrational: False
- noninteger: False
- nonzero: True
- odd: True
- rational: True
- real: True
- transcendental: False
- zero: False
- Hiding the assumptions:
- >>> print_tree(y**x, assumptions=False)
- Pow: y**x
- +-Symbol: y
- +-Symbol: x
- See Also
- ========
- tree
- """
- print(tree(node, assumptions=assumptions))
|