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,120 @@
1
+ """
2
+ Replacement of the values of a region of an Array.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from typing import Any, cast
8
+
9
+ import numpy
10
+ from numpy.typing import NDArray
11
+
12
+ from numdaplot.arrays.operations.operand import Operand, find_operand_type
13
+ from numdaplot.arrays.operations.time_bounds import NANOSECOND_TYPES, require_nanoseconds_fit
14
+ from numdaplot.arrays.selection.region_index import build_region_index
15
+ from numdaplot.data_types.numpy_mapping import from_numpy_dtype, to_numpy_dtype
16
+ from numdaplot.errors.shape_mismatch_error import ShapeMismatchError
17
+ from numdaplot.errors.value_conversion_error import ValueConversionError
18
+ from numdaplot.positions.region import Region
19
+
20
+ SAFE_CASTING = "same_kind"
21
+ REPLACE_OPERATION = "replace"
22
+
23
+
24
+ def replace_region(values: NDArray[Any], region: Region, new_values: Operand) -> NDArray[Any]:
25
+ """
26
+ Return a copy of the values whose region is replaced.
27
+
28
+ .. versionadded:: 0.1.0
29
+
30
+ Parameters
31
+ ----------
32
+ values
33
+ The values of an Array.
34
+ region
35
+ The positions to replace.
36
+ new_values
37
+ A single value written at every position, or Array values of exactly the shape of the region.
38
+
39
+ Returns
40
+ -------
41
+ NDArray
42
+ The new values, of the same shape and type.
43
+
44
+ Raises
45
+ ------
46
+ ShapeMismatchError
47
+ When Array values do not have the shape of the region.
48
+ ValueConversionError
49
+ When the new values cannot be stored in the type of the values without losing information.
50
+ DimensionError, RefusedOperationError, InvalidPositionError
51
+ When the region does not fit the values, as in ``build_region_index``.
52
+
53
+ Examples
54
+ --------
55
+ >>> import numpy
56
+ >>> import numdaplot as ndp
57
+ >>> from numdaplot.arrays.selection.replaced_values import replace_region
58
+ >>> replace_region(numpy.array([1, 2, 3]), ndp.Region(rows=ndp.Index(0)), 9)
59
+ array([9, 2, 3])
60
+ """
61
+ region_index = build_region_index(region, values.shape)
62
+ region_values = values[region_index]
63
+ if isinstance(new_values, numpy.ndarray):
64
+ if new_values.shape != region_values.shape:
65
+ raise ShapeMismatchError(new_values.shape, region_values.shape)
66
+
67
+ require_storable(new_values, values)
68
+ replaced_values = values.copy()
69
+ # numpy reads dates and durations from Python objects, which its type hints do not list.
70
+ storable_values = cast(Any, new_values)
71
+ try:
72
+ replaced_values[region_index] = storable_values
73
+ except OverflowError as error:
74
+ new_type = find_operand_type(new_values)
75
+ values_type = from_numpy_dtype(values.dtype)
76
+ raise ValueConversionError(new_type.name, values_type.name) from error
77
+
78
+ return replaced_values
79
+
80
+
81
+ def require_storable(new_values: Operand, values: NDArray[Any]) -> None:
82
+ """
83
+ Check that new values can be stored in the type of existing values without losing information.
84
+
85
+ .. versionadded:: 0.1.0
86
+
87
+ Parameters
88
+ ----------
89
+ new_values
90
+ A single value, or Array values.
91
+ values
92
+ The values receiving them.
93
+
94
+ Raises
95
+ ------
96
+ ValueConversionError
97
+ When a decimal would become an integer, or a text a number, for example.
98
+ TimeOverflowError
99
+ When a value stored as ``DATETIME`` or ``DURATION`` is outside the range of nanoseconds.
100
+
101
+ Examples
102
+ --------
103
+ >>> import numpy
104
+ >>> import numdaplot as ndp
105
+ >>> from numdaplot.arrays.selection.replaced_values import require_storable
106
+ >>> try:
107
+ ... require_storable(0.5, numpy.array([1, 2]))
108
+ ... except ndp.ValueConversionError as error:
109
+ ... print(error)
110
+ Cannot store FLOAT64 values as INT64 without losing information.
111
+ """
112
+ new_type = find_operand_type(new_values)
113
+ values_type = from_numpy_dtype(values.dtype)
114
+ new_dtype = to_numpy_dtype(new_type)
115
+ is_safe = numpy.can_cast(new_dtype, values.dtype, casting=SAFE_CASTING)
116
+ if not is_safe:
117
+ raise ValueConversionError(new_type.name, values_type.name)
118
+
119
+ if values_type in NANOSECOND_TYPES:
120
+ require_nanoseconds_fit(new_values, values_type, REPLACE_OPERATION)
@@ -0,0 +1,83 @@
1
+ """
2
+ Mask of any rule applied to the values of an Array.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from typing import Any, cast
8
+
9
+ import numpy
10
+ from numpy.typing import NDArray
11
+
12
+ from numdaplot.arrays.selection.comparison_masks import build_between_mask, build_comparison_mask
13
+ from numdaplot.arrays.selection.membership_masks import build_contains_mask, build_membership_mask
14
+ from numdaplot.arrays.selection.missing_mask import find_missing
15
+ from numdaplot.errors.refused_operation_error import RefusedOperationError
16
+ from numdaplot.rules.between import Between
17
+ from numdaplot.rules.contains import Contains
18
+ from numdaplot.rules.is_in import IsIn
19
+ from numdaplot.rules.is_missing import IsMissing
20
+ from numdaplot.rules.is_present import IsPresent
21
+ from numdaplot.rules.rule import Rule
22
+ from numdaplot.rules.value_rule import ValueRule
23
+
24
+ UNKNOWN_RULE_OPERATION = "The rule {rule_name}"
25
+ UNKNOWN_RULE_ALTERNATIVE = "a rule of numdaplot"
26
+
27
+
28
+ def build_rule_mask(values: NDArray[Any], rule: Rule) -> NDArray[numpy.bool_]:
29
+ """
30
+ Return which values satisfy a rule.
31
+
32
+ .. versionadded:: 0.1.0
33
+
34
+ Parameters
35
+ ----------
36
+ values
37
+ The values of an Array.
38
+ rule
39
+ Any rule of numdaplot.
40
+
41
+ Returns
42
+ -------
43
+ NDArray[numpy.bool_]
44
+ True at each value satisfying the rule. A missing value only satisfies ``IsMissing``.
45
+
46
+ Raises
47
+ ------
48
+ IncompatibleTypesError
49
+ When the rule does not apply to the type of the values.
50
+ RefusedOperationError
51
+ When the rule is not a rule of numdaplot.
52
+
53
+ Examples
54
+ --------
55
+ >>> import numpy
56
+ >>> import numdaplot as ndp
57
+ >>> from numdaplot.arrays.selection.rule_mask import build_rule_mask
58
+ >>> build_rule_mask(numpy.array([1.0, numpy.nan]), ndp.IsPresent())
59
+ array([ True, False])
60
+ """
61
+ match rule:
62
+ case IsMissing():
63
+ mask = find_missing(values)
64
+ case IsPresent():
65
+ missing = find_missing(values)
66
+ mask = ~missing
67
+ case Contains():
68
+ mask = build_contains_mask(values, rule)
69
+ case IsIn():
70
+ membership_rule = cast(IsIn[Any], rule)
71
+ mask = build_membership_mask(values, membership_rule)
72
+ case Between():
73
+ interval_rule = cast(Between[Any], rule)
74
+ mask = build_between_mask(values, interval_rule)
75
+ case ValueRule():
76
+ comparison_rule = cast(ValueRule[Any], rule)
77
+ mask = build_comparison_mask(values, comparison_rule)
78
+ case _:
79
+ rule_class = type(rule)
80
+ operation = UNKNOWN_RULE_OPERATION.format(rule_name=rule_class.__name__)
81
+ raise RefusedOperationError(operation, UNKNOWN_RULE_ALTERNATIVE)
82
+
83
+ return mask
@@ -0,0 +1,172 @@
1
+ """
2
+ Comparison of nanosecond values with a date, a datetime or a duration that nanoseconds cannot hold.
3
+
4
+ Such a reference lies beyond every stored value, so the answer is known without converting it, which numpy
5
+ either refuses or does wrongly.
6
+
7
+ .. versionadded:: 0.1.0
8
+ """
9
+
10
+ from datetime import timedelta
11
+ from typing import Any
12
+
13
+ import numpy
14
+ from numpy.typing import NDArray
15
+
16
+ from numdaplot.arrays.operations.operand import LONGEST_MICROSECOND_DURATION, convert_time_value
17
+ from numdaplot.arrays.operations.time_bounds import NANOSECOND_DTYPES, is_python_time_in_range
18
+
19
+ MICROSECOND_DURATION_DTYPE = numpy.dtype("timedelta64[us]")
20
+ AFTER_EVERY_VALUE = 1
21
+ BEFORE_EVERY_VALUE = -1
22
+ ANY_STORED_VALUE = 0
23
+ NO_DURATION = timedelta(0)
24
+ FIRST_YEAR_AFTER_ZERO = 1970
25
+
26
+
27
+ def is_far_reference(values: NDArray[Any], reference: object) -> bool:
28
+ """
29
+ Return whether a reference value lies beyond everything nanosecond values can hold.
30
+
31
+ .. versionadded:: 0.1.0
32
+
33
+ Parameters
34
+ ----------
35
+ values
36
+ The values of an Array.
37
+ reference
38
+ A single Python value.
39
+
40
+ Returns
41
+ -------
42
+ bool
43
+ True for a date, a datetime or a duration out of range, beside values stored in nanoseconds, and for a duration
44
+ that microseconds cannot count, beside durations stored in microseconds.
45
+
46
+ Examples
47
+ --------
48
+ >>> from datetime import datetime
49
+ >>> import numpy
50
+ >>> from numdaplot.arrays.selection.time_reference import is_far_reference
51
+ >>> moments = numpy.array(["2026-01-31"], dtype="datetime64[ns]")
52
+ >>> is_far_reference(moments, datetime(3000, 1, 1)), is_far_reference(moments, datetime(2026, 1, 1))
53
+ (True, False)
54
+ """
55
+ if values.dtype == MICROSECOND_DURATION_DTYPE and isinstance(reference, timedelta):
56
+ is_too_long = abs(reference) > LONGEST_MICROSECOND_DURATION
57
+ return is_too_long
58
+
59
+ if values.dtype not in NANOSECOND_DTYPES:
60
+ return False
61
+
62
+ in_range = is_python_time_in_range(reference)
63
+
64
+ return not in_range
65
+
66
+
67
+ def find_far_side(reference: Any) -> int:
68
+ """
69
+ Return on which side of every stored value a reference out of range lies.
70
+
71
+ .. versionadded:: 0.1.0
72
+
73
+ Parameters
74
+ ----------
75
+ reference
76
+ A date, a datetime or a duration out of range.
77
+
78
+ Returns
79
+ -------
80
+ int
81
+ 1 after every value, -1 before every value.
82
+
83
+ Examples
84
+ --------
85
+ >>> from datetime import date, timedelta
86
+ >>> from numdaplot.arrays.selection.time_reference import find_far_side
87
+ >>> find_far_side(date(3000, 1, 1)), find_far_side(date(1000, 1, 1)), find_far_side(timedelta(days=-200000))
88
+ (1, -1, -1)
89
+ """
90
+ if isinstance(reference, timedelta):
91
+ is_after = reference > NO_DURATION
92
+ else:
93
+ is_after = reference.year >= FIRST_YEAR_AFTER_ZERO
94
+
95
+ if is_after:
96
+ return AFTER_EVERY_VALUE
97
+
98
+ return BEFORE_EVERY_VALUE
99
+
100
+
101
+ def compare_with_reference(values: NDArray[Any], reference: Any, compare: numpy.ufunc) -> NDArray[numpy.bool_]:
102
+ """
103
+ Return the comparison of each value with a reference value, which may be out of range.
104
+
105
+ .. versionadded:: 0.1.0
106
+
107
+ Parameters
108
+ ----------
109
+ values
110
+ The values of an Array.
111
+ reference
112
+ A single Python value.
113
+ compare
114
+ The numpy comparison, such as ``numpy.less``, with the values on its left.
115
+
116
+ Returns
117
+ -------
118
+ NDArray[numpy.bool_]
119
+ The result for each value, a missing value not being set apart.
120
+
121
+ Examples
122
+ --------
123
+ >>> from datetime import datetime
124
+ >>> import numpy
125
+ >>> from numdaplot.arrays.selection.time_reference import compare_with_reference
126
+ >>> moments = numpy.array(["2026-01-31"], dtype="datetime64[ns]")
127
+ >>> compare_with_reference(moments, datetime(3000, 1, 1), numpy.less)
128
+ array([ True])
129
+ """
130
+ is_far = is_far_reference(values, reference)
131
+ if is_far:
132
+ far_side = find_far_side(reference)
133
+ same_answer = compare(ANY_STORED_VALUE, far_side)
134
+ far_matches = numpy.full(values.shape, same_answer, dtype=numpy.bool_)
135
+ return far_matches
136
+
137
+ numpy_reference = convert_time_value(reference)
138
+ matches = compare(values, numpy_reference)
139
+
140
+ return matches
141
+
142
+
143
+ def remove_far_references(values: NDArray[Any], references: list[Any]) -> list[Any]:
144
+ """
145
+ Return the reference values that may equal a stored value, those out of range never doing so.
146
+
147
+ .. versionadded:: 0.1.0
148
+
149
+ Parameters
150
+ ----------
151
+ values
152
+ The values of an Array.
153
+ references
154
+ Single Python values.
155
+
156
+ Returns
157
+ -------
158
+ list[Any]
159
+ The values kept, in their order.
160
+
161
+ Examples
162
+ --------
163
+ >>> from datetime import datetime
164
+ >>> import numpy
165
+ >>> from numdaplot.arrays.selection.time_reference import remove_far_references
166
+ >>> moments = numpy.array(["2026-01-31"], dtype="datetime64[ns]")
167
+ >>> remove_far_references(moments, [datetime(2026, 1, 31), datetime(3000, 1, 1)])
168
+ [datetime.datetime(2026, 1, 31, 0, 0)]
169
+ """
170
+ near_references = [reference for reference in references if not is_far_reference(values, reference)]
171
+
172
+ return near_references
@@ -0,0 +1,74 @@
1
+ """
2
+ Number of values along each dimension of an Array.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from dataclasses import dataclass
8
+
9
+ from numdaplot.errors.invalid_shape_error import InvalidShapeError
10
+ from numdaplot.settings.field_types import require_field_types
11
+
12
+ LOWEST_DIMENSION = 0
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class Shape:
17
+ """
18
+ Number of values along each dimension of an Array.
19
+
20
+ ``Shape([3, 4])`` describes 3 rows of 4 values, and ``Shape([5])`` a single row of 5 values.
21
+ It is used by ``Array.filled``, ``Array.random`` and ``reshape``, and returned by ``Array.shape``.
22
+
23
+ .. versionadded:: 0.1.0
24
+
25
+ Parameters
26
+ ----------
27
+ dimensions
28
+ Number of values along each dimension, a list of at least one dimension and none lower than 0.
29
+ The shape keeps its own copy of the list.
30
+
31
+ Raises
32
+ ------
33
+ InvalidTypeError
34
+ When a setting is not of the type its annotation names.
35
+ InvalidShapeError
36
+ When ``dimensions`` is empty or holds a negative number.
37
+
38
+ Examples
39
+ --------
40
+ >>> import numdaplot as ndp
41
+ >>> ndp.Array.filled(shape=ndp.Shape([2, 3]), value=0)
42
+ Array([[0, 0, 0],
43
+ [0, 0, 0]], dtype=INT64)
44
+ >>> ndp.Array.from_list([[1, 2, 3], [4, 5, 6]]).shape
45
+ Shape(dimensions=[2, 3])
46
+ """
47
+
48
+ dimensions: list[int]
49
+
50
+ def __post_init__(self) -> None:
51
+ """
52
+ Check the dimensions and replace them with a copy that only the shape holds.
53
+
54
+ .. versionadded:: 0.1.0
55
+
56
+ Raises
57
+ ------
58
+ InvalidTypeError
59
+ When a setting is not of the type its annotation names.
60
+ InvalidShapeError
61
+ When ``dimensions`` is empty or holds a negative number.
62
+ """
63
+ require_field_types(self)
64
+
65
+ dimension_count = len(self.dimensions)
66
+ if dimension_count == 0:
67
+ raise InvalidShapeError(self.dimensions)
68
+
69
+ for dimension in self.dimensions:
70
+ if dimension < LOWEST_DIMENSION:
71
+ raise InvalidShapeError(self.dimensions)
72
+
73
+ dimensions_copy = list(self.dimensions)
74
+ object.__setattr__(self, "dimensions", dimensions_copy)
@@ -0,0 +1,51 @@
1
+ """
2
+ Whether a comparison of two Arrays also compares their types.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from enum import Enum, auto
8
+
9
+
10
+ class TypeMatch(Enum):
11
+ """
12
+ Whether a comparison of two Arrays also compares their types, used by ``Equality``.
13
+
14
+ .. versionadded:: 0.1.0
15
+
16
+ Examples
17
+ --------
18
+ >>> import numdaplot as ndp
19
+ >>> integers = ndp.Array.from_list([1, 2])
20
+ >>> decimals = ndp.Array.from_list([1.0, 2.0])
21
+ >>> integers.is_equal(ndp.Equality(other=decimals, types=ndp.TypeMatch.IGNORED))
22
+ True
23
+ >>> integers.is_equal(ndp.Equality(other=decimals, types=ndp.TypeMatch.STRICT))
24
+ False
25
+ """
26
+
27
+ STRICT = auto()
28
+ """
29
+ The types must be the same: ``[1, 2]`` as ``INT64`` differs from ``[1.0, 2.0]`` as ``FLOAT64``.
30
+
31
+ Examples
32
+ --------
33
+ >>> import numdaplot as ndp
34
+ >>> integers = ndp.Array.from_list([1, 2])
35
+ >>> decimals = ndp.Array.from_list([1.0, 2.0])
36
+ >>> integers.is_equal(ndp.Equality(other=decimals, types=ndp.TypeMatch.STRICT))
37
+ False
38
+ """
39
+
40
+ IGNORED = auto()
41
+ """
42
+ Only the values are compared: ``[1, 2]`` equals ``[1.0, 2.0]``. Default value.
43
+
44
+ Examples
45
+ --------
46
+ >>> import numdaplot as ndp
47
+ >>> integers = ndp.Array.from_list([1, 2])
48
+ >>> decimals = ndp.Array.from_list([1.0, 2.0])
49
+ >>> integers.is_equal(ndp.Equality(other=decimals, types=ndp.TypeMatch.IGNORED))
50
+ True
51
+ """
@@ -0,0 +1,5 @@
1
+ """
2
+ The ``ndp.Type`` enum and its conversion to and from numpy and pandas types.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
@@ -0,0 +1,57 @@
1
+ """
2
+ Libraries that numdaplot types are converted to and from.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class Library(Enum):
11
+ """
12
+ Underlying library on the other side of a type conversion, read on ``UnsupportedTypeError.library``.
13
+
14
+ The value of each member is the name of the library, as shown in error messages.
15
+
16
+ .. versionadded:: 0.1.0
17
+
18
+ Examples
19
+ --------
20
+ >>> import numdaplot as ndp
21
+ >>> import numpy
22
+ >>> try:
23
+ ... ndp.Array.from_numpy(numpy.array([1 + 2j]))
24
+ ... except ndp.UnsupportedTypeError as error:
25
+ ... print(error.library.value)
26
+ numpy
27
+ """
28
+
29
+ NUMPY = "numpy"
30
+ """
31
+ numpy, used by Array.
32
+
33
+ Examples
34
+ --------
35
+ >>> import numdaplot as ndp
36
+ >>> import numpy
37
+ >>> try:
38
+ ... ndp.Array.from_numpy(numpy.array([1 + 2j]))
39
+ ... except ndp.UnsupportedTypeError as error:
40
+ ... print(error.library == ndp.Library.NUMPY)
41
+ True
42
+ """
43
+
44
+ PANDAS = "pandas"
45
+ """
46
+ pandas, used by Table.
47
+
48
+ Examples
49
+ --------
50
+ >>> import numdaplot as ndp
51
+ >>> import pandas
52
+ >>> try:
53
+ ... ndp.Table.from_pandas(pandas.DataFrame({"impedance": [1 + 2j]}))
54
+ ... except ndp.UnsupportedTypeError as error:
55
+ ... print(error.library == ndp.Library.PANDAS)
56
+ True
57
+ """