numdaplot 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. numdaplot/__init__.py +506 -0
  2. numdaplot/arrays/__init__.py +5 -0
  3. numdaplot/arrays/array.py +92 -0
  4. numdaplot/arrays/array_arithmetic.py +404 -0
  5. numdaplot/arrays/array_calculation.py +143 -0
  6. numdaplot/arrays/array_conversion.py +150 -0
  7. numdaplot/arrays/array_creation.py +371 -0
  8. numdaplot/arrays/array_data.py +281 -0
  9. numdaplot/arrays/array_layout.py +179 -0
  10. numdaplot/arrays/array_logic.py +227 -0
  11. numdaplot/arrays/array_reflected_arithmetic.py +334 -0
  12. numdaplot/arrays/array_refusals.py +339 -0
  13. numdaplot/arrays/array_selection.py +195 -0
  14. numdaplot/arrays/array_sorting.py +59 -0
  15. numdaplot/arrays/axis_number.py +58 -0
  16. numdaplot/arrays/calculation/__init__.py +5 -0
  17. numdaplot/arrays/calculation/counting_statistics.py +325 -0
  18. numdaplot/arrays/calculation/location_statistics.py +268 -0
  19. numdaplot/arrays/calculation/math_function_values.py +183 -0
  20. numdaplot/arrays/calculation/statistic_values.py +209 -0
  21. numdaplot/arrays/calculation/time_function_values.py +419 -0
  22. numdaplot/arrays/conversion/__init__.py +5 -0
  23. numdaplot/arrays/conversion/array_text.py +62 -0
  24. numdaplot/arrays/conversion/equality_check.py +72 -0
  25. numdaplot/arrays/conversion/python_values.py +70 -0
  26. numdaplot/arrays/conversion/time_text.py +290 -0
  27. numdaplot/arrays/creation/__init__.py +5 -0
  28. numdaplot/arrays/creation/date_parts.py +89 -0
  29. numdaplot/arrays/creation/date_parts_values.py +437 -0
  30. numdaplot/arrays/creation/distribution.py +54 -0
  31. numdaplot/arrays/creation/filled_values.py +58 -0
  32. numdaplot/arrays/creation/list_conversion.py +311 -0
  33. numdaplot/arrays/creation/list_shape.py +97 -0
  34. numdaplot/arrays/creation/normal.py +65 -0
  35. numdaplot/arrays/creation/numpy_conversion.py +149 -0
  36. numdaplot/arrays/creation/random_integers.py +104 -0
  37. numdaplot/arrays/creation/random_values.py +97 -0
  38. numdaplot/arrays/creation/range_values.py +73 -0
  39. numdaplot/arrays/creation/spacing.py +84 -0
  40. numdaplot/arrays/creation/spacing_values.py +63 -0
  41. numdaplot/arrays/creation/uniform.py +63 -0
  42. numdaplot/arrays/equality.py +68 -0
  43. numdaplot/arrays/layout/__init__.py +5 -0
  44. numdaplot/arrays/layout/sorting_values.py +113 -0
  45. numdaplot/arrays/layout/unique_values.py +49 -0
  46. numdaplot/arrays/mapping/__init__.py +5 -0
  47. numdaplot/arrays/mapping/mapped_values.py +286 -0
  48. numdaplot/arrays/mapping/unmatched.py +50 -0
  49. numdaplot/arrays/mapping/value_change.py +55 -0
  50. numdaplot/arrays/mapping/value_mapping.py +161 -0
  51. numdaplot/arrays/math_functions/__init__.py +5 -0
  52. numdaplot/arrays/math_functions/absolute.py +27 -0
  53. numdaplot/arrays/math_functions/cosine.py +28 -0
  54. numdaplot/arrays/math_functions/exponential.py +27 -0
  55. numdaplot/arrays/math_functions/logarithm.py +72 -0
  56. numdaplot/arrays/math_functions/math_function.py +58 -0
  57. numdaplot/arrays/math_functions/round.py +58 -0
  58. numdaplot/arrays/math_functions/sine.py +28 -0
  59. numdaplot/arrays/math_functions/square_root.py +27 -0
  60. numdaplot/arrays/operations/__init__.py +5 -0
  61. numdaplot/arrays/operations/boolean_operands.py +48 -0
  62. numdaplot/arrays/operations/combination.py +157 -0
  63. numdaplot/arrays/operations/float_errors.py +170 -0
  64. numdaplot/arrays/operations/integer_bounds.py +175 -0
  65. numdaplot/arrays/operations/integer_rules.py +397 -0
  66. numdaplot/arrays/operations/operand.py +139 -0
  67. numdaplot/arrays/operations/time_arithmetic.py +479 -0
  68. numdaplot/arrays/operations/time_bounds.py +286 -0
  69. numdaplot/arrays/operations/time_result_bounds.py +397 -0
  70. numdaplot/arrays/operations/transformation.py +54 -0
  71. numdaplot/arrays/operations/type_requirements.py +94 -0
  72. numdaplot/arrays/replacement.py +66 -0
  73. numdaplot/arrays/selection/__init__.py +5 -0
  74. numdaplot/arrays/selection/comparison_masks.py +131 -0
  75. numdaplot/arrays/selection/membership_masks.py +118 -0
  76. numdaplot/arrays/selection/missing_mask.py +50 -0
  77. numdaplot/arrays/selection/region_index.py +178 -0
  78. numdaplot/arrays/selection/replaced_values.py +120 -0
  79. numdaplot/arrays/selection/rule_mask.py +83 -0
  80. numdaplot/arrays/selection/time_reference.py +172 -0
  81. numdaplot/arrays/shape.py +74 -0
  82. numdaplot/arrays/type_match.py +51 -0
  83. numdaplot/data_types/__init__.py +5 -0
  84. numdaplot/data_types/library.py +57 -0
  85. numdaplot/data_types/numpy_mapping.py +207 -0
  86. numdaplot/data_types/pandas_mapping.py +114 -0
  87. numdaplot/data_types/time_of_day.py +292 -0
  88. numdaplot/data_types/type.py +224 -0
  89. numdaplot/data_types/value_family.py +149 -0
  90. numdaplot/data_types/value_type.py +147 -0
  91. numdaplot/dates/__init__.py +5 -0
  92. numdaplot/dates/custom_date_format.py +83 -0
  93. numdaplot/dates/date_format.py +120 -0
  94. numdaplot/dates/date_part.py +59 -0
  95. numdaplot/dates/date_part_unit.py +153 -0
  96. numdaplot/dates/date_period.py +57 -0
  97. numdaplot/dates/duration_in.py +58 -0
  98. numdaplot/dates/duration_unit.py +90 -0
  99. numdaplot/dates/period_unit.py +101 -0
  100. numdaplot/dates/time_function.py +56 -0
  101. numdaplot/dates/time_zone.py +68 -0
  102. numdaplot/dates/time_zone_change.py +71 -0
  103. numdaplot/dates/time_zone_mode.py +81 -0
  104. numdaplot/dates/to_duration.py +58 -0
  105. numdaplot/errors/__init__.py +7 -0
  106. numdaplot/errors/broadcast_warning.py +36 -0
  107. numdaplot/errors/calculation_warning.py +35 -0
  108. numdaplot/errors/cell_out_of_range_error.py +77 -0
  109. numdaplot/errors/column_not_found_error.py +64 -0
  110. numdaplot/errors/conflicting_settings_error.py +60 -0
  111. numdaplot/errors/dimension_error.py +62 -0
  112. numdaplot/errors/display_warning.py +32 -0
  113. numdaplot/errors/duplicate_column_error.py +82 -0
  114. numdaplot/errors/duplicate_label_error.py +55 -0
  115. numdaplot/errors/duplicate_statistic_error.py +55 -0
  116. numdaplot/errors/duplicate_value_error.py +54 -0
  117. numdaplot/errors/empty_array_error.py +55 -0
  118. numdaplot/errors/empty_list_error.py +52 -0
  119. numdaplot/errors/empty_region_error.py +34 -0
  120. numdaplot/errors/empty_text_error.py +34 -0
  121. numdaplot/errors/empty_total_error.py +62 -0
  122. numdaplot/errors/empty_values_error.py +34 -0
  123. numdaplot/errors/file_access_error.py +70 -0
  124. numdaplot/errors/file_exists_error.py +62 -0
  125. numdaplot/errors/file_not_found_error.py +56 -0
  126. numdaplot/errors/incompatible_charts_error.py +80 -0
  127. numdaplot/errors/incompatible_types_error.py +104 -0
  128. numdaplot/errors/integer_overflow_error.py +61 -0
  129. numdaplot/errors/invalid_base_error.py +52 -0
  130. numdaplot/errors/invalid_bin_width_error.py +66 -0
  131. numdaplot/errors/invalid_bounds_error.py +58 -0
  132. numdaplot/errors/invalid_chart_data_error.py +81 -0
  133. numdaplot/errors/invalid_color_count_error.py +63 -0
  134. numdaplot/errors/invalid_color_error.py +51 -0
  135. numdaplot/errors/invalid_column_name_error.py +52 -0
  136. numdaplot/errors/invalid_conversion_error.py +119 -0
  137. numdaplot/errors/invalid_count_error.py +61 -0
  138. numdaplot/errors/invalid_date_format_error.py +51 -0
  139. numdaplot/errors/invalid_deviation_error.py +52 -0
  140. numdaplot/errors/invalid_fraction_error.py +51 -0
  141. numdaplot/errors/invalid_label_count_error.py +61 -0
  142. numdaplot/errors/invalid_limits_error.py +111 -0
  143. numdaplot/errors/invalid_opacity_error.py +52 -0
  144. numdaplot/errors/invalid_point_size_error.py +52 -0
  145. numdaplot/errors/invalid_position_error.py +106 -0
  146. numdaplot/errors/invalid_resolution_error.py +51 -0
  147. numdaplot/errors/invalid_rotation_error.py +53 -0
  148. numdaplot/errors/invalid_seed_error.py +53 -0
  149. numdaplot/errors/invalid_separator_error.py +52 -0
  150. numdaplot/errors/invalid_shape_error.py +52 -0
  151. numdaplot/errors/invalid_sheet_name_error.py +54 -0
  152. numdaplot/errors/invalid_size_error.py +58 -0
  153. numdaplot/errors/invalid_step_error.py +77 -0
  154. numdaplot/errors/invalid_suffixes_error.py +61 -0
  155. numdaplot/errors/invalid_time_zone_change_error.py +63 -0
  156. numdaplot/errors/invalid_type_error.py +79 -0
  157. numdaplot/errors/irregular_list_error.py +36 -0
  158. numdaplot/errors/join_relation_error.py +183 -0
  159. numdaplot/errors/missing_dependency_error.py +58 -0
  160. numdaplot/errors/missing_type_error.py +36 -0
  161. numdaplot/errors/missing_value_error.py +62 -0
  162. numdaplot/errors/not_single_value_error.py +53 -0
  163. numdaplot/errors/numdaplot_error.py +25 -0
  164. numdaplot/errors/numdaplot_warning.py +34 -0
  165. numdaplot/errors/occupied_cell_error.py +63 -0
  166. numdaplot/errors/out_of_domain_error.py +70 -0
  167. numdaplot/errors/readability_warning.py +35 -0
  168. numdaplot/errors/refused_operation_error.py +64 -0
  169. numdaplot/errors/refused_setting_error.py +60 -0
  170. numdaplot/errors/rejected_dates.py +60 -0
  171. numdaplot/errors/repeated_key.py +36 -0
  172. numdaplot/errors/shape_mismatch_error.py +67 -0
  173. numdaplot/errors/time_overflow_error.py +131 -0
  174. numdaplot/errors/time_zone_mismatch_error.py +83 -0
  175. numdaplot/errors/unknown_time_zone_error.py +51 -0
  176. numdaplot/errors/unmatched_value_error.py +81 -0
  177. numdaplot/errors/unsupported_image_format_error.py +56 -0
  178. numdaplot/errors/unsupported_index_error.py +38 -0
  179. numdaplot/errors/unsupported_missing_error.py +129 -0
  180. numdaplot/errors/unsupported_type_error.py +62 -0
  181. numdaplot/errors/value_conversion_error.py +215 -0
  182. numdaplot/ordering/__init__.py +5 -0
  183. numdaplot/ordering/missing_position.py +46 -0
  184. numdaplot/ordering/order.py +46 -0
  185. numdaplot/package_version.py +36 -0
  186. numdaplot/plots/__init__.py +5 -0
  187. numdaplot/plots/chart_layer.py +47 -0
  188. numdaplot/plots/charts/__init__.py +5 -0
  189. numdaplot/plots/charts/bar_chart.py +98 -0
  190. numdaplot/plots/charts/bar_layout.py +58 -0
  191. numdaplot/plots/charts/bin_count.py +61 -0
  192. numdaplot/plots/charts/bin_width.py +78 -0
  193. numdaplot/plots/charts/box_chart.py +97 -0
  194. numdaplot/plots/charts/cell_values.py +61 -0
  195. numdaplot/plots/charts/chart.py +59 -0
  196. numdaplot/plots/charts/chart_settings.py +105 -0
  197. numdaplot/plots/charts/color_scale.py +147 -0
  198. numdaplot/plots/charts/heatmap_chart.py +92 -0
  199. numdaplot/plots/charts/histogram_chart.py +93 -0
  200. numdaplot/plots/charts/line_chart.py +100 -0
  201. numdaplot/plots/charts/line_type.py +75 -0
  202. numdaplot/plots/charts/marker_shape.py +113 -0
  203. numdaplot/plots/charts/missing_chart.py +60 -0
  204. numdaplot/plots/charts/missing_map_chart.py +27 -0
  205. numdaplot/plots/charts/orientation.py +58 -0
  206. numdaplot/plots/charts/outliers.py +49 -0
  207. numdaplot/plots/charts/percentages.py +55 -0
  208. numdaplot/plots/charts/pie_chart.py +87 -0
  209. numdaplot/plots/charts/scatter_chart.py +159 -0
  210. numdaplot/plots/charts/value_axis.py +66 -0
  211. numdaplot/plots/data/__init__.py +5 -0
  212. numdaplot/plots/data/array_values.py +128 -0
  213. numdaplot/plots/data/chart_data.py +143 -0
  214. numdaplot/plots/data/chart_values.py +109 -0
  215. numdaplot/plots/data/column_reading.py +468 -0
  216. numdaplot/plots/data/heatmap_values.py +63 -0
  217. numdaplot/plots/data/missing_cells.py +165 -0
  218. numdaplot/plots/data/pie_values.py +215 -0
  219. numdaplot/plots/data/point_values.py +249 -0
  220. numdaplot/plots/data/position_kind.py +83 -0
  221. numdaplot/plots/data/renamed_layers.py +340 -0
  222. numdaplot/plots/data/sample_values.py +160 -0
  223. numdaplot/plots/data/shown_columns.py +248 -0
  224. numdaplot/plots/data/table_values.py +256 -0
  225. numdaplot/plots/data/unique_labels.py +45 -0
  226. numdaplot/plots/drawing/__init__.py +5 -0
  227. numdaplot/plots/drawing/bar_drawing.py +316 -0
  228. numdaplot/plots/drawing/box_drawing.py +344 -0
  229. numdaplot/plots/drawing/cell_merging.py +237 -0
  230. numdaplot/plots/drawing/chart_texts.py +124 -0
  231. numdaplot/plots/drawing/color_bar.py +57 -0
  232. numdaplot/plots/drawing/color_scale_values.py +120 -0
  233. numdaplot/plots/drawing/default_labels.py +41 -0
  234. numdaplot/plots/drawing/drawn_chart.py +50 -0
  235. numdaplot/plots/drawing/grid_axes.py +75 -0
  236. numdaplot/plots/drawing/heatmap_drawing.py +313 -0
  237. numdaplot/plots/drawing/histogram_drawing.py +350 -0
  238. numdaplot/plots/drawing/label_room.py +344 -0
  239. numdaplot/plots/drawing/label_thinning.py +216 -0
  240. numdaplot/plots/drawing/layer_alignment.py +319 -0
  241. numdaplot/plots/drawing/layer_colors.py +123 -0
  242. numdaplot/plots/drawing/line_drawing.py +85 -0
  243. numdaplot/plots/drawing/marker_codes.py +20 -0
  244. numdaplot/plots/drawing/missing_drawing.py +360 -0
  245. numdaplot/plots/drawing/moment_period_formatter.py +253 -0
  246. numdaplot/plots/drawing/pie_drawing.py +185 -0
  247. numdaplot/plots/drawing/plot_axes.py +38 -0
  248. numdaplot/plots/drawing/plot_drawing.py +288 -0
  249. numdaplot/plots/drawing/plot_theme.py +45 -0
  250. numdaplot/plots/drawing/position_axis.py +278 -0
  251. numdaplot/plots/drawing/scatter_drawing.py +364 -0
  252. numdaplot/plots/drawing/series_colors.py +177 -0
  253. numdaplot/plots/drawing/size_inches.py +45 -0
  254. numdaplot/plots/drawing/style_drawing.py +410 -0
  255. numdaplot/plots/drawing/text_contrast.py +44 -0
  256. numdaplot/plots/drawing/tick_rotation.py +354 -0
  257. numdaplot/plots/drawing/time_axis.py +212 -0
  258. numdaplot/plots/drawing/whole_numbers.py +72 -0
  259. numdaplot/plots/figure/__init__.py +5 -0
  260. numdaplot/plots/figure/cell.py +95 -0
  261. numdaplot/plots/figure/figure.py +256 -0
  262. numdaplot/plots/figure/figure_drawing.py +99 -0
  263. numdaplot/plots/figure/figure_style.py +60 -0
  264. numdaplot/plots/figure/layout.py +71 -0
  265. numdaplot/plots/figure/placement.py +150 -0
  266. numdaplot/plots/layer_reading.py +166 -0
  267. numdaplot/plots/output/__init__.py +5 -0
  268. numdaplot/plots/output/image_saving.py +187 -0
  269. numdaplot/plots/output/plot_display.py +181 -0
  270. numdaplot/plots/output/shown_object.py +45 -0
  271. numdaplot/plots/overlay_checks.py +245 -0
  272. numdaplot/plots/plot.py +31 -0
  273. numdaplot/plots/plot_data.py +140 -0
  274. numdaplot/plots/plot_distribution_creation.py +237 -0
  275. numdaplot/plots/plot_output.py +124 -0
  276. numdaplot/plots/plot_overlays.py +273 -0
  277. numdaplot/plots/plot_overview_creation.py +195 -0
  278. numdaplot/plots/plot_series_creation.py +213 -0
  279. numdaplot/plots/style/__init__.py +5 -0
  280. numdaplot/plots/style/axis_settings.py +60 -0
  281. numdaplot/plots/style/color.py +168 -0
  282. numdaplot/plots/style/custom_color.py +65 -0
  283. numdaplot/plots/style/grid_lines.py +49 -0
  284. numdaplot/plots/style/image_options.py +71 -0
  285. numdaplot/plots/style/legend_position.py +149 -0
  286. numdaplot/plots/style/plot_style.py +136 -0
  287. numdaplot/plots/style/size.py +70 -0
  288. numdaplot/plots/style/size_unit.py +62 -0
  289. numdaplot/positions/__init__.py +5 -0
  290. numdaplot/positions/axis.py +54 -0
  291. numdaplot/positions/index.py +51 -0
  292. numdaplot/positions/range.py +90 -0
  293. numdaplot/positions/region.py +92 -0
  294. numdaplot/py.typed +0 -0
  295. numdaplot/ratios/__init__.py +5 -0
  296. numdaplot/ratios/fraction.py +40 -0
  297. numdaplot/ratios/measure.py +48 -0
  298. numdaplot/rules/__init__.py +5 -0
  299. numdaplot/rules/between.py +78 -0
  300. numdaplot/rules/bounds.py +83 -0
  301. numdaplot/rules/case.py +48 -0
  302. numdaplot/rules/contains.py +63 -0
  303. numdaplot/rules/equal.py +43 -0
  304. numdaplot/rules/greater.py +39 -0
  305. numdaplot/rules/greater_or_equal.py +38 -0
  306. numdaplot/rules/is_in.py +67 -0
  307. numdaplot/rules/is_missing.py +25 -0
  308. numdaplot/rules/is_present.py +25 -0
  309. numdaplot/rules/less.py +39 -0
  310. numdaplot/rules/less_or_equal.py +38 -0
  311. numdaplot/rules/not_equal.py +45 -0
  312. numdaplot/rules/rule.py +62 -0
  313. numdaplot/rules/rule_values.py +44 -0
  314. numdaplot/rules/value_rule.py +110 -0
  315. numdaplot/settings/__init__.py +5 -0
  316. numdaplot/settings/argument_types.py +327 -0
  317. numdaplot/settings/field_types.py +593 -0
  318. numdaplot/statistics/__init__.py +5 -0
  319. numdaplot/statistics/count.py +71 -0
  320. numdaplot/statistics/count_distinct.py +27 -0
  321. numdaplot/statistics/counted_missing.py +46 -0
  322. numdaplot/statistics/maximum.py +27 -0
  323. numdaplot/statistics/mean.py +27 -0
  324. numdaplot/statistics/median.py +27 -0
  325. numdaplot/statistics/minimum.py +27 -0
  326. numdaplot/statistics/most_frequent.py +27 -0
  327. numdaplot/statistics/most_frequent_count.py +27 -0
  328. numdaplot/statistics/quantile.py +61 -0
  329. numdaplot/statistics/standard_deviation.py +29 -0
  330. numdaplot/statistics/statistic.py +63 -0
  331. numdaplot/statistics/sum.py +27 -0
  332. numdaplot/tables/__init__.py +5 -0
  333. numdaplot/tables/aggregation/__init__.py +5 -0
  334. numdaplot/tables/aggregation/aggregated_frame.py +189 -0
  335. numdaplot/tables/aggregation/aggregation.py +97 -0
  336. numdaplot/tables/aggregation/calculation.py +123 -0
  337. numdaplot/tables/aggregation/result_column.py +108 -0
  338. numdaplot/tables/aggregation/row_groups.py +96 -0
  339. numdaplot/tables/aggregation/statistic_name.py +122 -0
  340. numdaplot/tables/columns/__init__.py +5 -0
  341. numdaplot/tables/columns/added_column.py +89 -0
  342. numdaplot/tables/columns/boolean_conversion.py +144 -0
  343. numdaplot/tables/columns/boolean_rule.py +59 -0
  344. numdaplot/tables/columns/bracket_end.py +50 -0
  345. numdaplot/tables/columns/bracket_names.py +346 -0
  346. numdaplot/tables/columns/bracketed_column.py +179 -0
  347. numdaplot/tables/columns/brackets.py +234 -0
  348. numdaplot/tables/columns/chosen_columns.py +55 -0
  349. numdaplot/tables/columns/column_choice.py +84 -0
  350. numdaplot/tables/columns/column_mode.py +64 -0
  351. numdaplot/tables/columns/column_names.py +186 -0
  352. numdaplot/tables/columns/conversion.py +103 -0
  353. numdaplot/tables/columns/converted_column.py +669 -0
  354. numdaplot/tables/columns/date_conversion.py +526 -0
  355. numdaplot/tables/columns/date_range.py +135 -0
  356. numdaplot/tables/columns/name_change.py +67 -0
  357. numdaplot/tables/columns/new_column.py +79 -0
  358. numdaplot/tables/columns/number_conversion.py +281 -0
  359. numdaplot/tables/columns/renamed_columns.py +60 -0
  360. numdaplot/tables/columns/renaming.py +81 -0
  361. numdaplot/tables/columns/text_conversion.py +70 -0
  362. numdaplot/tables/columns/time_conversion.py +313 -0
  363. numdaplot/tables/columns/time_zone_conversion.py +128 -0
  364. numdaplot/tables/conflict.py +68 -0
  365. numdaplot/tables/description/__init__.py +5 -0
  366. numdaplot/tables/description/described_frame.py +335 -0
  367. numdaplot/tables/description/description.py +155 -0
  368. numdaplot/tables/duplicates/__init__.py +5 -0
  369. numdaplot/tables/duplicates/deduplicated_frame.py +66 -0
  370. numdaplot/tables/duplicates/deduplication.py +88 -0
  371. numdaplot/tables/duplicates/keep.py +81 -0
  372. numdaplot/tables/files/__init__.py +5 -0
  373. numdaplot/tables/files/column_names.py +60 -0
  374. numdaplot/tables/files/csv_file.py +265 -0
  375. numdaplot/tables/files/csv_read_options.py +89 -0
  376. numdaplot/tables/files/csv_separator.py +41 -0
  377. numdaplot/tables/files/csv_write_options.py +79 -0
  378. numdaplot/tables/files/decimal_count.py +42 -0
  379. numdaplot/tables/files/encoding.py +82 -0
  380. numdaplot/tables/files/excel_file.py +171 -0
  381. numdaplot/tables/files/excel_read_options.py +79 -0
  382. numdaplot/tables/files/excel_sheet.py +50 -0
  383. numdaplot/tables/files/excel_time_cells.py +146 -0
  384. numdaplot/tables/files/excel_write_options.py +63 -0
  385. numdaplot/tables/files/file_access.py +152 -0
  386. numdaplot/tables/files/file_paths.py +106 -0
  387. numdaplot/tables/files/json_decimals.py +387 -0
  388. numdaplot/tables/files/json_file.py +203 -0
  389. numdaplot/tables/files/json_layout.py +63 -0
  390. numdaplot/tables/files/json_read_options.py +64 -0
  391. numdaplot/tables/files/json_write_options.py +71 -0
  392. numdaplot/tables/files/missing_texts.py +63 -0
  393. numdaplot/tables/files/optional_package.py +42 -0
  394. numdaplot/tables/files/pandas_backend.py +11 -0
  395. numdaplot/tables/files/parquet_file.py +91 -0
  396. numdaplot/tables/files/parquet_read_options.py +56 -0
  397. numdaplot/tables/files/sas_file.py +94 -0
  398. numdaplot/tables/files/sas_read_options.py +67 -0
  399. numdaplot/tables/files/stata_file.py +83 -0
  400. numdaplot/tables/files/stata_read_options.py +56 -0
  401. numdaplot/tables/files/xpt_read_options.py +65 -0
  402. numdaplot/tables/filtering/__init__.py +5 -0
  403. numdaplot/tables/filtering/checked_frame.py +60 -0
  404. numdaplot/tables/filtering/column_mask.py +71 -0
  405. numdaplot/tables/filtering/column_match.py +62 -0
  406. numdaplot/tables/filtering/condition.py +94 -0
  407. numdaplot/tables/filtering/filter.py +74 -0
  408. numdaplot/tables/filtering/filter_mode.py +67 -0
  409. numdaplot/tables/filtering/row_mask.py +152 -0
  410. numdaplot/tables/filtering/rule_moments.py +164 -0
  411. numdaplot/tables/frames/__init__.py +5 -0
  412. numdaplot/tables/frames/array_frame.py +95 -0
  413. numdaplot/tables/frames/cleaned_names.py +132 -0
  414. numdaplot/tables/frames/column.py +15 -0
  415. numdaplot/tables/frames/column_values.py +273 -0
  416. numdaplot/tables/frames/frame_equality.py +130 -0
  417. numdaplot/tables/frames/frame_normalization.py +459 -0
  418. numdaplot/tables/frames/named_column_errors.py +85 -0
  419. numdaplot/tables/frames/pandas_decimals.py +113 -0
  420. numdaplot/tables/frames/region_positions.py +113 -0
  421. numdaplot/tables/frames/table_text.py +222 -0
  422. numdaplot/tables/frames/time_columns.py +345 -0
  423. numdaplot/tables/frames/time_range_errors.py +117 -0
  424. numdaplot/tables/frames/time_zones.py +271 -0
  425. numdaplot/tables/joining/__init__.py +5 -0
  426. numdaplot/tables/joining/join.py +110 -0
  427. numdaplot/tables/joining/join_keys.py +367 -0
  428. numdaplot/tables/joining/join_mode.py +93 -0
  429. numdaplot/tables/joining/join_relation.py +149 -0
  430. numdaplot/tables/joining/join_suffixes.py +71 -0
  431. numdaplot/tables/joining/joined_frame.py +166 -0
  432. numdaplot/tables/joining/joined_names.py +107 -0
  433. numdaplot/tables/joining/joined_rows.py +235 -0
  434. numdaplot/tables/joining/key_types.py +57 -0
  435. numdaplot/tables/joining/relation.py +78 -0
  436. numdaplot/tables/missing/__init__.py +5 -0
  437. numdaplot/tables/missing/missing_count.py +59 -0
  438. numdaplot/tables/missing/missing_counts.py +214 -0
  439. numdaplot/tables/missing/missing_drop.py +98 -0
  440. numdaplot/tables/missing/missing_mode.py +63 -0
  441. numdaplot/tables/missing/missing_ratio.py +71 -0
  442. numdaplot/tables/missing/missing_removal.py +257 -0
  443. numdaplot/tables/missing/missing_summary.py +174 -0
  444. numdaplot/tables/missing/ratio_comparison.py +70 -0
  445. numdaplot/tables/pivot/__init__.py +5 -0
  446. numdaplot/tables/pivot/pivot_table.py +104 -0
  447. numdaplot/tables/pivot/pivoted_frame.py +244 -0
  448. numdaplot/tables/preview/__init__.py +5 -0
  449. numdaplot/tables/preview/notebook_display.py +238 -0
  450. numdaplot/tables/preview/preview.py +100 -0
  451. numdaplot/tables/preview/preview_rows.py +55 -0
  452. numdaplot/tables/preview/shown_columns.py +62 -0
  453. numdaplot/tables/preview/side.py +82 -0
  454. numdaplot/tables/sorting/__init__.py +5 -0
  455. numdaplot/tables/sorting/sort_key.py +71 -0
  456. numdaplot/tables/sorting/sorted_frame.py +81 -0
  457. numdaplot/tables/sorting/sorting.py +82 -0
  458. numdaplot/tables/table.py +71 -0
  459. numdaplot/tables/table_calculation.py +172 -0
  460. numdaplot/tables/table_columns.py +214 -0
  461. numdaplot/tables/table_conversion.py +351 -0
  462. numdaplot/tables/table_data.py +321 -0
  463. numdaplot/tables/table_display.py +56 -0
  464. numdaplot/tables/table_joining.py +80 -0
  465. numdaplot/tables/table_layout.py +105 -0
  466. numdaplot/tables/table_missing.py +146 -0
  467. numdaplot/tables/table_reading.py +451 -0
  468. numdaplot/tables/table_refusals.py +295 -0
  469. numdaplot/tables/table_selection.py +163 -0
  470. numdaplot/tables/table_writing.py +269 -0
  471. numdaplot-0.1.0.dist-info/METADATA +176 -0
  472. numdaplot-0.1.0.dist-info/RECORD +474 -0
  473. numdaplot-0.1.0.dist-info/WHEEL +4 -0
  474. numdaplot-0.1.0.dist-info/licenses/LICENSE +28 -0
