annoviko/pyclustering

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

Ouverte

#591 ouverte le 18 févr. 2020

 (0 commentaire) (0 réaction) (0 personne assignée)Python (263 forks)auto 404
EnhancementGood First Issue

Métriques du dépôt

Stars
 (1 215 étoiles)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

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

Guide contributeur