code: def test_post_permuted_assignment(self):
      a = Tensor(np.arange(N * N, dtype=np.float32)).reshape(N, N)
      b = Tensor(np.arange(N * N, dtype=np.float32)).reshape(N, N)
      a.realize()
      b.realize()
      # GlobalCounters.cache = []
      ba1 = a.lazydata.base.realized  # noqa: F841
      bb1 = b.lazydata.base.realized  # noqa: F841
      a.assign(a.permute(1, 0) + b)  # this should not work!
      a.realize()
      ba2 = a.lazydata.base.realized  # noqa: F841
      # NOTE: don't test that it's assigned
      # assert ba1 == ba2 and ba1 != bb1
      np.testing.assert_allclose(
          a.numpy(),
          np.arange(N * N).reshape((N, N))
          + np.arange(N * N).reshape((N, N)).transpose(1, 0),
      )
  
file_path: tinygrad/test/test_assign.py
imports: import unittest
  import numpy
  from tinygrad.tensor import Tensor
  from tinygrad import Device, dtypes
label_desc: Use image node_id 3 for calling the TestAssign obj's underlying member method code with example usage: obj.test_post_permuted_assignment() without return types