From 2baef597eb5d432978173253382ef944c3febff2 Mon Sep 17 00:00:00 2001 From: foefl Date: Thu, 20 Nov 2025 16:47:47 +0100 Subject: [PATCH] add anomaly threshold as constant --- src/dopt_sensor_anomalies/constants.py | 4 +- src/dopt_sensor_anomalies/detection.c | 658 +++++++++++++------------ 2 files changed, 334 insertions(+), 328 deletions(-) diff --git a/src/dopt_sensor_anomalies/constants.py b/src/dopt_sensor_anomalies/constants.py index d90be3a..b07c649 100644 --- a/src/dopt_sensor_anomalies/constants.py +++ b/src/dopt_sensor_anomalies/constants.py @@ -6,8 +6,8 @@ STOP_FOLDER_NAME: Final[str] = "python" MODEL_FOLDER_NAME: Final[str] = "models" THRESHOLD_BW: Final[int] = 63 -BACKBONE: Final[str] = "'wide_resnet50_2" -LAYERS: Final[tuple[str, str]] = ("layer1", "layer2", "layer3") +BACKBONE: Final[str] = "wide_resnet50_2" +LAYERS: Final[tuple[str, ...]] = ("layer1", "layer2", "layer3") RATIO: Final[float] = 0.01 ANOMALY_THRESHOLD: Final[float] = 0.2 diff --git a/src/dopt_sensor_anomalies/detection.c b/src/dopt_sensor_anomalies/detection.c index 3b31c35..05b7ab3 100644 --- a/src/dopt_sensor_anomalies/detection.c +++ b/src/dopt_sensor_anomalies/detection.c @@ -2882,8 +2882,8 @@ typedef struct { PyObject *__pyx_slice[2]; PyObject *__pyx_tuple[7]; PyObject *__pyx_codeobj_tab[12]; - PyObject *__pyx_string_tab[315]; - PyObject *__pyx_number_tab[17]; + PyObject *__pyx_string_tab[316]; + PyObject *__pyx_number_tab[16]; /* #### Code section: module_state_contents ### */ #if CYTHON_USE_FREELISTS @@ -3000,305 +3000,305 @@ static __pyx_mstatetype * const __pyx_mstate_global = &__pyx_mstate_global_stati #define __pyx_kp_u_t_SensorImages __pyx_string_tab[30] #define __pyx_kp_u_tuple_float_float __pyx_string_tab[31] #define __pyx_kp_u_tuple_t_CsvData_t_SensorImages __pyx_string_tab[32] -#define __pyx_n_u_Any __pyx_string_tab[33] -#define __pyx_n_u_BACKBONE __pyx_string_tab[34] -#define __pyx_n_u_Box __pyx_string_tab[35] -#define __pyx_n_u_CHAIN_APPROX_SIMPLE __pyx_string_tab[36] -#define __pyx_n_u_COLOR_BGR2GRAY __pyx_string_tab[37] -#define __pyx_n_u_COLOR_BGR2RGB __pyx_string_tab[38] -#define __pyx_n_u_Canny __pyx_string_tab[39] -#define __pyx_n_u_ContourCalculationError __pyx_string_tab[40] -#define __pyx_n_u_DETECTION_MODELS __pyx_string_tab[41] -#define __pyx_n_u_DataFrame __pyx_string_tab[42] -#define __pyx_n_u_Final __pyx_string_tab[43] -#define __pyx_n_u_HEATMAP_FILENAME_SUFFIX __pyx_string_tab[44] -#define __pyx_n_u_Image __pyx_string_tab[45] -#define __pyx_n_u_ImageNotReadError __pyx_string_tab[46] -#define __pyx_n_u_InferenceResult __pyx_string_tab[47] -#define __pyx_n_u_InvalidElectrodeCount __pyx_string_tab[48] -#define __pyx_n_u_LAYERS __pyx_string_tab[49] -#define __pyx_n_u_MODEL_FOLDER __pyx_string_tab[50] -#define __pyx_n_u_MORPH_CLOSE __pyx_string_tab[51] -#define __pyx_n_u_MORPH_RECT __pyx_string_tab[52] -#define __pyx_n_u_NDArray __pyx_string_tab[53] -#define __pyx_n_u_NUM_VALID_ELECTRODES __pyx_string_tab[54] -#define __pyx_n_u_None __pyx_string_tab[55] -#define __pyx_n_u_PIL __pyx_string_tab[56] -#define __pyx_n_u_Patchcore __pyx_string_tab[57] -#define __pyx_n_u_Path __pyx_string_tab[58] -#define __pyx_n_u_Pyx_PyDict_NextRef __pyx_string_tab[59] -#define __pyx_n_u_QUOTE_NONE __pyx_string_tab[60] -#define __pyx_n_u_RATIO __pyx_string_tab[61] -#define __pyx_n_u_RETR_TREE __pyx_string_tab[62] -#define __pyx_n_u_RGB __pyx_string_tab[63] -#define __pyx_n_u_SensorImages __pyx_string_tab[64] -#define __pyx_n_u_THRESHOLD_BW __pyx_string_tab[65] -#define __pyx_n_u_THRESH_BINARY __pyx_string_tab[66] -#define __pyx_n_u__8 __pyx_string_tab[67] -#define __pyx_n_u_accepted_boxes __pyx_string_tab[68] -#define __pyx_n_u_all __pyx_string_tab[69] -#define __pyx_n_u_alpha __pyx_string_tab[70] -#define __pyx_n_u_anomalib_models __pyx_string_tab[71] -#define __pyx_n_u_anomaly_detection __pyx_string_tab[72] -#define __pyx_n_u_anomaly_label __pyx_string_tab[73] -#define __pyx_n_u_anomaly_map __pyx_string_tab[74] -#define __pyx_n_u_anomaly_map_resized __pyx_string_tab[75] -#define __pyx_n_u_anomaly_score __pyx_string_tab[76] -#define __pyx_n_u_array __pyx_string_tab[77] -#define __pyx_n_u_astype __pyx_string_tab[78] -#define __pyx_n_u_asyncio_coroutines __pyx_string_tab[79] -#define __pyx_n_u_ax __pyx_string_tab[80] -#define __pyx_n_u_axes __pyx_string_tab[81] -#define __pyx_n_u_axis __pyx_string_tab[82] -#define __pyx_n_u_backbone __pyx_string_tab[83] -#define __pyx_n_u_bbox_inches __pyx_string_tab[84] -#define __pyx_n_u_binary __pyx_string_tab[85] -#define __pyx_n_u_bl __pyx_string_tab[86] -#define __pyx_n_u_blbrX __pyx_string_tab[87] -#define __pyx_n_u_blbrY __pyx_string_tab[88] -#define __pyx_n_u_bool __pyx_string_tab[89] -#define __pyx_n_u_boundingRect __pyx_string_tab[90] -#define __pyx_n_u_box __pyx_string_tab[91] -#define __pyx_n_u_boxPoints __pyx_string_tab[92] -#define __pyx_n_u_box_1 __pyx_string_tab[93] -#define __pyx_n_u_box_2 __pyx_string_tab[94] -#define __pyx_n_u_br __pyx_string_tab[95] -#define __pyx_n_u_c __pyx_string_tab[96] -#define __pyx_n_u_c1 __pyx_string_tab[97] -#define __pyx_n_u_c2 __pyx_string_tab[98] -#define __pyx_n_u_cast __pyx_string_tab[99] -#define __pyx_n_u_category __pyx_string_tab[100] -#define __pyx_n_u_center_dist __pyx_string_tab[101] -#define __pyx_n_u_check_box_redundancy __pyx_string_tab[102] -#define __pyx_n_u_checkpoint __pyx_string_tab[103] -#define __pyx_n_u_class_getitem __pyx_string_tab[104] -#define __pyx_n_u_cline_in_traceback __pyx_string_tab[105] -#define __pyx_n_u_close __pyx_string_tab[106] -#define __pyx_n_u_closed __pyx_string_tab[107] -#define __pyx_n_u_cmap __pyx_string_tab[108] -#define __pyx_n_u_cnts __pyx_string_tab[109] -#define __pyx_n_u_const __pyx_string_tab[110] -#define __pyx_n_u_constants __pyx_string_tab[111] -#define __pyx_n_u_contours __pyx_string_tab[112] -#define __pyx_n_u_convert __pyx_string_tab[113] -#define __pyx_n_u_copy __pyx_string_tab[114] -#define __pyx_n_u_coreset_sampling_ratio __pyx_string_tab[115] -#define __pyx_n_u_cpu __pyx_string_tab[116] -#define __pyx_n_u_cropped __pyx_string_tab[117] -#define __pyx_n_u_cropped_sensor_left __pyx_string_tab[118] -#define __pyx_n_u_cropped_sensor_right __pyx_string_tab[119] -#define __pyx_n_u_csv_2 __pyx_string_tab[120] -#define __pyx_n_u_cuda __pyx_string_tab[121] -#define __pyx_n_u_cv2 __pyx_string_tab[122] -#define __pyx_n_u_cvtColor __pyx_string_tab[123] -#define __pyx_n_u_dA __pyx_string_tab[124] -#define __pyx_n_u_dB __pyx_string_tab[125] -#define __pyx_n_u_data_csv __pyx_string_tab[126] -#define __pyx_n_u_detection_models __pyx_string_tab[127] -#define __pyx_n_u_device __pyx_string_tab[128] -#define __pyx_n_u_df __pyx_string_tab[129] -#define __pyx_n_u_dimA __pyx_string_tab[130] -#define __pyx_n_u_dimB __pyx_string_tab[131] -#define __pyx_n_u_dist __pyx_string_tab[132] -#define __pyx_n_u_distance __pyx_string_tab[133] -#define __pyx_n_u_dopt_basics __pyx_string_tab[134] -#define __pyx_n_u_dopt_sensor_anomalies __pyx_string_tab[135] -#define __pyx_n_u_dopt_sensor_anomalies__find_path __pyx_string_tab[136] -#define __pyx_n_u_dopt_sensor_anomalies_detection __pyx_string_tab[137] -#define __pyx_n_u_dtype __pyx_string_tab[138] -#define __pyx_n_u_edged __pyx_string_tab[139] -#define __pyx_n_u_enter __pyx_string_tab[140] -#define __pyx_n_u_enumerate __pyx_string_tab[141] -#define __pyx_n_u_errors __pyx_string_tab[142] -#define __pyx_n_u_euclidean __pyx_string_tab[143] -#define __pyx_n_u_eval __pyx_string_tab[144] -#define __pyx_n_u_existing __pyx_string_tab[145] -#define __pyx_n_u_exists __pyx_string_tab[146] -#define __pyx_n_u_exit __pyx_string_tab[147] -#define __pyx_n_u_extend __pyx_string_tab[148] -#define __pyx_n_u_figsize __pyx_string_tab[149] -#define __pyx_n_u_file_path __pyx_string_tab[150] -#define __pyx_n_u_file_stem __pyx_string_tab[151] -#define __pyx_n_u_filtered_cnts __pyx_string_tab[152] -#define __pyx_n_u_filterwarnings __pyx_string_tab[153] -#define __pyx_n_u_findContours __pyx_string_tab[154] -#define __pyx_n_u_find_paths __pyx_string_tab[155] -#define __pyx_n_u_float __pyx_string_tab[156] -#define __pyx_n_u_float32 __pyx_string_tab[157] -#define __pyx_n_u_folder_path __pyx_string_tab[158] -#define __pyx_n_u_from_numpy __pyx_string_tab[159] -#define __pyx_n_u_fromarray __pyx_string_tab[160] -#define __pyx_n_u_func __pyx_string_tab[161] -#define __pyx_n_u_genexpr __pyx_string_tab[162] -#define __pyx_n_u_getStructuringElement __pyx_string_tab[163] -#define __pyx_n_u_get_detection_models __pyx_string_tab[164] -#define __pyx_n_u_get_model_folder __pyx_string_tab[165] -#define __pyx_n_u_grab_contours __pyx_string_tab[166] -#define __pyx_n_u_gray __pyx_string_tab[167] -#define __pyx_n_u_header __pyx_string_tab[168] -#define __pyx_n_u_hspace __pyx_string_tab[169] -#define __pyx_n_u_i __pyx_string_tab[170] -#define __pyx_n_u_ignore __pyx_string_tab[171] -#define __pyx_n_u_image __pyx_string_tab[172] -#define __pyx_n_u_image_np __pyx_string_tab[173] -#define __pyx_n_u_image_rgb __pyx_string_tab[174] -#define __pyx_n_u_img __pyx_string_tab[175] -#define __pyx_n_u_img_np __pyx_string_tab[176] -#define __pyx_n_u_img_path __pyx_string_tab[177] -#define __pyx_n_u_imread __pyx_string_tab[178] -#define __pyx_n_u_imshow __pyx_string_tab[179] -#define __pyx_n_u_imutils __pyx_string_tab[180] -#define __pyx_n_u_index __pyx_string_tab[181] -#define __pyx_n_u_infer_image __pyx_string_tab[182] -#define __pyx_n_u_input_tensor __pyx_string_tab[183] -#define __pyx_n_u_int32 __pyx_string_tab[184] -#define __pyx_n_u_is_available __pyx_string_tab[185] -#define __pyx_n_u_is_coroutine __pyx_string_tab[186] -#define __pyx_n_u_is_duplicate __pyx_string_tab[187] -#define __pyx_n_u_is_sorted __pyx_string_tab[188] -#define __pyx_n_u_item __pyx_string_tab[189] -#define __pyx_n_u_items __pyx_string_tab[190] -#define __pyx_n_u_jet __pyx_string_tab[191] -#define __pyx_n_u_kernel __pyx_string_tab[192] -#define __pyx_n_u_layers __pyx_string_tab[193] -#define __pyx_n_u_left __pyx_string_tab[194] -#define __pyx_n_u_leftmost_x_fourth __pyx_string_tab[195] -#define __pyx_n_u_linalg __pyx_string_tab[196] -#define __pyx_n_u_load __pyx_string_tab[197] -#define __pyx_n_u_load_state_dict __pyx_string_tab[198] -#define __pyx_n_u_main __pyx_string_tab[199] -#define __pyx_n_u_matplotlib_pyplot __pyx_string_tab[200] -#define __pyx_n_u_max __pyx_string_tab[201] -#define __pyx_n_u_measure_length __pyx_string_tab[202] -#define __pyx_n_u_measure_length_locals_genexpr __pyx_string_tab[203] -#define __pyx_n_u_message __pyx_string_tab[204] -#define __pyx_n_u_midpoint __pyx_string_tab[205] -#define __pyx_n_u_min __pyx_string_tab[206] -#define __pyx_n_u_minAreaRect __pyx_string_tab[207] -#define __pyx_n_u_mode __pyx_string_tab[208] -#define __pyx_n_u_model __pyx_string_tab[209] -#define __pyx_n_u_model_state_dict __pyx_string_tab[210] -#define __pyx_n_u_module __pyx_string_tab[211] -#define __pyx_n_u_morphologyEx __pyx_string_tab[212] -#define __pyx_n_u_name __pyx_string_tab[213] -#define __pyx_n_u_next __pyx_string_tab[214] -#define __pyx_n_u_no_grad __pyx_string_tab[215] -#define __pyx_n_u_norm __pyx_string_tab[216] -#define __pyx_n_u_np __pyx_string_tab[217] -#define __pyx_n_u_npt __pyx_string_tab[218] -#define __pyx_n_u_num_contours __pyx_string_tab[219] -#define __pyx_n_u_numpy __pyx_string_tab[220] -#define __pyx_n_u_numpy_typing __pyx_string_tab[221] -#define __pyx_n_u_off __pyx_string_tab[222] -#define __pyx_n_u_order_points __pyx_string_tab[223] -#define __pyx_n_u_orig __pyx_string_tab[224] -#define __pyx_n_u_output __pyx_string_tab[225] -#define __pyx_n_u_pad_inches __pyx_string_tab[226] -#define __pyx_n_u_pandas __pyx_string_tab[227] -#define __pyx_n_u_parent __pyx_string_tab[228] -#define __pyx_n_u_pathlib __pyx_string_tab[229] -#define __pyx_n_u_permute __pyx_string_tab[230] -#define __pyx_n_u_perspective __pyx_string_tab[231] -#define __pyx_n_u_pil_image __pyx_string_tab[232] -#define __pyx_n_u_pipeline __pyx_string_tab[233] -#define __pyx_n_u_pixels_per_metric_X __pyx_string_tab[234] -#define __pyx_n_u_pixels_per_metric_Y __pyx_string_tab[235] -#define __pyx_n_u_plt __pyx_string_tab[236] -#define __pyx_n_u_pop __pyx_string_tab[237] -#define __pyx_n_u_pred_score __pyx_string_tab[238] -#define __pyx_n_u_pt_A __pyx_string_tab[239] -#define __pyx_n_u_pt_B __pyx_string_tab[240] -#define __pyx_n_u_pyplot __pyx_string_tab[241] -#define __pyx_n_u_qualname __pyx_string_tab[242] -#define __pyx_n_u_quoting __pyx_string_tab[243] -#define __pyx_n_u_rbox __pyx_string_tab[244] -#define __pyx_n_u_resize __pyx_string_tab[245] -#define __pyx_n_u_result __pyx_string_tab[246] -#define __pyx_n_u_result_pattern __pyx_string_tab[247] -#define __pyx_n_u_return __pyx_string_tab[248] -#define __pyx_n_u_right __pyx_string_tab[249] -#define __pyx_n_u_rightmost_x_third __pyx_string_tab[250] -#define __pyx_n_u_s1 __pyx_string_tab[251] -#define __pyx_n_u_s2 __pyx_string_tab[252] -#define __pyx_n_u_savefig __pyx_string_tab[253] -#define __pyx_n_u_scipy_spatial __pyx_string_tab[254] -#define __pyx_n_u_send __pyx_string_tab[255] -#define __pyx_n_u_sensor_images __pyx_string_tab[256] -#define __pyx_n_u_sep __pyx_string_tab[257] -#define __pyx_n_u_set_name __pyx_string_tab[258] -#define __pyx_n_u_setdefault __pyx_string_tab[259] -#define __pyx_n_u_shape __pyx_string_tab[260] -#define __pyx_n_u_side __pyx_string_tab[261] -#define __pyx_n_u_size_diff __pyx_string_tab[262] -#define __pyx_n_u_sort_contours __pyx_string_tab[263] -#define __pyx_n_u_squeeze __pyx_string_tab[264] -#define __pyx_n_u_stem __pyx_string_tab[265] -#define __pyx_n_u_str __pyx_string_tab[266] -#define __pyx_n_u_subplots __pyx_string_tab[267] -#define __pyx_n_u_subplots_adjust __pyx_string_tab[268] -#define __pyx_n_u_t __pyx_string_tab[269] -#define __pyx_n_u_test __pyx_string_tab[270] -#define __pyx_n_u_threshold __pyx_string_tab[271] -#define __pyx_n_u_throw __pyx_string_tab[272] -#define __pyx_n_u_tight __pyx_string_tab[273] -#define __pyx_n_u_tl __pyx_string_tab[274] -#define __pyx_n_u_tlblX __pyx_string_tab[275] -#define __pyx_n_u_tlblY __pyx_string_tab[276] -#define __pyx_n_u_tltrX __pyx_string_tab[277] -#define __pyx_n_u_tltrY __pyx_string_tab[278] -#define __pyx_n_u_to __pyx_string_tab[279] -#define __pyx_n_u_to_csv __pyx_string_tab[280] -#define __pyx_n_u_tolerance __pyx_string_tab[281] -#define __pyx_n_u_torch __pyx_string_tab[282] -#define __pyx_n_u_torch_device __pyx_string_tab[283] -#define __pyx_n_u_tr __pyx_string_tab[284] -#define __pyx_n_u_trbrX __pyx_string_tab[285] -#define __pyx_n_u_trbrY __pyx_string_tab[286] -#define __pyx_n_u_types __pyx_string_tab[287] -#define __pyx_n_u_typing __pyx_string_tab[288] -#define __pyx_n_u_uint8 __pyx_string_tab[289] -#define __pyx_n_u_unsqueeze __pyx_string_tab[290] -#define __pyx_n_u_user_img_path __pyx_string_tab[291] -#define __pyx_n_u_value __pyx_string_tab[292] -#define __pyx_n_u_values __pyx_string_tab[293] -#define __pyx_n_u_w __pyx_string_tab[294] -#define __pyx_n_u_warnings __pyx_string_tab[295] -#define __pyx_n_u_wrap_result __pyx_string_tab[296] -#define __pyx_n_u_wspace __pyx_string_tab[297] -#define __pyx_n_u_x1 __pyx_string_tab[298] -#define __pyx_n_u_x2 __pyx_string_tab[299] -#define __pyx_n_u_x_coords __pyx_string_tab[300] -#define __pyx_n_u_x_max __pyx_string_tab[301] -#define __pyx_n_u_x_middle __pyx_string_tab[302] -#define __pyx_n_u_x_min __pyx_string_tab[303] -#define __pyx_n_u_y_max __pyx_string_tab[304] -#define __pyx_n_u_y_min __pyx_string_tab[305] -#define __pyx_n_u_zip __pyx_string_tab[306] -#define __pyx_kp_b_iso88591_5_q_uM_AQ_9AWCq_Zq_r_q_Jb_5_1IX __pyx_string_tab[307] -#define __pyx_kp_b_iso88591_AQ_t9G1_q_5_ARRS_aq_nA_Q_a __pyx_string_tab[308] -#define __pyx_kp_b_iso88591_AT_Rt1D_AS_at2Q __pyx_string_tab[309] -#define __pyx_kp_b_iso88591_Cwas_1_vS_f_a_H_e1D_fE_q_2Q_7_q __pyx_string_tab[310] -#define __pyx_kp_b_iso88591_IQ_k_Y6MURS_wc_3c_a_F_IQm6_AS_9 __pyx_string_tab[311] -#define __pyx_kp_b_iso88591__6 __pyx_string_tab[312] -#define __pyx_kp_b_iso88591__7 __pyx_string_tab[313] -#define __pyx_kp_b_iso88591_q_D_D_q_q_awb_uARvQd_BfAQ_AWBgU __pyx_string_tab[314] -#define __pyx_float_0_2 __pyx_number_tab[0] -#define __pyx_float_0_5 __pyx_number_tab[1] -#define __pyx_float_0_8 __pyx_number_tab[2] -#define __pyx_float_2_0 __pyx_number_tab[3] -#define __pyx_float_255_0 __pyx_number_tab[4] -#define __pyx_int_0 __pyx_number_tab[5] -#define __pyx_int_1 __pyx_number_tab[6] -#define __pyx_int_2 __pyx_number_tab[7] -#define __pyx_int_5 __pyx_number_tab[8] -#define __pyx_int_6 __pyx_number_tab[9] -#define __pyx_int_12 __pyx_number_tab[10] -#define __pyx_int_20 __pyx_number_tab[11] -#define __pyx_int_50 __pyx_number_tab[12] -#define __pyx_int_100 __pyx_number_tab[13] -#define __pyx_int_255 __pyx_number_tab[14] -#define __pyx_int_500 __pyx_number_tab[15] -#define __pyx_int_1500 __pyx_number_tab[16] +#define __pyx_n_u_ANOMALY_THRESHOLD __pyx_string_tab[33] +#define __pyx_n_u_Any __pyx_string_tab[34] +#define __pyx_n_u_BACKBONE __pyx_string_tab[35] +#define __pyx_n_u_Box __pyx_string_tab[36] +#define __pyx_n_u_CHAIN_APPROX_SIMPLE __pyx_string_tab[37] +#define __pyx_n_u_COLOR_BGR2GRAY __pyx_string_tab[38] +#define __pyx_n_u_COLOR_BGR2RGB __pyx_string_tab[39] +#define __pyx_n_u_Canny __pyx_string_tab[40] +#define __pyx_n_u_ContourCalculationError __pyx_string_tab[41] +#define __pyx_n_u_DETECTION_MODELS __pyx_string_tab[42] +#define __pyx_n_u_DataFrame __pyx_string_tab[43] +#define __pyx_n_u_Final __pyx_string_tab[44] +#define __pyx_n_u_HEATMAP_FILENAME_SUFFIX __pyx_string_tab[45] +#define __pyx_n_u_Image __pyx_string_tab[46] +#define __pyx_n_u_ImageNotReadError __pyx_string_tab[47] +#define __pyx_n_u_InferenceResult __pyx_string_tab[48] +#define __pyx_n_u_InvalidElectrodeCount __pyx_string_tab[49] +#define __pyx_n_u_LAYERS __pyx_string_tab[50] +#define __pyx_n_u_MODEL_FOLDER __pyx_string_tab[51] +#define __pyx_n_u_MORPH_CLOSE __pyx_string_tab[52] +#define __pyx_n_u_MORPH_RECT __pyx_string_tab[53] +#define __pyx_n_u_NDArray __pyx_string_tab[54] +#define __pyx_n_u_NUM_VALID_ELECTRODES __pyx_string_tab[55] +#define __pyx_n_u_None __pyx_string_tab[56] +#define __pyx_n_u_PIL __pyx_string_tab[57] +#define __pyx_n_u_Patchcore __pyx_string_tab[58] +#define __pyx_n_u_Path __pyx_string_tab[59] +#define __pyx_n_u_Pyx_PyDict_NextRef __pyx_string_tab[60] +#define __pyx_n_u_QUOTE_NONE __pyx_string_tab[61] +#define __pyx_n_u_RATIO __pyx_string_tab[62] +#define __pyx_n_u_RETR_TREE __pyx_string_tab[63] +#define __pyx_n_u_RGB __pyx_string_tab[64] +#define __pyx_n_u_SensorImages __pyx_string_tab[65] +#define __pyx_n_u_THRESHOLD_BW __pyx_string_tab[66] +#define __pyx_n_u_THRESH_BINARY __pyx_string_tab[67] +#define __pyx_n_u__8 __pyx_string_tab[68] +#define __pyx_n_u_accepted_boxes __pyx_string_tab[69] +#define __pyx_n_u_all __pyx_string_tab[70] +#define __pyx_n_u_alpha __pyx_string_tab[71] +#define __pyx_n_u_anomalib_models __pyx_string_tab[72] +#define __pyx_n_u_anomaly_detection __pyx_string_tab[73] +#define __pyx_n_u_anomaly_label __pyx_string_tab[74] +#define __pyx_n_u_anomaly_map __pyx_string_tab[75] +#define __pyx_n_u_anomaly_map_resized __pyx_string_tab[76] +#define __pyx_n_u_anomaly_score __pyx_string_tab[77] +#define __pyx_n_u_array __pyx_string_tab[78] +#define __pyx_n_u_astype __pyx_string_tab[79] +#define __pyx_n_u_asyncio_coroutines __pyx_string_tab[80] +#define __pyx_n_u_ax __pyx_string_tab[81] +#define __pyx_n_u_axes __pyx_string_tab[82] +#define __pyx_n_u_axis __pyx_string_tab[83] +#define __pyx_n_u_backbone __pyx_string_tab[84] +#define __pyx_n_u_bbox_inches __pyx_string_tab[85] +#define __pyx_n_u_binary __pyx_string_tab[86] +#define __pyx_n_u_bl __pyx_string_tab[87] +#define __pyx_n_u_blbrX __pyx_string_tab[88] +#define __pyx_n_u_blbrY __pyx_string_tab[89] +#define __pyx_n_u_bool __pyx_string_tab[90] +#define __pyx_n_u_boundingRect __pyx_string_tab[91] +#define __pyx_n_u_box __pyx_string_tab[92] +#define __pyx_n_u_boxPoints __pyx_string_tab[93] +#define __pyx_n_u_box_1 __pyx_string_tab[94] +#define __pyx_n_u_box_2 __pyx_string_tab[95] +#define __pyx_n_u_br __pyx_string_tab[96] +#define __pyx_n_u_c __pyx_string_tab[97] +#define __pyx_n_u_c1 __pyx_string_tab[98] +#define __pyx_n_u_c2 __pyx_string_tab[99] +#define __pyx_n_u_cast __pyx_string_tab[100] +#define __pyx_n_u_category __pyx_string_tab[101] +#define __pyx_n_u_center_dist __pyx_string_tab[102] +#define __pyx_n_u_check_box_redundancy __pyx_string_tab[103] +#define __pyx_n_u_checkpoint __pyx_string_tab[104] +#define __pyx_n_u_class_getitem __pyx_string_tab[105] +#define __pyx_n_u_cline_in_traceback __pyx_string_tab[106] +#define __pyx_n_u_close __pyx_string_tab[107] +#define __pyx_n_u_closed __pyx_string_tab[108] +#define __pyx_n_u_cmap __pyx_string_tab[109] +#define __pyx_n_u_cnts __pyx_string_tab[110] +#define __pyx_n_u_const __pyx_string_tab[111] +#define __pyx_n_u_constants __pyx_string_tab[112] +#define __pyx_n_u_contours __pyx_string_tab[113] +#define __pyx_n_u_convert __pyx_string_tab[114] +#define __pyx_n_u_copy __pyx_string_tab[115] +#define __pyx_n_u_coreset_sampling_ratio __pyx_string_tab[116] +#define __pyx_n_u_cpu __pyx_string_tab[117] +#define __pyx_n_u_cropped __pyx_string_tab[118] +#define __pyx_n_u_cropped_sensor_left __pyx_string_tab[119] +#define __pyx_n_u_cropped_sensor_right __pyx_string_tab[120] +#define __pyx_n_u_csv_2 __pyx_string_tab[121] +#define __pyx_n_u_cuda __pyx_string_tab[122] +#define __pyx_n_u_cv2 __pyx_string_tab[123] +#define __pyx_n_u_cvtColor __pyx_string_tab[124] +#define __pyx_n_u_dA __pyx_string_tab[125] +#define __pyx_n_u_dB __pyx_string_tab[126] +#define __pyx_n_u_data_csv __pyx_string_tab[127] +#define __pyx_n_u_detection_models __pyx_string_tab[128] +#define __pyx_n_u_device __pyx_string_tab[129] +#define __pyx_n_u_df __pyx_string_tab[130] +#define __pyx_n_u_dimA __pyx_string_tab[131] +#define __pyx_n_u_dimB __pyx_string_tab[132] +#define __pyx_n_u_dist __pyx_string_tab[133] +#define __pyx_n_u_distance __pyx_string_tab[134] +#define __pyx_n_u_dopt_basics __pyx_string_tab[135] +#define __pyx_n_u_dopt_sensor_anomalies __pyx_string_tab[136] +#define __pyx_n_u_dopt_sensor_anomalies__find_path __pyx_string_tab[137] +#define __pyx_n_u_dopt_sensor_anomalies_detection __pyx_string_tab[138] +#define __pyx_n_u_dtype __pyx_string_tab[139] +#define __pyx_n_u_edged __pyx_string_tab[140] +#define __pyx_n_u_enter __pyx_string_tab[141] +#define __pyx_n_u_enumerate __pyx_string_tab[142] +#define __pyx_n_u_errors __pyx_string_tab[143] +#define __pyx_n_u_euclidean __pyx_string_tab[144] +#define __pyx_n_u_eval __pyx_string_tab[145] +#define __pyx_n_u_existing __pyx_string_tab[146] +#define __pyx_n_u_exists __pyx_string_tab[147] +#define __pyx_n_u_exit __pyx_string_tab[148] +#define __pyx_n_u_extend __pyx_string_tab[149] +#define __pyx_n_u_figsize __pyx_string_tab[150] +#define __pyx_n_u_file_path __pyx_string_tab[151] +#define __pyx_n_u_file_stem __pyx_string_tab[152] +#define __pyx_n_u_filtered_cnts __pyx_string_tab[153] +#define __pyx_n_u_filterwarnings __pyx_string_tab[154] +#define __pyx_n_u_findContours __pyx_string_tab[155] +#define __pyx_n_u_find_paths __pyx_string_tab[156] +#define __pyx_n_u_float __pyx_string_tab[157] +#define __pyx_n_u_float32 __pyx_string_tab[158] +#define __pyx_n_u_folder_path __pyx_string_tab[159] +#define __pyx_n_u_from_numpy __pyx_string_tab[160] +#define __pyx_n_u_fromarray __pyx_string_tab[161] +#define __pyx_n_u_func __pyx_string_tab[162] +#define __pyx_n_u_genexpr __pyx_string_tab[163] +#define __pyx_n_u_getStructuringElement __pyx_string_tab[164] +#define __pyx_n_u_get_detection_models __pyx_string_tab[165] +#define __pyx_n_u_get_model_folder __pyx_string_tab[166] +#define __pyx_n_u_grab_contours __pyx_string_tab[167] +#define __pyx_n_u_gray __pyx_string_tab[168] +#define __pyx_n_u_header __pyx_string_tab[169] +#define __pyx_n_u_hspace __pyx_string_tab[170] +#define __pyx_n_u_i __pyx_string_tab[171] +#define __pyx_n_u_ignore __pyx_string_tab[172] +#define __pyx_n_u_image __pyx_string_tab[173] +#define __pyx_n_u_image_np __pyx_string_tab[174] +#define __pyx_n_u_image_rgb __pyx_string_tab[175] +#define __pyx_n_u_img __pyx_string_tab[176] +#define __pyx_n_u_img_np __pyx_string_tab[177] +#define __pyx_n_u_img_path __pyx_string_tab[178] +#define __pyx_n_u_imread __pyx_string_tab[179] +#define __pyx_n_u_imshow __pyx_string_tab[180] +#define __pyx_n_u_imutils __pyx_string_tab[181] +#define __pyx_n_u_index __pyx_string_tab[182] +#define __pyx_n_u_infer_image __pyx_string_tab[183] +#define __pyx_n_u_input_tensor __pyx_string_tab[184] +#define __pyx_n_u_int32 __pyx_string_tab[185] +#define __pyx_n_u_is_available __pyx_string_tab[186] +#define __pyx_n_u_is_coroutine __pyx_string_tab[187] +#define __pyx_n_u_is_duplicate __pyx_string_tab[188] +#define __pyx_n_u_is_sorted __pyx_string_tab[189] +#define __pyx_n_u_item __pyx_string_tab[190] +#define __pyx_n_u_items __pyx_string_tab[191] +#define __pyx_n_u_jet __pyx_string_tab[192] +#define __pyx_n_u_kernel __pyx_string_tab[193] +#define __pyx_n_u_layers __pyx_string_tab[194] +#define __pyx_n_u_left __pyx_string_tab[195] +#define __pyx_n_u_leftmost_x_fourth __pyx_string_tab[196] +#define __pyx_n_u_linalg __pyx_string_tab[197] +#define __pyx_n_u_load __pyx_string_tab[198] +#define __pyx_n_u_load_state_dict __pyx_string_tab[199] +#define __pyx_n_u_main __pyx_string_tab[200] +#define __pyx_n_u_matplotlib_pyplot __pyx_string_tab[201] +#define __pyx_n_u_max __pyx_string_tab[202] +#define __pyx_n_u_measure_length __pyx_string_tab[203] +#define __pyx_n_u_measure_length_locals_genexpr __pyx_string_tab[204] +#define __pyx_n_u_message __pyx_string_tab[205] +#define __pyx_n_u_midpoint __pyx_string_tab[206] +#define __pyx_n_u_min __pyx_string_tab[207] +#define __pyx_n_u_minAreaRect __pyx_string_tab[208] +#define __pyx_n_u_mode __pyx_string_tab[209] +#define __pyx_n_u_model __pyx_string_tab[210] +#define __pyx_n_u_model_state_dict __pyx_string_tab[211] +#define __pyx_n_u_module __pyx_string_tab[212] +#define __pyx_n_u_morphologyEx __pyx_string_tab[213] +#define __pyx_n_u_name __pyx_string_tab[214] +#define __pyx_n_u_next __pyx_string_tab[215] +#define __pyx_n_u_no_grad __pyx_string_tab[216] +#define __pyx_n_u_norm __pyx_string_tab[217] +#define __pyx_n_u_np __pyx_string_tab[218] +#define __pyx_n_u_npt __pyx_string_tab[219] +#define __pyx_n_u_num_contours __pyx_string_tab[220] +#define __pyx_n_u_numpy __pyx_string_tab[221] +#define __pyx_n_u_numpy_typing __pyx_string_tab[222] +#define __pyx_n_u_off __pyx_string_tab[223] +#define __pyx_n_u_order_points __pyx_string_tab[224] +#define __pyx_n_u_orig __pyx_string_tab[225] +#define __pyx_n_u_output __pyx_string_tab[226] +#define __pyx_n_u_pad_inches __pyx_string_tab[227] +#define __pyx_n_u_pandas __pyx_string_tab[228] +#define __pyx_n_u_parent __pyx_string_tab[229] +#define __pyx_n_u_pathlib __pyx_string_tab[230] +#define __pyx_n_u_permute __pyx_string_tab[231] +#define __pyx_n_u_perspective __pyx_string_tab[232] +#define __pyx_n_u_pil_image __pyx_string_tab[233] +#define __pyx_n_u_pipeline __pyx_string_tab[234] +#define __pyx_n_u_pixels_per_metric_X __pyx_string_tab[235] +#define __pyx_n_u_pixels_per_metric_Y __pyx_string_tab[236] +#define __pyx_n_u_plt __pyx_string_tab[237] +#define __pyx_n_u_pop __pyx_string_tab[238] +#define __pyx_n_u_pred_score __pyx_string_tab[239] +#define __pyx_n_u_pt_A __pyx_string_tab[240] +#define __pyx_n_u_pt_B __pyx_string_tab[241] +#define __pyx_n_u_pyplot __pyx_string_tab[242] +#define __pyx_n_u_qualname __pyx_string_tab[243] +#define __pyx_n_u_quoting __pyx_string_tab[244] +#define __pyx_n_u_rbox __pyx_string_tab[245] +#define __pyx_n_u_resize __pyx_string_tab[246] +#define __pyx_n_u_result __pyx_string_tab[247] +#define __pyx_n_u_result_pattern __pyx_string_tab[248] +#define __pyx_n_u_return __pyx_string_tab[249] +#define __pyx_n_u_right __pyx_string_tab[250] +#define __pyx_n_u_rightmost_x_third __pyx_string_tab[251] +#define __pyx_n_u_s1 __pyx_string_tab[252] +#define __pyx_n_u_s2 __pyx_string_tab[253] +#define __pyx_n_u_savefig __pyx_string_tab[254] +#define __pyx_n_u_scipy_spatial __pyx_string_tab[255] +#define __pyx_n_u_send __pyx_string_tab[256] +#define __pyx_n_u_sensor_images __pyx_string_tab[257] +#define __pyx_n_u_sep __pyx_string_tab[258] +#define __pyx_n_u_set_name __pyx_string_tab[259] +#define __pyx_n_u_setdefault __pyx_string_tab[260] +#define __pyx_n_u_shape __pyx_string_tab[261] +#define __pyx_n_u_side __pyx_string_tab[262] +#define __pyx_n_u_size_diff __pyx_string_tab[263] +#define __pyx_n_u_sort_contours __pyx_string_tab[264] +#define __pyx_n_u_squeeze __pyx_string_tab[265] +#define __pyx_n_u_stem __pyx_string_tab[266] +#define __pyx_n_u_str __pyx_string_tab[267] +#define __pyx_n_u_subplots __pyx_string_tab[268] +#define __pyx_n_u_subplots_adjust __pyx_string_tab[269] +#define __pyx_n_u_t __pyx_string_tab[270] +#define __pyx_n_u_test __pyx_string_tab[271] +#define __pyx_n_u_threshold __pyx_string_tab[272] +#define __pyx_n_u_throw __pyx_string_tab[273] +#define __pyx_n_u_tight __pyx_string_tab[274] +#define __pyx_n_u_tl __pyx_string_tab[275] +#define __pyx_n_u_tlblX __pyx_string_tab[276] +#define __pyx_n_u_tlblY __pyx_string_tab[277] +#define __pyx_n_u_tltrX __pyx_string_tab[278] +#define __pyx_n_u_tltrY __pyx_string_tab[279] +#define __pyx_n_u_to __pyx_string_tab[280] +#define __pyx_n_u_to_csv __pyx_string_tab[281] +#define __pyx_n_u_tolerance __pyx_string_tab[282] +#define __pyx_n_u_torch __pyx_string_tab[283] +#define __pyx_n_u_torch_device __pyx_string_tab[284] +#define __pyx_n_u_tr __pyx_string_tab[285] +#define __pyx_n_u_trbrX __pyx_string_tab[286] +#define __pyx_n_u_trbrY __pyx_string_tab[287] +#define __pyx_n_u_types __pyx_string_tab[288] +#define __pyx_n_u_typing __pyx_string_tab[289] +#define __pyx_n_u_uint8 __pyx_string_tab[290] +#define __pyx_n_u_unsqueeze __pyx_string_tab[291] +#define __pyx_n_u_user_img_path __pyx_string_tab[292] +#define __pyx_n_u_value __pyx_string_tab[293] +#define __pyx_n_u_values __pyx_string_tab[294] +#define __pyx_n_u_w __pyx_string_tab[295] +#define __pyx_n_u_warnings __pyx_string_tab[296] +#define __pyx_n_u_wrap_result __pyx_string_tab[297] +#define __pyx_n_u_wspace __pyx_string_tab[298] +#define __pyx_n_u_x1 __pyx_string_tab[299] +#define __pyx_n_u_x2 __pyx_string_tab[300] +#define __pyx_n_u_x_coords __pyx_string_tab[301] +#define __pyx_n_u_x_max __pyx_string_tab[302] +#define __pyx_n_u_x_middle __pyx_string_tab[303] +#define __pyx_n_u_x_min __pyx_string_tab[304] +#define __pyx_n_u_y_max __pyx_string_tab[305] +#define __pyx_n_u_y_min __pyx_string_tab[306] +#define __pyx_n_u_zip __pyx_string_tab[307] +#define __pyx_kp_b_iso88591_5_q_uM_AQ_9AWCq_Zq_r_q_Jb_5_1IX __pyx_string_tab[308] +#define __pyx_kp_b_iso88591_AQ_t9G1_q_5_ARRS_aq_nA_Q_a __pyx_string_tab[309] +#define __pyx_kp_b_iso88591_AT_Rt1D_AS_at2Q __pyx_string_tab[310] +#define __pyx_kp_b_iso88591_Cwas_1_vS_f_a_H_e1D_fE_q_2Q_7_q __pyx_string_tab[311] +#define __pyx_kp_b_iso88591_IQ_k_Y6MURS_wc_3c_a_F_IQm6_AS_9 __pyx_string_tab[312] +#define __pyx_kp_b_iso88591__6 __pyx_string_tab[313] +#define __pyx_kp_b_iso88591__7 __pyx_string_tab[314] +#define __pyx_kp_b_iso88591_q_D_D_q_q_awb_uARvQd_BfAQ_AWBgU __pyx_string_tab[315] +#define __pyx_float_0_5 __pyx_number_tab[0] +#define __pyx_float_0_8 __pyx_number_tab[1] +#define __pyx_float_2_0 __pyx_number_tab[2] +#define __pyx_float_255_0 __pyx_number_tab[3] +#define __pyx_int_0 __pyx_number_tab[4] +#define __pyx_int_1 __pyx_number_tab[5] +#define __pyx_int_2 __pyx_number_tab[6] +#define __pyx_int_5 __pyx_number_tab[7] +#define __pyx_int_6 __pyx_number_tab[8] +#define __pyx_int_12 __pyx_number_tab[9] +#define __pyx_int_20 __pyx_number_tab[10] +#define __pyx_int_50 __pyx_number_tab[11] +#define __pyx_int_100 __pyx_number_tab[12] +#define __pyx_int_255 __pyx_number_tab[13] +#define __pyx_int_500 __pyx_number_tab[14] +#define __pyx_int_1500 __pyx_number_tab[15] /* #### Code section: module_state_clear ### */ #if CYTHON_USE_MODULE_STATE static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) { @@ -3330,8 +3330,8 @@ static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) { for (int i=0; i<2; ++i) { Py_CLEAR(clear_module_state->__pyx_slice[i]); } for (int i=0; i<7; ++i) { Py_CLEAR(clear_module_state->__pyx_tuple[i]); } for (int i=0; i<12; ++i) { Py_CLEAR(clear_module_state->__pyx_codeobj_tab[i]); } - for (int i=0; i<315; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); } - for (int i=0; i<17; ++i) { Py_CLEAR(clear_module_state->__pyx_number_tab[i]); } + for (int i=0; i<316; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); } + for (int i=0; i<16; ++i) { Py_CLEAR(clear_module_state->__pyx_number_tab[i]); } /* #### Code section: module_state_clear_contents ### */ /* CommonTypesMetaclass.module_state_clear */ Py_CLEAR(clear_module_state->__pyx_CommonTypesMetaclassType); @@ -3374,8 +3374,8 @@ static CYTHON_SMALL_CODE int __pyx_m_traverse(PyObject *m, visitproc visit, void for (int i=0; i<2; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_slice[i]); } for (int i=0; i<7; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_tuple[i]); } for (int i=0; i<12; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_codeobj_tab[i]); } - for (int i=0; i<315; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); } - for (int i=0; i<17; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_number_tab[i]); } + for (int i=0; i<316; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); } + for (int i=0; i<16; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_number_tab[i]); } /* #### Code section: module_state_traverse_contents ### */ /* CommonTypesMetaclass.module_state_traverse */ Py_VISIT(traverse_module_state->__pyx_CommonTypesMetaclassType); @@ -8642,7 +8642,7 @@ static PyObject *__pyx_pf_21dopt_sensor_anomalies_9detection_6infer_image(CYTHON * output = model(input_tensor) * * anomaly_score = output.pred_score.item() # <<<<<<<<<<<<<< - * anomaly_label = bool(1 if anomaly_score >= 0.2 else 0) + * anomaly_label = bool(1 if anomaly_score >= const.ANOMALY_THRESHOLD else 0) * anomaly_map = output.anomaly_map.squeeze().cpu().numpy() */ if (unlikely(!__pyx_v_output)) { __Pyx_RaiseUnboundLocalError("output"); __PYX_ERR(0, 178, __pyx_L1_error) } @@ -8665,11 +8665,17 @@ static PyObject *__pyx_pf_21dopt_sensor_anomalies_9detection_6infer_image(CYTHON /* "dopt_sensor_anomalies/detection.py":179 * * anomaly_score = output.pred_score.item() - * anomaly_label = bool(1 if anomaly_score >= 0.2 else 0) # <<<<<<<<<<<<<< + * anomaly_label = bool(1 if anomaly_score >= const.ANOMALY_THRESHOLD else 0) # <<<<<<<<<<<<<< * anomaly_map = output.anomaly_map.squeeze().cpu().numpy() * */ - __pyx_t_2 = PyObject_RichCompare(__pyx_v_anomaly_score, __pyx_mstate_global->__pyx_float_0_2, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_const); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ANOMALY_THRESHOLD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_v_anomaly_score, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_16 < 0))) __PYX_ERR(0, 179, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_16) { @@ -8685,7 +8691,7 @@ static PyObject *__pyx_pf_21dopt_sensor_anomalies_9detection_6infer_image(CYTHON /* "dopt_sensor_anomalies/detection.py":180 * anomaly_score = output.pred_score.item() - * anomaly_label = bool(1 if anomaly_score >= 0.2 else 0) + * anomaly_label = bool(1 if anomaly_score >= const.ANOMALY_THRESHOLD else 0) * anomaly_map = output.anomaly_map.squeeze().cpu().numpy() # <<<<<<<<<<<<<< * * img_np = np.array(pil_image) @@ -12739,31 +12745,31 @@ static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) { static int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate) { CYTHON_UNUSED_VAR(__pyx_mstate); { - const struct { const unsigned int length: 10; } index[] = {{1},{3},{3},{81},{51},{31},{72},{179},{72},{36},{1},{1},{1},{1},{8},{4},{7},{6},{13},{2},{47},{9},{24},{21},{4},{38},{5},{9},{17},{17},{14},{19},{32},{3},{8},{3},{19},{14},{13},{5},{23},{16},{9},{5},{23},{5},{17},{15},{21},{6},{12},{11},{10},{7},{20},{4},{3},{9},{4},{20},{10},{5},{9},{3},{12},{12},{13},{1},{14},{3},{5},{15},{17},{13},{11},{19},{13},{5},{6},{18},{2},{4},{4},{8},{11},{6},{2},{5},{5},{4},{12},{3},{9},{5},{5},{2},{1},{2},{2},{4},{8},{11},{20},{10},{17},{18},{5},{6},{4},{4},{5},{9},{8},{7},{4},{22},{3},{7},{19},{20},{3},{4},{3},{8},{2},{2},{8},{16},{6},{2},{4},{4},{4},{8},{11},{21},{33},{31},{5},{5},{9},{9},{6},{9},{4},{8},{6},{8},{6},{7},{9},{9},{13},{14},{12},{11},{5},{7},{11},{10},{9},{8},{7},{21},{20},{16},{13},{4},{6},{6},{1},{6},{5},{8},{9},{3},{6},{8},{6},{6},{7},{5},{11},{12},{5},{12},{13},{12},{9},{4},{5},{3},{6},{6},{4},{17},{6},{4},{15},{8},{17},{3},{14},{31},{7},{8},{3},{11},{4},{5},{16},{10},{12},{8},{4},{7},{4},{2},{3},{12},{5},{12},{3},{12},{4},{6},{10},{6},{6},{7},{7},{11},{9},{8},{19},{19},{3},{3},{10},{4},{4},{6},{12},{7},{4},{6},{6},{14},{6},{5},{17},{2},{2},{7},{13},{4},{13},{3},{12},{10},{5},{4},{9},{13},{7},{4},{3},{8},{15},{1},{8},{9},{5},{5},{2},{5},{5},{5},{5},{2},{6},{9},{5},{12},{2},{5},{5},{5},{6},{5},{9},{13},{5},{6},{1},{8},{11},{6},{2},{2},{8},{5},{8},{5},{5},{5},{3},{284},{118},{52},{898},{340},{2},{2},{139}}; - #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (3091 bytes) */ -const char* const cstring = "BZh91AY&SY\355\244\247\\\000\001\240\177\377\377\377\377\377\377\377\377\377\277\377\377\377\277\377\377\362@@@@@@@@@@@@@\000@\000`\013\035\357\247\337/\033\337e:o\030v\305)\364j>\335V\336\353\331A\353\317\200\037|\032\247\221\020\246\232=#\311\251\355S\301\0314\300\324\236O@\005<\232\232l\243OM#'\265C@z\231\006\023\032\214\200\315&\206\203B\001\030\200\021\242i\351\006S*~E?T\3653Sj~\250\0314\0004\320\000\000\000\030\206\217D\003 jz# E6\247\252\236i\244\375SP\003M\000\030\200\000\032\000\000\000\000\r\0324\003\3244\00050$F\205\017L\247\223I\342Oi& \000\000\000\000\000\006\200\000\000\000\364\215=M4\006j\204MMO)\346\243Si\244\310\311\210\000h\003@\000\0004\000\003A\352\032\000\000\000\000\321I\355H\236\021\250dd\001\220\032\032\003@\000\000\000\000\000\000\000\000\000\002H\300a\316\316\005\017\326\034\377\332\220Cw%\030`3\301\310\352\216\221\212\200\024$\023B\003\372\003\004 L@\304\010M\003@\320\010\000g\361\316\004\200a\001=\004\210\216\344\277\210\032\231i\370/\344 \020 GK\262M\203#\006@\201\240H\022@\n\211%R\244\3237'&\245\025z\341DR\251<\310Nl\0053uIL\207D\367\022\236i\231pS\230-\320\347QJq\251\310\305\270\006\025M!\025X\220H \211\000\220\023\002\242\360\032\200\315\023ws6q\031c\013\023\311-\235\362\320\234\005/\210c\210V\215\022\250\r\342\225\330\032\032)\246k\001k\252U\216G\364W\020\362\025D\t\312Px\nxYq\001\021\230\263C\312\303rS\374i\037\347\326\371\277\025\\)\303\346O\227\317\177\274\322\201\2222\347\216\371.\376\034\311Qb/\373_\370\302R\254\312\003{Jm\006E\301\035\000\320\245,\222\306.\253),\306\021\252V\026\205\310lt\326E\325D\031f\352\240\220\257\357\235\302\263\301^\014\331M:\205\021\001b\314\313*l\347\332\313E\262\263o\n\224\203D)\352\214O\004\251D\261l}\335\241\350ag\006i\311\231\215u\000\013\023\007:\036\036\335\014\005>\2405_KHW\237\266\230/\334yj!\260\271\371\025\242\203\"\300\300h\024\336s\365\304\245\377~\350\234\342)\224\345\203\216\023\201\330}\261\242\210\020\311\2118\215\005\301\240\025\215\005:f4i\263D\316\251\275jI\003\320N\315\241\202\350""\033[\237\\0\260\236>^\351av\362K\211\033\312F\\d\200Y@?S)K+\005\223\230\2643Q\255\r\301O4&\265\235\237\302E\353\242Ye\372.\"1\352\375\354w\230\313\321\347\323\253\317\225\265\365\250;\022\300d-\320\277\220\345:\223\330\356\376\207\032\242\"5\304rq\234}\236\224<\371\305K\357v\306mx@N#/c4\335u\227S\355\221\306O\340Y]w\013\257\231\035\320\2108\033\361\363\301z\n\000v%\302\311J\270\321\333\206c\237\265\253\210\035=y\347af/6u\013zz\255Xr\226-g.\033\030\3359\252\032\1776\266\233\204\304y\330\245z3\311\303\200\257o]\343w\\\203\206\205\214=;\267\250M\332\374e\261(g\213\000\321\342\353\311\205\2604\360\270&S<\260\2458`PW]x\252Sc\332\027u.\026U\t\242\030\210\032\377ojb+\260\274\020\363\rt\310Y\261\023\177@\224Dc\232\240!G\241\355t\326\016f\335\360!\260q\341}|\245g\314\212\306\213\305AD\032\261\306\356\327\367 pm\303\025\265\250\030(\331\330\rP\351\370\313\302\177\221\030d\241\310\213\236\2038\260\326\202\263wm\346+\322\223h[qFr\375t\275ls\211w$e\335#\035\254\350\001_\352\331\203\342\343+?_\313\216\254\261\206\017p;\004\351m\020\265wb\021\261J\305\004\324\031$B\004\266\330\224\020\273\360m%\026 \265\304\\F\271\211\311\355D\000\211\212%\336R\241\270P\"v\252\362&\217\310\225\306\346c\013\210\345\302\242\213=\260\005\214\007tr\356R)\010\300_\253]_\007\375\270\234A\364\031B\352}\376\r\271W[\361\035\262\360)\213\255\2423\221\211\315\336\340]TeCi+\363qS\224\314q\0208\361`\256\200n\213\014\000\212\213\\\315\227\\6\233\t\344\036}\244]\203\257\263\340 _\220\330h\242\36159\267\215\322\327Y\260nen\350}\203i\373\307\001\307\300\274]\346\337^\303\327;\004\024g\337nC^C,\035\313TG?\263\244\254c\362p0\206vh\"\253\271\031;\005*\326\234\025j\342\271\331[\330\352\223K`\002X\021$\350)\307\253hgY\337$w+\013@\221\010K\252\323-\314\364\032q4\254\034\264\321\010\260\336\354\342\254\300\016\305\205\022\246\245\037\236\201m\270\312\344\027\230(\304\332\246\260\177k\257\030d\223\221\232\027\033b\312!S\253\203\2550\216:D\216vD\354K\035\034xe\227\r[5\363$\301\216\\\265X\266\334\307\345\301\202\372w\212""\t\204\361\356\255\254hr\031\240\356\212Pt\016hA\242M{D@\n\213Q\376J\026\033\311\216)AA\032\246\016\325W\301\236M\2640\276\253\260\rl.o\025x\263jM\251\304\030\016*\016\006\252\320Z\226D-\032\034;\311DK\331V\017S\031l&\327\330\322\346}\202\2619;\302\367\213\334\0368\262\336+\261m\322d\315\345p\312\363\311x\006\301\004s\235\265#\354pN\376\022\201\205a\327\020\027M\227\006omU\240m\211\242[\210\241\307%SP\347\3367\353\036^\317Q\3219\320N\330\265\236\314p\025\017\371\266\345\366v\267\235\210b\034\313\244\006x\013\270j!h\025\021\356\247\260\025\246P\251\0102\313\030\361\272\362\024\343\311\222\333jS\n\030\2633j|\335M\255\005\214A\031\020\252D{\330`\212\"\033\224\320\200\226v\2270\254d\315qWRU\300@\037P\247\216a\214,\215\241\252P\014`\016\3059\006\253sPi\214\3366\271\307q^\244\354\345wc\351\256O\362YB\205Ej\336g\331;f\266\035lM\002.v\276\341\240\017`\332\204A\351\327\214\260\257\242\351\206[\270\320\214\242\222A!\013L\267A\035\310+'\233\267g\254SC\2517\226p\326\265\017\254\212I`\272\202\245\007oU\033\267\312\314\242\271^\022\246\274#\n\214\005\"\327{\024\r\331\354!\351\322 A\301\340\030;\016\320\205&\030P\014-\254\202\032\350\246a\031x\361 \300\020NJ \010\262t\013b\036\240m\357\33280[\200\211\262\212\027\244e\331\036\241C\020E\353\n\261\"i\246\235;\344Hv\010H$\022\201\002\326\346Q\253\006\n0H\225\202\"EL\202\234\222\3444\204\3270A\010\006\240k\210+\007a\343\213\002\n\204\242)6h\201\211t\301m\226\203dA\307\001\250\214\315D\245\031\020D\327Q\240\255v\313u\320\363\255\200\313h\245~\024&\032\265\000\025f\000\273\315\013\374\005r\325\026\326\324\247\025bX2\253\273)\2426ST\343\327u\030\301\250\023\245\234\262\302\225\221\031\221R*\224\332&a\241\020Z\365\225\217\013\r\"\232\221\017j\205&3\2426!d\235\265*\352\260\257M\245\t\"\262\302\303T\252\244\013k\r\310q%c\031J\333\216\246\214\245K w\324\271\205\222\017.%\251u\235\003\313\323\017&\332\337X\026\3360'\212\367\264\202:\2277\222\222+\230\202\370)\270 \350\010\010`C\002=Z\327\001V1]\241\222\2260\275\324\310~\016\226\260\257\204""\022\212B\000H\306\221\223-p\251\32152\235_^^%h\243\036\025\225\254lU8\306\3356e\022\240\276\327)\272[)P,%Si)\023\304\314P\004\2562\000n\205q<(I+*\007\210SI\006\032\031\235*Q\205()\213\331\230\331\260\r\323\302\002\271%\033\010\020\2579\302\366\333%\004\201\241\031\030 6\262\273\004\014Q\266BH\210\266\226\312b\r*\256\006$a\254\222\313Sk\341\205c\026\313ZK\214\202fN8\242\002g\213{\337\242\204\270QU\022`h0\310\333[.\n|\203\324\243\261mUV%\253y\260NJ \261\3260\002\265\340\366\372\273\206\341\270p\271\267\201A\346aU\341\237wC\031\320+\330\270\227\235\265#\t\266\003u\267\320=n\333)\013\025\003~B\320 \221:\"\202'\267\225\"\341\202\200\037\t\245\010\300\035#0s\333'\300N\243d\026y\235\240\214\226q]\353\315\200n\215\006\025;b\251\221\231\031\213L\033\273pu\235\253T\036\334o\307\000\035\223%M\004B\263\252\245\030\273\032\324\361m\026\004Wz\2258\200\343DT^\2367A\253\306\312\352\346g\240Zi\313\341\263\335\261\340U\257+p\271\340\303\373k\321\321\302E\221\212}\361\201\271\255?H\312z\005\250\236\024\020\200\267?\205\177P`C\317X\327\343\272\"\350\304Zi\223\013\203M\254\021\017lF\321!\340\226\336\025Q\013\321(a\206\251W\002\212\242\232\"\230\212\361\322\240-\000\032\3123\000\314\005\201\222\301\270\202\020\225\021\341\256\003\000](\254F\267\250\316a1\304\211\003\226\236\030\313]\204+\025f\316\023\365)\361\374\205\376\337\305\371\210!+\257\305\232\313\3646\035~\303\331\0131\227s1r\251\224\007\001\335\364q\341\253\032_(\256\377\314\272%\3362\r@\226\\W1m\226\370\241\t\033\010A\357\000IBYk\234\275J\004\031d #r\311\262\013{\207\230\320\013U\031\277\211\377H\373\3115\002\002\204\n8\320\"\374\254H\350BK\236@\341\223#`\207*\r\261\231gq\t)b\213\024\364\333 \233%\261+O\357i\265d\262s\001L26A16\267?\020A\246i\003\346\232;Z\001\233*\t\251\201\2377\017\032\306'o\2539,\353\315\014\357\374\326\010?\327\005\023g\222}\263\246\332\332\241]\303\027)\334\345|*\020hW\t\235J\205Ji\250\225v\314\022\270\253\177\177tj\325\254\232\233\352\231\304\332\344\257\347\252+\226\241XPU\016\n\247\253v\365\212\264""\342\327\250\200+_Z\365k\356j$l3B\255#\024=\300\212\232\0026\305\35259\316\221\\Rx\014\321f\200\242Zs\no\276\3461\336\303\204]\031\314K-\233\262He\232\222\365%J\220\320+\335\346\270\245\335\345Q\010`JX\357f\251\340\224\244\246\251J\323\321\267r\374\237\345\366\255\215(\326\242\304\265e\245;\235\021`\213\020s,v\341:}\301\376\025\206\265|Wp\023\350z\330\272*\234\030\02060A\237t>\017X\346\0140\363\220\r)R\231\361\001\242\356\315}Q\263Wd8\004)v\332\243\264:x\356\206+\323\260|6\311\344'J\007\260\300_\320\3741'RtT8n\031\313\265e\314(kDxIq\257\005+*\254\316A\200\354H\252\354\346\220\"`\325L+fy2(\033\264\262\321R\232cRbt\205\326Qe+\022\241\312\304\242\036\261\\\301\236\364\260\"\261z\001\301\3510H\216\001\210\332JG'\306\321\3075x\311\003d\351\213\242\315\032S\233,\360\n\351@D\377\361w$S\205\t\016\332Ju\300"; - PyObject *data = __Pyx_DecompressString(cstring, 3091, 2); + const struct { const unsigned int length: 10; } index[] = {{1},{3},{3},{81},{51},{31},{72},{179},{72},{36},{1},{1},{1},{1},{8},{4},{7},{6},{13},{2},{47},{9},{24},{21},{4},{38},{5},{9},{17},{17},{14},{19},{32},{17},{3},{8},{3},{19},{14},{13},{5},{23},{16},{9},{5},{23},{5},{17},{15},{21},{6},{12},{11},{10},{7},{20},{4},{3},{9},{4},{20},{10},{5},{9},{3},{12},{12},{13},{1},{14},{3},{5},{15},{17},{13},{11},{19},{13},{5},{6},{18},{2},{4},{4},{8},{11},{6},{2},{5},{5},{4},{12},{3},{9},{5},{5},{2},{1},{2},{2},{4},{8},{11},{20},{10},{17},{18},{5},{6},{4},{4},{5},{9},{8},{7},{4},{22},{3},{7},{19},{20},{3},{4},{3},{8},{2},{2},{8},{16},{6},{2},{4},{4},{4},{8},{11},{21},{33},{31},{5},{5},{9},{9},{6},{9},{4},{8},{6},{8},{6},{7},{9},{9},{13},{14},{12},{11},{5},{7},{11},{10},{9},{8},{7},{21},{20},{16},{13},{4},{6},{6},{1},{6},{5},{8},{9},{3},{6},{8},{6},{6},{7},{5},{11},{12},{5},{12},{13},{12},{9},{4},{5},{3},{6},{6},{4},{17},{6},{4},{15},{8},{17},{3},{14},{31},{7},{8},{3},{11},{4},{5},{16},{10},{12},{8},{4},{7},{4},{2},{3},{12},{5},{12},{3},{12},{4},{6},{10},{6},{6},{7},{7},{11},{9},{8},{19},{19},{3},{3},{10},{4},{4},{6},{12},{7},{4},{6},{6},{14},{6},{5},{17},{2},{2},{7},{13},{4},{13},{3},{12},{10},{5},{4},{9},{13},{7},{4},{3},{8},{15},{1},{8},{9},{5},{5},{2},{5},{5},{5},{5},{2},{6},{9},{5},{12},{2},{5},{5},{5},{6},{5},{9},{13},{5},{6},{1},{8},{11},{6},{2},{2},{8},{5},{8},{5},{5},{5},{3},{287},{118},{52},{898},{340},{2},{2},{139}}; + #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (3094 bytes) */ +const char* const cstring = "BZh91AY&SY\255l\2310\000\001\240\177\377\377\377\377\377\377\377\377\377\277\377\377\377\277\377\377\362@@@@@@@@@@@@@\000@\000`\013=\357\245\347\3367}\203\246\361\353\336\255D\327\336\307\272w2\335\273\326H\365y\360\003\357\201\251\221\022h\21546\223M\243I\223\323M3D\233\323CL\232S\311\244<\2434\365M4yC@d\320m\023\032\215\000\331&\206\203D\023\021\221\220\021\251\247\251\351\0324\002\214\204\365=\251\2426\223A\200F@\311\221\221\200C\324\364\233I\262\002\006\032\236\204\320\021\032\025\037\243MF\243\324<\240\032\006@\0004h\000\000\000\000\000\000\320\320h\rL\t!\250\324\323\324\362\236\324\364\243d\311\030i\032h2\000\000\000\000\032\000\000\000\003#OSM\001\232\240SS)\241\345=F\233S#@\r\000h\000\006\200\000\320\000\320\320\332\206\200\000\000\000%\021=\"1\032d&$\006F\215\006\2151\000\320\000\000\000\000\000\000\000\000\003I#\001{GD\024?W\264\277jA\r\235E\350\r r:\243\244b\240\005\t\004\323\200\376\200\301\010\023\0201\002\023@\3204\002\000\031\374tEb\273\t`Ff\216\234\344\026)f\266&s 0\303>\022\244\342\242\212\202(\320$\t \005T\222\255ZsnNMJ*\323\205QJ\265&\204\347\235Sn\271)\241\325K\364\2519\262\374T.7S\242\212T\032\241\030\267\000J\356\317$O|J*\212(\300\344$\n\344\310P\0259\327nU\010\310\232\302J\215$WM\260\314\230\005\rx[\010E\023\010T\006\261B\244&\023\n(\245@)UB#u\273\"\360\322\025<\na\0074\004\264(\266\200\204.\365\346xH\330\212;\224\017\263\374y\337\215>\004\346\371S\346s\245\370\032P:4y\303\275K\313\2272TX\213\376\367\376p\214k2\200\336\321\233\301\221s\343\246\032\027\324$\241\030\272\255\002YL#S\252'\030P\331\353&\026U\020c\233\252\202B\304\337;\205g\202\274\031\261\232\342\205\021\001b\314\313A6\2673(Rlm\013b\235\360h\205;\246.A)\322,\032\377whz\030M\237\240rgX\262\200\005\211\203\270\207{\267G<\256k\303T\340\346\350\343\364\242\345\177\326\226\202\033\205\301\272\234\322\026\365\205\203@L\334\007\335\020\207\374\376\002\232^(\2058\224P\224\021\226{=,X@\202\244\266\332b\002\260e\314D\371r24*\315\317\311\337MK\026\002\204v\206\315\2006\355\375xnge\2458=}\322""\271\211\213\275\006I\242>0\304\000\262\200\310FR*.\027Vg\341f\303Q\255\006\320\227\032\t\223/\243\373\322]\324\"R\267Z\236\036\376_\354\266w\314\273{5\362\366!\\y\222\031y\\0\025\356\346_\344 \352G\313\327\357\033\352xx\322\361\273\307K\376~\024\036;\005J\362\031\270\275M$\003w\036>W\032-\257\022\377R\357\036\356]\274qv8\360\362\3326\016\343{\337\357xi#\310\\:s\275K\243\221\241w\343\340\321\264\016\036\\q\221b-5\362\025|<\225\2501*Q\365.\305g~\2467_\004F\277\232i\250\264@B\033&R|\272\2644m\022\346\310\356\034\331\234\003\006\262\301\337\226\335\364\212Yo\212V\016\213eU\0162\2621\241\255\002\3340\204\252g\220\024\261\003\002\202\272\345\212\205-\251\341f\353\205r\202b-H_\027OJ/\021\221r;\2764\321\002\226\342\021\257`\203\303\337\212\\\035<\376?\203\206 \324skq\r\301\267\212\330\357\024\273\017P\315W\244$\204\312\033l\351o]\001\202k\0068-\2140\270\300\206\300$\337\346T\207\326\211\322\216:\211\302\021\232I\234l5\362W\276\205|\312\323p\030\252+_\320\237\017\r[$\234\243\275\221C\313(1\235\000+\375\333H>\0361\264\271\034\306\317\2260\302W\003\256N\222\314\026\262\223\220\217\212U\220MA\2120@\226\320#\0042\227\0372QX\027\270i\006\256\2218\312\324@\010\230\242^Q\215\r\302\200\3075e\022i.Ln:\r#\013\206\313\232\362\263\344\244\tU\r\262\317\222\367=\310\241\027.\213;O\324i\032\022WT\255T\271w!S\352\247\274\226\366\240-yh\255\361\300\214q\227<6j\353\253\332\032\266J\026\327\211\034B\206\374Q\031\352\014eb\000\032J\361i\352T\026\t\241$\004\205\223\010]\030\367sL.a1\032Cb\347\207he\r15\214\227\026ll\206\243\346`\033x\325{;\372\343\270zi\220rL\373U\3404\3400\271\233\324\345\026\376\266o\260\032M\\A\0043\232\212*\273\221\223\260R\253;\202\253XV9\226\335\245I]\240\003Q\031\247bE*\346\230\254\235\257\222\030\303IPF`\211|\232\245u\232\206\255\315S\223\013\315\020\213\r\316\305\225\342\001\311\202\301qU<\244\014\372L4\240\324D/r\352\361\037E\226\213\260E03Am\255\353\235\3252.ef\020\303\240@\351\223\316H\223\037\177\026\030qh\336\335\340LA\033\372\3672g\323\031\353\341\210\325n\214V""\021\204\307\372\317\027\022BPu\367J\232\216\nQ\306\0177\027\000*-G>0\260\334LqJ\n\006\252a'\252\313\007\224_0\302\371\356\340=\260\271\273,\306[S\027N @\224*hW:\r\t\225\303#\211\016\342\t\"V\345W5+]n\246f\312b\337l\204E0gKZ-`h\332\272\366\252J\233:Iz\312\301\205\247\202\256\0239\001V6\210\241\232X\014\361\202\310\312r\3510\023\253K\301\265\224Fw\007\230\354\035)\320Dm\220\353\213v\205\251\206\342\357>2\225\375\030FuR\236\265QLiX\250\267r_\201h0\355\365P\002\370\313\2544\020\254\n\210\362\243\234\025fN\251\004\027)-\243+HQ~\r\364\251j\026/+\316@5L\255]\274\376c\010F\226\025\310\217\201\013\202\210\206\3458@E\213H\312Y\311k\344\344\357\250+\013\216K\246\3003&\022\300\203\336\014\301\035\327g\313\325\342\2211\214Z51\207aZ\224s\3573\235\264F\r\354Jt\212\212\2654\317\236\232\351R\316+Fa\n\246\266\3303\001\253\032\220D\032\216[\341tvYH]y\032\010\311\350\202\004\003\2532\311\310f\350\2114\331\226:C\265\034Q\241-,\0238f\006\034\264\222b\022\207\016\251\322/|\254\352+\225\341\032k\301\241\230\200\250\315\252*\014\266o@x6\024\024\200\220\230\004\034\215\245\007{1E)\274\nA;\353\310\225(R8r\020\320\202\314SB\261\013q\260D\252\006\215\226l\034-\300D\335\242\205\340u\335n\025\016A\027\254*\344\211\246\335\2754\262$I\302\022\t\004\240@\265\271\213U\303\205\030#\025\202\"2\230\2056\2352\220bG\324(\205\305\210X\027\234FIC\204\"\277\022%R\351\3050\333\207<\257\020\"\021\2105\021\231\244\222\223\"\010F\232\215\002*\256\031X\357\032\267\0145\n\025\322\202Y\247@\0012\270\027h\320w\350\032mn\003\262r\3263\250\372\240Q\004\r1\004%\262\004\3020&\001\013\201l\360\n\272\340L!a\233\014\\bC\204A\242m\014\246\030\350\026\006(\353\230\031M1\371fT\346\024\224\220x\344\npf\333\307\030r\340\276_\312*\230\252i\212U\330L\230\320X11$&5\010\0168j\342\252wZ\204O<\357\347\230\016?\017\243\201S\362\265*\271\027\003B\214\3003\001\000\321\304\370\245\363\010\314\304\2000E+\237t\277#\325l\016\273u\021\304q;\"i\350B\311b\344\264\327\270\325\3618r\362dd\264\204\256\277\026S3hl;8\357h,\206]\310\302\334Y\224\007\001\335\364ra\254\032_(\254\237\231tK\034\322\030bX\321\\\345\271X\245HH\304\204\036\374\"\000\032\265\206\270\270\014\204\311\201!6\352\034\300[\334<\206\220]\364\346\376'|\363\267\224h\t\010 Y\302\241\027\345rO2T\\\262\007\014\231\033\004.\244\340\031\226\177\020\222\251m\313sN\002J\002\240\022\316}\352\300yM\036\200-\003#h\024\266^\345\342\t52@\371\031\035\215\020\325D\006U\022c7>\213\230\233\276\264\3255\341d5\277\362\\$\377\\\r\233\\s\253\033\220+,\026\266b\273\225\356\343\207HY\024\202\246\320\236\353\212uKn\030%\257=\375\375\267F\213\312w}c8\273|t\266(\212E\252T\320(\210$\357\243u\372t\\\215I\324\200\365\225\337z\316\023\252\033\rO\243@\304\377h\"q!;\201\366\335\345:\005]\023\200i""\266\247\206\313O@\231\367W\3007\356\\\026\006|\271E\265bI\014\263D\255V\030\221h\023\375\333\\R\254]BS,0\271\277\232\215F\020\305\252\014i\366\253W\221g\371f\325a\334\217V4Z\265-#K\2326H\247\223\231O\263\326\303\307\340\377\007\206\275+\326\004<\277\005\356gN&FG\227\327\022n\240\2061er\tR\2618\300\355\311\2233X\r(T\336|m;\264 \202\r\322\263?\3309\327pa\013\317\315\331\370[,\\\250H\030\321@\207\347\2103\330\325rtu_\301\023b\350\357\3600\361\037]\\\226\207N\322\273+3\220`;\022*\2739\244H\311\303\352\214+\347y1i\033\306\224\253\033\335\030\304\272\302\353\026u*\305D\212\261D=j\310\301\345zX\021V\225\000\337\364\034#\r\361\210\314\224l\245\215\233\035+&\212\007\312I\214\221f\217\031\315\326x\005\222P\021?\374]\311\024\341BB\265\262d\300"; + PyObject *data = __Pyx_DecompressString(cstring, 3094, 2); if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error) const char* const bytes = __Pyx_PyBytes_AsString(data); #if !CYTHON_ASSUME_SAFE_MACROS if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) } #endif - #elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (2997 bytes) */ -const char* const cstring = "x\332\215V\313r\333F\026\035\331\224M\333\362C\321#\2663I ?3\036\207\031Jv\036\036')\210\242,N\364\244d[\232\304\203j\002M\0226\010\200h\200\"]\225\252,\271\304\022K,\261\344\222K-\265\344\222K~B>a\316mH\262c;SS$\032\215F\367\355{\317=\3674\036\347\362\325\334B\265\340\330\276\023x\212\301}\256\373\246c+\266\343+-f\231\306#EO_\n\205y\\\216\273\236\343r\317\352(\302\361|n(U\317i(\026\257\372\212\357(\236Y\253\373\271\377i\320v\336\330\364\270\356\324l\36357J\rV\343x\021X\206\234\\\341x\311R\353\217\224\037\326\337Z\264\317\341I\325\tlC1m\305\257sr\251e\032\360\305$+9\245\300\322\035i\211i\007\\a6\263:\302\024\271u\307\347X\302|\245\320\361\353p\314\024\360\3222+\334c>\247\240|\317\324}\356\321$[\331,n~\371\340\333\007Xo\300\235\227\010F(\"\250\350\026\023\202\013\305\251*\225\300\264|r\243\343r\221SJU\245\343\004\212\315\341\014\340p1\357\355\005p\326V\004\367\245\327w\231\r'\031\341\243a\271i\327\356*\206\351\021b-N\253\227\231%xn=h\300;\332\013\350\330\2048\2670\307s\014\0304\0344\024j\203\371z]\232\345m\027\2571\rx\007\374Q\272J\371^\331y\033(\227\371u8\302\033\351jl\306\333\246\360s\367\377\371#3\014\rc<\247\213\226a\nV\2618\267\251\275\377\306\364\367JM\317\335\253\007\265\032\274\2562\235k\365\240\222\273\2473\275\316\277\024\035\341\363\206\022P\300\242\323\260L\373\225\310\3353Ej\305\260]?\267\276\244z\036\353\374l\273\271\252\345\000\002\273\366\342\235\361\300\264\375o_\344\\\273&<\375+\303q}\r\026\3009\215\331N\003T\342\342\253\023~\345\334\216\237[t\332\240\236h-1\200\232[:~\267\006\240,\204V\262\253 \216\255\3632\027\201\345\373\271miN\022O\370\201k\361\237\245/\367\025y{\221\016\235X\274\257\374q\305\013\325\356,\252\205\237\0267\326\213\330\271\260\242\226\3265us\263\274\261\253m\227\3266W\213\205\215\325\215\262\266\370\244<\377\244\254\356\275y*?Y\004A\355\316Q\225\024\230\245\007\226\244A\321\363\034o\251\270S,\354\2246\326\265\265\215\245\342\3526m\276\354\261\006_6\301\342\225\242\272\263\246nj\313\245\325\342\272\272V\324\266\237./\227v\245O\262""\001\303\313(\034i\352\235\220K\266,\301\3421}\n\304\214Uu\257X\336\226[i\313\033\253K\305\362\332FysE+\254nl\027\323n\031\376\034ef\375\351\232\366L]--iE\004\270S\306\262\355u\307\346\233\245\325Mb\240\356x\034\235\272\246mv\332\270\226PL\332:o\303\247\352\326\323\215\235\242\266\016\274\312*\342+\027w\312\332N\271X\004\036o\003\273\263R.n\257\300\023m\361y\332\327\026K\353jyOc\272\316]\320O\2538m.\230e1\313\255\263#:Tr\r\231\350\364\261\243\235p\343x\300b\025n\035?4\230\373VW\363\270 \021:\036\022\024\006\243x\231\240\302f\242c\353\246\223\303\260\023\200\254\330\274\315\310\005\324L\205\351\257*@\240\002\2474\323F\001\210\n\022\345u*\026~\336.5{\025\307\261*\244X z\031na.\376\233\0168.h]\236\232\371\212\247\353y}^\307\246:\324\250\346x\035\235\243\342=\ru\010p\271\376\212B\207\267\006L1[\357\3101\227\314h\232\324\030\255\306}\023\325G\217\360\023\016i\276\207\372$/u\313\021\\6\206\216\240u\354\r\201\204ajX\372$\025\026\367\026\3670\356v\010\010\350\225&X\303\205\301\232\346\021Qu7\320q\n\2700\224\336\216K\223\216\201w\206\344\211\000)\321\003\203\351\255y\275\345\027\034\313\361\014\325X4\300l\215T\3468UZ\232B\203\267L\235\033U\303l\250\270\026)z\272\0201\227BPa\302\324\305\0075\341\203\2039\255j\332\206F\242\367'\023N\\0(\337\334\250!\000-\305\036\267\240!\217\007N5%x\000h\r\316l\216j\222\252\t\\\344]`n\333\364\251\365\271mT\315\032\261\252jZ\\n-;$\215\350\3000v\240\024\244\017\373\314\263aF\220\237G\272 \336rZ*\222l\026\346\253\216e\300-i\021\207\243\006\357\334\016\365$a5\255\032\330\272\006\036\330Pk\017t\330\366\275@\367\003\017\346Q\371\r\004\205A\355]\314iL\366\264\324~\315c\025\355\230\020x\350\324!*\334\253\013\027l2\315\232\rb\310\323V6\232\355\246w\257V1\0335\374\345HMzi6\350$7\033\242\356\354\233\r\324\217%\020\030\220\"u\322R#\266\033\370\232/\263\0022/\314\233Bc-fZtbhx8\251<\364\r\010\263I\005\202~\372\rB\214\247K\274\344\376+\356\331\034\322\320\341\236 :\322\325p\204\257\265\021Y\340\371u\213d\264\006,\r\272\220\020XB\201A\247 \005\250\027\264""\276k9>I\212\333\241^\203\265\033\320\200\300\343 \270]\363\353\177|\312=\266\034\035G\365\017\271#\320\033\\\010\004\3250\rY\232\r\323\306_\005\010T\372\004\262\004:E\373\017\333;F\200pq\367\334:\212\244\326)\2665\315\206\364\243\005\247lGC&\014@\337\260]\034\227\310\374I\212$\013d\223K\277%\234j\025UFD\221*\003\\k@\0200\273\010:\325)H\240\301\320\342\210\360)Q\210\030_v\310\020\307M\270\351\207\210kZi\216\\\323\345\244)\256\331\006_4L\321\032\234\276\226\264\335\367\207\366\\\313w\241\003\304r\251\246(:\025\327b\212\250\2465\003f\245\2215\003\207*\310\203\262\2452\354\311\303*m\211@(\017\333\343`\260-\265D6G\031\005\271\237\334N\202\336\332\301\325\303\311a\346\\w\252\253v\267F\231+\341\351\360\273H\215\236\307\205\2709\304\343x\370oL\036\243\356\271\350j<\031\317\r3\227\273^8\0336\243\363\361\335d2\271\221\374\253W\351\217\245\226/\304\371\270\224\354\366\266zz\177\252\257\2160\3708z\215YsC\331\025\361\\\234\037a\277\231.\033\236\273\324\255\207l\230\235\014gB\0266G\231\351p9\372{\374\224&O\207K\321X4\023\331I!\351\220\365\217\302;\321D\274\222,&F\357Fo\271?7\312\\\354\226\273\255p\013&2\327\243\233\360Y\215\377\323\373\272?\333o\036d\016\226\017\357\0146\267\006[\345Q\346B7?\230\370k\244\016\263\023]4\2627K\033\243\371ml45=\274v\235\376\004\317\2250\023\252\341\3260s\3667\277\373]\370$\312\017\263\227\006\227>'\020F\031e\240<\354""\3752P\313\203\362\36603>\314~\032\3752\370\333\017}\326o\376~\346/\343\227\007\227>\203\3070?5\230\372\"\301\202\031\230B|\223\303\354\265h\362\250'w\035\236\277@\177\332\022Nuw\302\311\360fX\016\375(\037-\305\247\342;I&Q\223\355\336\251\336\255\036\353\371\375\371\376\026\326\\\272\374\226\247\nee\242[\350\356\003<\021\315\301S8\335\352n\207cp\271[\035L\337\211\331\340\356\312\341\330\341\344(s\251\313\303<0=\023U\343b2\2334{\247{\363=\304y\241\373Mx\233\300\277\320]\350\232\310\352\271x*V\311T\007\\x\024m\311\005\237\367\307\373\333\007c\204\371\366\340\n\014\307\"\311\365O\367\261'F\302\213\230V\217\365\344\263^3\365\211\322R\217\214x.\265\333@X\305x&6\222\233\311/D\214t\337\\<\026O\322V\001\2264\217\274\276\017\374&.\022\234\027\272\267@\020\033i\335\"\3225\341\317\367X\361\0218V\210\375\344aO\322\362Tx+4\242\2714c\371\367\214\334$\306\"}\243L\266;\336E6.w} \241\206\317\242\205\310J\346\022\271D\017\257\303E\225\272\225\360\014\000\r\242\345\370F,\007\214p.\\@4,\362\342O\222\237z\277\036\250\007[\243s\027\221\264iX\311\017\317\035\327\306\255\230\375\237\017\243,-\277\036\315\203\265\245\344y\017\033\27530\312\022p\025\320\261\200\354\336\210(\236Q\366:\002U\346\350]^>\317\2065@\017*\317\204\317Q\266[#\204'\302\033\241:<\356\214\262W\302\263a\023\263\207\037M\205\017\302V\264\033o\305\034a\277\377\3700:\025\335B\276W\300\275\247\275\271\337\263\177\031\317~\020\324i\000\202\212%\314\177\205\177A\212\034\246\334C\355b\247\tI=\365`\362\340\366\201\254\214+2{\337\014\256\377\330\367\016\246\017N\362y2\262s8{\330D\301\276\367\342\317\247\2162W\243\323\310\332\232\024\241%\020\032l\374\300\320\345\301\3459\220f!\256\014\276x\324\2771x\274q\350I]\270\216`Y\324\212\237'\313=\220\344\223\350\001\252\374L\\K\366z\214x\373\010$n\200lE*\361\352\201\232V\340\354\307\324B4R\271\310FR\234\276\210@\365\211n)\255\367\231\360U\374q2\236\354\r\276^;|\n\261\030\001\251}\260\354\032\352t!\322\343k\311\255\204\021%3\335\345\360^TB\016\032\220.\250C*@\333QV2\375;\022\223\231\360it;j""\016\224\177\364\306z\230rqp\361Sd\375e2\226L\216\260\333'R\260\325a\232i\310\346\024\006\236Ag%\247&\303\271a\366|\3676@\034\243\316]\214\334\215f\243\346\361\303\235\301\325\\\302{\337\364\357P\201\237\035\234\375\030F\316B\252\241\356\224\3416J\363\334\014\304\311\213&\243{\250F\022\350\3544ql*\314\217\244\350l\221\246_C\241\240\262\206\2313\277\325Pi'k\346\210\334[\304\020F\264l\222\243\247\303\274\224\343h.\036;9\237(\323\022V\302e\t\356\276\351\\\226\356\247\267\021\360\276\005\376\355G\225\370l\034\200\254\345\244\205#\307\350\337\350/R\242\2104)\216\317\243\305\250F\016'\363\311\263^\276\267\324?\205I\313\007s\007y\312\360\003\230\233\300\224\227\220[y\212\375\027x\246\220T"; - PyObject *data = __Pyx_DecompressString(cstring, 2997, 1); + #elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (3012 bytes) */ +const char* const cstring = "x\332\215V\313r\333F\026\035\331\224M\333\362C\321#\2663I ?3\036\207\031Jv\036\036')\210\242,N\364\244d[\232\304\323\005\002M\0226\010\200h\200\"]\225\252,\271\304\022K,\261\344\222K-\265\344\222K~B>a\316mH\262c;SS$\032\215F\367\355{\317=\3674\036\347\362\325\334B\265\340\330\276\023x\212\301}\256\373\246c+\266\343+-\3152\215G\212\236\276\024\212\346q9\356z\216\313=\253\243\010\307\363\271\241T=\247\241X\274\352+\276\243xf\255\356\347\376\247A\333yc\323\343\272S\263\315\327\334(5\264\032\307\213\3002\344\344\n\307K-\265\376H\371a\375\255E\373\034\236T\235\3006\024\323V\374:'\227Z\246\001_L\262\222S\nZ\272#-1\355\200+\232\255Y\035a\212\334\272\343s,\321|\245\320\361\353p\314\024\360\3222+\334\323|NA\371\236\251\373\334\243I\266\262Y\334\374\362\301\267\017\260\336\200;/\021\214PDP\321-M\010.\024\247\252T\002\323\362\311\215\216\313EN)U\225\216\023(6\2073\200\303\305\274\267\027\300Y[\021\334\227^\337\325l8\251\021>\014\313M\273vW1L\217\020kqZ\275\254Y\202\347\326\203\006\274\243\275\200\216M\210s\013s<\307\200A\303AC\24164_\257K\263\274\355\3425\246\001\357\200?JW)\337+;o\003\345j~\035\216\360F\272\032\233\361\266)\374\334\375\177\376\250\031\006\303\030\317\351\242e\230B\253X\234\333\324\336\177c\372{\245\246\347\356\325\203Z\r^W5\235\263zP\311\335\3235\275\316\277\024\035\341\363\206\022P\300\242\323\260L\373\225\310\3353Ej\305\260]?\267\276\244z\236\326\371\331vsU\313\001\004v\355\305;\343\201i\373\337\276\310\271vMx\372W\206\343\372\014\026\3009\246\331N\003T\342\342\253\023~\345\334\216\237[t\332\240\236h-i\0005\267t\374n\r@Y\010\255dWA\034[\347e.\002\313\367s\333\322\234$\236\360\003\327\342?K_\356+\362\366\"\035:\261x_\371\343\212\027\352\372\306\232\272\272\307vV\312\305\355\225\215\325%\325\356,\252\205\237\0267\326\213p\245\260\242\226\326\231\272\271Y\336\330e\333\245\265\315\325bacu\243\314\026\237\224\347\237\224\325\2757O\345'\213`\254\3359*\233\202f\351\201%yQ\364<\307[*\356\024\013;\245\215u\266\266\261T\\\335&o\226=\255\301\227M\320z\245\250\356\254""\251\233l\271\264Z\\W\327\212l\373\351\362riW:)\033P\276\214J\222\246\336\301\240d\313\232,\036\363\251@TYU\367\212\345m\271\025[FX\305\362\332Fys\205\025V7\266\213i\267\014\177\216R\265\376t\215=SWKK\254\210\000w\312X\266\275\356\330|\263\264\272I\224\324\035\217\243Sgl\263\323\306\265\204\352b\353\274\r\237\252[O7v\212l\035x\225U\304W.\356\224\331N\271X\004\036o#}\0020[|\236\366\331bi]-\3571M\327\271\013>\262\212\323\346B\263,\315r\353\332\021?*\271\206\314|\372\330a'd9\036\260\264\n\267\216\037\032\232\373V\227y\\\220*\035\017\t\nC\243x5A\225\256\211\216\255\233N\016\303N\000\366b\363\266F.\240\210*\232\376\252\002\004*p\212\2316*BT\220(\257S\261\360\363v\251\331\2538\216U!\t\003\363\313p\013s\361\337t@zA\353\362\324\314W<]\317\353\363:6\325!O5\307\353\350\034\022\3401\024&\300\345\372+\n\035\336\0320\245\331zG\216\271d\2061):\254\306}\023\345H\217\360\023\0161\337C\301\222\227\272\345\010.\033CG\320:\366\206b\30205Z\372$%\027\367\026\3670\356v\010\010\010\030\023Z\303\205\301\032\363\210\250\272\033\3508\026\\\030Jo\307\265J\347\302;C\362\210\200\266\350\201\241\351\255y\275\345\027\034\313\361\014\325X4\300lF\262s\234*\226\246\320\340-S\347F\3250\033*\256E\212\236.D\314\2452T4a\352\342\203\"\361\301\301\034\253\232\266\301H\005\377d\302\211\013\006\345\233\0335\004\300R\354q\013\032\362\274\340TS\202\007\200\326\340\232\315QMRF\201\213\274\013\314m\233>\265>\267\215\252Y#VUM\213\313\255e\207\264\022\035\030\306\016\224\202\364a_\363l\230\021\344\347\221.\210\267\234\226\022%\233\205\371\252c\031pKZ\304i\311\340\235\333\241\236$,c\325\300\326\031x`C\276=\320a\333\367\002\335\017<\230G\3457\020\024\006\331\273\230\323\230\354\261\324~\315\323*\354\230\020x\350\324!*\334\253\013\027l2\315\232\rb\310\343W6\314v\323\273W\253\230\215\032\376r\244&\2754\033t\264\233\rQw\366\315\006\352\307\022\010\014H\221:\261\324\210\355\006>\363eV@\346\205yS0\255\245\231\026\035!\014\017'\225\207\276\001\2456\251@\320O?J\210\361t\211\227\334\177\305=\233C\032:\334\023DG\272\032""\216\360Y\033\221\005\236_\267HFk\300\322\240\013\t\201%\024\030t\nR\200zA\353\273\226\343\223\244\270\035\3525\264v\003\032\020x\034\004\267k~\375\217O\271\307\226\243\343\354\376!w\004z\203\013\201\240\032\246!K\263a\332\370\253\000\201J\237@\226@\247h\377a{\307\010\020.\356\236[G\221\324:\3056c6\244\037-8e;\014\2310\000}\303vq~\"\363')\222,\220M.\375\270p\252UT\031\021E\252\014p\255\001A\300\354\"\350T\247 \201\206\206\026G\204O\211B\304\370\324C\2068n\302M\277L\\\323Js\344\232.'Mq\3156\370\3020\20558}>\261\335\367\207\366\\\313w\241\003\304r\251\246(:\025\327b\212(c\315@\263\322\310\232\201C\025\344A\331R\031\366\344a\225\266D \224\207\355q0\330\226Z\"\233\243\214\202\\\236!\362b^h-N\365\246\233\000\000!\371&}L\331\306Q\241\313\000\360I\3462Fj\226n\214\236\301\253\032v\021u\r\237s(j\332\036\311\250V\211W'\330\212f\300\371kN\245\213\357E|\337Q\010\342\370\3164\343e |\304\344c\n\332:\\G\372\014t\234}\237\274\365-\037\207\301.5{\350{\273\324\354\371\216\357\220\374\371\216\005y\201\266\371\216\247\327e\303R\t\364=\337\303\021B\315\236\374\342LS+\277\225\002\373\310-|xQ\200i\255\311\217@\331\210\375cM\331\367\322\023\016\201\356\313\362m\347\333\363mD\007~\2106\350\336Fc\032\006\304\014w\233N\304v\207z\257M\367\267\261\341\205\t\372\217\237\031f\246\302\207\321\331\250\031\237On'Ao\355\340\352\341\3440s\256;\325U\273[\243\314\225\360t\370]\244F\317\343B\334\034\342q<\3747&\217Q\367\\t5\236\214\347\206\231\313]/\234\r\233\321\371\370n2\231\334H\376\325\253\364\307R\313\027\342|\\Jv{[=\275?\325WG\030|\034\275\306\254\271\241\354\212x.\316\217\260\337LW\033\236\273\324\255\207\3320;\031\316\204Z\330\034e\246\303\345\350\357\361S\232<\035.Ec\321Ld'\205$\030'\034F\031e\240<""\354\3752P\313\203\362\36603>\314~\032\3752\370\333\017}\255\337\374\375\314_\306/\017.}\006\247a~j0\365E\202\00530\205\020'\207\331k\321\344QO\356:<\177\201\376\264%\234\352\356\204\223\341\315\260\034\372Q>Z\212O\305w\222L\242&\333\275S\275[=\255\347\367\347\373[Xs\351\362[\236*\224\230\211n\241\273\017\374D4\007O\341t\253\273\035\216\301\345nu0}'\326\006wW\016\307\016'G\231K]\036\346\001\353\231\250\032\027\223\331\244\331;\335\233\357!\316\013\335o\302\333\204\377\205\356B\327Db\317\305S\261J\246:\240\303\243hK.\370\274?\336\337>\030#\314\267\007W`8\026I\256\177\272\217=1\022^\304\264z\254'\237\365\232\251O\224\226zd\304s\251\335\006\302*\3063\261\221\334L~!n\244\373\346\342\261x\222\266\n\260\244y\344\365}\3407q\221\340\274\320\275\005\216\330H\353\026\361\256\t\177\276\307\212\217@\263B\354'\017{\222\231\247\302[\241\021\315\245\031\313\277g\344&\221\026\351\033e\262\335\361.\262q\271\353\003\t5|\026-DV2\227\310%zx\035.\252\324\255\204g\000h\020-\3077b9`\204s\341\002\242\321\"/\376$\371\251\367\353\201z\2605:w\021I\233\206\225\374\360\334qy\334\212\265\377\363a\224\245\345\327\243y\260\266\224<\357a\243w\006FY\002\256\002:\026\220\335\033\021\3053\312^G\240\312\034\275\313\313\347\331\260\006\350A\345\231\3609*wk\204\360Dx#T\207\307\235Q\366Jx6lb\366\360\243\251\360A\330\212v\343\255\230#\354\367\037\037F\247\242[\310\367\n\270\367\2647\367{\366/\343\331\017\202:\r@P\264\204\371\257\360/H\221\303\224{(_\3544!\251\247\036L\036\334>\220\225qEf\357\233\301\365\037\373\336\301\364\301I>OFv\016g\017\233(\330\367^\374\371\324Q\346jt\032Y[\223:\264\004B\203\215\037\030\272<\270<\007\322,\304\225\301\027\217\3727\006\2177\016=\251\013\327\021\254\026\265\342\347\311r\017$\371$z\200*?\023\327\222\275\236F\274}\004\0227@\266\"\225x\365@M+p\366cj!\032\251\\d\2431\022\247/\"P}\242[J\353}&|\025\177\234\214'{\203\257\327\016\237B,F@j\037,\273\206:]\210\364\370Zr+\321\210\222\231\356rx/*!\007\rH\027\324!\025\240\355(+\231\376\035\211\311L\3704\272\0355\007\312?zc=L\2718\270""\370)\262\3762\031K&G\330\355\023\251\331\3520\3154\224s\n\003\317 \265\222S\223\341\3340{\276{\033 \216Q\347.F\356F\263Q\363\370\341\316\340j.\341\275o\372w\250\300\317\016\316~\014#g\241\326\020x\312p\033\245yn\006\342\344E\223\321=T#itv\23286\025\346GRt\266H\326\257\241PPY\303\314\231\337j\250\264\2235sD\356-b\210F\264l\222\243\247\303\274\224\343h.\036;9\242(\323\022V\302e\t\356\276\351\\\226\356\247\267\021\360\276\005\376\355G\225\370l\034\200\254\345\244\205S\307\350\337\350/R\242\2104)\216\317\243\305\250F\016'\363\311\263^\276\267\324?\205I\313\007s\007y\312\360\003\230\233\300\224\227\220[y\220\375\027\312\265\227\r"; + PyObject *data = __Pyx_DecompressString(cstring, 3012, 1); if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error) const char* const bytes = __Pyx_PyBytes_AsString(data); #if !CYTHON_ASSUME_SAFE_MACROS if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) } #endif - #else /* compression: none (4941 bytes) */ -const char* const bytes = "<.1f.3fContour detection not valid: contours are not properly sorted from left to right.Contour detection not valid: no contours recognizedImage could not be read from: >No contours were found in the provided image. Can not continue analysis.Note that Cython is deliberately stricter than PEP-484 and rejects subclasses of builtin types. If you need to pass subclasses then set the 'annotation_typing' directive to False.Number of counted electrodes does not match the expected value: count = The provided path seems not to exist.,;?add_note.csvdisableenable, expected = gc.*huggingface_hub.*cache-system uses symlinks.*isenablednpt.NDArray[np.floating]npt.NDArray[np.uint8].pngsrc/dopt_sensor_anomalies/detection.pyt.Boxt.CsvDatat.DetectionModelst.InferenceResultt.SensorImagestuple[float, float]tuple[t.CsvData, t.SensorImages]AnyBACKBONEBoxCHAIN_APPROX_SIMPLECOLOR_BGR2GRAYCOLOR_BGR2RGBCannyContourCalculationErrorDETECTION_MODELSDataFrameFinalHEATMAP_FILENAME_SUFFIXImageImageNotReadErrorInferenceResultInvalidElectrodeCountLAYERSMODEL_FOLDERMORPH_CLOSEMORPH_RECTNDArrayNUM_VALID_ELECTRODESNonePILPatchcorePath__Pyx_PyDict_NextRefQUOTE_NONERATIORETR_TREERGBSensorImagesTHRESHOLD_BWTHRESH_BINARY_accepted_boxesallalphaanomalib.modelsanomaly_detectionanomaly_labelanomaly_mapanomaly_map_resizedanomaly_scorearrayastypeasyncio.coroutinesaxaxesaxisbackbonebbox_inchesbinaryblblbrXblbrYboolboundingRectboxboxPointsbox_1box_2brcc1c2castcategorycenter_distcheck_box_redundancycheckpoint__class_getitem__cline_in_tracebackcloseclosedcmapcntsconstconstantscontoursconvertcopycoreset_sampling_ratiocpucroppedcropped_sensor_leftcropped_sensor_rightcsvcudacv2cvtColordAdBdata_csvdetection_modelsdevicedfdimAdimBdistdistancedopt_basicsdopt_sensor_anomaliesdopt_sensor_anomalies._find_pathsdopt_sensor_anomalies.detectiondtypeedged__enter__enumerateerrorseuclideanevalexistingexists__exit__extendfigsizefile_pathfile_stemfiltered_cntsfilterwarningsfindContours_find_pathsfloatfloat32folder_pathfrom_numpyfromar""ray__func__genexprgetStructuringElementget_detection_modelsget_model_foldergrab_contoursgrayheaderhspaceiignoreimageimage_npimage_rgbimgimg_npimg_pathimreadimshowimutilsindexinfer_imageinput_tensorint32is_available_is_coroutineis_duplicateis_sorteditemitemsjetkernellayersleftleftmost_x_fourthlinalgloadload_state_dict__main__matplotlib.pyplotmaxmeasure_lengthmeasure_length..genexprmessagemidpointminminAreaRectmodemodelmodel_state_dict__module__morphologyEx__name__nextno_gradnormnpnptnum_contoursnumpynumpy.typingofforder_pointsorigoutputpad_inchespandasparentpathlibpermuteperspectivepil_imagepipelinepixels_per_metric_Xpixels_per_metric_Ypltpoppred_scorept_Apt_Bpyplot__qualname__quotingrboxresizeresultresult_patternreturnrightrightmost_x_thirds1s2savefigscipy.spatialsendsensor_imagessep__set_name__setdefaultshapesidesize_diffsort_contourssqueezestemstrsubplotssubplots_adjustt__test__thresholdthrowtighttltlblXtlblYtltrXtltrYtoto_csvtolerancetorchtorch_devicetrtrbrXtrbrYtypestypinguint8unsqueezeuser_img_pathvaluevalueswwarningswrap_resultwspacex1x2x_coordsx_maxx_middlex_miny_maxy_minzip\200\001\330\013\014\330\013\014\330\005\006\330\004\023\2205\230\007\230q\240\n\250%\250u\260M\300\030\310\021\330\004\t\210\023\210A\210Q\340\004\020\220\003\2209\230A\230W\240C\240q\330\004\020\220\005\220Z\230q\240\001\330\004\020\220\t\230\030\240\021\240!\330\004\017\210r\220\026\220q\230\n\240'\250\021\250\"\250J\260b\270\001\330\004\023\2205\230\013\2401\240I\250X\260Q\260c\270\023\270A\340\004\023\220<\230z\250\021\250!\330\004\023\220<\230s\240!\2401\340\004\t\210\025\210a\330\t\016\210h\220a\330\010\021\220\025\220a\220q\340\004\024\220F\230+\240U\250!\330\004\024\220D\230\001\230\025\230n\250C\250y\270\001\330\004\022\220&\230\014\240H\250B\250d\260\"\260F\270!\340\004\r\210R\210v\220Q\220a\330\004\032\230#\230W\240A\240^\2606\270\026\270q\300\004\300F\310&\320PQ\320QR\340\004\013\2101\320\014\034\230A\330\010\014\210A\330\010\034\230A\330\010\026\220a\330\010\026\220a""\200\001\340\023\024\330\031\032\330\031\032\330\005\006\330\004\020\220\004\220A\220Q\330\004\007\200t\2109\220G\2301\330\010\016\320\016\037\230q\240\001\340\004 \320 5\260\\\320AR\320RS\330\004\005\330\010\035\230\\\320)>\270a\270q\360\006\000\005\017\320\016\036\230n\250A\330\010\023\320\023(\250\001\340\004\025\220Q\330\010\021\220\021\330\010\031\230\021\330\010\021\220\021\330\010\026\220a\200\001\330\n\013\330\n\013\330\005\006\330\004\014\210A\210T\220\021\220#\220R\220t\2301\230D\240\002\240&\250\004\250A\250S\260\002\260$\260a\260t\2702\270Q\200\001\330\016\017\330\031\032\330\031\032\330\005\006\330\004 \240\001\330\004\014\210C\210w\220a\220s\230!\2301\330\004\007\200v\210S\220\001\330\010\016\210f\320\024&\240a\320'H\310\001\310\021\340\004\016\210e\2201\220D\230\006\230f\240E\250\026\250q\260\003\2602\260Q\330\004\013\2107\220%\220q\340\004\013\2103\210i\220q\230\t\240\023\240A\330\004\007\200y\220\003\220:\230Q\230f\240E\250\037\270\005\270S\300\001\340\004\r\210S\320\020&\240a\240s\250.\270\003\2701\330\004\r\210S\220\r\230Q\230h\240c\250\036\260q\330\004\014\210C\210v\220Q\220h\230d\240!\340\004\013\2103\210m\2301\230E\240\025\240d\250#\250\\\270\023\270A\330\004\013\2107\220.\240\001\240\021\330\004\007\200u\210C\210q\330\010\016\210f\320\024,\250A\330\014\r\360\006\000\005\013\210$\210h\220n\240A\240Q\330\004\017\210q\220\003\220=\240\001\240\022\2401\240C\240t\2505\260\001\330\004\020\220\002\220$\220d\230!\330\004\007\200t\2101\330\010\016\210f\320\024,\250A\330\014\r\360\006\000\005#\240!\330\004\037\230q\340\004\010\210\005\210Q\330\010\017\210t\2201\220A\220V\2303\230l\250!\2501\330\010\016\210c\220\032\2301\230A\330\010\016\210b\220\006\220a\220u\230F\240\"\240A\330\010\016\210d\220!\2203\220h\230a\230r\240\033\250K\260}\300A\300Q\340\t\r\210T\220\024\220V\2301\330\t\020\220\t\230\030\240\021\240$\240a\330\t\020\220\t\230\030\240\021\240$\240a\330\t\020\220\t\230\030\240\021\240$\240a\330\t\020\220\t\230\030\240\021\240$\240a\340\010\r\210T""\220\032\2302\230W\240I\250W\260A\330\010\r\210T\220\032\2302\230W\240I\250W\260A\340\010\013\2103\210b\220\004\220C\220s\230\"\230A\330\014\r\340\010\032\230!\330 !\340\010\013\2101\330\014\r\340\010\026\220g\230Q\230a\330\010\025\220W\230A\230Q\340\010\017\210s\220\"\220A\330\010\017\210s\220\"\220A\340\010\020\220\007\220q\330\014\r\330\022\023\2204\220v\230X\240Q\240e\2501\330\022\023\2204\220v\230X\240Q\240e\2501\330\022\023\2205\230\002\230$\230f\240H\250A\250U\260!\360\010\000\005\010\200t\2101\330\010\016\210f\320\024,\250A\330\014\r\360\006\000\005\024\2203\220a\220q\330\004\007\200}\220C\220u\230A\330\010\016\210f\320\024*\250!\330\014\r\330\014&\240a\320'A\300\021\300%\300q\360\006\000\005\020\210q\220\003\2207\320\032?\270r\300\024\300Q\330\004\017\210q\220\003\2207\320\032?\270r\300\024\300T\310\026\310q\320PQ\330\004\017\210q\220\003\2207\320\032?\270r\300\024\300Q\330\004\017\210q\220\003\2207\320\032?\270r\300\024\300T\310\026\310q\320PQ\340\004\030\230\003\2301\230M\250\021\250\"\250D\260\003\2601\330\004\030\230\003\2301\230M\250\021\250\"\250D\260\003\2601\330\004\017\320\017!\240\022\2403\240b\320(:\270\"\320\270f\300A\200\001\330\016\017\330\026\027\330\016\017\330\023\024\330\005\006\330\004\020\220\010\230\001\330\004\022\220(\230!\340\004\014\210I\220Q\330\010\021\220\025\220k\240\027\250\005\250Y\3206M\310U\320RS\340\004\007\200w\210c\220\031\230!\2303\230c\240\031\250$\250a\340\004\010\210\004\210F\220*\230I\240Q\240m\2606\270\021\330\010\020\220\004\220A\220S\230\010\240\001\240\022\2409\250A\330\010\025\220U\230%\230q\320 0\260\001\260\021\330\010\r\320\r\035\230Q\230j\250\001\250\021\340\010\021\220\033\230A\230W\240A\330\010\020\220\007\220q\230\001\230\023\230A\230V\2401\340\010\r\210T\220\021\220!\330\010\n\210%\210q\220\001\330\010\n\210'\220\021\220'\230\026\230q\330\010\n\210'\220\021\220&""\320\030.\250e\2607\270&\300\001\340\004\007\320\007\027\220q\230\007\230s\240'\250\021\330\004\007\200x\210q\330\t\025\220R\220r\230\021\230*\240A\240U\250!\330\010\024\220A\330\010\023\2201\340\004\007\200v\210Q\340\004\t\210\031\220!\2201\220A\330\004\006\200g\210Q\330\t\025\220R\220r\230\021\230!\330\010\r\210Q\330\010\016\210a\330\010\017\210q\330\010\020\220\003\2201\330\010\014\210A\230!\240\001\200\001\330\013\014\330\013\014\330\004\017\210q\330\005\006\330\004\010\210\004\210D\220\001\330\004\010\210\004\210D\220\001\330\004\017\210q\220\001\330\004\017\210q\220\001\340\004\022\220$\220a\220w\230b\240\007\240u\250A\250R\250v\260Q\260d\270\"\270B\270f\300A\300Q\330\004\020\220\004\220A\220W\230B\230g\240U\250!\2502\250V\2601\260D\270\002\270\"\270F\300!\3001\340\004\013\2104\210q\220\014\230B\230j\250\004\250J\260b\270\001"; + #else /* compression: none (4961 bytes) */ +const char* const bytes = "<.1f.3fContour detection not valid: contours are not properly sorted from left to right.Contour detection not valid: no contours recognizedImage could not be read from: >No contours were found in the provided image. Can not continue analysis.Note that Cython is deliberately stricter than PEP-484 and rejects subclasses of builtin types. If you need to pass subclasses then set the 'annotation_typing' directive to False.Number of counted electrodes does not match the expected value: count = The provided path seems not to exist.,;?add_note.csvdisableenable, expected = gc.*huggingface_hub.*cache-system uses symlinks.*isenablednpt.NDArray[np.floating]npt.NDArray[np.uint8].pngsrc/dopt_sensor_anomalies/detection.pyt.Boxt.CsvDatat.DetectionModelst.InferenceResultt.SensorImagestuple[float, float]tuple[t.CsvData, t.SensorImages]ANOMALY_THRESHOLDAnyBACKBONEBoxCHAIN_APPROX_SIMPLECOLOR_BGR2GRAYCOLOR_BGR2RGBCannyContourCalculationErrorDETECTION_MODELSDataFrameFinalHEATMAP_FILENAME_SUFFIXImageImageNotReadErrorInferenceResultInvalidElectrodeCountLAYERSMODEL_FOLDERMORPH_CLOSEMORPH_RECTNDArrayNUM_VALID_ELECTRODESNonePILPatchcorePath__Pyx_PyDict_NextRefQUOTE_NONERATIORETR_TREERGBSensorImagesTHRESHOLD_BWTHRESH_BINARY_accepted_boxesallalphaanomalib.modelsanomaly_detectionanomaly_labelanomaly_mapanomaly_map_resizedanomaly_scorearrayastypeasyncio.coroutinesaxaxesaxisbackbonebbox_inchesbinaryblblbrXblbrYboolboundingRectboxboxPointsbox_1box_2brcc1c2castcategorycenter_distcheck_box_redundancycheckpoint__class_getitem__cline_in_tracebackcloseclosedcmapcntsconstconstantscontoursconvertcopycoreset_sampling_ratiocpucroppedcropped_sensor_leftcropped_sensor_rightcsvcudacv2cvtColordAdBdata_csvdetection_modelsdevicedfdimAdimBdistdistancedopt_basicsdopt_sensor_anomaliesdopt_sensor_anomalies._find_pathsdopt_sensor_anomalies.detectiondtypeedged__enter__enumerateerrorseuclideanevalexistingexists__exit__extendfigsizefile_pathfile_stemfiltered_cntsfilterwarningsfindContours_find_pathsfloatfloat32folder_pat""hfrom_numpyfromarray__func__genexprgetStructuringElementget_detection_modelsget_model_foldergrab_contoursgrayheaderhspaceiignoreimageimage_npimage_rgbimgimg_npimg_pathimreadimshowimutilsindexinfer_imageinput_tensorint32is_available_is_coroutineis_duplicateis_sorteditemitemsjetkernellayersleftleftmost_x_fourthlinalgloadload_state_dict__main__matplotlib.pyplotmaxmeasure_lengthmeasure_length..genexprmessagemidpointminminAreaRectmodemodelmodel_state_dict__module__morphologyEx__name__nextno_gradnormnpnptnum_contoursnumpynumpy.typingofforder_pointsorigoutputpad_inchespandasparentpathlibpermuteperspectivepil_imagepipelinepixels_per_metric_Xpixels_per_metric_Ypltpoppred_scorept_Apt_Bpyplot__qualname__quotingrboxresizeresultresult_patternreturnrightrightmost_x_thirds1s2savefigscipy.spatialsendsensor_imagessep__set_name__setdefaultshapesidesize_diffsort_contourssqueezestemstrsubplotssubplots_adjustt__test__thresholdthrowtighttltlblXtlblYtltrXtltrYtoto_csvtolerancetorchtorch_devicetrtrbrXtrbrYtypestypinguint8unsqueezeuser_img_pathvaluevalueswwarningswrap_resultwspacex1x2x_coordsx_maxx_middlex_miny_maxy_minzip\200\001\330\013\014\330\013\014\330\005\006\330\004\023\2205\230\007\230q\240\n\250%\250u\260M\300\030\310\021\330\004\t\210\023\210A\210Q\340\004\020\220\003\2209\230A\230W\240C\240q\330\004\020\220\005\220Z\230q\240\001\330\004\020\220\t\230\030\240\021\240!\330\004\017\210r\220\026\220q\230\n\240'\250\021\250\"\250J\260b\270\001\330\004\023\2205\230\013\2401\240I\250X\260Q\260c\270\023\270A\340\004\023\220<\230z\250\021\250!\330\004\023\220<\230s\240!\2401\340\004\t\210\025\210a\330\t\016\210h\220a\330\010\021\220\025\220a\220q\340\004\024\220F\230+\240U\250!\330\004\024\220D\230\001\230\025\230n\250C\250u\3204L\310A\330\004\022\220&\230\014\240H\250B\250d\260\"\260F\270!\340\004\r\210R\210v\220Q\220a\330\004\032\230#\230W\240A\240^\2606\270\026\270q\300\004\300F\310&\320PQ\320QR\340\004\013\2101\320\014\034\230A\330\010\014\210A\330\010\034\230A\330\010\026""\220a\330\010\026\220a\200\001\340\023\024\330\031\032\330\031\032\330\005\006\330\004\020\220\004\220A\220Q\330\004\007\200t\2109\220G\2301\330\010\016\320\016\037\230q\240\001\340\004 \320 5\260\\\320AR\320RS\330\004\005\330\010\035\230\\\320)>\270a\270q\360\006\000\005\017\320\016\036\230n\250A\330\010\023\320\023(\250\001\340\004\025\220Q\330\010\021\220\021\330\010\031\230\021\330\010\021\220\021\330\010\026\220a\200\001\330\n\013\330\n\013\330\005\006\330\004\014\210A\210T\220\021\220#\220R\220t\2301\230D\240\002\240&\250\004\250A\250S\260\002\260$\260a\260t\2702\270Q\200\001\330\016\017\330\031\032\330\031\032\330\005\006\330\004 \240\001\330\004\014\210C\210w\220a\220s\230!\2301\330\004\007\200v\210S\220\001\330\010\016\210f\320\024&\240a\320'H\310\001\310\021\340\004\016\210e\2201\220D\230\006\230f\240E\250\026\250q\260\003\2602\260Q\330\004\013\2107\220%\220q\340\004\013\2103\210i\220q\230\t\240\023\240A\330\004\007\200y\220\003\220:\230Q\230f\240E\250\037\270\005\270S\300\001\340\004\r\210S\320\020&\240a\240s\250.\270\003\2701\330\004\r\210S\220\r\230Q\230h\240c\250\036\260q\330\004\014\210C\210v\220Q\220h\230d\240!\340\004\013\2103\210m\2301\230E\240\025\240d\250#\250\\\270\023\270A\330\004\013\2107\220.\240\001\240\021\330\004\007\200u\210C\210q\330\010\016\210f\320\024,\250A\330\014\r\360\006\000\005\013\210$\210h\220n\240A\240Q\330\004\017\210q\220\003\220=\240\001\240\022\2401\240C\240t\2505\260\001\330\004\020\220\002\220$\220d\230!\330\004\007\200t\2101\330\010\016\210f\320\024,\250A\330\014\r\360\006\000\005#\240!\330\004\037\230q\340\004\010\210\005\210Q\330\010\017\210t\2201\220A\220V\2303\230l\250!\2501\330\010\016\210c\220\032\2301\230A\330\010\016\210b\220\006\220a\220u\230F\240\"\240A\330\010\016\210d\220!\2203\220h\230a\230r\240\033\250K\260}\300A\300Q\340\t\r\210T\220\024\220V\2301\330\t\020\220\t\230\030\240\021\240$\240a\330\t\020\220\t\230\030\240\021\240$\240a\330\t\020\220\t\230\030\240\021\240$\240a\330\t\020\220\t\230\030\240\021""\240$\240a\340\010\r\210T\220\032\2302\230W\240I\250W\260A\330\010\r\210T\220\032\2302\230W\240I\250W\260A\340\010\013\2103\210b\220\004\220C\220s\230\"\230A\330\014\r\340\010\032\230!\330 !\340\010\013\2101\330\014\r\340\010\026\220g\230Q\230a\330\010\025\220W\230A\230Q\340\010\017\210s\220\"\220A\330\010\017\210s\220\"\220A\340\010\020\220\007\220q\330\014\r\330\022\023\2204\220v\230X\240Q\240e\2501\330\022\023\2204\220v\230X\240Q\240e\2501\330\022\023\2205\230\002\230$\230f\240H\250A\250U\260!\360\010\000\005\010\200t\2101\330\010\016\210f\320\024,\250A\330\014\r\360\006\000\005\024\2203\220a\220q\330\004\007\200}\220C\220u\230A\330\010\016\210f\320\024*\250!\330\014\r\330\014&\240a\320'A\300\021\300%\300q\360\006\000\005\020\210q\220\003\2207\320\032?\270r\300\024\300Q\330\004\017\210q\220\003\2207\320\032?\270r\300\024\300T\310\026\310q\320PQ\330\004\017\210q\220\003\2207\320\032?\270r\300\024\300Q\330\004\017\210q\220\003\2207\320\032?\270r\300\024\300T\310\026\310q\320PQ\340\004\030\230\003\2301\230M\250\021\250\"\250D\260\003\2601\330\004\030\230\003\2301\230M\250\021\250\"\250D\260\003\2601\330\004\017\320\017!\240\022\2403\240b\320(:\270\"\320\270f\300A\200\001\330\016\017\330\026\027\330\016\017\330\023\024\330\005\006\330\004\020\220\010\230\001\330\004\022\220(\230!\340\004\014\210I\220Q\330\010\021\220\025\220k\240\027\250\005\250Y\3206M\310U\320RS\340\004\007\200w\210c\220\031\230!\2303\230c\240\031\250$\250a\340\004\010\210\004\210F\220*\230I\240Q\240m\2606\270\021\330\010\020\220\004\220A\220S\230\010\240\001\240\022\2409\250A\330\010\025\220U\230%\230q\320 0\260\001\260\021\330\010\r\320\r\035\230Q\230j\250\001\250\021\340\010\021\220\033\230A\230W\240A\330\010\020\220\007\220q\230\001\230\023\230A\230V\2401\340\010\r\210T\220\021\220!\330\010\n\210%\210q\220\001\330\010\n\210'\220\021\220'\230\026\230q\330""\010\n\210'\220\021\220&\320\030.\250e\2607\270&\300\001\340\004\007\320\007\027\220q\230\007\230s\240'\250\021\330\004\007\200x\210q\330\t\025\220R\220r\230\021\230*\240A\240U\250!\330\010\024\220A\330\010\023\2201\340\004\007\200v\210Q\340\004\t\210\031\220!\2201\220A\330\004\006\200g\210Q\330\t\025\220R\220r\230\021\230!\330\010\r\210Q\330\010\016\210a\330\010\017\210q\330\010\020\220\003\2201\330\010\014\210A\230!\240\001\200\001\330\013\014\330\013\014\330\004\017\210q\330\005\006\330\004\010\210\004\210D\220\001\330\004\010\210\004\210D\220\001\330\004\017\210q\220\001\330\004\017\210q\220\001\340\004\022\220$\220a\220w\230b\240\007\240u\250A\250R\250v\260Q\260d\270\"\270B\270f\300A\300Q\330\004\020\220\004\220A\220W\230B\230g\240U\250!\2502\250V\2601\260D\270\002\270\"\270F\300!\3001\340\004\013\2104\210q\220\014\230B\230j\250\004\250J\260b\270\001"; PyObject *data = NULL; CYTHON_UNUSED_VAR(__Pyx_DecompressString); #endif PyObject **stringtab = __pyx_mstate->__pyx_string_tab; Py_ssize_t pos = 0; - for (int i = 0; i < 307; i++) { + for (int i = 0; i < 308; i++) { Py_ssize_t bytes_length = index[i].length; PyObject *string = PyUnicode_DecodeUTF8(bytes + pos, bytes_length, NULL); if (likely(string) && i >= 33) PyUnicode_InternInPlace(&string); @@ -12774,7 +12780,7 @@ const char* const bytes = "<.1f.3fContour detection not valid: contours are not stringtab[i] = string; pos += bytes_length; } - for (int i = 307; i < 315; i++) { + for (int i = 308; i < 316; i++) { Py_ssize_t bytes_length = index[i].length; PyObject *string = PyBytes_FromStringAndSize(bytes + pos, bytes_length); stringtab[i] = string; @@ -12785,14 +12791,14 @@ const char* const bytes = "<.1f.3fContour detection not valid: contours are not } } Py_XDECREF(data); - for (Py_ssize_t i = 0; i < 315; i++) { + for (Py_ssize_t i = 0; i < 316; i++) { if (unlikely(PyObject_Hash(stringtab[i]) == -1)) { __PYX_ERR(0, 1, __pyx_L1_error) } } #if CYTHON_IMMORTAL_CONSTANTS { - PyObject **table = stringtab + 307; + PyObject **table = stringtab + 308; for (Py_ssize_t i=0; i<8; ++i) { #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL); @@ -12805,14 +12811,14 @@ const char* const bytes = "<.1f.3fContour detection not valid: contours are not } { PyObject **numbertab = __pyx_mstate->__pyx_number_tab; - double const c_constants[] = {0.2,0.5,0.8,2.0,255.0}; - for (int i = 0; i < 5; i++) { + double const c_constants[] = {0.5,0.8,2.0,255.0}; + for (int i = 0; i < 4; i++) { numbertab[i] = PyFloat_FromDouble(c_constants[i]); if (unlikely(!numbertab[i])) __PYX_ERR(0, 1, __pyx_L1_error) } } { - PyObject **numbertab = __pyx_mstate->__pyx_number_tab + 5; + PyObject **numbertab = __pyx_mstate->__pyx_number_tab + 4; int8_t const cint_constants_1[] = {0,1,2,5,6,12,20,50,100}; int16_t const cint_constants_2[] = {255,500,1500}; for (int i = 0; i < 12; i++) { @@ -12823,7 +12829,7 @@ const char* const bytes = "<.1f.3fContour detection not valid: contours are not #if CYTHON_IMMORTAL_CONSTANTS { PyObject **table = __pyx_mstate->__pyx_number_tab; - for (Py_ssize_t i=0; i<17; ++i) { + for (Py_ssize_t i=0; i<16; ++i) { #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL); #else