aGrUM
3.2.0
a C++ library for (probabilistic) graphical models
Toggle main menu visibility
contingencyTable_tpl.h
Go to the documentation of this file.
1
/****************************************************************************
2
* This file is part of the aGrUM/pyAgrum library. *
3
* *
4
* Copyright (c) 2005-2026 by *
5
* - Pierre-Henri WUILLEMIN(_at_LIP6) *
6
* - Christophe GONZALES(_at_AMU) *
7
* *
8
* The aGrUM/pyAgrum library is free software; you can redistribute it *
9
* and/or modify it under the terms of either : *
10
* *
11
* - the GNU Lesser General Public License as published by *
12
* the Free Software Foundation, either version 3 of the License, *
13
* or (at your option) any later version, *
14
* - the MIT license (MIT), *
15
* - or both in dual license, as here. *
16
* *
17
* (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18
* *
19
* This aGrUM/pyAgrum library is distributed in the hope that it will be *
20
* useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26
* OTHER DEALINGS IN THE SOFTWARE. *
27
* *
28
* See LICENCES for more details. *
29
* *
30
* SPDX-FileCopyrightText: Copyright 2005-2026 *
31
* - Pierre-Henri WUILLEMIN(_at_LIP6) *
32
* - Christophe GONZALES(_at_AMU) *
33
* SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34
* *
35
* Contact : info_at_agrum_dot_org *
36
* homepage : http://agrum.gitlab.io *
37
* gitlab : https://gitlab.com/agrumery/agrum *
38
* *
39
****************************************************************************/
40
41
#pragma once
42
43
50
// =========================================================================
51
#include <
agrum/FMDP/learning/core/contingencyTable.h
>
52
53
// =========================================================================
54
55
56
namespace
gum
{
57
58
// ##########################################################################
59
// Constructor & destructor.
60
// ##########################################################################
61
62
// ==========================================================================
63
// Default constructor
64
// ==========================================================================
65
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
66
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::ContingencyTable
() {
67
GUM_CONSTRUCTOR(
ContingencyTable
);
68
}
69
70
// ==========================================================================
71
// Default destructor
72
// ==========================================================================
73
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
74
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::~ContingencyTable
() {
75
GUM_DESTRUCTOR(
ContingencyTable
);
76
}
77
78
// ##########################################################################
79
//
80
// ##########################################################################
81
82
// ==========================================================================
83
//
84
// ==========================================================================
85
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
86
void
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::add
(GUM_ELEMENT_A valueA,
87
GUM_ELEMENT_B valueB) {
88
// Updating
89
if
(
_attrAMarginalTable_
.exists(valueA))
_attrAMarginalTable_
[valueA]++;
90
else
_attrAMarginalTable_
.insert(valueA, 1);
91
92
if
(
_attrBMarginalTable_
.exists(valueB))
_attrBMarginalTable_
[valueB]++;
93
else
_attrBMarginalTable_
.insert(valueB, 1);
94
95
std::pair< GUM_ELEMENT_A, GUM_ELEMENT_B > cell(valueA, valueB);
96
if
(
_jointTable_
.exists(cell))
_jointTable_
[cell]++;
97
else
_jointTable_
.insert(cell, 1);
98
}
99
100
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
101
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >
&
102
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::operator+=
(
103
const
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >
& src) {
104
// Ajout dans marginal A et table joint des valeurs pour src
105
for
(
auto
aTer = src.
attrABeginSafe
(); aTer != src.
attrAEndSafe
(); ++aTer) {
106
if
(
_attrAMarginalTable_
.exists(aTer.key()))
_attrAMarginalTable_
[aTer.key()] += aTer.val();
107
else
_attrAMarginalTable_
.insert(aTer.key(), aTer.val());
108
109
for
(
auto
bTer = src.
attrBBeginSafe
(); bTer != src.
attrBEndSafe
(); ++bTer) {
110
std::pair< GUM_ELEMENT_A, GUM_ELEMENT_B > cell(aTer.key(), bTer.key());
111
if
(
_jointTable_
.exists(cell))
_jointTable_
[cell] += src.
joint
(aTer.key(), bTer.key());
112
else
_jointTable_
.insert(cell, src.
joint
(aTer.key(), bTer.key()));
113
}
114
}
115
116
// Ajout dans marginal B des valeurs de src
117
for
(
auto
bTer = src.
attrBBeginSafe
(); bTer != src.
attrBEndSafe
(); ++bTer) {
118
if
(
_attrBMarginalTable_
.exists(bTer.key()))
_attrBMarginalTable_
[bTer.key()] += bTer.val();
119
else
_attrBMarginalTable_
.insert(bTer.key(), bTer.val());
120
}
121
return
*
this
;
122
}
123
124
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
125
void
*
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::operator
new
(
size_t
s) {
126
return
SmallObjectAllocator::instance
().
allocate
(s);
127
}
128
129
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
130
void
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::operator
delete
(
void
* p) {
131
SmallObjectAllocator::instance
().
deallocate
(p,
sizeof
(
ContingencyTable
));
132
}
133
134
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
135
Idx
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::joint
(GUM_ELEMENT_A valueA,
136
GUM_ELEMENT_B valueB)
const
{
137
return
_jointTable_
.exists(std::pair< GUM_ELEMENT_A, GUM_ELEMENT_B >(valueA, valueB))
138
?
_jointTable_
[std::pair< GUM_ELEMENT_A, GUM_ELEMENT_B >(valueA, valueB)]
139
: 0;
140
}
141
142
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
143
Idx
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::attrAMarginal
(GUM_ELEMENT_A valueA)
const
{
144
return
_attrAMarginalTable_
.exists(valueA) ?
_attrAMarginalTable_
[valueA] : 0;
145
}
146
147
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
148
Idx
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::attrBMarginal
(GUM_ELEMENT_B valueB)
const
{
149
return
_attrAMarginalTable_
.exists(valueB) ?
_attrAMarginalTable_
[valueB] : 0;
150
}
151
152
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
153
HashTableConstIteratorSafe< GUM_ELEMENT_A, Idx >
154
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::attrABeginSafe
()
const
{
155
return
_attrAMarginalTable_
.cbeginSafe();
156
}
157
158
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
159
HashTableConstIteratorSafe< GUM_ELEMENT_A, Idx >
160
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::attrAEndSafe
()
const
{
161
return
_attrAMarginalTable_
.cendSafe();
162
}
163
164
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
165
HashTableConstIteratorSafe< GUM_ELEMENT_B, Idx >
166
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::attrBBeginSafe
()
const
{
167
return
_attrBMarginalTable_
.cbeginSafe();
168
}
169
170
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
171
HashTableConstIteratorSafe< GUM_ELEMENT_B, Idx >
172
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::attrBEndSafe
()
const
{
173
return
_attrBMarginalTable_
.cendSafe();
174
}
175
176
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
177
Idx
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::attrASize
()
const
{
178
return
_attrAMarginalTable_
.size();
179
}
180
181
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
182
Idx
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::attrBSize
()
const
{
183
return
_attrBMarginalTable_
.size();
184
}
185
186
template
<
typename
GUM_ELEMENT_A,
typename
GUM_ELEMENT_B >
187
std::string
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B >::toString
()
const
{
188
std::ostringstream ss;
189
ss <<
"\t\t\t\t"
<<
_attrAMarginalTable_
<<
"\n"
190
<<
"\t\t\t\t"
<<
_attrBMarginalTable_
<<
"\n"
191
<<
"\t\t\t\t"
<<
_jointTable_
<<
"\n"
;
192
return
ss.str();
193
}
194
195
}
// End of namespace gum
gum::ContingencyTable
<agrum/FMDP/learning/core/contingencyTable.h>
Definition
contingencyTable.h:71
gum::ContingencyTable< Idx, GUM_ELEMENT >::_attrBMarginalTable_
HashTable< GUM_ELEMENT, Idx > _attrBMarginalTable_
Definition
contingencyTable.h:162
gum::ContingencyTable::attrBEndSafe
HashTableConstIteratorSafe< GUM_ELEMENT_B, Idx > attrBEndSafe() const
Increments the number of sample for case( iattr, ivalue ).
Definition
contingencyTable_tpl.h:172
gum::ContingencyTable::add
void add(GUM_ELEMENT_A valueA, GUM_ELEMENT_B valueB)
Increments the number of sample for case( iattr, ivalue ).
Definition
contingencyTable_tpl.h:86
gum::ContingencyTable::toString
std::string toString() const
Definition
contingencyTable_tpl.h:187
gum::ContingencyTable::_attrAMarginalTable_
HashTable< GUM_ELEMENT_A, Idx > _attrAMarginalTable_
Definition
contingencyTable.h:161
gum::ContingencyTable::~ContingencyTable
~ContingencyTable()
Default destructor.
Definition
contingencyTable_tpl.h:74
gum::ContingencyTable::ContingencyTable
ContingencyTable()
Default constructor.
Definition
contingencyTable_tpl.h:66
gum::ContingencyTable::attrBMarginal
Idx attrBMarginal(GUM_ELEMENT_B valueB) const
Returns the number of samples for case (iattr, ivalue).
Definition
contingencyTable_tpl.h:148
gum::ContingencyTable::attrBBeginSafe
HashTableConstIteratorSafe< GUM_ELEMENT_B, Idx > attrBBeginSafe() const
Returns the number of samples for column ivalue.
Definition
contingencyTable_tpl.h:166
gum::ContingencyTable::attrAMarginal
Idx attrAMarginal(GUM_ELEMENT_A valueA) const
Returns the number of samples for case (iattr, ivalue).
Definition
contingencyTable_tpl.h:143
gum::ContingencyTable::attrAEndSafe
HashTableConstIteratorSafe< GUM_ELEMENT_A, Idx > attrAEndSafe() const
Increments the number of sample for case( iattr, ivalue ).
Definition
contingencyTable_tpl.h:160
gum::ContingencyTable::attrASize
Idx attrASize() const
Returns the number of samples for line iattr.
Definition
contingencyTable_tpl.h:177
gum::ContingencyTable< Idx, GUM_ELEMENT >::_jointTable_
HashTable< std::pair< Idx, GUM_ELEMENT >, Idx > _jointTable_
Definition
contingencyTable.h:160
gum::ContingencyTable::attrBSize
Idx attrBSize() const
Returns the number of samples for column ivalue.
Definition
contingencyTable_tpl.h:182
gum::ContingencyTable::attrABeginSafe
HashTableConstIteratorSafe< GUM_ELEMENT_A, Idx > attrABeginSafe() const
Returns the number of samples for line iattr.
Definition
contingencyTable_tpl.h:154
gum::ContingencyTable::joint
Idx joint(GUM_ELEMENT_A valueA, GUM_ELEMENT_B valueB) const
Returns the number of samples for case (iattr, ivalue).
Definition
contingencyTable_tpl.h:135
gum::ContingencyTable::operator+=
ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B > & operator+=(const ContingencyTable< GUM_ELEMENT_A, GUM_ELEMENT_B > &src)
Definition
contingencyTable_tpl.h:102
gum::HashTableConstIteratorSafe< GUM_ELEMENT_A, Idx >
gum::SmallObjectAllocator::instance
static SmallObjectAllocator & instance()
Definition
smallObjectAllocator_inl.h:96
gum::SmallObjectAllocator::allocate
void * allocate(const size_t &objectSize)
Allocates a block.
Definition
smallObjectAllocator.cpp:72
gum::SmallObjectAllocator::deallocate
void deallocate(void *pDeallocatedObject, const size_t &objectSize)
Deallocates an object.
Definition
smallObjectAllocator_inl.h:116
contingencyTable.h
Headers of the ContingencyTable class.
gum::Idx
Size Idx
Type for indexes.
Definition
types.h:79
gum
gum is the global namespace for all aGrUM entities
Definition
agrum.h:46
aGrUM
3.2.0
© PHW&CG&others - 2022
DoXyGeN 1.18.0