'use strict';

// MODULES //

var isnan = require( '@stdlib/math/base/utils/is-nan' );
var log1p = require( '@stdlib/math/base/special/log1p' );
var abs = require( '@stdlib/math/base/special/abs' );
var exp = require( '@stdlib/math/base/special/exp' );
var ln = require( '@stdlib/math/base/special/ln' );
var NINF = require( '@stdlib/math/constants/float64-ninf' );
var PINF = require( '@stdlib/math/constants/float64-pinf' );


// MAIN //

/**
* Evaluates the logarithm of the probability density function (PDF) for a logistic distribution with location parameter `mu` and scale parameter `s` at a value `x`.
*
* @param {number} x - input value
* @param {number} mu - location parameter
* @param {NonNegativeNumber} s - scale parameter
* @returns {number} evaluated logPDF
*
* @example
* var y = logpdf( 2.0, 0.0, 1.0 );
* // returns ~-2.254
* @example
* var y = logpdf( -1.0, 4.0, 2.0 );
* // returns ~-3.352
* @example
* var y = logpdf( NaN, 0.0, 1.0 );
* // returns NaN
* @example
* var y = logpdf( 0.0, NaN, 1.0 );
* // returns NaN
* @example
* var y = logpdf( 0.0, 0.0, NaN );
* // returns NaN
* @example
* // Negative scale parameter:
* var y = logpdf( 2.0, 0.0, -1.0 );
* // returns NaN
* @example
* var y = logpdf( 2.0, 8.0, 0.0 );
* // returns Number.NEGATIVE_INFINITY
* @example
* var y = logpdf( 8.0, 8.0, 0.0 );
* // returns Number.POSITIVE_INFINITY
*/
function logpdf( x, mu, s ) {
	var az;
	var z;
	if (
		isnan( x ) ||
		isnan( mu ) ||
		isnan( s )
	) {
		return NaN;
	}
	if ( x === NINF ) {
		return NINF;
	}
	if ( s < 0.0 ) {
		return NaN;
	}
	if ( s === 0.0 ) {
		return x === mu ? PINF : NINF;
	}
	z = ( x - mu ) / s;
	az = -abs( z );
	return az - (2.0 * log1p( exp( az ) )) - ln( s );
} // end FUNCTION logpdf()

// EXPORTS //

module.exports = logpdf;

'use strict';

// MODULES //

var isnan = require( '@stdlib/math/base/utils/is-nan' );
var log1p = require( '@stdlib/math/base/special/log1p' );
var abs = require( '@stdlib/math/base/special/abs' );
var exp = require( '@stdlib/math/base/special/exp' );
var ln = require( '@stdlib/math/base/special/ln' );
var NINF = require( '@stdlib/math/constants/float64-ninf' );
var PINF = require( '@stdlib/math/constants/float64-pinf' );


// MAIN //

/**
* Evaluates the logarithm of the probability density function (PDF) for a logistic distribution with location parameter `mu` and scale parameter `s` at a value `x`.
*
* @param {number} x - input value
* @param {number} mu - location parameter
* @param {NonNegativeNumber} s - scale parameter
* @returns {number} evaluated logPDF
*
* @example
* var y = logpdf( 2.0, 0.0, 1.0 );
* // returns ~-2.254
* @example
* var y = logpdf( -1.0, 4.0, 2.0 );
* // returns ~-3.352
* @example
* var y = logpdf( NaN, 0.0, 1.0 );
* // returns NaN
* @example
* var y = logpdf( 0.0, NaN, 1.0 );
* // returns NaN
* @example
* var y = logpdf( 0.0, 0.0, NaN );
* // returns NaN
* @example
* // Negative scale parameter:
* var y = logpdf( 2.0, 0.0, -1.0 );
* // returns NaN
* @example
* var y = logpdf( 2.0, 8.0, 0.0 );
* // returns Number.NEGATIVE_INFINITY
* @example
* var y = logpdf( 8.0, 8.0, 0.0 );
* // returns Number.POSITIVE_INFINITY
*/
function logpdf( x, mu, s ) {
	var az;
	var z;
	if (
		isnan( x ) ||
		isnan( mu ) ||
		isnan( s )
	) {
		return NaN;
	}
	if ( x === NINF ) {
		return NINF;
	}
	if ( s < 0.0 ) {
		return NaN;
	}
	if ( s === 0.0 ) {
		return x === mu ? PINF : NINF;
	}
	z = ( x - mu ) / s;
	az = -abs( z );
	return az - (2.0 * log1p( exp( az ) )) - ln( s );
} // end FUNCTION logpdf()


// EXPORTS //

module.exports = logpdf;

Add missing empty line