[C++ pyclustering] Human-readable errors to Python
#591 opened on Feb 18, 2020
Repository metrics
- Stars
- (1,215 stars)
- PR merge metrics
- (PR metrics pending)
Description
Introduction The current problem is following: in case of incorrect input data or due to some other reason (even unexpected) - C++ code throws exception that is not captured by anyone. As a result the client (python code) receives error code that is not readable. Here is an example of an error:
[WinError -529697949] Windows Error 0xe06d7363
The idea is to capture each exception in pyclustering interface and report about the problem to the client of the library, in this case - python pyclustering library.
Description
C++ pyclustering interface ccore/include/interface/ and ccore/src/interface/.
The idea is to capture all exception, for example, there is a function:
pyclustering_package * agglomerative_algorithm(const pyclustering_package * const p_sample, const size_t p_number_clusters, const size_t p_link) {
pyclustering::clst::agglomerative algorithm(p_number_clusters, (pyclustering::clst::agglomerative::type_link) p_link);
/* ... ... ... */
return package;
}
Wrap it by try catch block:
pyclustering_package * agglomerative_algorithm(const pyclustering_package * const p_sample, const size_t p_number_clusters, const size_t p_link) try {
pyclustering::clst::agglomerative algorithm(p_number_clusters, (pyclustering::clst::agglomerative::type_link) p_link);
pyclustering::dataset data;
p_sample->extract(data);
pyclustering::clst::agglomerative_data result;
algorithm.process(data, result);
pyclustering_package * package = create_package(&result.clusters());
return package;
}
catch (std::exception & p_error) {
return pyclustering_pachage_from_exception(p_error);
}
Useful links
- How to prepare working copy: https://github.com/annoviko/pyclustering/wiki/Working-Copy-Preparation
- How to build C++ pyclustering: https://github.com/annoviko/pyclustering/wiki/Cpp-PyClustering
- How to run C++ unit-tests: https://github.com/annoviko/pyclustering/wiki/Unit-Testing-CCORE
Functionality to cover
All exported functions that return pyclustering_package:
- agglomerative_interface.cpp
- bsas_interface.cpp
- clique_interface.cpp
- cure_interface.cpp
- dbscan_interface.cpp
- elbow_interface.cpp
- fcm_interface.cpp
- gmeans_interface.cpp
- hhn_interface.cpp
- hsyncnet_interface.cpp
- kmeans_interface.cpp
- kmedoids_interface.cpp
- legion_interface.cpp
- mbsas_interface.cpp
- metric_interface.cpp
- optics_interface.cpp
- pcnn_interface.cpp
- rock_interface.cpp
- silhouette_interface.cpp
- som_interface.cpp
- sync_interface.cpp
- syncnet_interface.cpp
- syncpr_interface.cpp
- ttsas_interface.cpp
- xmeans_interface.cpp