Skip to content

Commit

Permalink
fix, clean, de-bb
Browse files Browse the repository at this point in the history
repeat
  • Loading branch information
vigsterkr committed Mar 27, 2018
1 parent fc6bc81 commit 5bb757d
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 55 deletions.
44 changes: 14 additions & 30 deletions src/shogun/labels/BinaryLabels.cpp
@@ -1,8 +1,8 @@
/*
* This software is distributed under BSD 3-clause license (see LICENSE file).
*
* Authors: Heiko Strathmann, Saurabh Mahindre, Sergey Lisitsyn,
* Soeren Sonnenburg, Fernando Iglesias, Evgeniy Andreev,
* Authors: Heiko Strathmann, Saurabh Mahindre, Sergey Lisitsyn,
* Soeren Sonnenburg, Fernando Iglesias, Evgeniy Andreev,
* Chiyuan Zhang, Olivier NGuyen, Thoralf Klein
*/

Expand Down Expand Up @@ -151,32 +151,14 @@ CLabels* CBinaryLabels::shallow_subset_copy()
return shallow_copy_labels;
}

namespace shogun
CBinaryLabels::CBinaryLabels(const CDenseLabels& dense):
CDenseLabels(dense)
{
Some<CBinaryLabels> binary_from_binary(CBinaryLabels* orig)
{
return Some<CBinaryLabels>::from_raw(orig);
}

Some<CBinaryLabels> binary_from_dense(CDenseLabels* orig)
{
auto labels = orig->get_labels();
for (auto i : range(labels.vlen))
{
if (!CMath::fequals(labels[i], 1.0, 0.0) &&
!CMath::fequals(labels[i], -1.0, 0.0))
{
SG_SERROR(
"Label[%d] is %f, but must be either +1.0 or -1.0.\n", i,
labels[i])
}
}
auto result = new CBinaryLabels();
result->set_labels(labels);
result->set_values(orig->get_values());
return Some<CBinaryLabels>::from_raw(result);
}
ensure_valid();
}

namespace shogun
{
Some<CBinaryLabels> binary_labels(CLabels* orig)
{
REQUIRE(orig, "No labels provided.\n");
Expand All @@ -185,18 +167,20 @@ namespace shogun
switch (orig->get_label_type())
{
case LT_BINARY:
return binary_from_binary(orig->as<CBinaryLabels>());
return Some<CBinaryLabels>::from_raw(orig->as<CBinaryLabels>());
case LT_DENSE_GENERIC:
return binary_from_dense(orig->as<CDenseLabels>());
{
return some<CBinaryLabels>(*(orig->as<CDenseLabels>()));
}
default:
SG_SNOTIMPLEMENTED
}
}
catch (const ShogunException& e)
{
SG_SERROR(
"Cannot convert %s to binary labels: \n", e.what(),
orig->get_name());
"Cannot convert %s to binary labels: %s\n",
orig->get_name(), e.what());
}

return Some<CBinaryLabels>::from_raw(nullptr);
Expand Down
10 changes: 8 additions & 2 deletions src/shogun/labels/BinaryLabels.h
@@ -1,8 +1,8 @@
/*
* This software is distributed under BSD 3-clause license (see LICENSE file).
*
* Authors: Soeren Sonnenburg, Sergey Lisitsyn, Heiko Strathmann,
* Saurabh Mahindre, Fernando Iglesias, Evgeniy Andreev, Yuyu Zhang,
* Authors: Soeren Sonnenburg, Sergey Lisitsyn, Heiko Strathmann,
* Saurabh Mahindre, Fernando Iglesias, Evgeniy Andreev, Yuyu Zhang,
* Chiyuan Zhang, Thoralf Klein
*/

Expand Down Expand Up @@ -74,6 +74,12 @@ class CBinaryLabels : public CDenseLabels
*/
CBinaryLabels(CFile * loader);

/** Cast constructor
*
* @param dense CDenseLabels containing the binary labels
*/
CBinaryLabels(const CDenseLabels& dense);

/** Make sure the label is valid, otherwise raise SG_ERROR.
*
* possible with subset
Expand Down
10 changes: 9 additions & 1 deletion src/shogun/labels/DenseLabels.cpp
@@ -1,7 +1,7 @@
/*
* This software is distributed under BSD 3-clause license (see LICENSE file).
*
* Authors: Soeren Sonnenburg, Heiko Strathmann, Sergey Lisitsyn,
* Authors: Soeren Sonnenburg, Heiko Strathmann, Sergey Lisitsyn,
* Fernando Iglesias, Michele Mazzoni, Chiyuan Zhang
*/

Expand Down Expand Up @@ -32,6 +32,14 @@ CDenseLabels::CDenseLabels(int32_t num_lab)
linalg::zero(m_current_values);
}

CDenseLabels::CDenseLabels(const CDenseLabels& orig):
CLabels(orig),
m_labels(orig.m_labels)
{
init();
}


