package jetbrains.mps.baseLanguage.math.typesystem; /*Generated by MPS */ import jetbrains.mps.lang.typesystem.runtime.BaseHelginsDescriptor; import jetbrains.mps.lang.typesystem.runtime.InferenceRule_Runtime; import jetbrains.mps.lang.typesystem.runtime.NonTypesystemRule_Runtime; import jetbrains.mps.lang.typesystem.runtime.SubtypingRule_Runtime; import jetbrains.mps.lang.typesystem.runtime.InequationReplacementRule_Runtime; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.lang.typesystem.runtime.OverloadedOperationsTypesProvider; import org.jetbrains.mps.openapi.language.SAbstractConcept; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.errors.IRuleConflictWarningProducer; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.typesystem.inference.SubtypingManager; import jetbrains.mps.typesystem.inference.TypeChecker; import jetbrains.mps.baseLanguage.math.behavior.MathUtil; public class TypesystemDescriptor extends BaseHelginsDescriptor { public TypesystemDescriptor() { { InferenceRule_Runtime inferenceRule = new typeof_AbsExpression_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_ArithmSymbol_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_BinaryOperationMathContext_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_ComplexLiteral_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_ConjugateOperation_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_Determinant_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_DivOperationFraction_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_ExtrSymbol_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_ILiteral_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_InIntervalExpression_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_IntervalContainsExpression_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_IntervalLiteral_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_IntervalType_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_LinearSolveOperation_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MathSymbol_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MathSymbolFromToIndex_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MathSymbolIndex_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MathSymbolReference_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MathTypeCast_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MatrixConstructor_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MatrixElementAccessExpression_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MatrixInitializer_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MatrixInitializerIndexReference_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MatrixInverseOperation_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MatrixNorm_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MatrixUnit_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_MatrixZero_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_PowExpression_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_TransposeOperation_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_TrigonometricExpression_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { InferenceRule_Runtime inferenceRule = new typeof_VectorInitializer_InferenceRule(); this.myInferenceRules.add(inferenceRule); } { NonTypesystemRule_Runtime nonTypesystemRule = new check_dimensions_NonTypesystemRule(); this.myNonTypesystemRules.add(nonTypesystemRule); } { NonTypesystemRule_Runtime nonTypesystemRule = new highlight_complex_to_real_casts_NonTypesystemRule(); this.myNonTypesystemRules.add(nonTypesystemRule); } { NonTypesystemRule_Runtime nonTypesystemRule = new matrix_element_must_be_number_NonTypesystemRule(); this.myNonTypesystemRules.add(nonTypesystemRule); } { NonTypesystemRule_Runtime nonTypesystemRule = new matrix_index_lvalue_NonTypesystemRule(); this.myNonTypesystemRules.add(nonTypesystemRule); } { NonTypesystemRule_Runtime nonTypesystemRule = new vector_element_must_be_number_NonTypesystemRule(); this.myNonTypesystemRules.add(nonTypesystemRule); } { SubtypingRule_Runtime subtypingRule = new IntervalSupertypes_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new bigcomplex_extends_BigComplex_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new bigdecimal_extends_BigDecimal_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new bigdecimal_extends_bigcomplex_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new biginteger_extends_BigInteger_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new biginteger_extends_bigdecimal_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new complex_extends_Complex_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new complex_extends_bigcomplex_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new double_extends_bigdecimal_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new double_extends_complex_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new long_extends_biginteger_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new matrix_subtype_of_object_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { SubtypingRule_Runtime subtypingRule = new vector_subtype_of_matrix_SubtypingRule(); this.mySubtypingRules.add(subtypingRule); } { InequationReplacementRule_Runtime eliminationRule = new matrix_replacement_rule_InequationReplacementRule(); this.myInequationReplacementRules.add(eliminationRule); } { InequationReplacementRule_Runtime eliminationRule = new matrix_vector_replacement_rule_InequationReplacementRule(); this.myInequationReplacementRules.add(eliminationRule); } { InequationReplacementRule_Runtime eliminationRule = new vector_vector_replacement_rule_InequationReplacementRule(); this.myInequationReplacementRules.add(eliminationRule); } this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_f(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d6cde9fb9L, "jetbrains.mps.baseLanguage.structure.ShiftLeftExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_h(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d19eede01L, "jetbrains.mps.baseLanguage.structure.BitwiseAndExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_i(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d19ef4652L, "jetbrains.mps.baseLanguage.structure.BitwiseOrExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_j(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d19ef69abL, "jetbrains.mps.baseLanguage.structure.BitwiseXorExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_g(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d6ce051dfL, "jetbrains.mps.baseLanguage.structure.ShiftRightExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_e(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10c8d509af4L, "jetbrains.mps.baseLanguage.structure.RemExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_k(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbced3b82aL, "jetbrains.mps.baseLanguage.structure.LessThanExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_l(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbced38fcfL, "jetbrains.mps.baseLanguage.structure.GreaterThanExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_m(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10c8d53a915L, "jetbrains.mps.baseLanguage.structure.LessThanOrEqualsExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_n(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10c8d0fac2cL, "jetbrains.mps.baseLanguage.structure.GreaterThanOrEqualsExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_a(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc67c7fbL, "jetbrains.mps.baseLanguage.structure.PlusExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_b(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc67c7f5L, "jetbrains.mps.baseLanguage.structure.MinusExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_c(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfe476b758fL, "jetbrains.mps.baseLanguage.structure.MulExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_d(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xff2bbc13daL, "jetbrains.mps.baseLanguage.structure.DivExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_o(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc67c7fbL, "jetbrains.mps.baseLanguage.structure.PlusExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_p(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc67c7f5L, "jetbrains.mps.baseLanguage.structure.MinusExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_q(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfe476b758fL, "jetbrains.mps.baseLanguage.structure.MulExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_r(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfe476b758fL, "jetbrains.mps.baseLanguage.structure.MulExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_s(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xff2bbc13daL, "jetbrains.mps.baseLanguage.structure.DivExpression"))); this.myOverloadedOperationsTypesProviders.add(new TypesystemDescriptor.CustomOverloadedOperationsTypesProvider_t(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfe476b758fL, "jetbrains.mps.baseLanguage.structure.MulExpression"))); } public static class CustomOverloadedOperationsTypesProvider_f extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_f(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigInteger; this.myRightOperandType = MathTypeUtil.qInt; this.myOperationConcept = concept; this.myLeftTypeIsExact = true; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1237817153106"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.qBigInteger; } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_h extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_h(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigInteger; this.myRightOperandType = MathTypeUtil.qBigInteger; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1237818502828"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.copyNode(MathTypeUtil.qBigInteger); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200944b8b7L, "jetbrains.mps.baseLanguage.math.structure.BigIntegerType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200944b8b7L, "jetbrains.mps.baseLanguage.math.structure.BigIntegerType")); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_i extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_i(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigInteger; this.myRightOperandType = MathTypeUtil.qBigInteger; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1237818537889"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.copyNode(MathTypeUtil.qBigInteger); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200944b8b7L, "jetbrains.mps.baseLanguage.math.structure.BigIntegerType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200944b8b7L, "jetbrains.mps.baseLanguage.math.structure.BigIntegerType")); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_j extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_j(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigInteger; this.myRightOperandType = MathTypeUtil.qBigInteger; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1237818540255"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.copyNode(MathTypeUtil.qBigInteger); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200944b8b7L, "jetbrains.mps.baseLanguage.math.structure.BigIntegerType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200944b8b7L, "jetbrains.mps.baseLanguage.math.structure.BigIntegerType")); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_g extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_g(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigInteger; this.myRightOperandType = MathTypeUtil.qInt; this.myOperationConcept = concept; this.myLeftTypeIsExact = true; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1237819138168"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.qBigInteger; } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_e extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_e(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigInteger; this.myRightOperandType = MathTypeUtil.qBigInteger; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1238338729728"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.copyNode(MathTypeUtil.qBigInteger); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200944b8b7L, "jetbrains.mps.baseLanguage.math.structure.BigIntegerType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200944b8b7L, "jetbrains.mps.baseLanguage.math.structure.BigIntegerType")); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_k extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_k(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigDecimal; this.myRightOperandType = MathTypeUtil.qBigDecimal; this.myOperationConcept = concept; this.myLeftTypeIsExact = true; this.myRightTypeIsExact = true; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1238937384390"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.copyNode(MathTypeUtil.qBoolean); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return !((SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1185ff468caL, "jetbrains.mps.baseLanguage.structure.NullType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1185ff468caL, "jetbrains.mps.baseLanguage.structure.NullType")))); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_l extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_l(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigDecimal; this.myRightOperandType = MathTypeUtil.qBigDecimal; this.myOperationConcept = concept; this.myLeftTypeIsExact = true; this.myRightTypeIsExact = true; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1238937415187"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.copyNode(MathTypeUtil.qBoolean); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return !((SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1185ff468caL, "jetbrains.mps.baseLanguage.structure.NullType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1185ff468caL, "jetbrains.mps.baseLanguage.structure.NullType")))); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_m extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_m(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigDecimal; this.myRightOperandType = MathTypeUtil.qBigDecimal; this.myOperationConcept = concept; this.myLeftTypeIsExact = true; this.myRightTypeIsExact = true; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1238937415928"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.copyNode(MathTypeUtil.qBoolean); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return !((SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1185ff468caL, "jetbrains.mps.baseLanguage.structure.NullType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1185ff468caL, "jetbrains.mps.baseLanguage.structure.NullType")))); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_n extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_n(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigDecimal; this.myRightOperandType = MathTypeUtil.qBigDecimal; this.myOperationConcept = concept; this.myLeftTypeIsExact = true; this.myRightTypeIsExact = true; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "1238937416684"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.copyNode(MathTypeUtil.qBoolean); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return !((SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1185ff468caL, "jetbrains.mps.baseLanguage.structure.NullType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1185ff468caL, "jetbrains.mps.baseLanguage.structure.NullType")))); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_a extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_a(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigComplex; this.myRightOperandType = MathTypeUtil.qBigComplex; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "4991719046417198034"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.join(leftOperandType, rightOperandType); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200ff11214L, "jetbrains.mps.baseLanguage.math.structure.MathPrimitiveType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200ff11214L, "jetbrains.mps.baseLanguage.math.structure.MathPrimitiveType")); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_b extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_b(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigComplex; this.myRightOperandType = MathTypeUtil.qBigComplex; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "4991719046417344697"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.join(leftOperandType, rightOperandType); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200ff11214L, "jetbrains.mps.baseLanguage.math.structure.MathPrimitiveType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200ff11214L, "jetbrains.mps.baseLanguage.math.structure.MathPrimitiveType")); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_c extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_c(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigComplex; this.myRightOperandType = MathTypeUtil.qBigComplex; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "4991719046417346854"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.join(leftOperandType, rightOperandType); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200ff11214L, "jetbrains.mps.baseLanguage.math.structure.MathPrimitiveType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200ff11214L, "jetbrains.mps.baseLanguage.math.structure.MathPrimitiveType")); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_d extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_d(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigComplex; this.myRightOperandType = MathTypeUtil.qBigComplex; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "4991719046417346892"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.join(leftOperandType, rightOperandType); } public boolean isApplicable(SubtypingManager subtypingManager, SNode operation, SNode leftOperandType, SNode rightOperandType) { return SNodeOperations.isInstanceOf(leftOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200ff11214L, "jetbrains.mps.baseLanguage.math.structure.MathPrimitiveType")) || SNodeOperations.isInstanceOf(rightOperandType, MetaAdapterFactory.getConcept(0x3304fc6e7c6b401eL, 0xa016b944934bb21fL, 0x1200ff11214L, "jetbrains.mps.baseLanguage.math.structure.MathPrimitiveType")); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_o extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_o(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBCMatrix; this.myRightOperandType = MathTypeUtil.qBCMatrix; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "7676695779583458415"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.ML_matrixOp(leftOperandType, rightOperandType, false); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_p extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_p(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBCMatrix; this.myRightOperandType = MathTypeUtil.qBCMatrix; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "7676695779583465006"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.ML_matrixOp(leftOperandType, rightOperandType, false); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_q extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_q(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBigComplex; this.myRightOperandType = MathTypeUtil.qBCMatrix; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "7676695779583588206"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.typeOfMatrixScalarMultiplication(leftOperandType, rightOperandType); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_r extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_r(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBCMatrix; this.myRightOperandType = MathTypeUtil.qBigComplex; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "7676695779583588212"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { if (TypeChecker.getInstance().getSubtypingManager().isSubtype(MathUtil.getUnboxedElementType(leftOperandType), rightOperandType)) { return MathTypeUtil.qMatrix(rightOperandType); } else { return leftOperandType; } } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_s extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_s(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBCMatrix; this.myRightOperandType = MathTypeUtil.qBigComplex; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "7676695779583590396"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { if (TypeChecker.getInstance().getSubtypingManager().isSubtype(MathUtil.getUnboxedElementType(leftOperandType), rightOperandType)) { return MathTypeUtil.qMatrix(rightOperandType); } else { return leftOperandType; } } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } public static class CustomOverloadedOperationsTypesProvider_t extends OverloadedOperationsTypesProvider { public CustomOverloadedOperationsTypesProvider_t(SAbstractConcept concept) { this.myLeftOperandType = MathTypeUtil.qBCMatrix; this.myRightOperandType = MathTypeUtil.qBCMatrix; this.myOperationConcept = concept; this.myLeftTypeIsExact = false; this.myRightTypeIsExact = false; this.myRightIsStrong = false; this.myLeftIsStrong = false; this.myRuleModelId = "r:47d0f24b-df34-4ea0-aa7e-7c2eb0f88f31(jetbrains.mps.baseLanguage.math.typesystem)"; this.myRuleNodeId = "7676695779583653135"; } public SNode getOperationType(SNode operation, SNode leftOperandType, SNode rightOperandType) { return MathTypeUtil.ML_matrixOp(leftOperandType, rightOperandType, true); } @Override public void reportConflict(IRuleConflictWarningProducer producer) { producer.produceWarning(myRuleModelId, myRuleNodeId); } } }