# This file is generated by profile_coder.py. DO NOT EDIT!

from __future__ import annotations

from gaphor.core.modeling.properties import (
    association,
    attribute,
    relation_many,
    relation_one,
)
from gaphor.UML import Class, Dependency, Element, Property, State


class AND(Class):
    pass


class GateDef:
    pass


class AND_Def(GateDef):
    pass


class AnySituation:
    pass


class AbstractEvent(AnySituation):
    pass


class AbstractCause(AbstractEvent):
    pass


class DysfunctionalEvent(AbstractEvent):
    pass


class AbstractEffect(DysfunctionalEvent):
    pass


class AbstractFailureMode(DysfunctionalEvent):
    pass


class Scenario(AnySituation):
    scenarioStep: relation_many[AnySituation]


class AbstractRisk(Scenario):
    harm: relation_many[AbstractEffect]
    harmPotential: relation_many[HarmPotential]
    trigger: relation_many[AbstractEvent]


class BasicEvent(Class):
    pass


class FTAElement(DysfunctionalEvent):
    pass


class EventDef(FTAElement):
    pass


class BasicEventDef(EventDef):
    pass


class Block:
    isEncapsulated: attribute[int]


class Cause(AbstractCause):
    pass


class ConditionalEvent(Class):
    pass


class ConditionalEventDef(EventDef):
    pass


class DirectedRelationshipPropertyPath:
    pass


class ControllingMeasure(Dependency, DirectedRelationshipPropertyPath):
    affects: relation_many[Property]


class Detection(ControllingMeasure, Dependency):
    pass


class DormantEvent(Class):
    pass


class DormantEventDef(EventDef):
    pass


class Effect(AbstractEffect):
    pass


class FTATree(FTAElement, Scenario):
    topEvent: relation_one[EventDef]


class FailureState(State):
    pass


class Gate(Class):
    pass


class HarmPotential(AnySituation):
    pass


class Hazard(HarmPotential):
    pass


class HouseEvent(Class):
    pass


class HouseEventDef(EventDef):
    pass


class INHIBIT(Class):
    pass


class INHIBIT_Def(GateDef):
    condition: relation_many[EventDef]


class IntermediateEvent(Class):
    pass


class IntermediateEventDef(EventDef):
    pass


class MAJORITY_VOTE(Class):
    pass


class MAJORITY_VOTE_Def(GateDef):
    pass


class Mitigation(ControllingMeasure, Dependency):
    pass


class NOT(Class):
    pass


class NOT_Def(GateDef):
    pass


class OR(Class):
    pass


class OR_Def(GateDef):
    pass


class Prevention(ControllingMeasure, Dependency):
    pass


class Recommendation(ControllingMeasure, Dependency):
    pass


class RelevantTo(Dependency, DirectedRelationshipPropertyPath):
    pass


class SEQ(Class):
    pass


class SEQ_Def(GateDef):
    pass


class Situation(Block, Class):
    pass


class TopEvent(Class):
    pass


class TopEventDef(EventDef):
    pass


class TransferIn(Property):
    pass


class TransferOut(Class):
    pass


class Tree(Class):
    pass


class UndesiredState(DysfunctionalEvent):
    pass


class Undeveloped(Element):
    pass


class UndevelopedEventDef(EventDef):
    pass


class Violates(Dependency):
    pass


class XOR(Class):
    pass


class XOR_Def(GateDef):
    pass


class ZeroEvent(Class):
    pass


class ZeroEventDef(EventDef):
    pass


AbstractRisk.harm = association("harm", AbstractEffect, composite=True)
AbstractRisk.harmPotential = association("harmPotential", HarmPotential, composite=True)
AbstractRisk.trigger = association("trigger", AbstractEvent, composite=True)
Block.isEncapsulated = attribute("isEncapsulated", int)
ControllingMeasure.affects = association("affects", Property)
FTATree.topEvent = association("topEvent", EventDef, upper=1, composite=True)
INHIBIT_Def.condition = association("condition", EventDef)
Scenario.scenarioStep = association("scenarioStep", AnySituation, composite=True)