@@ -0,0 +1,79 @@
1
+ """
2
+ Error raised when a setting or an argument receives a value of the wrong type.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ TYPE_MESSAGE = "{target_name} expects {expected}, got {given!r}."
10
+ CLASS_GIVEN_MESSAGE = "ndp.{class_name} is a class, use ndp.{class_name}() instead."
11
+
12
+
13
+ class InvalidTypeError(NumdaplotError):
14
+ """
15
+ Raised when a setting or an argument receives a value of the wrong type, such as a number for ``Region`` rows.
16
+
17
+ A class given in place of an object, such as ``ndp.Sum`` in place of ``ndp.Sum()``, gets a message naming the
18
+ parentheses.
19
+
20
+ .. versionadded:: 0.1.0
21
+
22
+ Parameters
23
+ ----------
24
+ target_name
25
+ What received the value, such as ``"Region rows"``.
26
+ expected
27
+ What it accepts, such as ``"an Index, a Range or None"``.
28
+ given
29
+ The rejected value.
30
+
31
+ Attributes
32
+ ----------
33
+ target_name
34
+ What received the value.
35
+ expected
36
+ What it accepts.
37
+ given
38
+ The rejected value.
39
+
40
+ Examples
41
+ --------
42
+ >>> import numdaplot as ndp
43
+ >>> try:
44
+ ... ndp.Region(rows=0)
45
+ ... except ndp.InvalidTypeError as error:
46
+ ... print(error)
47
+ Region rows expects an Index, a Range or None, got 0.
48
+ >>> try:
49
+ ... ndp.Array.from_list([1, 2]).compute(ndp.Sum)
50
+ ... except ndp.InvalidTypeError as error:
51
+ ... print(error)
52
+ ndp.Sum is a class, use ndp.Sum() instead.
53
+ """
54
+
55
+ def __init__(self, target_name: str, expected: str, given: object) -> None:
56
+ """
57
+ Build the error message from what received the value, what it accepts and the rejected value.
58
+
59
+ .. versionadded:: 0.1.0
60
+
61
+ Parameters
62
+ ----------
63
+ target_name
64
+ What received the value.
65
+ expected
66
+ What it accepts.
67
+ given
68
+ The rejected value.
69
+ """
70
+ if isinstance(given, type):
71
+ message = CLASS_GIVEN_MESSAGE.format(class_name=given.__name__)
72
+ else:
73
+ message = TYPE_MESSAGE.format(target_name=target_name, expected=expected, given=given)
74
+
75
+ super().__init__(message)
76
+
77
+ self.target_name = target_name
78
+ self.expected = expected
79
+ self.given = given
@@ -0,0 +1,36 @@
1
+ """
2
+ Error raised when nested lists do not form a regular block.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ IRREGULAR_LIST_MESSAGE = "Expected nested lists of equal lengths."
10
+
11
+
12
+ class IrregularListError(NumdaplotError):
13
+ """
14
+ Raised when nested lists do not form a regular block of rows and columns.
15
+
16
+ The lists at one level have different lengths, or mix lists and single values.
17
+
18
+ .. versionadded:: 0.1.0
19
+
20
+ Examples
21
+ --------
22
+ >>> import numdaplot as ndp
23
+ >>> try:
24
+ ... ndp.Array.from_list([[1, 2], [3]])
25
+ ... except ndp.IrregularListError as error:
26
+ ... print(error)
27
+ Expected nested lists of equal lengths.
28
+ """
29
+
30
+ def __init__(self) -> None:
31
+ """
32
+ Build the error message.
33
+
34
+ .. versionadded:: 0.1.0
35
+ """
36
+ super().__init__(IRREGULAR_LIST_MESSAGE)
@@ -0,0 +1,183 @@
1
+ """
2
+ Error raised when a key appears several times where a join expects it once.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from typing import Any
8
+
9
+ from numdaplot.errors.numdaplot_error import NumdaplotError
10
+ from numdaplot.errors.repeated_key import RepeatedKey
11
+
12
+ JOIN_RELATION_MESSAGE = (
13
+ "Expected each key of {table_name} to appear once for {relation_name}, but {key_names} {key_values} appears "
14
+ "{count} times."
15
+ )
16
+ VALUE_SEPARATOR = ", "
17
+ COMBINATION_FORMAT = "({joined_values})"
18
+ SINGLE_KEY_COUNT = 1
19
+
20
+
21
+ class JoinRelationError(NumdaplotError):
22
+ """
23
+ Raised when a key appears several times in a Table of a join whose ``Relation`` expects it once.
24
+
25
+ For example, ``Relation.ONE_TO_MANY`` expects each key once in the left Table, the one joined.
26
+
27
+ .. versionadded:: 0.1.0
28
+
29
+ Parameters
30
+ ----------
31
+ relation_name
32
+ The relation checked, such as ``"Relation.ONE_TO_MANY"``.
33
+ table_name
34
+ The Table holding the repeated key: ``"the left Table"`` or ``"the right Table"``.
35
+ repeated_key
36
+ The first repeated key, its values and its number of rows.
37
+
38
+ Attributes
39
+ ----------
40
+ relation_name
41
+ The relation checked.
42
+ table_name
43
+ The Table holding the repeated key.
44
+ repeated_key
45
+ The first repeated key, its values and its number of rows.
46
+
47
+ Examples
48
+ --------
49
+ >>> import numdaplot as ndp
50
+ >>> accidents = ndp.Table.from_arrays({"Num_Acc": ndp.Array.from_list([101, 101])})
51
+ >>> users = ndp.Table.from_arrays({"Num_Acc": ndp.Array.from_list([101])})
52
+ >>> try:
53
+ ... accidents.join(ndp.Join(other=users, keys=["Num_Acc"], relation=ndp.Relation.ONE_TO_MANY))
54
+ ... except ndp.JoinRelationError as error:
55
+ ... print(error)
56
+ Expected each key of the left Table to appear once for Relation.ONE_TO_MANY, but 'Num_Acc' 101 appears 2 times.
57
+ """
58
+
59
+ def __init__(self, relation_name: str, table_name: str, repeated_key: RepeatedKey) -> None:
60
+ """
61
+ Build the error message from the relation, the Table and the repeated key.
62
+
63
+ .. versionadded:: 0.1.0
64
+
65
+ Parameters
66
+ ----------
67
+ relation_name
68
+ The relation checked.
69
+ table_name
70
+ The Table holding the repeated key.
71
+ repeated_key
72
+ The first repeated key, its values and its number of rows.
73
+ """
74
+ key_names = format_key_names(repeated_key.key_names)
75
+ key_values = format_key_values(repeated_key.key_values)
76
+ message = JOIN_RELATION_MESSAGE.format(
77
+ table_name=table_name,
78
+ relation_name=relation_name,
79
+ key_names=key_names,
80
+ key_values=key_values,
81
+ count=repeated_key.count,
82
+ )
83
+ super().__init__(message)
84
+
85
+ self.relation_name = relation_name
86
+ self.table_name = table_name
87
+ self.repeated_key = repeated_key
88
+
89
+
90
+ def format_key_names(key_names: list[str]) -> str:
91
+ """
92
+ Return the names of the key columns as written in the message: one name, or the combination of several.
93
+
94
+ .. versionadded:: 0.1.0
95
+
96
+ Parameters
97
+ ----------
98
+ key_names
99
+ The names of the key columns.
100
+
101
+ Returns
102
+ -------
103
+ str
104
+ ``'Num_Acc'`` for one key, ``('Num_Acc', 'id_vehicule')`` for several.
105
+
106
+ Examples
107
+ --------
108
+ >>> from numdaplot.errors.join_relation_error import format_key_names
109
+ >>> format_key_names(["Num_Acc"]), format_key_names(["Num_Acc", "id_vehicule"])
110
+ ("'Num_Acc'", "('Num_Acc', 'id_vehicule')")
111
+ """
112
+ quoted_names = [repr(key_name) for key_name in key_names]
113
+ names_text = format_combination(quoted_names)
114
+
115
+ return names_text
116
+
117
+
118
+ def format_key_values(key_values: list[Any]) -> str:
119
+ """
120
+ Return the values of a key as written in the message, texts in quotes.
121
+
122
+ .. versionadded:: 0.1.0
123
+
124
+ Parameters
125
+ ----------
126
+ key_values
127
+ The value of each key column.
128
+
129
+ Returns
130
+ -------
131
+ str
132
+ ``202500000001`` for one key, ``(202500000001, 'A01')`` for several.
133
+
134
+ Examples
135
+ --------
136
+ >>> from numdaplot.errors.join_relation_error import format_key_values
137
+ >>> format_key_values([202500000001, "A01"])
138
+ "(202500000001, 'A01')"
139
+ """
140
+ value_texts = list[str]()
141
+
142
+ for key_value in key_values:
143
+ value_text = str(key_value)
144
+ if isinstance(key_value, str):
145
+ value_text = repr(key_value)
146
+
147
+ value_texts.append(value_text)
148
+
149
+ values_text = format_combination(value_texts)
150
+
151
+ return values_text
152
+
153
+
154
+ def format_combination(texts: list[str]) -> str:
155
+ """
156
+ Return a single text as it is, or several texts between parentheses.
157
+
158
+ .. versionadded:: 0.1.0
159
+
160
+ Parameters
161
+ ----------
162
+ texts
163
+ The text of each key column.
164
+
165
+ Returns
166
+ -------
167
+ str
168
+ The single text, or the texts separated by commas between parentheses.
169
+
170
+ Examples
171
+ --------
172
+ >>> from numdaplot.errors.join_relation_error import format_combination
173
+ >>> format_combination(["101"]), format_combination(["101", "'A01'"])
174
+ ('101', "(101, 'A01')")
175
+ """
176
+ text_count = len(texts)
177
+ if text_count == SINGLE_KEY_COUNT:
178
+ return texts[0]
179
+
180
+ joined_values = VALUE_SEPARATOR.join(texts)
181
+ combination = COMBINATION_FORMAT.format(joined_values=joined_values)
182
+
183
+ return combination
@@ -0,0 +1,58 @@
1
+ """
2
+ Error raised when a file format needs an optional package that is not installed.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ MISSING_DEPENDENCY_MESSAGE = (
10
+ "This file format needs the {package_name} package, install it with: pip install numdaplot[{extra_name}]"
11
+ )
12
+
13
+
14
+ class MissingDependencyError(NumdaplotError):
15
+ """
16
+ Raised when reading or writing Excel or Parquet files without the matching optional package.
17
+
18
+ .. versionadded:: 0.1.0
19
+
20
+ Parameters
21
+ ----------
22
+ package_name
23
+ Name of the missing package, such as ``openpyxl``.
24
+ extra_name
25
+ Name of the numdaplot extra that installs it, such as ``excel``.
26
+
27
+ Attributes
28
+ ----------
29
+ package_name
30
+ Name of the missing package, such as ``openpyxl``.
31
+ extra_name
32
+ Name of the numdaplot extra that installs it, such as ``excel``.
33
+
34
+ Examples
35
+ --------
36
+ >>> import numdaplot as ndp
37
+ >>> print(ndp.MissingDependencyError("openpyxl", "excel"))
38
+ This file format needs the openpyxl package, install it with: pip install numdaplot[excel]
39
+ """
40
+
41
+ def __init__(self, package_name: str, extra_name: str) -> None:
42
+ """
43
+ Build the error message from the package name and the extra name.
44
+
45
+ .. versionadded:: 0.1.0
46
+
47
+ Parameters
48
+ ----------
49
+ package_name
50
+ Name of the missing package, such as ``openpyxl``.
51
+ extra_name
52
+ Name of the numdaplot extra that installs it, such as ``excel``.
53
+ """
54
+ message = MISSING_DEPENDENCY_MESSAGE.format(package_name=package_name, extra_name=extra_name)
55
+ super().__init__(message)
56
+
57
+ self.package_name = package_name
58
+ self.extra_name = extra_name
@@ -0,0 +1,36 @@
1
+ """
2
+ Error raised when the type of an Array cannot be guessed.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ MISSING_TYPE_MESSAGE = "Cannot guess the type of an Array without any present value, give dtype."
10
+
11
+
12
+ class MissingTypeError(NumdaplotError):
13
+ """
14
+ Raised when the type of a new Array cannot be guessed.
15
+
16
+ The Array is created without any present value and without ``dtype``.
17
+
18
+ .. versionadded:: 0.1.0
19
+
20
+ Examples
21
+ --------
22
+ >>> import numdaplot as ndp
23
+ >>> try:
24
+ ... ndp.Array.from_list([])
25
+ ... except ndp.MissingTypeError as error:
26
+ ... print(error)
27
+ Cannot guess the type of an Array without any present value, give dtype.
28
+ """
29
+
30
+ def __init__(self) -> None:
31
+ """
32
+ Build the error message.
33
+
34
+ .. versionadded:: 0.1.0
35
+ """
36
+ super().__init__(MISSING_TYPE_MESSAGE)
@@ -0,0 +1,62 @@
1
+ """
2
+ Error raised when a chart cannot draw a missing value.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ MISSING_VALUE_MESSAGE = "{chart_name} cannot draw a missing value, found one in {column_name!r}."
10
+
11
+
12
+ class MissingValueError(NumdaplotError):
13
+ """
14
+ Raised when a column drawn by a chart that needs every value, such as a ``PieChart``, has a missing value.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Parameters
19
+ ----------
20
+ chart_name
21
+ Name of the chart class, such as ``PieChart``.
22
+ column_name
23
+ The column holding the missing value.
24
+
25
+ Attributes
26
+ ----------
27
+ chart_name
28
+ Name of the chart class, such as ``PieChart``.
29
+ column_name
30
+ The column holding the missing value.
31
+
32
+ Examples
33
+ --------
34
+ >>> import numdaplot as ndp
35
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon"])
36
+ >>> sales = ndp.Array.from_list([120.0, None])
37
+ >>> shares = ndp.Table.from_arrays({"city": cities, "sales": sales})
38
+ >>> chart = ndp.PieChart(labels="city", values="sales")
39
+ >>> try:
40
+ ... ndp.Plot.pie(shares, chart)
41
+ ... except ndp.MissingValueError as error:
42
+ ... print(error)
43
+ PieChart cannot draw a missing value, found one in 'sales'.
44
+ """
45
+
46
+ def __init__(self, chart_name: str, column_name: str) -> None:
47
+ """
48
+ Build the error message from the chart and the column.
49
+
50
+ .. versionadded:: 0.1.0
51
+
52
+ Parameters
53
+ ----------
54
+ chart_name
55
+ Name of the chart class, such as ``PieChart``.
56
+ column_name
57
+ The column holding the missing value.
58
+ """
59
+ message = MISSING_VALUE_MESSAGE.format(chart_name=chart_name, column_name=column_name)
60
+ super().__init__(message)
61
+ self.chart_name = chart_name
62
+ self.column_name = column_name
@@ -0,0 +1,53 @@
1
+ """
2
+ Error raised when a single value is asked from an Array holding another number of values.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ NOT_SINGLE_VALUE_MESSAGE = "Expected exactly one value, got {value_count}."
10
+
11
+
12
+ class NotSingleValueError(NumdaplotError):
13
+ """
14
+ Raised when ``to_value`` is called on an Array that does not hold exactly one value.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Parameters
19
+ ----------
20
+ value_count
21
+ Number of values held by the Array.
22
+
23
+ Attributes
24
+ ----------
25
+ value_count
26
+ Number of values held by the Array.
27
+
28
+ Examples
29
+ --------
30
+ >>> import numdaplot as ndp
31
+ >>> array = ndp.Array.from_list([1, 2])
32
+ >>> try:
33
+ ... array.to_value()
34
+ ... except ndp.NotSingleValueError as error:
35
+ ... print(error)
36
+ Expected exactly one value, got 2.
37
+ """
38
+
39
+ def __init__(self, value_count: int) -> None:
40
+ """
41
+ Build the error message from the value count.
42
+
43
+ .. versionadded:: 0.1.0
44
+
45
+ Parameters
46
+ ----------
47
+ value_count
48
+ Number of values held by the Array.
49
+ """
50
+ message = NOT_SINGLE_VALUE_MESSAGE.format(value_count=value_count)
51
+ super().__init__(message)
52
+
53
+ self.value_count = value_count
@@ -0,0 +1,25 @@
1
+ """
2
+ Base class of every numdaplot error.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+
8
+ class NumdaplotError(Exception):
9
+ """
10
+ Base class of every error raised by numdaplot.
11
+
12
+ Catch it to handle any numdaplot error at once, or catch a precise subclass
13
+ to handle only one case.
14
+
15
+ .. versionadded:: 0.1.0
16
+
17
+ Examples
18
+ --------
19
+ >>> import numdaplot as ndp
20
+ >>> try:
21
+ ... ndp.Quantile(1.5)
22
+ ... except ndp.NumdaplotError as error:
23
+ ... print(error)
24
+ Expected a fraction between 0 and 1, got 1.5.
25
+ """
@@ -0,0 +1,34 @@
1
+ """
2
+ Base class of every numdaplot warning.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+
8
+ class NumdaplotWarning(UserWarning):
9
+ """
10
+ Base class of every warning emitted by numdaplot.
11
+
12
+ Filter it with the standard ``warnings`` module to silence, or turn into errors, every numdaplot warning at once
13
+ and only them. Filter a precise subclass to handle only one case.
14
+
15
+ .. versionadded:: 0.1.0
16
+
17
+ Examples
18
+ --------
19
+ >>> import numdaplot as ndp
20
+ >>> import warnings
21
+ >>> distances = ndp.Array.from_list([0.0, 3.0])
22
+ >>> hours = ndp.Array.from_list([0.0, 2.0])
23
+ >>> with warnings.catch_warnings(record=True) as caught_warnings:
24
+ ... warnings.simplefilter("always")
25
+ ... speeds = distances / hours
26
+ >>> isinstance(caught_warnings[0].message, ndp.NumdaplotWarning)
27
+ True
28
+ >>> with warnings.catch_warnings(record=True) as caught_warnings:
29
+ ... warnings.simplefilter("always")
30
+ ... warnings.simplefilter("ignore", ndp.NumdaplotWarning)
31
+ ... speeds = distances / hours
32
+ >>> caught_warnings
33
+ []
34
+ """
@@ -0,0 +1,63 @@
1
+ """
2
+ Error raised when a Plot is placed on a cell of a Figure that already holds one.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ OCCUPIED_CELL_MESSAGE = "Cell ({row}, {column}) already holds a Plot."
10
+
11
+
12
+ class OccupiedCellError(NumdaplotError):
13
+ """
14
+ Raised when a Plot is placed on a cell of a ``Figure`` already covered by another Plot, even partly.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Parameters
19
+ ----------
20
+ row
21
+ The row of the first occupied cell, from 0.
22
+ column
23
+ The column of the first occupied cell, from 0.
24
+
25
+ Attributes
26
+ ----------
27
+ row
28
+ The row of the first occupied cell, from 0.
29
+ column
30
+ The column of the first occupied cell, from 0.
31
+
32
+ Examples
33
+ --------
34
+ >>> import numdaplot as ndp
35
+ >>> prices = ndp.Array.from_list([12.0, 15.5, 14.0])
36
+ >>> plot = ndp.Plot.line(prices)
37
+ >>> figure = ndp.Figure(ndp.Layout(rows=1, columns=2))
38
+ >>> first_cell = ndp.Cell(row=0, column=0)
39
+ >>> figure = figure.place(plot, first_cell)
40
+ >>> try:
41
+ ... figure.place(plot, first_cell)
42
+ ... except ndp.OccupiedCellError as error:
43
+ ... print(error)
44
+ Cell (0, 0) already holds a Plot.
45
+ """
46
+
47
+ def __init__(self, row: int, column: int) -> None:
48
+ """
49
+ Build the error message from the occupied cell.
50
+
51
+ .. versionadded:: 0.1.0
52
+
53
+ Parameters
54
+ ----------
55
+ row
56
+ The row of the first occupied cell, from 0.
57
+ column
58
+ The column of the first occupied cell, from 0.
59
+ """
60
+ message = OCCUPIED_CELL_MESSAGE.format(row=row, column=column)
61
+ super().__init__(message)
62
+ self.row = row
63
+ self.column = column
@@ -0,0 +1,70 @@
1
+ """
2
+ Error raised when a math function is applied to a value it is not defined for.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ OUT_OF_DOMAIN_MESSAGE = "{function_name} is not defined for {value}."
10
+ BETWEEN_INTEGERS_MESSAGE = (
11
+ "{function_name} is not defined for {value} between integers. Convert the values to FLOAT64 first."
12
+ )
13
+
14
+
15
+ class OutOfDomainError(NumdaplotError):
16
+ """
17
+ Raised when a math function or an operator receives a value it is not defined for.
18
+
19
+ For example, the square root of a negative number, the logarithm of 0, or an integer divided by 0 with ``//``.
20
+
21
+ .. versionadded:: 0.1.0
22
+
23
+ Parameters
24
+ ----------
25
+ function_name
26
+ Name of the math function.
27
+ value
28
+ The first value outside the domain of the function.
29
+ between_integers
30
+ True when decimals would accept the value, False by default.
31
+
32
+ Attributes
33
+ ----------
34
+ function_name
35
+ Name of the math function.
36
+ value
37
+ The first value outside the domain of the function.
38
+
39
+ Examples
40
+ --------
41
+ >>> import numdaplot as ndp
42
+ >>> array = ndp.Array.from_list([4, -9])
43
+ >>> try:
44
+ ... array.apply(ndp.SquareRoot())
45
+ ... except ndp.OutOfDomainError as error:
46
+ ... print(error)
47
+ SquareRoot is not defined for -9.
48
+ """
49
+
50
+ def __init__(self, function_name: str, value: float, between_integers: bool = False) -> None:
51
+ """
52
+ Build the error message from the function name and the value.
53
+
54
+ .. versionadded:: 0.1.0
55
+
56
+ Parameters
57
+ ----------
58
+ function_name
59
+ Name of the math function.
60
+ value
61
+ The first value outside the domain of the function.
62
+ between_integers
63
+ True when decimals would accept the value, False by default.
64
+ """
65
+ message_format = BETWEEN_INTEGERS_MESSAGE if between_integers else OUT_OF_DOMAIN_MESSAGE
66
+ message = message_format.format(function_name=function_name, value=value)
67
+ super().__init__(message)
68
+
69
+ self.function_name = function_name
70
+ self.value = value