SYMBOL INDEX (1960 symbols across 148 files) FILE: .github/scripts/update_hacs_manifest.py function update_manifest (line 8) | def update_manifest(): FILE: action/action.py function error (line 44) | def error(error: str): function get_event_data (line 49) | def get_event_data(): function chose_repository (line 56) | def chose_repository(category): function chose_category (line 74) | def chose_category(): function preflight (line 80) | async def preflight(): function validate_repository (line 131) | async def validate_repository(repository, category, ref=None): FILE: custom_components/dual_smart_thermostat/__init__.py function async_setup_entry (line 11) | async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> ... function config_entry_update_listener (line 18) | async def config_entry_update_listener(hass: HomeAssistant, entry: Confi... function async_unload_entry (line 23) | async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) ->... FILE: custom_components/dual_smart_thermostat/climate.py function async_setup_entry (line 285) | async def async_setup_entry( function async_setup_platform (line 308) | async def async_setup_platform( function _normalize_config_numeric_values (line 322) | def _normalize_config_numeric_values(config: dict[str, Any]) -> dict[str... function _async_setup_config (line 394) | async def _async_setup_config( class DualSmartThermostat (line 520) | class DualSmartThermostat(ClimateEntity, RestoreEntity): method __init__ (line 523) | def __init__( method _setup_template_listeners (line 645) | async def _setup_template_listeners(self) -> None: method _remove_template_listeners (line 694) | async def _remove_template_listeners(self) -> None: method _async_template_entity_changed (line 712) | async def _async_template_entity_changed( method async_added_to_hass (line 770) | async def async_added_to_hass(self) -> None: method async_will_remove_from_hass (line 984) | async def async_will_remove_from_hass(self) -> None: method should_poll (line 1000) | def should_poll(self) -> bool: method precision (line 1005) | def precision(self) -> float: method target_temperature_step (line 1012) | def target_temperature_step(self) -> float: method current_temperature (line 1020) | def current_temperature(self) -> float | None: method current_humidity (line 1025) | def current_humidity(self) -> float | None: method target_humidity (line 1030) | def target_humidity(self) -> float | None: method current_floor_temperature (line 1035) | def current_floor_temperature(self) -> float | None: method _compute_attr_hvac_modes (line 1039) | def _compute_attr_hvac_modes(self) -> list[HVACMode]: method hvac_mode (line 1052) | def hvac_mode(self) -> HVACMode | None: method hvac_action (line 1062) | def hvac_action(self) -> HVACAction: method target_temperature (line 1067) | def target_temperature(self) -> float | None: method target_temperature_high (line 1072) | def target_temperature_high(self) -> float | None: method target_temperature_low (line 1077) | def target_temperature_low(self) -> float | None: method min_temp (line 1082) | def min_temp(self) -> float: method max_temp (line 1091) | def max_temp(self) -> float: method min_humidity (line 1100) | def min_humidity(self) -> float: method max_humidity (line 1109) | def max_humidity(self) -> float: method fan_mode (line 1118) | def fan_mode(self) -> str | None: method fan_modes (line 1129) | def fan_modes(self) -> list[str] | None: method extra_state_attributes (line 1136) | def extra_state_attributes(self) -> dict: method _set_support_flags (line 1179) | def _set_support_flags(self) -> None: method _async_update_sensors_initial_state (line 1188) | async def _async_update_sensors_initial_state(self) -> bool: method async_set_hvac_mode (line 1231) | async def async_set_hvac_mode( method async_set_temperature (line 1284) | async def async_set_temperature(self, **kwargs) -> None: method async_set_humidity (line 1319) | async def async_set_humidity(self, humidity: float) -> None: method async_set_fan_mode (line 1332) | async def async_set_fan_mode(self, fan_mode: str) -> None: method _set_temperatures_dual_mode (line 1351) | def _set_temperatures_dual_mode(self, temperatures: TargetTemperatures... method _async_sensor_changed_event (line 1388) | async def _async_sensor_changed_event( method _async_sensor_changed (line 1398) | async def _async_sensor_changed( method _async_sensor_not_responding (line 1434) | async def _async_sensor_not_responding(self, now: datetime | None = No... method _async_humidity_sensor_not_responding (line 1454) | async def _async_humidity_sensor_not_responding( method _async_outside_sensor_not_responding (line 1477) | async def _async_outside_sensor_not_responding( method _async_sensor_floor_changed_event (line 1494) | async def _async_sensor_floor_changed_event( method _async_sensor_floor_changed (line 1503) | async def _async_sensor_floor_changed( method _async_sensor_outside_changed_event (line 1516) | async def _async_sensor_outside_changed_event( method _async_sensor_outside_changed (line 1525) | async def _async_sensor_outside_changed( method _async_sensor_humidity_changed_event (line 1555) | async def _async_sensor_humidity_changed_event( method _async_sensor_humidity_changed (line 1564) | async def _async_sensor_humidity_changed( method _async_entity_heat_pump_cooling_changed_event (line 1598) | async def _async_entity_heat_pump_cooling_changed_event( method _async_entity_heat_pump_cooling_changed (line 1613) | async def _async_entity_heat_pump_cooling_changed( method _check_device_initial_state (line 1623) | async def _check_device_initial_state(self) -> None: method _async_opening_changed (line 1632) | async def _async_opening_changed(self, event: Event[EventStateChangedD... method _async_control_climate (line 1670) | async def _async_control_climate(self, time=None, force=False) -> None: method _async_control_climate_forced (line 1693) | async def _async_control_climate_forced(self, time=None) -> None: method _async_control_climate_no_time (line 1700) | async def _async_control_climate_no_time(self, time=None, force=False)... method _async_evaluate_auto_and_dispatch (line 1704) | async def _async_evaluate_auto_and_dispatch( method _async_hvac_mode_changed (line 1751) | def _async_hvac_mode_changed(self, hvac_mode) -> None: method _async_switch_changed_event (line 1759) | def _async_switch_changed_event(self, event: Event[EventStateChangedDa... method _async_switch_changed (line 1766) | def _async_switch_changed( method _resume_from_state (line 1783) | def _resume_from_state(self, old_state: State, new_state: State) -> None: method _is_device_active (line 1808) | def _is_device_active(self) -> bool: method async_set_preset_mode (line 1812) | async def async_set_preset_mode(self, preset_mode: str) -> None: method _publish_hvac_action_reason (line 1848) | def _publish_hvac_action_reason(self, reason) -> None: method _set_hvac_action_reason (line 1869) | def _set_hvac_action_reason(self, *args) -> None: method _check_auto_preset_selection (line 1884) | async def _check_auto_preset_selection(self) -> None: method async_turn_on (line 1897) | async def async_turn_on(self) -> None: method async_turn_off (line 1922) | async def async_turn_off(self) -> None: FILE: custom_components/dual_smart_thermostat/config_flow.py class ConfigFlowHandler (line 66) | class ConfigFlowHandler(ConfigFlow, domain=DOMAIN): method __init__ (line 72) | def __init__(self) -> None: method _clean_config_for_storage (line 84) | def _clean_config_for_storage(self, config: dict[str, Any]) -> dict[st... method _normalize_config_from_storage (line 121) | def _normalize_config_from_storage(self, config: dict[str, Any]) -> di... method async_step_user (line 159) | async def async_step_user( method async_step_reconfigure (line 180) | async def async_step_reconfigure( method async_step_reconfigure_confirm (line 224) | async def async_step_reconfigure_confirm( method _async_step_system_config (line 276) | async def _async_step_system_config(self) -> FlowResult: method async_step_basic (line 296) | async def async_step_basic( method async_step_basic_ac_only (line 343) | async def async_step_basic_ac_only( method async_step_features (line 374) | async def async_step_features( method async_step_heater_cooler (line 414) | async def async_step_heater_cooler( method async_step_heat_pump (line 452) | async def async_step_heat_pump( method async_step_dual_stage (line 487) | async def async_step_dual_stage( method async_step_dual_stage_config (line 515) | async def async_step_dual_stage_config( method async_step_floor_heating (line 540) | async def async_step_floor_heating( method async_step_openings_toggle (line 554) | async def async_step_openings_toggle( method async_step_fan_toggle (line 562) | async def async_step_fan_toggle( method async_step_humidity_toggle (line 570) | async def async_step_humidity_toggle( method async_step_floor_config (line 578) | async def async_step_floor_config( method async_step_openings_selection (line 586) | async def async_step_openings_selection( method async_step_openings_config (line 594) | async def async_step_openings_config( method async_step_heat_cool_mode (line 602) | async def async_step_heat_cool_mode( method async_step_fan (line 615) | async def async_step_fan( method async_step_humidity (line 628) | async def async_step_humidity( method async_step_additional_sensors (line 641) | async def async_step_additional_sensors( method async_step_preset_selection (line 654) | async def async_step_preset_selection( method async_step_presets (line 698) | async def async_step_presets( method _validate_basic_config (line 706) | async def _validate_basic_config(self, user_input: dict[str, Any]) -> ... method _determine_next_step (line 710) | async def _determine_next_step(self) -> FlowResult: method _async_finish_flow (line 817) | async def _async_finish_flow(self) -> FlowResult: method _detect_configured_features (line 857) | def _detect_configured_features(self) -> dict[str, Any]: method _clear_unchecked_features (line 892) | def _clear_unchecked_features(self, user_input: dict[str, Any]) -> None: method _has_both_heating_and_cooling (line 942) | def _has_both_heating_and_cooling(self) -> bool: method async_config_entry_title (line 952) | def async_config_entry_title(self, options: Mapping[str, Any]) -> str: method async_get_options_flow (line 958) | def async_get_options_flow(config_entry): method async_step_import (line 964) | async def async_step_import(self, import_config: dict[str, Any]) -> Fl... FILE: custom_components/dual_smart_thermostat/config_validation.py function _duration_to_seconds (line 36) | def _duration_to_seconds(value: Any) -> int: function validate_config_with_models (line 66) | def validate_config_with_models(config: dict[str, Any]) -> bool: function _config_dict_to_model (line 83) | def _config_dict_to_model(config: dict[str, Any]) -> ThermostatConfig: function get_system_type (line 150) | def get_system_type(config: dict[str, Any]) -> str: function has_feature (line 162) | def has_feature(config: dict[str, Any], feature_key: str) -> bool: FILE: custom_components/dual_smart_thermostat/const.py class SystemType (line 30) | class SystemType(enum.StrEnum): class ToleranceDevice (line 177) | class ToleranceDevice(enum.StrEnum): FILE: custom_components/dual_smart_thermostat/feature_steps/fan.py class FanSteps (line 16) | class FanSteps: method __init__ (line 19) | def __init__(self): method async_step_toggle (line 23) | async def async_step_toggle( method async_step_config (line 40) | async def async_step_config( method async_step_options (line 68) | async def async_step_options( FILE: custom_components/dual_smart_thermostat/feature_steps/floor.py class FloorSteps (line 21) | class FloorSteps: method __init__ (line 24) | def __init__(self) -> None: method async_step_heating (line 27) | async def async_step_heating( method async_step_config (line 79) | async def async_step_config( method async_step_options (line 96) | async def async_step_options( FILE: custom_components/dual_smart_thermostat/feature_steps/humidity.py class HumiditySteps (line 12) | class HumiditySteps: method __init__ (line 15) | def __init__(self): method async_step_toggle (line 19) | async def async_step_toggle( method async_step_config (line 36) | async def async_step_config( method async_step_options (line 54) | async def async_step_options( FILE: custom_components/dual_smart_thermostat/feature_steps/openings.py class OpeningsSteps (line 24) | class OpeningsSteps: method __init__ (line 27) | def __init__(self): method _call_next_step (line 31) | async def _call_next_step(self, next_step_handler): method async_step_toggle (line 43) | async def async_step_toggle( method async_step_selection (line 68) | async def async_step_selection( method async_step_config (line 103) | async def async_step_config( method async_step_options (line 271) | async def async_step_options( FILE: custom_components/dual_smart_thermostat/feature_steps/presets.py class PresetsSteps (line 15) | class PresetsSteps: method __init__ (line 18) | def __init__(self): method async_step_selection (line 22) | async def async_step_selection( method async_step_config (line 103) | async def async_step_config( method _process_preset_config_input (line 121) | async def _process_preset_config_input( method _flatten_presets_for_form (line 141) | def _flatten_presets_for_form(self, config: dict) -> dict: method _transform_preset_fields_to_new_format (line 186) | def _transform_preset_fields_to_new_format(self, user_input: dict) -> ... method _validate_preset_temperature_fields (line 241) | def _validate_preset_temperature_fields(self, user_input: dict) -> dict: method _show_preset_form_with_errors (line 267) | def _show_preset_form_with_errors( method _finish_preset_config_flow (line 278) | async def _finish_preset_config_flow( method async_step_options (line 290) | async def async_step_options( FILE: custom_components/dual_smart_thermostat/feature_steps/shared.py function build_schema_context_from_flow (line 10) | def build_schema_context_from_flow( FILE: custom_components/dual_smart_thermostat/flow_utils.py class EntityValidator (line 17) | class EntityValidator: method validate_basic_config (line 21) | def validate_basic_config(user_input: dict[str, Any]) -> bool: method get_validation_errors (line 44) | def get_validation_errors(user_input: dict[str, Any]) -> dict[str, str]: class OpeningsProcessor (line 66) | class OpeningsProcessor: method process_openings_config (line 70) | def process_openings_config( method extract_selected_entities_from_config (line 153) | def extract_selected_entities_from_config(openings_config: list) -> li... method clean_openings_scope (line 172) | def clean_openings_scope(collected_config: dict[str, Any]) -> None: class FlowStepTracker (line 196) | class FlowStepTracker: method __init__ (line 199) | def __init__(self, collected_config: dict[str, Any]): method is_step_shown (line 207) | def is_step_shown(self, step_name: str) -> bool: method mark_step_shown (line 218) | def mark_step_shown(self, step_name: str) -> None: method should_show_step (line 226) | def should_show_step(self, step_name: str) -> bool: class LegacyCompatibility (line 238) | class LegacyCompatibility: method convert_legacy_cooler_to_heater (line 242) | def convert_legacy_cooler_to_heater(user_input: dict[str, Any]) -> None: class FormHelper (line 252) | class FormHelper: method create_step_result (line 256) | def create_step_result( FILE: custom_components/dual_smart_thermostat/hvac_action_reason/hvac_action_reason.py class HVACActionReason (line 12) | class HVACActionReason(enum.StrEnum): FILE: custom_components/dual_smart_thermostat/hvac_action_reason/hvac_action_reason_auto.py class HVACActionReasonAuto (line 4) | class HVACActionReasonAuto(enum.StrEnum): FILE: custom_components/dual_smart_thermostat/hvac_action_reason/hvac_action_reason_external.py class HVACActionReasonExternal (line 4) | class HVACActionReasonExternal(enum.StrEnum): FILE: custom_components/dual_smart_thermostat/hvac_action_reason/hvac_action_reason_internal.py class HVACActionReasonInternal (line 4) | class HVACActionReasonInternal(enum.StrEnum): FILE: custom_components/dual_smart_thermostat/hvac_controller/cooler_controller.py class CoolerHvacController (line 14) | class CoolerHvacController(GenericHvacController): method __init__ (line 16) | def __init__( FILE: custom_components/dual_smart_thermostat/hvac_controller/generic_controller.py class GenericHvacController (line 21) | class GenericHvacController(HvacController): method __init__ (line 27) | def __init__( method _is_valve (line 52) | def _is_valve(self) -> bool: method hvac_action_reason (line 58) | def hvac_action_reason(self) -> HVACActionReason: method is_active (line 62) | def is_active(self) -> bool: method ran_long_enough (line 77) | def ran_long_enough(self) -> bool: method needs_control (line 100) | def needs_control( method async_control_device_when_on (line 132) | async def async_control_device_when_on( method async_control_device_when_off (line 174) | async def async_control_device_when_off( FILE: custom_components/dual_smart_thermostat/hvac_controller/heater_controller.py class HeaterHvacConroller (line 16) | class HeaterHvacConroller(GenericHvacController): method __init__ (line 18) | def __init__( method async_control_device_when_on (line 39) | async def async_control_device_when_on( method async_control_device_when_off (line 79) | async def async_control_device_when_off( FILE: custom_components/dual_smart_thermostat/hvac_controller/hvac_controller.py class HvacGoal (line 17) | class HvacGoal(enum.StrEnum): class HvacEnvStrategy (line 24) | class HvacEnvStrategy: method __init__ (line 27) | def __init__( method hvac_goal_reached (line 42) | def hvac_goal_reached(self) -> bool: method hvac_goal_not_reached (line 54) | def hvac_goal_not_reached(self) -> bool: class HvacController (line 60) | class HvacController(ABC): method __init__ (line 72) | def __init__( method hvac_action_reason (line 95) | def hvac_action_reason(self) -> HVACActionReason: method async_control_device_when_on (line 99) | def async_control_device_when_on( method async_control_device_when_off (line 108) | def async_control_device_when_off( method needs_control (line 117) | def needs_control(self, active: bool, hvac_mode: HVACMode, time=None) ... FILE: custom_components/dual_smart_thermostat/hvac_device/controllable_hvac_device.py class ControlableHVACDevice (line 13) | class ControlableHVACDevice(ABC): method async_control_hvac (line 27) | async def async_control_hvac(self, time=None, force=False): method get_device_ids (line 31) | def get_device_ids(self) -> list[str]: method hvac_mode (line 35) | def hvac_mode(self) -> HVACMode: method hvac_action (line 39) | def hvac_action(self) -> HVACAction: method hvac_mode (line 44) | def hvac_mode(self, hvac_mode: HVACMode): method async_set_hvac_mode (line 48) | async def async_set_hvac_mode(self, hvac_mode: HVACMode): method async_on_remove (line 64) | def async_on_remove(self, func: CALLBACK_TYPE) -> None: method on_entity_state_change (line 71) | def on_entity_state_change(self, entity_id: str, new_state: State) -> ... method call_on_remove_callbacks (line 77) | def call_on_remove_callbacks(self) -> None: method set_context (line 85) | def set_context(self, context: Context): method async_on_startup (line 89) | async def async_on_startup(self): method _async_check_device_initial_state (line 93) | async def _async_check_device_initial_state(self) -> None: method async_turn_on (line 97) | async def async_turn_on(self): method async_turn_off (line 102) | async def async_turn_off(self): method is_active (line 106) | def is_active(self) -> bool: method HVACActionReason (line 110) | def HVACActionReason(self) -> HVACActionReason: method HVACActionReason (line 114) | def HVACActionReason(self, hvac_action_reason: HVACActionReason): method on_entity_state_changed (line 117) | def on_entity_state_changed(self, entity_id: str, new_state: State) ->... method on_target_temperature_change (line 121) | def on_target_temperature_change(self, temperatures: TargetTemperature... FILE: custom_components/dual_smart_thermostat/hvac_device/cooler_device.py class CoolerDevice (line 18) | class CoolerDevice(GenericHVACDevice): method __init__ (line 22) | def __init__( method target_env_attr (line 56) | def target_env_attr(self) -> str: method hvac_action (line 64) | def hvac_action(self) -> HVACAction: FILE: custom_components/dual_smart_thermostat/hvac_device/cooler_fan_device.py class CoolerFanDevice (line 20) | class CoolerFanDevice(MultiHvacDevice): method __init__ (line 22) | def __init__( method _set_fan_hot_tolerance_on_state (line 50) | def _set_fan_hot_tolerance_on_state(self): method hvac_mode (line 75) | def hvac_mode(self) -> HVACMode: method hvac_mode (line 79) | def hvac_mode(self, hvac_mode: HVACMode): # noqa: F811 method async_on_startup (line 85) | async def async_on_startup(self, async_write_ha_state_cb: Callable = N... method _async_fan_hot_tolerance_on_changed (line 100) | async def _async_fan_hot_tolerance_on_changed( method _async_check_device_initial_state (line 120) | async def _async_check_device_initial_state(self) -> None: method async_control_hvac (line 124) | async def async_control_hvac(self, time=None, force=False): method _async_control_when_fan_on_with_cooler (line 151) | async def _async_control_when_fan_on_with_cooler(self, time=None, forc... method _async_control_cooler (line 156) | async def _async_control_cooler(self, time=None, force=False): FILE: custom_components/dual_smart_thermostat/hvac_device/dryer_device.py class DryerDevice (line 18) | class DryerDevice(GenericHVACDevice): method __init__ (line 24) | def __init__( method hvac_action (line 48) | def hvac_action(self) -> HVACAction: method _set_self_active (line 56) | def _set_self_active(self) -> None: method target_env_attr_reached_reason (line 77) | def target_env_attr_reached_reason(self) -> HVACActionReason: method target_env_attr_not_reached_reason (line 81) | def target_env_attr_not_reached_reason(self) -> HVACActionReason: method is_below_target_env_attr (line 85) | def is_below_target_env_attr(self) -> bool: method is_above_target_env_attr (line 90) | def is_above_target_env_attr(self) -> bool: FILE: custom_components/dual_smart_thermostat/hvac_device/fan_device.py class FanDevice (line 17) | class FanDevice(CoolerDevice): method __init__ (line 22) | def __init__( method _detect_fan_capabilities (line 54) | def _detect_fan_capabilities(self) -> None: method supports_fan_mode (line 103) | def supports_fan_mode(self) -> bool: method fan_modes (line 108) | def fan_modes(self) -> list[str]: method uses_preset_modes (line 113) | def uses_preset_modes(self) -> bool: method current_fan_mode (line 118) | def current_fan_mode(self) -> str | None: method restore_fan_mode (line 122) | def restore_fan_mode(self, fan_mode: str) -> None: method async_set_fan_mode (line 142) | async def async_set_fan_mode(self, fan_mode: str) -> None: method async_turn_on (line 186) | async def async_turn_on(self): method hvac_action (line 209) | def hvac_action(self) -> HVACAction: FILE: custom_components/dual_smart_thermostat/hvac_device/generic_hvac_device.py class GenericHVACDevice (line 36) | class GenericHVACDevice( method __init__ (line 44) | def __init__( method set_context (line 91) | def set_context(self, context: Context): method get_device_ids (line 94) | def get_device_ids(self) -> list[str]: method _entity_state (line 98) | def _entity_state(self) -> str: method _is_valve (line 102) | def _is_valve(self) -> bool: method _entity_features (line 107) | def _entity_features(self) -> int: method _supports_open_valve (line 115) | def _supports_open_valve(self) -> bool: method _supports_close_valve (line 120) | def _supports_close_valve(self) -> bool: method target_env_attr (line 124) | def target_env_attr(self) -> str: method is_active (line 128) | def is_active(self) -> bool: method is_on (line 133) | def is_on(self) -> bool: method is_below_target_env_attr (line 136) | def is_below_target_env_attr(self) -> bool: method is_above_target_env_attr (line 140) | def is_above_target_env_attr(self) -> bool: method target_env_attr_reached_reason (line 144) | def target_env_attr_reached_reason(self) -> HVACActionReason: method target_env_attr_not_reached_reason (line 147) | def target_env_attr_not_reached_reason(self) -> HVACActionReason: method _set_self_active (line 150) | def _set_self_active(self) -> None: method async_control_hvac (line 173) | async def async_control_hvac(self, time=None, force=False): method async_on_startup (line 226) | async def async_on_startup(self, async_write_ha_state_cb: Callable = N... method _async_check_device_initial_state (line 237) | async def _async_check_device_initial_state(self) -> None: method async_turn_on (line 246) | async def async_turn_on(self): method async_turn_off (line 261) | async def async_turn_off(self): method _async_turn_on_entity (line 279) | async def _async_turn_on_entity(self) -> None: method _async_turn_off_entity (line 313) | async def _async_turn_off_entity(self) -> None: method _async_open_valve_entity (line 344) | async def _async_open_valve_entity(self) -> None: method _async_close_valve_entity (line 359) | async def _async_close_valve_entity(self) -> None: FILE: custom_components/dual_smart_thermostat/hvac_device/heat_pump_device.py class HeatPumpDevice (line 21) | class HeatPumpDevice(GenericHVACDevice): method __init__ (line 25) | def __init__( method target_env_attr (line 102) | def target_env_attr(self) -> str: method hvac_action (line 113) | def hvac_action(self) -> HVACAction: method on_entity_state_changed (line 125) | def on_entity_state_changed(self, entity_id: str, new_state: State) ->... method _apply_heat_pump_cooling_state (line 141) | def _apply_heat_pump_cooling_state(self, state: State = None) -> None: method _change_hvac_strategy (line 172) | def _change_hvac_strategy(self, heat_pump_is_cooling: bool) -> None: method _change_hvac_modes (line 183) | def _change_hvac_modes(self, heat_pump_is_cooling: bool) -> None: method _change_hvac_mode (line 202) | def _change_hvac_mode(self, heat_pump_is_cooling: bool) -> None: method on_target_temperature_change (line 222) | def on_target_temperature_change(self, temperatures: TargetTemperature... FILE: custom_components/dual_smart_thermostat/hvac_device/heater_aux_heater_device.py class HeaterAUXHeaterDevice (line 21) | class HeaterAUXHeaterDevice(MultiHvacDevice): method __init__ (line 23) | def __init__( method _target_env_attr (line 45) | def _target_env_attr(self) -> str: method async_control_hvac (line 48) | async def async_control_hvac(self, time=None, force=False): method async_control_devices (line 59) | async def async_control_devices(self, time=None, force=False): method async_control_devices_forced (line 67) | async def async_control_devices_forced(self, time=None) -> None: method _async_control_devices_when_off (line 72) | async def _async_control_devices_when_off(self, time=None) -> None: method _async_handle_aux_heater_ran_today (line 120) | async def _async_handle_aux_heater_ran_today(self) -> None: method _async_handle_aux_heater_havent_run_today (line 126) | async def _async_handle_aux_heater_havent_run_today(self) -> None: method _async_control_devices_when_on (line 142) | async def _async_control_devices_when_on(self, time=None) -> None: method _first_stage_heating_timed_out (line 208) | def _first_stage_heating_timed_out(self, timeout=None) -> bool: method _has_aux_heating_ran_today (line 221) | def _has_aux_heating_ran_today(self) -> bool: FILE: custom_components/dual_smart_thermostat/hvac_device/heater_cooler_device.py class HeaterCoolerDevice (line 17) | class HeaterCoolerDevice(MultiHvacDevice): method __init__ (line 19) | def __init__( method hvac_mode (line 51) | def hvac_mode(self) -> HVACMode: method hvac_mode (line 55) | def hvac_mode(self, hvac_mode: HVACMode): method async_control_hvac (line 63) | async def async_control_hvac(self, time=None, force: bool = False): method is_cold_or_hot (line 77) | def is_cold_or_hot(self) -> tuple[bool, bool, ToleranceDevice]: method async_set_hvac_mode (line 117) | async def async_set_hvac_mode(self, hvac_mode: HVACMode): method _async_control_heat_cool (line 127) | async def _async_control_heat_cool(self, time=None, force=False) -> None: method async_heater_cooler_toggle (line 147) | async def async_heater_cooler_toggle(self, time=None, force=False) -> ... method _async_auto_toggle (line 169) | async def _async_auto_toggle( method _async_check_device_initial_state (line 189) | async def _async_check_device_initial_state(self) -> None: FILE: custom_components/dual_smart_thermostat/hvac_device/heater_device.py class HeaterDevice (line 18) | class HeaterDevice(GenericHVACDevice): method __init__ (line 22) | def __init__( method target_env_attr (line 56) | def target_env_attr(self) -> str: method hvac_action (line 62) | def hvac_action(self) -> HVACAction: FILE: custom_components/dual_smart_thermostat/hvac_device/hvac_device.py function merge_hvac_modes (line 15) | def merge_hvac_modes(first: list[HVACMode], second: list[HVACMode]): class Switchable (line 19) | class Switchable(ABC): method async_turn_on (line 21) | async def async_turn_on(self): method async_turn_off (line 25) | async def async_turn_off(self): class TargetsEnvironmentAttribute (line 29) | class TargetsEnvironmentAttribute(ABC): method target_env_attr (line 35) | def target_env_attr(self) -> str: class HVACDevice (line 39) | class HVACDevice: method __init__ (line 46) | def __init__( method set_context (line 60) | def set_context(self, context: Context): method init_hvac_modes (line 64) | def init_hvac_modes( FILE: custom_components/dual_smart_thermostat/hvac_device/hvac_device_factory.py class HVACDeviceFactory (line 38) | class HVACDeviceFactory: method __init__ (line 40) | def __init__( method create_device (line 73) | def create_device( method _create_cooler_device (line 266) | def _create_cooler_device( FILE: custom_components/dual_smart_thermostat/hvac_device/multi_hvac_device.py class MultiHvacDevice (line 17) | class MultiHvacDevice(HVACDevice, ControlableHVACDevice): method __init__ (line 21) | def __init__( method set_context (line 45) | def set_context(self, context: Context): method on_entity_state_changed (line 50) | def on_entity_state_changed(self, entity_id: str, new_state: State) ->... method get_device_ids (line 61) | def get_device_ids(self) -> list[str]: method set_initial_hvac_mode (line 68) | def set_initial_hvac_mode(self, initial_hvac_mode: HVACMode): method is_active (line 76) | def is_active(self) -> bool: method hvac_mode (line 83) | def hvac_mode(self) -> HVACMode: method hvac_mode (line 87) | def hvac_mode(self, hvac_mode: HVACMode): method hvac_action (line 92) | def hvac_action(self) -> HVACAction: method set_sub_devices_hvac_mode (line 101) | def set_sub_devices_hvac_mode(self, hvac_mode: HVACMode) -> None: method async_set_hvac_mode (line 107) | async def async_set_hvac_mode(self, hvac_mode: HVACMode): method async_control_hvac (line 137) | async def async_control_hvac(self, time=None, force: bool = False): method async_on_startup (line 158) | async def async_on_startup(self, async_write_ha_state_cb: Callable = N... method async_turn_on (line 163) | async def async_turn_on(self): method async_turn_off (line 166) | async def async_turn_off(self): method async_turn_off_all (line 169) | async def async_turn_off_all(self, time): method _async_check_device_initial_state (line 174) | async def _async_check_device_initial_state(self) -> None: FILE: custom_components/dual_smart_thermostat/managers/auto_mode_evaluator.py class AutoDecision (line 27) | class AutoDecision: class AutoModeEvaluator (line 39) | class AutoModeEvaluator: method __init__ (line 42) | def __init__( method _can_heat (line 56) | def _can_heat(self) -> bool: method _can_cool (line 64) | def _can_cool(self) -> bool: method _dryer_configured (line 73) | def _dryer_configured(self) -> bool: method _outside_promotes_to_urgent (line 76) | def _outside_promotes_to_urgent( method _free_cooling_applies (line 106) | def _free_cooling_applies( method evaluate (line 129) | def evaluate( method _goal_pending (line 186) | def _goal_pending( method _urgent_decision (line 205) | def _urgent_decision( method _full_scan (line 232) | def _full_scan( method _humidity_at (line 303) | def _humidity_at(env, *, multiplier: int) -> bool: method _cold_target (line 310) | def _cold_target(self, env) -> float | None: method _hot_target (line 316) | def _hot_target(self, env) -> float | None: method _temp_too_cold (line 322) | def _temp_too_cold(self, env, cold_tolerance: float, *, multiplier: in... method _temp_too_hot (line 328) | def _temp_too_hot(self, env, hot_tolerance: float, *, multiplier: int)... method _fan_band (line 335) | def _fan_band(self, env) -> bool: FILE: custom_components/dual_smart_thermostat/managers/environment_manager.py class TargetTemperatures (line 58) | class TargetTemperatures: method __init__ (line 63) | def __init__(self, temperature: float, temp_high: float, temp_low: flo... class EnvironmentAttributeType (line 69) | class EnvironmentAttributeType(enum.StrEnum): function _rothfusz_heat_index_f (line 76) | def _rothfusz_heat_index_f(t_f: float, rh: float) -> float: class EnvironmentManager (line 98) | class EnvironmentManager(StateManager): method __init__ (line 101) | def __init__(self, hass: HomeAssistant, config: ConfigType): method sensor_entity_id (line 151) | def sensor_entity_id(self) -> str | None: method cur_temp (line 156) | def cur_temp(self) -> float: method cur_temp (line 160) | def cur_temp(self, temp: float) -> None: method cur_floor_temp (line 165) | def cur_floor_temp(self) -> float: method cur_floor_temp (line 169) | def cur_floor_temp(self, temperature) -> None: method cur_outside_temp (line 173) | def cur_outside_temp(self) -> float: method apparent_temp (line 177) | def apparent_temp(self) -> float | None: method effective_temp_for_mode (line 208) | def effective_temp_for_mode(self, mode: HVACMode) -> float | None: method target_temp (line 220) | def target_temp(self) -> float: method target_temp (line 224) | def target_temp(self, temp: float) -> None: method target_temp_high (line 229) | def target_temp_high(self) -> float: method target_temp_high (line 233) | def target_temp_high(self, temp: float) -> None: method target_temp_low (line 237) | def target_temp_low(self) -> float: method target_temp_low (line 241) | def target_temp_low(self, temp: float) -> None: method target_temperature_step (line 246) | def target_temperature_step(self) -> float: method max_temp (line 250) | def max_temp(self) -> float: method min_temp (line 258) | def min_temp(self) -> float: method max_floor_temp (line 266) | def max_floor_temp(self) -> float: method max_floor_temp (line 270) | def max_floor_temp(self, temp: float) -> None: method min_floor_temp (line 274) | def min_floor_temp(self) -> float: method min_floor_temp (line 278) | def min_floor_temp(self, temp: float) -> None: method saved_target_temp (line 282) | def saved_target_temp(self) -> float: method saved_target_temp (line 286) | def saved_target_temp(self, temp: float) -> None: method saved_target_temp_low (line 291) | def saved_target_temp_low(self) -> float: method saved_target_temp_low (line 295) | def saved_target_temp_low(self, temp: float) -> None: method saved_target_temp_high (line 300) | def saved_target_temp_high(self) -> float: method saved_target_temp_high (line 304) | def saved_target_temp_high(self, temp: float) -> None: method saved_target_humidity (line 308) | def saved_target_humidity(self) -> float: method saved_target_humidity (line 312) | def saved_target_humidity(self, humidity: float) -> None: method fan_hot_tolerance (line 316) | def fan_hot_tolerance(self) -> float: method max_humidity (line 320) | def max_humidity(self) -> float: method min_humidity (line 324) | def min_humidity(self) -> float: method target_humidity (line 328) | def target_humidity(self) -> float: method target_humidity (line 332) | def target_humidity(self, humidity: float) -> None: method cur_humidity (line 336) | def cur_humidity(self) -> float: method humidity_sensor_stalled (line 340) | def humidity_sensor_stalled(self) -> bool: method humidity_sensor_stalled (line 344) | def humidity_sensor_stalled(self, value: bool) -> None: method get_env_attr_type (line 347) | def get_env_attr_type(self, attr: str) -> EnvironmentAttributeType: method set_hvac_mode (line 354) | def set_hvac_mode(self, hvac_mode: HVACMode) -> None: method _get_active_tolerance_for_mode (line 367) | def _get_active_tolerance_for_mode(self) -> tuple[float, float]: method set_temperature_range_from_saved (line 448) | def set_temperature_range_from_saved(self) -> None: method set_temperature_range_from_hvac_mode (line 452) | def set_temperature_range_from_hvac_mode( method set_temperature_target (line 464) | def set_temperature_target(self, temperature: float) -> None: method set_temperature_range (line 472) | def set_temperature_range( method is_within_fan_tolerance (line 499) | def is_within_fan_tolerance(self, target_attr="_target_temp") -> bool: method is_warmer_outside (line 525) | def is_warmer_outside(self) -> bool: method is_too_cold (line 537) | def is_too_cold(self, target_attr="_target_temp") -> bool: method is_too_hot (line 554) | def is_too_hot(self, target_attr="_target_temp") -> bool: method is_equal_to_target (line 581) | def is_equal_to_target(self, target_attr="_target_temp") -> bool: method is_too_moist (line 590) | def is_too_moist(self) -> bool: method is_too_dry (line 597) | def is_too_dry(self) -> bool: method is_floor_hot (line 610) | def is_floor_hot(self) -> bool: method is_floor_cold (line 622) | def is_floor_cold(self) -> bool: method update_temp_from_state (line 634) | def update_temp_from_state(self, state: State) -> None: method update_floor_temp_from_state (line 645) | def update_floor_temp_from_state(self, state: State): method update_outside_temp_from_state (line 656) | def update_outside_temp_from_state(self, state: State): method update_humidity_from_state (line 667) | def update_humidity_from_state(self, state: State): method set_default_target_humidity (line 677) | def set_default_target_humidity(self) -> None: method set_default_target_temps (line 685) | def set_default_target_temps( method _set_default_temps_target_mode (line 701) | def _set_default_temps_target_mode(self, hvac_mode: HVACMode) -> None: method _set_default_temps_range_mode (line 747) | def _set_default_temps_range_mode(self) -> None: method set_humidity_from_preset (line 771) | def set_humidity_from_preset( method set_temepratures_from_hvac_mode_and_presets (line 795) | def set_temepratures_from_hvac_mode_and_presets( method _set_temps_when_no_preset_mode (line 828) | def _set_temps_when_no_preset_mode( method _set_temps_when_have_preset_mode (line 852) | def _set_temps_when_have_preset_mode( method _set_temps_when_range_mode (line 946) | def _set_temps_when_range_mode(self, old_preset_mode: str | None) -> N... method _set_temps_when_target_mode (line 977) | def _set_temps_when_target_mode( method _set_floor_temp_limits_from_preset (line 1018) | def _set_floor_temp_limits_from_preset(self, preset_env: PresetEnv) ->... method _set_floor_temp_limits_from_config (line 1034) | def _set_floor_temp_limits_from_config(self) -> None: method apply_old_state (line 1043) | def apply_old_state(self, old_state: State) -> None: FILE: custom_components/dual_smart_thermostat/managers/feature_manager.py class FeatureManager (line 47) | class FeatureManager(StateManager): method __init__ (line 49) | def __init__( method heat_pump_cooling_entity_id (line 89) | def heat_pump_cooling_entity_id(self) -> str: method supported_features (line 93) | def supported_features(self) -> int: method is_target_mode (line 98) | def is_target_mode(self) -> bool: method is_range_mode (line 108) | def is_range_mode(self) -> bool: method is_configured_for_heater_mode (line 115) | def is_configured_for_heater_mode(self) -> bool: method is_configured_for_cooler_mode (line 124) | def is_configured_for_cooler_mode(self) -> bool: method is_configured_for_dual_mode (line 129) | def is_configured_for_dual_mode(self) -> bool: method is_configured_for_heat_cool_mode (line 137) | def is_configured_for_heat_cool_mode(self) -> bool: method is_configured_for_aux_heating_mode (line 150) | def is_configured_for_aux_heating_mode(self) -> bool: method aux_heater_timeout (line 161) | def aux_heater_timeout(self) -> int: method aux_heater_dual_mode (line 166) | def aux_heater_dual_mode(self) -> bool: method is_configured_for_fan_mode (line 171) | def is_configured_for_fan_mode(self) -> bool: method is_configured_fan_mode_tolerance (line 176) | def is_configured_fan_mode_tolerance(self) -> bool: method is_configured_for_fan_only_mode (line 181) | def is_configured_for_fan_only_mode(self) -> bool: method is_configured_for_fan_on_with_cooler (line 190) | def is_configured_for_fan_on_with_cooler(self) -> bool: method is_fan_uses_outside_air (line 195) | def is_fan_uses_outside_air(self) -> bool: method fan_hot_tolerance_on_entity (line 199) | def fan_hot_tolerance_on_entity(self) -> bool: method is_configured_for_dryer_mode (line 203) | def is_configured_for_dryer_mode(self) -> bool: method is_configured_for_heat_pump_mode (line 211) | def is_configured_for_heat_pump_mode(self) -> bool: method is_configured_for_hvac_power_levels (line 216) | def is_configured_for_hvac_power_levels(self) -> bool: method is_configured_for_auto_mode (line 224) | def is_configured_for_auto_mode(self) -> bool: method set_support_flags (line 246) | def set_support_flags( method apply_old_state (line 301) | def apply_old_state( method hvac_modes_support_range_temp (line 331) | def hvac_modes_support_range_temp(self, hvac_modes: list[HVACMode]) ->... method set_fan_device (line 336) | def set_fan_device(self, fan_device: FanDevice | None) -> None: method fan_device (line 341) | def fan_device(self) -> FanDevice | None: method supports_fan_mode (line 346) | def supports_fan_mode(self) -> bool: method fan_modes (line 353) | def fan_modes(self) -> list[str]: method _restore_fan_mode (line 359) | def _restore_fan_mode(self, old_state: State) -> None: FILE: custom_components/dual_smart_thermostat/managers/hvac_power_manager.py class HvacPowerManager (line 20) | class HvacPowerManager: method __init__ (line 25) | def __init__( method hvac_power_level (line 73) | def hvac_power_level(self) -> int: method hvac_power_percent (line 77) | def hvac_power_percent(self) -> int: method _get_hvac_power_tolerance (line 80) | def _get_hvac_power_tolerance(self, is_temperature: bool) -> int: method update_hvac_power (line 102) | def update_hvac_power( method _calculate_power (line 130) | def _calculate_power(self, target_env_attr: str): method _calculate_power_level (line 160) | def _calculate_power_level(self, step_value: float, env_difference: fl... method _calculate_power_percent (line 178) | def _calculate_power_percent( FILE: custom_components/dual_smart_thermostat/managers/opening_manager.py class OpeningHvacModeScope (line 33) | class OpeningHvacModeScope(enum.StrEnum): class OpeningManager (line 44) | class OpeningManager: method __init__ (line 47) | def __init__(self, hass: HomeAssistant, config: ConfigType) -> None: method conform_openings_list (line 62) | def conform_openings_list(openings: list) -> list: method conform_opening_entities (line 70) | def conform_opening_entities(openings: [TIMED_OPENING_SCHEMA]) -> list... method _is_opening_available (line 74) | def _is_opening_available(self, opening: TIMED_OPENING_SCHEMA) -> bool... method _has_timeout_mode (line 93) | def _has_timeout_mode(self, opening: TIMED_OPENING_SCHEMA, is_open: bo... method _is_opening_open_state (line 98) | def _is_opening_open_state(self, opening: TIMED_OPENING_SCHEMA) -> boo... method any_opening_open (line 110) | def any_opening_open( method _is_opening_open (line 142) | def _is_opening_open(self, opening: TIMED_OPENING_SCHEMA) -> bool: # ... method _is_opening_timed_out (line 187) | def _is_opening_timed_out(self, opening: TIMED_OPENING_SCHEMA, check_o... FILE: custom_components/dual_smart_thermostat/managers/preset_manager.py class PresetManager (line 22) | class PresetManager(StateManager): method __init__ (line 26) | def __init__( method presets (line 51) | def presets(self): method preset_modes (line 55) | def preset_modes(self) -> list[str]: method preset_mode (line 59) | def preset_mode(self): method has_presets (line 63) | def has_presets(self): method preset_env (line 67) | def preset_env(self) -> PresetEnv: method _get_preset_modes_from_config (line 70) | def _get_preset_modes_from_config( method set_preset_mode (line 113) | def set_preset_mode(self, preset_mode: str) -> None: method _set_presets_when_have_preset_mode (line 134) | def _set_presets_when_have_preset_mode(self, preset_mode: str): method apply_old_state (line 153) | async def apply_old_state(self, old_state: State): method _apply_range_mode_state (line 176) | async def _apply_range_mode_state( method _apply_single_temp_mode_state (line 207) | async def _apply_single_temp_mode_state( method _restore_range_temps_from_preset (line 231) | async def _restore_range_temps_from_preset( method _restore_temp_from_preset (line 257) | async def _restore_temp_from_preset(self, preset): method _restore_temperature_fallback (line 278) | def _restore_temperature_fallback( method find_matching_preset (line 287) | def find_matching_preset(self) -> str | None: method _values_match_preset (line 332) | def _values_match_preset( method _check_temperature_match (line 366) | def _check_temperature_match(self, preset_env, current_temp: float | N... method _check_temperature_range_match (line 382) | def _check_temperature_range_match( method _check_humidity_match (line 412) | def _check_humidity_match(self, preset_env, current_humidity: float | ... method _check_floor_temp_limits_match (line 422) | def _check_floor_temp_limits_match( method _values_equal (line 449) | def _values_equal( FILE: custom_components/dual_smart_thermostat/managers/state_manager.py class StateManager (line 6) | class StateManager(ABC): method apply_old_state (line 9) | def apply_old_state(self, old_state: State) -> None: FILE: custom_components/dual_smart_thermostat/models.py class CoreSettingsBase (line 20) | class CoreSettingsBase: method to_dict (line 28) | def to_dict(self) -> dict[str, Any]: method from_dict (line 33) | def from_dict(cls, data: dict[str, Any]) -> CoreSettingsBase: class SimpleHeaterCoreSettings (line 44) | class SimpleHeaterCoreSettings(CoreSettingsBase): class ACOnlyCoreSettings (line 51) | class ACOnlyCoreSettings(CoreSettingsBase): class HeaterCoolerCoreSettings (line 59) | class HeaterCoolerCoreSettings(CoreSettingsBase): class HeatPumpCoreSettings (line 68) | class HeatPumpCoreSettings(CoreSettingsBase): class FanFeatureSettings (line 76) | class FanFeatureSettings: method to_dict (line 84) | def to_dict(self) -> dict[str, Any]: method from_dict (line 89) | def from_dict(cls, data: dict[str, Any]) -> FanFeatureSettings: class HumidityFeatureSettings (line 95) | class HumidityFeatureSettings: method to_dict (line 106) | def to_dict(self) -> dict[str, Any]: method from_dict (line 111) | def from_dict(cls, data: dict[str, Any]) -> HumidityFeatureSettings: class OpeningConfig (line 117) | class OpeningConfig: method to_dict (line 124) | def to_dict(self) -> dict[str, Any]: method from_dict (line 129) | def from_dict(cls, data: dict[str, Any]) -> OpeningConfig: class OpeningsFeatureSettings (line 135) | class OpeningsFeatureSettings: method to_dict (line 141) | def to_dict(self) -> dict[str, Any]: method from_dict (line 149) | def from_dict(cls, data: dict[str, Any]) -> OpeningsFeatureSettings: class FloorHeatingFeatureSettings (line 160) | class FloorHeatingFeatureSettings: method to_dict (line 167) | def to_dict(self) -> dict[str, Any]: method from_dict (line 172) | def from_dict(cls, data: dict[str, Any]) -> FloorHeatingFeatureSettings: class PresetConfig (line 178) | class PresetConfig: method to_dict (line 186) | def to_dict(self) -> dict[str, Any]: method from_dict (line 191) | def from_dict(cls, data: dict[str, Any]) -> PresetConfig: class PresetsFeatureSettings (line 197) | class PresetsFeatureSettings: method to_dict (line 202) | def to_dict(self) -> dict[str, Any]: method from_dict (line 207) | def from_dict(cls, data: dict[str, Any]) -> PresetsFeatureSettings: class ThermostatConfig (line 213) | class ThermostatConfig: method to_dict (line 230) | def to_dict(self) -> dict[str, Any]: method from_dict (line 252) | def from_dict(cls, data: dict[str, Any]) -> ThermostatConfig: FILE: custom_components/dual_smart_thermostat/options_flow.py class OptionsFlowHandler (line 66) | class OptionsFlowHandler(OptionsFlow): method __init__ (line 69) | def __init__(self, config_entry) -> None: method _get_excluded_flags (line 89) | def _get_excluded_flags() -> set[str]: method _normalize_config_from_storage (line 111) | def _normalize_config_from_storage(self, config: dict[str, Any]) -> di... method _get_current_config (line 147) | def _get_current_config(self) -> dict[str, Any]: method _build_options_schema (line 180) | def _build_options_schema(self, current_config: dict[str, Any]) -> vol... method async_step_init (line 505) | async def async_step_init( method _determine_options_next_step (line 557) | async def _determine_options_next_step(self) -> FlowResult: method async_step_dual_stage_options (line 715) | async def async_step_dual_stage_options( method async_step_floor_options (line 754) | async def async_step_floor_options( method async_step_fan_options (line 767) | async def async_step_fan_options( method async_step_humidity_options (line 781) | async def async_step_humidity_options( method async_step_openings_options (line 794) | async def async_step_openings_options( method async_step_openings_config (line 806) | async def async_step_openings_config( method async_step_preset_selection (line 825) | async def async_step_preset_selection( method _has_both_heating_and_cooling (line 833) | def _has_both_heating_and_cooling(self) -> bool: method async_step_presets (line 853) | async def async_step_presets( method _get_entry (line 861) | def _get_entry(self): method _get_merged_config (line 885) | def _get_merged_config(self): method config_entry (line 897) | def config_entry(self): FILE: custom_components/dual_smart_thermostat/preset_env/preset_env.py class TargeTempEnv (line 19) | class TargeTempEnv: method __init__ (line 22) | def __init__(self, **kwargs) -> None: class RangeTempEnv (line 27) | class RangeTempEnv: method __init__ (line 31) | def __init__(self, **kwargs) -> None: class FloorTempLimitEnv (line 37) | class FloorTempLimitEnv: method __init__ (line 41) | def __init__(self, **kwargs) -> None: class TempEnv (line 48) | class TempEnv(TargeTempEnv, RangeTempEnv, FloorTempLimitEnv): method __init__ (line 49) | def __init__(self, **kwargs) -> None: class HumidityEnv (line 54) | class HumidityEnv: method __init__ (line 57) | def __init__(self, **kwargs) -> None: class PresetEnv (line 63) | class PresetEnv(TempEnv, HumidityEnv): method __init__ (line 64) | def __init__(self, **kwargs): method _process_field (line 82) | def _process_field(self, field_name: str, value: Any) -> None: method _extract_entities (line 113) | def _extract_entities(self, template_str: str) -> None: method get_temperature (line 135) | def get_temperature(self, hass: HomeAssistant) -> float | None: method get_target_temp_low (line 141) | def get_target_temp_low(self, hass: HomeAssistant) -> float | None: method get_target_temp_high (line 147) | def get_target_temp_high(self, hass: HomeAssistant) -> float | None: method _evaluate_template (line 153) | def _evaluate_template(self, hass: HomeAssistant, field_name: str) -> ... method referenced_entities (line 183) | def referenced_entities(self) -> set[str]: method has_templates (line 187) | def has_templates(self) -> bool: method to_dict (line 192) | def to_dict(self) -> dict: method has_temp_range (line 195) | def has_temp_range(self) -> bool: method has_temp (line 198) | def has_temp(self) -> bool: method has_humidity (line 201) | def has_humidity(self) -> bool: method has_floor_temp_limits (line 204) | def has_floor_temp_limits(self) -> bool: FILE: custom_components/dual_smart_thermostat/schema_utils.py function seconds_to_duration (line 11) | def seconds_to_duration(seconds: int) -> dict[str, int]: function get_temperature_selector (line 31) | def get_temperature_selector( function get_tolerance_selector (line 82) | def get_tolerance_selector( function get_percentage_selector (line 137) | def get_percentage_selector( function get_time_selector (line 154) | def get_time_selector( function get_entity_selector (line 169) | def get_entity_selector(domain: str | list[str]) -> selector.EntitySelec... function get_boolean_selector (line 181) | def get_boolean_selector() -> selector.BooleanSelector: function get_select_selector (line 186) | def get_select_selector( function get_multi_select_selector (line 199) | def get_multi_select_selector( function get_text_selector (line 212) | def get_text_selector( FILE: custom_components/dual_smart_thermostat/schemas.py function _load_translations_sync (line 83) | def _load_translations_sync() -> dict: function _load_translations (line 104) | def _load_translations() -> dict: function validate_template_or_number (line 109) | def validate_template_or_number(value: Any) -> Any: function get_system_type_schema (line 166) | def get_system_type_schema(default: str | None = None): function get_base_schema (line 188) | def get_base_schema(): function get_tolerance_fields (line 200) | def get_tolerance_fields( function get_timing_fields_for_section (line 258) | def get_timing_fields_for_section( function get_basic_ac_schema (line 310) | def get_basic_ac_schema(hass=None, defaults=None, include_name=True): function get_simple_heater_schema (line 359) | def get_simple_heater_schema(hass=None, defaults=None, include_name=True): function get_heater_cooler_schema (line 409) | def get_heater_cooler_schema(hass=None, defaults=None, include_name=True): function get_heat_pump_schema (line 476) | def get_heat_pump_schema(hass=None, defaults=None, include_name=True): function get_grouped_schema (line 552) | def get_grouped_schema( function get_heating_schema (line 607) | def get_heating_schema(): function get_cooling_schema (line 618) | def get_cooling_schema(): function get_dual_stage_schema (line 629) | def get_dual_stage_schema(): function get_floor_heating_schema (line 649) | def get_floor_heating_schema(hass=None, defaults: dict[str, Any] | None ... function get_openings_toggle_schema (line 671) | def get_openings_toggle_schema(): function get_fan_toggle_schema (line 676) | def get_fan_toggle_schema(): function get_humidity_toggle_schema (line 681) | def get_humidity_toggle_schema(): function get_features_schema (line 686) | def get_features_schema( function get_ac_only_features_schema (line 757) | def get_ac_only_features_schema(defaults: dict[str, Any] | None = None): function get_simple_heater_features_schema (line 765) | def get_simple_heater_features_schema(defaults: dict[str, Any] | None = ... function get_system_features_schema (line 773) | def get_system_features_schema(system_type: str): function get_core_schema (line 781) | def get_core_schema( function get_openings_selection_schema (line 885) | def get_openings_selection_schema( function get_openings_schema (line 905) | def get_openings_schema(selected_entities: list[str]): function get_fan_schema (line 933) | def get_fan_schema(hass=None, defaults: dict[str, Any] | None = None): function get_humidity_schema (line 981) | def get_humidity_schema(defaults: dict[str, Any] | None = None): function get_additional_sensors_schema (line 1019) | def get_additional_sensors_schema(): function get_heat_cool_mode_schema (line 1026) | def get_heat_cool_mode_schema(): function get_advanced_settings_schema (line 1033) | def get_advanced_settings_schema(hass=None): function get_preset_selection_schema (line 1088) | def get_preset_selection_schema(defaults: list[str] | None = None): function get_presets_schema (line 1154) | def get_presets_schema(user_input: dict[str, Any]) -> vol.Schema: FILE: custom_components/dual_smart_thermostat/sensor.py function _build_options (line 34) | def _build_options() -> tuple[str, ...]: class HvacActionReasonSensor (line 43) | class HvacActionReasonSensor(SensorEntity, RestoreEntity): method __init__ (line 52) | def __init__(self, sensor_key: str, name: str) -> None: method async_added_to_hass (line 61) | async def async_added_to_hass(self) -> None: method async_will_remove_from_hass (line 83) | async def async_will_remove_from_hass(self) -> None: method _handle_reason_update (line 91) | def _handle_reason_update(self, reason) -> None: function async_setup_entry (line 115) | async def async_setup_entry( # NOSONAR python:S7503 - HA platform API function async_setup_platform (line 129) | async def async_setup_platform( # NOSONAR python:S7503 - HA platform API FILE: demo_openings_translations.py function demo_openings_scope_translations (line 8) | def demo_openings_scope_translations(): FILE: demo_translations.py function load_translations (line 8) | def load_translations(lang="en"): function demo_scope_translations (line 19) | def demo_scope_translations(): FILE: manage/update_manifest.py function update_manifest (line 8) | def update_manifest() -> None: FILE: pcap.py class PcapBpfProgram (line 31) | class PcapBpfProgram(Structure): class PcapIf (line 35) | class PcapIf(Structure): function findalldevs (line 83) | def findalldevs(): class Pcap (line 103) | class Pcap: method __init__ (line 104) | def __init__(self, device, snaplen=65535, promisc=1, to_ms=1000): method compile_filter (line 118) | def compile_filter(self, filter_expr, optimize=True, netmask=0xFFFFFFFF): method setfilter (line 136) | def setfilter(self, prog): method close (line 141) | def close(self): method __enter__ (line 146) | def __enter__(self): method __exit__ (line 149) | def __exit__(self, exc_type, exc, tb): function compile_filter_on_device (line 153) | def compile_filter_on_device(filter_expr): FILE: tests/__init__.py function setup_comp_1 (line 49) | async def setup_comp_1(hass: HomeAssistant) -> None: function setup_comp_heat (line 57) | async def setup_comp_heat(hass: HomeAssistant) -> None: function setup_comp_heat_valve (line 79) | async def setup_comp_heat_valve(hass: HomeAssistant) -> None: function setup_comp_heat_safety_delay (line 101) | async def setup_comp_heat_safety_delay(hass: HomeAssistant) -> None: function setup_comp_heat_floor_sensor (line 124) | async def setup_comp_heat_floor_sensor(hass: HomeAssistant) -> None: function setup_comp_heat_floor_opening_sensor (line 147) | async def setup_comp_heat_floor_opening_sensor(hass: HomeAssistant) -> N... function setup_comp_heat_cycle (line 171) | async def setup_comp_heat_cycle(hass: HomeAssistant) -> None: function setup_comp_heat_cycle_precision (line 194) | async def setup_comp_heat_cycle_precision(hass: HomeAssistant) -> None: function setup_comp_heat_ac_cool (line 219) | async def setup_comp_heat_ac_cool(hass: HomeAssistant) -> None: function setup_comp_heat_ac_cool_safety_delay (line 243) | async def setup_comp_heat_ac_cool_safety_delay(hass: HomeAssistant) -> N... function setup_comp_fan_only_config (line 268) | async def setup_comp_fan_only_config(hass: HomeAssistant) -> None: function setup_comp_fan_only_config_cycle (line 292) | async def setup_comp_fan_only_config_cycle(hass: HomeAssistant) -> None: function setup_comp_fan_only_config_keep_alive (line 317) | async def setup_comp_fan_only_config_keep_alive(hass: HomeAssistant) -> ... function setup_comp_fan_only_config_presets (line 341) | async def setup_comp_fan_only_config_presets(hass: HomeAssistant) -> None: function setup_comp_heat_ac_cool_fan_config (line 372) | async def setup_comp_heat_ac_cool_fan_config(hass: HomeAssistant) -> None: function setup_comp_heat_ac_cool_fan_config_tolerance (line 397) | async def setup_comp_heat_ac_cool_fan_config_tolerance(hass: HomeAssista... function setup_comp_heat_ac_cool_fan_config_tolerance_min_cycle (line 423) | async def setup_comp_heat_ac_cool_fan_config_tolerance_min_cycle( function setup_comp_heat_ac_cool_fan_config_cycle (line 452) | async def setup_comp_heat_ac_cool_fan_config_cycle(hass: HomeAssistant) ... function setup_comp_heat_ac_cool_fan_config_keep_alive (line 478) | async def setup_comp_heat_ac_cool_fan_config_keep_alive(hass: HomeAssist... function setup_comp_heat_ac_cool_fan_config_presets (line 504) | async def setup_comp_heat_ac_cool_fan_config_presets(hass: HomeAssistant... function setup_comp_heat_ac_cool_presets (line 536) | async def setup_comp_heat_ac_cool_presets(hass: HomeAssistant) -> None: function setup_comp_heat_ac_cool_presets_range (line 567) | async def setup_comp_heat_ac_cool_presets_range(hass: HomeAssistant) -> ... function setup_comp_heat_ac_cool_cycle (line 630) | async def setup_comp_heat_ac_cool_cycle(hass: HomeAssistant) -> None: function setup_comp_heat_presets (line 656) | async def setup_comp_heat_presets(hass: HomeAssistant) -> None: function setup_comp_heat_presets_floor (line 686) | async def setup_comp_heat_presets_floor(hass: HomeAssistant) -> None: function setup_comp_cool (line 748) | async def setup_comp_cool(hass: HomeAssistant) -> None: function setup_comp_dual (line 770) | async def setup_comp_dual(hass: HomeAssistant) -> None: function setup_comp_heat_cool_1 (line 793) | async def setup_comp_heat_cool_1(hass: HomeAssistant) -> None: function setup_comp_heat_cool_2 (line 817) | async def setup_comp_heat_cool_2(hass: HomeAssistant) -> None: function setup_comp_heat_cool_3 (line 842) | async def setup_comp_heat_cool_3(hass: HomeAssistant) -> None: function setup_comp_dual_fan_config (line 870) | async def setup_comp_dual_fan_config(hass: HomeAssistant) -> None: function setup_comp_heat_cool_fan_config (line 894) | async def setup_comp_heat_cool_fan_config(hass: HomeAssistant) -> None: function setup_comp_heat_cool_fan_config_tolerance (line 919) | async def setup_comp_heat_cool_fan_config_tolerance(hass: HomeAssistant)... function setup_comp_heat_cool_fan_config_2 (line 945) | async def setup_comp_heat_cool_fan_config_2(hass: HomeAssistant) -> None: function setup_comp_dual_presets (line 974) | async def setup_comp_dual_presets(hass: HomeAssistant) -> None: function setup_comp_heat_cool_presets (line 1018) | async def setup_comp_heat_cool_presets(hass: HomeAssistant) -> None: function setup_comp_heat_cool_presets_range_only (line 1077) | async def setup_comp_heat_cool_presets_range_only(hass: HomeAssistant) -... function setup_comp_heat_cool_safety_delay (line 1129) | async def setup_comp_heat_cool_safety_delay(hass: HomeAssistant) -> None: function setup_comp_heat_cool_fan_presets (line 1154) | async def setup_comp_heat_cool_fan_presets(hass: HomeAssistant) -> None: function setup_component (line 1213) | async def setup_component(hass: HomeAssistant, mock_config: dict) -> Moc... function setup_comp_heat_cool_dual_switch (line 1225) | async def setup_comp_heat_cool_dual_switch(hass: HomeAssistant) -> None: function setup_sensor (line 1282) | def setup_sensor(hass: HomeAssistant, temp: float) -> None: function setup_floor_sensor (line 1287) | def setup_floor_sensor(hass: HomeAssistant, temp: float) -> None: function setup_outside_sensor (line 1292) | def setup_outside_sensor(hass: HomeAssistant, temp: float) -> None: function setup_humidity_sensor (line 1297) | def setup_humidity_sensor(hass: HomeAssistant, humidity: float) -> None: function setup_boolean (line 1302) | def setup_boolean(hass: HomeAssistant, entity, state) -> None: function setup_switch (line 1307) | def setup_switch( function setup_valve (line 1325) | def setup_valve(hass: HomeAssistant, is_open: bool) -> None: function setup_fan_heat_tolerance_toggle (line 1345) | def setup_fan_heat_tolerance_toggle(hass: HomeAssistant, is_on: bool) ->... function setup_heat_pump_cooling_status (line 1363) | def setup_heat_pump_cooling_status(hass: HomeAssistant, is_on: bool) -> ... function setup_switch_dual (line 1381) | def setup_switch_dual( function setup_switch_heat_cool_fan (line 1400) | def setup_switch_heat_cool_fan( function setup_fan (line 1420) | def setup_fan(hass: HomeAssistant, is_on: bool) -> None: FILE: tests/behavioral/test_tolerance_thresholds.py function test_heater_cold_tolerance_threshold_heating_mode (line 32) | async def test_heater_cold_tolerance_threshold_heating_mode(hass: HomeAs... function test_cooler_hot_tolerance_threshold_cooling_mode (line 111) | async def test_cooler_hot_tolerance_threshold_cooling_mode(hass: HomeAss... function test_heat_cool_mode_dual_thresholds (line 195) | async def test_heat_cool_mode_dual_thresholds(hass: HomeAssistant): function test_zero_tolerance_immediate_response (line 291) | async def test_zero_tolerance_immediate_response(hass: HomeAssistant): function test_large_tolerance_wide_dead_band (line 347) | async def test_large_tolerance_wide_dead_band(hass: HomeAssistant): FILE: tests/common.py function async_set_preset_mode (line 81) | async def async_set_preset_mode(hass, preset_mode, entity_id=ENTITY_MATC... function async_set_temperature (line 91) | async def async_set_temperature( function async_set_temperature_range (line 117) | async def async_set_temperature_range( function async_set_humidity (line 141) | async def async_set_humidity( function set_temperature (line 160) | def set_temperature( function async_set_hvac_mode (line 184) | async def async_set_hvac_mode(hass, hvac_mode, entity_id=ENTITY_MATCH_AL... function async_toggle (line 194) | async def async_toggle(hass, entity_id=ENTITY_MATCH_ALL) -> None: function set_operation_mode (line 205) | def set_operation_mode(hass, hvac_mode, entity_id=ENTITY_MATCH_ALL) -> N... function async_turn_on (line 215) | async def async_turn_on(hass, entity_id=ENTITY_MATCH_ALL) -> None: function async_turn_off (line 225) | async def async_turn_off(hass, entity_id=ENTITY_MATCH_ALL) -> None: function async_set_hvac_action_reason (line 235) | async def async_set_hvac_action_reason( function get_action_reason_sensor_entity_id (line 251) | def get_action_reason_sensor_entity_id(climate_entity_id: str) -> str: function get_action_reason_sensor_state (line 261) | def get_action_reason_sensor_state(hass, climate_entity_id: str): function threadsafe_callback_factory (line 269) | def threadsafe_callback_factory(func): function async_fire_time_changed_exact (line 287) | def async_fire_time_changed_exact( function async_fire_time_changed (line 306) | def async_fire_time_changed( function _async_fire_time_changed (line 336) | def _async_fire_time_changed( function get_scheduled_timer_handles (line 367) | def get_scheduled_timer_handles(loop: asyncio.AbstractEventLoop) -> list... function mock_restore_cache (line 373) | def mock_restore_cache(hass: HomeAssistant, states: Sequence[State]) -> ... function mock_restore_cache_with_extra_data (line 399) | def mock_restore_cache_with_extra_data( function async_mock_service (line 426) | def async_mock_service( function get_fixture_path (line 466) | def get_fixture_path(filename: str, integration: str | None = None) -> p... function async_mock_signal (line 472) | def async_mock_signal( FILE: tests/config_flow/test_ac_only_advanced_settings.py class TestACOnlyAdvancedSettings (line 19) | class TestACOnlyAdvancedSettings: method test_config_flow_ac_only_has_advanced_section (line 22) | def test_config_flow_ac_only_has_advanced_section(self): method test_options_flow_ac_only_has_advanced_section (line 40) | def test_options_flow_ac_only_has_advanced_section(self): method test_options_flow_init_step_ac_only (line 70) | async def test_options_flow_init_step_ac_only(self): FILE: tests/config_flow/test_ac_only_features.py function test_ac_only_features_flow (line 13) | async def test_ac_only_features_flow(): function run_test (line 110) | def run_test(): FILE: tests/config_flow/test_ac_only_features_integration.py function mock_hass (line 45) | def mock_hass(): class TestAcOnlyNoFeatures (line 54) | class TestAcOnlyNoFeatures: method test_config_flow_no_features (line 57) | async def test_config_flow_no_features(self, mock_hass): class TestAcOnlyFanOnly (line 113) | class TestAcOnlyFanOnly: method test_config_flow_fan_only (line 116) | async def test_config_flow_fan_only(self, mock_hass): class TestAcOnlyHumidityOnly (line 169) | class TestAcOnlyHumidityOnly: method test_config_flow_humidity_only (line 172) | async def test_config_flow_humidity_only(self, mock_hass): class TestAcOnlyFanAndHumidity (line 229) | class TestAcOnlyFanAndHumidity: method test_config_flow_fan_and_humidity (line 232) | async def test_config_flow_fan_and_humidity(self, mock_hass): class TestAcOnlyAllFeatures (line 303) | class TestAcOnlyAllFeatures: method test_config_flow_all_features (line 306) | async def test_config_flow_all_features(self, mock_hass): class TestAcOnlyBlockedFeatures (line 418) | class TestAcOnlyBlockedFeatures: method test_floor_heating_not_in_schema (line 421) | async def test_floor_heating_not_in_schema(self, mock_hass): method test_available_features_only (line 440) | async def test_available_features_only(self, mock_hass): class TestAcOnlyFeatureOrdering (line 469) | class TestAcOnlyFeatureOrdering: method test_fan_before_humidity (line 472) | async def test_fan_before_humidity(self, mock_hass): method test_humidity_before_openings (line 516) | async def test_humidity_before_openings(self, mock_hass): class TestAcOnlyPartialOverride (line 561) | class TestAcOnlyPartialOverride: method test_tolerance_partial_override_cool_only (line 564) | async def test_tolerance_partial_override_cool_only(self, mock_hass): FILE: tests/config_flow/test_advanced_options.py function test_issue_reproduction (line 26) | def test_issue_reproduction(): function test_user_workflow (line 81) | def test_user_workflow(): function test_edge_cases (line 149) | def test_edge_cases(): function test_flow_determination_logic (line 179) | def test_flow_determination_logic(): function test_separate_advanced_step (line 232) | def test_separate_advanced_step(): function main (line 265) | def main(): FILE: tests/config_flow/test_config_flow.py function mock_hass (line 27) | def mock_hass(): function test_config_flow_system_type_selection (line 35) | async def test_config_flow_system_type_selection(): function test_ac_only_config_flow (line 56) | async def test_ac_only_config_flow(): function test_ac_only_config_flow_without_advanced_settings (line 97) | async def test_ac_only_config_flow_without_advanced_settings(): function test_ac_only_config_flow_with_custom_tolerances (line 125) | async def test_ac_only_config_flow_with_custom_tolerances(): function test_ac_only_features_selection (line 159) | async def test_ac_only_features_selection(): function test_simple_heater_config_flow (line 193) | async def test_simple_heater_config_flow(): function test_dual_system_config_flow (line 220) | async def test_dual_system_config_flow(): function test_heater_cooler_schema_includes_name (line 252) | async def test_heater_cooler_schema_includes_name(): function test_preset_selection_flow (line 290) | async def test_preset_selection_flow(): function test_preset_skip_logic (line 325) | async def test_preset_skip_logic(): function run_all_tests (line 357) | async def run_all_tests(): FILE: tests/config_flow/test_e2e_ac_only_persistence.py function test_ac_only_minimal_config_persistence (line 38) | async def test_ac_only_minimal_config_persistence(hass): function test_ac_only_all_features_persistence (line 206) | async def test_ac_only_all_features_persistence(hass): function test_ac_only_fan_only_persistence (line 444) | async def test_ac_only_fan_only_persistence(hass): function test_ac_only_repeated_options_flow_persistence (line 501) | async def test_ac_only_repeated_options_flow_persistence(hass): FILE: tests/config_flow/test_e2e_heat_pump_persistence.py function test_heat_pump_full_config_then_options_flow_persistence (line 50) | async def test_heat_pump_full_config_then_options_flow_persistence(hass): function test_heat_pump_all_features_full_persistence (line 239) | async def test_heat_pump_all_features_full_persistence(hass): function test_heat_pump_floor_heating_only_persistence (line 497) | async def test_heat_pump_floor_heating_only_persistence(hass): function test_heat_pump_options_flow_preserves_unmodified_fields (line 561) | async def test_heat_pump_options_flow_preserves_unmodified_fields(hass): function test_heat_pump_cooling_sensor_persistence (line 637) | async def test_heat_pump_cooling_sensor_persistence(hass): class TestHeatPumpModeSpecificTolerancesPersistence (line 707) | class TestHeatPumpModeSpecificTolerancesPersistence: method test_mode_specific_tolerances_persist_through_config_and_options_flow (line 710) | async def test_mode_specific_tolerances_persist_through_config_and_opt... class TestHeatPumpMixedTolerancesPersistence (line 867) | class TestHeatPumpMixedTolerancesPersistence: method test_mixed_tolerances_persist_legacy_plus_partial_override (line 870) | async def test_mixed_tolerances_persist_legacy_plus_partial_override(s... function test_heat_pump_repeated_options_flow_precision_persistence (line 997) | async def test_heat_pump_repeated_options_flow_precision_persistence(hass): FILE: tests/config_flow/test_e2e_heater_cooler_persistence.py function test_heater_cooler_minimal_config_persistence (line 57) | async def test_heater_cooler_minimal_config_persistence(hass): function test_heater_cooler_options_flow_preserves_unmodified_fields (line 245) | async def test_heater_cooler_options_flow_preserves_unmodified_fields(ha... function test_heater_cooler_all_features_full_persistence (line 317) | async def test_heater_cooler_all_features_full_persistence(hass): function test_heater_cooler_floor_heating_only_persistence (line 568) | async def test_heater_cooler_floor_heating_only_persistence(hass): function test_heater_cooler_fan_mode_persists_in_config_flow (line 635) | async def test_heater_cooler_fan_mode_persists_in_config_flow(hass): function test_heater_cooler_fan_mode_persists_in_options_flow (line 681) | async def test_heater_cooler_fan_mode_persists_in_options_flow(hass): function test_heater_cooler_fan_mode_default_is_false_when_not_set (line 727) | async def test_heater_cooler_fan_mode_default_is_false_when_not_set(hass): function test_heater_cooler_fan_mode_true_shown_as_default_in_options_flow (line 776) | async def test_heater_cooler_fan_mode_true_shown_as_default_in_options_f... function test_heater_cooler_fan_mode_false_when_explicitly_set_to_false (line 825) | async def test_heater_cooler_fan_mode_false_when_explicitly_set_to_false... function test_heater_cooler_fan_mode_missing_from_user_input_when_not_changed (line 858) | async def test_heater_cooler_fan_mode_missing_from_user_input_when_not_c... function test_heater_cooler_fan_on_with_ac_false_persists_in_config_flow (line 907) | async def test_heater_cooler_fan_on_with_ac_false_persists_in_config_flo... function test_heater_cooler_multiple_fan_booleans_false_persist_in_config_flow (line 942) | async def test_heater_cooler_multiple_fan_booleans_false_persist_in_conf... function test_heater_cooler_fan_on_with_ac_false_shown_in_options_flow (line 977) | async def test_heater_cooler_fan_on_with_ac_false_shown_in_options_flow(... function test_heater_cooler_fan_on_with_ac_false_not_in_config_shows_true_default (line 1025) | async def test_heater_cooler_fan_on_with_ac_false_not_in_config_shows_tr... function test_heater_cooler_fan_mode_true_persists_and_shows_in_options (line 1073) | async def test_heater_cooler_fan_mode_true_persists_and_shows_in_options... class TestHeaterCoolerModeSpecificTolerancesPersistence (line 1148) | class TestHeaterCoolerModeSpecificTolerancesPersistence: method test_mode_specific_tolerances_persist_through_config_and_options_flow (line 1151) | async def test_mode_specific_tolerances_persist_through_config_and_opt... function test_heater_cooler_repeated_options_flow_precision_persistence (line 1302) | async def test_heater_cooler_repeated_options_flow_precision_persistence... FILE: tests/config_flow/test_e2e_simple_heater_persistence.py function test_simple_heater_minimal_config_persistence (line 39) | async def test_simple_heater_minimal_config_persistence(hass): function test_simple_heater_all_features_persistence (line 233) | async def test_simple_heater_all_features_persistence(hass): function test_simple_heater_floor_heating_only_persistence (line 421) | async def test_simple_heater_floor_heating_only_persistence(hass): function test_simple_heater_openings_scope_and_timeout_saved (line 486) | async def test_simple_heater_openings_scope_and_timeout_saved(hass): function test_simple_heater_openings_scope_all_is_cleaned (line 553) | async def test_simple_heater_openings_scope_all_is_cleaned(hass): function test_simple_heater_openings_multiple_timeout_values (line 610) | async def test_simple_heater_openings_multiple_timeout_values(hass): class TestSimpleHeaterLegacyTolerancesPersistence (line 676) | class TestSimpleHeaterLegacyTolerancesPersistence: method test_legacy_tolerances_persist_without_mode_specific (line 679) | async def test_legacy_tolerances_persist_without_mode_specific(self, h... function test_simple_heater_repeated_options_flow_precision_persistence (line 768) | async def test_simple_heater_repeated_options_flow_precision_persistence... FILE: tests/config_flow/test_heat_pump_config_flow.py function mock_hass (line 29) | def mock_hass(): class TestHeatPumpConfigFlow (line 38) | class TestHeatPumpConfigFlow: method test_config_flow_completes_without_error (line 41) | async def test_config_flow_completes_without_error(self, mock_hass): method test_valid_configuration_created (line 75) | async def test_valid_configuration_created(self, mock_hass): method test_all_required_fields_present (line 118) | async def test_all_required_fields_present(self, mock_hass): method test_advanced_settings_flattened_correctly (line 145) | async def test_advanced_settings_flattened_correctly(self, mock_hass): method test_validation_same_heater_sensor_entity (line 175) | async def test_validation_same_heater_sensor_entity(self, mock_hass): method test_heat_pump_cooling_entity_id_accepted (line 196) | async def test_heat_pump_cooling_entity_id_accepted(self, mock_hass): method test_heat_pump_cooling_optional (line 227) | async def test_heat_pump_cooling_optional(self, mock_hass): method test_name_field_collected_in_config_flow (line 254) | async def test_name_field_collected_in_config_flow(self, mock_hass): class TestHeatPumpFieldValidation (line 277) | class TestHeatPumpFieldValidation: method test_numeric_fields_have_correct_defaults (line 280) | async def test_numeric_fields_have_correct_defaults(self, mock_hass): method test_field_types_match_expected_types (line 299) | async def test_field_types_match_expected_types(self, mock_hass): FILE: tests/config_flow/test_heat_pump_features_integration.py function mock_hass (line 51) | def mock_hass(): class TestHeatPumpNoFeatures (line 60) | class TestHeatPumpNoFeatures: method test_config_flow_no_features (line 63) | async def test_config_flow_no_features(self, mock_hass): class TestHeatPumpFloorHeatingOnly (line 122) | class TestHeatPumpFloorHeatingOnly: method test_config_flow_floor_heating_only (line 125) | async def test_config_flow_floor_heating_only(self, mock_hass): class TestHeatPumpFanOnly (line 181) | class TestHeatPumpFanOnly: method test_config_flow_fan_only (line 184) | async def test_config_flow_fan_only(self, mock_hass): class TestHeatPumpAllFeatures (line 236) | class TestHeatPumpAllFeatures: method test_config_flow_all_features (line 239) | async def test_config_flow_all_features(self, mock_hass): class TestHeatPumpFeatureOrdering (line 369) | class TestHeatPumpFeatureOrdering: method test_complete_feature_ordering (line 372) | async def test_complete_feature_ordering(self, mock_hass): class TestHeatPumpAvailableFeatures (line 473) | class TestHeatPumpAvailableFeatures: method test_all_features_available (line 476) | async def test_all_features_available(self, mock_hass): class TestHeatPumpCoolingSensorHandling (line 506) | class TestHeatPumpCoolingSensorHandling: method test_heat_pump_cooling_sensor_optional (line 509) | async def test_heat_pump_cooling_sensor_optional(self, mock_hass): method test_heat_pump_cooling_sensor_saved_when_provided (line 534) | async def test_heat_pump_cooling_sensor_saved_when_provided(self, mock... class TestHeatPumpPartialOverride (line 562) | class TestHeatPumpPartialOverride: method test_tolerance_partial_override_heat_only (line 565) | async def test_tolerance_partial_override_heat_only(self, mock_hass): method test_tolerance_partial_override_cool_only (line 631) | async def test_tolerance_partial_override_cool_only(self, mock_hass): FILE: tests/config_flow/test_heat_pump_options_flow.py function mock_hass (line 27) | def mock_hass(): class TestHeatPumpOptionsFlow (line 34) | class TestHeatPumpOptionsFlow: method test_options_flow_omits_name_field (line 37) | async def test_options_flow_omits_name_field(self, mock_hass): method test_options_flow_prefills_all_fields (line 71) | async def test_options_flow_prefills_all_fields(self, mock_hass): method test_options_flow_preserves_unmodified_fields (line 125) | async def test_options_flow_preserves_unmodified_fields(self, mock_hass): method test_options_flow_system_type_display_non_editable (line 168) | async def test_options_flow_system_type_display_non_editable(self, moc... method test_options_flow_completes_without_error (line 207) | async def test_options_flow_completes_without_error(self, mock_hass): method test_options_flow_updated_config_matches_data_model (line 236) | async def test_options_flow_updated_config_matches_data_model(self, mo... FILE: tests/config_flow/test_heater_cooler_features_integration.py function mock_hass (line 51) | def mock_hass(): class TestHeaterCoolerNoFeatures (line 60) | class TestHeaterCoolerNoFeatures: method test_config_flow_no_features (line 63) | async def test_config_flow_no_features(self, mock_hass): class TestHeaterCoolerFloorHeatingOnly (line 119) | class TestHeaterCoolerFloorHeatingOnly: method test_config_flow_floor_heating_only (line 122) | async def test_config_flow_floor_heating_only(self, mock_hass): class TestHeaterCoolerFanOnly (line 180) | class TestHeaterCoolerFanOnly: method test_config_flow_fan_only (line 183) | async def test_config_flow_fan_only(self, mock_hass): class TestHeaterCoolerHumidityOnly (line 236) | class TestHeaterCoolerHumidityOnly: method test_config_flow_humidity_only (line 239) | async def test_config_flow_humidity_only(self, mock_hass): class TestHeaterCoolerAllFeatures (line 297) | class TestHeaterCoolerAllFeatures: method test_config_flow_all_features (line 300) | async def test_config_flow_all_features(self, mock_hass): class TestHeaterCoolerCommonCombinations (line 435) | class TestHeaterCoolerCommonCombinations: method test_floor_and_openings (line 438) | async def test_floor_and_openings(self, mock_hass): method test_fan_and_humidity (line 486) | async def test_fan_and_humidity(self, mock_hass): class TestHeaterCoolerFeatureOrdering (line 534) | class TestHeaterCoolerFeatureOrdering: method test_complete_feature_ordering (line 537) | async def test_complete_feature_ordering(self, mock_hass): class TestHeaterCoolerAvailableFeatures (line 637) | class TestHeaterCoolerAvailableFeatures: method test_all_features_available (line 640) | async def test_all_features_available(self, mock_hass): class TestHeaterCoolerPartialOverride (line 670) | class TestHeaterCoolerPartialOverride: method test_tolerance_partial_override_heat_only (line 673) | async def test_tolerance_partial_override_heat_only(self, mock_hass): method test_tolerance_partial_override_cool_only (line 739) | async def test_tolerance_partial_override_cool_only(self, mock_hass): method test_tolerance_partial_override_mixed (line 805) | async def test_tolerance_partial_override_mixed(self, mock_hass): FILE: tests/config_flow/test_heater_cooler_flow.py function mock_hass (line 30) | def mock_hass(): class TestHeaterCoolerConfigFlow (line 39) | class TestHeaterCoolerConfigFlow: method test_config_flow_completes_without_error (line 42) | async def test_config_flow_completes_without_error(self, mock_hass): method test_valid_configuration_created (line 77) | async def test_valid_configuration_created(self, mock_hass): method test_all_required_fields_present (line 120) | async def test_all_required_fields_present(self, mock_hass): method test_advanced_settings_flattened_correctly (line 148) | async def test_advanced_settings_flattened_correctly(self, mock_hass): method test_validation_same_heater_cooler_entity (line 179) | async def test_validation_same_heater_cooler_entity(self, mock_hass): method test_validation_same_heater_sensor_entity (line 202) | async def test_validation_same_heater_sensor_entity(self, mock_hass): class TestHeaterCoolerOptionsFlow (line 225) | class TestHeaterCoolerOptionsFlow: method test_options_flow_omits_name_field (line 228) | async def test_options_flow_omits_name_field(self, mock_hass): method test_options_flow_prefills_all_fields (line 262) | async def test_options_flow_prefills_all_fields(self, mock_hass): method test_options_flow_preserves_unmodified_fields (line 317) | async def test_options_flow_preserves_unmodified_fields(self, mock_hass): method test_options_flow_system_type_display_non_editable (line 357) | async def test_options_flow_system_type_display_non_editable(self, moc... method test_options_flow_completes_without_error (line 396) | async def test_options_flow_completes_without_error(self, mock_hass): method test_options_flow_updated_config_matches_data_model (line 425) | async def test_options_flow_updated_config_matches_data_model(self, mo... FILE: tests/config_flow/test_integration.py function hass_mock (line 49) | def hass_mock(): function config_entry_with_openings (line 58) | def config_entry_with_openings(): function test_options_flow_openings_schema_creation (line 81) | async def test_options_flow_openings_schema_creation( function test_options_flow_openings_data_processing (line 111) | async def test_options_flow_openings_data_processing( function test_options_flow_openings_removal (line 179) | async def test_options_flow_openings_removal(hass_mock, config_entry_wit... function test_options_flow_with_real_config_entry (line 216) | async def test_options_flow_with_real_config_entry(hass): function test_config_flow_does_not_save_transient_flags (line 296) | async def test_config_flow_does_not_save_transient_flags(hass): function run_tests (line 349) | async def run_tests(): FILE: tests/config_flow/test_options_entry_helpers.py function test_get_entry_fallback_and_instance_attr (line 8) | def test_get_entry_fallback_and_instance_attr(): FILE: tests/config_flow/test_options_flow.py function mock_hass (line 56) | def mock_hass(): function ac_only_config_entry (line 67) | def ac_only_config_entry(): function dual_system_config_entry (line 84) | def dual_system_config_entry(): function heat_pump_config_entry (line 102) | def heat_pump_config_entry(): function dual_stage_config_entry (line 119) | def dual_stage_config_entry(): function simple_heater_config_entry (line 136) | def simple_heater_config_entry(): function config_entry_with_presets (line 151) | def config_entry_with_presets(): function test_ac_only_options_flow_progression (line 175) | async def test_ac_only_options_flow_progression(mock_hass, ac_only_confi... function test_ac_only_features_step (line 208) | async def test_ac_only_features_step(mock_hass, ac_only_config_entry): function test_options_flow_step_progression (line 239) | async def test_options_flow_step_progression(mock_hass, ac_only_config_e... function test_system_type_preservation (line 291) | async def test_system_type_preservation(mock_hass, dual_system_config_en... function test_comprehensive_options_flow_multiple_systems (line 319) | async def test_comprehensive_options_flow_multiple_systems( function test_openings_configuration_in_options (line 388) | async def test_openings_configuration_in_options(mock_hass, ac_only_conf... function test_openings_two_step_options_flow (line 438) | async def test_openings_two_step_options_flow(mock_hass, ac_only_config_... function test_simple_heater_select_only_openings_shows_only_openings (line 465) | async def test_simple_heater_select_only_openings_shows_only_openings( function test_system_features_fields_and_floor_redirect (line 519) | async def test_system_features_fields_and_floor_redirect( function test_heat_pump_options_flow_parity (line 558) | async def test_heat_pump_options_flow_parity(mock_hass, heat_pump_config... function test_dual_stage_options_flow_parity (line 581) | async def test_dual_stage_options_flow_parity(mock_hass, dual_stage_conf... function test_floor_options_preselects_configured_sensor (line 604) | async def test_floor_options_preselects_configured_sensor( function test_heater_cooler_fan_settings_prefilled_in_options_flow (line 639) | async def test_heater_cooler_fan_settings_prefilled_in_options_flow(mock... function test_simple_heater_fan_settings_prefilled_in_options_flow (line 723) | async def test_simple_heater_fan_settings_prefilled_in_options_flow(mock... function test_ac_only_fan_settings_prefilled_in_options_flow (line 764) | async def test_ac_only_fan_settings_prefilled_in_options_flow(mock_hass): function test_heater_cooler_humidity_settings_prefilled_in_options_flow (line 809) | async def test_heater_cooler_humidity_settings_prefilled_in_options_flow... function test_simple_heater_humidity_settings_prefilled_in_options_flow (line 849) | async def test_simple_heater_humidity_settings_prefilled_in_options_flow... function test_fan_not_configured_skips_fan_step (line 893) | async def test_fan_not_configured_skips_fan_step(mock_hass): function test_preset_toggle_checked_when_presets_configured (line 932) | async def test_preset_toggle_checked_when_presets_configured( function test_deselected_presets_are_cleaned_up (line 964) | async def test_deselected_presets_are_cleaned_up(mock_hass): function test_all_presets_deselected_cleans_all_preset_data (line 1021) | async def test_all_presets_deselected_cleans_all_preset_data(mock_hass): function test_ac_only_options_flow_with_fan_and_humidity_enabled (line 1074) | async def test_ac_only_options_flow_with_fan_and_humidity_enabled(mock_h... function test_keep_alive_and_min_cycle_always_available_in_options (line 1179) | async def test_keep_alive_and_min_cycle_always_available_in_options(hass): function test_options_flow_persists_auto_outside_delta_boost (line 1236) | async def test_options_flow_persists_auto_outside_delta_boost(mock_hass): function test_options_flow_persists_use_apparent_temp (line 1290) | async def test_options_flow_persists_use_apparent_temp(mock_hass): FILE: tests/config_flow/test_preset_templates_config_flow.py class TestPresetTemplatesConfigFlow (line 12) | class TestPresetTemplatesConfigFlow: method test_config_flow_accepts_template_input (line 16) | async def test_config_flow_accepts_template_input(self, hass: HomeAssi... method test_config_flow_static_value_backward_compatible (line 31) | async def test_config_flow_static_value_backward_compatible( method test_config_flow_template_syntax_validation (line 50) | async def test_config_flow_template_syntax_validation(self, hass: Home... method test_config_flow_valid_template_syntax_accepted (line 67) | async def test_config_flow_valid_template_syntax_accepted( method test_config_flow_none_value_accepted (line 90) | async def test_config_flow_none_value_accepted(self, hass: HomeAssista... method test_config_flow_invalid_type_rejected (line 103) | async def test_config_flow_invalid_type_rejected(self, hass: HomeAssis... FILE: tests/config_flow/test_reconfigure_flow.py function mock_config_entry (line 22) | def mock_config_entry(): function test_reconfigure_entry_point (line 35) | async def test_reconfigure_entry_point(mock_config_entry): function test_reconfigure_preserves_name (line 61) | async def test_reconfigure_preserves_name(mock_config_entry): function test_reconfigure_system_type_change (line 81) | async def test_reconfigure_system_type_change(mock_config_entry): function test_reconfigure_keeps_system_type (line 107) | async def test_reconfigure_keeps_system_type(mock_config_entry): function test_reconfigure_updates_entity (line 133) | async def test_reconfigure_updates_entity(mock_config_entry): function test_reconfigure_uses_update_reload_and_abort (line 166) | async def test_reconfigure_uses_update_reload_and_abort(): function test_config_flow_uses_create_entry (line 205) | async def test_config_flow_uses_create_entry(): function test_reconfigure_all_system_types (line 234) | async def test_reconfigure_all_system_types(): function test_reconfigure_uses_data_parameter_not_data_updates (line 278) | async def test_reconfigure_uses_data_parameter_not_data_updates(): function run_all_tests (line 356) | async def run_all_tests(): FILE: tests/config_flow/test_reconfigure_flow_e2e_ac_only.py function ac_only_entry (line 26) | def ac_only_entry(): function test_reconfigure_ac_only_minimal_flow (line 39) | async def test_reconfigure_ac_only_minimal_flow(ac_only_entry): function test_reconfigure_ac_only_with_fan (line 100) | async def test_reconfigure_ac_only_with_fan(ac_only_entry): function test_reconfigure_ac_only_with_humidity (line 163) | async def test_reconfigure_ac_only_with_humidity(ac_only_entry): function test_reconfigure_ac_only_with_fan_and_humidity (line 226) | async def test_reconfigure_ac_only_with_fan_and_humidity(ac_only_entry): function test_reconfigure_ac_only_all_features (line 303) | async def test_reconfigure_ac_only_all_features(ac_only_entry): function test_reconfigure_ac_only_preserves_data (line 424) | async def test_reconfigure_ac_only_preserves_data(ac_only_entry): FILE: tests/config_flow/test_reconfigure_flow_e2e_heat_pump.py function heat_pump_entry (line 30) | def heat_pump_entry(): function test_reconfigure_heat_pump_minimal_flow (line 44) | async def test_reconfigure_heat_pump_minimal_flow(heat_pump_entry): function test_reconfigure_heat_pump_with_floor_heating (line 102) | async def test_reconfigure_heat_pump_with_floor_heating(heat_pump_entry): function test_reconfigure_heat_pump_with_fan (line 168) | async def test_reconfigure_heat_pump_with_fan(heat_pump_entry): function test_reconfigure_heat_pump_with_humidity (line 221) | async def test_reconfigure_heat_pump_with_humidity(heat_pump_entry): function test_reconfigure_heat_pump_all_features (line 274) | async def test_reconfigure_heat_pump_all_features(heat_pump_entry): function test_reconfigure_heat_pump_preserves_data (line 412) | async def test_reconfigure_heat_pump_preserves_data(heat_pump_entry): FILE: tests/config_flow/test_reconfigure_flow_e2e_heater_cooler.py function heater_cooler_entry (line 30) | def heater_cooler_entry(): function test_reconfigure_heater_cooler_minimal_flow (line 44) | async def test_reconfigure_heater_cooler_minimal_flow(heater_cooler_entry): function test_reconfigure_heater_cooler_with_floor_heating (line 107) | async def test_reconfigure_heater_cooler_with_floor_heating(heater_coole... function test_reconfigure_heater_cooler_with_fan (line 173) | async def test_reconfigure_heater_cooler_with_fan(heater_cooler_entry): function test_reconfigure_heater_cooler_with_humidity (line 226) | async def test_reconfigure_heater_cooler_with_humidity(heater_cooler_ent... function test_reconfigure_heater_cooler_all_features (line 279) | async def test_reconfigure_heater_cooler_all_features(heater_cooler_entry): function test_reconfigure_heater_cooler_preserves_data (line 417) | async def test_reconfigure_heater_cooler_preserves_data(heater_cooler_en... FILE: tests/config_flow/test_reconfigure_flow_e2e_simple_heater.py function simple_heater_entry (line 27) | def simple_heater_entry(): function test_reconfigure_simple_heater_minimal_flow (line 40) | async def test_reconfigure_simple_heater_minimal_flow(simple_heater_entry): function test_reconfigure_simple_heater_with_floor_heating (line 95) | async def test_reconfigure_simple_heater_with_floor_heating(simple_heate... function test_reconfigure_simple_heater_with_openings (line 158) | async def test_reconfigure_simple_heater_with_openings(simple_heater_ent... function test_reconfigure_simple_heater_with_presets (line 219) | async def test_reconfigure_simple_heater_with_presets(simple_heater_entry): function test_reconfigure_simple_heater_all_features (line 280) | async def test_reconfigure_simple_heater_all_features(simple_heater_entry): function test_reconfigure_simple_heater_preserves_data (line 387) | async def test_reconfigure_simple_heater_preserves_data(simple_heater_en... FILE: tests/config_flow/test_reconfigure_system_type_change.py function heat_pump_entry_with_features (line 33) | def heat_pump_entry_with_features(): function heater_cooler_entry_with_features (line 52) | def heater_cooler_entry_with_features(): function test_system_type_unchanged_preserves_config (line 68) | async def test_system_type_unchanged_preserves_config(heat_pump_entry_wi... function test_system_type_change_clears_config (line 112) | async def test_system_type_change_clears_config(heat_pump_entry_with_fea... function test_heat_pump_to_heater_cooler_clears_heat_pump_cooling (line 149) | async def test_heat_pump_to_heater_cooler_clears_heat_pump_cooling( function test_heater_cooler_to_ac_only_clears_heater (line 177) | async def test_heater_cooler_to_ac_only_clears_heater( function test_system_type_change_allows_fresh_configuration (line 209) | async def test_system_type_change_allows_fresh_configuration( function test_system_type_change_flag_cleared_before_storage (line 252) | async def test_system_type_change_flag_cleared_before_storage( function test_multiple_system_type_changes (line 302) | async def test_multiple_system_type_changes(heat_pump_entry_with_features): function test_features_step_shows_configured_features (line 353) | async def test_features_step_shows_configured_features(heat_pump_entry_w... function test_uncheck_floor_heating_clears_config (line 391) | async def test_uncheck_floor_heating_clears_config(heat_pump_entry_with_... function test_uncheck_fan_clears_config (line 436) | async def test_uncheck_fan_clears_config(heat_pump_entry_with_features): function test_uncheck_all_features_clears_all_config (line 478) | async def test_uncheck_all_features_clears_all_config(heat_pump_entry_wi... FILE: tests/config_flow/test_simple_heater_advanced.py function config_flow (line 23) | def config_flow(hass: HomeAssistant): function test_simple_heater_advanced_settings_config_flow (line 31) | async def test_simple_heater_advanced_settings_config_flow( function test_simple_heater_default_advanced_settings (line 107) | async def test_simple_heater_default_advanced_settings( FILE: tests/config_flow/test_simple_heater_features_integration.py function mock_hass (line 44) | def mock_hass(): class TestSimpleHeaterNoFeatures (line 53) | class TestSimpleHeaterNoFeatures: method test_config_flow_no_features (line 56) | async def test_config_flow_no_features(self, mock_hass): class TestSimpleHeaterFloorHeatingOnly (line 115) | class TestSimpleHeaterFloorHeatingOnly: method test_config_flow_floor_heating_only (line 118) | async def test_config_flow_floor_heating_only(self, mock_hass): method test_floor_heating_schema_contains_required_fields (line 172) | async def test_floor_heating_schema_contains_required_fields(self, moc... class TestSimpleHeaterOpeningsOnly (line 197) | class TestSimpleHeaterOpeningsOnly: method test_config_flow_openings_only (line 200) | async def test_config_flow_openings_only(self, mock_hass): class TestSimpleHeaterPresetsOnly (line 261) | class TestSimpleHeaterPresetsOnly: method test_config_flow_presets_only (line 264) | async def test_config_flow_presets_only(self, mock_hass): class TestSimpleHeaterAllFeatures (line 323) | class TestSimpleHeaterAllFeatures: method test_config_flow_all_features (line 326) | async def test_config_flow_all_features(self, mock_hass): class TestSimpleHeaterBlockedFeatures (line 427) | class TestSimpleHeaterBlockedFeatures: method test_fan_feature_not_in_schema (line 430) | async def test_fan_feature_not_in_schema(self, mock_hass): method test_humidity_feature_not_in_schema (line 449) | async def test_humidity_feature_not_in_schema(self, mock_hass): method test_available_features_only (line 468) | async def test_available_features_only(self, mock_hass): class TestSimpleHeaterFeatureOrdering (line 496) | class TestSimpleHeaterFeatureOrdering: method test_floor_heating_before_openings (line 499) | async def test_floor_heating_before_openings(self, mock_hass): method test_openings_before_presets (line 543) | async def test_openings_before_presets(self, mock_hass): class TestSimpleHeaterPartialOverride (line 590) | class TestSimpleHeaterPartialOverride: method test_tolerance_partial_override_heat_only (line 593) | async def test_tolerance_partial_override_heat_only(self, mock_hass): FILE: tests/config_flow/test_step_ordering.py class TestConfigStepOrdering (line 20) | class TestConfigStepOrdering: method test_ac_only_system_step_ordering (line 24) | async def test_ac_only_system_step_ordering(self): method test_heat_pump_system_step_ordering (line 93) | async def test_heat_pump_system_step_ordering(self): method test_openings_scope_has_all_feature_data (line 204) | async def test_openings_scope_has_all_feature_data(self): method test_simple_heater_openings_after_features (line 257) | async def test_simple_heater_openings_after_features(self): FILE: tests/config_flow/test_translations.py function test_config_flow_translations (line 10) | def test_config_flow_translations(): FILE: tests/conftest.py function auto_enable_custom_integrations (line 24) | def auto_enable_custom_integrations(enable_custom_integrations): function setup_template_test_entities (line 29) | async def setup_template_test_entities(hass: HomeAssistant): FILE: tests/contracts/test_feature_availability_contracts.py function mock_hass (line 43) | def mock_hass(): class TestFeatureAvailabilityContracts (line 52) | class TestFeatureAvailabilityContracts: method test_available_features_per_system_type (line 93) | async def test_available_features_per_system_type( method test_blocked_features_per_system_type (line 139) | async def test_blocked_features_per_system_type( method test_openings_available_for_all_system_types (line 181) | async def test_openings_available_for_all_system_types( method test_presets_available_for_all_system_types (line 218) | async def test_presets_available_for_all_system_types(self, mock_hass,... method test_floor_heating_availability_by_system_type (line 253) | async def test_floor_heating_availability_by_system_type( method test_fan_availability_by_system_type (line 296) | async def test_fan_availability_by_system_type( method test_humidity_availability_by_system_type (line 338) | async def test_humidity_availability_by_system_type( FILE: tests/contracts/test_feature_ordering_contracts.py function mock_hass (line 63) | def mock_hass(): class TestFeatureOrderingContracts (line 72) | class TestFeatureOrderingContracts: method test_features_selection_comes_after_core_settings (line 75) | async def test_features_selection_comes_after_core_settings(self, mock... method test_openings_comes_before_presets (line 114) | async def test_openings_comes_before_presets(self, mock_hass): method test_presets_is_final_configuration_step (line 136) | async def test_presets_is_final_configuration_step(self, mock_hass): method test_complete_step_ordering_per_system_type (line 186) | async def test_complete_step_ordering_per_system_type( method _get_core_input_for_system_type (line 242) | def _get_core_input_for_system_type(self, system_type): method test_feature_config_steps_come_after_features_selection (line 285) | async def test_feature_config_steps_come_after_features_selection(self... method test_no_feature_config_steps_when_features_disabled (line 306) | async def test_no_feature_config_steps_when_features_disabled(self, mo... FILE: tests/contracts/test_feature_schema_contracts.py function mock_hass (line 43) | def mock_hass(): class TestFeatureSchemaContracts (line 52) | class TestFeatureSchemaContracts: method test_floor_heating_schema_keys (line 55) | async def test_floor_heating_schema_keys(self, mock_hass): method test_fan_schema_keys (line 80) | async def test_fan_schema_keys(self, mock_hass): method test_humidity_schema_keys (line 110) | async def test_humidity_schema_keys(self, mock_hass): method test_openings_schema_has_list_configuration (line 160) | async def test_openings_schema_has_list_configuration(self, mock_hass): method test_presets_schema_supports_dynamic_presets (line 194) | async def test_presets_schema_supports_dynamic_presets(self, mock_hass): method test_floor_heating_schema_has_numeric_defaults (line 222) | async def test_floor_heating_schema_has_numeric_defaults(self, mock_ha... method test_fan_schema_has_boolean_selectors (line 249) | async def test_fan_schema_has_boolean_selectors(self, mock_hass): method test_humidity_schema_has_numeric_fields (line 277) | async def test_humidity_schema_has_numeric_fields(self, mock_hass): method test_openings_scope_configuration_exists (line 309) | async def test_openings_scope_configuration_exists(self, mock_hass): method test_presets_temperature_fields_adapt_to_heat_cool_mode (line 341) | async def test_presets_temperature_fields_adapt_to_heat_cool_mode(self... class TestFeatureSchemaDefaults (line 365) | class TestFeatureSchemaDefaults: method test_floor_heating_defaults_are_reasonable (line 368) | async def test_floor_heating_defaults_are_reasonable(self, mock_hass): method test_fan_hot_tolerance_has_default (line 405) | async def test_fan_hot_tolerance_has_default(self, mock_hass): method test_humidity_target_has_default (line 426) | async def test_humidity_target_has_default(self, mock_hass): FILE: tests/edge_cases/test_issue_10_tolerance_precision.py function _setup_sensor (line 38) | def _setup_sensor(hass, sensor, temp): function async_set_temperature (line 43) | async def async_set_temperature( function setup_comp_issue_10 (line 70) | async def setup_comp_issue_10(hass): function test_issue_10_tolerance_precision_heat_cool_mode (line 76) | async def test_issue_10_tolerance_precision_heat_cool_mode(hass, setup_c... function test_issue_10_cooling_side (line 219) | async def test_issue_10_cooling_side(hass, setup_comp_issue_10): FILE: tests/edge_cases/test_issue_461_redundant_commands.py function test_issue_461_ac_dual_system_sensor_updates (line 26) | async def test_issue_461_ac_dual_system_sensor_updates(hass: HomeAssista... function test_issue_461_ac_cooling_with_default_keepalive (line 167) | async def test_issue_461_ac_cooling_with_default_keepalive(hass: HomeAss... function test_issue_461_solution_disable_keepalive (line 280) | async def test_issue_461_solution_disable_keepalive(hass: HomeAssistant)... FILE: tests/edge_cases/test_issue_467_idle_continuous_off.py function test_idle_mode_no_continuous_turn_off (line 37) | async def test_idle_mode_no_continuous_turn_off(hass: HomeAssistant) -> ... function test_heat_to_idle_transition_single_turn_off (line 123) | async def test_heat_to_idle_transition_single_turn_off(hass: HomeAssista... function test_idle_keep_alive_respects_device_state (line 175) | async def test_idle_keep_alive_respects_device_state(hass: HomeAssistant... function test_idle_device_unexpectedly_on_keep_alive_turns_off (line 232) | async def test_idle_device_unexpectedly_on_keep_alive_turns_off( function test_cooler_idle_mode_no_continuous_turn_off (line 307) | async def test_cooler_idle_mode_no_continuous_turn_off(hass: HomeAssista... function test_heat_pump_idle_mode_no_continuous_turn_off (line 380) | async def test_heat_pump_idle_mode_no_continuous_turn_off(hass: HomeAssi... FILE: tests/edge_cases/test_issue_468_precision_rounding.py class TestIssue468PrecisionFromConfigEntry (line 33) | class TestIssue468PrecisionFromConfigEntry: method test_precision_string_from_config_entry_is_converted_to_float (line 43) | async def test_precision_string_from_config_entry_is_converted_to_float( class TestCorrectFloatPrecisionBehavior (line 117) | class TestCorrectFloatPrecisionBehavior: method test_current_temperature_with_float_precision (line 120) | async def test_current_temperature_with_float_precision(self, hass: Ho... method test_target_temperature_with_float_precision (line 147) | async def test_target_temperature_with_float_precision(self, hass: Hom... method test_set_non_whole_temperature_with_float_precision (line 174) | async def test_set_non_whole_temperature_with_float_precision( class TestIssue468AllEdgeCases (line 210) | class TestIssue468AllEdgeCases: method test_edge_case_1_sensor_temperature_not_rounded (line 220) | async def test_edge_case_1_sensor_temperature_not_rounded( method test_edge_case_2_preset_target_temp_matches_config (line 264) | async def test_edge_case_2_preset_target_temp_matches_config( method test_edge_case_2b_auto_preset_selection_with_string_preset_temps (line 308) | async def test_edge_case_2b_auto_preset_selection_with_string_preset_t... method test_edge_case_3_set_temperature_not_rounded (line 392) | async def test_edge_case_3_set_temperature_not_rounded(self, hass: Hom... method test_edge_case_4_temp_step_increments_correctly (line 441) | async def test_edge_case_4_temp_step_increments_correctly( class TestTemplatePresetsYAMLWithAutoSelection (line 516) | class TestTemplatePresetsYAMLWithAutoSelection: method test_yaml_template_preset_auto_selection_single_temp (line 523) | async def test_yaml_template_preset_auto_selection_single_temp( method test_yaml_template_preset_dynamic_value_change (line 592) | async def test_yaml_template_preset_dynamic_value_change( method test_yaml_old_style_template_preset (line 653) | async def test_yaml_old_style_template_preset( FILE: tests/edge_cases/test_issue_469_off_state_control_bypass.py function setup_dual_thermostat (line 38) | async def setup_dual_thermostat(hass: HomeAssistant, config_overrides=No... function test_off_mode_temperature_change_does_not_turn_on (line 84) | async def test_off_mode_temperature_change_does_not_turn_on( function test_off_mode_temperature_change_hot_does_not_turn_on (line 132) | async def test_off_mode_temperature_change_hot_does_not_turn_on( function test_off_mode_sensor_update_does_not_turn_on (line 167) | async def test_off_mode_sensor_update_does_not_turn_on( function test_off_mode_stays_off_with_time_trigger (line 214) | async def test_off_mode_stays_off_with_time_trigger( function test_off_mode_multiple_temperature_changes (line 256) | async def test_off_mode_multiple_temperature_changes( FILE: tests/edge_cases/test_issue_480_heater_cooler_both_fire.py function setup_sensor (line 33) | def setup_sensor(hass: HomeAssistant, temp: float) -> None: function setup_switch_dual_heater_cooler (line 38) | def setup_switch_dual_heater_cooler( function setup_comp_issue_480_config1 (line 62) | async def setup_comp_issue_480_config1(hass: HomeAssistant) -> None: function setup_comp_issue_480_config2 (line 104) | async def setup_comp_issue_480_config2(hass: HomeAssistant) -> None: class TestIssue480HeaterCoolerBothFire (line 144) | class TestIssue480HeaterCoolerBothFire: method test_initial_heat_cool_mode_with_temp_sensor_available (line 148) | async def test_initial_heat_cool_mode_with_temp_sensor_available( method test_heat_cool_mode_temp_within_range_neither_fires (line 220) | async def test_heat_cool_mode_temp_within_range_neither_fires( method test_heat_cool_mode_temp_too_cold_only_heater_fires (line 270) | async def test_heat_cool_mode_temp_too_cold_only_heater_fires( method test_heat_cool_mode_temp_too_hot_only_cooler_fires (line 317) | async def test_heat_cool_mode_temp_too_hot_only_cooler_fires( method test_switch_from_off_to_heat_cool_temp_in_range (line 363) | async def test_switch_from_off_to_heat_cool_temp_in_range( method test_switch_from_off_to_heat_cool_temp_too_cold (line 416) | async def test_switch_from_off_to_heat_cool_temp_too_cold( method test_switch_from_off_to_heat_cool_temp_too_hot (line 450) | async def test_switch_from_off_to_heat_cool_temp_too_hot( method test_restored_state_heat_cool_mode (line 484) | async def test_restored_state_heat_cool_mode( method test_heat_cool_mode_prevents_duplicate_toggle_calls (line 566) | async def test_heat_cool_mode_prevents_duplicate_toggle_calls( FILE: tests/edge_cases/test_issue_484_keep_alive_timedelta.py function test_keep_alive_float_converted_to_timedelta (line 34) | async def test_keep_alive_float_converted_to_timedelta(hass: HomeAssista... function test_min_cycle_duration_int_converted_to_timedelta (line 77) | async def test_min_cycle_duration_int_converted_to_timedelta(hass: HomeA... function test_stale_duration_float_converted_to_timedelta (line 113) | async def test_stale_duration_float_converted_to_timedelta(hass: HomeAss... function test_timedelta_values_preserved (line 149) | async def test_timedelta_values_preserved(hass: HomeAssistant): function test_mixed_numeric_and_time_normalization (line 186) | async def test_mixed_numeric_and_time_normalization(hass: HomeAssistant): function test_keep_alive_dict_deserialized_to_timedelta (line 227) | async def test_keep_alive_dict_deserialized_to_timedelta(hass: HomeAssis... function test_min_cycle_duration_dict_to_timedelta (line 276) | async def test_min_cycle_duration_dict_to_timedelta(hass: HomeAssistant): function test_stale_duration_dict_to_timedelta (line 307) | async def test_stale_duration_dict_to_timedelta(hass: HomeAssistant): function test_options_flow_with_dict_keep_alive (line 338) | async def test_options_flow_with_dict_keep_alive(hass: HomeAssistant): FILE: tests/edge_cases/test_issue_499_multiple_thermostats_unavailable.py function master_bedroom_config (line 29) | def master_bedroom_config(): function computer_room_config (line 53) | def computer_room_config(): function first_floor_config (line 85) | def first_floor_config(): function setup_entities_for_config (line 117) | async def setup_entities_for_config(hass: HomeAssistant, config: dict): function setup_thermostat_with_config (line 146) | async def setup_thermostat_with_config( function test_master_bedroom_thermostat_availability_on_restart (line 170) | async def test_master_bedroom_thermostat_availability_on_restart( function test_computer_room_thermostat_availability_on_restart (line 266) | async def test_computer_room_thermostat_availability_on_restart( function test_first_floor_thermostat_availability_on_restart (line 356) | async def test_first_floor_thermostat_availability_on_restart( function test_all_thermostats_together_with_restart (line 445) | async def test_all_thermostats_together_with_restart( FILE: tests/edge_cases/test_issue_499_yaml_entity_unavailable_on_startup.py function test_yaml_heater_cooler_unavailable_entities_on_startup (line 28) | async def test_yaml_heater_cooler_unavailable_entities_on_startup(hass: ... function test_yaml_secondary_heater_cooler_unavailable_on_startup (line 146) | async def test_yaml_secondary_heater_cooler_unavailable_on_startup(hass:... function test_yaml_multiple_thermostats_unavailable_entities (line 239) | async def test_yaml_multiple_thermostats_unavailable_entities(hass: Home... function test_yaml_heater_cooler_none_temperature_on_startup (line 352) | async def test_yaml_heater_cooler_none_temperature_on_startup(hass: Home... FILE: tests/edge_cases/test_issue_506_behavior_tolerance_ignored.py function test_heating_behavior_with_tolerance (line 40) | async def test_heating_behavior_with_tolerance(hass: HomeAssistant): function test_cooling_behavior_with_tolerance (line 165) | async def test_cooling_behavior_with_tolerance(hass: HomeAssistant): function test_heat_cool_mode_range_with_tolerance (line 265) | async def test_heat_cool_mode_range_with_tolerance(hass: HomeAssistant): FILE: tests/edge_cases/test_issue_506_tolerance_in_range_mode.py function test_heater_uses_hot_tolerance_in_range_mode (line 38) | async def test_heater_uses_hot_tolerance_in_range_mode( function test_cooler_uses_cold_tolerance_in_range_mode (line 137) | async def test_cooler_uses_cold_tolerance_in_range_mode( function test_heater_stays_on_between_target_and_tolerance (line 231) | async def test_heater_stays_on_between_target_and_tolerance( FILE: tests/edge_cases/test_issue_506_user_exact_scenario.py function test_user_exact_config_with_hot_tolerance_set (line 39) | async def test_user_exact_config_with_hot_tolerance_set(hass: HomeAssist... function test_user_exact_config_without_tolerances (line 105) | async def test_user_exact_config_without_tolerances(hass: HomeAssistant): function test_tolerance_actually_used_in_heat_cool_mode (line 160) | async def test_tolerance_actually_used_in_heat_cool_mode(hass: HomeAssis... FILE: tests/edge_cases/test_issue_506_yaml_tolerance_defaults.py function test_yaml_config_tolerance_defaults_applied (line 40) | async def test_yaml_config_tolerance_defaults_applied(hass: HomeAssistant): function test_yaml_config_explicit_tolerance_values_respected (line 106) | async def test_yaml_config_explicit_tolerance_values_respected(hass: Hom... function test_yaml_config_zero_tolerance_values_respected (line 163) | async def test_yaml_config_zero_tolerance_values_respected(hass: HomeAss... FILE: tests/edge_cases/test_issue_518_heater_turns_off_prematurely.py function test_heater_stays_on_until_target_plus_hot_tolerance (line 29) | async def test_heater_stays_on_until_target_plus_hot_tolerance(hass: Hom... function test_cooler_stays_on_until_target_minus_cold_tolerance (line 146) | async def test_cooler_stays_on_until_target_minus_cold_tolerance(hass: H... FILE: tests/features/test_ac_features_ux.py function test_user_experience_flow (line 17) | def test_user_experience_flow(): function test_form_responsiveness (line 85) | def test_form_responsiveness(): function test_feature_discoverability (line 122) | def test_feature_discoverability(): function test_progressive_disclosure (line 146) | def test_progressive_disclosure(): function main (line 210) | def main(): FILE: tests/features/test_advanced_toggle_feature.py function test_basic_schema (line 19) | def test_basic_schema(): function test_advanced_schema (line 74) | def test_advanced_schema(): function test_schema_differences (line 110) | def test_schema_differences(): function test_schema_validation (line 132) | def test_schema_validation(): function test_realistic_flow (line 182) | def test_realistic_flow(): function main (line 236) | def main(): FILE: tests/features/test_feature_hvac_mode_interactions.py function mock_hass (line 49) | def mock_hass(): class TestAcOnlyModeInteractions (line 58) | class TestAcOnlyModeInteractions: method test_fan_feature_adds_fan_only_mode (line 61) | async def test_fan_feature_adds_fan_only_mode(self, mock_hass): method test_humidity_feature_adds_dry_mode (line 106) | async def test_humidity_feature_adds_dry_mode(self, mock_hass): method test_fan_and_humidity_add_both_modes (line 153) | async def test_fan_and_humidity_add_both_modes(self, mock_hass): class TestHeaterCoolerModeInteractions (line 209) | class TestHeaterCoolerModeInteractions: method test_fan_feature_adds_fan_only_mode (line 212) | async def test_fan_feature_adds_fan_only_mode(self, mock_hass): method test_humidity_feature_adds_dry_mode (line 256) | async def test_humidity_feature_adds_dry_mode(self, mock_hass): class TestHeatPumpModeInteractions (line 302) | class TestHeatPumpModeInteractions: method test_fan_feature_adds_fan_only_mode (line 305) | async def test_fan_feature_adds_fan_only_mode(self, mock_hass): method test_humidity_feature_adds_dry_mode (line 349) | async def test_humidity_feature_adds_dry_mode(self, mock_hass): class TestSimpleHeaterModeInteractions (line 395) | class TestSimpleHeaterModeInteractions: method test_no_additional_modes_for_simple_heater (line 398) | async def test_no_additional_modes_for_simple_heater(self, mock_hass): FILE: tests/features/test_heater_cooler_with_fan.py function mock_hass (line 29) | def mock_hass(): class TestHeaterCoolerWithFan (line 38) | class TestHeaterCoolerWithFan: method test_fan_feature_configuration_step_appears (line 41) | async def test_fan_feature_configuration_step_appears(self, mock_hass): method test_fan_settings_saved_under_correct_keys (line 72) | async def test_fan_settings_saved_under_correct_keys(self, mock_hass): method test_fan_hot_tolerance_has_default_value (line 110) | async def test_fan_hot_tolerance_has_default_value(self, mock_hass): method test_fan_hot_tolerance_toggle_is_optional (line 135) | async def test_fan_hot_tolerance_toggle_is_optional(self, mock_hass): method test_fan_feature_with_heater_cooler_complete_flow (line 161) | async def test_fan_feature_with_heater_cooler_complete_flow(self, mock... method test_fan_feature_settings_match_schema (line 208) | async def test_fan_feature_settings_match_schema(self, mock_hass): FILE: tests/features/test_heater_cooler_with_humidity.py function mock_hass (line 28) | def mock_hass(): class TestHeaterCoolerWithHumidity (line 37) | class TestHeaterCoolerWithHumidity: method test_humidity_feature_configuration_step_appears (line 40) | async def test_humidity_feature_configuration_step_appears(self, mock_... method test_humidity_settings_saved_under_correct_keys (line 71) | async def test_humidity_settings_saved_under_correct_keys(self, mock_h... method test_humidity_feature_with_heater_cooler_complete_flow (line 105) | async def test_humidity_feature_with_heater_cooler_complete_flow(self,... method test_humidity_feature_settings_match_schema (line 152) | async def test_humidity_feature_settings_match_schema(self, mock_hass): method test_humidity_sensor_is_optional_entity_field (line 168) | async def test_humidity_sensor_is_optional_entity_field(self, mock_hass): method test_humidity_with_fan_both_enabled (line 189) | async def test_humidity_with_fan_both_enabled(self, mock_hass): FILE: tests/features/test_openings_with_hvac_modes.py function mock_hass (line 43) | def mock_hass(): class TestOpeningsHeaterCooler (line 52) | class TestOpeningsHeaterCooler: method test_openings_single_sensor (line 55) | async def test_openings_single_sensor(self, mock_hass): method test_openings_multiple_sensors (line 103) | async def test_openings_multiple_sensors(self, mock_hass): class TestOpeningsSimpleHeater (line 158) | class TestOpeningsSimpleHeater: method test_openings_simple_heater (line 161) | async def test_openings_simple_heater(self, mock_hass): class TestOpeningsAcOnly (line 204) | class TestOpeningsAcOnly: method test_openings_ac_only (line 207) | async def test_openings_ac_only(self, mock_hass): class TestOpeningsHeatPump (line 252) | class TestOpeningsHeatPump: method test_openings_heat_pump (line 255) | async def test_openings_heat_pump(self, mock_hass): class TestOpeningsWithOtherFeatures (line 303) | class TestOpeningsWithOtherFeatures: method test_openings_with_fan_and_humidity (line 306) | async def test_openings_with_fan_and_humidity(self, mock_hass): FILE: tests/features/test_presets_with_all_features.py function mock_hass (line 53) | def mock_hass(): class TestPresetsBaseline (line 62) | class TestPresetsBaseline: method test_presets_only_simple_heater (line 65) | async def test_presets_only_simple_heater(self, mock_hass): class TestPresetsWithFloorHeating (line 118) | class TestPresetsWithFloorHeating: method test_presets_after_floor_heating (line 121) | async def test_presets_after_floor_heating(self, mock_hass): class TestPresetsWithOpenings (line 180) | class TestPresetsWithOpenings: method test_presets_after_openings (line 183) | async def test_presets_after_openings(self, mock_hass): class TestPresetsWithFanAndHumidity (line 244) | class TestPresetsWithFanAndHumidity: method test_presets_after_fan_and_humidity (line 247) | async def test_presets_after_fan_and_humidity(self, mock_hass): class TestPresetsWithAllFeatures (line 318) | class TestPresetsWithAllFeatures: method test_presets_last_with_all_features (line 321) | async def test_presets_last_with_all_features(self, mock_hass): class TestPresetSelection (line 427) | class TestPresetSelection: method test_multiple_presets_selected (line 430) | async def test_multiple_presets_selected(self, mock_hass): method test_single_preset_selected (line 480) | async def test_single_preset_selected(self, mock_hass): class TestPresetStepOrdering (line 519) | class TestPresetStepOrdering: method test_presets_always_last_before_create_entry (line 522) | async def test_presets_always_last_before_create_entry(self, mock_hass): FILE: tests/managers/test_environment_manager.py function basic_config (line 26) | def basic_config(): function config_with_mode_specific_tolerances (line 36) | def config_with_mode_specific_tolerances(): function environment_manager (line 48) | def environment_manager(hass, basic_config): function environment_manager_with_tolerances (line 54) | def environment_manager_with_tolerances(hass, config_with_mode_specific_... class TestSetHvacMode (line 59) | class TestSetHvacMode: method test_set_hvac_mode_stores_mode_correctly (line 63) | async def test_set_hvac_mode_stores_mode_correctly(self, hass, environ... class TestGetActiveToleranceForMode (line 78) | class TestGetActiveToleranceForMode: method test_heat_mode_uses_heat_tolerance (line 82) | async def test_heat_mode_uses_heat_tolerance( method test_cool_mode_uses_cool_tolerance (line 95) | async def test_cool_mode_uses_cool_tolerance( method test_fan_only_mode_uses_cool_tolerance (line 108) | async def test_fan_only_mode_uses_cool_tolerance( method test_heat_cool_mode_heating_uses_heat_tolerance (line 121) | async def test_heat_cool_mode_heating_uses_heat_tolerance( method test_heat_cool_mode_cooling_uses_cool_tolerance (line 136) | async def test_heat_cool_mode_cooling_uses_cool_tolerance( method test_legacy_fallback_when_heat_tolerance_none (line 151) | async def test_legacy_fallback_when_heat_tolerance_none( method test_legacy_fallback_when_cool_tolerance_none (line 164) | async def test_legacy_fallback_when_cool_tolerance_none( method test_legacy_fallback_when_both_tolerances_none (line 177) | async def test_legacy_fallback_when_both_tolerances_none(self, hass): method test_tolerance_selection_with_none_hvac_mode (line 193) | async def test_tolerance_selection_with_none_hvac_mode( class TestIsTooColdWithModeAwareness (line 207) | class TestIsTooColdWithModeAwareness: method test_is_too_cold_uses_heat_tolerance_in_heat_mode (line 211) | async def test_is_too_cold_uses_heat_tolerance_in_heat_mode( method test_is_too_cold_uses_legacy_when_no_mode_specific (line 234) | async def test_is_too_cold_uses_legacy_when_no_mode_specific( class TestIsTooHotWithModeAwareness (line 255) | class TestIsTooHotWithModeAwareness: method test_is_too_hot_uses_cool_tolerance_in_cool_mode (line 259) | async def test_is_too_hot_uses_cool_tolerance_in_cool_mode( method test_is_too_hot_uses_legacy_when_no_mode_specific (line 282) | async def test_is_too_hot_uses_legacy_when_no_mode_specific( class TestSetTempsFromPresetWithTemplates (line 303) | class TestSetTempsFromPresetWithTemplates: method test_template_preset_target_temp_evaluated (line 311) | async def test_template_preset_target_temp_evaluated( method test_template_preset_range_temps_evaluated (line 335) | async def test_template_preset_range_temps_evaluated( method test_template_preset_range_fallback_to_heat (line 364) | async def test_template_preset_range_fallback_to_heat( method test_template_preset_range_fallback_to_cool (line 391) | async def test_template_preset_range_fallback_to_cool( class TestIsWithinFanTolerance (line 418) | class TestIsWithinFanTolerance: method test_fan_tolerance_zero_never_triggers (line 429) | async def test_fan_tolerance_zero_never_triggers(self, hass): method test_fan_tolerance_positive_creates_valid_zone (line 459) | async def test_fan_tolerance_positive_creates_valid_zone(self, hass): method test_fan_tolerance_none_returns_false (line 495) | async def test_fan_tolerance_none_returns_false(self, hass): method test_fan_tolerance_with_no_current_temp (line 509) | async def test_fan_tolerance_with_no_current_temp(self, hass): FILE: tests/managers/test_hvac_device_factory.py class TestFanHotToleranceWithoutCooler (line 16) | class TestFanHotToleranceWithoutCooler: method test_fan_hot_tolerance_without_cooler_logs_warning (line 25) | async def test_fan_hot_tolerance_without_cooler_logs_warning( method test_fan_hot_tolerance_with_cooler_no_warning (line 71) | async def test_fan_hot_tolerance_with_cooler_no_warning( method test_fan_hot_tolerance_with_ac_mode_no_warning (line 118) | async def test_fan_hot_tolerance_with_ac_mode_no_warning( FILE: tests/managers/test_preset_manager_templates.py class TestPresetManagerTemplateIntegration (line 15) | class TestPresetManagerTemplateIntegration: method test_preset_manager_calls_template_evaluation (line 19) | async def test_preset_manager_calls_template_evaluation( method test_preset_manager_applies_evaluated_temperature (line 53) | async def test_preset_manager_applies_evaluated_temperature( method test_preset_manager_range_mode_with_templates (line 93) | async def test_preset_manager_range_mode_with_templates( FILE: tests/openings/test_openings_config_flow.py function test_openings_processing_logic (line 4) | def test_openings_processing_logic(): FILE: tests/openings/test_openings_multiselect.py function test_openings_multiselect_processing (line 4) | def test_openings_multiselect_processing(): function test_entity_display_name_extraction (line 89) | def test_entity_display_name_extraction(): FILE: tests/openings/test_openings_options_flow.py function mock_config_entry (line 17) | def mock_config_entry(): function test_options_flow_includes_openings_step (line 33) | def test_options_flow_includes_openings_step(): function test_options_flow_skips_openings_when_not_configured (line 64) | def test_options_flow_skips_openings_when_not_configured(): FILE: tests/openings/test_scope_generation.py class MockFlowInstance (line 9) | class MockFlowInstance: method async_show_form (line 12) | def async_show_form(self, step_id, data_schema, description_placeholde... function extract_scope_options_from_schema (line 17) | def extract_scope_options_from_schema(schema_dict): class TestOpeningsScopeGeneration (line 45) | class TestOpeningsScopeGeneration: method test_ac_only_system_scope_options (line 49) | async def test_ac_only_system_scope_options(self): method test_simple_heater_scope_options (line 85) | async def test_simple_heater_scope_options(self): method test_heat_pump_scope_options (line 120) | async def test_heat_pump_scope_options(self): method test_dual_system_full_features_scope_options (line 152) | async def test_dual_system_full_features_scope_options(self): method test_fan_mode_only_scope_options (line 186) | async def test_fan_mode_only_scope_options(self): method test_dual_system_without_heat_cool_mode (line 217) | async def test_dual_system_without_heat_cool_mode(self): function test_ac_only_system_scope_options (line 254) | async def test_ac_only_system_scope_options(self): function test_simple_heater_scope_options (line 296) | async def test_simple_heater_scope_options(self): function test_heat_pump_scope_options (line 337) | async def test_heat_pump_scope_options(self): function test_dual_system_full_features_scope_options (line 376) | async def test_dual_system_full_features_scope_options(self): function test_fan_mode_only_scope_options (line 417) | async def test_fan_mode_only_scope_options(self): function test_dual_system_without_heat_cool_mode (line 455) | async def test_dual_system_without_heat_cool_mode(self): FILE: tests/preset_env/test_preset_env_templates.py class TestStaticValueBackwardCompatibility (line 14) | class TestStaticValueBackwardCompatibility: method test_static_value_backward_compatible (line 18) | async def test_static_value_backward_compatible(self, hass: HomeAssist... method test_static_value_no_template_tracking (line 31) | async def test_static_value_no_template_tracking(self, hass: HomeAssis... method test_get_temperature_static_value (line 47) | async def test_get_temperature_static_value(self, hass: HomeAssistant): method test_static_range_mode_temperatures (line 59) | async def test_static_range_mode_temperatures(self, hass: HomeAssistant): method test_integer_converted_to_float (line 75) | async def test_integer_converted_to_float(self, hass: HomeAssistant): class TestTemplateDetectionAndEvaluation (line 88) | class TestTemplateDetectionAndEvaluation: method test_template_detection_string_value (line 92) | async def test_template_detection_string_value( method test_entity_extraction_simple (line 106) | async def test_entity_extraction_simple( method test_template_evaluation_success (line 118) | async def test_template_evaluation_success( method test_template_evaluation_entity_unavailable (line 135) | async def test_template_evaluation_entity_unavailable( method test_template_evaluation_fallback_to_default (line 159) | async def test_template_evaluation_fallback_to_default( method test_template_with_filters (line 174) | async def test_template_with_filters( method test_range_mode_with_templates (line 190) | async def test_range_mode_with_templates( class TestComplexConditionalTemplates (line 212) | class TestComplexConditionalTemplates: method test_template_complex_conditional (line 216) | async def test_template_complex_conditional( method test_entity_extraction_multiple_entities (line 242) | async def test_entity_extraction_multiple_entities( method test_template_with_multiple_conditions (line 260) | async def test_template_with_multiple_conditions( class TestRangeModeWithTemplates (line 299) | class TestRangeModeWithTemplates: method test_range_mode_mixed_static_template (line 303) | async def test_range_mode_mixed_static_template( FILE: tests/presets/test_comprehensive_preset_logic.py function test_comprehensive_preset_logic (line 12) | async def test_comprehensive_preset_logic(): function run_test (line 274) | def run_test(): FILE: tests/presets/test_preset_form_organization.py function test_preset_selection_schema (line 19) | def test_preset_selection_schema(): function test_preset_schema_with_selected_presets_only (line 30) | def test_preset_schema_with_selected_presets_only(): function test_preset_schema_with_selected_presets_and_features (line 56) | def test_preset_schema_with_selected_presets_and_features(): function test_preset_schema_backward_compatibility (line 86) | def test_preset_schema_backward_compatibility(): function test_preset_schema_basic_only (line 101) | def test_preset_schema_basic_only(): function test_preset_schema_with_humidity (line 114) | def test_preset_schema_with_humidity(): function test_preset_schema_with_heat_cool_mode (line 127) | def test_preset_schema_with_heat_cool_mode(): function test_preset_schema_with_floor_heating (line 138) | def test_preset_schema_with_floor_heating(): function test_preset_schema_with_fan_mode (line 149) | def test_preset_schema_with_fan_mode(): function test_preset_schema_comprehensive (line 164) | def test_preset_schema_comprehensive(): function test_preset_organization_by_preset (line 184) | def test_preset_organization_by_preset(): FILE: tests/test_auto_mode_availability.py function _make_feature_manager (line 22) | def _make_feature_manager(config: dict) -> FeatureManager: function test_is_configured_for_auto_mode_true (line 101) | def test_is_configured_for_auto_mode_true(config: dict) -> None: function test_is_configured_for_auto_mode_false (line 147) | def test_is_configured_for_auto_mode_false(config: dict) -> None: FILE: tests/test_auto_mode_evaluator.py function _make_evaluator (line 18) | def _make_evaluator(**overrides) -> AutoModeEvaluator: function test_evaluator_constructs_with_managers (line 66) | def test_evaluator_constructs_with_managers() -> None: function test_auto_decision_is_frozen_dataclass (line 72) | def test_auto_decision_is_frozen_dataclass() -> None: function test_floor_hot_returns_overheat (line 83) | def test_floor_hot_returns_overheat() -> None: function test_opening_open_returns_opening_idle (line 91) | def test_opening_open_returns_opening_idle() -> None: function test_temperature_stall_returns_temperature_stall (line 100) | def test_temperature_stall_returns_temperature_stall() -> None: function test_floor_hot_preempts_opening_and_stall (line 108) | def test_floor_hot_preempts_opening_and_stall() -> None: function test_opening_preempts_stall (line 116) | def test_opening_preempts_stall() -> None: function test_humidity_urgent_2x_returns_dry (line 124) | def test_humidity_urgent_2x_returns_dry() -> None: function test_humidity_normal_returns_dry (line 134) | def test_humidity_normal_returns_dry() -> None: function test_humidity_priority_skipped_when_no_dryer (line 143) | def test_humidity_priority_skipped_when_no_dryer() -> None: function test_humidity_stall_suppresses_humidity_priorities (line 153) | def test_humidity_stall_suppresses_humidity_priorities() -> None: function test_humidity_below_target_does_not_trigger (line 162) | def test_humidity_below_target_does_not_trigger() -> None: function test_temp_urgent_cold_2x_returns_heat (line 171) | def test_temp_urgent_cold_2x_returns_heat() -> None: function test_temp_urgent_hot_2x_returns_cool (line 180) | def test_temp_urgent_hot_2x_returns_cool() -> None: function test_temp_normal_cold_returns_heat (line 190) | def test_temp_normal_cold_returns_heat() -> None: function test_temp_normal_hot_returns_cool (line 198) | def test_temp_normal_hot_returns_cool() -> None: function test_humidity_urgent_preempts_temp_normal (line 207) | def test_humidity_urgent_preempts_temp_normal() -> None: function test_temp_urgent_preempts_humidity_normal (line 217) | def test_temp_urgent_preempts_humidity_normal() -> None: function test_fan_band_returns_fan_only (line 227) | def test_fan_band_returns_fan_only() -> None: function test_fan_skipped_when_no_fan_configured (line 237) | def test_fan_skipped_when_no_fan_configured() -> None: function test_temp_normal_hot_preempts_fan_band (line 246) | def test_temp_normal_hot_preempts_fan_band() -> None: function test_idle_when_all_targets_met (line 257) | def test_idle_when_all_targets_met() -> None: function test_idle_after_dry_uses_humidity_reached_reason (line 265) | def test_idle_after_dry_uses_humidity_reached_reason() -> None: function test_range_mode_uses_target_temp_low_for_heat (line 277) | def test_range_mode_uses_target_temp_low_for_heat() -> None: function test_range_mode_uses_target_temp_high_for_cool (line 289) | def test_range_mode_uses_target_temp_high_for_cool() -> None: function test_range_mode_idle_between_targets (line 302) | def test_range_mode_idle_between_targets() -> None: function test_flap_prevention_stays_heat_while_goal_pending (line 314) | def test_flap_prevention_stays_heat_while_goal_pending() -> None: function test_flap_prevention_switches_to_dry_on_urgent_humidity (line 325) | def test_flap_prevention_switches_to_dry_on_urgent_humidity() -> None: function test_flap_prevention_normal_humidity_does_not_preempt_heat (line 338) | def test_flap_prevention_normal_humidity_does_not_preempt_heat() -> None: function test_flap_prevention_rescans_when_goal_reached (line 351) | def test_flap_prevention_rescans_when_goal_reached() -> None: function test_flap_prevention_dry_stays_until_dry_goal_reached (line 363) | def test_flap_prevention_dry_stays_until_dry_goal_reached() -> None: function test_flap_prevention_cool_stays_until_cool_goal_reached (line 375) | def test_flap_prevention_cool_stays_until_cool_goal_reached() -> None: function test_flap_prevention_fan_only_stays_until_fan_band_exited (line 387) | def test_flap_prevention_fan_only_stays_until_fan_band_exited() -> None: function test_flap_prevention_unknown_mode_falls_through_to_full_scan (line 399) | def test_flap_prevention_unknown_mode_falls_through_to_full_scan() -> None: function test_no_cooler_capability_skips_cool_priorities (line 411) | def test_no_cooler_capability_skips_cool_priorities() -> None: function test_no_cooler_with_urgent_hot_does_not_pick_cool (line 424) | def test_no_cooler_with_urgent_hot_does_not_pick_cool() -> None: function test_no_heater_capability_skips_heat_priorities (line 435) | def test_no_heater_capability_skips_heat_priorities() -> None: function test_evaluator_accepts_outside_delta_boost_threshold (line 445) | def test_evaluator_accepts_outside_delta_boost_threshold() -> None: function test_evaluator_default_outside_delta_boost_is_none (line 454) | def test_evaluator_default_outside_delta_boost_is_none() -> None: function test_evaluate_accepts_outside_temp_and_stall_flag (line 463) | def test_evaluate_accepts_outside_temp_and_stall_flag() -> None: function test_evaluate_outside_temp_defaults_to_none (line 475) | def test_evaluate_outside_temp_defaults_to_none() -> None: function test_outside_promotion_threshold_disabled_when_none (line 482) | def test_outside_promotion_threshold_disabled_when_none() -> None: function test_outside_promotion_skipped_when_outside_temp_none (line 495) | def test_outside_promotion_skipped_when_outside_temp_none() -> None: function test_outside_promotion_skipped_when_outside_stalled (line 508) | def test_outside_promotion_skipped_when_outside_stalled() -> None: function test_outside_promotion_skipped_when_cur_temp_none (line 521) | def test_outside_promotion_skipped_when_cur_temp_none() -> None: function test_outside_promotion_heat_fires_when_delta_meets_threshold_and_outside_colder (line 534) | def test_outside_promotion_heat_fires_when_delta_meets_threshold_and_out... function test_outside_promotion_heat_skipped_when_delta_below_threshold (line 549) | def test_outside_promotion_heat_skipped_when_delta_below_threshold() -> ... function test_outside_promotion_heat_skipped_when_outside_warmer_than_inside (line 562) | def test_outside_promotion_heat_skipped_when_outside_warmer_than_inside(... function test_outside_promotion_cool_fires_when_outside_hotter (line 575) | def test_outside_promotion_cool_fires_when_outside_hotter() -> None: function test_outside_promotion_cool_skipped_when_outside_cooler (line 588) | def test_outside_promotion_cool_skipped_when_outside_cooler() -> None: function test_outside_promotion_skipped_for_non_temp_modes (line 601) | def test_outside_promotion_skipped_for_non_temp_modes() -> None: function test_full_scan_promotes_normal_heat_to_urgent_with_outside_bias (line 620) | def test_full_scan_promotes_normal_heat_to_urgent_with_outside_bias() ->... function test_full_scan_normal_heat_unaffected_when_outside_delta_below_threshold (line 640) | def test_full_scan_normal_heat_unaffected_when_outside_delta_below_thres... function test_full_scan_promotes_normal_cool_to_urgent_with_outside_bias (line 654) | def test_full_scan_promotes_normal_cool_to_urgent_with_outside_bias() ->... function test_full_scan_outside_bias_skipped_when_below_target (line 668) | def test_full_scan_outside_bias_skipped_when_below_target() -> None: function test_free_cooling_skipped_when_no_fan_configured (line 681) | def test_free_cooling_skipped_when_no_fan_configured() -> None: function test_free_cooling_skipped_when_outside_temp_none (line 692) | def test_free_cooling_skipped_when_outside_temp_none() -> None: function test_free_cooling_skipped_when_outside_stalled (line 703) | def test_free_cooling_skipped_when_outside_stalled() -> None: function test_free_cooling_skipped_when_cur_temp_none (line 714) | def test_free_cooling_skipped_when_cur_temp_none() -> None: function test_free_cooling_fires_when_outside_more_than_margin_cooler (line 725) | def test_free_cooling_fires_when_outside_more_than_margin_cooler() -> None: function test_free_cooling_skipped_when_outside_within_margin (line 736) | def test_free_cooling_skipped_when_outside_within_margin() -> None: function test_free_cooling_skipped_when_outside_warmer_than_inside (line 747) | def test_free_cooling_skipped_when_outside_warmer_than_inside() -> None: function test_full_scan_picks_fan_for_free_cooling_in_normal_cool_tier (line 758) | def test_full_scan_picks_fan_for_free_cooling_in_normal_cool_tier() -> N... function test_full_scan_does_not_pick_fan_when_free_cooling_margin_not_met (line 774) | def test_full_scan_does_not_pick_fan_when_free_cooling_margin_not_met() ... function test_full_scan_skips_free_cooling_in_urgent_tier (line 787) | def test_full_scan_skips_free_cooling_in_urgent_tier() -> None: function test_full_scan_skips_free_cooling_when_outside_promotes_to_urgent (line 800) | def test_full_scan_skips_free_cooling_when_outside_promotes_to_urgent() ... function test_full_scan_picks_cool_when_apparent_above_target_even_if_raw_below (line 820) | def test_full_scan_picks_cool_when_apparent_above_target_even_if_raw_bel... function test_full_scan_does_not_pick_cool_when_raw_below_target_and_no_apparent_substitution (line 844) | def test_full_scan_does_not_pick_cool_when_raw_below_target_and_no_appar... function test_full_scan_apparent_only_affects_cool_decisions (line 859) | def test_full_scan_apparent_only_affects_cool_decisions() -> None: FILE: tests/test_auto_mode_integration.py function _heater_cooler_yaml (line 35) | def _heater_cooler_yaml( function test_heater_only_does_not_expose_auto (line 66) | async def test_heater_only_does_not_expose_auto(hass: HomeAssistant) -> ... function test_heater_cooler_exposes_auto_in_hvac_modes (line 101) | async def test_heater_cooler_exposes_auto_in_hvac_modes(hass: HomeAssist... function test_heater_cooler_auto_picks_heat_when_cold (line 117) | async def test_heater_cooler_auto_picks_heat_when_cold(hass: HomeAssista... function test_heater_cooler_auto_picks_cool_when_hot (line 142) | async def test_heater_cooler_auto_picks_cool_when_hot(hass: HomeAssistan... function test_heater_cooler_auto_idle_when_at_target (line 167) | async def test_heater_cooler_auto_idle_when_at_target(hass: HomeAssistan... function test_heater_cooler_auto_restored_after_restart (line 186) | async def test_heater_cooler_auto_restored_after_restart(hass: HomeAssis... function test_heat_pump_exposes_auto_and_survives_mode_swap (line 213) | async def test_heat_pump_exposes_auto_and_survives_mode_swap( function test_heater_dryer_auto_picks_dry_when_humid (line 258) | async def test_heater_dryer_auto_picks_dry_when_humid(hass: HomeAssistan... function test_auto_keep_alive_forwards_time_to_controller (line 314) | async def test_auto_keep_alive_forwards_time_to_controller( function test_auto_min_cycle_duration_propagates_to_controller (line 368) | async def test_auto_min_cycle_duration_propagates_to_controller( function test_auto_outside_sensor_unconfigured_loads_cleanly (line 407) | async def test_auto_outside_sensor_unconfigured_loads_cleanly( function test_auto_helsinki_winter_loads_with_outside_sensor (line 439) | async def test_auto_helsinki_winter_loads_with_outside_sensor( function test_auto_free_cooling_picks_fan_over_cool_in_normal_tier (line 474) | async def test_auto_free_cooling_picks_fan_over_cool_in_normal_tier( function test_auto_without_outside_sensor_behaves_like_phase_1_2 (line 508) | async def test_auto_without_outside_sensor_behaves_like_phase_1_2( function test_heat_pump_auto_outside_bias_emits_temperature_reason (line 536) | async def test_heat_pump_auto_outside_bias_emits_temperature_reason( function test_heater_cooler_auto_picks_cool_via_apparent_temp (line 587) | async def test_heater_cooler_auto_picks_cool_via_apparent_temp( function test_heater_cooler_standalone_cool_uses_apparent_temp (line 630) | async def test_heater_cooler_standalone_cool_uses_apparent_temp( function test_heater_cooler_apparent_temp_off_matches_phase_1_3 (line 673) | async def test_heater_cooler_apparent_temp_off_matches_phase_1_3( function test_heat_pump_auto_picks_cool_via_apparent_temp (line 714) | async def test_heat_pump_auto_picks_cool_via_apparent_temp( function test_heat_pump_apparent_temp_off_matches_phase_1_3 (line 760) | async def test_heat_pump_apparent_temp_off_matches_phase_1_3( FILE: tests/test_auto_preset_selection.py function setup_thermostat_with_presets (line 31) | async def setup_thermostat_with_presets(hass: HomeAssistant) -> None: function setup_thermostat_with_range_presets (line 53) | async def setup_thermostat_with_range_presets(hass: HomeAssistant) -> None: function setup_thermostat_with_floor_heating_presets (line 76) | async def setup_thermostat_with_floor_heating_presets(hass: HomeAssistan... function setup_thermostat_with_humidity_presets (line 112) | async def setup_thermostat_with_humidity_presets(hass: HomeAssistant) ->... class TestAutoPresetSelection (line 134) | class TestAutoPresetSelection: method test_auto_select_preset_single_temperature_match (line 137) | async def test_auto_select_preset_single_temperature_match( method test_auto_select_preset_temperature_range_match (line 162) | async def test_auto_select_preset_temperature_range_match( method test_auto_select_preset_with_floor_heating_match (line 192) | async def test_auto_select_preset_with_floor_heating_match( method test_auto_select_preset_with_humidity_match (line 220) | async def test_auto_select_preset_with_humidity_match( method test_no_auto_select_when_partial_match (line 252) | async def test_no_auto_select_when_partial_match( method test_no_auto_select_when_no_presets_configured (line 281) | async def test_no_auto_select_when_no_presets_configured(self, hass: H... method test_no_auto_select_when_already_in_matching_preset (line 316) | async def test_no_auto_select_when_already_in_matching_preset( method test_auto_select_first_matching_preset_when_multiple_match (line 345) | async def test_auto_select_first_matching_preset_when_multiple_match( method test_auto_select_preset_tolerance_handling (line 370) | async def test_auto_select_preset_tolerance_handling( method test_auto_select_preset_preserves_existing_preset_when_no_match (line 394) | async def test_auto_select_preset_preserves_existing_preset_when_no_ma... FILE: tests/test_config_flow.py function test_config_flow_basic (line 24) | async def test_config_flow_basic(hass: HomeAssistant) -> None: function test_config_flow_validation_errors (line 69) | async def test_config_flow_validation_errors(hass: HomeAssistant) -> None: function test_config_flow_with_presets (line 99) | async def test_config_flow_with_presets(hass: HomeAssistant) -> None: function test_options_flow (line 152) | async def test_options_flow(hass: HomeAssistant) -> None: FILE: tests/test_cooler_mode.py function test_unique_id (line 81) | async def test_unique_id( function test_setup_defaults_to_unknown (line 121) | async def test_setup_defaults_to_unknown(hass: HomeAssistant) -> None: ... function test_setup_gets_current_temp_from_sensor (line 142) | async def test_setup_gets_current_temp_from_sensor( function test_get_hvac_modes (line 174) | async def test_get_hvac_modes( function test_set_preset_mode (line 197) | async def test_set_preset_mode( function test_set_preset_mode_and_restore_prev_temp (line 221) | async def test_set_preset_mode_and_restore_prev_temp( function test_set_preset_modet_twice_and_restore_prev_temp (line 251) | async def test_set_preset_modet_twice_and_restore_prev_temp( function test_set_preset_mode_invalid (line 268) | async def test_set_preset_mode_invalid( function test_set_preset_mode_set_temp_keeps_preset_mode (line 299) | async def test_set_preset_mode_set_temp_keeps_preset_mode( function test_set_same_preset_mode_restores_preset_temp_from_modified (line 358) | async def test_set_same_preset_mode_restores_preset_temp_from_modified( function test_set_preset_mode_picks_temp_from_preset (line 411) | async def test_set_preset_mode_picks_temp_from_preset( function test_set_target_temp_ac_off (line 457) | async def test_set_target_temp_ac_off( function test_set_target_temp_ac_and_hvac_mode (line 472) | async def test_set_target_temp_ac_and_hvac_mode( function test_turn_away_mode_on_cooling (line 493) | async def test_turn_away_mode_on_cooling( function test_toggle (line 520) | async def test_toggle( function test_hvac_mode_cool (line 544) | async def test_hvac_mode_cool( function test_sensor_chhange_dont_control_ac_on_when_off (line 564) | async def test_sensor_chhange_dont_control_ac_on_when_off( function test_set_target_temp_ac_on (line 589) | async def test_set_target_temp_ac_on( function test_temp_change_ac_off_within_tolerance (line 604) | async def test_temp_change_ac_off_within_tolerance( function test_set_temp_change_ac_off_outside_tolerance (line 615) | async def test_set_temp_change_ac_off_outside_tolerance( function test_temp_change_ac_on_within_tolerance (line 630) | async def test_temp_change_ac_on_within_tolerance( function test_temp_change_ac_on_outside_tolerance (line 641) | async def test_temp_change_ac_on_outside_tolerance( function test_running_when_operating_mode_is_off_2 (line 656) | async def test_running_when_operating_mode_is_off_2( function test_no_state_change_when_operation_mode_off_2 (line 670) | async def test_no_state_change_when_operation_mode_off_2( function test_temp_change_ac_trigger_long_enough (line 684) | async def test_temp_change_ac_trigger_long_enough( function test_time_change_ac_trigger_long_enough (line 733) | async def test_time_change_ac_trigger_long_enough( function test_mode_change_ac_trigger_not_long_enough (line 771) | async def test_mode_change_ac_trigger_not_long_enough( function test_sensor_unknown_secure_ac_off_outside_stale_duration (line 809) | async def test_sensor_unknown_secure_ac_off_outside_stale_duration( function test_sensor_stalled_secure_ac_off_outside_stale_duration_reason (line 841) | async def test_sensor_stalled_secure_ac_off_outside_stale_duration_reason( function test_sensor_restores_after_state_changes (line 873) | async def test_sensor_restores_after_state_changes( function test_cooler_mode (line 916) | async def test_cooler_mode(hass: HomeAssistant, setup_comp_1) -> None: ... function test_cooler_mode_change (line 963) | async def test_cooler_mode_change( function test_cooler_mode_from_off_to_idle (line 1016) | async def test_cooler_mode_from_off_to_idle( function test_cooler_mode_off_switch_change_keeps_off (line 1064) | async def test_cooler_mode_off_switch_change_keeps_off( function test_cooler_mode_tolerance (line 1114) | async def test_cooler_mode_tolerance( function test_cooler_mode_cycle (line 1182) | async def test_cooler_mode_cycle( function test_cooler_mode_opening_hvac_action_reason (line 1245) | async def test_cooler_mode_opening_hvac_action_reason( function test_cooler_mode_hvac_power_value (line 1376) | async def test_cooler_mode_hvac_power_value( function test_cooler_mode_hvac_power_value_2 (line 1465) | async def test_cooler_mode_hvac_power_value_2( function test_cooler_mode_opening (line 1549) | async def test_cooler_mode_opening( function test_cooler_mode_opening_scope (line 1658) | async def test_cooler_mode_opening_scope( function test_legacy_config_cool_mode_behaves_identically (line 1746) | async def test_legacy_config_cool_mode_behaves_identically( function test_ac_only_cool_uses_apparent_temp_when_flag_on (line 1814) | async def test_ac_only_cool_uses_apparent_temp_when_flag_on( function test_ac_only_apparent_temp_off_does_not_cool_when_raw_below (line 1860) | async def test_ac_only_apparent_temp_off_does_not_cool_when_raw_below( FILE: tests/test_cooler_mode_behavioral.py function test_cooler_threshold_boundary_with_default_tolerance (line 22) | async def test_cooler_threshold_boundary_with_default_tolerance(hass: Ho... function test_cooler_threshold_boundary_with_custom_tolerance (line 106) | async def test_cooler_threshold_boundary_with_custom_tolerance(hass: Hom... function test_cooler_zero_tolerance_exact_threshold (line 189) | async def test_cooler_zero_tolerance_exact_threshold(hass: HomeAssistant): FILE: tests/test_dry_mode.py function test_unique_id (line 81) | async def test_unique_id( function test_setup_defaults_to_unknown (line 126) | async def test_setup_defaults_to_unknown(hass: HomeAssistant) -> None: ... function test_setup_gets_current_humidity_from_sensor (line 149) | async def test_setup_gets_current_humidity_from_sensor( function setup_comp_heat_ac_cool_dry (line 184) | async def setup_comp_heat_ac_cool_dry(hass: HomeAssistant) -> None: function test_get_hvac_modes (line 212) | async def test_get_hvac_modes( function setup_comp_heat_ac_cool_dry_presets (line 222) | async def setup_comp_heat_ac_cool_dry_presets(hass: HomeAssistant) -> None: function test_set_preset_mode (line 268) | async def test_set_preset_mode( function test_set_preset_mode_and_restore_prev_humidity (line 298) | async def test_set_preset_mode_and_restore_prev_humidity( function test_set_preset_modet_twice_and_restore_prev_humidity (line 334) | async def test_set_preset_modet_twice_and_restore_prev_humidity( function test_set_preset_mode_invalid (line 360) | async def test_set_preset_mode_invalid( function test_set_preset_mode_set_temp_keeps_preset_mode (line 392) | async def test_set_preset_mode_set_temp_keeps_preset_mode( function test_set_target_temp_ac_dry_off (line 429) | async def test_set_target_temp_ac_dry_off( function test_turn_away_mode_on_drying (line 444) | async def test_turn_away_mode_on_drying( function test_toggle (line 474) | async def test_toggle( function test_hvac_mode_cdry (line 497) | async def test_hvac_mode_cdry( function test_sensor_chhange_dont_control_dryer_when_off (line 519) | async def test_sensor_chhange_dont_control_dryer_when_off( function test_set_target_temp_ac_dryer_on (line 538) | async def test_set_target_temp_ac_dryer_on( function test_temp_change_ac_dry_off_within_tolerance (line 554) | async def test_temp_change_ac_dry_off_within_tolerance( function test_set_temp_change_ac_dry_off_outside_tolerance (line 570) | async def test_set_temp_change_ac_dry_off_outside_tolerance( function test_temp_change_ac_dryer_on_within_tolerance (line 585) | async def test_temp_change_ac_dryer_on_within_tolerance( function test_temp_change_ac_on_outside_tolerance (line 596) | async def test_temp_change_ac_on_outside_tolerance( function test_running_when_operating_mode_is_off_2 (line 612) | async def test_running_when_operating_mode_is_off_2( function test_no_state_change_when_operation_mode_off_2 (line 626) | async def test_no_state_change_when_operation_mode_off_2( function setup_comp_heat_ac_cool_dry_cycle (line 639) | async def setup_comp_heat_ac_cool_dry_cycle(hass: HomeAssistant) -> None: function test_temp_change_ac_dry_trigger_on_long_enough (line 669) | async def test_temp_change_ac_dry_trigger_on_long_enough( function test_time_change_ac_dry_trigger_on_long_enough (line 718) | async def test_time_change_ac_dry_trigger_on_long_enough( function test_mode_change_ac_dry_trigger_off_not_long_enough (line 756) | async def test_mode_change_ac_dry_trigger_off_not_long_enough( function setup_comp_heat_ac_cool_dry_stale_duration (line 774) | async def setup_comp_heat_ac_cool_dry_stale_duration(hass: HomeAssistant... function test_sensor_unknown_secure_ac_dry_off_outside_stale_duration (line 807) | async def test_sensor_unknown_secure_ac_dry_off_outside_stale_duration( function test_sensor_unknown_secure_ac_dry_off_outside_stale_duration_reason (line 850) | async def test_sensor_unknown_secure_ac_dry_off_outside_stale_duration_r... function test_dryer_mode (line 877) | async def test_dryer_mode(hass: HomeAssistant, setup_comp_1) -> None: #... function test_dryer_mode_change (line 939) | async def test_dryer_mode_change( function test_dryer_mode_from_off_to_idle (line 1007) | async def test_dryer_mode_from_off_to_idle( function test_dryer_mode_off_switch_change_keeps_off (line 1069) | async def test_dryer_mode_off_switch_change_keeps_off( function test_dryer_mode_tolerance (line 1130) | async def test_dryer_mode_tolerance( function test_dryer_mode_cycle (line 1210) | async def test_dryer_mode_cycle( function test_dryer_mode_opening_hvac_action_reason (line 1288) | async def test_dryer_mode_opening_hvac_action_reason( function test_dryer_mode_opening (line 1442) | async def test_dryer_mode_opening( function test_cooler_mode_opening_scope (line 1567) | async def test_cooler_mode_opening_scope( function setup_comp_dry_no_target_humidity_yaml (line 1661) | async def setup_comp_dry_no_target_humidity_yaml(hass: HomeAssistant) ->... function test_target_humidity_initialized_without_yaml_config (line 1698) | async def test_target_humidity_initialized_without_yaml_config( function test_humidity_control_works_after_yaml_setup (line 1725) | async def test_humidity_control_works_after_yaml_setup( function test_humidity_target_restored_on_restart (line 1771) | async def test_humidity_target_restored_on_restart( FILE: tests/test_dual_mode.py function test_unique_id (line 98) | async def test_unique_id( function test_setup_defaults_to_unknown (line 143) | async def test_setup_defaults_to_unknown(hass: HomeAssistant) -> None: ... function test_setup_gets_current_temp_from_sensor (line 165) | async def test_setup_gets_current_temp_from_sensor( function test_restore_state_while_off (line 193) | async def test_restore_state_while_off(hass: HomeAssistant) -> None: function test_presets_use_case_80 (line 234) | async def test_presets_use_case_80( function test_presets_use_case_150 (line 278) | async def test_presets_use_case_150( function test_presets_use_case_150_2 (line 311) | async def test_presets_use_case_150_2( function test_dual_default_setup_params (line 389) | async def test_dual_default_setup_params( function test_heat_cool_default_setup_params (line 399) | async def test_heat_cool_default_setup_params( function test_get_hvac_modes_dual (line 416) | async def test_get_hvac_modes_dual( function test_get_hvac_modes_heat_cool (line 427) | async def test_get_hvac_modes_heat_cool( function test_get_hvac_modes_heat_cool_2 (line 444) | async def test_get_hvac_modes_heat_cool_2( function test_dual_get_hvac_modes_fan_configured (line 510) | async def test_dual_get_hvac_modes_fan_configured( function test_heat_cool_get_hvac_modes_fan_configured (line 527) | async def test_heat_cool_get_hvac_modes_fan_configured( function test_set_hvac_mode_chnage_trarget_temp (line 545) | async def test_set_hvac_mode_chnage_trarget_temp( function test_set_target_temp_dual (line 564) | async def test_set_target_temp_dual( function test_set_target_temp_heat_cool (line 577) | async def test_set_target_temp_heat_cool( function test_dual_set_preset_mode (line 605) | async def test_dual_set_preset_mode( function test_heat_cool_set_preset_mode (line 631) | async def test_heat_cool_set_preset_mode( function test_dual_set_preset_mode_and_restore_prev_temp (line 659) | async def test_dual_set_preset_mode_and_restore_prev_temp( function test_set_heat_cool_preset_mode_and_restore_prev_temp (line 688) | async def test_set_heat_cool_preset_mode_and_restore_prev_temp( function test_set_heat_cool_preset_mode_and_restore_prev_temp_2 (line 722) | async def test_set_heat_cool_preset_mode_and_restore_prev_temp_2( function test_set_heat_cool_fan_preset_mode_and_restore_prev_temp (line 780) | async def test_set_heat_cool_fan_preset_mode_and_restore_prev_temp( function test_set_heat_cool_fan_restore_state (line 806) | async def test_set_heat_cool_fan_restore_state( function test_set_heat_cool_fan_restore_state_2 (line 943) | async def test_set_heat_cool_fan_restore_state_2( function test_set_dual_preset_mode_twice_and_restore_prev_temp (line 1002) | async def test_set_dual_preset_mode_twice_and_restore_prev_temp( function test_set_heat_cool_preset_mode_twice_and_restore_prev_temp (line 1032) | async def test_set_heat_cool_preset_mode_twice_and_restore_prev_temp( function test_set_heat_cool_preset_mode_and_restore_prev_temp_apply_preset_again (line 1068) | async def test_set_heat_cool_preset_mode_and_restore_prev_temp_apply_pre... function test_set_dual_preset_mode_invalid (line 1119) | async def test_set_dual_preset_mode_invalid( function test_set_heat_cool_preset_mode_invalid (line 1136) | async def test_set_heat_cool_preset_mode_invalid( function test_sensor_unknown_secure_heat_cool_off_outside_stale_duration_cooler (line 1158) | async def test_sensor_unknown_secure_heat_cool_off_outside_stale_duratio... function test_sensor_unknown_secure_heat_cool_off_outside_stale_duration_heater (line 1189) | async def test_sensor_unknown_secure_heat_cool_off_outside_stale_duratio... function test_sensor_unknown_secure_heat_cool_off_outside_stale_duration (line 1228) | async def test_sensor_unknown_secure_heat_cool_off_outside_stale_duration( function test_sensor_unknown_secure_heat_cool_off_outside_stale_duration_reason (line 1275) | async def test_sensor_unknown_secure_heat_cool_off_outside_stale_duratio... function test_sensor_restores_after_state_changes (line 1324) | async def test_sensor_restores_after_state_changes( function test_dual_set_preset_mode_set_temp_keeps_preset_mode (line 1385) | async def test_dual_set_preset_mode_set_temp_keeps_preset_mode( function test_heat_cool_set_preset_mode_set_temp_keeps_preset_mode (line 1428) | async def test_heat_cool_set_preset_mode_set_temp_keeps_preset_mode( function test_heat_cool_set_preset_mode_in_non_range_mode (line 1489) | async def test_heat_cool_set_preset_mode_in_non_range_mode( function test_heat_cool_set_preset_mode_auto_target_temps_if_range_only_presets (line 1523) | async def test_heat_cool_set_preset_mode_auto_target_temps_if_range_only... function test_heat_cool_fan_set_preset_mode_set_temp_keeps_preset_mode (line 1579) | async def test_heat_cool_fan_set_preset_mode_set_temp_keeps_preset_mode( function test_heat_cool_fan_set_preset_mode_change_hvac_mode (line 1631) | async def test_heat_cool_fan_set_preset_mode_change_hvac_mode( function test_dual_toggle (line 1696) | async def test_dual_toggle( function test_heat_cool_toggle (line 1722) | async def test_heat_cool_toggle( function test_dual_toggle_with_fan (line 1755) | async def test_dual_toggle_with_fan( function test_heat_cool_toggle_with_fan (line 1789) | async def test_heat_cool_toggle_with_fan( function test_hvac_mode_mode_heat_cool (line 1813) | async def test_hvac_mode_mode_heat_cool( function test_hvac_mode_mode_heat_cool_fan_tolerance (line 1934) | async def test_hvac_mode_mode_heat_cool_fan_tolerance( function test_hvac_mode_mode_heat_cool_ignore_fan_tolerance (line 2038) | async def test_hvac_mode_mode_heat_cool_ignore_fan_tolerance( function test_hvac_mode_mode_heat_cool_dont_ignore_fan_tolerance (line 2156) | async def test_hvac_mode_mode_heat_cool_dont_ignore_fan_tolerance( function test_hvac_mode_mode_heat_cool_fan_tolerance_with_floor_sensor (line 2274) | async def test_hvac_mode_mode_heat_cool_fan_tolerance_with_floor_sensor( function test_hvac_mode_mode_heat_cool_hvac_modes_temps (line 2372) | async def test_hvac_mode_mode_heat_cool_hvac_modes_temps( function test_hvac_mode_mode_heat_cool_hvac_modes_temps_avoid_unrealism (line 2457) | async def test_hvac_mode_mode_heat_cool_hvac_modes_temps_avoid_unrealism( function test_hvac_mode_mode_heat_cool_hvac_modes_temps_picks_range_values (line 2537) | async def test_hvac_mode_mode_heat_cool_hvac_modes_temps_picks_range_val... function test_hvac_mode_heat_cool_floor_temp (line 2608) | async def test_hvac_mode_heat_cool_floor_temp( function test_hvac_mode_mode_heat_cool_aux_heat (line 2718) | async def test_hvac_mode_mode_heat_cool_aux_heat( function test_hvac_mode_cool (line 2868) | async def test_hvac_mode_cool(hass: HomeAssistant, setup_comp_1): # noq... function test_hvac_mode_cool_hvac_action_reason (line 2927) | async def test_hvac_mode_cool_hvac_action_reason( function test_hvac_mode_heat_hvac_action_reason (line 2994) | async def test_hvac_mode_heat_hvac_action_reason( function test_hvac_mode_cool_cycle (line 3069) | async def test_hvac_mode_cool_cycle( function test_hvac_mode_heat_cycle (line 3142) | async def test_hvac_mode_heat_cycle( function test_hvac_mode_heat_cool_cycle (line 3216) | async def test_hvac_mode_heat_cool_cycle( function test_hvac_mode_heat_cool_switch_preset_modes (line 3282) | async def test_hvac_mode_heat_cool_switch_preset_modes( function test_hvac_mode_heat_cool_dry_mode (line 3338) | async def test_hvac_mode_heat_cool_dry_mode( function test_hvac_mode_heat_cool_tolerances (line 3438) | async def test_hvac_mode_heat_cool_tolerances( function test_hvac_mode_heat_cool_floor_temp_hvac_action_reason (line 3554) | async def test_hvac_mode_heat_cool_floor_temp_hvac_action_reason( function test_heat_cool_mode_opening_scope (line 3678) | async def test_heat_cool_mode_opening_scope( function test_heat_cool_mode_opening_timeout (line 3773) | async def test_heat_cool_mode_opening_timeout( function track_turn_off_calls (line 3999) | def track_turn_off_calls(hass, entity_id): function test_heat_cool_mode_does_not_turn_off_idle_cooler_when_heating (line 4019) | async def test_heat_cool_mode_does_not_turn_off_idle_cooler_when_heating( function test_heat_cool_mode_does_not_turn_off_idle_heater_when_cooling (line 4052) | async def test_heat_cool_mode_does_not_turn_off_idle_heater_when_cooling( function test_heat_cool_mode_does_not_turn_off_either_idle_device_when_temp_in_range (line 4084) | async def test_heat_cool_mode_does_not_turn_off_either_idle_device_when_... FILE: tests/test_dual_mode_behavioral.py function test_dual_mode_heating_threshold_with_default_tolerance (line 23) | async def test_dual_mode_heating_threshold_with_default_tolerance(hass: ... function test_dual_mode_cooling_threshold_with_default_tolerance (line 104) | async def test_dual_mode_cooling_threshold_with_default_tolerance(hass: ... function test_dual_mode_heat_cool_dual_thresholds (line 185) | async def test_dual_mode_heat_cool_dual_thresholds(hass: HomeAssistant): function test_dual_mode_custom_tolerance_values (line 298) | async def test_dual_mode_custom_tolerance_values(hass: HomeAssistant): FILE: tests/test_environment_manager.py function test_rothfusz_heat_index_at_threshold_minimum_humidity (line 14) | def test_rothfusz_heat_index_at_threshold_minimum_humidity() -> None: function test_rothfusz_heat_index_high_humidity_above_threshold (line 20) | def test_rothfusz_heat_index_high_humidity_above_threshold() -> None: function test_rothfusz_heat_index_hot_humid (line 26) | def test_rothfusz_heat_index_hot_humid() -> None: function test_rothfusz_heat_index_low_humidity_extreme_temp (line 32) | def test_rothfusz_heat_index_low_humidity_extreme_temp() -> None: function _make_env (line 38) | def _make_env(**config_overrides) -> EnvironmentManager: function test_env_manager_default_use_apparent_temp_is_false (line 47) | def test_env_manager_default_use_apparent_temp_is_false() -> None: function test_env_manager_reads_use_apparent_temp_from_config (line 53) | def test_env_manager_reads_use_apparent_temp_from_config() -> None: function test_env_manager_humidity_sensor_stalled_default_false (line 61) | def test_env_manager_humidity_sensor_stalled_default_false() -> None: function test_env_manager_humidity_sensor_stalled_setter_updates_flag (line 67) | def test_env_manager_humidity_sensor_stalled_setter_updates_flag() -> None: function test_apparent_temp_falls_back_when_flag_off (line 74) | def test_apparent_temp_falls_back_when_flag_off() -> None: function test_apparent_temp_falls_back_when_cur_temp_none (line 82) | def test_apparent_temp_falls_back_when_cur_temp_none() -> None: function test_apparent_temp_falls_back_when_humidity_none (line 92) | def test_apparent_temp_falls_back_when_humidity_none() -> None: function test_apparent_temp_falls_back_when_humidity_stalled (line 102) | def test_apparent_temp_falls_back_when_humidity_stalled() -> None: function test_apparent_temp_falls_back_below_27c_threshold (line 113) | def test_apparent_temp_falls_back_below_27c_threshold() -> None: function test_apparent_temp_above_threshold_humid_celsius (line 123) | def test_apparent_temp_above_threshold_humid_celsius() -> None: function test_apparent_temp_fahrenheit_input_conversion (line 136) | def test_apparent_temp_fahrenheit_input_conversion() -> None: function test_effective_temp_for_mode_returns_cur_when_flag_off (line 150) | def test_effective_temp_for_mode_returns_cur_when_flag_off() -> None: function test_effective_temp_for_mode_cool_returns_apparent_when_eligible (line 165) | def test_effective_temp_for_mode_cool_returns_apparent_when_eligible() -... function test_effective_temp_for_mode_non_cool_returns_cur (line 177) | def test_effective_temp_for_mode_non_cool_returns_cur() -> None: function test_is_too_hot_uses_apparent_when_mode_cool_and_flag_on (line 188) | def test_is_too_hot_uses_apparent_when_mode_cool_and_flag_on() -> None: function test_is_too_hot_uses_raw_when_mode_not_cool (line 216) | def test_is_too_hot_uses_raw_when_mode_not_cool() -> None: function test_is_too_hot_uses_raw_when_flag_off (line 238) | def test_is_too_hot_uses_raw_when_flag_off() -> None: FILE: tests/test_fan_mode.py function test_cooler_fan_unique_id (line 80) | async def test_cooler_fan_unique_id( function test_fan_only_unique_id (line 123) | async def test_fan_only_unique_id( function test_setup_defaults_to_unknown (line 165) | async def test_setup_defaults_to_unknown(hass: HomeAssistant) -> None: ... function test_cool_fan_setup_defaults_to_unknown (line 186) | async def test_cool_fan_setup_defaults_to_unknown( function test_setup_gets_current_temp_from_sensor (line 210) | async def test_setup_gets_current_temp_from_sensor( function test_setup_cool_fan_gets_current_temp_from_sensor (line 237) | async def test_setup_cool_fan_gets_current_temp_from_sensor( function test_get_hvac_modes_cool_fan_configured (line 270) | async def test_get_hvac_modes_cool_fan_configured( function test_get_hvac_modes_fan_only_configured (line 281) | async def test_get_hvac_modes_fan_only_configured( function test_set_preset_mode (line 304) | async def test_set_preset_mode( function test_fan_only_set_preset_mode (line 331) | async def test_fan_only_set_preset_mode( function test_set_preset_mode_and_restore_prev_temp (line 355) | async def test_set_preset_mode_and_restore_prev_temp( function test_fan_only_set_preset_mode_and_restore_prev_temp (line 388) | async def test_fan_only_set_preset_mode_and_restore_prev_temp( function test_set_preset_modet_twice_and_restore_prev_temp (line 418) | async def test_set_preset_modet_twice_and_restore_prev_temp( function test_fan_only_set_preset_modet_twice_and_restore_prev_temp (line 452) | async def test_fan_only_set_preset_modet_twice_and_restore_prev_temp( function test_set_preset_mode_invalid (line 469) | async def test_set_preset_mode_invalid( function test_fan_only_set_preset_mode_invalid (line 486) | async def test_fan_only_set_preset_mode_invalid( function test_set_preset_mode_set_temp_keeps_preset_mode (line 517) | async def test_set_preset_mode_set_temp_keeps_preset_mode( function test_fan_only_set_preset_mode_set_temp_keeps_preset_mode (line 560) | async def test_fan_only_set_preset_mode_set_temp_keeps_preset_mode( function test_turn_away_mode_on_fan (line 586) | async def test_turn_away_mode_on_fan( function test_turn_away_mode_on_cooling (line 601) | async def test_turn_away_mode_on_cooling( function test_toggle_fan_only (line 621) | async def test_toggle_fan_only( function test_hvac_mode_fan_only (line 642) | async def test_hvac_mode_fan_only( function test_toggle_cool_fan (line 670) | async def test_toggle_cool_fan( function test_hvac_mode_cool_fan (line 694) | async def test_hvac_mode_cool_fan( function test_set_target_temp_fan_off (line 728) | async def test_set_target_temp_fan_off( function test_set_target_temp_cool_fan_off (line 743) | async def test_set_target_temp_cool_fan_off( function test_set_target_temp_fan_on (line 767) | async def test_set_target_temp_fan_on( function test_set_target_temp_cooler_on (line 782) | async def test_set_target_temp_cooler_on( function test_set_target_temp_cooler_fan_on (line 799) | async def test_set_target_temp_cooler_fan_on( function test_temp_change_fan_off_within_tolerance (line 816) | async def test_temp_change_fan_off_within_tolerance( function test_temp_change_cooler_fan_ac_off_within_tolerance (line 827) | async def test_temp_change_cooler_fan_ac_off_within_tolerance( function test_temp_change_cooler_fan_off_within_tolerance (line 839) | async def test_temp_change_cooler_fan_off_within_tolerance( function test_set_temp_change_fan_off_outside_tolerance (line 851) | async def test_set_temp_change_fan_off_outside_tolerance( function test_set_temp_change_cooler_fan_ac_off_outside_tolerance (line 866) | async def test_set_temp_change_cooler_fan_ac_off_outside_tolerance( function test_set_temp_change_cooler_fan_off_outside_tolerance (line 882) | async def test_set_temp_change_cooler_fan_off_outside_tolerance( function test_temp_change_fan_on_within_tolerance (line 898) | async def test_temp_change_fan_on_within_tolerance( function test_temp_change_cooler_fan_ac_on_within_tolerance (line 909) | async def test_temp_change_cooler_fan_ac_on_within_tolerance( function test_temp_change_cooler_fan_on_within_tolerance (line 921) | async def test_temp_change_cooler_fan_on_within_tolerance( function test_temp_change_fan_on_outside_tolerance (line 933) | async def test_temp_change_fan_on_outside_tolerance( function test_temp_change_cooler_fan_ac_on_outside_tolerance (line 948) | async def test_temp_change_cooler_fan_ac_on_outside_tolerance( function test_temp_change_cooler_fan_on_outside_tolerance (line 964) | async def test_temp_change_cooler_fan_on_outside_tolerance( function test_running_fan_when_operating_mode_is_off_2 (line 980) | async def test_running_fan_when_operating_mode_is_off_2( function test_running_cooler_fan_ac_when_operating_mode_is_off_2 (line 994) | async def test_running_cooler_fan_ac_when_operating_mode_is_off_2( function test_running_cooler_fan_when_operating_mode_is_off_2 (line 1009) | async def test_running_cooler_fan_when_operating_mode_is_off_2( function test_no_state_change_fan_when_operation_mode_off_2 (line 1024) | async def test_no_state_change_fan_when_operation_mode_off_2( function test_no_state_cooler_fan_ac_change_when_operation_mode_off_2 (line 1036) | async def test_no_state_cooler_fan_ac_change_when_operation_mode_off_2( function test_no_state_cooler_fan_change_when_operation_mode_off_2 (line 1049) | async def test_no_state_cooler_fan_change_when_operation_mode_off_2( function test_temp_change_fan_trigger_long_enough (line 1064) | async def test_temp_change_fan_trigger_long_enough( function test_time_change_fan_trigger_long_enough (line 1113) | async def test_time_change_fan_trigger_long_enough( function test_mode_change_fan_trigger_not_long_enough (line 1151) | async def test_mode_change_fan_trigger_not_long_enough( function test_temp_change_cooler_fan_ac_trigger_on_long_enough (line 1170) | async def test_temp_change_cooler_fan_ac_trigger_on_long_enough( function test_time_change_cooler_fan_ac_trigger_on_long_enough (line 1220) | async def test_time_change_cooler_fan_ac_trigger_on_long_enough( function test_temp_change_cooler_fan_trigger_on_long_enough (line 1259) | async def test_temp_change_cooler_fan_trigger_on_long_enough( function test_time_change_cooler_fan_trigger_on_long_enough (line 1309) | async def test_time_change_cooler_fan_trigger_on_long_enough( function test_mode_change_cooler_fan_ac_trigger_off_not_long_enough (line 1348) | async def test_mode_change_cooler_fan_ac_trigger_off_not_long_enough( function test_mode_change_cooler_fan_trigger_off_not_long_enough (line 1368) | async def test_mode_change_cooler_fan_trigger_off_not_long_enough( function test_time_change_fan_trigger_keep_alive (line 1388) | async def test_time_change_fan_trigger_keep_alive( function test_time_change_ac_trigger_keep_alive (line 1430) | async def test_time_change_ac_trigger_keep_alive( function test_time_change_ac_fan_trigger_keep_alive (line 1471) | async def test_time_change_ac_fan_trigger_keep_alive( function test_fan_mode (line 1510) | async def test_fan_mode(hass: HomeAssistant, setup_comp_1) -> None: # n... function test_cooler_fan_cool_mode (line 1557) | async def test_cooler_fan_cool_mode( function test_cooler_fan_fan_mode (line 1611) | async def test_cooler_fan_fan_mode( function test_fan_mode_from_off_to_idle (line 1665) | async def test_fan_mode_from_off_to_idle( function test_cooler_fan_cooler_mode_from_off_to_idle (line 1713) | async def test_cooler_fan_cooler_mode_from_off_to_idle( function test_cooler_fan_fan_mode_from_off_to_idle (line 1763) | async def test_cooler_fan_fan_mode_from_off_to_idle( function test_fan_mode_tolerance (line 1813) | async def test_fan_mode_tolerance( function test_cooler_fan_cooler_mode_tolerance (line 1872) | async def test_cooler_fan_cooler_mode_tolerance( function test_cooler_fan_mode_tolerance (line 1938) | async def test_cooler_fan_mode_tolerance( function test_cooler_fan_ac_and_mode (line 2004) | async def test_cooler_fan_ac_and_mode( function test_fan_mode_cycle (line 2079) | async def test_fan_mode_cycle( function test_cooler_fan_mode_cycle (line 2147) | async def test_cooler_fan_mode_cycle( function test_hvac_mode_cool_fan_only (line 2220) | async def test_hvac_mode_cool_fan_only( function test_set_target_temp_ac_fan_on (line 2240) | async def test_set_target_temp_ac_fan_on( function test_set_target_temp_ac_on_tolerance_and_cycle (line 2258) | async def test_set_target_temp_ac_on_tolerance_and_cycle( function test_set_target_temp_ac_on_after_fan_tolerance (line 2341) | async def test_set_target_temp_ac_on_after_fan_tolerance( function test_set_target_temp_ac_on_dont_switch_to_fan_during_cycle1 (line 2367) | async def test_set_target_temp_ac_on_dont_switch_to_fan_during_cycle1( function test_set_target_temp_ac_on_dont_switch_to_fan_during_cycle2 (line 2401) | async def test_set_target_temp_ac_on_dont_switch_to_fan_during_cycle2( function test_set_target_temp_ac_on_dont_switch_to_fan_during_cycle3 (line 2421) | async def test_set_target_temp_ac_on_dont_switch_to_fan_during_cycle3( function test_set_target_temp_ac_on_after_fan_tolerance_2 (line 2459) | async def test_set_target_temp_ac_on_after_fan_tolerance_2( function test_set_target_temp_ac_on_after_fan_tolerance_toggle_off (line 2545) | async def test_set_target_temp_ac_on_after_fan_tolerance_toggle_off( function test_set_target_temp_ac_on_after_fan_tolerance_toggle_when_idle (line 2654) | async def test_set_target_temp_ac_on_after_fan_tolerance_toggle_when_idle( function test_set_target_temp_ac_on_ignore_fan_tolerance (line 2730) | async def test_set_target_temp_ac_on_ignore_fan_tolerance( function test_set_target_temp_ac_on_dont_ignore_fan_tolerance (line 2825) | async def test_set_target_temp_ac_on_dont_ignore_fan_tolerance( function test_fan_mode_opening_hvac_action_reason (line 2925) | async def test_fan_mode_opening_hvac_action_reason( function test_cooler_fan_mode_opening_hvac_action_reason (line 3048) | async def test_cooler_fan_mode_opening_hvac_action_reason( function test_fan_mode_opening (line 3182) | async def test_fan_mode_opening( function test_cooler_fan_mode_opening (line 3281) | async def test_cooler_fan_mode_opening( function test_cooler_fan_mode_opening_scope (line 3437) | async def test_cooler_fan_mode_opening_scope( FILE: tests/test_fan_speed_control.py function setup_fan_services (line 31) | def setup_fan_services(hass: HomeAssistant) -> list: function test_fan_mode_percentage_mappings_exist (line 51) | def test_fan_mode_percentage_mappings_exist(): function test_percentage_to_fan_mode_mapping (line 64) | def test_percentage_to_fan_mode_mapping(): function test_auto_mode_uses_100_percent_same_as_high (line 75) | def test_auto_mode_uses_100_percent_same_as_high(): function test_fan_device_detects_preset_modes (line 90) | async def test_fan_device_detects_preset_modes(hass: HomeAssistant): function test_fan_device_detects_percentage_support (line 127) | async def test_fan_device_detects_percentage_support(hass: HomeAssistant): function test_fan_device_switch_no_speed_control (line 160) | async def test_fan_device_switch_no_speed_control(hass: HomeAssistant): function test_fan_device_missing_entity_no_speed_control (line 186) | async def test_fan_device_missing_entity_no_speed_control(hass: HomeAssi... function test_set_fan_mode_invalid_mode (line 210) | async def test_set_fan_mode_invalid_mode(hass: HomeAssistant): function test_set_fan_mode_unsupported_device (line 246) | async def test_set_fan_mode_unsupported_device(hass: HomeAssistant): function test_turn_on_applies_fan_mode_preset (line 278) | async def test_turn_on_applies_fan_mode_preset(hass: HomeAssistant): function test_turn_on_applies_fan_mode_percentage (line 335) | async def test_turn_on_applies_fan_mode_percentage(hass: HomeAssistant): function test_turn_on_without_fan_mode_set (line 391) | async def test_turn_on_without_fan_mode_set(hass: HomeAssistant): function test_turn_on_switch_device_no_fan_mode_applied (line 436) | async def test_turn_on_switch_device_no_fan_mode_applied(hass: HomeAssis... function test_turn_on_handles_fan_mode_service_failure_preset (line 471) | async def test_turn_on_handles_fan_mode_service_failure_preset( function test_turn_on_handles_fan_mode_service_failure_percentage (line 534) | async def test_turn_on_handles_fan_mode_service_failure_percentage( function test_feature_manager_supports_fan_mode_with_preset_modes (line 599) | async def test_feature_manager_supports_fan_mode_with_preset_modes(hass:... function test_feature_manager_supports_fan_mode_with_percentage (line 645) | async def test_feature_manager_supports_fan_mode_with_percentage(hass: H... function test_feature_manager_no_fan_mode_support_switch (line 690) | async def test_feature_manager_no_fan_mode_support_switch(hass: HomeAssi... function test_feature_manager_fan_device_none (line 729) | async def test_feature_manager_fan_device_none(hass: HomeAssistant): function test_climate_supported_features_includes_fan_mode_when_supported (line 752) | async def test_climate_supported_features_includes_fan_mode_when_supported( function test_climate_supported_features_excludes_fan_mode_when_switch (line 821) | async def test_climate_supported_features_excludes_fan_mode_when_switch( function test_climate_supported_features_excludes_fan_mode_when_no_fan (line 883) | async def test_climate_supported_features_excludes_fan_mode_when_no_fan( function test_climate_fan_mode_property_returns_current_mode (line 941) | async def test_climate_fan_mode_property_returns_current_mode(hass: Home... function test_climate_fan_mode_property_none_when_not_supported (line 1005) | async def test_climate_fan_mode_property_none_when_not_supported(hass: H... function test_climate_fan_modes_property_returns_available_modes (line 1062) | async def test_climate_fan_modes_property_returns_available_modes(hass: ... function test_climate_fan_modes_property_none_when_not_supported (line 1126) | async def test_climate_fan_modes_property_none_when_not_supported(hass: ... function test_climate_async_set_fan_mode_service (line 1183) | async def test_climate_async_set_fan_mode_service(hass: HomeAssistant): function test_climate_async_set_fan_mode_updates_state (line 1255) | async def test_climate_async_set_fan_mode_updates_state(hass: HomeAssist... function test_climate_async_set_fan_mode_when_not_supported (line 1330) | async def test_climate_async_set_fan_mode_when_not_supported(hass: HomeA... function test_fan_mode_appears_in_extra_state_attributes (line 1396) | async def test_fan_mode_appears_in_extra_state_attributes(hass: HomeAssi... function test_fan_mode_not_in_attributes_when_not_supported (line 1470) | async def test_fan_mode_not_in_attributes_when_not_supported(hass: HomeA... function test_fan_mode_restored_after_restart (line 1528) | async def test_fan_mode_restored_after_restart(hass: HomeAssistant): function test_fan_mode_restoration_when_old_state_has_no_fan_mode (line 1613) | async def test_fan_mode_restoration_when_old_state_has_no_fan_mode(hass:... function test_fan_mode_restoration_when_fan_device_does_not_support_mode (line 1696) | async def test_fan_mode_restoration_when_fan_device_does_not_support_mode( function test_fan_activates_with_restored_fan_mode (line 1770) | async def test_fan_activates_with_restored_fan_mode(hass: HomeAssistant): FILE: tests/test_heat_pump_mode.py function test_unique_id (line 50) | async def test_unique_id( function test_setup_defaults_to_unknown (line 94) | async def test_setup_defaults_to_unknown(hass: HomeAssistant) -> None: ... function test_setup_gets_current_temperature_from_sensor (line 115) | async def test_setup_gets_current_temperature_from_sensor( function setup_comp_heat_pump (line 148) | async def setup_comp_heat_pump(hass: HomeAssistant) -> None: function test_get_hvac_modes (line 186) | async def test_get_hvac_modes( function test_heat_pump_with_fan_exposes_fan_only_mode (line 237) | async def test_heat_pump_with_fan_exposes_fan_only_mode( function test_heat_pump_with_fan_fan_only_mode_runs_fan_only (line 277) | async def test_heat_pump_with_fan_fan_only_mode_runs_fan_only( function setup_comp_heat_pump_presets (line 334) | async def setup_comp_heat_pump_presets(hass: HomeAssistant) -> None: function setup_comp_heat_pump_heat_cool_presets (line 380) | async def setup_comp_heat_pump_heat_cool_presets(hass: HomeAssistant) ->... function test_set_preset_mode (line 456) | async def test_set_preset_mode( function test_set_preset_mode_heat_cool (line 483) | async def test_set_preset_mode_heat_cool( function test_set_preset_mode_and_restore_prev_temp (line 513) | async def test_set_preset_mode_and_restore_prev_temp( function test_set_preset_mode_heat_cool_and_restore_prev_temp (line 544) | async def test_set_preset_mode_heat_cool_and_restore_prev_temp( function test_set_preset_mode_twice_and_restore_prev_temp (line 579) | async def test_set_preset_mode_twice_and_restore_prev_temp( function test_set_preset_mode_heat_cool_twice_and_restore_prev_temp (line 611) | async def test_set_preset_mode_heat_cool_twice_and_restore_prev_temp( function test_set_preset_mode_invalid (line 633) | async def test_set_preset_mode_invalid( function test_set_preset_mode_set_temp_keeps_preset_mode (line 665) | async def test_set_preset_mode_set_temp_keeps_preset_mode( function test_set_preset_mode_heat_cool_set_temp_keeps_preset_mode (line 712) | async def test_set_preset_mode_heat_cool_set_temp_keeps_preset_mode( function test_toggle (line 789) | async def test_toggle( function test_hvac_mode_cool (line 817) | async def test_hvac_mode_cool( function test_hvac_mode_heat (line 840) | async def test_hvac_mode_heat( function test_hvac_mode_heat_switches_to_cool (line 863) | async def test_hvac_mode_heat_switches_to_cool( function test_hvac_mode_cool_switches_to_heat (line 907) | async def test_hvac_mode_cool_switches_to_heat( function test_heat_cool_mode_switches_between_heat_cool_tolerances (line 956) | async def test_heat_cool_mode_switches_between_heat_cool_tolerances( function test_heat_pump_initial_hvac_mode_applied (line 1084) | async def test_heat_pump_initial_hvac_mode_applied( FILE: tests/test_heat_pump_mode_behavioral.py function test_heat_pump_heating_threshold_with_default_tolerance (line 23) | async def test_heat_pump_heating_threshold_with_default_tolerance(hass: ... function test_heat_pump_cooling_threshold_with_default_tolerance (line 106) | async def test_heat_pump_cooling_threshold_with_default_tolerance(hass: ... function test_heat_pump_custom_tolerance_heating (line 189) | async def test_heat_pump_custom_tolerance_heating(hass: HomeAssistant): function test_heat_pump_custom_tolerance_cooling (line 273) | async def test_heat_pump_custom_tolerance_cooling(hass: HomeAssistant): function test_heat_pump_zero_tolerance (line 357) | async def test_heat_pump_zero_tolerance(hass: HomeAssistant): FILE: tests/test_heater_mode.py function test_unique_id (line 88) | async def test_unique_id( function test_setup_defaults_to_unknown (line 128) | async def test_setup_defaults_to_unknown(hass: HomeAssistant) -> None: ... function test_setup_gets_current_temp_from_sensor (line 148) | async def test_setup_gets_current_temp_from_sensor( function test_default_setup_params (line 174) | async def test_default_setup_params( function test_restore_state (line 189) | async def test_restore_state(hass: HomeAssistant, hvac_mode) -> None: function test_no_restore_state (line 224) | async def test_no_restore_state(hass: HomeAssistant) -> None: function test_reload (line 264) | async def test_reload(hass: HomeAssistant) -> None: function test_custom_setup_params (line 299) | async def test_custom_setup_params(hass: HomeAssistant) -> None: function test_sensor_bad_value (line 331) | async def test_sensor_bad_value( function test_sensor_unknown (line 354) | async def test_sensor_unknown(hass: HomeAssistant) -> None: # noqa: F811 function test_sensor_unavailable (line 374) | async def test_sensor_unavailable(hass: HomeAssistant) -> None: # noqa:... function test_floor_sensor_bad_value (line 394) | async def test_floor_sensor_bad_value( function test_floor_sensor_unknown (line 417) | async def test_floor_sensor_unknown(hass: HomeAssistant) -> None: # noq... function test_floor_sensor_unavailable (line 440) | async def test_floor_sensor_unavailable(hass: HomeAssistant) -> None: #... function test_heater_unknown_to_available (line 463) | async def test_heater_unknown_to_available( function test_get_hvac_modes (line 547) | async def test_get_hvac_modes( function test_set_target_temp (line 556) | async def test_set_target_temp( function test_set_target_temp_and_hvac_mode (line 569) | async def test_set_target_temp_and_hvac_mode( function test_set_preset_mode (line 604) | async def test_set_preset_mode( function test_set_preset_mode_and_restore_prev_temp (line 628) | async def test_set_preset_mode_and_restore_prev_temp( function test_set_preset_modet_twice_and_restore_prev_temp (line 658) | async def test_set_preset_modet_twice_and_restore_prev_temp( function test_set_preset_mode_invalid (line 675) | async def test_set_preset_mode_invalid( function test_set_preset_mode_set_temp_keeps_preset_mode (line 706) | async def test_set_preset_mode_set_temp_keeps_preset_mode( function test_set_same_preset_mode_restores_preset_temp_from_modified (line 746) | async def test_set_same_preset_mode_restores_preset_temp_from_modified( function test_toggle (line 785) | async def test_toggle( function test_sensor_chhange_dont_control_heater_when_off (line 806) | async def test_sensor_chhange_dont_control_heater_when_off( function test_set_target_temp_heater_on (line 828) | async def test_set_target_temp_heater_on( function test_set_target_temp_heater_off (line 844) | async def test_set_target_temp_heater_off( function test_set_target_temp_heater_valve_open (line 859) | async def test_set_target_temp_heater_valve_open( function test_set_target_temp_heater_valve_close (line 874) | async def test_set_target_temp_heater_valve_close( function test_temp_change_heater_on_within_tolerance (line 889) | async def test_temp_change_heater_on_within_tolerance( function test_temp_change_heater_on_outside_tolerance (line 900) | async def test_temp_change_heater_on_outside_tolerance( function test_temp_change_heater_off_within_tolerance (line 915) | async def test_temp_change_heater_off_within_tolerance( function test_temp_change_heater_off_outside_tolerance (line 926) | async def test_temp_change_heater_off_outside_tolerance( function test_sensor_unknown_secure_heater_off_outside_stale_duration (line 946) | async def test_sensor_unknown_secure_heater_off_outside_stale_duration( function test_sensor_unknown_secure_heater_off_outside_stale_duration_reason (line 988) | async def test_sensor_unknown_secure_heater_off_outside_stale_duration_r... function test_sensor_restores_after_state_changes (line 1022) | async def test_sensor_restores_after_state_changes( function test_running_when_hvac_mode_is_off (line 1061) | async def test_running_when_hvac_mode_is_off( function test_no_state_change_when_hvac_mode_off (line 1075) | async def test_no_state_change_when_hvac_mode_off( function test_hvac_mode_heat (line 1087) | async def test_hvac_mode_heat( function test_temp_change_heater_trigger_long_enough_xx (line 1110) | async def test_temp_change_heater_trigger_long_enough_xx( function test_time_change_heater_trigger_long_enough (line 1159) | async def test_time_change_heater_trigger_long_enough( function test_mode_change_heater_trigger_not_long_enough (line 1197) | async def test_mode_change_heater_trigger_not_long_enough( function test_initial_hvac_off_force_heater_off (line 1242) | async def test_initial_hvac_off_force_heater_off(hass: HomeAssistant) ->... function test_restore_will_turn_off_ (line 1280) | async def test_restore_will_turn_off_(hass: HomeAssistant) -> None: function test_restore_state_uncoherence_case (line 1388) | async def test_restore_state_uncoherence_case(hass: HomeAssistant) -> None: function test_heater_mode_from_off_to_idle (line 1428) | async def test_heater_mode_from_off_to_idle( function test_cooler_mode_off_switch_change_keeps_off (line 1475) | async def test_cooler_mode_off_switch_change_keeps_off( function test_heater_mode_aux_heater (line 1524) | async def test_heater_mode_aux_heater( function test_heater_mode_aux_heater_keep_primary_heater_on (line 1612) | async def test_heater_mode_aux_heater_keep_primary_heater_on( function test_heater_mode_tolerance (line 1701) | async def test_heater_mode_tolerance( function test_heater_mode_floor_temp (line 1763) | async def test_heater_mode_floor_temp( function test_heater_mode_floor_temp_presets (line 1857) | async def test_heater_mode_floor_temp_presets( function test_hvac_action_reason_default (line 2118) | async def test_hvac_action_reason_default( function test_hvac_action_reason_service (line 2126) | async def test_hvac_action_reason_service( function test_heater_mode_floor_temp_hvac_action_reason (line 2149) | async def test_heater_mode_floor_temp_hvac_action_reason( function test_heater_mode_opening_hvac_action_reason (line 2270) | async def test_heater_mode_opening_hvac_action_reason( function test_heater_mode_cycle (line 2397) | async def test_heater_mode_cycle( function test_heater_mode_opening (line 2454) | async def test_heater_mode_opening( function _mock_restore_cache (line 2545) | def _mock_restore_cache(hass, temperature=20, hvac_mode=HVACMode.OFF): function test_heater_mode_opening_scope (line 2566) | async def test_heater_mode_opening_scope( function test_legacy_config_heat_mode_behaves_identically (line 2651) | async def test_legacy_config_heat_mode_behaves_identically( function test_aux_heater_turns_off_with_primary_at_target_non_dual (line 2713) | async def test_aux_heater_turns_off_with_primary_at_target_non_dual( function test_aux_heater_dual_mode_both_turn_off_together (line 2803) | async def test_aux_heater_dual_mode_both_turn_off_together( function test_aux_heater_dual_mode_secondary_not_left_on (line 2892) | async def test_aux_heater_dual_mode_secondary_not_left_on( function test_aux_heater_dual_mode_heat_cool_mode_both_stay_on (line 2983) | async def test_aux_heater_dual_mode_heat_cool_mode_both_stay_on( FILE: tests/test_heater_mode_behavioral.py function test_heater_threshold_boundary_with_default_tolerance (line 22) | async def test_heater_threshold_boundary_with_default_tolerance(hass: Ho... function test_heater_threshold_boundary_with_custom_tolerance (line 102) | async def test_heater_threshold_boundary_with_custom_tolerance(hass: Hom... function test_heater_zero_tolerance_exact_threshold (line 181) | async def test_heater_zero_tolerance_exact_threshold(hass: HomeAssistant): FILE: tests/test_hvac_action_reason_sensor.py function test_hvac_action_reason_auto_values_exist (line 35) | def test_hvac_action_reason_auto_values_exist() -> None: function test_hvac_action_reason_aggregate_includes_auto_values (line 42) | def test_hvac_action_reason_aggregate_includes_auto_values() -> None: function test_sensor_signal_constant_has_placeholder (line 49) | def test_sensor_signal_constant_has_placeholder() -> None: function test_sensor_entity_defaults (line 58) | def test_sensor_entity_defaults() -> None: function test_sensor_options_contains_all_reason_values (line 71) | def test_sensor_options_contains_all_reason_values() -> None: function test_sensor_updates_state_on_valid_signal (line 88) | async def test_sensor_updates_state_on_valid_signal(hass: HomeAssistant)... function test_sensor_ignores_invalid_signal_value (line 106) | async def test_sensor_ignores_invalid_signal_value(hass: HomeAssistant, ... function test_sensor_created_alongside_climate_yaml (line 137) | async def test_sensor_created_alongside_climate_yaml( function test_sensor_mirrors_external_service_call (line 148) | async def test_sensor_mirrors_external_service_call( function test_sensor_restores_last_state (line 163) | async def test_sensor_restores_last_state(hass: HomeAssistant) -> None: FILE: tests/test_hvac_action_reason_service.py function test_service_set_hvac_action_reason_presence (line 17) | async def test_service_set_hvac_action_reason_presence( function test_service_set_hvac_action_reason_schedule (line 43) | async def test_service_set_hvac_action_reason_schedule( function test_service_set_hvac_action_reason_emergency (line 69) | async def test_service_set_hvac_action_reason_emergency( function test_service_set_hvac_action_reason_malfunction (line 95) | async def test_service_set_hvac_action_reason_malfunction( function test_service_set_hvac_action_reason_invalid (line 121) | async def test_service_set_hvac_action_reason_invalid( function test_service_set_hvac_action_reason_empty_string_rejected (line 141) | async def test_service_set_hvac_action_reason_empty_string_rejected( function test_service_set_hvac_action_reason_no_entity_id (line 171) | async def test_service_set_hvac_action_reason_no_entity_id( function test_service_set_hvac_action_reason_state_persistence (line 190) | async def test_service_set_hvac_action_reason_state_persistence( function test_service_set_hvac_action_reason_overwrite (line 209) | async def test_service_set_hvac_action_reason_overwrite( FILE: tests/test_init.py function setup_component (line 6) | async def setup_component(hass: HomeAssistant) -> None: FILE: tests/test_logger_multiple_instances.py function test_multiple_thermostats_logger_names (line 20) | async def test_multiple_thermostats_logger_names(hass: HomeAssistant, ca... function test_logger_name_not_overridden (line 129) | async def test_logger_name_not_overridden(hass: HomeAssistant): FILE: tests/test_presets_schema.py function name_of (line 7) | def name_of(k): function test_get_presets_schema_single_mode (line 15) | def test_get_presets_schema_single_mode(): function test_get_presets_schema_range_mode (line 46) | def test_get_presets_schema_range_mode(): FILE: tests/unit/test_config_validation_integration.py function mock_hass (line 13) | def mock_hass(): class TestConfigFlowValidation (line 20) | class TestConfigFlowValidation: method test_config_flow_validates_on_create_entry (line 24) | async def test_config_flow_validates_on_create_entry(self, mock_hass): method test_config_flow_logs_warning_on_invalid_config (line 49) | async def test_config_flow_logs_warning_on_invalid_config(self, mock_h... method test_config_flow_import_validates_config (line 77) | async def test_config_flow_import_validates_config(self, mock_hass): class TestOptionsFlowValidation (line 100) | class TestOptionsFlowValidation: method test_options_flow_validates_config (line 104) | async def test_options_flow_validates_config(self): FILE: tests/unit/test_heat_pump_schema.py class TestHeatPumpSchema (line 22) | class TestHeatPumpSchema: method test_schema_with_include_name_true_includes_name_field (line 25) | def test_schema_with_include_name_true_includes_name_field(self): method test_schema_with_include_name_false_omits_name_field (line 41) | def test_schema_with_include_name_false_omits_name_field(self): method test_schema_with_defaults_prefills_values_correctly (line 56) | def test_schema_with_defaults_prefills_values_correctly(self): method test_schema_fields_use_correct_selectors (line 85) | def test_schema_fields_use_correct_selectors(self): method test_heat_pump_cooling_accepts_entity_id (line 97) | def test_heat_pump_cooling_accepts_entity_id(self): method test_optional_entity_fields_use_vol_undefined (line 122) | def test_optional_entity_fields_use_vol_undefined(self): method test_advanced_settings_section_structure (line 139) | def test_advanced_settings_section_structure(self): method test_schema_defaults_match_constants (line 154) | def test_schema_defaults_match_constants(self): method test_heat_pump_cooling_defaults_to_undefined (line 170) | def test_heat_pump_cooling_defaults_to_undefined(self): method test_required_fields_are_marked_required (line 189) | def test_required_fields_are_marked_required(self): method test_heat_pump_cooling_entity_selector_functionality (line 214) | def test_heat_pump_cooling_entity_selector_functionality(self): FILE: tests/unit/test_heater_cooler_schema.py class TestHeaterCoolerSchema (line 23) | class TestHeaterCoolerSchema: method test_schema_with_include_name_true_includes_name_field (line 26) | def test_schema_with_include_name_true_includes_name_field(self): method test_schema_with_include_name_false_omits_name_field (line 43) | def test_schema_with_include_name_false_omits_name_field(self): method test_schema_with_defaults_prefills_values_correctly (line 59) | def test_schema_with_defaults_prefills_values_correctly(self): method test_schema_fields_use_correct_selectors (line 89) | def test_schema_fields_use_correct_selectors(self): method test_optional_entity_fields_use_vol_undefined (line 101) | def test_optional_entity_fields_use_vol_undefined(self): method test_advanced_settings_section_structure (line 118) | def test_advanced_settings_section_structure(self): method test_schema_defaults_match_constants (line 133) | def test_schema_defaults_match_constants(self): method test_heat_cool_mode_defaults_to_false (line 149) | def test_heat_cool_mode_defaults_to_false(self): method test_required_fields_are_marked_required (line 164) | def test_required_fields_are_marked_required(self): FILE: tests/unit/test_models.py class TestCoreSettings (line 20) | class TestCoreSettings: method test_simple_heater_core_settings_to_dict (line 23) | def test_simple_heater_core_settings_to_dict(self): method test_simple_heater_core_settings_from_dict (line 43) | def test_simple_heater_core_settings_from_dict(self): method test_ac_only_core_settings_defaults (line 61) | def test_ac_only_core_settings_defaults(self): method test_heater_cooler_core_settings_roundtrip (line 73) | def test_heater_cooler_core_settings_roundtrip(self): method test_heat_pump_core_settings_with_entity_id (line 94) | def test_heat_pump_core_settings_with_entity_id(self): method test_heat_pump_core_settings_with_boolean (line 106) | def test_heat_pump_core_settings_with_boolean(self): class TestFeatureSettings (line 119) | class TestFeatureSettings: method test_fan_feature_settings_defaults (line 122) | def test_fan_feature_settings_defaults(self): method test_fan_feature_settings_roundtrip (line 131) | def test_fan_feature_settings_roundtrip(self): method test_humidity_feature_settings_defaults (line 148) | def test_humidity_feature_settings_defaults(self): method test_humidity_feature_settings_roundtrip (line 160) | def test_humidity_feature_settings_roundtrip(self): method test_opening_config_roundtrip (line 183) | def test_opening_config_roundtrip(self): method test_openings_feature_settings_empty (line 198) | def test_openings_feature_settings_empty(self): method test_openings_feature_settings_roundtrip (line 205) | def test_openings_feature_settings_roundtrip(self): method test_floor_heating_feature_settings_defaults (line 224) | def test_floor_heating_feature_settings_defaults(self): method test_floor_heating_feature_settings_roundtrip (line 232) | def test_floor_heating_feature_settings_roundtrip(self): method test_presets_feature_settings_empty (line 247) | def test_presets_feature_settings_empty(self): method test_presets_feature_settings_roundtrip (line 253) | def test_presets_feature_settings_roundtrip(self): class TestThermostatConfig (line 265) | class TestThermostatConfig: method test_simple_heater_config_minimal (line 268) | def test_simple_heater_config_minimal(self): method test_simple_heater_config_roundtrip (line 286) | def test_simple_heater_config_roundtrip(self): method test_ac_only_config_roundtrip (line 307) | def test_ac_only_config_roundtrip(self): method test_heater_cooler_config_with_features (line 326) | def test_heater_cooler_config_with_features(self): method test_heat_pump_config_with_all_features (line 358) | def test_heat_pump_config_with_all_features(self): method test_invalid_system_type_raises_error (line 401) | def test_invalid_system_type_raises_error(self): method test_config_preserves_none_values (line 414) | def test_config_preserves_none_values(self): FILE: tests/unit/test_schema_utils.py class TestGetToleranceSelector (line 22) | class TestGetToleranceSelector: method test_tolerance_selector_celsius_no_conversion (line 33) | def test_tolerance_selector_celsius_no_conversion(self): method test_tolerance_selector_fahrenheit_scales_delta_values (line 51) | def test_tolerance_selector_fahrenheit_scales_delta_values(self): method test_tolerance_selector_fahrenheit_default_tolerance_range (line 75) | def test_tolerance_selector_fahrenheit_default_tolerance_range(self): method test_tolerance_selector_fahrenheit_step_allows_round_values (line 94) | def test_tolerance_selector_fahrenheit_step_allows_round_values(self): method test_tolerance_selector_fahrenheit_options_flow_step (line 123) | def test_tolerance_selector_fahrenheit_options_flow_step(self): method test_tolerance_selector_no_hass_uses_generic_degree (line 143) | def test_tolerance_selector_no_hass_uses_generic_degree(self): class TestGetTemperatureSelector (line 154) | class TestGetTemperatureSelector: method test_temperature_selector_celsius_no_conversion (line 161) | def test_temperature_selector_celsius_no_conversion(self): method test_temperature_selector_fahrenheit_converts_absolute (line 176) | def test_temperature_selector_fahrenheit_converts_absolute(self): class TestToleranceVsTemperatureComparison (line 198) | class TestToleranceVsTemperatureComparison: method test_zero_value_behaves_differently (line 206) | def test_zero_value_behaves_differently(self): class TestGetCoreSchemaToleranceSelectors (line 229) | class TestGetCoreSchemaToleranceSelectors: method test_cold_tolerance_uses_tolerance_selector_not_percentage (line 238) | def test_cold_tolerance_uses_tolerance_selector_not_percentage(self, s... method test_hot_tolerance_uses_tolerance_selector_not_percentage (line 269) | def test_hot_tolerance_uses_tolerance_selector_not_percentage(self, sy... method test_cold_tolerance_fahrenheit_uses_scaled_delta (line 296) | def test_cold_tolerance_fahrenheit_uses_scaled_delta(self, system_type): FILE: tools/clean_db.py function clean_entity_registry (line 8) | def clean_entity_registry(): function clean_device_registry (line 34) | def clean_device_registry(): function clean_restore_state (line 67) | def clean_restore_state(): FILE: tools/config_validator.py class ConfigValidator (line 14) | class ConfigValidator: method __init__ (line 25) | def __init__(self): method validate_config (line 67) | def validate_config( method suggest_fixes (line 112) | def suggest_fixes(self, config: Dict[str, Any]) -> List[str]: method get_feature_groups (line 126) | def get_feature_groups(self, config: Dict[str, Any]) -> Dict[str, Dict]: function validate_yaml_config (line 194) | def validate_yaml_config(yaml_content: str) -> None: function main (line 255) | def main(): FILE: tools/focused_config_dependencies.py class DependencyType (line 15) | class DependencyType(Enum): class ConfigParameter (line 25) | class ConfigParameter: class ConfigDependency (line 37) | class ConfigDependency: class FocusedConfigDependencies (line 47) | class FocusedConfigDependencies: method __init__ (line 50) | def __init__(self): method _initialize_critical_dependencies (line 55) | def _initialize_critical_dependencies(self): method get_conditional_parameters (line 254) | def get_conditional_parameters(self) -> Dict[str, List[str]]: method get_parameter_condition (line 266) | def get_parameter_condition(self, param_name: str) -> Optional[str]: method generate_conditional_guide (line 276) | def generate_conditional_guide(self) -> Dict: function main (line 393) | def main():