<?xml version="1.0" encoding="UTF-8"?>
<genmodel:GenModel xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipselabs.mscript.language/src"
    modelPluginID="org.eclipselabs.mscript.language" modelName="FunctionModel" importerID="org.eclipse.emf.importer.ecore"
    complianceLevel="5.0" copyrightFields="false" usedGenPackages="Mscript.genmodel#//ast ../../org.eclipselabs.mscript.typesystem/model/TypeSystem.genmodel#//typesystem">
  <foreignModel>FunctionModel.ecore</foreignModel>
  <genPackages prefix="FunctionModel" basePackage="org.eclipselabs.mscript.language"
      disposableProviderFactory="true" ecorePackage="FunctionModel.ecore#/">
    <genEnums typeSafeEnumCompatible="false" ecoreEnum="FunctionModel.ecore#//VariableKind">
      <genEnumLiterals ecoreEnumLiteral="FunctionModel.ecore#//VariableKind/Unknown"/>
      <genEnumLiterals ecoreEnumLiteral="FunctionModel.ecore#//VariableKind/TemplateParameter"/>
      <genEnumLiterals ecoreEnumLiteral="FunctionModel.ecore#//VariableKind/InputParameter"/>
      <genEnumLiterals ecoreEnumLiteral="FunctionModel.ecore#//VariableKind/OutputParameter"/>
      <genEnumLiterals ecoreEnumLiteral="FunctionModel.ecore#//VariableKind/StateVariable"/>
      <genEnumLiterals ecoreEnumLiteral="FunctionModel.ecore#//VariableKind/Constant"/>
      <genEnumLiterals ecoreEnumLiteral="FunctionModel.ecore#//VariableKind/FunctionObject"/>
    </genEnums>
    <genClasses ecoreClass="FunctionModel.ecore#//FunctionDescriptor">
      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//FunctionDescriptor/definition"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//FunctionDescriptor/equationDescriptors"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//FunctionDescriptor/variableDescriptors"/>
      <genOperations ecoreOperation="FunctionModel.ecore#//FunctionDescriptor/getVariableDescriptor">
        <genParameters ecoreParameter="FunctionModel.ecore#//FunctionDescriptor/getVariableDescriptor/name"/>
      </genOperations>
      <genOperations ecoreOperation="FunctionModel.ecore#//FunctionDescriptor/hasNoDuplicateEquations">
        <genParameters ecoreParameter="FunctionModel.ecore#//FunctionDescriptor/hasNoDuplicateEquations/diagnostics"/>
        <genParameters ecoreParameter="FunctionModel.ecore#//FunctionDescriptor/hasNoDuplicateEquations/context"/>
      </genOperations>
      <genOperations ecoreOperation="FunctionModel.ecore#//FunctionDescriptor/hasNoCyclicEquations">
        <genParameters ecoreParameter="FunctionModel.ecore#//FunctionDescriptor/hasNoCyclicEquations/diagnostics"/>
        <genParameters ecoreParameter="FunctionModel.ecore#//FunctionDescriptor/hasNoCyclicEquations/context"/>
      </genOperations>
      <genOperations ecoreOperation="FunctionModel.ecore#//FunctionDescriptor/hasEquationsForEachOutput">
        <genParameters ecoreParameter="FunctionModel.ecore#//FunctionDescriptor/hasEquationsForEachOutput/diagnostics"/>
        <genParameters ecoreParameter="FunctionModel.ecore#//FunctionDescriptor/hasEquationsForEachOutput/context"/>
      </genOperations>
      <genOperations ecoreOperation="FunctionModel.ecore#//FunctionDescriptor/hasEquationsForEachVariableStep">
        <genParameters ecoreParameter="FunctionModel.ecore#//FunctionDescriptor/hasEquationsForEachVariableStep/diagnostics"/>
        <genParameters ecoreParameter="FunctionModel.ecore#//FunctionDescriptor/hasEquationsForEachVariableStep/context"/>
      </genOperations>
    </genClasses>
    <genClasses ecoreClass="FunctionModel.ecore#//EquationDescriptor">
      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationDescriptor/functionDescriptor"/>
      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationDescriptor/equation"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationDescriptor/sides"/>
      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationDescriptor/leftHandSide"/>
      <genFeatures property="Readonly" notify="false" createChild="false" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationDescriptor/rightHandSide"/>
      <genOperations ecoreOperation="FunctionModel.ecore#//EquationDescriptor/isLeftHandSideValid">
        <genParameters ecoreParameter="FunctionModel.ecore#//EquationDescriptor/isLeftHandSideValid/diagnostics"/>
        <genParameters ecoreParameter="FunctionModel.ecore#//EquationDescriptor/isLeftHandSideValid/context"/>
      </genOperations>
      <genOperations ecoreOperation="FunctionModel.ecore#//EquationDescriptor/isRightHandSideValid">
        <genParameters ecoreParameter="FunctionModel.ecore#//EquationDescriptor/isRightHandSideValid/diagnostics"/>
        <genParameters ecoreParameter="FunctionModel.ecore#//EquationDescriptor/isRightHandSideValid/context"/>
      </genOperations>
    </genClasses>
    <genClasses ecoreClass="FunctionModel.ecore#//EquationSide">
      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationSide/descriptor"/>
      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationSide/expression"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationSide/parts"/>
      <genOperations ecoreOperation="FunctionModel.ecore#//EquationSide/getOtherSide"/>
    </genClasses>
    <genClasses ecoreClass="FunctionModel.ecore#//EquationPart">
      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationPart/side"/>
      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationPart/variableAccess"/>
      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//EquationPart/variableStep"/>
    </genClasses>
    <genClasses ecoreClass="FunctionModel.ecore#//VariableDescriptor">
      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference FunctionModel.ecore#//VariableDescriptor/functionDescriptor"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FunctionModel.ecore#//VariableDescriptor/name"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FunctionModel.ecore#//VariableDescriptor/kind"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//VariableDescriptor/steps"/>
      <genOperations ecoreOperation="FunctionModel.ecore#//VariableDescriptor/getStep">
        <genParameters ecoreParameter="FunctionModel.ecore#//VariableDescriptor/getStep/index"/>
        <genParameters ecoreParameter="FunctionModel.ecore#//VariableDescriptor/getStep/initial"/>
        <genParameters ecoreParameter="FunctionModel.ecore#//VariableDescriptor/getStep/derivative"/>
      </genOperations>
      <genOperations ecoreOperation="FunctionModel.ecore#//VariableDescriptor/getMinimumStep"/>
      <genOperations ecoreOperation="FunctionModel.ecore#//VariableDescriptor/getMaximumStep"/>
    </genClasses>
    <genClasses ecoreClass="FunctionModel.ecore#//VariableStep">
      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference FunctionModel.ecore#//VariableStep/descriptor"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FunctionModel.ecore#//VariableStep/index"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FunctionModel.ecore#//VariableStep/initial"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute FunctionModel.ecore#//VariableStep/derivative"/>
      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference FunctionModel.ecore#//VariableStep/usingEquationParts"/>
    </genClasses>
  </genPackages>
</genmodel:GenModel>
