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,195 @@
1
+ """
2
+ Selection of the values of an Array, by rule and by position.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from typing import TYPE_CHECKING, Self
10
+
11
+ from numdaplot.arrays.array_data import ArrayData
12
+ from numdaplot.arrays.selection.region_index import build_region_index
13
+ from numdaplot.arrays.selection.replaced_values import replace_region
14
+ from numdaplot.arrays.selection.rule_mask import build_rule_mask
15
+ from numdaplot.positions.region import Region
16
+ from numdaplot.rules.rule import Rule
17
+ from numdaplot.settings.argument_types import checked_arguments
18
+
19
+ if TYPE_CHECKING:
20
+ from numdaplot.arrays.replacement import Replacement
21
+
22
+
23
+ class ArraySelection(ArrayData):
24
+ """
25
+ Selection of the values of an Array.
26
+
27
+ By rule with ``select`` and ``check``, by position with ``take`` and ``replace``.
28
+
29
+ .. versionadded:: 0.1.0
30
+ """
31
+
32
+ @checked_arguments
33
+ def select(self, rule: Rule) -> Self:
34
+ """
35
+ Return the values satisfying a rule, in one dimension.
36
+
37
+ .. versionadded:: 0.1.0
38
+
39
+ Parameters
40
+ ----------
41
+ rule
42
+ A ``Rule``, such as ``ndp.Greater(10)`` or ``ndp.IsIn(["Paris"])``: see ``Rule`` for every rule.
43
+ A missing value only satisfies ``IsMissing``.
44
+
45
+ Returns
46
+ -------
47
+ Self
48
+ A new one-dimensional Array, in reading order.
49
+
50
+ Raises
51
+ ------
52
+ InvalidTypeError
53
+ When an argument is not of the type its annotation names.
54
+ IncompatibleTypesError
55
+ When the rule does not apply to the type of the values.
56
+
57
+ Examples
58
+ --------
59
+ >>> import numdaplot as ndp
60
+ >>> prices = ndp.Array.from_list([[5, 12], [30, 8]])
61
+ >>> prices.select(ndp.Greater(10))
62
+ Array([12, 30], dtype=INT64)
63
+ """
64
+ mask = build_rule_mask(self._values, rule)
65
+ selected_values = self._values[mask]
66
+ selected_array = self._wrap(selected_values)
67
+
68
+ return selected_array
69
+
70
+ @checked_arguments
71
+ def check(self, rule: Rule) -> Self:
72
+ """
73
+ Return whether each value satisfies a rule, keeping the shape.
74
+
75
+ Combine several checks with ``&``, ``|`` and ``~``.
76
+
77
+ .. versionadded:: 0.1.0
78
+
79
+ Parameters
80
+ ----------
81
+ rule
82
+ A ``Rule``, such as ``ndp.Greater(10)`` or ``ndp.IsIn(["Paris"])``: see ``Rule`` for every rule.
83
+ A missing value only satisfies ``IsMissing``.
84
+
85
+ Returns
86
+ -------
87
+ Self
88
+ A new ``BOOL`` Array of the same shape.
89
+
90
+ Raises
91
+ ------
92
+ InvalidTypeError
93
+ When an argument is not of the type its annotation names.
94
+ IncompatibleTypesError
95
+ When the rule does not apply to the type of the values.
96
+
97
+ Examples
98
+ --------
99
+ >>> import numdaplot as ndp
100
+ >>> cities = ndp.Array.from_list(["Paris", "Lyon", "Pau"])
101
+ >>> cities.check(ndp.Contains("Pa"))
102
+ Array([ True, False, True], dtype=BOOL)
103
+ """
104
+ mask = build_rule_mask(self._values, rule)
105
+ mask_array = self._wrap(mask)
106
+
107
+ return mask_array
108
+
109
+ @checked_arguments
110
+ def take(self, region: Region) -> Self:
111
+ """
112
+ Return the values of a region of a one- or two-dimensional Array.
113
+
114
+ A row or a column chosen with ``Index`` keeps its dimension: one row of a two-dimensional
115
+ Array is still two-dimensional. Use ``to_value`` to read a single value.
116
+
117
+ .. versionadded:: 0.1.0
118
+
119
+ Parameters
120
+ ----------
121
+ region
122
+ The rows and the columns to take, every one of a dimension when omitted.
123
+ Negative positions count from the end.
124
+
125
+ Returns
126
+ -------
127
+ Self
128
+ A new Array with as many dimensions as this one.
129
+
130
+ Raises
131
+ ------
132
+ InvalidTypeError
133
+ When an argument is not of the type its annotation names.
134
+ DimensionError
135
+ When the Array has more than two dimensions, or columns are given for a one-dimensional Array.
136
+ RefusedOperationError
137
+ When columns are given as names, which only a Table has.
138
+ InvalidPositionError
139
+ When a position is not a whole number inside its dimension.
140
+
141
+ Examples
142
+ --------
143
+ >>> import numdaplot as ndp
144
+ >>> grid = ndp.Array.from_list([[1, 2, 3], [4, 5, 6]])
145
+ >>> grid.take(ndp.Region(rows=ndp.Index(-1), columns=ndp.Range(start=0, stop=1)))
146
+ Array([[4, 5]], dtype=INT64)
147
+ """
148
+ region_index = build_region_index(region, self._values.shape)
149
+ region_values = self._values[region_index]
150
+ region_array = self._wrap(region_values)
151
+
152
+ return region_array
153
+
154
+ @checked_arguments
155
+ def replace(self, replacement: Replacement) -> Self:
156
+ """
157
+ Return a new Array whose region is replaced; this Array does not change.
158
+
159
+ .. versionadded:: 0.1.0
160
+
161
+ Parameters
162
+ ----------
163
+ replacement
164
+ The region, and a single value or an Array of exactly the shape of the region.
165
+
166
+ Returns
167
+ -------
168
+ Self
169
+ A new Array of the same shape and type.
170
+
171
+ Raises
172
+ ------
173
+ InvalidTypeError
174
+ When an argument is not of the type its annotation names.
175
+ ShapeMismatchError
176
+ When an Array of new values does not have the shape of the region.
177
+ ValueConversionError
178
+ When the new values cannot be stored in the type of the Array without losing information.
179
+ TimeOverflowError
180
+ When a datetime is outside 1677 to 2262, or a duration beyond about 292 years.
181
+ DimensionError, RefusedOperationError, InvalidPositionError
182
+ When the region does not fit the Array, as in ``take``.
183
+
184
+ Examples
185
+ --------
186
+ >>> import numdaplot as ndp
187
+ >>> scores = ndp.Array.from_list([10, 20, 30])
188
+ >>> scores.replace(ndp.Replacement(region=ndp.Region(rows=ndp.Index(1)), value=0))
189
+ Array([10, 0, 30], dtype=INT64)
190
+ """
191
+ new_values = self._read_operand(replacement.value)
192
+ replaced_values = replace_region(self._values, replacement.region, new_values)
193
+ replaced_array = self._wrap(replaced_values)
194
+
195
+ return replaced_array
@@ -0,0 +1,59 @@
1
+ """
2
+ Settings of the sort of an Array.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from dataclasses import dataclass
8
+
9
+ from numdaplot.ordering.missing_position import MissingPosition
10
+ from numdaplot.ordering.order import Order
11
+ from numdaplot.settings.field_types import require_field_types
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class ArraySorting:
16
+ """
17
+ Settings of the sort of an Array, used by ``Array.sort``.
18
+
19
+ The axis, inside each row or each column, is given to ``Array.sort`` itself.
20
+
21
+ .. versionadded:: 0.1.0
22
+
23
+ Parameters
24
+ ----------
25
+ order
26
+ Ascending by default.
27
+ missing
28
+ Place of the missing values, last by default whatever the order.
29
+
30
+
31
+ Raises
32
+ ------
33
+ InvalidTypeError
34
+ When a setting is not of the type its annotation names.
35
+
36
+ Examples
37
+ --------
38
+ >>> import numdaplot as ndp
39
+ >>> grid = ndp.Array.from_list([[3, 1], [2, 4]])
40
+ >>> grid.sort(ndp.ArraySorting(order=ndp.Order.DESCENDING), axis=ndp.Axis.EACH_COLUMN)
41
+ Array([[3, 4],
42
+ [2, 1]], dtype=INT64)
43
+ """
44
+
45
+ order: Order = Order.ASCENDING
46
+ missing: MissingPosition = MissingPosition.LAST
47
+
48
+ def __post_init__(self) -> None:
49
+ """
50
+ Check the type of every setting.
51
+
52
+ .. versionadded:: 0.1.0
53
+
54
+ Raises
55
+ ------
56
+ InvalidTypeError
57
+ When a setting is not of the type its annotation names.
58
+ """
59
+ require_field_types(self)
@@ -0,0 +1,58 @@
1
+ """
2
+ Conversion of an ``ndp.Axis`` to a numpy axis number.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.dimension_error import DimensionError
8
+ from numdaplot.positions.axis import Axis
9
+
10
+ AXIS_DIMENSION_COUNT = 2
11
+ AXIS_OPERATION = "An axis"
12
+ NUMPY_AXES = {
13
+ Axis.EACH_ROW: 1,
14
+ Axis.EACH_COLUMN: 0,
15
+ }
16
+
17
+
18
+ def find_numpy_axis(axis: Axis | None, dimension_count: int) -> int | None:
19
+ """
20
+ Return the numpy axis number an operation runs along.
21
+
22
+ ``EACH_ROW`` handles every row on its own, so the numpy operation runs along the columns, axis 1.
23
+
24
+ .. versionadded:: 0.1.0
25
+
26
+ Parameters
27
+ ----------
28
+ axis
29
+ The numdaplot axis, or ``None`` when omitted.
30
+ dimension_count
31
+ The number of dimensions of the Array.
32
+
33
+ Returns
34
+ -------
35
+ int or None
36
+ 1 for ``EACH_ROW``, 0 for ``EACH_COLUMN``, ``None`` when the axis is omitted.
37
+
38
+ Raises
39
+ ------
40
+ DimensionError
41
+ When an axis is given for an Array that is not two-dimensional.
42
+
43
+ Examples
44
+ --------
45
+ >>> import numdaplot as ndp
46
+ >>> from numdaplot.arrays.axis_number import find_numpy_axis
47
+ >>> find_numpy_axis(ndp.Axis.EACH_COLUMN, 2)
48
+ 0
49
+ """
50
+ if axis is None:
51
+ return None
52
+
53
+ if dimension_count != AXIS_DIMENSION_COUNT:
54
+ raise DimensionError(AXIS_OPERATION, dimension_count)
55
+
56
+ numpy_axis = NUMPY_AXES[axis]
57
+
58
+ return numpy_axis
@@ -0,0 +1,5 @@
1
+ """
2
+ Statistics and math functions computed on Array values.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
@@ -0,0 +1,325 @@
1
+ """
2
+ Statistics counting the values of an Array: count, distinct count, most frequent value and its count.
3
+
4
+ Each function ignores missing values, unless ``Count`` is set to include them, and reduces the whole Array when
5
+ ``axis`` is ``None``.
6
+
7
+ .. versionadded:: 0.1.0
8
+ """
9
+
10
+ from collections.abc import Callable
11
+ from typing import Any, cast
12
+
13
+ import numpy
14
+ from numpy.typing import NDArray
15
+
16
+ from numdaplot.arrays.selection.missing_mask import find_missing
17
+ from numdaplot.statistics.count import Count
18
+ from numdaplot.statistics.counted_missing import CountedMissing
19
+ from numdaplot.statistics.statistic import Statistic
20
+
21
+ LAST_AXIS = -1
22
+ NO_VALUE_COUNT = 0
23
+
24
+
25
+ def compute_count(values: NDArray[Any], axis: int | None, statistic: Statistic) -> Any:
26
+ """
27
+ Return the number of present values, or of every value when the statistic includes the missing ones.
28
+
29
+ .. versionadded:: 0.1.0
30
+
31
+ Parameters
32
+ ----------
33
+ values
34
+ The values of an Array.
35
+ axis
36
+ The numpy axis to reduce, or ``None`` for the whole Array.
37
+ statistic
38
+ The ``Count`` statistic, holding whether missing values are counted.
39
+
40
+ Returns
41
+ -------
42
+ Any
43
+ A single count, or one count per reduced slice.
44
+
45
+ Examples
46
+ --------
47
+ >>> import numpy
48
+ >>> import numdaplot as ndp
49
+ >>> from numdaplot.arrays.calculation.counting_statistics import compute_count
50
+ >>> compute_count(numpy.array([1.0, numpy.nan]), None, ndp.Count())
51
+ np.int64(1)
52
+ >>> compute_count(numpy.array([1.0, numpy.nan]), None, ndp.Count(missing=ndp.CountedMissing.INCLUDED))
53
+ np.int64(2)
54
+ """
55
+ count = cast(Count, statistic)
56
+ counted = numpy.ones(values.shape, dtype=numpy.bool_)
57
+ if count.missing == CountedMissing.EXCLUDED:
58
+ missing = find_missing(values)
59
+ counted = ~missing
60
+
61
+ counted_values = numpy.sum(counted, axis=axis)
62
+
63
+ return counted_values
64
+
65
+
66
+ def compute_count_distinct(values: NDArray[Any], axis: int | None, statistic: Statistic) -> Any:
67
+ """
68
+ Return the number of distinct present values.
69
+
70
+ .. versionadded:: 0.1.0
71
+
72
+ Parameters
73
+ ----------
74
+ values
75
+ The values of an Array.
76
+ axis
77
+ The numpy axis to reduce, or ``None`` for the whole Array.
78
+ statistic
79
+ The ``CountDistinct`` statistic.
80
+
81
+ Returns
82
+ -------
83
+ Any
84
+ A single count, or one count per reduced slice.
85
+
86
+ Examples
87
+ --------
88
+ >>> import numpy
89
+ >>> import numdaplot as ndp
90
+ >>> from numdaplot.arrays.calculation.counting_statistics import compute_count_distinct
91
+ >>> compute_count_distinct(numpy.array([1, 1, 2]), None, ndp.CountDistinct())
92
+ 2
93
+ """
94
+ distinct_counts = apply_to_each_slice(values, axis, count_distinct_values)
95
+
96
+ return distinct_counts
97
+
98
+
99
+ def compute_most_frequent(values: NDArray[Any], axis: int | None, statistic: Statistic) -> Any:
100
+ """
101
+ Return the present value appearing the most often, the lowest one in case of a tie.
102
+
103
+ .. versionadded:: 0.1.0
104
+
105
+ Parameters
106
+ ----------
107
+ values
108
+ The values of an Array, at least one present value per slice.
109
+ axis
110
+ The numpy axis to reduce, or ``None`` for the whole Array.
111
+ statistic
112
+ The ``MostFrequent`` statistic.
113
+
114
+ Returns
115
+ -------
116
+ Any
117
+ A single value, or one value per reduced slice.
118
+
119
+ Examples
120
+ --------
121
+ >>> import numpy
122
+ >>> import numdaplot as ndp
123
+ >>> from numdaplot.arrays.calculation.counting_statistics import compute_most_frequent
124
+ >>> compute_most_frequent(numpy.array([3, 1, 3]), None, ndp.MostFrequent())
125
+ np.int64(3)
126
+ """
127
+ most_frequent_values = apply_to_each_slice(values, axis, find_most_frequent_value)
128
+
129
+ return most_frequent_values
130
+
131
+
132
+ def compute_most_frequent_count(values: NDArray[Any], axis: int | None, statistic: Statistic) -> Any:
133
+ """
134
+ Return the number of times the most frequent present value appears.
135
+
136
+ .. versionadded:: 0.1.0
137
+
138
+ Parameters
139
+ ----------
140
+ values
141
+ The values of an Array.
142
+ axis
143
+ The numpy axis to reduce, or ``None`` for the whole Array.
144
+ statistic
145
+ The ``MostFrequentCount`` statistic.
146
+
147
+ Returns
148
+ -------
149
+ Any
150
+ A single count, or one count per reduced slice. 0 when there is no present value.
151
+
152
+ Examples
153
+ --------
154
+ >>> import numpy
155
+ >>> import numdaplot as ndp
156
+ >>> from numdaplot.arrays.calculation.counting_statistics import compute_most_frequent_count
157
+ >>> compute_most_frequent_count(numpy.array([3, 1, 3]), None, ndp.MostFrequentCount())
158
+ np.int64(2)
159
+ """
160
+ most_frequent_counts = apply_to_each_slice(values, axis, count_most_frequent_value)
161
+
162
+ return most_frequent_counts
163
+
164
+
165
+ def apply_to_each_slice(values: NDArray[Any], axis: int | None, slice_function: Callable[[NDArray[Any]], Any]) -> Any:
166
+ """
167
+ Return the result of a function applied to the whole Array, or to each slice along an axis.
168
+
169
+ .. versionadded:: 0.1.0
170
+
171
+ Parameters
172
+ ----------
173
+ values
174
+ The values of an Array.
175
+ axis
176
+ The numpy axis to reduce, or ``None`` for the whole Array.
177
+ slice_function
178
+ The function reducing one-dimensional values to a single result.
179
+
180
+ Returns
181
+ -------
182
+ Any
183
+ A single result, or an array of one result per slice.
184
+
185
+ Examples
186
+ --------
187
+ >>> import numpy
188
+ >>> from numdaplot.arrays.calculation.counting_statistics import apply_to_each_slice
189
+ >>> apply_to_each_slice(numpy.array([[1, 2], [3, 4]]), 0, numpy.max)
190
+ array([3, 4])
191
+ """
192
+ if axis is None:
193
+ flat_values = values.reshape(LAST_AXIS)
194
+ single_result = slice_function(flat_values)
195
+ return single_result
196
+
197
+ slices = numpy.moveaxis(values, axis, LAST_AXIS)
198
+ slice_results = [slice_function(values_slice) for values_slice in slices]
199
+ results = numpy.array(slice_results)
200
+
201
+ return results
202
+
203
+
204
+ def find_present_values(values: NDArray[Any]) -> NDArray[Any]:
205
+ """
206
+ Return the present values, in a single dimension.
207
+
208
+ .. versionadded:: 0.1.0
209
+
210
+ Parameters
211
+ ----------
212
+ values
213
+ The values of an Array.
214
+
215
+ Returns
216
+ -------
217
+ NDArray
218
+ Every value that is not missing.
219
+
220
+ Examples
221
+ --------
222
+ >>> import numpy
223
+ >>> from numdaplot.arrays.calculation.counting_statistics import find_present_values
224
+ >>> find_present_values(numpy.array([1.0, numpy.nan]))
225
+ array([1.])
226
+ """
227
+ missing = find_missing(values)
228
+ present = ~missing
229
+ present_values = values[present]
230
+
231
+ return present_values
232
+
233
+
234
+ def count_distinct_values(values: NDArray[Any]) -> int:
235
+ """
236
+ Return the number of distinct present values of one-dimensional values.
237
+
238
+ .. versionadded:: 0.1.0
239
+
240
+ Parameters
241
+ ----------
242
+ values
243
+ One-dimensional values.
244
+
245
+ Returns
246
+ -------
247
+ int
248
+ The number of distinct present values.
249
+
250
+ Examples
251
+ --------
252
+ >>> import numpy
253
+ >>> from numdaplot.arrays.calculation.counting_statistics import count_distinct_values
254
+ >>> count_distinct_values(numpy.array(["a", "b", "a"]))
255
+ 2
256
+ """
257
+ present_values = find_present_values(values)
258
+ distinct_values = numpy.unique(present_values)
259
+ distinct_count = distinct_values.size
260
+
261
+ return distinct_count
262
+
263
+
264
+ def find_most_frequent_value(values: NDArray[Any]) -> Any:
265
+ """
266
+ Return the present value appearing the most often, the lowest one in case of a tie.
267
+
268
+ .. versionadded:: 0.1.0
269
+
270
+ Parameters
271
+ ----------
272
+ values
273
+ One-dimensional values, at least one of them present.
274
+
275
+ Returns
276
+ -------
277
+ Any
278
+ The most frequent value.
279
+
280
+ Examples
281
+ --------
282
+ >>> import numpy
283
+ >>> from numdaplot.arrays.calculation.counting_statistics import find_most_frequent_value
284
+ >>> find_most_frequent_value(numpy.array([2, 1, 2, 1]))
285
+ np.int64(1)
286
+ """
287
+ present_values = find_present_values(values)
288
+ distinct_values, counts = numpy.unique(present_values, return_counts=True)
289
+ most_frequent_position = numpy.argmax(counts)
290
+ most_frequent_value = distinct_values[most_frequent_position]
291
+
292
+ return most_frequent_value
293
+
294
+
295
+ def count_most_frequent_value(values: NDArray[Any]) -> Any:
296
+ """
297
+ Return the number of times the most frequent present value appears.
298
+
299
+ .. versionadded:: 0.1.0
300
+
301
+ Parameters
302
+ ----------
303
+ values
304
+ One-dimensional values.
305
+
306
+ Returns
307
+ -------
308
+ Any
309
+ The highest count, 0 when there is no present value.
310
+
311
+ Examples
312
+ --------
313
+ >>> import numpy
314
+ >>> from numdaplot.arrays.calculation.counting_statistics import count_most_frequent_value
315
+ >>> count_most_frequent_value(numpy.array([2, 1, 2]))
316
+ np.int64(2)
317
+ """
318
+ present_values = find_present_values(values)
319
+ if present_values.size == 0:
320
+ return NO_VALUE_COUNT
321
+
322
+ _, counts = numpy.unique(present_values, return_counts=True)
323
+ highest_count = numpy.max(counts)
324
+
325
+ return highest_count