code: def test_debugprint_sitsot():
      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 = result[-1]
      output_str = debugprint(
          final_result, file="str", print_op_info=True
      )
      lines = output_str.split("\n")
  
      expected_output = """Subtensor{i} [id A]
       ├─ Subtensor{start:} [id B]
       │  ├─ Scan{scan_fn, while_loop=False, inplace=none} [id C] (outer_out_sit_sot-0)
       │  │  ├─ k [id D] (n_steps)
       │  │  ├─ SetSubtensor{:stop} [id E] (outer_in_sit_sot-0)
       │  │  │  ├─ AllocEmpty{dtype='float64'} [id F]
       │  │  │  │  ├─ Add [id G]
       │  │  │  │  │  ├─ k [id D]
       │  │  │  │  │  └─ Subtensor{i} [id H]
       │  │  │  │  │     ├─ Shape [id I]
       │  │  │  │  │     │  └─ Unbroadcast{0} [id J]
       │  │  │  │  │     │     └─ ExpandDims{axis=0} [id K]
       │  │  │  │  │     │        └─ Second [id L]
       │  │  │  │  │     │           ├─ A [id M]
       │  │  │  │  │     │           └─ ExpandDims{axis=0} [id N]
       │  │  │  │  │     │              └─ 1.0 [id O]
       │  │  │  │  │     └─ 0 [id P]
       │  │  │  │  └─ Subtensor{i} [id Q]
       │  │  │  │     ├─ Shape [id R]
       │  │  │  │     │  └─ Unbroadcast{0} [id J]
       │  │  │  │     │     └─ ···
       │  │  │  │     └─ 1 [id S]
       │  │  │  ├─ Unbroadcast{0} [id J]
       │  │  │  │  └─ ···
       │  │  │  └─ ScalarFromTensor [id T]
       │  │  │     └─ Subtensor{i} [id H]
       │  │  │        └─ ···
       │  │  └─ A [id M] (outer_in_non_seqs-0)
       │  └─ 1 [id U]
       └─ -1 [id V]
  
      Inner graphs:
  
      Scan{scan_fn, while_loop=False, inplace=none} [id C]
       ← Mul [id W] (inner_out_sit_sot-0)
          ├─ *0-<Vector(float64, shape=(?,))> [id X] -> [id E] (inner_in_sit_sot-0)
          └─ *1-<Vector(float64, shape=(?,))> [id Y] -> [id M] (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 1 for calling a global function with example usage: test_debugprint_sitsot() without return types