ml 套件
套件
automl |
包含 Azure Machine Learning SDKv2 的自動化機器學習類別。 主要區域包括管理 AutoML 工作。 |
constants |
此套件會定義 Azure Machine Learning SDKv2 中使用的常數。 |
data_transfer | |
dsl | |
entities |
包含 Azure Machine Learning SDKv2 的實體和 SDK 物件。 主要領域包括管理計算目標、建立/管理工作區和作業,以及提交/存取模型、執行和執行輸出/記錄等。 |
identity |
包含 Azure Machine Learning SDKv2 的身分識別組態。 |
operations |
包含 Azure Machine Learning SDKv2 支援的作業。 作業是包含與後端服務互動的邏輯,通常是自動產生的作業呼叫。 |
parallel | |
sweep |
單元
exceptions |
在 Azure Machine Learning SDKv2 中包含例外狀況模組。 這包括例外狀況的列舉和類別。 |
類別
AmlTokenConfiguration |
AzureML 權杖身分識別設定。 |
Input |
初始化 Input 物件。 |
MLClient |
與 Azure ML 服務互動的用戶端類別。 使用此用戶端來管理 Azure ML 資源,例如工作區、作業、模型等等。 |
ManagedIdentityConfiguration |
受控識別認證組態。 |
MpiDistribution |
MPI 散發組態。 |
Output | |
PyTorchDistribution |
PyTorch 散發組態。 |
RayDistribution |
注意 這是實驗性類別,可以隨時變更。 請參閱 https://aka.ms/azuremlexperimental 以取得詳細資訊。 光線分佈設定。 |
TensorFlowDistribution |
TensorFlow 散發組態。 |
UserIdentityConfiguration |
使用者身分識別設定。 |
函數
command
建立 Command 物件,該物件可在 dsl.pipeline 函式內使用,或做為獨立 Command 作業使用。
command(*, name: str | None = None, description: str | None = None, tags: Dict | None = None, properties: Dict | None = None, display_name: str | None = None, command: str | None = None, experiment_name: str | None = None, environment: str | Environment | None = None, environment_variables: Dict | None = None, distribution: Dict | MpiDistribution | TensorFlowDistribution | PyTorchDistribution | RayDistribution | None = None, compute: str | None = None, inputs: Dict | None = None, outputs: Dict | None = None, instance_count: int | None = None, instance_type: str | None = None, locations: List[str] | None = None, docker_args: str | None = None, shm_size: str | None = None, timeout: int | None = None, code: PathLike | str | None = None, identity: ManagedIdentityConfiguration | AmlTokenConfiguration | UserIdentityConfiguration | None = None, is_deterministic: bool = True, services: Dict[str, JobService | JupyterLabJobService | SshJobService | TensorBoardJobService | VsCodeJobService] | None = None, job_tier: str | None = None, priority: str | None = None, **kwargs) -> Command
參數
- environment
- Optional[Union[str, Environment]]
作業將執行的環境。
- distribution
- Optional[Union[dict, PyTorchDistribution, MpiDistribution, TensorFlowDistribution, RayDistribution]]
分散式作業的組態。 預設為 [無]。
輸入名稱與作業中使用的輸入資料來源對應。 預設為 [無]。
要傳遞至 Docker run 命令的額外引數。 這會覆寫系統或本節中已設定的任何參數。 此參數僅支援 Azure ML 計算類型。 預設為 [無]。
Docker 容器的共用記憶體區塊大小。 這應該是 (number) (單位) 的格式,其中數位必須大於 0,而單位可以是 b (位元組) 、k (kb) 、m (MB) 或 g (GB) 。
- identity
- Optional[Union[ ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration]]
在計算上執行時,命令作業將使用的身分識別。
- is_deterministic
- bool
指定命令是否會在相同的輸入下傳回相同的輸出。 預設值為 True。 當為 True 時,如果命令元件具決定性且已在目前工作區中執行,且具有相同輸入和設定,當做管線中的節點或步驟使用時,將會重複使用先前提交作業的結果。 在該案例中,將不會使用任何計算資源。
- services
- Optional[dict[str, Union[JobService, JupyterLabJobService, SshJobService, TensorBoardJobService, VsCodeJobService]]]
節點的互動式服務。 預設為 [無]。 這是實驗性參數,可以隨時變更。 請參閱 https://aka.ms/azuremlexperimental 以取得詳細資訊。
傳回
Command 物件。
傳回類型
範例
使用 命令 () 產生器方法建立命令作業。
from azure.ai.ml import Input, Output, command
train_func = command(
environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu:33",
command='echo "hello world"',
distribution={"type": "Pytorch", "process_count_per_instance": 2},
inputs={
"training_data": Input(type="uri_folder"),
"max_epochs": 20,
"learning_rate": 1.8,
"learning_rate_schedule": "time-based",
},
outputs={"model_output": Output(type="uri_folder")},
)
load_batch_deployment
從 yaml 檔案建構批次部署物件。
load_batch_deployment(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> BatchDeployment
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
批次部署物件的本機 yaml 來源。 必須是本機檔案的路徑,或是已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
建構的批次部署物件。
傳回類型
load_batch_endpoint
從 yaml 檔案建構批次端點物件。
load_batch_endpoint(source: str | PathLike | IO, relative_origin: str | None = None, **kwargs) -> BatchEndpoint
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
批次端點物件的本機 yaml 來源。 必須是本機檔案的路徑,或是已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
建構的批次端點物件。
傳回類型
load_component
將元件從本機或遠端載入元件函式。
load_component(source: str | PathLike | IO | None = None, *, relative_origin: str | None = None, **kwargs) -> CommandComponent | ParallelComponent | PipelineComponent
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
元件的本機 yaml 來源。 必須是本機檔案的路徑,或已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
Component 物件
傳回類型
範例
從 YAML 檔案載入 Component 物件,並將其版本覆寫為 「1.0.2」,並從遠端註冊它。
from azure.ai.ml import load_component
component = load_component(
source="./sdk/ml/azure-ai-ml/tests/test_configs/components/helloworld_component.yml",
params_override=[{"version": "1.0.2"}],
)
registered_component = ml_client.components.create_or_update(component)
load_compute
從 yaml 檔案建構計算物件。
load_compute(source: str | PathLike | IO, *, relative_origin: str | None = None, params_override: List[Dict[str, str]] | None = None, **kwargs) -> Compute
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
計算的本機 yaml 來源。 必須是本機檔案的路徑,或已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
要覆寫 yaml 檔案頂端的欄位。 格式為 [{「field1」: 「value1」}, {「field2」: 「value2」}]
傳回
載入的計算物件。
傳回類型
範例
從 YAML 檔案載入 Compute 物件,並覆寫其描述。
from azure.ai.ml import load_compute
compute = load_compute(
"../tests/test_configs/compute/compute-vm.yaml",
params_override=[{"description": "loaded from compute-vm.yaml"}],
)
load_data
從 yaml 檔案建構資料物件。
load_data(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> Data
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
資料物件的本機 yaml 來源。 必須是本機檔案的路徑,或已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
建構的資料或 DataImport 物件。
傳回類型
例外狀況
如果無法成功驗證資料,則引發 。 錯誤訊息中將會提供詳細資料。
load_datastore
從 yaml 檔案建構資料存放區物件。
load_datastore(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> Datastore
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
資料存放區的本機 yaml 來源。 必須是本機檔案的路徑,或已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
載入的資料存放區物件。
傳回類型
例外狀況
如果無法成功驗證資料存放區,則引發。 錯誤訊息中將會提供詳細資料。
load_environment
從 yaml 檔案建構環境物件。
load_environment(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> Environment
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
環境的本機 yaml 來源。 必須是本機檔案的路徑,或已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
建構的環境物件。
傳回類型
例外狀況
如果無法成功驗證環境,則會引發 。 錯誤訊息中將會提供詳細資料。
load_job
從 YAML 檔案建構 Job 物件。
load_job(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> Job
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
本機 YAML 檔案的路徑,或包含作業組態的已開啟檔案物件。 如果來源是路徑,則會開啟並讀取。 如果來源是開啟的檔案,則會直接讀取檔案。
YAML 的根目錄。 此目錄將用來作為在剖析 YAML 中參考之檔案的相對位置的來源。 如果來源是檔案或檔案路徑輸入,則預設為與來源相同的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
載入的 Job 物件。
傳回類型
例外狀況
如果無法成功驗證 Job,則引發 。 錯誤訊息中將會提供詳細資料。
範例
從 YAML 組態檔載入作業。
from azure.ai.ml import load_job
job = load_job(source="./sdk/ml/azure-ai-ml/tests/test_configs/command_job/command_job_test_local_env.yml")
load_model
從 YAML 檔案建構 Model 物件。
load_model(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> Model
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
本機 YAML 檔案的路徑,或包含作業組態的已開啟檔案物件。 如果來源是路徑,則會開啟並讀取。 如果來源是開啟的檔案,則會直接讀取檔案。
YAML 的根目錄。 此目錄將用來作為在剖析 YAML 中參考之檔案的相對位置的來源。 如果來源是檔案或檔案路徑輸入,則預設為與來源相同的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
載入的 Model 物件。
傳回類型
例外狀況
如果無法成功驗證 Job,則引發 。 錯誤訊息中將會提供詳細資料。
範例
從 YAML 組態檔載入模型,並覆寫名稱和版本參數。
from azure.ai.ml import load_model
model = load_model(
source="./sdk/ml/azure-ai-ml/tests/test_configs/model/model_with_stage.yml",
params_override=[{"name": "new_model_name"}, {"version": "1"}],
)
load_model_package
注意
這是實驗性方法,可以隨時變更。 請參閱 https://aka.ms/azuremlexperimental 以取得詳細資訊。
從 YAML 檔案建構 ModelPackage 物件。
load_model_package(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> ModelPackage
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
本機 YAML 檔案的路徑,或包含作業組態的已開啟檔案物件。 如果來源是路徑,則會開啟並讀取。 如果來源是開啟的檔案,則會直接讀取檔案。
YAML 的根目錄。 此目錄將用來做為衍生剖析 YAML 中所參考檔案的相對位置。 如果來源是檔案或檔案路徑輸入,則預設為與來源相同的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
載入的 ModelPackage 物件。
傳回類型
例外狀況
如果無法成功驗證 Job,則引發 。 錯誤訊息中將會提供詳細資料。
範例
從 YAML 設定檔載入 ModelPackage。
from azure.ai.ml import load_model_package
model_package = load_model_package(
"./sdk/ml/azure-ai-ml/tests/test_configs/model_package/model_package_simple.yml"
)
load_online_deployment
從 yaml 檔案建構線上部署物件。
load_online_deployment(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> OnlineDeployment
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
線上部署物件的本機 yaml 來源。 必須是本機檔案的路徑,或是已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
建構的線上部署物件。
傳回類型
例外狀況
如果無法成功驗證線上部署,則引發 。 錯誤訊息中將會提供詳細資料。
load_online_endpoint
從 yaml 檔案建構線上端點物件。
load_online_endpoint(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> OnlineEndpoint
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
線上端點物件的本機 yaml 來源。 必須是本機檔案的路徑,或是已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
建構的線上端點物件。
傳回類型
例外狀況
如果無法成功驗證線上端點,則引發 。 錯誤訊息中將會提供詳細資料。
load_registry
從 yaml 檔案載入登錄物件。
load_registry(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> Registry
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
登錄的本機 yaml 來源。 必須是本機檔案的路徑,或是已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
載入的登錄物件。
傳回類型
load_workspace
從 yaml 檔案載入工作區物件。
load_workspace(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> Workspace
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
工作區的本機 yaml 來源。 必須是本機檔案的路徑,或是已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
載入的工作區物件。
傳回類型
load_workspace_connection
從 yaml 檔案建構工作區連線物件。
load_workspace_connection(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> WorkspaceConnection
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
工作區連線物件的本機 yaml 來源。 必須是本機檔案的路徑,或是已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
建構的工作區連線物件。
傳回類型
load_workspace_hub
注意
這是實驗性方法,可以隨時變更。 請參閱 https://aka.ms/azuremlexperimental 以取得詳細資訊。
從 yaml 檔案載入 WorkspaceHub 物件。
load_workspace_hub(source: str | PathLike | IO, *, relative_origin: str | None = None, **kwargs) -> WorkspaceHub
參數
- source
- Union[<xref:PathLike>, str, TextIOWrapper]
WorkspaceHub 的本機 yaml 來源。 必須是本機檔案的路徑,或是已開啟的檔案。 如果來源是路徑,則會開啟並讀取。 如果檔案不存在,則會引發例外狀況。 如果來源是開啟的檔案,則會直接讀取檔案,如果檔案無法讀取,則會引發例外狀況。
- relative_origin
- str
在剖析的 yaml 中參考之檔案的相對位置時,要使用的來源。 如果是檔案或檔案路徑輸入,則預設為輸入來源的目錄。 如果來源是沒有名稱值的資料流程輸入,則預設為 「./」。
傳回
載入的 WorkspaceHub 物件。
傳回類型
spark
建立 Spark 物件,該物件可在 dsl.pipeline 函式內使用,或當做獨立 Spark 作業使用。
spark(*, experiment_name: str | None = None, name: str | None = None, display_name: str | None = None, description: str | None = None, tags: Dict | None = None, code: PathLike | str | None = None, entry: Dict[str, str] | SparkJobEntry | None = None, py_files: List[str] | None = None, jars: List[str] | None = None, files: List[str] | None = None, archives: List[str] | None = None, identity: Dict[str, str] | ManagedIdentity | AmlToken | UserIdentity | None = None, driver_cores: int | None = None, driver_memory: str | None = None, executor_cores: int | None = None, executor_memory: str | None = None, executor_instances: int | None = None, dynamic_allocation_enabled: bool | None = None, dynamic_allocation_min_executors: int | None = None, dynamic_allocation_max_executors: int | None = None, conf: Dict[str, str] | None = None, environment: str | Environment | None = None, inputs: Dict | None = None, outputs: Dict | None = None, args: str | None = None, compute: str | None = None, resources: Dict | SparkResourceConfiguration | None = None, **kwargs) -> Spark
參數
- code
要執行作業的原始程式碼。 可以是指向遠端位置的本機路徑或 「HTTP:」、「HTTPs:」或 「azureml:」 URL。
- identity
- Optional[Union[ dict[str, str], ManagedIdentityConfiguration, AmlTokenConfiguration, UserIdentityConfiguration]]
在計算上執行時,Spark 作業將使用的身分識別。
每個執行程式進程使用的記憶體數量,格式化為大小單位尾碼為 (「k」、「m」、「g」 或 「t」) (的字串,例如 「512m」、「2g」) 。
- environment
- Optional[Union[str, Environment]]
要執行作業的 Azure ML 環境。
- resources
- Optional[Union[dict, SparkResourceConfiguration]]
作業的計算資源組態。
傳回
Spark 物件。
傳回類型
範例
使用 DSL 管線裝飾專案建置 Spark 管線
from azure.ai.ml import Input, Output, dsl, spark
from azure.ai.ml.constants import AssetTypes, InputOutputModes
# define the spark task
first_step = spark(
code="/src",
entry={"file": "add_greeting_column.py"},
py_files=["utils.zip"],
files=["my_files.txt"],
driver_cores=2,
driver_memory="1g",
executor_cores=1,
executor_memory="1g",
executor_instances=1,
inputs=dict(
file_input=Input(path="/dataset/iris.csv", type=AssetTypes.URI_FILE, mode=InputOutputModes.DIRECT)
),
args="--file_input ${{inputs.file_input}}",
resources={"instance_type": "standard_e4s_v3", "runtime_version": "3.2.0"},
)
second_step = spark(
code="/src",
entry={"file": "count_by_row.py"},
jars=["scala_project.jar"],
files=["my_files.txt"],
driver_cores=2,
driver_memory="1g",
executor_cores=1,
executor_memory="1g",
executor_instances=1,
inputs=dict(
file_input=Input(path="/dataset/iris.csv", type=AssetTypes.URI_FILE, mode=InputOutputModes.DIRECT)
),
outputs=dict(output=Output(type="uri_folder", mode=InputOutputModes.DIRECT)),
args="--file_input ${{inputs.file_input}} --output ${{outputs.output}}",
resources={"instance_type": "standard_e4s_v3", "runtime_version": "3.2.0"},
)
# Define pipeline
@dsl.pipeline(description="submit a pipeline with spark job")
def spark_pipeline_from_builder(data):
add_greeting_column = first_step(file_input=data)
count_by_row = second_step(file_input=data)
return {"output": count_by_row.outputs.output}
pipeline = spark_pipeline_from_builder(
data=Input(path="/dataset/iris.csv", type=AssetTypes.URI_FILE, mode=InputOutputModes.DIRECT),
)