Repository Analysis

al-one/hass-xiaomi-miot

Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices. 小米米家智能家居设备接入Hass集成

8.4 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of al-one/hass-xiaomi-miot, a Python project with 6,046 GitHub stars. SynthScan v2.0 examined 40,743 lines of code across 106 source files, recording 329 pattern matches distributed across 8 syntactic categories. The overall adjusted score of 8.4 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

8.4
Adjusted Score
8.4
Raw Score
100%
Time Factor
2026-07-31
Last Push
6.0K
Stars
Python
Language
40.7K
Lines of Code
106
Files
329
Pattern Hits
2026-08-02
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 0MEDIUM 3LOW 326

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 329 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers168 hits · 179 pts
SeverityFileLineSnippetContext
LOWtests/test_cloud_auth_verify.py16async def test_verify_ticket_missing_url_raises_micloud(hass):CODE
LOWtests/test_cloud_auth_verify.py23async def test_verify_ticket_missing_identity_session_raises_micloud(hass):CODE
LOWtests/test_cloud_auth_verify.py36async def test_verify_ticket_non_zero_each_method_raises_verification(hass):CODE
LOWtests/test_cloud_auth_verify.py48async def test_verify_ticket_success_returns_data(hass):CODE
LOWtests/test_cloud_auth_verify.py61async def test_verify_ticket_no_supported_method_raises_micloud(hass):CODE
LOWtests/test_cloud_auth_verify.py71async def test_verify_ticket_pins_trust_false_and_payload(hass):CODE
LOWtests/conftest.py17def auto_enable_custom_integrations(enable_custom_integrations):CODE
LOWtests/test_cnhdm_airrtc_wkq01.py28def test_exact_model_converter_mapping(make_device, load_miot_spec):CODE
LOWtests/test_cnhdm_airrtc_wkq01.py75def test_parent_entity_metadata_and_identity(make_device, load_miot_spec):CODE
LOWtests/test_cnhdm_airrtc_wkq01.py159def test_air_conditioner_modes_and_ventilation_preset(make_device, load_miot_spec):CODE
LOWtests/test_cnhdm_airrtc_wkq01.py171def test_floor_heating_power_state_and_partial_updates(make_device, load_miot_spec):CODE
LOWtests/test_cnhdm_airrtc_wkq01.py209async def test_floor_heating_writes_only_assigned_properties(make_device, load_miot_spec):CODE
LOWtests/test_cnhdm_airrtc_wkq01.py234async def test_air_conditioner_writes_only_assigned_properties(make_device, load_miot_spec):CODE
LOWtests/test_cnhdm_airrtc_wkq01.py277def test_fresh_air_speed_mapping(make_device, load_miot_spec):CODE
LOWtests/test_cnhdm_airrtc_wkq01.py299async def test_fresh_air_write_matrix(make_device, load_miot_spec):CODE
LOWtests/test_cnhdm_airrtc_wkq01.py359async def test_registry_preserves_air_conditioner_identity_across_reload(CODE
LOWtests/test_reauth_flow.py27async def test_reauth_unsupported_sid_aborts(flow_cls):CODE
LOWtests/test_reauth_flow.py46async def test_reauth_default_xiaomiio_when_init_data_omits_sid(flow_cls):CODE
LOWtests/test_reauth_flow.py67def test_async_remove_is_callback(flow_cls):CODE
LOWtests/test_reauth_flow.py72async def test_async_remove_clears_candidate(flow_cls):CODE
LOWtests/test_reauth_flow.py87async def test_reauth_password_invalid_auth_returns_invalid_auth(flow_cls):CODE
LOWtests/test_reauth_flow.py115async def test_reauth_password_need_verify_routes_to_verify(flow_cls):CODE
LOWtests/test_reauth_flow.py148async def test_reauth_password_wrong_account_aborts(flow_cls):CODE
LOWtests/test_reauth_flow.py177async def test_reauth_verify_empty_ticket_keeps_form_with_need_verify(flow_cls):CODE
LOWtests/test_reauth_flow.py198async def test_reauth_verify_verification_error_keeps_form(flow_cls):CODE
LOWtests/test_reauth_flow.py218async def test_reauth_verify_micoapi_sts_retry_runs_once(flow_cls):CODE
LOWtests/test_reauth_flow.py258async def test_reauth_verify_micoapi_second_sts_returns_unknown(flow_cls):CODE
LOWtests/test_reauth_flow.py287async def test_reauth_captcha_empty_keeps_form(flow_cls):CODE
LOWtests/test_reauth_flow.py312async def test_reauth_captcha_replaced_image_stays_with_need_captcha(flow_cls):CODE
LOWtests/test_reauth_flow.py339async def test_reauth_captcha_auth_error_without_challenge_returns_password(flow_cls):CODE
LOWtests/test_reauth_flow.py363async def test_persist_xiaomiio_updates_entry_invalidates_and_reloads(flow_cls):CODE
LOWtests/test_reauth_flow.py430async def test_persist_unchanged_with_listeners_skips_reload(flow_cls):CODE
LOWtests/test_reauth_flow.py484async def test_persist_micoapi_does_not_store_micoapi_tokens_in_entry(flow_cls):CODE
LOWtests/test_reauth_flow.py534async def test_persist_store_failure_returns_save_failed(flow_cls):CODE
LOWtests/test_reauth_flow.py574async def test_reauth_password_form_exposes_only_tip(flow_cls):CODE
LOWtests/test_reauth_flow.py585async def test_reauth_verify_form_exposes_only_tip_and_url(flow_cls):CODE
LOWtests/test_reauth_flow.py599async def test_reauth_captcha_form_exposes_only_tip_and_image(flow_cls):CODE
LOWtests/test_hass_entry_cloud.py31async def test_first_get_cloud_creates_xiaomiio(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py44async def test_concurrent_get_cloud_xiaomiio_only_creates_once(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py63async def test_get_cloud_micoapi_runs_single_probe(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py76async def test_get_cloud_micoapi_caches_terminal_none(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py96async def test_imic_com_has_no_micoapi_probe(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py109async def test_get_cloud_string_sid_coerced(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py121async def test_cloud_property_returns_xiaomiio_slot(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py134async def test_get_cloud_login_false_skips_login(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py146async def test_async_change_sid_delegates_to_async_get_cloud(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py158async def test_async_unload_clears_clouds_map(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py175async def test_auth_failed_xiaomiio_loaded_starts_reauth(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py186async def test_auth_failed_micoapi_loaded_starts_reauth(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py197async def test_auth_failed_string_sid_coerced(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py208async def test_auth_failed_imicom_does_not_start(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py219async def test_auth_failed_setup_progress_only_micoapi(entry, hass):CODE
LOWtests/test_hass_entry_cloud.py232async def test_auth_failed_unloaded_returns_silently(hass):CODE
LOWtests/test_hass_entry_cloud.py244async def test_auth_failed_setup_progress_xiaomiio_does_not_start(entry, hass):CODE
LOWtests/test_cloud_auth_login.py31async def test_async_login_attempt_does_not_register_session(hass):CODE
LOWtests/test_cloud_auth_login.py40async def test_async_login_ownerless_registers_session(hass):CODE
LOWtests/test_cloud_auth_login.py49async def test_async_login_owner_bound_skips_session(hass):CODE
LOWtests/test_cloud_auth_login.py59async def test_async_login_failure_returns_false(hass):CODE
LOWtests/test_cloud_auth_login.py69async def test_too_many_logins_raises_micloud_exception(hass):CODE
LOWtests/test_cloud_auth_login.py79async def test_login_verify_fe_skip_url_returns_success(hass):CODE
108 more matches not shown…
Deep Nesting63 hits · 63 pts
SeverityFileLineSnippetContext
LOWcustom_components/xiaomi_miot/cover.py64CODE
LOWcustom_components/xiaomi_miot/cover.py139CODE
LOWcustom_components/xiaomi_miot/sensor.py44CODE
LOWcustom_components/xiaomi_miot/sensor.py73CODE
LOWcustom_components/xiaomi_miot/sensor.py133CODE
LOWcustom_components/xiaomi_miot/sensor.py202CODE
LOWcustom_components/xiaomi_miot/sensor.py268CODE
LOWcustom_components/xiaomi_miot/alarm_control_panel.py76CODE
LOWcustom_components/xiaomi_miot/fan.py73CODE
LOWcustom_components/xiaomi_miot/fan.py133CODE
LOWcustom_components/xiaomi_miot/fan.py167CODE
LOWcustom_components/xiaomi_miot/light.py72CODE
LOWcustom_components/xiaomi_miot/remote.py96CODE
LOWcustom_components/xiaomi_miot/remote.py143CODE
LOWcustom_components/xiaomi_miot/humidifier.py46CODE
LOWcustom_components/xiaomi_miot/media_player.py92CODE
LOWcustom_components/xiaomi_miot/media_player.py411CODE
LOWcustom_components/xiaomi_miot/media_player.py615CODE
LOWcustom_components/xiaomi_miot/media_player.py850CODE
LOWcustom_components/xiaomi_miot/__init__.py472CODE
LOWcustom_components/xiaomi_miot/__init__.py474CODE
LOWcustom_components/xiaomi_miot/__init__.py881CODE
LOWcustom_components/xiaomi_miot/__init__.py1181CODE
LOWcustom_components/xiaomi_miot/vacuum.py41CODE
LOWcustom_components/xiaomi_miot/vacuum.py118CODE
LOWcustom_components/xiaomi_miot/vacuum.py259CODE
LOWcustom_components/xiaomi_miot/camera.py59CODE
LOWcustom_components/xiaomi_miot/camera.py366CODE
LOWcustom_components/xiaomi_miot/camera.py409CODE
LOWcustom_components/xiaomi_miot/camera.py469CODE
LOWcustom_components/xiaomi_miot/text.py48CODE
LOWcustom_components/xiaomi_miot/binary_sensor.py43CODE
LOWcustom_components/xiaomi_miot/binary_sensor.py161CODE
LOWcustom_components/xiaomi_miot/binary_sensor.py219CODE
LOWcustom_components/xiaomi_miot/binary_sensor.py317CODE
LOWcustom_components/xiaomi_miot/water_heater.py136CODE
LOWcustom_components/xiaomi_miot/climate.py121CODE
LOWcustom_components/xiaomi_miot/climate.py164CODE
LOWcustom_components/xiaomi_miot/climate.py248CODE
LOWcustom_components/xiaomi_miot/climate.py341CODE
LOWcustom_components/xiaomi_miot/climate.py408CODE
LOWcustom_components/xiaomi_miot/device_tracker.py42CODE
LOWcustom_components/xiaomi_miot/config_flow.py74CODE
LOWcustom_components/xiaomi_miot/config_flow.py162CODE
LOWcustom_components/xiaomi_miot/config_flow.py201CODE
LOWcustom_components/xiaomi_miot/config_flow.py785CODE
LOWcustom_components/xiaomi_miot/core/hass_entity.py113CODE
LOWcustom_components/xiaomi_miot/core/device.py399CODE
LOWcustom_components/xiaomi_miot/core/device.py828CODE
LOWcustom_components/xiaomi_miot/core/device.py961CODE
LOWcustom_components/xiaomi_miot/core/device.py1053CODE
LOWcustom_components/xiaomi_miot/core/device.py1126CODE
LOWcustom_components/xiaomi_miot/core/miio2miot.py57CODE
LOWcustom_components/xiaomi_miot/core/miio2miot.py112CODE
LOWcustom_components/xiaomi_miot/core/miio2miot.py173CODE
LOWcustom_components/xiaomi_miot/core/utils.py24CODE
LOWcustom_components/xiaomi_miot/core/xiaomi_cloud.py465CODE
LOWcustom_components/xiaomi_miot/core/xiaomi_cloud.py592CODE
LOWcustom_components/xiaomi_miot/core/miot_spec.py291CODE
LOWcustom_components/xiaomi_miot/core/miot_spec.py460CODE
3 more matches not shown…
Unused Imports57 hits · 57 pts
SeverityFileLineSnippetContext
LOWtests/test_cnhdm_airrtc_wkq01.py11CODE
LOWtests/test_cnhdm_airrtc_wkq01.py11CODE
LOWtests/test_cnhdm_airrtc_wkq01.py11CODE
LOWtests/test_hass_entry_cloud.py12CODE
LOWtests/test_cloud_auth_step1.py2CODE
LOWtests/test_cloud_auth_step1.py3CODE
LOWtests/test_cloud_auth_step2.py3CODE
LOWtests/test_cloud_auth_step2.py4CODE
LOWtests/test_cloud_auth_owner.py5CODE
LOWtests/test_cloud_auth_types.py4CODE
LOWcustom_components/xiaomi_miot/time.py9CODE
LOWcustom_components/xiaomi_miot/cover.py12CODE
LOWcustom_components/xiaomi_miot/sensor.py19CODE
LOWcustom_components/xiaomi_miot/alarm_control_panel.py10CODE
LOWcustom_components/xiaomi_miot/fan.py11CODE
LOWcustom_components/xiaomi_miot/light.py16CODE
LOWcustom_components/xiaomi_miot/remote.py4CODE
LOWcustom_components/xiaomi_miot/remote.py17CODE
LOWcustom_components/xiaomi_miot/number.py11CODE
LOWcustom_components/xiaomi_miot/humidifier.py12CODE
LOWcustom_components/xiaomi_miot/media_player.py38CODE
LOWcustom_components/xiaomi_miot/__init__.py36CODE
LOWcustom_components/xiaomi_miot/__init__.py38CODE
LOWcustom_components/xiaomi_miot/vacuum.py13CODE
LOWcustom_components/xiaomi_miot/switch.py11CODE
LOWcustom_components/xiaomi_miot/camera.py27CODE
LOWcustom_components/xiaomi_miot/button.py9CODE
LOWcustom_components/xiaomi_miot/text.py9CODE
LOWcustom_components/xiaomi_miot/binary_sensor.py15CODE
LOWcustom_components/xiaomi_miot/select.py11CODE
LOWcustom_components/xiaomi_miot/water_heater.py15CODE
LOWcustom_components/xiaomi_miot/climate.py30CODE
LOWcustom_components/xiaomi_miot/device_tracker.py14CODE
LOWcustom_components/xiaomi_miot/core/hass_entity.py13CODE
LOWcustom_components/xiaomi_miot/core/hass_entity.py17CODE
LOWcustom_components/xiaomi_miot/core/coordinator.py9CODE
LOWcustom_components/xiaomi_miot/core/device.py34CODE
LOWcustom_components/xiaomi_miot/core/device_customizes.py25CODE
LOWcustom_components/xiaomi_miot/core/__init__.py1CODE
LOWcustom_components/xiaomi_miot/core/__init__.py1CODE
LOWcustom_components/xiaomi_miot/core/__init__.py2CODE
LOWcustom_components/xiaomi_miot/core/__init__.py3CODE
LOWcustom_components/xiaomi_miot/core/__init__.py3CODE
LOWcustom_components/xiaomi_miot/core/utils.py13CODE
LOWcustom_components/xiaomi_miot/core/converters.py6CODE
LOWcustom_components/xiaomi_miot/core/converters.py7CODE
LOWcustom_components/xiaomi_miot/core/converters.py7CODE
LOWcustom_components/xiaomi_miot/core/converters.py7CODE
LOWcustom_components/xiaomi_miot/core/const.py6CODE
LOWcustom_components/xiaomi_miot/core/const.py6CODE
LOWcustom_components/xiaomi_miot/core/const.py7CODE
LOWcustom_components/xiaomi_miot/core/const.py8CODE
LOWcustom_components/xiaomi_miot/core/const.py77CODE
LOWcustom_components/xiaomi_miot/core/const.py86CODE
LOWcustom_components/xiaomi_miot/core/const.py92CODE
LOWcustom_components/xiaomi_miot/core/const.py109CODE
LOWcustom_components/xiaomi_miot/core/const.py88CODE
Excessive Try-Catch Wrapping36 hits · 39 pts
SeverityFileLineSnippetContext
LOWtests/test_media_player_micoapi.py33 except Exception as exc:CODE
LOWcustom_components/xiaomi_miot/fan.py201 except Exception:CODE
MEDIUMcustom_components/xiaomi_miot/fan.py196def _proactive_update(now):CODE
LOWcustom_components/xiaomi_miot/remote.py209 except Exception as exc:CODE
LOWcustom_components/xiaomi_miot/media_player.py361 except Exception as exc:CODE
LOWcustom_components/xiaomi_miot/__init__.py289 except Exception as exc:CODE
LOWcustom_components/xiaomi_miot/__init__.py300 except Exception:CODE
LOWcustom_components/xiaomi_miot/__init__.py428 except Exception as exc:CODE
LOWcustom_components/xiaomi_miot/__init__.py511 except Exception as exc:CODE
LOWcustom_components/xiaomi_miot/config_flow.py517 except Exception:CODE
LOWcustom_components/xiaomi_miot/config_flow.py622 except Exception:CODE
LOWcustom_components/xiaomi_miot/config_flow.py630 except Exception:CODE
LOWcustom_components/xiaomi_miot/config_flow.py699 except Exception:CODE
LOWcustom_components/xiaomi_miot/config_flow.py738 except Exception:CODE
LOWcustom_components/xiaomi_miot/config_flow.py761 except Exception:CODE
MEDIUMcustom_components/xiaomi_miot/config_flow.py735def _persist_and_reload(self, candidate):CODE
LOWcustom_components/xiaomi_miot/core/hass_entity.py184 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/device.py113 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/utils.py35 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/hass_entry.py149 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/xiaomi_cloud.py83 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/xiaomi_cloud.py267 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/xiaomi_cloud.py301 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/xiaomi_cloud.py644 except Exception as exc:CODE
LOWcustom_components/xiaomi_miot/core/xiaomi_cloud.py677 except Exception as exc:CODE
LOWcustom_components/xiaomi_miot/core/xiaomi_cloud.py840 except Exception as exc:CODE
LOWcustom_components/xiaomi_miot/core/xiaomi_cloud.py867 except Exception:CODE
MEDIUMcustom_components/xiaomi_miot/core/xiaomi_cloud.py77def __init__(self, hass, username, password, country=None, sid=None, hass_entry=CODE
LOWcustom_components/xiaomi_miot/core/mini_miio.py106 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/mini_miio.py153 except Exception as e:CODE
LOWcustom_components/xiaomi_miot/core/mini_miio.py191 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/mini_miio.py234 except Exception as e:CODE
LOWcustom_components/xiaomi_miot/core/mini_miio.py266 except Exception:CODE
LOWcustom_components/xiaomi_miot/core/mini_miio.py320 except Exception as e:CODE
LOWcustom_components/xiaomi_miot/core/mini_miio.py347 except Exception:CODE
LOWscripts/mcp-tools.py22 except Exception:CODE
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWcustom_components/xiaomi_miot/system_health.py40CODE
LOWcustom_components/xiaomi_miot/core/miio2miot.py171CODE
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWcustom_components/xiaomi_miot/core/device.py93 # Check if token is valid hexadecimal, otherwise try extra.tokenCOMMENT
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWcustom_components/xiaomi_miot/core/__init__.py5__all__ = [CODE
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWcustom_components/xiaomi_miot/core/miio2miot_specs.py1461 'setter': 'set_tempe_setup',COMMENT