code: def create_experiment_permission(
      self, experiment_id: str, username: str, permission: str
  ) -> ExperimentPermission:
      _validate_permission(permission)
      with self.ManagedSessionMaker() as session:
          try:
              user = self._get_user(session, username=username)
              perm = SqlExperimentPermission(
                  experiment_id=experiment_id,
                  user_id=user.id,
                  permission=permission,
              )
              session.add(perm)
              session.flush()
              return perm.to_mlflow_entity()
          except IntegrityError as e:
              raise MlflowException(
                  f"Experiment permission (experiment_id={experiment_id}, username={username}) "
                  f"already exists. Error: {e}",
                  RESOURCE_ALREADY_EXISTS,
              )
  
imports: from typing import List, Optional
  from sqlalchemy.exc import IntegrityError, MultipleResultsFound, NoResultFound
  from sqlalchemy.orm import sessionmaker
  from werkzeug.security import check_password_hash, generate_password_hash
  from mlflow.exceptions import MlflowException
  from mlflow.protos.databricks_pb2 import INVALID_STATE, RESOURCE_ALREADY_EXISTS, RESOURCE_DOES_NOT_EXIST
  from mlflow.server.auth.db import utils
  from mlflow.server.auth.db.models import SqlExperimentPermission, SqlRegisteredModelPermission, SqlUser
  from mlflow.server.auth.entities import ExperimentPermission, RegisteredModelPermission, User
  from mlflow.server.auth.permissions import _validate_permission
  from mlflow.store.db.utils import _get_managed_session_maker, create_sqlalchemy_engine_with_retry
  from mlflow.utils.uri import extract_db_type_from_uri
  from mlflow.utils.validation import _validate_username
label_desc: Use image node_id 10 for calling the SqlAlchemyStore obj's underlying member method code with example usage: obj.create_experiment_permission(experiment_id, username, permission) and returns: perm