code: def test_cloning_replace_not_strict_copy_inputs(self):
      # This has nothing to do with scan, but it refers to the clone
      # function that scan uses internally and that pfunc uses now and
      # that users might want to use
      x = vector("x")
      y = fvector("y")
      y2 = dvector("y2")
      z = shared(0.25)
  
      f1 = z * (x + y) ** 2 + 5
      f2 = clone_replace(
          f1,
          replace={y: y2},
          rebuild_strict=False,
          copy_inputs_over=True,
      )
      f2_inp = graph_inputs([f2])
      assert z in f2_inp
      assert x in f2_inp
      assert y2 in f2_inp
  
imports: import numpy
  import pytest
  import scipy.special
  import pytensor.tensor
  from pytensor import config, function, shared
  from pytensor.graph.basic import equal_computations, graph_inputs
  from pytensor.graph.replace import clone_replace, graph_replace, vectorize_graph, vectorize_node
  from pytensor.tensor import dvector, fvector, vector
  from tests import unittest_tools
  from tests.graph.utils import MyOp, MyVariable, op_multiple_outputs
label_desc: Use image node_id 4 for calling the TestCloneReplace obj's underlying member method code with example usage: obj.test_cloning_replace_not_strict_copy_inputs() without return types