Blame view

src/itf/clusterable-itf.h 3.08 KB
8dcb6dfcb   Yannick Estève   first commit
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
  // itf/clusterable-itf.h
  
  // Copyright 2009-2011     Microsoft Corporation;  Go Vivace Inc.
  
  // See ../../COPYING for clarification regarding multiple authors
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //  http://www.apache.org/licenses/LICENSE-2.0
  //
  // THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  // KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
  // WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
  // MERCHANTABLITY OR NON-INFRINGEMENT.
  // See the Apache 2 License for the specific language governing permissions and
  // limitations under the License.
  
  
  #ifndef KALDI_ITF_CLUSTERABLE_ITF_H_
  #define KALDI_ITF_CLUSTERABLE_ITF_H_ 1
  
  #include <string>
  #include "base/kaldi-common.h"
  
  namespace kaldi {
  
  
  /** \addtogroup clustering_group
   @{
    A virtual class for clusterable objects; see \ref clustering for an
    explanation if its function.
  */
  
  
  
  class Clusterable {
   public:
    /// 
  ame Functions that must be overridden
    /// @{
  
    /// Return a copy of this object.
    virtual Clusterable *Copy() const = 0;
    /// Return the objective function associated with the stats
    /// [assuming ML estimation]
    virtual BaseFloat Objf() const = 0;
    /// Return the normalizer (typically, count) associated with the stats
    virtual BaseFloat Normalizer() const = 0;
    /// Set stats to empty.
    virtual void SetZero() = 0;
    /// Add other stats.
    virtual void Add(const Clusterable &other) = 0;
    /// Subtract other stats.
    virtual void Sub(const Clusterable &other) = 0;
    /// Scale the stats by a positive number f [not mandatory to supply this].
    virtual void Scale(BaseFloat f) {
      KALDI_ERR << "This Clusterable object does not implement Scale().";
    }
  
    /// Return a string that describes the inherited type. 
    virtual std::string Type() const = 0;
  
    /// Write data to stream.
    virtual void Write(std::ostream &os, bool binary) const = 0;
  
    /// Read data from a stream and return the corresponding object (const
    /// function; it's a class member because we need access to the vtable
    /// so generic code can read derived types).
    virtual Clusterable* ReadNew(std::istream &os, bool binary) const = 0;
  
    virtual ~Clusterable() {}
  
    /// @}
  
    /// 
  ame Functions that have default implementations
    /// @{
  
    // These functions have default implementations (but may be overridden for
    // speed). Implementatons in tree/clusterable-classes.cc
  
    /// Return the objective function of the combined object this + other.
    virtual BaseFloat ObjfPlus(const Clusterable &other) const;
    /// Return the objective function of the subtracted object this - other.
    virtual BaseFloat ObjfMinus(const Clusterable &other) const;
    /// Return the objective function decrease from merging the two
    /// clusters, negated to be a positive number (or zero).
    virtual BaseFloat Distance(const Clusterable &other) const;
    /// @}
  
  };
  /// @} end of "ingroup clustering_group"
  
  }  // end namespace kaldi
  
  #endif  // KALDI_ITF_CLUSTERABLE_ITF_H_