aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
DBTranslator4IntegerVariable_inl.h
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2025 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-2025 *
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#pragma once
41
42
48
49
50#ifndef DOXYGEN_SHOULD_SKIP_THIS
51
53
54namespace gum {
55
56 namespace learning {
57
60 // for debugging purposes
61 GUM_DESTRUCTOR(DBTranslator4IntegerVariable);
62 }
63
65 INLINE DBTranslatedValue DBTranslator4IntegerVariable::translate(const std::string& str) {
66 const bool b = isInteger(str);
67 if (b)
68 if (this->back_dico_.existsSecond(str)) return {this->back_dico_.first(str)};
69
70 if (this->isMissingSymbol(str))
71 return DBTranslatedValue{std::numeric_limits< std::size_t >::max()};
72
73 if (!b) {
74 GUM_ERROR(TypeError,
75 "String \"" << str << "\" cannot be translated because it is not value for "
76 << _variable_);
77 } else {
78 GUM_ERROR(UnknownLabelInDatabase,
79 "The translation of \"" << str << "\" could not be found for " << _variable_)
80 }
81 }
82
84 INLINE std::string
86 try {
87 return this->back_dico_.second(translated_val.discr_val);
88 } catch (Exception const&) {
89 // check if this is a missing value
90 if ((translated_val.discr_val == std::numeric_limits< std::size_t >::max())
91 && !this->missing_symbols_.empty())
92 return *(this->missing_symbols_.begin());
93 else
94 GUM_ERROR(UnknownLabelInDatabase,
95 "The back translation of \"" << translated_val.discr_val
96 << "\" could not be found");
97 }
98 }
99
101 INLINE bool DBTranslator4IntegerVariable::hasEditableDictionary() const { return false; }
102
105
107 INLINE bool DBTranslator4IntegerVariable::needsReordering() const { return false; }
108
110 INLINE HashTable< std::size_t, std::size_t > DBTranslator4IntegerVariable::reorder() {
111 return HashTable< std::size_t, std::size_t >();
112 }
113
115 INLINE std::size_t DBTranslator4IntegerVariable::domainSize() const {
116 return _variable_.domainSize();
117 }
118
120 INLINE const IntegerVariable* DBTranslator4IntegerVariable::variable() const {
121 return &_variable_;
122 }
123
126 return DBTranslatedValue{std::numeric_limits< std::size_t >::max()};
127 }
128
129
130 } /* namespace learning */
131
132} /* namespace gum */
133
134#endif /* DOXYGEN_SHOULD_SKIP_THIS */
The databases' cell translators for integer variables.
virtual std::size_t domainSize() const final
returns the domain size of the variable used for translations
DBTranslator4IntegerVariable(const IntegerVariable &var, const std::vector< std::string > &missing_symbols, std::size_t max_dico_entries=std::numeric_limits< std::size_t >::max())
default constructor with an integer variable as translator
virtual std::string translateBack(const DBTranslatedValue translated_val) const final
returns the original value for a given translation
virtual void setEditableDictionaryMode(bool new_mode) final
sets/unset the editable dictionary mode
virtual const IntegerVariable * variable() const final
returns the variable stored into the translator
virtual DBTranslatedValue missingValue() const final
returns the translation of a missing value
virtual HashTable< std::size_t, std::size_t > reorder() final
returns an empty HashTable to indicate that no reordering is needed.
virtual bool hasEditableDictionary() const final
indicates that the translator is never in editable dictionary mode
virtual DBTranslatedValue translate(const std::string &str) final
returns the translation of a string
virtual bool needsReordering() const final
indicates that the translations should never be reordered
Bijection< std::size_t, std::string > back_dico_
the bijection relating back translated values and their original strings.
Set< std::string > missing_symbols_
the set of missing symbols
bool isMissingSymbol(const std::string &str) const
indicates whether a string corresponds to a missing symbol
#define GUM_ERROR(type, msg)
Definition exceptions.h:72
bool isInteger(const std::string &val)
return true is a string contains an integer value
include the inlined functions if necessary
Definition CSVParser.h:54
gum is the global namespace for all aGrUM entities
Definition agrum.h:46
The union class for storing the translated values in learning databases.