code: def test_debugprint_mitmot():
      k = iscalar("k")
      A = dvector("A")
  
      # Symbolic description of the result
      result, updates = pytensor.scan(
          fn=lambda prior_result, A: prior_result * A,
          outputs_info=pt.ones_like(A),
          non_sequences=A,
          n_steps=k,
      )
  
      final_result = pytensor.grad(result[-1].sum(), A)
  
      output_str = debugprint(
          final_result, file="str", print_op_info=True
      )
      lines = output_str.split("\n")
  
      expected_output = """Subtensor{i} [id A]
       ├─ Scan{grad_of_scan_fn, while_loop=False, inplace=none}.1 [id B] (outer_out_sit_sot-0)
       │  ├─ Sub [id C] (n_steps)
       │  │  ├─ Subtensor{i} [id D]
       │  │  │  ├─ Shape [id E]
       │  │  │  │  └─ Scan{scan_fn, while_loop=False, inplace=none} [id F] (outer_out_sit_sot-0)
       │  │  │  │     ├─ k [id G] (n_steps)
       │  │  │  │     ├─ SetSubtensor{:stop} [id H] (outer_in_sit_sot-0)
       │  │  │  │     │  ├─ AllocEmpty{dtype='float64'} [id I]
       │  │  │  │     │  │  ├─ Add [id J]
       │  │  │  │     │  │  │  ├─ k [id G]
       │  │  │  │     │  │  │  └─ Subtensor{i} [id K]
       │  │  │  │     │  │  │     ├─ Shape [id L]
       │  │  │  │     │  │  │     │  └─ Unbroadcast{0} [id M]
       │  │  │  │     │  │  │     │     └─ ExpandDims{axis=0} [id N]
       │  │  │  │     │  │  │     │        └─ Second [id O]
       │  │  │  │     │  │  │     │           ├─ A [id P]
       │  │  │  │     │  │  │     │           └─ ExpandDims{axis=0} [id Q]
       │  │  │  │     │  │  │     │              └─ 1.0 [id R]
       │  │  │  │     │  │  │     └─ 0 [id S]
       │  │  │  │     │  │  └─ Subtensor{i} [id T]
       │  │  │  │     │  │     ├─ Shape [id U]
       │  │  │  │     │  │     │  └─ Unbroadcast{0} [id M]
       │  │  │  │     │  │     │     └─ ···
       │  │  │  │     │  │     └─ 1 [id V]
       │  │  │  │     │  ├─ Unbroadcast{0} [id M]
       │  │  │  │     │  │  └─ ···
       │  │  │  │     │  └─ ScalarFromTensor [id W]
       │  │  │  │     │     └─ Subtensor{i} [id K]
       │  │  │  │     │        └─ ···
       │  │  │  │     └─ A [id P] (outer_in_non_seqs-0)
       │  │  │  └─ 0 [id X]
       │  │  └─ 1 [id Y]
       │  ├─ Subtensor{:stop} [id Z] (outer_in_seqs-0)
       │  │  ├─ Subtensor{::step} [id BA]
       │  │  │  ├─ Subtensor{:stop} [id BB]
       │  │  │  │  ├─ Scan{scan_fn, while_loop=False, inplace=none} [id F] (outer_out_sit_sot-0)
       │  │  │  │  │  └─ ···
       │  │  │  │  └─ -1 [id BC]
       │  │  │  └─ -1 [id BD]
       │  │  └─ ScalarFromTensor [id BE]
       │  │     └─ Sub [id C]
       │  │        └─ ···
       │  ├─ Subtensor{:stop} [id BF] (outer_in_seqs-1)
       │  │  ├─ Subtensor{:stop} [id BG]
       │  │  │  ├─ Subtensor{::step} [id BH]
       │  │  │  │  ├─ Scan{scan_fn, while_loop=False, inplace=none} [id F] (outer_out_sit_sot-0)
       │  │  │  │  │  └─ ···
       │  │  │  │  └─ -1 [id BI]
       │  │  │  └─ -1 [id BJ]
       │  │  └─ ScalarFromTensor [id BK]
       │  │     └─ Sub [id C]
       │  │        └─ ···
       │  ├─ Subtensor{::step} [id BL] (outer_in_mit_mot-0)
       │  │  ├─ IncSubtensor{start:} [id BM]
       │  │  │  ├─ Second [id BN]
       │  │  │  │  ├─ Scan{scan_fn, while_loop=False, inplace=none} [id F] (outer_out_sit_sot-0)
       │  │  │  │  │  └─ ···
       │  │  │  │  └─ ExpandDims{axes=[0, 1]} [id BO]
       │  │  │  │     └─ 0.0 [id BP]
       │  │  │  ├─ IncSubtensor{i} [id BQ]
       │  │  │  │  ├─ Second [id BR]
       │  │  │  │  │  ├─ Subtensor{start:} [id BS]
       │  │  │  │  │  │  ├─ Scan{scan_fn, while_loop=False, inplace=none} [id F] (outer_out_sit_sot-0)
       │  │  │  │  │  │  │  └─ ···
       │  │  │  │  │  │  └─ 1 [id BT]
       │  │  │  │  │  └─ ExpandDims{axes=[0, 1]} [id BU]
       │  │  │  │  │     └─ 0.0 [id BV]
       │  │  │  │  ├─ Second [id BW]
       │  │  │  │  │  ├─ Subtensor{i} [id BX]
       │  │  │  │  │  │  ├─ Subtensor{start:} [id BS]
       │  │  │  │  │  │  │  └─ ···
       │  │  │  │  │  │  └─ -1 [id BY]
       │  │  │  │  │  └─ ExpandDims{axis=0} [id BZ]
       │  │  │  │  │     └─ Second [id CA]
       │  │  │  │  │        ├─ Sum{axes=None} [id CB]
       │  │  │  │  │        │  └─ Subtensor{i} [id BX]
       │  │  │  │  │        │     └─ ···
       │  │  │  │  │        └─ 1.0 [id CC]
       │  │  │  │  └─ -1 [id BY]
       │  │  │  └─ 1 [id BT]
       │  │  └─ -1 [id CD]
       │  ├─ Alloc [id CE] (outer_in_sit_sot-0)
       │  │  ├─ 0.0 [id CF]
       │  │  ├─ Add [id CG]
       │  │  │  ├─ Sub [id C]
       │  │  │  │  └─ ···
       │  │  │  └─ 1 [id CH]
       │  │  └─ Subtensor{i} [id CI]
       │  │     ├─ Shape [id CJ]
       │  │     │  └─ A [id P]
       │  │     └─ 0 [id CK]
       │  └─ A [id P] (outer_in_non_seqs-0)
       └─ -1 [id CL]
  
      Inner graphs:
  
      Scan{grad_of_scan_fn, while_loop=False, inplace=none} [id B]
       ← Add [id CM] (inner_out_mit_mot-0-0)
          ├─ Mul [id CN]
          │  ├─ *2-<Vector(float64, shape=(?,))> [id CO] -> [id BL] (inner_in_mit_mot-0-0)
          │  └─ *5-<Vector(float64, shape=(?,))> [id CP] -> [id P] (inner_in_non_seqs-0)
          └─ *3-<Vector(float64, shape=(?,))> [id CQ] -> [id BL] (inner_in_mit_mot-0-1)
       ← Add [id CR] (inner_out_sit_sot-0)
          ├─ Mul [id CS]
          │  ├─ *2-<Vector(float64, shape=(?,))> [id CO] -> [id BL] (inner_in_mit_mot-0-0)
          │  └─ *0-<Vector(float64, shape=(?,))> [id CT] -> [id Z] (inner_in_seqs-0)
          └─ *4-<Vector(float64, shape=(?,))> [id CU] -> [id CE] (inner_in_sit_sot-0)
  
      Scan{scan_fn, while_loop=False, inplace=none} [id F]
       ← Mul [id CV] (inner_out_sit_sot-0)
          ├─ *0-<Vector(float64, shape=(?,))> [id CT] -> [id H] (inner_in_sit_sot-0)
          └─ *1-<Vector(float64, shape=(?,))> [id CW] -> [id P] (inner_in_non_seqs-0)"""
  
      for truth, out in zip(expected_output.split("\n"), lines):
          assert truth.strip() == out.strip()
  
file_path: pytensor/tests/scan/test_printing.py
imports: import numpy
  import pytest
  import pytensor
  import pytensor.tensor
  from pytensor.configdefaults import config
  from pytensor.graph.fg import FunctionGraph
  from pytensor.printing import debugprint, pydot_imported, pydotprint
  from pytensor.tensor.type import dvector, iscalar, scalar, vector
label_desc: Use image node_id 6 for calling a global function with example usage: test_debugprint_mitmot() without return types