This file is indexed.

/usr/include/shogun/distance/MahalanobisDistance.h is in libshogun-dev 3.2.0-7.3build4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * Written (W) 2012 Fernando José Iglesias García
 * Copyright (C) 2012 Fernando José Iglesias García
 */

#ifndef _MAHALANOBISDISTANCE_H__
#define _MAHALANOBISDISTANCE_H__

#ifdef HAVE_LAPACK

#include <shogun/lib/common.h>
#include <shogun/distance/RealDistance.h>

namespace shogun
{
/** @brief class MahalanobisDistance
 *
 * The Mahalanobis distance for real valued features computes the distance
 * between a feature vector and a distribution of features characterized by its
 * mean and covariance.
 *
 * \f[\displaystyle
 *  D = \sqrt{ (x_i - \mu)^T \Sigma^{-1} (x_i - \mu)  }
 * \f]
 *
 * The Mahalanobis Squared distance does not take the square root:
 *
 * \f[\displaystyle
 *  D = (x_i - \mu)^T \Sigma^{-1} (x_i - \mu)
 * \f]
 *
 * If use_mean is set to false (which it is by default) the distance is computed
 * as
 *
 * \f[\displaystyle
 *  D = \sqrt{ (x_i - x_i')^T \Sigma^{-1} (x_i - x_i')  }
 * \f]
 *
 * i.e., instead of the mean as reference two vector \f$x_i\f$ and \f$x_i'\f$
 * are compared.
 *
 * @see <a href="en.wikipedia.org/wiki/Mahalanobis_distance">
 * Wikipedia: Mahalanobis Distance</a>
 */
class CMahalanobisDistance: public CRealDistance
{
	public:
		/** default constructor */
		CMahalanobisDistance();

		/** constructor
		 *
		 * @param l features of left-hand side
		 * @param r features of right-hand side
		 */
		CMahalanobisDistance(CDenseFeatures<float64_t>* l, CDenseFeatures<float64_t>* r);
		virtual ~CMahalanobisDistance();

		/** init distance
		 *
		 * @param l features of left-hand side
		 * @param r features of right-hand side
		 * @return if init was successful
		 */
		virtual bool init(CFeatures* l, CFeatures* r);

		/** cleanup distance */
		virtual void cleanup();

		/** get distance type we are
		 *
		 * @return distance type MAHALANOBIS
		 */
		virtual EDistanceType get_distance_type() { return D_MAHALANOBIS; }

		/** get feature type the distance can deal with
		 *
		 * @return feature type DREAL
		 */
		virtual EFeatureType get_feature_type() { return F_DREAL; }

		/** get name of the distance
		 *
		 * @return name Mahalanobis
		 */
		virtual const char* get_name() const { return "MahalanobisDistance"; }

		/** disable application of sqrt on matrix computation
		 * the matrix can then also be named norm squared
		 *
		 * @return if application of sqrt is disabled
		 */
		virtual bool get_disable_sqrt() { return disable_sqrt; };

		/** disable application of sqrt on matrix computation
		 * the matrix can then also be named norm squared
		 *
		 * @param state new disable_sqrt
		 */
		virtual void set_disable_sqrt(bool state) { disable_sqrt=state; };

		/** whether the distance is computed between the mean and a vector of rhs
		 * or between lhs and rhs
		 *
		 * @return if the mean of lhs is used to obtain the distance
		 */
		virtual bool get_use_mean() { return use_mean; };

		/** whether the distance is computed between the mean and a vector of rhs
		 * or between lhs and rhs
		 *
		 * @param state new use_mean
		 */
		virtual void set_use_mean(bool state) { use_mean=state; };

	protected:
		/// compute Mahalanobis distance between a feature vector of lhs
		/// to a feature vector of rhs
		/// if use_mean then idx_a is not used and the distance
		/// computed is between a feature vector of rhs and the
		/// distribution lhs
		///
		/// @param idx_a index of the feature vector in lhs
		/// @param idx_b index of the feature vector in rhs
		/// @return value of the Mahalanobis distance
		virtual float64_t compute(int32_t idx_a, int32_t idx_b);

	private:
		void init();

	protected:
		/** if application of sqrt on matrix computation is disabled */
		bool disable_sqrt;

		/** whether the features lhs and rhs have exactly the same values */
		bool use_mean;

		/** vector mean of the lhs feature vectors */
		SGVector<float64_t> mean;
		/** inverse of the covariance matrix of lhs feature vectors */
		SGMatrix<float64_t> icov;
};

} // namespace shogun
#endif /* HAVE_LAPACK */
#endif /* _MAHALANOBISDISTANCE_H__ */