1"""Pipe source through the Graphviz *unflatten* preprocessor.""" 
    2 
    3import graphviz 
    4from . import _tools 
    5from . import base 
    6from . import backend 
    7from . import encoding 
    8 
    9__all__ = ['Unflatten'] 
    10 
    11 
    12class Unflatten(encoding.Encoding, base.Base, backend.Unflatten): 
    13    """Pipe source through the Graphviz *unflatten* preprocessor.""" 
    14 
    15    @_tools.deprecate_positional_args(supported_number=0, ignore_arg='self') 
    16    def unflatten(self, 
    17                  stagger: int | None = None, 
    18                  fanout: bool = False, 
    19                  chain: int | None = None) -> 'graphviz.Source': 
    20        """Return a new :class:`.Source` instance with the source 
    21            piped through the Graphviz *unflatten* preprocessor. 
    22 
    23        Args: 
    24            stagger: Stagger the minimum length 
    25                of leaf edges between 1 and this small integer. 
    26            fanout: Fanout nodes with indegree = outdegree = 1 
    27                when staggering (requires ``stagger``). 
    28            chain: Form disconnected nodes into chains 
    29                of up to this many nodes. 
    30 
    31        Returns: 
    32            Prepocessed DOT source code (improved layout aspect ratio). 
    33 
    34        Raises: 
    35            graphviz.RequiredArgumentError: If ``fanout`` is given 
    36                but ``stagger`` is None. 
    37            graphviz.ExecutableNotFound: If the Graphviz ``unflatten`` executable 
    38                is not found. 
    39            graphviz.CalledProcessError: If the returncode (exit status) 
    40                of the unflattening 'unflatten' subprocess is non-zero. 
    41 
    42        See also: 
    43            Upstream documentation: 
    44            https://www.graphviz.org/pdf/unflatten.1.pdf 
    45        """ 
    46        from . import sources 
    47 
    48        out = self._unflatten(self.source, 
    49                              stagger=stagger, fanout=fanout, chain=chain, 
    50                              encoding=self.encoding) 
    51 
    52        kwargs = self._copy_kwargs() 
    53        return sources.Source(out, 
    54                              filename=kwargs.get('filename'), 
    55                              directory=kwargs.get('directory'), 
    56                              format=kwargs.get('format'), 
    57                              engine=kwargs.get('engine'), 
    58                              encoding=kwargs.get('encoding'), 
    59                              renderer=kwargs.get('renderer'), 
    60                              formatter=kwargs.get('formatter'), 
    61                              loaded_from_path=None)