pyclustering icon indicating copy to clipboard operation
pyclustering copied to clipboard

[C++ pyclustering] Human-readable errors to Python

Open annoviko opened this issue 4 years ago • 0 comments

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
  • [x] clique_interface.cpp
  • [ ] cure_interface.cpp
  • [ ] dbscan_interface.cpp
  • [x] 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

annoviko avatar Feb 18 '20 08:02 annoviko