#ifndef __FUSION_FWD_H__
#define __FUSION_FWD_H__
namespace System
{
} // namespace System
namespace mosek
{
  namespace fusion
  {
    class Disjunction;
    class p_Disjunction;
    class DisjunctionTerms;
    class p_DisjunctionTerms;
    class Term;
    class p_Term;
    class SimpleTerm;
    class p_SimpleTerm;
    class DJCDomain;
    class p_DJCDomain;
    class DJC;
    class p_DJC;
    class BaseModel;
    class p_BaseModel;
    class Debug;
    class p_Debug;
    class Sort;
    class p_Sort;
    class IndexCounter;
    class p_IndexCounter;
    class CommonTools;
    class p_CommonTools;
    class SolutionStruct;
    class p_SolutionStruct;
    class RowBlockManager;
    class p_RowBlockManager;
    class Model;
    class p_Model;
    class BoundInterfaceVariable;
    class p_BoundInterfaceVariable;
    class SliceVariable;
    class p_SliceVariable;
    class RangedVariable;
    class p_RangedVariable;
    class LinearPSDVariable;
    class p_LinearPSDVariable;
    class PSDVariable;
    class p_PSDVariable;
    class LinearVariable;
    class p_LinearVariable;
    class ConicVariable;
    class p_ConicVariable;
    class ModelVariable;
    class p_ModelVariable;
    class NilVariable;
    class p_NilVariable;
    class BaseVariable;
    class p_BaseVariable;
    class Variable;
    class Var;
    class p_Var;
    class BoundInterfaceConstraint;
    class p_BoundInterfaceConstraint;
    class LinearPSDConstraint;
    class p_LinearPSDConstraint;
    class PSDConstraint;
    class p_PSDConstraint;
    class SliceConstraint;
    class p_SliceConstraint;
    class RangedConstraint;
    class p_RangedConstraint;
    class ConicConstraint;
    class p_ConicConstraint;
    class LinearConstraint;
    class p_LinearConstraint;
    class ModelConstraint;
    class p_ModelConstraint;
    class Constraint;
    class p_Constraint;
    class Set;
    class p_Set;
    class ConeDomain;
    class p_ConeDomain;
    class PSDDomain;
    class p_PSDDomain;
    class SymmetricRangeDomain;
    class p_SymmetricRangeDomain;
    class RangeDomain;
    class p_RangeDomain;
    class SymmetricLinearDomain;
    class p_SymmetricLinearDomain;
    class LinearDomain;
    class p_LinearDomain;
    class Domain;
    class p_Domain;
    class ExprCode;
    class p_ExprCode;
    class ExprParameter;
    class p_ExprParameter;
    class Param;
    class p_Param;
    class ExprMulParamScalarExpr;
    class p_ExprMulParamScalarExpr;
    class ExprMulParamScalar;
    class p_ExprMulParamScalar;
    class ExprMulParamDiagLeft;
    class p_ExprMulParamDiagLeft;
    class ExprMulParamDiagRight;
    class p_ExprMulParamDiagRight;
    class ExprDotParam;
    class p_ExprDotParam;
    class ExprMulParamElem;
    class p_ExprMulParamElem;
    class ExprMulParamRight;
    class p_ExprMulParamRight;
    class ExprMulParamLeft;
    class p_ExprMulParamLeft;
    class ParameterImpl;
    class p_ParameterImpl;
    class Parameter;
    class ExprOptimizeCode;
    class p_ExprOptimizeCode;
    class ExprCompress;
    class p_ExprCompress;
    class ExprConst;
    class p_ExprConst;
    class ExprPick;
    class p_ExprPick;
    class ExprSlice;
    class p_ExprSlice;
    class ExprPermuteDims;
    class p_ExprPermuteDims;
    class ExprTranspose;
    class p_ExprTranspose;
    class ExprRepeat;
    class p_ExprRepeat;
    class ExprStack;
    class p_ExprStack;
    class ExprInner;
    class p_ExprInner;
    class ExprMulDiagRight;
    class p_ExprMulDiagRight;
    class ExprMulDiagLeft;
    class p_ExprMulDiagLeft;
    class ExprMulElement;
    class p_ExprMulElement;
    class ExprMulScalarConst;
    class p_ExprMulScalarConst;
    class ExprScalarMul;
    class p_ExprScalarMul;
    class ExprMulRight;
    class p_ExprMulRight;
    class ExprMulLeft;
    class p_ExprMulLeft;
    class ExprMulVar;
    class p_ExprMulVar;
    class ExprMulScalarVar;
    class p_ExprMulScalarVar;
    class ExprMulVarScalarConst;
    class p_ExprMulVarScalarConst;
    class ExprAdd;
    class p_ExprAdd;
    class ExprWSum;
    class p_ExprWSum;
    class ExprSumReduce;
    class p_ExprSumReduce;
    class ExprScaleVecPSD;
    class p_ExprScaleVecPSD;
    class ExprDenseTril;
    class p_ExprDenseTril;
    class ExprDense;
    class p_ExprDense;
    class ExprSymmetrize;
    class p_ExprSymmetrize;
    class ExprCondense;
    class p_ExprCondense;
    class ExprFromVar;
    class p_ExprFromVar;
    class ExprReshape;
    class p_ExprReshape;
    class ExprRangeDomain;
    class p_ExprRangeDomain;
    class ExprPSDDomain;
    class p_ExprPSDDomain;
    class ExprConicDomain;
    class p_ExprConicDomain;
    class ExprLinearDomain;
    class p_ExprLinearDomain;
    class ExprDomain;
    class BaseExpression;
    class p_BaseExpression;
    class WorkStack;
    class p_WorkStack;
    class Expr;
    class p_Expr;
    class Expression;
    class SymmetricMatrix;
    class p_SymmetricMatrix;
    class NDSparseArray;
    class p_NDSparseArray;
    class DenseMatrix;
    class p_DenseMatrix;
    class SparseMatrix;
    class p_SparseMatrix;
    class Matrix;
    class p_Matrix;
    class UnimplementedError;
    class FatalError;
    class UnexpectedError;
    class SparseFormatError;
    class SolutionError;
    class SliceError;
    class UpdateError;
    class SetDefinitionError;
    class OptimizeError;
    class NameError;
    class DeletionError;
    class ModelError;
    class MatrixError;
    class DimensionError;
    class LengthError;
    class RangeError;
    class IndexError;
    class DomainError;
    class ValueConversionError;
    class ParameterError;
    class ExpressionError;
    class IOError;
    class FusionRuntimeException;
    class FusionException;
    class LinkedBlocks;
    class p_LinkedBlocks;
    class LinkedInts;
    class p_LinkedInts;
    class Parameters;
    class p_Parameters;
    namespace Utils
    {
      class StringIntMap;
      class p_StringIntMap;
      class IntMap;
      class p_IntMap;
      class StringBuffer;
      class p_StringBuffer;
    } // namespace Utils
  } // namespace fusion
} // namespace mosek
namespace monty {
  template<> struct RefCounted_traits<::mosek::fusion::FusionException> { typedef ::monty::Exception parent; };
  template<> struct RefCounted_traits<::mosek::fusion::FusionRuntimeException> { typedef ::monty::RuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::IOError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExpressionError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ParameterError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ValueConversionError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::DomainError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::IndexError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::RangeError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::LengthError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::DimensionError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::MatrixError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ModelError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::DeletionError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::NameError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::OptimizeError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::SetDefinitionError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::UpdateError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::SliceError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::SolutionError> { typedef ::mosek::fusion::FusionException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::SparseFormatError> { typedef ::mosek::fusion::FusionRuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::UnexpectedError> { typedef ::monty::RuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::FatalError> { typedef ::monty::RuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::UnimplementedError> { typedef ::monty::RuntimeException parent; };
  template<> struct RefCounted_traits<::mosek::fusion::SparseMatrix> { typedef ::mosek::fusion::Matrix parent; };
  template<> struct RefCounted_traits<::mosek::fusion::DenseMatrix> { typedef ::mosek::fusion::Matrix parent; };
  template<> struct RefCounted_traits<::mosek::fusion::Expr> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprReshape> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprFromVar> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprCondense> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprSymmetrize> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprDense> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprDenseTril> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprScaleVecPSD> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprSumReduce> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprWSum> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprAdd> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulVarScalarConst> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulScalarVar> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulVar> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulLeft> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulRight> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprScalarMul> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulScalarConst> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulElement> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulDiagLeft> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulDiagRight> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprInner> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprStack> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprRepeat> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprTranspose> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprPermuteDims> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprSlice> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprPick> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprConst> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprCompress> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprOptimizeCode> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::Parameter> { typedef ::mosek::fusion::Expression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulParamLeft> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulParamRight> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulParamElem> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprDotParam> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulParamDiagRight> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulParamDiagLeft> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulParamScalar> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprMulParamScalarExpr> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ExprParameter> { typedef ::mosek::fusion::BaseExpression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::SymmetricRangeDomain> { typedef ::mosek::fusion::RangeDomain parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ModelConstraint> { typedef ::mosek::fusion::Constraint parent; };
  template<> struct RefCounted_traits<::mosek::fusion::LinearConstraint> { typedef ::mosek::fusion::ModelConstraint parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ConicConstraint> { typedef ::mosek::fusion::ModelConstraint parent; };
  template<> struct RefCounted_traits<::mosek::fusion::RangedConstraint> { typedef ::mosek::fusion::ModelConstraint parent; };
  template<> struct RefCounted_traits<::mosek::fusion::SliceConstraint> { typedef ::mosek::fusion::Constraint parent; };
  template<> struct RefCounted_traits<::mosek::fusion::PSDConstraint> { typedef ::mosek::fusion::ModelConstraint parent; };
  template<> struct RefCounted_traits<::mosek::fusion::LinearPSDConstraint> { typedef ::mosek::fusion::ModelConstraint parent; };
  template<> struct RefCounted_traits<::mosek::fusion::BoundInterfaceConstraint> { typedef ::mosek::fusion::SliceConstraint parent; };
  template<> struct RefCounted_traits<::mosek::fusion::Variable> { typedef ::mosek::fusion::Expression parent; };
  template<> struct RefCounted_traits<::mosek::fusion::NilVariable> { typedef ::mosek::fusion::BaseVariable parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ModelVariable> { typedef ::mosek::fusion::BaseVariable parent; };
  template<> struct RefCounted_traits<::mosek::fusion::ConicVariable> { typedef ::mosek::fusion::ModelVariable parent; };
  template<> struct RefCounted_traits<::mosek::fusion::LinearVariable> { typedef ::mosek::fusion::ModelVariable parent; };
  template<> struct RefCounted_traits<::mosek::fusion::PSDVariable> { typedef ::mosek::fusion::ModelVariable parent; };
  template<> struct RefCounted_traits<::mosek::fusion::LinearPSDVariable> { typedef ::mosek::fusion::ModelVariable parent; };
  template<> struct RefCounted_traits<::mosek::fusion::RangedVariable> { typedef ::mosek::fusion::ModelVariable parent; };
  template<> struct RefCounted_traits<::mosek::fusion::SliceVariable> { typedef ::mosek::fusion::BaseVariable parent; };
  template<> struct RefCounted_traits<::mosek::fusion::BoundInterfaceVariable> { typedef ::mosek::fusion::SliceVariable parent; };
  template<> struct RefCounted_traits<::mosek::fusion::Model> { typedef ::mosek::fusion::BaseModel parent; };
  template<> struct RefCounted_traits<::mosek::fusion::SimpleTerm> { typedef ::mosek::fusion::Term parent; };
} // namespace monty 
#endif
