Edit:
from docs:
https://pytorch.org/docs/stable/notes/extending.html
I tried to add
class MyTensor1(torch.Tensor):
    @staticmethod
    def __new__(cls, data, **kwargs):
        tensor = torch.tensor(data, **kwargs)

        if tensor.shape != (3, 3):
            raise ValueError

        return super().__new__(cls, data, **kwargs)

    @classmethod
    def __torch_function__(cls, func, types, args=(), kwargs=None):
        if kwargs is None:
            kwargs = {}
        return super().__torch_function__(func, types, args, kwargs)

    @property
    def mid(self):
        return self[1, 1]

    @mid.setter
    def mid(self, val: float):
        self[1, 1] = val * torch.ones_like(self[1, 1])

but it didn’t solve issue #2
As for issue #1:
I opened a feature request 1, but wondering if there is an alternative for now…