Parity Order Parameter Operator for Hubbard Model

I trying to make the string order parameter operator and parity order parameter operator defined:
\mathcal{O}_S=\lim _{|i-j| \rightarrow \infty}\left\langle\delta \hat{n}_i e^{i \theta \sum_{i < k<j} \delta \hat{n}_k} \delta \hat{n}_j\right\rangle
In this case \delta \hat{n}_k = \hat{n}_k - I
\mathcal{O}_P=\lim _{|i-j| \rightarrow \infty}\left\langle e^{i \theta \sum_{i < k<j} \delta \hat{n}_k}\right\rangle
and with in this case \theta=\pi.
for a chain of 3 particles and 3 sites, for a MPS which should be a |1,1,1\rangle on Fock basis, I applied two different approaches:

    ...
    function make_n_matrix_minus_i(d)
        n = zeros(d, d)
            for i in 1:d
                n[i, i] = i - 1
            end
        return n 
    end    
    ...
    ITensors.op(::OpName"diffid", ::SiteType"Boson", d::Int) = make_n_matrix_minus_i(d)
    ...
    sites = siteinds(mps) 
    op1 = op("I",sites[1])
    op2 = exp(1im*(pi)*op("diffid",sites[2])) 
    op3 = op("I",sites[3])
    ez = MPO([op1,op2,op3]) 
    l = real(inner(mpstries', ez, mps))

and

    N=3 
    sites = siteinds(mps) 
    s=sites   
    POz = ITensor[]  
    POzf = ITensor[]  
    h0 = op("I", s[1]) 
    push!(POz, h0)  
     hf= op("I",s[N])     
     push!(POzf,hf)
         POzS = ITensor[]         
         for j=2:N-1   
             s1 = s[j]  
             hj = op("make_n_matrix_minus_i",s1)   
             Gj = exp(1.0im * pi * hj)   
             push!(POzS,Gj)  
         end       
    append!(POz,POzS)
    append!(POz,POzf)   
    real(inner(mps' ,MPO(POz), mps))  

Both of them when obtain the expected value of this parameters, in this case the Parity order parameter and I apply to this MPS(MPS which should be a |1,1,1\rangle on Fock basis) gives me a -1, and by exact diagonalization or an analytical result you must have 1 as the expected value for POP for this MPS.
what I did miss? a phase or something? or a -1?
I apologies for the long question, greetings and thank you for reading.

This looks like you just have a bug somewhere in your implementation. For questions like this, we recommend that you try your code on multiple examples or known cases so you can narrow down what might be the issue. Also you can print out nearly everything in the ITensor ecosystem, so please try printing your states and custom operators, etc.