CDenseLabels::CDenseLabels(CFile* loader)
: CLabels()
{
Expand Down
6 changes: 6 additions & 0 deletions src/shogun/labels/DenseLabels.h
Expand Up @@ -43,6 +43,12 @@ namespace shogun
*/
CDenseLabels(int32_t num_labels);

/** copy constructor
*
* @param orig The dense labels to copy
*/
CDenseLabels(const CDenseLabels& orig);

/** constructor
*
* @param loader File object via which to load data
Expand Down
9 changes: 8 additions & 1 deletion src/shogun/labels/Labels.cpp
@@ -1,7 +1,7 @@
/*
* This software is distributed under BSD 3-clause license (see LICENSE file).
*
* Authors: Heiko Strathmann, Soeren Sonnenburg, Weijie Lin, Thoralf Klein,
* Authors: Heiko Strathmann, Soeren Sonnenburg, Weijie Lin, Thoralf Klein,
* Leon Kuchenbecker
*/

Expand All @@ -20,6 +20,13 @@ CLabels::CLabels()
init();
}

CLabels::CLabels(const CLabels& orig)
: CSGObject(orig),
m_current_values(orig.m_current_values)
{
init();
}

CLabels::~CLabels()
{
SG_UNREF(m_subset_stack);
Expand Down
7 changes: 5 additions & 2 deletions src/shogun/labels/Labels.h
@@ -1,8 +1,8 @@
/*
* This software is distributed under BSD 3-clause license (see LICENSE file).
*
* Authors: Heiko Strathmann, Soeren Sonnenburg, Saurabh Mahindre,
* Sergey Lisitsyn, Evgeniy Andreev, Yuyu Zhang, Chiyuan Zhang,
* Authors: Heiko Strathmann, Soeren Sonnenburg, Saurabh Mahindre,
* Sergey Lisitsyn, Evgeniy Andreev, Yuyu Zhang, Chiyuan Zhang,
* Thoralf Klein, Fernando Iglesias, Leon Kuchenbecker
*/

Expand Down Expand Up @@ -52,6 +52,9 @@ namespace shogun
/** default constructor */
CLabels();

/** copy constructor */
CLabels(const CLabels& orig);

/** destructor */
virtual ~CLabels();

Expand Down
21 changes: 6 additions & 15 deletions src/shogun/labels/MulticlassLabels.cpp
Expand Up @@ -189,12 +189,7 @@ CMulticlassLabels* CMulticlassLabels::obtain_from_generic(CLabels* labels)

namespace shogun
{
Some<CMulticlassLabels> multiclass_from_multiclass(CMulticlassLabels* orig)
{
return Some<CMulticlassLabels>::from_raw(orig);
}

Some<CMulticlassLabels> multiclass_from_dense(CDenseLabels* orig)
SG_FORCED_INLINE Some<CMulticlassLabels> to_multiclass(CDenseLabels* orig)
{
auto int_labels = orig->get_int_labels();
std::set<int32_t> unique(int_labels.begin(), int_labels.end());
Expand All @@ -209,10 +204,7 @@ namespace shogun
"Multiclass labels must be contiguous integers in [0, ..., "
"num_classes -1].\n");

auto labels = orig->get_labels();
auto result = new CMulticlassLabels(labels);

return Some<CMulticlassLabels>::from_raw(result);
return some<CMulticlassLabels>(orig->get_labels());
}

Some<CMulticlassLabels> multiclass_labels(CLabels* orig)
Expand All @@ -223,19 +215,18 @@ namespace shogun
switch (orig->get_label_type())
{
case LT_MULTICLASS:
return multiclass_from_multiclass(
orig->as<CMulticlassLabels>());
return Some<CMulticlassLabels>::from_raw(orig->as<CMulticlassLabels>());
case LT_DENSE_GENERIC:
return multiclass_from_dense(orig->as<CDenseLabels>());
return to_multiclass(orig->as<CDenseLabels>());
default:
SG_SNOTIMPLEMENTED
}
}
catch (const ShogunException& e)
{
SG_SERROR(
"Cannot convert %s to multiclass labels: \n", e.what(),
orig->get_name());
"Cannot convert %s to multiclass labels: %s\n",
orig->get_name(), e.what());
}

return Some<CMulticlassLabels>::from_raw(nullptr);
Expand Down
6 changes: 2 additions & 4 deletions tests/unit/labels/BinaryLabels_unittest.cc
Expand Up @@ -115,8 +115,6 @@ TEST_F(BinaryLabels, binary_labels_from_dense)
labels->set_labels(labels_binary);

auto labels2 = binary_labels(labels);
EXPECT_NE(labels, labels2);
ASSERT_NE(labels2, nullptr);
EXPECT_EQ(labels->get_labels(), labels2->get_labels());
EXPECT_EQ(labels->get_values(), labels2->get_values());
EXPECT_EQ(probabilities.size(), labels2->get_num_labels());
EXPECT_EQ(probabilities, labels2->get_values());
}

0 comments on commit 5bb757d

Please sign in to comment.