code: def _test_model_explainability_batch_transform_monitor_create_schedule(
      model_explainability_monitor,
      sagemaker_session,
      analysis_config=None,
      constraints=None,
      baseline_job_name=None,
      batch_transform_input=BatchTransformInput(
          data_captured_destination_s3_uri=DATA_CAPTURED_S3_URI,
          destination=SCHEDULE_DESTINATION,
          features_attribute=FEATURES_ATTRIBUTE,
          inference_attribute=str(INFERENCE_ATTRIBUTE),
          dataset_format=MonitoringDatasetFormat.csv(header=False),
      ),
      explainability_analysis_config=None,
  ):
      # create schedule
      with patch(
          "sagemaker.s3.S3Uploader.upload_string_as_file_body",
          return_value=ANALYSIS_CONFIG_S3_URI,
      ) as upload:
          model_explainability_monitor.create_monitoring_schedule(
              batch_transform_input=batch_transform_input,
              analysis_config=analysis_config,
              output_s3_uri=OUTPUT_S3_URI,
              constraints=constraints,
              monitor_schedule_name=SCHEDULE_NAME,
              schedule_cron_expression=CRON_HOURLY,
          )
          if not isinstance(analysis_config, str):
              upload.assert_called_once()
              assert (
                  json.loads(upload.call_args[0][0])
                  == explainability_analysis_config
              )
  
      # validation
      expected_arguments = {
          "JobDefinitionName": model_explainability_monitor.job_definition_name,
          **copy.deepcopy(
              EXPLAINABILITY__BATCH_TRANSFORM_JOB_DEFINITION
          ),
          "Tags": TAGS,
      }
      if constraints:
          expected_arguments["ModelExplainabilityBaselineConfig"] = {
              "ConstraintsResource": {"S3Uri": constraints.file_s3_uri}
          }
      elif baseline_job_name:
          expected_arguments["ModelExplainabilityBaselineConfig"] = {
              "BaseliningJobName": baseline_job_name,
          }
  
      sagemaker_session.sagemaker_client.create_model_explainability_job_definition.assert_called_with(
          **expected_arguments
      )
  
      sagemaker_session.sagemaker_client.create_monitoring_schedule.assert_called_with(
          MonitoringScheduleName=SCHEDULE_NAME,
          MonitoringScheduleConfig={
              "MonitoringJobDefinitionName": model_explainability_monitor.job_definition_name,
              "MonitoringType": "ModelExplainability",
              "ScheduleConfig": {"ScheduleExpression": CRON_HOURLY},
          },
          Tags=TAGS,
      )
  
imports: from __future__ import print_function, absolute_import
  import copy
  import json
  import time
  from mock import patch, Mock, MagicMock
  import pytest
  from sagemaker.clarify import BiasConfig, DataConfig, ModelConfig, SHAPConfig, ModelPredictedLabelConfig
  from sagemaker.model_monitor import BiasAnalysisConfig, Constraints, CronExpressionGenerator, EndpointInput, BatchTransformInput, ExplainabilityAnalysisConfig, ModelBiasMonitor, ModelExplainabilityMonitor, MonitoringExecution, NetworkConfig
  from sagemaker.model_monitor.clarify_model_monitoring import ClarifyModelMonitor, ClarifyBaseliningJob, ClarifyMonitoringExecution
  from sagemaker.model_monitor.dataset_format import MonitoringDatasetFormat
label_desc: Use image node_id 42 for calling a global function with example usage: _test_model_explainability_batch_transform_monitor_create_schedule(model_explainability_monitor, sagemaker_session, analysis_config, constraints, baseline_job_name, batch_transform_input, explainability_analysis_config) without return types