code: def _validate_canonical(self):
      super()._validate_canonical()
      assert self.operator in ["tf-operator", "pytorch-operator"]
  
file_path: nni/nni/experiment/config/training_services/kubeflow.py
imports: from dataclasses import dataclass
  from typing import Optional, Union
  from typing_extensions import Literal
  from ..base import ConfigBase
  from ..training_service import TrainingServiceConfig
  from .k8s_storage import K8sStorageConfig
label_desc: Use image node_id 2 for calling the KubeflowConfig obj's underlying member method code with example usage: obj._validate_canonical() without return types