annoviko/pyclustering

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

Open

#591 opened on Feb 18, 2020

 (0 comments) (0 reactions) (0 assignees)Python (263 forks)auto 404
EnhancementGood First Issue

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

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

Contributor guide