function y = betaln(z,w)
%MATLAB Code Generation Library Function

%   Copyright 1984-2017 The MathWorks, Inc.
%#codegen

eml_invariant(nargin == 2,'MATLAB:minrhs');
SCALARZ = coder.const(eml_is_const(isscalar(z)) && isscalar(z));
SCALARW = coder.const(eml_is_const(isscalar(w)) && isscalar(w));
ZERO = coder.internal.scalarEg(z,w);
if SCALARZ && SCALARW
    y = full_betaln(z,w);
elseif SCALARZ
    y = coder.internal.applyBinaryScalarFunction(mfilename,ZERO, ...
        @gammalnz_betaln,z,w,gammaln(z(1)));
elseif SCALARW
    y = coder.internal.applyScalarFunction(mfilename,ZERO, ...
        @gammalnw_betaln,z,w,gammaln(w(1)));
else
    y = coder.internal.applyBinaryScalarFunction(mfilename,ZERO, ...
        @full_betaln,z,w);
end

%--------------------------------------------------------------------------

function y = full_betaln(z,w)
y = gammaln(z) + gammaln(w) - gammaln(z+w);

%--------------------------------------------------------------------------

function y = gammalnz_betaln(z,w,gammalnz)
y = gammalnz + gammaln(w) - gammaln(z+w);

%--------------------------------------------------------------------------

function y = gammalnw_betaln(z,w,gammalnw)
y = gammaln(z) + gammalnw - gammaln(z+w);

%--------------------------------------------------------------------------
