'Canonicalize using the Butler-Portugal algorithm for canonicalization
under monoterm symmetries.
Examples
>>> from sympy.tensor.tensor import TensorIndexType, tensor_indices, tensorhead
>>> Lorentz = TensorIndexType(\'Lorentz\', dummy_fmt=\'L\')
>>> m0, m1, m2 = tensor_indices(\'m0,m1,m2\', Lorentz)
>>> A = tensorhead(\'A\', [Lorentz]*2, [[2]])
>>> t = A(m0,-m1)*A(m1,-m0)
>>> t.canon_bp()
-A(L_0, L_1)*A(-L_0, -L_1)
>>> t = A(m0,-m1)*A(m1,-m2)*A(m2,-m0)
>>> t.canon_bp()
0'

def canon_bp(self):

    if self._is_canon_bp:
        return self
    if (not self.components):
        return self
    t = self.sorted_components()
    (g, dummies, msym) = t._index_structure.indices_canon_args()
    v = components_canon_args(t.components)
    can = canonicalize(g, dummies, msym, *v)
    if (can == 0):
        return S.Zero
    tmul = t.perm2tensor(can, True)
    return tmul
