Click or drag to resize
MicrosoftResearch.Infer.Factors Namespace
Microsoft Research
Infer.NET factors and message operator methods
Classes
  ClassDescription
Public classAllExceptIndexAttribute
When applied to a message function parameter, indicates that the function depends on all items in the message collection except the resultIndex. The default is all items.
Public classAllTrueOp
Public classArrayFromVectorOp
Provides outgoing messages for ArrayFromVector(Vector), given random arguments to the function.
Public classBeliefPropagationGateEnterOneOp
Public classBeliefPropagationGateEnterOp
Public classBeliefPropagationGateEnterPartialOp
Public classBeliefPropagationGateEnterPartialTwoOp
Public classBeliefPropagationGateExitOp
Public classBeliefPropagationGateExitTwoOp
Public classBernoulliFromBetaOp
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classBernoulliFromBooleanArray
Provides outgoing messages for BernoulliFromBoolean(Boolean, Double), given random arguments to the function.
Public classBernoulliFromLogOddsOp
Provides outgoing messages for BernoulliFromLogOdds(Double), given random arguments to the function.
Public classBernoulliIntegerSubsetFromBeta
Public classBetaFromMeanAndVarianceOp
Provides outgoing messages for SampleFromMeanAndVariance(Double, Double), given random arguments to the function.
Public classBetaFromTrueAndFalseCountsOp
Provides outgoing messages for Sample(Double, Double), given random arguments to the function.
Public classBetaOp
Provides outgoing messages for BetaFromMeanAndTotalCount(Double, Double), given random arguments to the function.
Public classBinomialOp
Provides outgoing messages for Binomial(Int32, Double), given random arguments to the function.
Public classBooleanAndOp
Provides outgoing messages for And(Boolean, Boolean), given random arguments to the function.
Public classBooleanAreEqualOp
Provides outgoing messages for AreEqual(Boolean, Boolean), given random arguments to the function.
Public classBooleanNotOp
Provides outgoing messages for Not(Boolean), given random arguments to the function.
Public classBooleanOrOp
Provides outgoing messages for Or(Boolean, Boolean), given random arguments to the function.
Public classBuffersAttribute
When applied to a message operator class, indicates that the message operators may use the named parameters as storage for holding algorithm state.
Public classBufferTesterCopyOp
Provides outgoing messages for Copy``1(UMP), given random arguments to the function.
Public classCancelsAttribute
When applied to a message function parameter, indicates that the argument's value is cancelled by another argument, thus there is no real dependency.
Public classCasesBoolOp
Public classCasesOp
Provides outgoing messages for Cases(Boolean), given random arguments to the function.
Public classCharFromProbabilitiesOp
Provides outgoing messages for Char(Vector), given random arguments to the function.
Public classCharStringConcatOp
Provides outgoing messages for Concat(Char, String), given random arguments to the function.
Public classConcatOp
Provides outgoing messages for Concat(Vector, Vector), given random arguments to the function.
Public classConstantAttribute
When attached to a factor parameter, indicates that the parameter is constant - i.e. cannot be changed by observation or by inference
Public classConstrain
A repository of commonly used constraint methods.
Public classConstrainContainOp
Public classConstrainEqualOpT
Public classConstrainEqualRandomOpTDomain
Public classConstraintViolatedException
Exception which is thrown when a constraint is violated. This occurs when an observation does not hold true or a weight is 0.
Public classCopyOpT
Public classCountTrueOp
Public classCutOpT
Public classDamp
Damp factor methods
Public classDampBackwardOp
Public classDampForwardOpT
Public classDerivedVariableGibbsOp
Public classDerivedVariableOp
Public classDerivedVariableVmpOp
Public classDirichletFromPseudoCountsOp
Provides outgoing messages for SampleFromPseudoCounts(Vector), given random arguments to the function.
Public classDirichletOp
Provides outgoing messages for DirichletFromMeanAndTotalCount(Vector, Double), given random arguments to the function.
Public classDirichletSymmetricOp
Provides outgoing messages for DirichletSymmetric(Int32, Double), given random arguments to the function.
Public classDiscreteAreEqualOp
Public classDiscreteEnumAreEqualOpTEnum
Public classDiscreteEnumFromDirichletOpTEnum
Public classDiscreteFromDirichletOp
Public classDiscreteFromDiscreteOp
Provides outgoing messages for Discrete(Int32, Matrix), given random arguments to the function.
Public classDiscreteUniform
Provides outgoing messages for DiscreteUniform(Int32), given random arguments to the function.
Public classDoubleIsBetweenOp
Provides outgoing messages for IsBetween(Double, Double, Double), given random arguments to the function.
Public classDoubleMinusEvidenceOp
Provides outgoing messages for Difference(Double, Double), given random arguments to the function.
Public classDoubleMinusVmpOp
Provides outgoing messages for Difference(Double, Double), given random arguments to the function.
Public classDoubleOp
Provides outgoing messages for Double(Int32), given random arguments to the function.
Public classDoublePlusEvidenceOp
Provides outgoing messages for Plus(Double, Double), given random arguments to the function.
Public classDoublePlusOp
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classDoublePlusVmpOp
Provides outgoing messages for Plus(Double, Double), given random arguments to the function.
Public classEnumSupport
Provides factors and operators for using Enum types.
Public classEnumToIntOpTEnum
Public classExitingVariableOp
Public classExpOp
Provides outgoing messages for Exp(Double), given random arguments to the function.
Public classExpOp_BFGS
Provides outgoing messages for Exp(Double), given random arguments to the function.
Public classExpOp_Laplace
Public classExpOp_LaplaceProp
Provides outgoing messages for Exp(Double), given random arguments to the function.
Public classExpOp_Slow
Provides outgoing messages for Exp(Double), given random arguments to the function.
Public classFactor
A repository of commonly used factor methods.
Public classFactorMethodAttribute
When applied to a class, indicates that the class provides message functions for a given factor.
Public classFastSumOp
Public classFreshAttribute
When applied to a method argument, indicates that the argument must be up-to-date before invoking the method. When applied to a method, indicates that the method must be recomputed whenever any of its arguments change.
Public classGammaFromMeanAndVarianceOp
Provides outgoing messages for SampleFromMeanAndVariance(Double, Double), given random arguments to the function.
Public classGammaFromShapeAndRateOp
Public classGammaFromShapeAndRateOp_Laplace
Provides outgoing messages for GammaFromShapeAndRate(Double, Double), given random arguments to the function.
Public classGammaFromShapeAndRateOp_Slow
Provides outgoing messages for GammaFromShapeAndRate(Double, Double), given random arguments to the function.
Public classGammaFromShapeAndRateOpBase
Provides outgoing messages for GammaFromShapeAndRate(Double, Double), given random arguments to the function.
Public classGammaFromShapeAndScaleOp
Provides outgoing messages for Sample(Double, Double), given random arguments to the function.
Public classGammaProductOp
Provides outgoing messages for Product(Double, Double), given random arguments to the function.
Public classGammaProductOp_Laplace
Provides outgoing messages for Product(Double, Double), given random arguments to the function.
Public classGammaProductVmpOp
Provides outgoing messages for Product(Double, Double), given random arguments to the function.
Public classGammaRatioOp
Provides outgoing messages for Ratio(Double, Double), given random arguments to the function.
Public classGammaRatioOp_Laplace
Provides outgoing messages for Ratio(Double, Double), given random arguments to the function.
Public classGammaRatioVmpOp
Provides outgoing messages for Ratio(Double, Double), given random arguments to the function.
Public classGammaSoftmaxOp
Public classGate
Factors for handling gates.
Public classGateEnterOneOpT
Public classGateEnterOpT
Public classGateEnterPartialOpT
Public classGateEnterPartialTwoOp
Public classGateExitOpT
Public classGateExitRandomOp
Public classGateExitTwoOp
Public classGaussianFromMeanAndVarianceOp
Provides outgoing messages for GaussianFromMeanAndVariance(Double, Double), given random arguments to the function.
Public classGaussianOp
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classGaussianOp_EM
Public classGaussianOp_Laplace
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classGaussianOp_PointPrecision
Public classGaussianOp_Slow
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classGaussianOpBase
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classGaussianProductOp
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classGaussianProductOp_EM
Public classGaussianProductOp_Laplace
Provides outgoing messages for Product(Double, Double), given random arguments to the function.
Public classGaussianProductOp_Laplace2
Provides outgoing messages for Product(Double, Double), given random arguments to the function.
Public classGaussianProductOp_LaplaceProp
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classGaussianProductOp_PointB
Public classGaussianProductOp_SHG09
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classGaussianProductOp_Slow
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classGaussianProductOpBase
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classGaussianProductOpEvidenceBase
Public classGaussianProductVmpOp
Provides outgoing messages for Product(Double, Double), given random arguments to the function.
Public classGaussianRatioEvidenceOp
Provides outgoing messages for Ratio(Double, Double), given random arguments to the function.
Public classGaussianRatioVmpOp
Provides outgoing messages for Ratio(Double, Double), given random arguments to the function.
Public classGetDeepJaggedItemsOpT
Public classGetDeepJaggedItemsPointOpT
Public classGetItem2DOpT
Public classGetItemOpT
Public classGetItemsBufferOp2T
Public classGetItemsFromDeepJaggedOpT
Public classGetItemsFromDeepJaggedPointOpT
Public classGetItemsFromJaggedOpT
Public classGetItemsFromJaggedPointOpT
Public classGetItemsOpT
Public classGetItemsOp2T
Public classGetItemsPointOpT
Public classGetJaggedItemsFromJaggedOpT
Public classGetJaggedItemsFromJaggedPointOpT
Public classGetJaggedItemsOpT
Public classGetJaggedItemsPointOpT
Public classHasMessageFunctionsAttribute
When applied to an assembly, indicates that the assembly should be searched for message functions.
Public classHasUnitDerivative
Marks a factor as having derivative wrt all inputs equal to 1 always (only applies to deterministic factors)
Public classHiddenAttribute
Marks a factor as hidden
Public classIgnoreDeclarationAttribute
When attached to a method parameter, indicates that the dependency and the declaration dependency should be ignored by the FactorManager.
Public classIgnoreDependencyAttribute
When attached to a method parameter, indicates that the dependency should be ignored by the FactorManager. Only a declaration dependency will be retained.
Public classImproperMessageException
Improper message exception
Public classIndexedAttribute
When applied to a message function parameter, indicates that the argument should be indexed by resultIndex.
Public classIndexOfMaximumBuffer
Holds messages for IndexOfMaximumOp
Public classIndexOfMaximumOp
Public classIndexOfMaximumOp_Fast
Public classIndexOfMaximumStochasticOp
Public classInducedSourceAttribute
When applied to a message function parameter, causes the InducedTarget to depend on the parameter
Public classInducedTargetAttribute
When applied to a message function parameter, causes the parameter to depend on the InducedSource
Public classInnerProductArrayOp
Provides outgoing messages for InnerProduct(Vector, Vector), given random arguments to the function.
Public classInnerProductOp
Provides outgoing messages for InnerProduct(Vector, Vector), given random arguments to the function.
Public classInnerProductOp_PointB
Public classInnerProductOpBase
Public classInnerProductPartialCovarianceOp
Public classIntCasesOp
Provides outgoing messages for CasesInt(Int32, Int32), given random arguments to the function.
Public classIntegerPlusOp
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classIsGreaterThanDoubleOp
Public classIsGreaterThanOp
Provides outgoing messages for IsGreaterThan(Int32, Int32), given random arguments to the function.
Public classIsPositiveOp
Provides outgoing messages for IsPositive(Double), given random arguments to the function.
Public classIsPositiveOp_Proper
Provides outgoing messages for IsPositive(Double), given random arguments to the function.
Public classIsReturnedAttribute
When applied to a method argument, indicates that the argument will be returned unmodified as the result of the method. This automatically implies SkipIfUniform and Trigger.
Public classIsReturnedInEveryElementAttribute
When applied to a method argument for methods that return lists, indicates that all elements of the returned list will be identical and equal to that argument. This automatically implies SkipIfUniform.
Public classJaggedSubarrayOp_NoDivideT
Public classJaggedSubarrayOpT
Public classJaggedSubarrayWithMarginalOpT
Public classLinearOp
Provides outgoing messages for Linear(Int32, Int32, Double), given random arguments to the function.
Public classLinearTruncOp
Provides outgoing messages for LinearTrunc(Int32, Int32, Double, Double), given random arguments to the function.
Public classLogisticOp
Provides outgoing messages for Logistic(Double), given random arguments to the function.
Public classLogisticOp_JJ96
Provides outgoing messages for Logistic(Double), given random arguments to the function.
Public classLogisticOp_SJ99
Provides outgoing messages for Logistic(Double), given random arguments to the function.
Public classLogOp_EP
Provides outgoing messages for Log(Double), given random arguments to the function.
Public classLogOp_VMP
Provides outgoing messages for Log(Double), given random arguments to the function.
Public classLowPriority
Public classLowPriorityBackwardOp
Public classLowPriorityForwardOp
Public classMatchingIndexAttribute
When applied to a message function parameter, indicates that the function depends on the one item in the message collection at resultIndex. The default is all items.
Public classMatchingIndexTriggerAttribute
When applied to a method argument, indicates that the method's result is invalidated when the array element at resultIndex changes.
Public classMatrixMultiplyOp
Public classMatrixVectorProductOp
Provides outgoing messages for Product(Matrix, Vector), given random arguments to the function.
Public classMaxGammaOp
Public classMaxGaussianOp
Provides outgoing messages for Max(Double, Double), given random arguments to the function.
Public classMaxOfOthersOp
Public classMaxProductCopyOpT
Public classMultinomialOp
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classMultiplyAllAttribute
When applied to a message function, indicates that the function returns the product of its arguments.
Public classNoInitAttribute
When applied to a method argument, indicates that the argument does not benefit from initialization (by default, initialization is assumed to be beneficial). This attribute is incompatible with SkipIfUniform or Required.
Public classNonconjugateUsesEqualDefOp
UsesEqualDef operator to combine Gaussian and nonconjugate messages.
Public classNoTriggersAttribute
When applied to a method, indicates that no default triggers should be assigned to its parameters. The method will explicitly mark its triggers using TriggerAttribute. A general rule is that a VMP operator that depends on the opposite message must not trigger on that message (i.e. non-conjugate operators).
Public classNotSupportedAttribute
When applied to a method, indicates that the method will always throw a NotSupportedException.
Public classParameterNamesAttribute
When applied to a method, overrides the default choice of parameter names.
Public classPlusGammaVmpOp
Provides outgoing messages for Plus(Double, Double), given random arguments to the function.
Public classPlusVectorOp
Public classPointEstimator
Public classPointEstimatorForward2OpT
Public classPointEstimatorForwardOp_MeanT
Public classPointEstimatorForwardOp_ModeT
Public classPointEstimatorForwardOp_Secant
Public classPointEstimatorForwardOp_SecantGamma
Public classPointEstimatorForwardOp_VectorSecant
Public classPoissonOp
Provides outgoing messages for Poisson(Double), given random arguments to the function.
Public classPottsBoolOp
Provides outgoing messages for Potts(Boolean, Boolean, Double), given random arguments to the function.
Public classPottsIntOp
Provides outgoing messages for Potts(Int32, Int32, Double), given random arguments to the function.
Public classPowerOp
Provides outgoing messages for Pow(Double, Double), given random arguments to the function.
Public classPowerPlate
Power plate factor method
Public classPowerPlateOp
Public classProductExpOp
Provides outgoing messages for ProductExp(Double, Double), given random arguments to the function.
Public classProductGaussianBetaVmpOp
Provides outgoing messages for Product(Double, Double), given random arguments to the function.
Public classProductGaussianGammaVmpOp
Provides outgoing messages for Product(Double, Double), given random arguments to the function.
Public classProductWishartOp
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classProperAttribute
The distribution must be proper.
Public classReplicate2BufferOp
Public classReplicateBufferOp
Public classReplicateExitingOp
Public classReplicateGibbsOpT
Public classReplicateGibbsOp2T
Public classReplicateMaxOp
Public classReplicateOp
Public classReplicateOp_Divide
Public classReplicateOp_NoDivide
Public classReplicatePointOp
Public classReturnsCompositeArrayAttribute
When applied to a factor, indicates that the factor returns a composite array.
Public classRotateOp
Provides outgoing messages for Rotate(Double, Double, Double), given random arguments to the function.
Public classRpropBufferData
Implements the Rprop root-finding algorithm.
Public classSecantBufferDataT
Public classSequentialCopyOp
Public classSequentialCutOpT
Public classShiftAlpha
Factors that change a message channel's alpha factor
Public classShiftAlphaFromFactorOp
Public classShiftAlphaToFactorOp
Public classSingleOp
Provides outgoing messages for Single(String), given random arguments to the function.
Public classSkipAttribute
The result is always uniform.
Public classSkipIfAllExceptIndexAreUniformAttribute
The result is uniform (or an exception would be thrown) if all elements except at the result index are uniform, hence the function call can be skipped.
Public classSkipIfAllUniformAttribute
The result is uniform (or an exception would be thrown) if all elements are uniform, hence the function call can be skipped.
Public classSkipIfAnyExceptIndexIsUniformAttribute
The result is uniform (or an exception would be thrown) if any element except at the result index is uniform, hence the function call can be skipped.
Public classSkipIfAnyUniformAttribute
The result is uniform (or an exception would be thrown) if any element is uniform, hence the function call can be skipped.
Public classSkipIfMatchingIndexIsUniformAttribute
The result is uniform (or an exception would be thrown) if the element at the result index is uniform, hence the function call can be skipped.
Public classSkipIfUniformAttribute
The result is uniform (or an exception would be thrown) whenever this parameter is uniform, hence the function call can be skipped.
Public classSoftmaxOp_BL06
Public classSoftmaxOp_BL06_LBFGS
Public classSoftmaxOp_Bohning
Public classSoftmaxOp_Bouchard
Public classSoftmaxOp_Bouchard_Sparse
Public classSoftmaxOp_KM11
Public classSoftmaxOp_KM11_LBFGS
Public classSoftmaxOp_KM11_LBFGS_Sparse
Provides outgoing messages for Softmax(IListDouble), given random arguments to the function. This implementation uses the bound in Knowles and Minka (2011), followed by optimization using LBFGS. This approach is linear in the dimension K.
Public classSoftmaxOp_KM11_Sparse
Public classSoftmaxOp_KM11_Sparse2
Public classSoftmaxOp_Taylor
Public classSparseBernoulliFromBetaOp
Public classSparseGaussianListOp
Public classSparseGPOp
Provides outgoing messages for FunctionEvaluate(IFunction, Vector), given random arguments to the function.
Public classSplitOpT
Public classSplitSubarrayOpT
Public classStringCapitalizedOfMinLengthOp
Provides outgoing messages for StringCapitalized(Int32), given random arguments to the function.
Public classStringCapitalizedOfMinMaxLengthOp
Provides outgoing messages for StringCapitalized(Int32, Int32), given random arguments to the function.
Public classStringCharConcatOp
Provides outgoing messages for Concat(String, Char), given random arguments to the function.
Public classStringConcatOp
Provides outgoing messages for Concat(String, String), given random arguments to the function.
Public classStringFormatOp_AllowMissingPlaceholders
An implementation of message passing operations for the string formatting factor that supports argument names and does not require every argument placeholder to be present in a format string.
Public classStringFormatOp_AllowMissingPlaceholders_NoArgumentNames
An implementation of message passing operations for the string formatting factor that does not support argument names and requires every argument placeholder to be present in a format string.
Public classStringFormatOp_RequireEveryPlaceholder
An implementation of message passing operations for the string formatting factor that supports argument names and requires every argument placeholder to be present in a format string.
Public classStringFormatOp_RequireEveryPlaceholder_NoArgumentNames
An implementation of message passing operations for the string formatting factor that does not support argument names and requires every argument placeholder to be present in a format string.
Public classStringFormatOpBase_NoArgumentNamesTStringFormatOp
A base class for implementations of message passing operations for string formatting factors that don't support specifying argument names.
Public classStringFormatOpBaseTThis
A base class for implementations of message passing operations for various forms of the string formatting factor.
Public classStringFromArrayOp
Public classStringOfLengthOp
Provides outgoing messages for StringOfLength(Int32, DiscreteChar), given random arguments to the function.
Public classStringOfMinLengthOp
Provides outgoing messages for String(Int32, DiscreteChar), given random arguments to the function.
Public classStringOfMinMaxLengthOp
Provides outgoing messages for String(Int32, Int32, DiscreteChar), given random arguments to the function.
Public classStringsAreEqualOp
Provides outgoing messages for AreEqual(String, String), given random arguments to the function.
Public classSubarrayOpT
Public classSubarrayOp2T
Public classSubstringOp
Provides outgoing messages for Substring(String, Int32, Int32), given random arguments to the function.
Public classSubvectorOp
Provides outgoing messages for Subvector(Vector, Int32, Int32), given random arguments to the function.
Public classSumExceptOp
Public classSumOp_SHG09
Public classSumOp2
Public classSumOp3
Public classSumVectorGaussianOp
Public classTruncatedGammaFromShapeAndRateOp
Public classUnaryOpDomainType
Public classUndirected
Provides useful factors for undirected models.
Public classUniformPlusMinusOp
Provides outgoing messages for UniformPlusMinus(Double), given random arguments to the function.
Public classUsesEqualDefGibbsOpT
Public classUsesEqualDefGibbsOp2T
Public classUsesEqualDefMaxOp
Public classUsesEqualDefOp
Public classUsesEqualDefVmpBufferOp
Public classUsesEqualDefVmpOp
Public classVariableGibbsOp
Public classVariableMaxOp
Public classVariableOp
Public classVariablePointOp_MeanT
Public classVariablePointOp_Rprop
Public classVariablePointOp_RpropBeta
Public classVariablePointOp_RpropGamma
Public classVariablePointOp_RpropTruncatedGamma
Public classVariablePointOp_RpropTruncatedGaussian
Public classVariablePointOpT
Public classVariablePointOpBase
Public classVariableVmpOp
Public classVectorElementOp
Public classVectorFromArrayOp
Public classVectorGaussianFromMeanAndVarianceOp
Provides outgoing messages for SampleFromMeanAndVariance(Vector, PositiveDefiniteMatrix), given random arguments to the function.
Public classVectorGaussianOp
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classVectorGaussianOp_Laplace2
Provides outgoing messages for the following factors:, given random arguments to the function.
Public classVectorSecantBufferData
Public classVectorSoftmaxOp_KM11
Public classWishartFromShapeAndRateOp
Provides outgoing messages for SampleFromShapeAndRate(Double, PositiveDefiniteMatrix), given random arguments to the function.
Public classWishartFromShapeAndRateOp_Laplace2
Provides outgoing messages for SampleFromShapeAndRate(Double, PositiveDefiniteMatrix), given random arguments to the function.
Public classWishartFromShapeAndScaleOp
Provides outgoing messages for SampleFromShapeAndScale(Double, PositiveDefiniteMatrix), given random arguments to the function.
Public classWrappedGaussianProductOp
Provides outgoing messages for the following factors:, given random arguments to the function.
Delegates
  DelegateDescription
Public delegateActionOut2T1, T2, T3
Generic delegate with 2 out parameters
Public delegateActionOut2T1, T2, T3, T4
Generic delegate with 2 out parameters
Public delegateFuncOutT1, TOut, TResult
Public delegateFuncOutT1, T2, TOut, TResult
Public delegateFuncOut2T1, TOut, TOut2, TResult
Public delegateFuncOut2T1, T2, TOut, TOut2, TResult
Public delegateFuncOut3T1, T2, TOut, TOut2, TOut3, TResult
Public delegateFuncOut3T1, T2, T3, TOut, TOut2, TOut3, TResult
Public delegateFuncOut3T1, T2, T3, T4, TOut, TOut2, TOut3, TResult
Public delegateFuncOut4T1, T2, TOut, TOut2, TOut3, TOut4, TResult
Public delegateFuncOut4T1, T2, T3, TOut, TOut2, TOut3, TOut4, TResult