From 002d243f403e097d47ee73847052fac782c9175d Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 27 Feb 2018 13:11:52 +0000 Subject: [PATCH] introduce "machine" factory and clean up --- examples/meta/src/base_api/kernel.sg | 3 --- examples/meta/src/base_api/objects.sg | 4 ++++ .../binary/kernel_support_vector_machine.sg | 2 +- examples/meta/src/meta_api/kwargs.sg | 5 ++--- src/interfaces/swig/Kernel.i | 3 +++ src/interfaces/swig/Machine.i | 1 + src/shogun/machine/KernelMachine.cpp | 6 ------ src/shogun/machine/KernelMachine.h | 6 ------ src/shogun/machine/Machine.cpp | 5 +++++ src/shogun/machine/Machine.h | 18 ++++++++++++------ tests/unit/base/create_unittest.cc | 6 +++--- 11 files changed, 31 insertions(+), 28 deletions(-) delete mode 100644 examples/meta/src/base_api/kernel.sg create mode 100644 examples/meta/src/base_api/objects.sg diff --git a/examples/meta/src/base_api/kernel.sg b/examples/meta/src/base_api/kernel.sg deleted file mode 100644 index 14dd4ac8132..00000000000 --- a/examples/meta/src/base_api/kernel.sg +++ /dev/null @@ -1,3 +0,0 @@ -Kernel k = kernel("GaussianKernel") - -k.get_name() diff --git a/examples/meta/src/base_api/objects.sg b/examples/meta/src/base_api/objects.sg new file mode 100644 index 00000000000..fb7bac81c2e --- /dev/null +++ b/examples/meta/src/base_api/objects.sg @@ -0,0 +1,4 @@ +Machine lib_svm = machine("LibSVM") +Machine lda = machine("LDA") +Kernel kernel_gaussian = kernel("GaussianKernel") +Kernel kernel_linear = kernel("LinearKernel") diff --git a/examples/meta/src/binary/kernel_support_vector_machine.sg b/examples/meta/src/binary/kernel_support_vector_machine.sg index 629c8b2fa87..f08c42fdb47 100644 --- a/examples/meta/src/binary/kernel_support_vector_machine.sg +++ b/examples/meta/src/binary/kernel_support_vector_machine.sg @@ -15,7 +15,7 @@ Kernel k = kernel("GaussianKernel", log_width=1.0074515102711323) #![set_parameters] #![create_instance] -KernelMachine svm = kernel_machine("LibSVM", C1=1.0, C2=1.0, kernel=k, labels=labels_train, epsilon=0.001) +Machine svm = machine("LibSVM", C1=1.0, C2=1.0, kernel=k, labels=labels_train, epsilon=0.001) #![create_instance] #![train_and_apply] diff --git a/examples/meta/src/meta_api/kwargs.sg b/examples/meta/src/meta_api/kwargs.sg index af9c881059f..be49bd18fac 100644 --- a/examples/meta/src/meta_api/kwargs.sg +++ b/examples/meta/src/meta_api/kwargs.sg @@ -27,6 +27,5 @@ # ------------ Kernel k = kernel("GaussianKernel", log_width=2.0) -KernelMachine svm = kernel_machine("LibSVM", C1=1.1, kernel=k) - -KernelMachine svm2 = kernel_machine("LibSVM", kernel=kernel("GaussianKernel")) +Machine svm = machine("LibSVM", C1=1.1, kernel=k) +Machine svm2 = machine("LibSVM", kernel=kernel("GaussianKernel")) diff --git a/src/interfaces/swig/Kernel.i b/src/interfaces/swig/Kernel.i index a4b73db1dcf..adc82ab2977 100644 --- a/src/interfaces/swig/Kernel.i +++ b/src/interfaces/swig/Kernel.i @@ -7,6 +7,9 @@ * Written (W) 2009 Soeren Sonnenburg * Copyright (C) 2009 Fraunhofer Institute FIRST and Max-Planck-Society */ + + %newobject kernel(); + #ifdef HAVE_PYTHON %feature("autodoc", "get_kernel_matrix(self) -> numpy 2dim array of float") get_kernel_matrix; %feature("autodoc", "get_POIM2(self) -> [] of float") get_POIM2; diff --git a/src/interfaces/swig/Machine.i b/src/interfaces/swig/Machine.i index 9e56772e9b8..1824d59368f 100644 --- a/src/interfaces/swig/Machine.i +++ b/src/interfaces/swig/Machine.i @@ -23,6 +23,7 @@ %newobject apply_structured(CFeatures* data); %newobject apply_latent(); %newobject apply_latent(CFeatures* data); +%newobject machine(); #if defined(SWIGPYTHON) || defined(SWIGOCTAVE) || defined(SWIGRUBY) || defined(SWIGLUA) || defined(SWIGR) diff --git a/src/shogun/machine/KernelMachine.cpp b/src/shogun/machine/KernelMachine.cpp index de3d3fefc41..3427e0d3de8 100644 --- a/src/shogun/machine/KernelMachine.cpp +++ b/src/shogun/machine/KernelMachine.cpp @@ -6,7 +6,6 @@ * Fernando Iglesias, Thoralf Klein */ -#include #include #include #include @@ -653,8 +652,3 @@ bool CKernelMachine::supports_locking() const { return true; } - -CKernelMachine* shogun::kernel_machine(const char* name) -{ - return create_object(name); -} diff --git a/src/shogun/machine/KernelMachine.h b/src/shogun/machine/KernelMachine.h index 46e64eda66b..0e45247eb22 100644 --- a/src/shogun/machine/KernelMachine.h +++ b/src/shogun/machine/KernelMachine.h @@ -328,11 +328,5 @@ class CKernelMachine : public CMachine /** array of ``support vectors'' (indices of feature objects) */ SGVector m_svs; }; - -/** Creates kernel machine by its name - * - * @param name the name of the kernel machine to create - */ -CKernelMachine* kernel_machine(const char* name); } #endif /* _KERNEL_MACHINE_H__ */ diff --git a/src/shogun/machine/Machine.cpp b/src/shogun/machine/Machine.cpp index b5a53ec3388..8a2ff2a8576 100644 --- a/src/shogun/machine/Machine.cpp +++ b/src/shogun/machine/Machine.cpp @@ -287,3 +287,8 @@ rxcpp::subscription CMachine::connect_to_signal_handler() [this]() { this->on_complete(); }); return get_global_signal()->get_observable()->subscribe(subscriber); } + +CMachine* shogun::machine(const char* name) +{ + return create_object(name); +} diff --git a/src/shogun/machine/Machine.h b/src/shogun/machine/Machine.h index 364f237500f..0bbfab1a5bb 100644 --- a/src/shogun/machine/Machine.h +++ b/src/shogun/machine/Machine.h @@ -11,16 +11,16 @@ #ifndef _MACHINE_H__ #define _MACHINE_H__ -#include - -#include #include +#include +#include #include -#include +#include #include +#include #include -#include -#include +#include +#include #include #include @@ -455,5 +455,11 @@ class CMachine : public CSGObject /** Mutex used to pause threads */ std::mutex m_mutex; }; + +/** Creates machine by its name + * + * @param name the name of the machine to create + */ +CMachine* machine(const char* name); } #endif // _MACHINE_H__ diff --git a/tests/unit/base/create_unittest.cc b/tests/unit/base/create_unittest.cc index 79e194894ad..27b1929ea4f 100644 --- a/tests/unit/base/create_unittest.cc +++ b/tests/unit/base/create_unittest.cc @@ -38,10 +38,10 @@ TEST(CreateObject,create_kernel) delete obj; } -TEST(CreateObject, create_kernel_machine) +TEST(CreateObject, create_machine) { - auto* obj = kernel_machine("LibSVM"); + auto* obj = machine("LibSVM"); EXPECT_TRUE(obj != nullptr); - EXPECT_TRUE(dynamic_cast(obj) != nullptr); + EXPECT_TRUE(dynamic_cast(obj) != nullptr); delete obj; }