Fermion site-type operator `c`: `inner()` indicates `c` on different sites commute

Thanks for linking to https://itensor.discourse.group/t/proper-way-to-construct-fermion-gates/172: afaict it doesn’t solve my problem, but it is a help!

I’m a little confused—where does OpSum come into it? AFAICT the only ITensor functions I’ve used are MPS, op and apply, and it’s not obvious to me that any of those is going to call OpSum.

Also, you write

once [I] write c1 = op("c", ss[1]), then c1 is an ITensor and has no knowledge of being fermionic as it has no QNs. The strings are handled at an operator level, so OpSum and some of correlation_matrix can insert JW strings.

I’m a little confused by this. It doesn’t seem consistent with Miles’ comment in that other thread that apply automatically handles the JW string. It also doesn’t seem consistent with the observed behavior: in the code I posted, applying c or cdag

  • changes the link indices at the site at which I apply it, and
  • changes tensors at other sites by multiplying in a sign.
    (You can see both of these in the output in my original question.) Is this really the expected behavior for multiplying in an ITensor that doesn’t know anything about JW strings?

Again I’m probably missing something basic?