Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tag based serialization #4573

Merged
merged 23 commits into from Jun 19, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
ce5c834
Full support for std::vectors in Any
lisitsyn Aug 18, 2018
bf4b910
Draft of IO streams and (De)serializers
lisitsyn Apr 14, 2018
6d9c20f
Add dummy json (de)serializer
lisitsyn Apr 14, 2018
c881612
add RapidJSON
vigsterkr Apr 14, 2018
31e28df
add RapidJSON as a third_party lib
vigsterkr Apr 14, 2018
f0667ba
Some more of draft for serializers
lisitsyn Apr 15, 2018
597fbdf
Add basic json serialization test
lisitsyn Apr 16, 2018
8828e55
set DOC_INSTALL_DIR and LIB_INSTALL_DIR for RapidJSON
vigsterkr Apr 14, 2018
3a8722f
add filesystem support with streams
vigsterkr Apr 15, 2018
efc0523
remove tuple and pair from is_container
vigsterkr Mar 14, 2019
14e762b
remove json and xml
vigsterkr Mar 15, 2019
951604f
Refactor AnyVisitor
vigsterkr Mar 19, 2019
1e0274c
add binary serialization with bitsery
vigsterkr Mar 20, 2019
136b169
port meta integration tester to use new serialization API
vigsterkr Apr 10, 2019
d751c84
fix parameter registration for sparse feature matrix
vigsterkr Apr 10, 2019
e1981ca
drop old serializablefile
vigsterkr Apr 13, 2019
8f23f60
add support for pre and post functionality in new serialization fw
vigsterkr Apr 17, 2019
98d4ccb
fix assert problems in WindowsFileSystem
vigsterkr Jun 13, 2019
a5935d2
undefine isfinite macro in ruby interface
vigsterkr Jun 18, 2019
d2edb2a
temporarily disable externalizable functions in jave interface
vigsterkr Jun 18, 2019
ef2f2c2
add support for serializing std::string
vigsterkr Jun 19, 2019
693a11e
ignore string_features integration test for csharp
vigsterkr Jun 19, 2019
cf12b62
fix Serialization interface export to SWIG
vigsterkr Jun 19, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 16 additions & 0 deletions CMakeLists.txt
Expand Up @@ -88,6 +88,22 @@ IF(NOT HAVE_IF_INIT)
MESSAGE(FATAL_ERROR "Compiling shogun requires a compiler with if init-statements support!")
ENDIF()

