.. Copyright (C) 2001-2025 NLTK Project
.. For license information, see LICENSE.TXT

=========================================================
 Unit tests for nltk.tree.prettyprinter.TreePrettyPrinter
=========================================================

    >>> from nltk.tree import Tree, TreePrettyPrinter

Tree nr 2170 from nltk.corpus.treebank:

    >>> tree = Tree.fromstring(
    ...     '(S (NP-SBJ (PRP I)) (VP (VBP feel) (ADJP-PRD (RB pretty) '
    ...     '(JJ good)) (PP-CLR (IN about) (NP (PRP it)))) (. .))')
    >>> tpp = TreePrettyPrinter(tree)
    >>> print(tpp.text())
                                 S
       __________________________|_____________________
      |                          VP                    |
      |      ____________________|___________          |
      |     |             |                PP-CLR      |
      |     |             |             _____|_____    |
    NP-SBJ  |          ADJP-PRD        |           NP  |
      |     |      _______|______      |           |   |
     PRP   VBP    RB             JJ    IN         PRP  .
      |     |     |              |     |           |   |
      I    feel pretty          good about         it  .

    >>> print(tpp.text(unicodelines=True))
                                 S
      ┌──────────────────────────┼─────────────────────┐
      │                          VP                    │
      │     ┌─────────────┬──────┴───────────┐         │
      │     │             │                PP-CLR      │
      │     │             │            ┌─────┴─────┐   │
    NP-SBJ  │          ADJP-PRD        │           NP  │
      │     │     ┌───────┴──────┐     │           │   │
     PRP   VBP    RB             JJ    IN         PRP  .
      │     │     │              │     │           │   │
      I    feel pretty          good about         it  .

A tree with long labels:

    >>> tree = Tree.fromstring(
    ...     '(sentence (plural-noun-phrase (plural-noun Superconductors)) '
    ...     '(verb-phrase (plural-verb conduct) '
    ...     '(noun-phrase (singular-noun electricity))))')
    >>> tpp = TreePrettyPrinter(tree)
    >>> print(tpp.text(abbreviate=8, nodedist=2))
                sentence
         __________|__________
        |                 verb-phr.
        |           __________|__________
    plural-n.      |                 noun-phr.
        |          |                     |
    plural-n.  plural-v.             singular.
        |          |                     |
    Supercon.   conduct              electric.

    >>> print(tpp.text(maxwidth=8, nodedist=2))
              sentence
        _________|________
       |                verb-
       |                phrase
       |          ________|_________
    plural-      |                noun-
     noun-       |                phrase
     phrase      |                  |
       |         |                  |
    plural-   plural-           singular-
      noun      verb               noun
       |         |                  |
    Supercon  conduct            electric
    ductors                        ity

A discontinuous tree:

    >>> tree = Tree.fromstring(
    ...     '(top (punct 8) (smain (noun 0) (verb 1) (inf (verb 5) (inf (verb 6) '
    ...     '(conj (inf (pp (prep 2) (np (det 3) (noun 4))) (verb 7)) (inf (verb 9)) '
    ...     '(vg 10) (inf (verb 11)))))) (punct 12))', read_leaf=int)
    >>> sentence = ('Ze had met haar moeder kunnen gaan winkelen ,'
    ...             ' zwemmen of terrassen .'.split())
    >>> tpp = TreePrettyPrinter(tree, sentence)
    >>> print(tpp.text())
                                          top
                                      _____|______________________________________________
                                   smain                      |                           |
      _______________________________|_____                   |                           |
     |    |                               inf                 |                           |
     |    |                           _____|____              |                           |
     |    |                          |         inf            |                           |
     |    |                          |      ____|_____        |                           |
     |    |                          |     |         conj     |                           |
     |    |                    _____ | ___ | _________|______ | __________________        |
     |    |                  inf     |     |                  |      |     |      |       |
     |    |          _________|_____ | ___ | _________        |      |     |      |       |
     |    |         pp               |     |          |       |      |     |      |       |
     |    |     ____|____            |     |          |       |      |     |      |       |
     |    |    |         np          |     |          |       |     inf    |     inf      |
     |    |    |     ____|____       |     |          |       |      |     |      |       |
    noun verb prep det       noun   verb  verb       verb   punct   verb   vg    verb   punct
     |    |    |    |         |      |     |          |       |      |     |      |       |
     Ze  had  met  haar     moeder kunnen gaan     winkelen   ,   zwemmen  of terrassen   .

    >>> print(tpp.text(unicodelines=True))
                                          top
                                     ┌─────┴──────────────────┬───────────────────────────┐
                                   smain                      │                           │
     ┌────┬──────────────────────────┴─────┐                  │                           │
     │    │                               inf                 │                           │
     │    │                          ┌─────┴────┐             │                           │
     │    │                          │         inf            │                           │
     │    │                          │     ┌────┴─────┐       │                           │
     │    │                          │     │         conj     │                           │
     │    │                   ┌───── │ ─── │ ─────────┴────── │ ─────┬─────┬──────┐       │
     │    │                  inf     │     │                  │      │     │      │       │
     │    │         ┌─────────┴───── │ ─── │ ─────────┐       │      │     │      │       │
     │    │         pp               │     │          │       │      │     │      │       │
     │    │    ┌────┴────┐           │     │          │       │      │     │      │       │
     │    │    │         np          │     │          │       │     inf    │     inf      │
     │    │    │    ┌────┴────┐      │     │          │       │      │     │      │       │
    noun verb prep det       noun   verb  verb       verb   punct   verb   vg    verb   punct
     │    │    │    │         │      │     │          │       │      │     │      │       │
     Ze  had  met  haar     moeder kunnen gaan     winkelen   ,   zwemmen  of terrassen   .

Importing TreePrettyPrinter
---------------------------

First of all, a simple tree will be constructed::

  >>> from nltk.tree import Tree
  >>> tree = Tree.fromstring('(S (NP Mary) (VP walks))')

We'll use this sample tree to show that the method of importing `TreePrettyPrinter` work correctly:

- Recommended::

    >>> from nltk.tree import TreePrettyPrinter
    >>> print(TreePrettyPrinter(tree).text())
          S
      ____|____
     NP        VP
     |         |
    Mary     walks

- Alternative but valid options::

    >>> from nltk import TreePrettyPrinter
    >>> print(TreePrettyPrinter(tree).text())
          S
      ____|____
     NP        VP
     |         |
    Mary     walks

    >>> from nltk.tree.prettyprinter import TreePrettyPrinter
    >>> print(TreePrettyPrinter(tree).text())
          S
      ____|____
     NP        VP
     |         |
    Mary     walks

- Deprecated, do not use::

    >>> from nltk.treeprettyprinter import TreePrettyPrinter
    >>> print(TreePrettyPrinter(tree).text())
          S
      ____|____
     NP        VP
     |         |
    Mary     walks

  This method will throw a DeprecationWarning::

    Import `TreePrettyPrinter` using `from nltk.tree import TreePrettyPrinter` instead.
