Я бы не стал обобщать поведение. Почти наверняка это сделано намеренно. Скорее всего, разработчики lib не хотели быть такими многословными при отслеживании иерархии, поэтому дали вам этот ярлык. Также возможно (очень вероятно), что .trace непосредственно против объекта cvxpy работает с этим объектом, тогда как более глубокий действует на объект cvxpy.atoms.affine.trace.
Будьте очень осторожны, потому что побочные эффекты могут быть разными.
Чтобы ответить на ваш вопрос очень прямо, я бы предположил, что второй вариант работает, потому что кто-то думал упростить свой API, ИЛИ он просто работает так, как вы ожидаете.
На ваш второй вопрос: вложенные методы не существуют. У объекта cvxpy есть свойство, называемое атомами, которое, в свою очередь, имеет свойство, называемое affine, которое имеет метод, называемый trace.