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,52 @@
1
+ """
2
+ Error raised when a column name is not a non-empty text.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ INVALID_COLUMN_NAME_MESSAGE = "Expected a column name as a non-empty text, got {column_name!r}."
10
+
11
+
12
+ class InvalidColumnNameError(NumdaplotError):
13
+ """
14
+ Raised when a column name is empty or is not a text, such as a number in a pandas DataFrame.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Parameters
19
+ ----------
20
+ column_name
21
+ The rejected name.
22
+
23
+ Attributes
24
+ ----------
25
+ column_name
26
+ The rejected name.
27
+
28
+ Examples
29
+ --------
30
+ >>> import numdaplot as ndp
31
+ >>> try:
32
+ ... ndp.NameChange(old_name="price", new_name="")
33
+ ... except ndp.InvalidColumnNameError as error:
34
+ ... print(error)
35
+ Expected a column name as a non-empty text, got ''.
36
+ """
37
+
38
+ def __init__(self, column_name: object) -> None:
39
+ """
40
+ Build the error message from the column name.
41
+
42
+ .. versionadded:: 0.1.0
43
+
44
+ Parameters
45
+ ----------
46
+ column_name
47
+ The rejected name.
48
+ """
49
+ message = INVALID_COLUMN_NAME_MESSAGE.format(column_name=column_name)
50
+ super().__init__(message)
51
+
52
+ self.column_name = column_name
@@ -0,0 +1,119 @@
1
+ """
2
+ Error raised when a setting of a conversion does not apply to it.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ INVALID_CONVERSION_MESSAGE = (
10
+ "The setting {setting_name} does not apply to a conversion from {source_type_name} to {target_type_name}."
11
+ )
12
+ DATE_FORMAT_ON_TIME_MESSAGE = (
13
+ "The format {date_format_name} has a date, which TIME cannot hold. Give a CustomDateFormat of a time only, "
14
+ 'such as "%H:%M".'
15
+ )
16
+ TIME_TYPE_NAME = "TIME"
17
+ TIME_FORMAT_ON_DATE_MESSAGE = (
18
+ "The format {date_format_name} has a time, which DATE cannot hold. "
19
+ "Convert the column to DATETIME first, then to {target_type_name}."
20
+ )
21
+
22
+
23
+ class InvalidConversionError(NumdaplotError):
24
+ """
25
+ Raised when a setting of a ``Conversion`` does not apply to the types it converts.
26
+
27
+ For example, a date format given to a conversion between numbers, a format with a time given to
28
+ a ``DATE`` column, or a time zone change given to a conversion from texts.
29
+
30
+ .. versionadded:: 0.1.0
31
+
32
+ Parameters
33
+ ----------
34
+ setting_name
35
+ Name of the setting, such as ``"format"``.
36
+ source_type_name
37
+ Name of the ``ndp.Type`` member of the column.
38
+ target_type_name
39
+ Name of the ``ndp.Type`` member it is converted to.
40
+ date_format_name
41
+ The name or the pattern of a format with a time, when dates are read or written with it. When omitted, the
42
+ message names the setting and the types.
43
+
44
+ Attributes
45
+ ----------
46
+ setting_name
47
+ Name of the setting.
48
+ source_type_name
49
+ Name of the ``ndp.Type`` member of the column.
50
+ target_type_name
51
+ Name of the ``ndp.Type`` member it is converted to.
52
+ date_format_name
53
+ The name or the pattern of a format with a time used on dates, ``None`` for other conversions.
54
+
55
+ Examples
56
+ --------
57
+ >>> import numdaplot as ndp
58
+ >>> prices = ndp.Table.from_arrays({"price": ndp.Array.from_list([12.5])})
59
+ >>> day_first = ndp.DateFormat.DAY_MONTH_YEAR
60
+ >>> try:
61
+ ... prices.convert(ndp.Conversion(column="price", dtype=ndp.Type.TEXT, format=day_first))
62
+ ... except ndp.InvalidConversionError as error:
63
+ ... print(error)
64
+ The setting format does not apply to a conversion from FLOAT64 to TEXT.
65
+ >>> days = ndp.Table.from_arrays({"day": ndp.Array.from_list(["31/12/2026 14:30"])})
66
+ >>> day_and_time = ndp.DateFormat.DAY_MONTH_YEAR_TIME
67
+ >>> try:
68
+ ... days.convert(ndp.Conversion(column="day", dtype=ndp.Type.DATE, format=day_and_time))
69
+ ... except ndp.InvalidConversionError as error:
70
+ ... print(error)
71
+ The format DAY_MONTH_YEAR_TIME has a time, which DATE cannot hold.
72
+ Convert the column to DATETIME first, then to DATE.
73
+ """
74
+
75
+ def __init__(
76
+ self,
77
+ setting_name: str,
78
+ source_type_name: str,
79
+ target_type_name: str,
80
+ date_format_name: str | None = None,
81
+ ) -> None:
82
+ """
83
+ Build the error message from the setting and the types of the conversion.
84
+
85
+ .. versionadded:: 0.1.0
86
+
87
+ Parameters
88
+ ----------
89
+ setting_name
90
+ Name of the setting.
91
+ source_type_name
92
+ Name of the ``ndp.Type`` member of the column.
93
+ target_type_name
94
+ Name of the ``ndp.Type`` member it is converted to.
95
+ date_format_name
96
+ The name or the pattern of a format with a time, when dates are read or written with it, or of a format with
97
+ a date, when times of day are read or written with it. When omitted, the message names the setting and the
98
+ types.
99
+ """
100
+ message = INVALID_CONVERSION_MESSAGE.format(
101
+ setting_name=setting_name,
102
+ source_type_name=source_type_name,
103
+ target_type_name=target_type_name,
104
+ )
105
+ converts_times = TIME_TYPE_NAME in (source_type_name, target_type_name)
106
+ if date_format_name is not None and converts_times:
107
+ message = DATE_FORMAT_ON_TIME_MESSAGE.format(date_format_name=date_format_name)
108
+
109
+ if date_format_name is not None and not converts_times:
110
+ message = TIME_FORMAT_ON_DATE_MESSAGE.format(
111
+ date_format_name=date_format_name,
112
+ target_type_name=target_type_name,
113
+ )
114
+
115
+ super().__init__(message)
116
+ self.setting_name = setting_name
117
+ self.source_type_name = source_type_name
118
+ self.target_type_name = target_type_name
119
+ self.date_format_name = date_format_name
@@ -0,0 +1,61 @@
1
+ """
2
+ Error raised when a count of values is too low.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ INVALID_COUNT_MESSAGE = "Expected a count of at least {minimum}, got {count}."
10
+
11
+
12
+ class InvalidCountError(NumdaplotError):
13
+ """
14
+ Raised when a count of values is lower than the minimum it needs.
15
+
16
+ ``Spacing`` needs at least 2 values when both bounds are included, and at least 1 otherwise.
17
+
18
+ .. versionadded:: 0.1.0
19
+
20
+ Parameters
21
+ ----------
22
+ count
23
+ The rejected count.
24
+ minimum
25
+ The lowest accepted count.
26
+
27
+ Attributes
28
+ ----------
29
+ count
30
+ The rejected count.
31
+ minimum
32
+ The lowest accepted count.
33
+
34
+ Examples
35
+ --------
36
+ >>> import numdaplot as ndp
37
+ >>> try:
38
+ ... ndp.Spacing(start=0, stop=1, count=0)
39
+ ... except ndp.InvalidCountError as error:
40
+ ... print(error)
41
+ Expected a count of at least 2, got 0.
42
+ """
43
+
44
+ def __init__(self, count: int, minimum: int) -> None:
45
+ """
46
+ Build the error message from the count and the minimum.
47
+
48
+ .. versionadded:: 0.1.0
49
+
50
+ Parameters
51
+ ----------
52
+ count
53
+ The rejected count.
54
+ minimum
55
+ The lowest accepted count.
56
+ """
57
+ message = INVALID_COUNT_MESSAGE.format(count=count, minimum=minimum)
58
+ super().__init__(message)
59
+
60
+ self.count = count
61
+ self.minimum = minimum
@@ -0,0 +1,51 @@
1
+ """
2
+ Error raised when a custom date pattern cannot read dates.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ INVALID_DATE_FORMAT_MESSAGE = "Expected a pattern with a date or a time code and no time zone code, got {pattern!r}."
10
+
11
+
12
+ class InvalidDateFormatError(NumdaplotError):
13
+ """
14
+ Raised when a custom pattern has no date nor time code, or has a time zone code.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Parameters
19
+ ----------
20
+ pattern
21
+ The rejected pattern.
22
+
23
+ Attributes
24
+ ----------
25
+ pattern
26
+ The rejected pattern.
27
+
28
+ Examples
29
+ --------
30
+ >>> import numdaplot as ndp
31
+ >>> try:
32
+ ... ndp.CustomDateFormat("%d/%m/%Y %z")
33
+ ... except ndp.InvalidDateFormatError as error:
34
+ ... print(error)
35
+ Expected a pattern with a date or a time code and no time zone code, got '%d/%m/%Y %z'.
36
+ """
37
+
38
+ def __init__(self, pattern: str) -> None:
39
+ """
40
+ Build the error message from the rejected pattern.
41
+
42
+ .. versionadded:: 0.1.0
43
+
44
+ Parameters
45
+ ----------
46
+ pattern
47
+ The rejected pattern.
48
+ """
49
+ message = INVALID_DATE_FORMAT_MESSAGE.format(pattern=pattern)
50
+ super().__init__(message)
51
+ self.pattern = pattern
@@ -0,0 +1,52 @@
1
+ """
2
+ Error raised when a standard deviation is negative.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ INVALID_DEVIATION_MESSAGE = "Expected a deviation of at least 0, got {deviation}."
10
+
11
+
12
+ class InvalidDeviationError(NumdaplotError):
13
+ """
14
+ Raised when a normal distribution is given a negative standard deviation.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Parameters
19
+ ----------
20
+ deviation
21
+ The rejected standard deviation.
22
+
23
+ Attributes
24
+ ----------
25
+ deviation
26
+ The rejected standard deviation.
27
+
28
+ Examples
29
+ --------
30
+ >>> import numdaplot as ndp
31
+ >>> try:
32
+ ... ndp.Normal(mean=0, deviation=-1)
33
+ ... except ndp.InvalidDeviationError as error:
34
+ ... print(error)
35
+ Expected a deviation of at least 0, got -1.
36
+ """
37
+
38
+ def __init__(self, deviation: float) -> None:
39
+ """
40
+ Build the error message from the deviation.
41
+
42
+ .. versionadded:: 0.1.0
43
+
44
+ Parameters
45
+ ----------
46
+ deviation
47
+ The rejected standard deviation.
48
+ """
49
+ message = INVALID_DEVIATION_MESSAGE.format(deviation=deviation)
50
+ super().__init__(message)
51
+
52
+ self.deviation = deviation
@@ -0,0 +1,51 @@
1
+ """
2
+ Error raised when a fraction is outside 0 to 1.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ INVALID_FRACTION_MESSAGE = "Expected a fraction between 0 and 1, got {value}."
10
+
11
+
12
+ class InvalidFractionError(NumdaplotError):
13
+ """
14
+ Raised when a value expected to be a fraction is lower than 0, greater than 1 or not a number.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Parameters
19
+ ----------
20
+ value
21
+ The rejected value.
22
+
23
+ Attributes
24
+ ----------
25
+ value
26
+ The rejected value.
27
+
28
+ Examples
29
+ --------
30
+ >>> import numdaplot as ndp
31
+ >>> try:
32
+ ... ndp.Quantile(1.5)
33
+ ... except ndp.InvalidFractionError as error:
34
+ ... print(error)
35
+ Expected a fraction between 0 and 1, got 1.5.
36
+ """
37
+
38
+ def __init__(self, value: float) -> None:
39
+ """
40
+ Build the error message from the rejected value.
41
+
42
+ .. versionadded:: 0.1.0
43
+
44
+ Parameters
45
+ ----------
46
+ value
47
+ The rejected value.
48
+ """
49
+ message = INVALID_FRACTION_MESSAGE.format(value=value)
50
+ super().__init__(message)
51
+ self.value = value
@@ -0,0 +1,61 @@
1
+ """
2
+ Error raised when Brackets are not given exactly one label per bracket.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ INVALID_LABEL_COUNT_MESSAGE = "Expected {bracket_count} labels, one per bracket, got {label_count}."
10
+
11
+
12
+ class InvalidLabelCountError(NumdaplotError):
13
+ """
14
+ Raised when the labels of ``Brackets`` are not exactly one per bracket.
15
+
16
+ There is one bracket between two limits, plus one for each open end.
17
+
18
+ .. versionadded:: 0.1.0
19
+
20
+ Parameters
21
+ ----------
22
+ bracket_count
23
+ The number of brackets.
24
+ label_count
25
+ The number of labels given.
26
+
27
+ Attributes
28
+ ----------
29
+ bracket_count
30
+ The number of brackets.
31
+ label_count
32
+ The number of labels given.
33
+
34
+ Examples
35
+ --------
36
+ >>> import numdaplot as ndp
37
+ >>> try:
38
+ ... ndp.Brackets(limits=[0, 18, 65], labels=["child", "adult", "senior"])
39
+ ... except ndp.InvalidLabelCountError as error:
40
+ ... print(error)
41
+ Expected 2 labels, one per bracket, got 3.
42
+ """
43
+
44
+ def __init__(self, bracket_count: int, label_count: int) -> None:
45
+ """
46
+ Build the error message from the two counts.
47
+
48
+ .. versionadded:: 0.1.0
49
+
50
+ Parameters
51
+ ----------
52
+ bracket_count
53
+ The number of brackets.
54
+ label_count
55
+ The number of labels given.
56
+ """
57
+ message = INVALID_LABEL_COUNT_MESSAGE.format(bracket_count=bracket_count, label_count=label_count)
58
+ super().__init__(message)
59
+
60
+ self.bracket_count = bracket_count
61
+ self.label_count = label_count
@@ -0,0 +1,111 @@
1
+ """
2
+ Error raised when the limits of Brackets do not form valid brackets.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ TOO_FEW_LIMITS_MESSAGE = "Expected at least 2 limits, or 1 with an open first or last bracket, got {limit_count}."
10
+ UNORDERED_LIMITS_MESSAGE = "Expected limits in strictly increasing order, got {later_limit} after {earlier_limit}."
11
+ EMPTY_BRACKET_MESSAGE = "The bracket from {low} to {high} holds no integer."
12
+
13
+
14
+ class InvalidLimitsError(NumdaplotError):
15
+ """
16
+ Raised when the limits of ``Brackets`` do not form valid brackets.
17
+
18
+ The limits must strictly increase, and form at least one bracket. On a column of integers, each bracket between two
19
+ limits must hold an integer.
20
+
21
+ .. versionadded:: 0.1.0
22
+
23
+ Parameters
24
+ ----------
25
+ limits
26
+ The limits of the brackets.
27
+ empty_bracket
28
+ The low and the high limit of a bracket holding no integer, when the limits are valid but that bracket is not.
29
+ When omitted, the limits themselves are wrong.
30
+
31
+ Attributes
32
+ ----------
33
+ limits
34
+ The limits of the brackets.
35
+ empty_bracket
36
+ The limits of the bracket holding no integer, ``None`` when the limits themselves are wrong.
37
+
38
+ Examples
39
+ --------
40
+ >>> import numdaplot as ndp
41
+ >>> try:
42
+ ... ndp.Brackets(limits=[0, 10, 10])
43
+ ... except ndp.InvalidLimitsError as error:
44
+ ... print(error)
45
+ Expected limits in strictly increasing order, got 10 after 10.
46
+ >>> try:
47
+ ... ndp.Brackets(limits=[0])
48
+ ... except ndp.InvalidLimitsError as error:
49
+ ... print(error)
50
+ Expected at least 2 limits, or 1 with an open first or last bracket, got 1.
51
+ """
52
+
53
+ def __init__(self, limits: list[int | float], empty_bracket: list[int | float] | None = None) -> None:
54
+ """
55
+ Build the error message from the first problem of the limits.
56
+
57
+ .. versionadded:: 0.1.0
58
+
59
+ Parameters
60
+ ----------
61
+ limits
62
+ The limits of the brackets.
63
+ empty_bracket
64
+ The low and the high limit of a bracket holding no integer. When omitted, the limits themselves are wrong.
65
+ """
66
+ message = write_limits_message(limits, empty_bracket)
67
+ super().__init__(message)
68
+
69
+ self.limits = limits
70
+ self.empty_bracket = empty_bracket
71
+
72
+
73
+ def write_limits_message(limits: list[int | float], empty_bracket: list[int | float] | None) -> str:
74
+ """
75
+ Return the message naming the first problem of the limits of brackets.
76
+
77
+ .. versionadded:: 0.1.0
78
+
79
+ Parameters
80
+ ----------
81
+ limits
82
+ The limits of the brackets.
83
+ empty_bracket
84
+ The low and the high limit of a bracket holding no integer, or None.
85
+
86
+ Returns
87
+ -------
88
+ str
89
+ The empty bracket, else the first limit not greater than the previous one, else the number of limits.
90
+
91
+ Examples
92
+ --------
93
+ >>> from numdaplot.errors.invalid_limits_error import write_limits_message
94
+ >>> write_limits_message([5.2, 5.8], [5.2, 5.8])
95
+ 'The bracket from 5.2 to 5.8 holds no integer.'
96
+ """
97
+ if empty_bracket is not None:
98
+ low, high = empty_bracket
99
+ empty_message = EMPTY_BRACKET_MESSAGE.format(low=low, high=high)
100
+ return empty_message
101
+
102
+ for earlier_limit, later_limit in zip(limits, limits[1:], strict=False):
103
+ is_greater = later_limit > earlier_limit
104
+ if not is_greater:
105
+ unordered_message = UNORDERED_LIMITS_MESSAGE.format(earlier_limit=earlier_limit, later_limit=later_limit)
106
+ return unordered_message
107
+
108
+ limit_count = len(limits)
109
+ too_few_message = TOO_FEW_LIMITS_MESSAGE.format(limit_count=limit_count)
110
+
111
+ return too_few_message
@@ -0,0 +1,52 @@
1
+ """
2
+ Error raised when an opacity is outside what can be drawn.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ INVALID_OPACITY_MESSAGE = "Expected an opacity above 0 and up to 1, got {opacity}."
10
+
11
+
12
+ class InvalidOpacityError(NumdaplotError):
13
+ """
14
+ Raised when an opacity is 0 or lower, which would draw nothing, greater than 1, or not a number.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Parameters
19
+ ----------
20
+ opacity
21
+ The rejected opacity.
22
+
23
+ Attributes
24
+ ----------
25
+ opacity
26
+ The rejected opacity.
27
+
28
+ Examples
29
+ --------
30
+ >>> import numdaplot as ndp
31
+ >>> try:
32
+ ... ndp.ScatterChart(opacity=0.0)
33
+ ... except ndp.InvalidOpacityError as error:
34
+ ... print(error)
35
+ Expected an opacity above 0 and up to 1, got 0.0.
36
+ """
37
+
38
+ def __init__(self, opacity: float) -> None:
39
+ """
40
+ Build the error message from the opacity.
41
+
42
+ .. versionadded:: 0.1.0
43
+
44
+ Parameters
45
+ ----------
46
+ opacity
47
+ The rejected opacity.
48
+ """
49
+ message = INVALID_OPACITY_MESSAGE.format(opacity=opacity)
50
+ super().__init__(message)
51
+
52
+ self.opacity = opacity
@@ -0,0 +1,52 @@
1
+ """
2
+ Error raised when the size of a point cannot be drawn.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.numdaplot_error import NumdaplotError
8
+
9
+ INVALID_POINT_SIZE_MESSAGE = "Expected a point size above 0, got {point_size}."
10
+
11
+
12
+ class InvalidPointSizeError(NumdaplotError):
13
+ """
14
+ Raised when the size of a point is 0 or lower, infinite, or not a number.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Parameters
19
+ ----------
20
+ point_size
21
+ The rejected size.
22
+
23
+ Attributes
24
+ ----------
25
+ point_size
26
+ The rejected size.
27
+
28
+ Examples
29
+ --------
30
+ >>> import numdaplot as ndp
31
+ >>> try:
32
+ ... ndp.ScatterChart(point_size=-1.0)
33
+ ... except ndp.InvalidPointSizeError as error:
34
+ ... print(error)
35
+ Expected a point size above 0, got -1.0.
36
+ """
37
+
38
+ def __init__(self, point_size: float) -> None:
39
+ """
40
+ Build the error message from the size.
41
+
42
+ .. versionadded:: 0.1.0
43
+
44
+ Parameters
45
+ ----------
46
+ point_size
47
+ The rejected size.
48
+ """
49
+ message = INVALID_POINT_SIZE_MESSAGE.format(point_size=point_size)
50
+ super().__init__(message)
51
+
52
+ self.point_size = point_size