class_docstr: Gate tests.
class_docstr_tok: ["Gate","tests","."]
docstr: Test the CX symplectic transform.
docstr_tok: ["Test","the","CX","symplectic","transform","."]
code: def test_controlled_addition(self, tol):
      """Test the CX symplectic transform."""
  
      s = 0.543
      S = controlled_addition(s)
  
      # test that S = B(theta+pi/2, 0) [S(z) x S(-z)] B(theta, 0)
      r = np.arcsinh(-s / 2)
      theta = 0.5 * np.arctan2(-1 / np.cosh(r), -np.tanh(r))
      Sz = block_diag(squeezing(r, 0), squeezing(-r, 0))[
          :, [0, 2, 1, 3]
      ][[0, 2, 1, 3]]
  
      expected = (
          beamsplitter(theta + np.pi / 2, 0)
          @ Sz
          @ beamsplitter(theta, 0)
      )
      assert S == pytest.approx(expected, abs=tol)
  
      # test that S[x1, x2, p1, p2] -> [x1, x2+sx1, p1-sp2, p2]
      x1 = 0.5432
      x2 = -0.453
      p1 = 0.154
      p2 = -0.123
      out = S @ np.array([x1, x2, p1, p2]) * np.sqrt(2 * hbar)
      expected = np.array([x1, x2 + s * x1, p1 - s * p2, p2]) * np.sqrt(
          2 * hbar
      )
      assert out == pytest.approx(expected, abs=tol)
  
imports: import numpy
  import numpy.random
  import pytest
  from scipy.linalg import block_diag
  from scipy.special import factorial
  import pennylane
  from pennylane import DeviceError
  from pennylane.devices.default_gaussian import fock_prob, rotation, squeezing, quadratic_phase, beamsplitter, two_mode_squeezing, controlled_addition, controlled_phase, vacuum_state, coherent_state, squeezed_state, displaced_squeezed_state, thermal_state
  from pennylane.wires import Wires
label_desc: Use image node_id 7 for calling the TestGates obj's underlying member method code with example usage: obj.test_controlled_addition(tol) without return types