<?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.typesystem/src"
    modelPluginID="org.eclipselabs.mscript.typesystem" modelName="TypeSystem" modelPluginClass="org.eclipselabs.mscript.typesystem.TypeSystemPlugin"
    editPluginClass="org.eclipselabs.mscript.typesystem.edit.TypeSystemEditPlugin"
    editorPluginClass="org.eclipselabs.mscript.typesystem.editor.TypeSystemEditorPlugin"
    importerID="org.eclipse.emf.importer.ecore" complianceLevel="5.0" copyrightFields="false">
  <foreignModel>TypeSystem.ecore</foreignModel>
  <genPackages prefix="TypeSystem" basePackage="org.eclipselabs.mscript" disposableProviderFactory="true"
      providerPackageSuffix="edit.provider" presentationPackageSuffix="editor.presentation"
      ecorePackage="TypeSystem.ecore#/">
    <genEnums typeSafeEnumCompatible="false" ecoreEnum="TypeSystem.ecore#//OperatorKind">
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/Add"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/Subtract"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/Multiply"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/Divide"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/ElementWiseMultiply"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/ElementWiseDivide"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/ElementWisePower"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/Negate"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/Power"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/Root"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/Transpose"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/LogicalAnd"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/LogicalOr"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/LogicalNot"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/Implies"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/LessThan"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/LessThanOrEqualTo"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/GreaterThan"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/GreaterThanOrEqualTo"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/EqualTo"/>
      <genEnumLiterals ecoreEnumLiteral="TypeSystem.ecore#//OperatorKind/NotEqualTo"/>
    </genEnums>
    <genClasses image="false" ecoreClass="TypeSystem.ecore#//DataType">
      <genOperations ecoreOperation="TypeSystem.ecore#//DataType/evaluate">
        <genParameters ecoreParameter="TypeSystem.ecore#//DataType/evaluate/operator"/>
        <genParameters ecoreParameter="TypeSystem.ecore#//DataType/evaluate/other"/>
      </genOperations>
      <genOperations ecoreOperation="TypeSystem.ecore#//DataType/evaluate.1">
        <genParameters ecoreParameter="TypeSystem.ecore#//DataType/evaluate.1/operator"/>
        <genParameters ecoreParameter="TypeSystem.ecore#//DataType/evaluate.1/n"/>
      </genOperations>
      <genOperations ecoreOperation="TypeSystem.ecore#//DataType/isAssignableFrom">
        <genParameters ecoreParameter="TypeSystem.ecore#//DataType/isAssignableFrom/other"/>
      </genOperations>
      <genOperations ecoreOperation="TypeSystem.ecore#//DataType/isEquivalentTo">
        <genParameters ecoreParameter="TypeSystem.ecore#//DataType/isEquivalentTo/other"/>
      </genOperations>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//InvalidDataType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//AnyDataType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//UnitType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//PrimitiveType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//NumericType">
      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference TypeSystem.ecore#//NumericType/unit"/>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//RealType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//IntegerType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//ComplexType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//GaussianType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//BooleanType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//StringType"/>
    <genClasses ecoreClass="TypeSystem.ecore#//ArrayType">
      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference TypeSystem.ecore#//ArrayType/elementType"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TypeSystem.ecore#//ArrayType/definedElementType"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TypeSystem.ecore#//ArrayType/dimensions"/>
      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//ArrayType/dimensionality"/>
      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//ArrayType/dimensional"/>
      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//ArrayType/multidimensional"/>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//TensorType">
      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//TensorType/vector"/>
      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//TensorType/matrix"/>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//ArrayDimension">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TypeSystem.ecore#//ArrayDimension/size"/>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//Expression"/>
    <genClasses ecoreClass="TypeSystem.ecore#//Unit">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TypeSystem.ecore#//Unit/numerator"/>
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TypeSystem.ecore#//Unit/denominator"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//Unit/scale"/>
      <genFeatures property="Readonly" createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//Unit/wildcard"/>
      <genOperations ecoreOperation="TypeSystem.ecore#//Unit/getNormalized"/>
      <genOperations ecoreOperation="TypeSystem.ecore#//Unit/evaluate">
        <genParameters ecoreParameter="TypeSystem.ecore#//Unit/evaluate/operator"/>
        <genParameters ecoreParameter="TypeSystem.ecore#//Unit/evaluate/other"/>
      </genOperations>
      <genOperations ecoreOperation="TypeSystem.ecore#//Unit/evaluate.1">
        <genParameters ecoreParameter="TypeSystem.ecore#//Unit/evaluate.1/operator"/>
        <genParameters ecoreParameter="TypeSystem.ecore#//Unit/evaluate.1/n"/>
      </genOperations>
      <genOperations ecoreOperation="TypeSystem.ecore#//Unit/isEquivalentTo">
        <genParameters ecoreParameter="TypeSystem.ecore#//Unit/isEquivalentTo/other"/>
        <genParameters ecoreParameter="TypeSystem.ecore#//Unit/isEquivalentTo/ignoreScale"/>
      </genOperations>
    </genClasses>
    <genClasses image="false" ecoreClass="TypeSystem.ecore#//UnitProduct">
      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference TypeSystem.ecore#//UnitProduct/factors"/>
      <genOperations ecoreOperation="TypeSystem.ecore#//UnitProduct/getFactor">
        <genParameters ecoreParameter="TypeSystem.ecore#//UnitProduct/getFactor/symbol"/>
      </genOperations>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//UnitNumerator"/>
    <genClasses ecoreClass="TypeSystem.ecore#//UnitDenominator"/>
    <genClasses ecoreClass="TypeSystem.ecore#//UnitFactor">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//UnitFactor/symbol"/>
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//UnitFactor/exponent"/>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//Literal"/>
    <genClasses ecoreClass="TypeSystem.ecore#//NumericLiteral">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//NumericLiteral/modifier"/>
      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference TypeSystem.ecore#//NumericLiteral/unit"/>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//RealLiteral">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//RealLiteral/value"/>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//IntegerLiteral">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//IntegerLiteral/value"/>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//BooleanLiteral">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//BooleanLiteral/true"/>
    </genClasses>
    <genClasses ecoreClass="TypeSystem.ecore#//StringLiteral">
      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute TypeSystem.ecore#//StringLiteral/value"/>
    </genClasses>
  </genPackages>
</genmodel:GenModel>
