/// <include file='FactorDocs.xml' path='factor_docs/message_op_class[@name="GammaProductOp_Laplace"]/message_doc[@name="AAverageConditional(Gamma, Gamma, Gamma, Gamma)"]/*'/>
 public static Gamma AAverageConditional([SkipIfUniform] Gamma product, Gamma A, [SkipIfUniform] Gamma B, Gamma q)
 {
     return(ToGamma(GammaPowerProductOp_Laplace.AAverageConditional(GammaPower.FromGamma(product, 1), GammaPower.FromGamma(A, 1), GammaPower.FromGamma(B, 1), q, GammaPower.Uniform(1))));
 }
 public static Gamma Q(Gamma product, [Proper] Gamma A, [Proper] Gamma B)
 {
     return(GammaPowerProductOp_Laplace.Q(GammaPower.FromGamma(product, 1), GammaPower.FromGamma(A, 1), GammaPower.FromGamma(B, 1)));
 }
 /// <include file='FactorDocs.xml' path='factor_docs/message_op_class[@name="GammaProductOp_Laplace"]/message_doc[@name="LogAverageFactor(Gamma, Gamma, Gamma, Gamma)"]/*'/>
 public static double LogAverageFactor(Gamma product, Gamma A, Gamma B, Gamma q)
 {
     return(GammaPowerProductOp_Laplace.LogAverageFactor(GammaPower.FromGamma(product, 1), GammaPower.FromGamma(A, 1), GammaPower.FromGamma(B, 1), q));
 }
 // derivatives of the factor marginalized over Product and A
 private static double[] dlogfs(double b, Gamma product, Gamma A)
 {
     return(GammaPowerProductOp_Laplace.dlogfs(b, GammaPower.FromGamma(product, 1), GammaPower.FromGamma(A, 1)));
 }