code: def test_pytorch_autolog_logs_expected_data(pytorch_model):
      _, run = pytorch_model
      data = run.data
  
      # Checking if metrics are logged.
      # When autolog is configured with the default configuration to not log on steps,
      # then all metrics are logged per epoch, including step based metrics.
      client = MlflowClient()
      for metric_key in [
          "loss",
          "train_acc",
          "val_loss",
          "val_acc",
          "loss_forked",
          "loss_forked_step",
          "loss_forked_epoch",
      ]:
          assert metric_key in run.data.metrics
          metric_history = client.get_metric_history(
              run.info.run_id, metric_key
          )
          assert len(metric_history) == NUM_EPOCHS
  
      # Testing optimizer parameters are logged
      assert "optimizer_name" in data.params
      assert data.params["optimizer_name"] == "Adam"
  
      # Testing model_summary.txt is saved
      client = MlflowClient()
      artifacts = client.list_artifacts(run.info.run_id)
      artifacts = (x.path for x in artifacts)
      assert "model_summary.txt" in artifacts
  
imports: import pytest
  import pytorch_lightning
  import torch
  from iris import IrisClassification, IrisClassificationMultiOptimizer, IrisClassificationWithoutValidation
  from iris_data_module import IrisDataModule, IrisDataModuleWithoutValidation
  from packaging.version import Version
  from pytorch_lightning.callbacks import ModelCheckpoint
  from pytorch_lightning.callbacks.early_stopping import EarlyStopping
  import mlflow
  import mlflow.pytorch
  from mlflow import MlflowClient
  from mlflow.exceptions import MlflowException
  from mlflow.pytorch._lightning_autolog import _get_optimizer_name
  from mlflow.utils.file_utils import TempDir
label_desc: Use image node_id 8 for calling a global function with example usage: test_pytorch_autolog_logs_expected_data(pytorch_model) without return types