Also for clarity, the function util.continuous_xor_vectorized(inpOut.T, name) computes continuous xor amongst the tensors using tnorms (Boolean Fuzzy Logic). This essentially is torch.multiplication operation.
Below is the function definition for reference.
def continuous_xor_vectorized(self, inp_vars, name):
        op1 = inp_vars[0, :]
        # print(inp_vars.shape[0])
        for i in range(inp_vars.shape[0]-1):
            op2 = inp_vars[i+1, :]
            t = self.tnorm_vectorized(1-op1, op2, name)
            u = self.tnorm_vectorized(op1, 1-op2, name)
            res = 1-self.tnorm_vectorized(1-t, 1-u, name)
            op1 = res
        return res

def tnorm_vectorized(self, t, u, name):
        if name == "luka":
            return max(0, t + u - 1)
        elif name == "godel":
            return torch.minimum(t, u)
        elif name == "product":
            return torch.multiply(t, u)
        else:
            print("Wrong Name!")