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,437 @@
1
+ """
2
+ Dates built from their year, their month and their day.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from dataclasses import dataclass
10
+ from typing import TYPE_CHECKING, Any, cast
11
+
12
+ import numpy
13
+ from numpy.typing import NDArray
14
+
15
+ from numdaplot.arrays.creation.date_parts import DateParts
16
+ from numdaplot.data_types.type import Type
17
+ from numdaplot.errors.rejected_dates import RejectedDate, RejectedDatePart
18
+ from numdaplot.errors.value_conversion_error import ValueConversionError
19
+
20
+ if TYPE_CHECKING:
21
+ from numdaplot.arrays.array import Array
22
+
23
+ DECIMAL_DTYPE = numpy.float64
24
+ WHOLE_DTYPE = numpy.int64
25
+ YEAR_DTYPE = "datetime64[Y]"
26
+ MONTH_DTYPE = "datetime64[M]"
27
+ DATE_DTYPE = "datetime64[D]"
28
+ MONTH_STEP_DTYPE = "timedelta64[M]"
29
+ DAY_STEP_DTYPE = "timedelta64[D]"
30
+ MISSING_DATE = numpy.datetime64("NaT", "D")
31
+ EPOCH_YEAR = 1970
32
+ MONTHS_PER_YEAR = 12
33
+ FIRST_YEAR = 1
34
+ LAST_YEAR = 9999
35
+ FIRST_MONTH = 1
36
+ LAST_MONTH = 12
37
+ FIRST_DAY = 1
38
+ LAST_DAY = 31
39
+ SAFE_PART = 1
40
+ YEAR_PART = "year"
41
+ MONTH_PART = "month"
42
+ DAY_PART = "day"
43
+
44
+
45
+ @dataclass(frozen=True, eq=False)
46
+ class PartNumbers:
47
+ """
48
+ The year, the month and the day of each date, as flat decimals, NaN where missing.
49
+
50
+ .. versionadded:: 0.1.0
51
+
52
+ Parameters
53
+ ----------
54
+ years
55
+ The years.
56
+ months
57
+ The months.
58
+ days
59
+ The days.
60
+
61
+ Examples
62
+ --------
63
+ >>> import numpy
64
+ >>> from numdaplot.arrays.creation.date_parts_values import PartNumbers
65
+ >>> PartNumbers(numpy.array([2025.0]), numpy.array([3.0]), numpy.array([15.0])).days
66
+ array([15.])
67
+ """
68
+
69
+ years: NDArray[numpy.float64]
70
+ months: NDArray[numpy.float64]
71
+ days: NDArray[numpy.float64]
72
+
73
+
74
+ def build_dates(parts: DateParts) -> NDArray[numpy.datetime64]:
75
+ """
76
+ Return the dates of a year, a month and a day, missing where a part is missing.
77
+
78
+ .. versionadded:: 0.1.0
79
+
80
+ Parameters
81
+ ----------
82
+ parts
83
+ The year, the month and the day of each date.
84
+
85
+ Returns
86
+ -------
87
+ NDArray[numpy.datetime64]
88
+ The dates in ``datetime64[D]``, in the shape of the parts, NaT where a part is missing.
89
+
90
+ Raises
91
+ ------
92
+ ValueConversionError
93
+ At the first part that is not a whole number, then at the first year, month and day that form no date.
94
+
95
+ Examples
96
+ --------
97
+ >>> import numdaplot as ndp
98
+ >>> from numdaplot.arrays.creation.date_parts_values import build_dates
99
+ >>> years = ndp.Array.from_list([2025.0, None])
100
+ >>> months = ndp.Array.from_list([2.0, 3.0])
101
+ >>> days = ndp.Array.from_list([28.0, 1.0])
102
+ >>> build_dates(ndp.DateParts(year=years, month=months, day=days))
103
+ array(['2025-02-28', 'NaT'], dtype='datetime64[D]')
104
+ """
105
+ numbers = read_part_numbers(parts)
106
+ missing = find_missing_parts(numbers)
107
+ require_whole_parts(numbers, missing, parts)
108
+ safe_numbers = replace_unusable_parts(numbers, missing)
109
+ dates = combine_parts(safe_numbers)
110
+ require_real_dates(numbers, dates, missing, parts.year)
111
+ present_dates = numpy.where(missing, MISSING_DATE, dates)
112
+ dimensions = parts.year.shape.dimensions
113
+ shaped_dates = present_dates.reshape(dimensions)
114
+
115
+ return shaped_dates
116
+
117
+
118
+ def read_part_numbers(parts: DateParts) -> PartNumbers:
119
+ """
120
+ Return the year, the month and the day of each date as flat decimals.
121
+
122
+ .. versionadded:: 0.1.0
123
+
124
+ Parameters
125
+ ----------
126
+ parts
127
+ The year, the month and the day of each date.
128
+
129
+ Returns
130
+ -------
131
+ PartNumbers
132
+ The parts as float64 numbers in one dimension, NaN where missing.
133
+
134
+ Examples
135
+ --------
136
+ >>> import numdaplot as ndp
137
+ >>> from numdaplot.arrays.creation.date_parts_values import read_part_numbers
138
+ >>> single = ndp.Array.from_list([[1]])
139
+ >>> read_part_numbers(ndp.DateParts(year=single, month=single, day=single)).years
140
+ array([1.])
141
+ """
142
+ years = read_flat_decimals(parts.year)
143
+ months = read_flat_decimals(parts.month)
144
+ days = read_flat_decimals(parts.day)
145
+ numbers = PartNumbers(years, months, days)
146
+
147
+ return numbers
148
+
149
+
150
+ def read_flat_decimals(part: Array) -> NDArray[numpy.float64]:
151
+ """
152
+ Return the numbers of an Array as decimals in one dimension.
153
+
154
+ .. versionadded:: 0.1.0
155
+
156
+ Parameters
157
+ ----------
158
+ part
159
+ An Array of numbers.
160
+
161
+ Returns
162
+ -------
163
+ NDArray[numpy.float64]
164
+ Its numbers, NaN where missing.
165
+
166
+ Examples
167
+ --------
168
+ >>> import numdaplot as ndp
169
+ >>> from numdaplot.arrays.creation.date_parts_values import read_flat_decimals
170
+ >>> read_flat_decimals(ndp.Array.from_list([[1, 2]]))
171
+ array([1., 2.])
172
+ """
173
+ values = part.to_numpy()
174
+ decimals = values.astype(DECIMAL_DTYPE)
175
+ flat_decimals = decimals.ravel()
176
+
177
+ return flat_decimals
178
+
179
+
180
+ def find_missing_parts(numbers: PartNumbers) -> NDArray[numpy.bool_]:
181
+ """
182
+ Return where a part of a date is missing.
183
+
184
+ .. versionadded:: 0.1.0
185
+
186
+ Parameters
187
+ ----------
188
+ numbers
189
+ The parts as decimals.
190
+
191
+ Returns
192
+ -------
193
+ NDArray[numpy.bool_]
194
+ True where the year, the month or the day is NaN.
195
+
196
+ Examples
197
+ --------
198
+ >>> import numpy
199
+ >>> from numdaplot.arrays.creation.date_parts_values import PartNumbers, find_missing_parts
200
+ >>> find_missing_parts(PartNumbers(numpy.array([2025.0, 2025.0]), numpy.array([1.0, numpy.nan]), numpy.ones(2)))
201
+ array([False, True])
202
+ """
203
+ missing_years = numpy.isnan(numbers.years)
204
+ missing_months = numpy.isnan(numbers.months)
205
+ missing_days = numpy.isnan(numbers.days)
206
+ missing = missing_years | missing_months | missing_days
207
+
208
+ return missing
209
+
210
+
211
+ def require_whole_parts(numbers: PartNumbers, missing: NDArray[numpy.bool_], parts: DateParts) -> None:
212
+ """
213
+ Check that every present part is a whole number.
214
+
215
+ .. versionadded:: 0.1.0
216
+
217
+ Parameters
218
+ ----------
219
+ numbers
220
+ The parts as decimals.
221
+ missing
222
+ True where a part is missing.
223
+ parts
224
+ The Arrays of the parts, whose types the error names.
225
+
226
+ Raises
227
+ ------
228
+ ValueConversionError
229
+ At the first part that is not a whole number, the years first, then the months, then the days.
230
+
231
+ Examples
232
+ --------
233
+ >>> import numdaplot as ndp
234
+ >>> from numdaplot.arrays.creation.date_parts_values import (
235
+ ... find_missing_parts,
236
+ ... read_part_numbers,
237
+ ... require_whole_parts,
238
+ ... )
239
+ >>> years = ndp.Array.from_list([2025.0])
240
+ >>> months = ndp.Array.from_list([3.0])
241
+ >>> days = ndp.Array.from_list([3.5])
242
+ >>> parts = ndp.DateParts(year=years, month=months, day=days)
243
+ >>> numbers = read_part_numbers(parts)
244
+ >>> try:
245
+ ... require_whole_parts(numbers, find_missing_parts(numbers), parts)
246
+ ... except ndp.ValueConversionError as error:
247
+ ... print(error)
248
+ Cannot use the FLOAT64 value 3.5 as a day: date parts must be whole numbers.
249
+ """
250
+ checked_parts = (
251
+ (YEAR_PART, numbers.years, parts.year),
252
+ (MONTH_PART, numbers.months, parts.month),
253
+ (DAY_PART, numbers.days, parts.day),
254
+ )
255
+ for part_name, part_numbers, part in checked_parts:
256
+ rounded_numbers = numpy.floor(part_numbers)
257
+ is_whole = (rounded_numbers == part_numbers) & numpy.isfinite(part_numbers)
258
+ is_rejected = ~is_whole & ~missing
259
+ has_rejected = bool(is_rejected.any())
260
+ if not has_rejected:
261
+ continue
262
+
263
+ rejected_numbers = part_numbers[is_rejected]
264
+ first_number = float(rejected_numbers[0])
265
+ rejected_part = RejectedDatePart(part_name, first_number)
266
+ raise ValueConversionError(part.dtype.name, Type.DATE.name, rejected_part)
267
+
268
+
269
+ def replace_unusable_parts(numbers: PartNumbers, missing: NDArray[numpy.bool_]) -> PartNumbers:
270
+ """
271
+ Return the parts with 1 where a part is missing or outside its usual range, so that every date can be computed.
272
+
273
+ .. versionadded:: 0.1.0
274
+
275
+ Parameters
276
+ ----------
277
+ numbers
278
+ The whole parts as decimals.
279
+ missing
280
+ True where a part is missing.
281
+
282
+ Returns
283
+ -------
284
+ PartNumbers
285
+ The parts, each from 1 to its largest usual value.
286
+
287
+ Examples
288
+ --------
289
+ >>> import numpy
290
+ >>> from numdaplot.arrays.creation.date_parts_values import PartNumbers, replace_unusable_parts
291
+ >>> numbers = PartNumbers(numpy.array([2025.0]), numpy.array([13.0]), numpy.array([1.0]))
292
+ >>> replace_unusable_parts(numbers, numpy.array([False])).months
293
+ array([1.])
294
+ """
295
+ usable_years = keep_in_range(numbers.years, missing, LAST_YEAR)
296
+ usable_months = keep_in_range(numbers.months, missing, LAST_MONTH)
297
+ usable_days = keep_in_range(numbers.days, missing, LAST_DAY)
298
+ usable_numbers = PartNumbers(usable_years, usable_months, usable_days)
299
+
300
+ return usable_numbers
301
+
302
+
303
+ def keep_in_range(
304
+ part_numbers: NDArray[numpy.float64], missing: NDArray[numpy.bool_], last_value: int
305
+ ) -> NDArray[numpy.float64]:
306
+ """
307
+ Return a part with 1 where it is missing or outside 1 to its last value.
308
+
309
+ .. versionadded:: 0.1.0
310
+
311
+ Parameters
312
+ ----------
313
+ part_numbers
314
+ The numbers of one part.
315
+ missing
316
+ True where a part of the date is missing.
317
+ last_value
318
+ The largest value of the part.
319
+
320
+ Returns
321
+ -------
322
+ NDArray[numpy.float64]
323
+ The numbers kept, 1 elsewhere.
324
+
325
+ Examples
326
+ --------
327
+ >>> import numpy
328
+ >>> from numdaplot.arrays.creation.date_parts_values import keep_in_range
329
+ >>> keep_in_range(numpy.array([0.0, 5.0, 40.0]), numpy.array([False, False, False]), 31)
330
+ array([1., 5., 1.])
331
+ """
332
+ is_in_range = (part_numbers >= SAFE_PART) & (part_numbers <= last_value) & ~missing
333
+ kept_numbers = numpy.where(is_in_range, part_numbers, SAFE_PART)
334
+
335
+ return kept_numbers
336
+
337
+
338
+ def combine_parts(numbers: PartNumbers) -> NDArray[numpy.datetime64]:
339
+ """
340
+ Return the dates of whole parts, a day beyond the end of its month spilling over the next month.
341
+
342
+ .. versionadded:: 0.1.0
343
+
344
+ Parameters
345
+ ----------
346
+ numbers
347
+ Whole parts, each in its usual range.
348
+
349
+ Returns
350
+ -------
351
+ NDArray[numpy.datetime64]
352
+ The dates in ``datetime64[D]``: the 31st of February gives the 3rd of March, 2025.
353
+
354
+ Examples
355
+ --------
356
+ >>> import numpy
357
+ >>> from numdaplot.arrays.creation.date_parts_values import PartNumbers, combine_parts
358
+ >>> combine_parts(PartNumbers(numpy.array([2025.0]), numpy.array([2.0]), numpy.array([31.0])))
359
+ array(['2025-03-03'], dtype='datetime64[D]')
360
+ """
361
+ whole_years = numbers.years.astype(WHOLE_DTYPE)
362
+ whole_months = numbers.months.astype(WHOLE_DTYPE)
363
+ whole_days = numbers.days.astype(WHOLE_DTYPE)
364
+ years_since_epoch = whole_years - EPOCH_YEAR
365
+ year_starts = years_since_epoch.astype(YEAR_DTYPE)
366
+ month_steps = whole_months - FIRST_MONTH
367
+ month_offsets = month_steps.astype(MONTH_STEP_DTYPE)
368
+ month_starts = year_starts + month_offsets
369
+ month_start_days = month_starts.astype(DATE_DTYPE)
370
+ day_steps = whole_days - FIRST_DAY
371
+ day_offsets = day_steps.astype(DAY_STEP_DTYPE)
372
+ raw_dates = month_start_days + day_offsets
373
+ # Some versions of the numpy stubs lose the datetime type of a sum of datetimes and durations.
374
+ dates = cast(Any, raw_dates)
375
+
376
+ return dates
377
+
378
+
379
+ def require_real_dates(
380
+ numbers: PartNumbers, dates: NDArray[numpy.datetime64], missing: NDArray[numpy.bool_], year_part: Array
381
+ ) -> None:
382
+ """
383
+ Check that each computed date has the year, the month and the day it was built from.
384
+
385
+ A part outside its usual range, or a day beyond the end of its month, gives another date.
386
+
387
+ .. versionadded:: 0.1.0
388
+
389
+ Parameters
390
+ ----------
391
+ numbers
392
+ The whole parts, as given.
393
+ dates
394
+ The dates computed from the parts kept in their usual ranges.
395
+ missing
396
+ True where a part is missing.
397
+ year_part
398
+ The Array of the years, whose type the error names.
399
+
400
+ Raises
401
+ ------
402
+ ValueConversionError
403
+ At the first year, month and day that form no date.
404
+
405
+ Examples
406
+ --------
407
+ >>> import numpy
408
+ >>> import numdaplot as ndp
409
+ >>> from numdaplot.arrays.creation.date_parts_values import PartNumbers, combine_parts, require_real_dates
410
+ >>> numbers = PartNumbers(numpy.array([2025.0]), numpy.array([2.0]), numpy.array([31.0]))
411
+ >>> try:
412
+ ... require_real_dates(numbers, combine_parts(numbers), numpy.array([False]), ndp.Array.from_list([2025]))
413
+ ... except ndp.ValueConversionError as error:
414
+ ... print(error)
415
+ Cannot build a DATE from the year 2025, the month 2 and the day 31.
416
+ """
417
+ year_values = dates.astype(YEAR_DTYPE)
418
+ month_values = dates.astype(MONTH_DTYPE)
419
+ built_years = year_values.astype(WHOLE_DTYPE) + EPOCH_YEAR
420
+ month_counts = month_values.astype(WHOLE_DTYPE)
421
+ built_months = month_counts % MONTHS_PER_YEAR + FIRST_MONTH
422
+ day_steps = dates - month_values.astype(DATE_DTYPE)
423
+ built_days = day_steps.astype(WHOLE_DTYPE) + FIRST_DAY
424
+ same_years = (built_years == numbers.years) & (numbers.years >= FIRST_YEAR)
425
+ same_dates = same_years & (built_months == numbers.months) & (built_days == numbers.days)
426
+ is_rejected = ~same_dates & ~missing
427
+ has_rejected = bool(is_rejected.any())
428
+ if not has_rejected:
429
+ return
430
+
431
+ rejected_positions = numpy.flatnonzero(is_rejected)
432
+ first_position = int(rejected_positions[0])
433
+ first_year = int(numbers.years[first_position])
434
+ first_month = int(numbers.months[first_position])
435
+ first_day = int(numbers.days[first_position])
436
+ rejected_date = RejectedDate(first_year, first_month, first_day)
437
+ raise ValueConversionError(year_part.dtype.name, Type.DATE.name, rejected_date)
@@ -0,0 +1,54 @@
1
+ """
2
+ Base class of every random distribution.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from numdaplot.errors.refused_operation_error import RefusedOperationError
8
+
9
+ CONSTRUCTOR_OPERATION = "Creating a Distribution with ndp.Distribution()"
10
+ CONSTRUCTOR_ALTERNATIVE = "a distribution such as ndp.Uniform"
11
+
12
+
13
+ class Distribution:
14
+ """
15
+ Base class of every random distribution, the law followed by the values of ``Array.random``.
16
+
17
+ A distribution is immutable and checks its settings when it is created.
18
+
19
+ Only its subclasses are created: calling ``ndp.Distribution()`` raises ``RefusedOperationError``.
20
+
21
+ Every distribution, passed to ``Array.random``:
22
+
23
+ |Distribution|What it draws|Example|
24
+ |---|---|---|
25
+ |``Uniform``|Equally likely decimals from ``low`` to ``high``|``ndp.Uniform(low=0, high=10)``|
26
+ |``Normal``|Decimals around a mean, following a bell curve|``ndp.Normal(mean=0, deviation=1)``|
27
+ |``RandomIntegers``|Equally likely integers from ``low`` to ``high``|``ndp.RandomIntegers(low=1, high=6)``|
28
+
29
+ .. versionadded:: 0.1.0
30
+
31
+ Examples
32
+ --------
33
+ >>> import numdaplot as ndp
34
+ >>> shape = ndp.Shape([3])
35
+ >>> for distribution in [ndp.Uniform(low=0, high=10), ndp.RandomIntegers(low=0, high=10)]:
36
+ ... print(ndp.Array.random(distribution, shape=shape, seed=1))
37
+ Array([5.11821625, 9.50463696, 1.44159613], dtype=FLOAT64)
38
+ Array([5, 5, 8], dtype=INT64)
39
+ """
40
+
41
+ def __init__(self) -> None:
42
+ """
43
+ Refuse the creation of the base class itself, and let a subclass be created.
44
+
45
+ .. versionadded:: 0.1.0
46
+
47
+ Raises
48
+ ------
49
+ RefusedOperationError
50
+ When the created object is a Distribution and not one of its subclasses.
51
+ """
52
+ created_class = type(self)
53
+ if created_class is Distribution:
54
+ raise RefusedOperationError(CONSTRUCTOR_OPERATION, CONSTRUCTOR_ALTERNATIVE)
@@ -0,0 +1,58 @@
1
+ """
2
+ Values made of a single repeated value.
3
+
4
+ .. versionadded:: 0.1.0
5
+ """
6
+
7
+ from typing import Any
8
+
9
+ import numpy
10
+ from numpy.typing import NDArray
11
+
12
+ from numdaplot.arrays.creation.list_conversion import convert_list
13
+ from numdaplot.arrays.shape import Shape
14
+ from numdaplot.data_types.type import Type
15
+ from numdaplot.rules.rule_values import ScalarValue
16
+
17
+
18
+ def build_filled_values(shape: Shape, value: ScalarValue, dtype: Type | None) -> NDArray[Any]:
19
+ """
20
+ Return numpy values of a shape, all equal to one value.
21
+
22
+ .. versionadded:: 0.1.0
23
+
24
+ Parameters
25
+ ----------
26
+ shape
27
+ The shape of the result.
28
+ value
29
+ The repeated value.
30
+ dtype
31
+ The type to store the value as, guessed from the value when ``None``.
32
+
33
+ Returns
34
+ -------
35
+ NDArray
36
+ The filled values.
37
+
38
+ Raises
39
+ ------
40
+ ValueConversionError
41
+ When the value cannot be stored as ``dtype`` without losing information.
42
+ TimeOverflowError
43
+ When a value stored as ``DATETIME`` or ``DURATION`` is outside the range of nanoseconds.
44
+
45
+ Examples
46
+ --------
47
+ >>> import numdaplot as ndp
48
+ >>> from numdaplot.arrays.creation.filled_values import build_filled_values
49
+ >>> build_filled_values(ndp.Shape([2, 3]), 0, None)
50
+ array([[0, 0, 0],
51
+ [0, 0, 0]])
52
+ """
53
+ single_value_list = list[object]([value])
54
+ stored_value = convert_list(single_value_list, dtype)
55
+ single_stored_value = stored_value[0]
56
+ filled_values = numpy.full(shape.dimensions, single_stored_value, dtype=stored_value.dtype)
57
+
58
+ return filled_values