class_docstr: AutoscalingConfig is the helper class to provide autoscaling
  related configs.
  
  # TODO(rickyx):
      1. Move the config validation logic here.
      2. Deprecate the ray-schema.json for validation because it's
      static thus not possible to validate the config with interdependency
      of each other.
class_docstr_tok: ["AutoscalingConfig","is","the","helper","class","to","provide","autoscaling","related","configs",".","#","TODO","(","rickyx",")",":","1",".","Move","the","config","validation","logic","here",".","2",".","Deprecate","the","ray-schema.json","for","validation","because","it's","static","thus","not","possible","to","validate","the","config","with","interdependency","of","each","other","."]
code: def provider(self) -> Provider:
      provider_str = self._configs.get("provider", {}).get("type", "")
      if provider_str == "local":
          return Provider.LOCAL
      elif provider_str == "aws":
          return Provider.AWS
      elif provider_str == "azure":
          return Provider.AZURE
      elif provider_str == "gcp":
          return Provider.GCP
      elif provider_str == "aliyun":
          return Provider.ALIYUN
      elif provider_str == "kuberay":
          return Provider.KUBERAY
      else:
          return Provider.UNKNOWN
  
imports: import copy
  import logging
  from abc import ABC, abstractmethod
  from dataclasses import dataclass, field
  from enum import Enum
  from pathlib import Path
  from typing import Any, Dict, List, Optional
  import yaml
  from ray.autoscaler._private.util import hash_runtime_conf, prepare_config, validate_config
  from ray.autoscaler.v2.schema import NodeType
label_desc: Use image node_id 19 for calling the AutoscalingConfig obj's underlying member method code with example usage: obj.provider() and returns: Provider, Provider, Provider, Provider, Provider, Provider, Provider