CHECK_CXX_SOURCE_COMPILES("
#include <string>
#include <string_view>

int main()
{
char array[3] = {'B', 'a', 'r'};
std::string_view array_v(array, std::size(array));
return 0;
}
" HAVE_STD_STRING_VIEW)

IF(NOT HAVE_STD_STRING_VIEW)
MESSAGE(FATAL_ERROR "Compiling shogun requires a compiler with string_view support!")
ENDIF()

############# minimum library versions ###################
SET(VIENNACL_VERSION_MINIMUM 1.5.0)

Expand Down
35 changes: 0 additions & 35 deletions cmake/FindJSON.cmake

This file was deleted.

23 changes: 18 additions & 5 deletions cmake/ShogunUtils.cmake
Expand Up @@ -144,34 +144,47 @@ macro(ADD_LIBRARY_DEPENDENCY)
set(oneValueArgs LIBRARY CONFIG_FLAG VERSION SCOPE)
set(multiValueArgs TARGETS)
cmake_parse_arguments(ADD_LIBRARY_DEPENDENCY "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
STRING(TOUPPER ${ADD_LIBRARY_DEPENDENCY_LIBRARY} LIBRARY_PREFIX)
OPTION(ENABLE_${LIBRARY_PREFIX} "Use ${LIBRARY_PREFIX}" ON)
SET(LIBRARY_PREFIX ${ADD_LIBRARY_DEPENDENCY_LIBRARY})
STRING(TOUPPER ${ADD_LIBRARY_DEPENDENCY_LIBRARY} LIBRARY_PREFIX_UPPER)
OPTION(ENABLE_${LIBRARY_PREFIX_UPPER} "Use ${LIBRARY_PREFIX}" ON)
if (${ADD_LIBRARY_DEPENDENCY_REQUIRED})
find_package(${ADD_LIBRARY_DEPENDENCY_LIBRARY} REQUIRED ${ADD_LIBRARY_DEPENDENCY_VERSION})
else()
find_package(${ADD_LIBRARY_DEPENDENCY_LIBRARY} ${ADD_LIBRARY_DEPENDENCY_VERSION})
endif()
if (${LIBRARY_PREFIX}_FOUND AND ENABLE_${LIBRARY_PREFIX})
if ((${LIBRARY_PREFIX}_FOUND OR ${LIBRARY_PREFIX_UPPER}_FOUND) AND ENABLE_${LIBRARY_PREFIX_UPPER})
if (${LIBRARY_PREFIX}_INCLUDE_DIR)
set(LIBRARY_HEADER ${${LIBRARY_PREFIX}_INCLUDE_DIR})
elseif (${LIBRARY_PREFIX_UPPER}_INCLUDE_DIR)
set(LIBRARY_HEADER ${${LIBRARY_PREFIX_UPPER}_INCLUDE_DIR})
elseif (${LIBRARY_PREFIX}_INCLUDE_DIRS)
set(LIBRARY_HEADER ${${LIBRARY_PREFIX}_INCLUDE_DIRS})
elseif (${LIBRARY_PREFIX_UPPER}_INCLUDE_DIRS)
set(LIBRARY_HEADER ${${LIBRARY_PREFIX_UPPER}_INCLUDE_DIRS})
else ()
message(${${LIBRARY_PREFIX}_INCLUDE_DIR})
message(FATAL_ERROR "Found ${ADD_LIBRARY_DEPENDENCY_LIBRARY}, but not it's headers!")
endif()

set(${ADD_LIBRARY_DEPENDENCY_CONFIG_FLAG} ON CACHE BOOL "Use ${LIBRARY_PREFIX}" FORCE)

if (${LIBRARY_PREFIX}_LIBRARIES)
set(LIBRARY_LIBS ${${LIBRARY_PREFIX}_LIBRARIES})
elseif(${LIBRARY_PREFIX_UPPER}_LIBRARIES)
set(LIBRARY_LIBS ${${LIBRARY_PREFIX_UPPER}_LIBRARIES})
else()
message(FATAL_ERROR "Found ${ADD_LIBRARY_DEPENDENCY_LIBRARY}, but not it's libraries!")
endif()

ForEach (element ${ADD_LIBRARY_DEPENDENCY_TARGETS})
if (TARGET ${element})
get_target_property(TARGET_TYPE ${element} TYPE)
if (${TARGET_TYPE} STREQUAL INTERFACE_LIBRARY)
target_include_directories(${element} INTERFACE ${LIBRARY_HEADER})
target_link_libraries(${element} INTERFACE ${${LIBRARY_PREFIX}_LIBRARIES})
target_link_libraries(${element} INTERFACE ${LIBRARY_LIBS})
else()
if (NOT ${TARGET_TYPE} STREQUAL OBJECT_LIBRARY)
target_link_libraries(${element} ${ADD_LIBRARY_DEPENDENCY_SCOPE} ${${LIBRARY_PREFIX}_LIBRARIES})
target_link_libraries(${element} ${ADD_LIBRARY_DEPENDENCY_SCOPE} ${LIBRARY_LIBS})
endif()
target_include_directories(${element} ${ADD_LIBRARY_DEPENDENCY_SCOPE} ${LIBRARY_HEADER})
endif()
Expand Down
14 changes: 0 additions & 14 deletions cmake/external/JSON.cmake

This file was deleted.

16 changes: 0 additions & 16 deletions cmake/external/MSDirent.cmake

This file was deleted.

16 changes: 16 additions & 0 deletions cmake/external/RapidJSON.cmake
@@ -0,0 +1,16 @@
set(RAPIDJSON_PREFIX ${CMAKE_BINARY_DIR}/RapidJSON)
set(RAPIDJSON_INCLUDE_DIR "${RAPIDJSON_PREFIX}/src/RapidJSON/include")
include(ExternalProject)
ExternalProject_Add(
RapidJSON
PREFIX ${RAPIDJSON_PREFIX}
DOWNLOAD_DIR ${THIRD_PARTY_DIR}/RapidJSON
URL https://github.com/Tencent/rapidjson/archive/v1.1.0.tar.gz
URL_MD5 badd12c511e081fec6c89c43a7027bce
CMAKE_ARGS -DRAPIDJSON_BUILD_DOC:BOOL=OFF
-DRAPIDJSON_BUILD_EXAMPLES:BOOL=OFF
-DRAPIDJSON_BUILD_TESTS:BOOL=OFF
INSTALL_COMMAND ""
)

LIST(APPEND SHOGUN_DEPENDS RapidJSON)
14 changes: 14 additions & 0 deletions cmake/external/bitsery.cmake
@@ -0,0 +1,14 @@
set(BITSERY_PREFIX ${CMAKE_BINARY_DIR}/bitsery)
set(BITSERY_INCLUDE_DIR "${BITSERY_PREFIX}/src/bitsery/include")

include(ExternalProject)
ExternalProject_Add(
bitsery
PREFIX ${BITSERY_PREFIX}
DOWNLOAD_DIR ${THIRD_PARTY_DIR}/bitsery
URL https://github.com/fraillt/bitsery/archive/v4.6.0.tar.gz
URL_MD5 accb462f98a59ed2bc4ffa7de374c24b
INSTALL_COMMAND ""
)

LIST(APPEND SHOGUN_DEPENDS bitsery)
6 changes: 3 additions & 3 deletions configs/shogun-sdk/Dockerfile
Expand Up @@ -8,14 +8,14 @@ RUN printf "deb http://ppa.launchpad.net/timsc/swig-3.0.12/ubuntu xenial main\nd

RUN apt-get update -qq && apt-get upgrade -y && \
apt-get install -qq --force-yes --no-install-recommends make gcc-7 g++-7 swig \
libc6-dev libbz2-dev libjson-c-dev ccache libarpack2-dev libatlas-base-dev \
libc6-dev libbz2-dev ccache libarpack2-dev libatlas-base-dev \
libblas-dev libglpk-dev libhdf5-serial-dev zlib1g-dev liblapacke-dev \
libnlopt-dev liblpsolve55-dev libxml2-dev libsnappy-dev liblzo2-dev \
libnlopt-dev liblpsolve55-dev libsnappy-dev liblzo2-dev \
liblzma-dev libeigen3-dev python3-dev python3-numpy python3-matplotlib python3-scipy \
python3-jinja2 python3-setuptools git-core wget jblas mono-devel mono-dmcs cli-common-dev \
lua5.1 liblua5.1-0-dev octave liboctave-dev r-base-core clang-6.0 \
openjdk-8-jdk ruby ruby-dev python3-ply sphinx-doc python3-pip \
exuberant-ctags clang-format-3.8 libcolpack-dev lcov \
exuberant-ctags clang-format-3.8 libcolpack-dev rapidjson-dev lcov \
protobuf-compiler libprotobuf-dev googletest
RUN apt-get -t stretch-backports install -qq --force-yes --no-install-recommends cmake

Expand Down
2 changes: 1 addition & 1 deletion data
Submodule data updated 77 files
+1 −14 testsuite/meta/binary/averaged_perceptron.dat
+1 −16 testsuite/meta/binary/kernel_support_vector_machine.dat
+1 −14 testsuite/meta/binary/linear_discriminant_analysis.dat
+1 −21 testsuite/meta/binary/linear_support_vector_machine.dat
+1 −12 testsuite/meta/binary/mpdsvm.dat
+1 −18 testsuite/meta/binary/multiple_kernel_learning.dat
+1 −16 testsuite/meta/binary/newton_support_vector_machine.dat
+1 −14 testsuite/meta/binary/perceptron.dat
+1 −14 testsuite/meta/binary/svmlin.dat
+1 −14 testsuite/meta/binary/svmsgd.dat
+1 −23 testsuite/meta/clustering/gaussian_mixture_models.dat
+1 −8 testsuite/meta/clustering/hierarchical.dat
+1 −13 testsuite/meta/clustering/kmeans.dat
+1 −10 testsuite/meta/converter/diffusionmaps.dat
+1 −14 testsuite/meta/converter/independent_component_analysis_fast.dat
+1 −12 testsuite/meta/converter/independent_component_analysis_ff_sep.dat
+1 −12 testsuite/meta/converter/independent_component_analysis_jade.dat
+1 −12 testsuite/meta/converter/independent_component_analysis_jedi_sep.dat
+1 −12 testsuite/meta/converter/independent_component_analysis_sobi.dat
+1 −13 testsuite/meta/distance/braycurtis.dat
+1 −12 testsuite/meta/distance/canberra.dat
+1 −12 testsuite/meta/distance/chebyshew.dat
+1 −12 testsuite/meta/distance/chi_square.dat
+1 −13 testsuite/meta/distance/cosine.dat
+1 −12 testsuite/meta/distance/euclidean.dat
+1 −12 testsuite/meta/distance/geodesic.dat
+1 −12 testsuite/meta/distance/jensen.dat
+1 −13 testsuite/meta/distance/mahalanobis.dat
+1 −13 testsuite/meta/distance/manhattan.dat
+1 −12 testsuite/meta/distance/minkowski.dat
+1 −12 testsuite/meta/distance/tanimoto.dat
+1 −22 testsuite/meta/evaluation/cross_validation.dat
+1 −12 testsuite/meta/evaluation/cross_validation_pipeline.dat
+0 −22 testsuite/meta/features/string.dat
+1 −0 testsuite/meta/features/string_features.dat
+1 −14 testsuite/meta/gaussian_process/classifier.dat
+1 −16 testsuite/meta/gaussian_process/regression.dat
+1 −14 testsuite/meta/gaussian_process/sparse_regression.dat
+1 −12 testsuite/meta/kernel/anova.dat
+1 −10 testsuite/meta/kernel/auc.dat
+1 −12 testsuite/meta/kernel/cauchy.dat
+1 −12 testsuite/meta/kernel/chi2.dat
+1 −12 testsuite/meta/kernel/circular.dat
+1 −16 testsuite/meta/kernel/custom_kernel_machine.dat
+1 −12 testsuite/meta/kernel/log.dat
+1 −13 testsuite/meta/multiclass/cartree.dat
+1 −13 testsuite/meta/multiclass/chaid_tree.dat
+1 −12 testsuite/meta/multiclass/ecoc_random.dat
+1 −11 testsuite/meta/multiclass/gaussian_naive_bayes.dat
+1 −15 testsuite/meta/multiclass/k_nearest_neighbours.dat
+1 −15 testsuite/meta/multiclass/large_margin_nearest_neighbours.dat
+1 −13 testsuite/meta/multiclass/linear.dat
+1 −16 testsuite/meta/multiclass/linear_discriminant_analysis.dat
+1 −13 testsuite/meta/multiclass/logistic_regression.dat
+1 −14 testsuite/meta/multiclass/quadratic_discriminant_analysis.dat
+1 −15 testsuite/meta/multiclass/random_forest.dat
+1 −13 testsuite/meta/multiclass/relaxed_tree.dat
+1 −13 testsuite/meta/multiclass/shareboost.dat
+1 −14 testsuite/meta/multiclass/support_vector_machine.dat
+1 −12 testsuite/meta/neural_nets/convolutional_net_classification.dat
+1 −17 testsuite/meta/neural_nets/feedforward_net_classification.dat
+1 −17 testsuite/meta/neural_nets/feedforward_net_regression.dat
+1 −12 testsuite/meta/pipeline/pipeline.dat
+1 −10 testsuite/meta/preprocessor/fish_lda.dat
+1 −12 testsuite/meta/preprocessor/kernel_pca.dat
+1 −12 testsuite/meta/preprocessor/log_plus_one.dat
+1 −12 testsuite/meta/preprocessor/norm_one.dat
+1 −12 testsuite/meta/preprocessor/pca.dat
+1 −12 testsuite/meta/preprocessor/prune_var_submean.dat
+1 −12 testsuite/meta/preprocessor/random_fourier_features.dat
+1 −14 testsuite/meta/regression/kernel_ridge_regression.dat
+1 −10 testsuite/meta/regression/kernel_ridge_regression_nystrom.dat
+1 −14 testsuite/meta/regression/least_angle_regression.dat
+1 −20 testsuite/meta/regression/linear_ridge_regression.dat
+1 −16 testsuite/meta/regression/multiple_kernel_learning.dat
+1 −15 testsuite/meta/regression/random_forest_regression.dat
+1 −14 testsuite/meta/regression/support_vector_regression.dat
2 changes: 1 addition & 1 deletion examples/meta/generator/targets/cpp.json
@@ -1,5 +1,5 @@
{
"Program": "#include <shogun/base/init.h>\n#include <shogun/base/some.h>\n${dependencies}\n\nusing namespace shogun;\n\nint main(int, char*[])\n{\ninit_shogun_with_defaults();\n\n$program\nexit_shogun();\nreturn 0;\n}\n",
"Program": "#include <shogun/base/init.h>\n#include <shogun/base/some.h>\n${dependencies}\n\nusing namespace shogun;\nusing namespace shogun::io;\n\nint main(int, char*[])\n{\ninit_shogun_with_defaults();\n\n$program\nexit_shogun();\nreturn 0;\n}\n",
"Dependencies": {
"IncludeAllClasses": true,
"IncludeEnums": true,
Expand Down
41 changes: 23 additions & 18 deletions examples/meta/generator/translate.py
Expand Up @@ -261,32 +261,20 @@ def injectVarsStoring(self, statementList, programName, varsToStore):
storing
"""
storage = "sg_storage"
storageFile = "sg_storage_file"
storageFormat = "sg_serializer"

# TODO: handle directories
storageFilename = {
"Expr": {"StringLiteral": "{}.dat".format(programName)}
}
# 'w'
storageFilemode = {"Expr": {"CharLiteral": 'w'}}
storageComment = {"Comment": " Serialize output for integration testing (automatically generated)"}
storageInit = {"Init": [{"ObjectType": "DynamicObjectArray"},
{"Identifier": storage},
{"ArgumentList": []}]}
storageFileInit = {
"Init": [{"ObjectType": "SerializableAsciiFile"},
{"Identifier": storageFile},
{"ArgumentList": [storageFilename, storageFilemode]}]
}

statementList.append({"Statement": "\n"})
statementList.append(storageComment)
statementList.append({"Statement": storageInit})
statementList.append({"Statement": storageFileInit})

for vartypeAST, varname in varsToStore:
# avoid storing itself
if varname in (storage, storageFile):
if varname in (storage, storageFormat):
continue

varnameExpr = {"Expr": {"StringLiteral": varname}}
Expand Down Expand Up @@ -316,13 +304,30 @@ def injectVarsStoring(self, statementList, programName, varsToStore):
expression = {"Expr": methodCall}
statementList.append({"Statement": expression})


storageFormatInit = {
"Init": [{"ObjectType": "JsonSerializer"},
{"Identifier": storageFormat},
{"ArgumentList": []}]
}

# TODO: handle directories
storageFilename = {
"Expr": {"StringLiteral": "{}.dat".format(programName)}
}

# serialize(storageFilename, storage, serializer);
storageSerialize = {
"Expr": {"MethodCall": [
{"Identifier": storage},
{"Identifier": "save_serializable"},
{"ArgumentList": [{"Expr": {"Identifier": storageFile}}]}
"Expr": {"GlobalCall": [
{"Identifier": "serialize"},
{"ArgumentList": [
storageFilename,
{"Expr": {"Identifier": storage}},
{"Expr": {"Identifier": storageFormat}}
]}
]}
}
statementList.append({"Statement": storageFormatInit})
statementList.append({"Statement": storageSerialize})

def dependenciesString(self, allClasses, interfacedClasses, enums,
Expand Down
44 changes: 0 additions & 44 deletions examples/undocumented/libshogun/library_serialization.cpp

This file was deleted.