"""The fixed protocol enums you pass to the report_* / control methods. Unlike the equipment's *names* (events, alarms, commands — those vary per tool and live on ``eq.names``), these value sets are fixed by the SEMI standards, so they ship as importable enums: from secsgem_client import Equipment, Milestone, ModuleState eq.report_substrate("WFR-1", Milestone.ARRIVED) # autocomplete + typo-safe eq.report_substrate("WFR-1", "ARRIVED") # plain string also works Each member *is* its wire name (``Milestone.ARRIVED == "ARRIVED"``), so the two forms are interchangeable; the enums simply give you IDE autocomplete and a typo-checked happy path. A wrong string raises ``ValueError`` with a close-match suggestion (see ``_client._enum_value``). """ from __future__ import annotations import enum class Milestone(str, enum.Enum): """E90 substrate (wafer) lifecycle milestones — for ``eq.report_substrate``.""" ARRIVED = "ARRIVED" # created at its source carrier slot AT_WORK = "AT_WORK" # picked up for processing PROCESSING = "PROCESSING" # recipe step started PROCESSED = "PROCESSED" # recipe step finished AT_DESTINATION = "AT_DESTINATION" # returned / deposited class ModuleState(str, enum.Enum): """E157 module execution states — for ``eq.report_module``.""" NOT_EXECUTING = "NOT_EXECUTING" # idle (also resets the module) GENERAL_EXECUTING = "GENERAL_EXECUTING" # setup / pre- / post-process STEP_EXECUTING = "STEP_EXECUTING" # actively running a recipe step STEP_COMPLETED = "STEP_COMPLETED" class JobState(str, enum.Enum): """E40 process-job progress — for ``eq.report_job``.""" SETTING_UP = "SETTING_UP" PROCESSING = "PROCESSING" COMPLETE = "COMPLETE" ABORTED = "ABORTED"