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.
- numdaplot/__init__.py +506 -0
- numdaplot/arrays/__init__.py +5 -0
- numdaplot/arrays/array.py +92 -0
- numdaplot/arrays/array_arithmetic.py +404 -0
- numdaplot/arrays/array_calculation.py +143 -0
- numdaplot/arrays/array_conversion.py +150 -0
- numdaplot/arrays/array_creation.py +371 -0
- numdaplot/arrays/array_data.py +281 -0
- numdaplot/arrays/array_layout.py +179 -0
- numdaplot/arrays/array_logic.py +227 -0
- numdaplot/arrays/array_reflected_arithmetic.py +334 -0
- numdaplot/arrays/array_refusals.py +339 -0
- numdaplot/arrays/array_selection.py +195 -0
- numdaplot/arrays/array_sorting.py +59 -0
- numdaplot/arrays/axis_number.py +58 -0
- numdaplot/arrays/calculation/__init__.py +5 -0
- numdaplot/arrays/calculation/counting_statistics.py +325 -0
- numdaplot/arrays/calculation/location_statistics.py +268 -0
- numdaplot/arrays/calculation/math_function_values.py +183 -0
- numdaplot/arrays/calculation/statistic_values.py +209 -0
- numdaplot/arrays/calculation/time_function_values.py +419 -0
- numdaplot/arrays/conversion/__init__.py +5 -0
- numdaplot/arrays/conversion/array_text.py +62 -0
- numdaplot/arrays/conversion/equality_check.py +72 -0
- numdaplot/arrays/conversion/python_values.py +70 -0
- numdaplot/arrays/conversion/time_text.py +290 -0
- numdaplot/arrays/creation/__init__.py +5 -0
- numdaplot/arrays/creation/date_parts.py +89 -0
- numdaplot/arrays/creation/date_parts_values.py +437 -0
- numdaplot/arrays/creation/distribution.py +54 -0
- numdaplot/arrays/creation/filled_values.py +58 -0
- numdaplot/arrays/creation/list_conversion.py +311 -0
- numdaplot/arrays/creation/list_shape.py +97 -0
- numdaplot/arrays/creation/normal.py +65 -0
- numdaplot/arrays/creation/numpy_conversion.py +149 -0
- numdaplot/arrays/creation/random_integers.py +104 -0
- numdaplot/arrays/creation/random_values.py +97 -0
- numdaplot/arrays/creation/range_values.py +73 -0
- numdaplot/arrays/creation/spacing.py +84 -0
- numdaplot/arrays/creation/spacing_values.py +63 -0
- numdaplot/arrays/creation/uniform.py +63 -0
- numdaplot/arrays/equality.py +68 -0
- numdaplot/arrays/layout/__init__.py +5 -0
- numdaplot/arrays/layout/sorting_values.py +113 -0
- numdaplot/arrays/layout/unique_values.py +49 -0
- numdaplot/arrays/mapping/__init__.py +5 -0
- numdaplot/arrays/mapping/mapped_values.py +286 -0
- numdaplot/arrays/mapping/unmatched.py +50 -0
- numdaplot/arrays/mapping/value_change.py +55 -0
- numdaplot/arrays/mapping/value_mapping.py +161 -0
- numdaplot/arrays/math_functions/__init__.py +5 -0
- numdaplot/arrays/math_functions/absolute.py +27 -0
- numdaplot/arrays/math_functions/cosine.py +28 -0
- numdaplot/arrays/math_functions/exponential.py +27 -0
- numdaplot/arrays/math_functions/logarithm.py +72 -0
- numdaplot/arrays/math_functions/math_function.py +58 -0
- numdaplot/arrays/math_functions/round.py +58 -0
- numdaplot/arrays/math_functions/sine.py +28 -0
- numdaplot/arrays/math_functions/square_root.py +27 -0
- numdaplot/arrays/operations/__init__.py +5 -0
- numdaplot/arrays/operations/boolean_operands.py +48 -0
- numdaplot/arrays/operations/combination.py +157 -0
- numdaplot/arrays/operations/float_errors.py +170 -0
- numdaplot/arrays/operations/integer_bounds.py +175 -0
- numdaplot/arrays/operations/integer_rules.py +397 -0
- numdaplot/arrays/operations/operand.py +139 -0
- numdaplot/arrays/operations/time_arithmetic.py +479 -0
- numdaplot/arrays/operations/time_bounds.py +286 -0
- numdaplot/arrays/operations/time_result_bounds.py +397 -0
- numdaplot/arrays/operations/transformation.py +54 -0
- numdaplot/arrays/operations/type_requirements.py +94 -0
- numdaplot/arrays/replacement.py +66 -0
- numdaplot/arrays/selection/__init__.py +5 -0
- numdaplot/arrays/selection/comparison_masks.py +131 -0
- numdaplot/arrays/selection/membership_masks.py +118 -0
- numdaplot/arrays/selection/missing_mask.py +50 -0
- numdaplot/arrays/selection/region_index.py +178 -0
- numdaplot/arrays/selection/replaced_values.py +120 -0
- numdaplot/arrays/selection/rule_mask.py +83 -0
- numdaplot/arrays/selection/time_reference.py +172 -0
- numdaplot/arrays/shape.py +74 -0
- numdaplot/arrays/type_match.py +51 -0
- numdaplot/data_types/__init__.py +5 -0
- numdaplot/data_types/library.py +57 -0
- numdaplot/data_types/numpy_mapping.py +207 -0
- numdaplot/data_types/pandas_mapping.py +114 -0
- numdaplot/data_types/time_of_day.py +292 -0
- numdaplot/data_types/type.py +224 -0
- numdaplot/data_types/value_family.py +149 -0
- numdaplot/data_types/value_type.py +147 -0
- numdaplot/dates/__init__.py +5 -0
- numdaplot/dates/custom_date_format.py +83 -0
- numdaplot/dates/date_format.py +120 -0
- numdaplot/dates/date_part.py +59 -0
- numdaplot/dates/date_part_unit.py +153 -0
- numdaplot/dates/date_period.py +57 -0
- numdaplot/dates/duration_in.py +58 -0
- numdaplot/dates/duration_unit.py +90 -0
- numdaplot/dates/period_unit.py +101 -0
- numdaplot/dates/time_function.py +56 -0
- numdaplot/dates/time_zone.py +68 -0
- numdaplot/dates/time_zone_change.py +71 -0
- numdaplot/dates/time_zone_mode.py +81 -0
- numdaplot/dates/to_duration.py +58 -0
- numdaplot/errors/__init__.py +7 -0
- numdaplot/errors/broadcast_warning.py +36 -0
- numdaplot/errors/calculation_warning.py +35 -0
- numdaplot/errors/cell_out_of_range_error.py +77 -0
- numdaplot/errors/column_not_found_error.py +64 -0
- numdaplot/errors/conflicting_settings_error.py +60 -0
- numdaplot/errors/dimension_error.py +62 -0
- numdaplot/errors/display_warning.py +32 -0
- numdaplot/errors/duplicate_column_error.py +82 -0
- numdaplot/errors/duplicate_label_error.py +55 -0
- numdaplot/errors/duplicate_statistic_error.py +55 -0
- numdaplot/errors/duplicate_value_error.py +54 -0
- numdaplot/errors/empty_array_error.py +55 -0
- numdaplot/errors/empty_list_error.py +52 -0
- numdaplot/errors/empty_region_error.py +34 -0
- numdaplot/errors/empty_text_error.py +34 -0
- numdaplot/errors/empty_total_error.py +62 -0
- numdaplot/errors/empty_values_error.py +34 -0
- numdaplot/errors/file_access_error.py +70 -0
- numdaplot/errors/file_exists_error.py +62 -0
- numdaplot/errors/file_not_found_error.py +56 -0
- numdaplot/errors/incompatible_charts_error.py +80 -0
- numdaplot/errors/incompatible_types_error.py +104 -0
- numdaplot/errors/integer_overflow_error.py +61 -0
- numdaplot/errors/invalid_base_error.py +52 -0
- numdaplot/errors/invalid_bin_width_error.py +66 -0
- numdaplot/errors/invalid_bounds_error.py +58 -0
- numdaplot/errors/invalid_chart_data_error.py +81 -0
- numdaplot/errors/invalid_color_count_error.py +63 -0
- numdaplot/errors/invalid_color_error.py +51 -0
- numdaplot/errors/invalid_column_name_error.py +52 -0
- numdaplot/errors/invalid_conversion_error.py +119 -0
- numdaplot/errors/invalid_count_error.py +61 -0
- numdaplot/errors/invalid_date_format_error.py +51 -0
- numdaplot/errors/invalid_deviation_error.py +52 -0
- numdaplot/errors/invalid_fraction_error.py +51 -0
- numdaplot/errors/invalid_label_count_error.py +61 -0
- numdaplot/errors/invalid_limits_error.py +111 -0
- numdaplot/errors/invalid_opacity_error.py +52 -0
- numdaplot/errors/invalid_point_size_error.py +52 -0
- numdaplot/errors/invalid_position_error.py +106 -0
- numdaplot/errors/invalid_resolution_error.py +51 -0
- numdaplot/errors/invalid_rotation_error.py +53 -0
- numdaplot/errors/invalid_seed_error.py +53 -0
- numdaplot/errors/invalid_separator_error.py +52 -0
- numdaplot/errors/invalid_shape_error.py +52 -0
- numdaplot/errors/invalid_sheet_name_error.py +54 -0
- numdaplot/errors/invalid_size_error.py +58 -0
- numdaplot/errors/invalid_step_error.py +77 -0
- numdaplot/errors/invalid_suffixes_error.py +61 -0
- numdaplot/errors/invalid_time_zone_change_error.py +63 -0
- numdaplot/errors/invalid_type_error.py +79 -0
- numdaplot/errors/irregular_list_error.py +36 -0
- numdaplot/errors/join_relation_error.py +183 -0
- numdaplot/errors/missing_dependency_error.py +58 -0
- numdaplot/errors/missing_type_error.py +36 -0
- numdaplot/errors/missing_value_error.py +62 -0
- numdaplot/errors/not_single_value_error.py +53 -0
- numdaplot/errors/numdaplot_error.py +25 -0
- numdaplot/errors/numdaplot_warning.py +34 -0
- numdaplot/errors/occupied_cell_error.py +63 -0
- numdaplot/errors/out_of_domain_error.py +70 -0
- numdaplot/errors/readability_warning.py +35 -0
- numdaplot/errors/refused_operation_error.py +64 -0
- numdaplot/errors/refused_setting_error.py +60 -0
- numdaplot/errors/rejected_dates.py +60 -0
- numdaplot/errors/repeated_key.py +36 -0
- numdaplot/errors/shape_mismatch_error.py +67 -0
- numdaplot/errors/time_overflow_error.py +131 -0
- numdaplot/errors/time_zone_mismatch_error.py +83 -0
- numdaplot/errors/unknown_time_zone_error.py +51 -0
- numdaplot/errors/unmatched_value_error.py +81 -0
- numdaplot/errors/unsupported_image_format_error.py +56 -0
- numdaplot/errors/unsupported_index_error.py +38 -0
- numdaplot/errors/unsupported_missing_error.py +129 -0
- numdaplot/errors/unsupported_type_error.py +62 -0
- numdaplot/errors/value_conversion_error.py +215 -0
- numdaplot/ordering/__init__.py +5 -0
- numdaplot/ordering/missing_position.py +46 -0
- numdaplot/ordering/order.py +46 -0
- numdaplot/package_version.py +36 -0
- numdaplot/plots/__init__.py +5 -0
- numdaplot/plots/chart_layer.py +47 -0
- numdaplot/plots/charts/__init__.py +5 -0
- numdaplot/plots/charts/bar_chart.py +98 -0
- numdaplot/plots/charts/bar_layout.py +58 -0
- numdaplot/plots/charts/bin_count.py +61 -0
- numdaplot/plots/charts/bin_width.py +78 -0
- numdaplot/plots/charts/box_chart.py +97 -0
- numdaplot/plots/charts/cell_values.py +61 -0
- numdaplot/plots/charts/chart.py +59 -0
- numdaplot/plots/charts/chart_settings.py +105 -0
- numdaplot/plots/charts/color_scale.py +147 -0
- numdaplot/plots/charts/heatmap_chart.py +92 -0
- numdaplot/plots/charts/histogram_chart.py +93 -0
- numdaplot/plots/charts/line_chart.py +100 -0
- numdaplot/plots/charts/line_type.py +75 -0
- numdaplot/plots/charts/marker_shape.py +113 -0
- numdaplot/plots/charts/missing_chart.py +60 -0
- numdaplot/plots/charts/missing_map_chart.py +27 -0
- numdaplot/plots/charts/orientation.py +58 -0
- numdaplot/plots/charts/outliers.py +49 -0
- numdaplot/plots/charts/percentages.py +55 -0
- numdaplot/plots/charts/pie_chart.py +87 -0
- numdaplot/plots/charts/scatter_chart.py +159 -0
- numdaplot/plots/charts/value_axis.py +66 -0
- numdaplot/plots/data/__init__.py +5 -0
- numdaplot/plots/data/array_values.py +128 -0
- numdaplot/plots/data/chart_data.py +143 -0
- numdaplot/plots/data/chart_values.py +109 -0
- numdaplot/plots/data/column_reading.py +468 -0
- numdaplot/plots/data/heatmap_values.py +63 -0
- numdaplot/plots/data/missing_cells.py +165 -0
- numdaplot/plots/data/pie_values.py +215 -0
- numdaplot/plots/data/point_values.py +249 -0
- numdaplot/plots/data/position_kind.py +83 -0
- numdaplot/plots/data/renamed_layers.py +340 -0
- numdaplot/plots/data/sample_values.py +160 -0
- numdaplot/plots/data/shown_columns.py +248 -0
- numdaplot/plots/data/table_values.py +256 -0
- numdaplot/plots/data/unique_labels.py +45 -0
- numdaplot/plots/drawing/__init__.py +5 -0
- numdaplot/plots/drawing/bar_drawing.py +316 -0
- numdaplot/plots/drawing/box_drawing.py +344 -0
- numdaplot/plots/drawing/cell_merging.py +237 -0
- numdaplot/plots/drawing/chart_texts.py +124 -0
- numdaplot/plots/drawing/color_bar.py +57 -0
- numdaplot/plots/drawing/color_scale_values.py +120 -0
- numdaplot/plots/drawing/default_labels.py +41 -0
- numdaplot/plots/drawing/drawn_chart.py +50 -0
- numdaplot/plots/drawing/grid_axes.py +75 -0
- numdaplot/plots/drawing/heatmap_drawing.py +313 -0
- numdaplot/plots/drawing/histogram_drawing.py +350 -0
- numdaplot/plots/drawing/label_room.py +344 -0
- numdaplot/plots/drawing/label_thinning.py +216 -0
- numdaplot/plots/drawing/layer_alignment.py +319 -0
- numdaplot/plots/drawing/layer_colors.py +123 -0
- numdaplot/plots/drawing/line_drawing.py +85 -0
- numdaplot/plots/drawing/marker_codes.py +20 -0
- numdaplot/plots/drawing/missing_drawing.py +360 -0
- numdaplot/plots/drawing/moment_period_formatter.py +253 -0
- numdaplot/plots/drawing/pie_drawing.py +185 -0
- numdaplot/plots/drawing/plot_axes.py +38 -0
- numdaplot/plots/drawing/plot_drawing.py +288 -0
- numdaplot/plots/drawing/plot_theme.py +45 -0
- numdaplot/plots/drawing/position_axis.py +278 -0
- numdaplot/plots/drawing/scatter_drawing.py +364 -0
- numdaplot/plots/drawing/series_colors.py +177 -0
- numdaplot/plots/drawing/size_inches.py +45 -0
- numdaplot/plots/drawing/style_drawing.py +410 -0
- numdaplot/plots/drawing/text_contrast.py +44 -0
- numdaplot/plots/drawing/tick_rotation.py +354 -0
- numdaplot/plots/drawing/time_axis.py +212 -0
- numdaplot/plots/drawing/whole_numbers.py +72 -0
- numdaplot/plots/figure/__init__.py +5 -0
- numdaplot/plots/figure/cell.py +95 -0
- numdaplot/plots/figure/figure.py +256 -0
- numdaplot/plots/figure/figure_drawing.py +99 -0
- numdaplot/plots/figure/figure_style.py +60 -0
- numdaplot/plots/figure/layout.py +71 -0
- numdaplot/plots/figure/placement.py +150 -0
- numdaplot/plots/layer_reading.py +166 -0
- numdaplot/plots/output/__init__.py +5 -0
- numdaplot/plots/output/image_saving.py +187 -0
- numdaplot/plots/output/plot_display.py +181 -0
- numdaplot/plots/output/shown_object.py +45 -0
- numdaplot/plots/overlay_checks.py +245 -0
- numdaplot/plots/plot.py +31 -0
- numdaplot/plots/plot_data.py +140 -0
- numdaplot/plots/plot_distribution_creation.py +237 -0
- numdaplot/plots/plot_output.py +124 -0
- numdaplot/plots/plot_overlays.py +273 -0
- numdaplot/plots/plot_overview_creation.py +195 -0
- numdaplot/plots/plot_series_creation.py +213 -0
- numdaplot/plots/style/__init__.py +5 -0
- numdaplot/plots/style/axis_settings.py +60 -0
- numdaplot/plots/style/color.py +168 -0
- numdaplot/plots/style/custom_color.py +65 -0
- numdaplot/plots/style/grid_lines.py +49 -0
- numdaplot/plots/style/image_options.py +71 -0
- numdaplot/plots/style/legend_position.py +149 -0
- numdaplot/plots/style/plot_style.py +136 -0
- numdaplot/plots/style/size.py +70 -0
- numdaplot/plots/style/size_unit.py +62 -0
- numdaplot/positions/__init__.py +5 -0
- numdaplot/positions/axis.py +54 -0
- numdaplot/positions/index.py +51 -0
- numdaplot/positions/range.py +90 -0
- numdaplot/positions/region.py +92 -0
- numdaplot/py.typed +0 -0
- numdaplot/ratios/__init__.py +5 -0
- numdaplot/ratios/fraction.py +40 -0
- numdaplot/ratios/measure.py +48 -0
- numdaplot/rules/__init__.py +5 -0
- numdaplot/rules/between.py +78 -0
- numdaplot/rules/bounds.py +83 -0
- numdaplot/rules/case.py +48 -0
- numdaplot/rules/contains.py +63 -0
- numdaplot/rules/equal.py +43 -0
- numdaplot/rules/greater.py +39 -0
- numdaplot/rules/greater_or_equal.py +38 -0
- numdaplot/rules/is_in.py +67 -0
- numdaplot/rules/is_missing.py +25 -0
- numdaplot/rules/is_present.py +25 -0
- numdaplot/rules/less.py +39 -0
- numdaplot/rules/less_or_equal.py +38 -0
- numdaplot/rules/not_equal.py +45 -0
- numdaplot/rules/rule.py +62 -0
- numdaplot/rules/rule_values.py +44 -0
- numdaplot/rules/value_rule.py +110 -0
- numdaplot/settings/__init__.py +5 -0
- numdaplot/settings/argument_types.py +327 -0
- numdaplot/settings/field_types.py +593 -0
- numdaplot/statistics/__init__.py +5 -0
- numdaplot/statistics/count.py +71 -0
- numdaplot/statistics/count_distinct.py +27 -0
- numdaplot/statistics/counted_missing.py +46 -0
- numdaplot/statistics/maximum.py +27 -0
- numdaplot/statistics/mean.py +27 -0
- numdaplot/statistics/median.py +27 -0
- numdaplot/statistics/minimum.py +27 -0
- numdaplot/statistics/most_frequent.py +27 -0
- numdaplot/statistics/most_frequent_count.py +27 -0
- numdaplot/statistics/quantile.py +61 -0
- numdaplot/statistics/standard_deviation.py +29 -0
- numdaplot/statistics/statistic.py +63 -0
- numdaplot/statistics/sum.py +27 -0
- numdaplot/tables/__init__.py +5 -0
- numdaplot/tables/aggregation/__init__.py +5 -0
- numdaplot/tables/aggregation/aggregated_frame.py +189 -0
- numdaplot/tables/aggregation/aggregation.py +97 -0
- numdaplot/tables/aggregation/calculation.py +123 -0
- numdaplot/tables/aggregation/result_column.py +108 -0
- numdaplot/tables/aggregation/row_groups.py +96 -0
- numdaplot/tables/aggregation/statistic_name.py +122 -0
- numdaplot/tables/columns/__init__.py +5 -0
- numdaplot/tables/columns/added_column.py +89 -0
- numdaplot/tables/columns/boolean_conversion.py +144 -0
- numdaplot/tables/columns/boolean_rule.py +59 -0
- numdaplot/tables/columns/bracket_end.py +50 -0
- numdaplot/tables/columns/bracket_names.py +346 -0
- numdaplot/tables/columns/bracketed_column.py +179 -0
- numdaplot/tables/columns/brackets.py +234 -0
- numdaplot/tables/columns/chosen_columns.py +55 -0
- numdaplot/tables/columns/column_choice.py +84 -0
- numdaplot/tables/columns/column_mode.py +64 -0
- numdaplot/tables/columns/column_names.py +186 -0
- numdaplot/tables/columns/conversion.py +103 -0
- numdaplot/tables/columns/converted_column.py +669 -0
- numdaplot/tables/columns/date_conversion.py +526 -0
- numdaplot/tables/columns/date_range.py +135 -0
- numdaplot/tables/columns/name_change.py +67 -0
- numdaplot/tables/columns/new_column.py +79 -0
- numdaplot/tables/columns/number_conversion.py +281 -0
- numdaplot/tables/columns/renamed_columns.py +60 -0
- numdaplot/tables/columns/renaming.py +81 -0
- numdaplot/tables/columns/text_conversion.py +70 -0
- numdaplot/tables/columns/time_conversion.py +313 -0
- numdaplot/tables/columns/time_zone_conversion.py +128 -0
- numdaplot/tables/conflict.py +68 -0
- numdaplot/tables/description/__init__.py +5 -0
- numdaplot/tables/description/described_frame.py +335 -0
- numdaplot/tables/description/description.py +155 -0
- numdaplot/tables/duplicates/__init__.py +5 -0
- numdaplot/tables/duplicates/deduplicated_frame.py +66 -0
- numdaplot/tables/duplicates/deduplication.py +88 -0
- numdaplot/tables/duplicates/keep.py +81 -0
- numdaplot/tables/files/__init__.py +5 -0
- numdaplot/tables/files/column_names.py +60 -0
- numdaplot/tables/files/csv_file.py +265 -0
- numdaplot/tables/files/csv_read_options.py +89 -0
- numdaplot/tables/files/csv_separator.py +41 -0
- numdaplot/tables/files/csv_write_options.py +79 -0
- numdaplot/tables/files/decimal_count.py +42 -0
- numdaplot/tables/files/encoding.py +82 -0
- numdaplot/tables/files/excel_file.py +171 -0
- numdaplot/tables/files/excel_read_options.py +79 -0
- numdaplot/tables/files/excel_sheet.py +50 -0
- numdaplot/tables/files/excel_time_cells.py +146 -0
- numdaplot/tables/files/excel_write_options.py +63 -0
- numdaplot/tables/files/file_access.py +152 -0
- numdaplot/tables/files/file_paths.py +106 -0
- numdaplot/tables/files/json_decimals.py +387 -0
- numdaplot/tables/files/json_file.py +203 -0
- numdaplot/tables/files/json_layout.py +63 -0
- numdaplot/tables/files/json_read_options.py +64 -0
- numdaplot/tables/files/json_write_options.py +71 -0
- numdaplot/tables/files/missing_texts.py +63 -0
- numdaplot/tables/files/optional_package.py +42 -0
- numdaplot/tables/files/pandas_backend.py +11 -0
- numdaplot/tables/files/parquet_file.py +91 -0
- numdaplot/tables/files/parquet_read_options.py +56 -0
- numdaplot/tables/files/sas_file.py +94 -0
- numdaplot/tables/files/sas_read_options.py +67 -0
- numdaplot/tables/files/stata_file.py +83 -0
- numdaplot/tables/files/stata_read_options.py +56 -0
- numdaplot/tables/files/xpt_read_options.py +65 -0
- numdaplot/tables/filtering/__init__.py +5 -0
- numdaplot/tables/filtering/checked_frame.py +60 -0
- numdaplot/tables/filtering/column_mask.py +71 -0
- numdaplot/tables/filtering/column_match.py +62 -0
- numdaplot/tables/filtering/condition.py +94 -0
- numdaplot/tables/filtering/filter.py +74 -0
- numdaplot/tables/filtering/filter_mode.py +67 -0
- numdaplot/tables/filtering/row_mask.py +152 -0
- numdaplot/tables/filtering/rule_moments.py +164 -0
- numdaplot/tables/frames/__init__.py +5 -0
- numdaplot/tables/frames/array_frame.py +95 -0
- numdaplot/tables/frames/cleaned_names.py +132 -0
- numdaplot/tables/frames/column.py +15 -0
- numdaplot/tables/frames/column_values.py +273 -0
- numdaplot/tables/frames/frame_equality.py +130 -0
- numdaplot/tables/frames/frame_normalization.py +459 -0
- numdaplot/tables/frames/named_column_errors.py +85 -0
- numdaplot/tables/frames/pandas_decimals.py +113 -0
- numdaplot/tables/frames/region_positions.py +113 -0
- numdaplot/tables/frames/table_text.py +222 -0
- numdaplot/tables/frames/time_columns.py +345 -0
- numdaplot/tables/frames/time_range_errors.py +117 -0
- numdaplot/tables/frames/time_zones.py +271 -0
- numdaplot/tables/joining/__init__.py +5 -0
- numdaplot/tables/joining/join.py +110 -0
- numdaplot/tables/joining/join_keys.py +367 -0
- numdaplot/tables/joining/join_mode.py +93 -0
- numdaplot/tables/joining/join_relation.py +149 -0
- numdaplot/tables/joining/join_suffixes.py +71 -0
- numdaplot/tables/joining/joined_frame.py +166 -0
- numdaplot/tables/joining/joined_names.py +107 -0
- numdaplot/tables/joining/joined_rows.py +235 -0
- numdaplot/tables/joining/key_types.py +57 -0
- numdaplot/tables/joining/relation.py +78 -0
- numdaplot/tables/missing/__init__.py +5 -0
- numdaplot/tables/missing/missing_count.py +59 -0
- numdaplot/tables/missing/missing_counts.py +214 -0
- numdaplot/tables/missing/missing_drop.py +98 -0
- numdaplot/tables/missing/missing_mode.py +63 -0
- numdaplot/tables/missing/missing_ratio.py +71 -0
- numdaplot/tables/missing/missing_removal.py +257 -0
- numdaplot/tables/missing/missing_summary.py +174 -0
- numdaplot/tables/missing/ratio_comparison.py +70 -0
- numdaplot/tables/pivot/__init__.py +5 -0
- numdaplot/tables/pivot/pivot_table.py +104 -0
- numdaplot/tables/pivot/pivoted_frame.py +244 -0
- numdaplot/tables/preview/__init__.py +5 -0
- numdaplot/tables/preview/notebook_display.py +238 -0
- numdaplot/tables/preview/preview.py +100 -0
- numdaplot/tables/preview/preview_rows.py +55 -0
- numdaplot/tables/preview/shown_columns.py +62 -0
- numdaplot/tables/preview/side.py +82 -0
- numdaplot/tables/sorting/__init__.py +5 -0
- numdaplot/tables/sorting/sort_key.py +71 -0
- numdaplot/tables/sorting/sorted_frame.py +81 -0
- numdaplot/tables/sorting/sorting.py +82 -0
- numdaplot/tables/table.py +71 -0
- numdaplot/tables/table_calculation.py +172 -0
- numdaplot/tables/table_columns.py +214 -0
- numdaplot/tables/table_conversion.py +351 -0
- numdaplot/tables/table_data.py +321 -0
- numdaplot/tables/table_display.py +56 -0
- numdaplot/tables/table_joining.py +80 -0
- numdaplot/tables/table_layout.py +105 -0
- numdaplot/tables/table_missing.py +146 -0
- numdaplot/tables/table_reading.py +451 -0
- numdaplot/tables/table_refusals.py +295 -0
- numdaplot/tables/table_selection.py +163 -0
- numdaplot/tables/table_writing.py +269 -0
- numdaplot-0.1.0.dist-info/METADATA +176 -0
- numdaplot-0.1.0.dist-info/RECORD +474 -0
- numdaplot-0.1.0.dist-info/WHEEL +4 -0
- numdaplot-0.1.0.dist-info/licenses/LICENSE +28 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Ways to create an Array.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from collections.abc import Sequence
|
|
8
|
+
from typing import Any, Self
|
|
9
|
+
|
|
10
|
+
import numpy.typing
|
|
11
|
+
|
|
12
|
+
from numdaplot.arrays.array_data import ArrayData
|
|
13
|
+
from numdaplot.arrays.creation.date_parts import DateParts
|
|
14
|
+
from numdaplot.arrays.creation.date_parts_values import build_dates
|
|
15
|
+
from numdaplot.arrays.creation.filled_values import build_filled_values
|
|
16
|
+
from numdaplot.arrays.creation.list_conversion import convert_list
|
|
17
|
+
from numdaplot.arrays.creation.normal import Normal
|
|
18
|
+
from numdaplot.arrays.creation.numpy_conversion import copy_numpy_values
|
|
19
|
+
from numdaplot.arrays.creation.random_integers import RandomIntegers
|
|
20
|
+
from numdaplot.arrays.creation.random_values import draw_random_values
|
|
21
|
+
from numdaplot.arrays.creation.range_values import compute_range_values
|
|
22
|
+
from numdaplot.arrays.creation.spacing import Spacing
|
|
23
|
+
from numdaplot.arrays.creation.spacing_values import compute_spacing_values
|
|
24
|
+
from numdaplot.arrays.creation.uniform import Uniform
|
|
25
|
+
from numdaplot.arrays.shape import Shape
|
|
26
|
+
from numdaplot.data_types.type import Type
|
|
27
|
+
from numdaplot.positions.range import Range
|
|
28
|
+
from numdaplot.rules.rule_values import ScalarValue
|
|
29
|
+
from numdaplot.settings.argument_types import checked_arguments
|
|
30
|
+
|
|
31
|
+
type ListValue = ScalarValue | None
|
|
32
|
+
"""
|
|
33
|
+
A single value of a list given to ``Array.from_list``: a ``ScalarValue``, or ``None`` for a missing value.
|
|
34
|
+
|
|
35
|
+
It is a name used by the documentation and the annotations, not an object to create: pass the value itself,
|
|
36
|
+
such as ``10``, ``"Paris"`` or ``None``.
|
|
37
|
+
|
|
38
|
+
.. versionadded:: 0.1.0
|
|
39
|
+
|
|
40
|
+
Examples
|
|
41
|
+
--------
|
|
42
|
+
>>> import numdaplot as ndp
|
|
43
|
+
>>> ndp.Array.from_list([1.5, None])
|
|
44
|
+
Array([1.5, nan], dtype=FLOAT64)
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
type NestedValues = Sequence[ListValue] | Sequence[NestedValues]
|
|
48
|
+
"""
|
|
49
|
+
A list of ``ListValue``, or a list of lists nested to any depth, as ``Array.from_list`` reads it.
|
|
50
|
+
|
|
51
|
+
It is a name used by the documentation and the annotations, not an object to create: pass the value itself,
|
|
52
|
+
such as ``[1, 2, 3]``, ``["Paris", "Lyon"]`` or ``[[1, 2], [3, 4]]``.
|
|
53
|
+
|
|
54
|
+
.. versionadded:: 0.1.0
|
|
55
|
+
|
|
56
|
+
Examples
|
|
57
|
+
--------
|
|
58
|
+
>>> import numdaplot as ndp
|
|
59
|
+
>>> ndp.Array.from_list([[1, 2], [3, 4]]).shape
|
|
60
|
+
Shape(dimensions=[2, 2])
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class ArrayCreation(ArrayData):
|
|
65
|
+
"""
|
|
66
|
+
Ways to create an Array.
|
|
67
|
+
|
|
68
|
+
From a list, from numpy, filled with one value, from a range, from a spacing, or drawn at random.
|
|
69
|
+
|
|
70
|
+
.. versionadded:: 0.1.0
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
@classmethod
|
|
74
|
+
@checked_arguments
|
|
75
|
+
def from_list(cls, values: NestedValues, dtype: Type | None = None) -> Self:
|
|
76
|
+
"""
|
|
77
|
+
Create an Array from a Python list, or from nested lists for several dimensions.
|
|
78
|
+
|
|
79
|
+
The type is guessed when omitted: integers give ``INT64``, decimals or a mix of integers and
|
|
80
|
+
decimals give ``FLOAT64``, then ``BOOL``, ``TEXT``, ``DATE``, ``DATETIME`` and ``DURATION``.
|
|
81
|
+
``None`` is a missing value, only accepted for decimals, texts, dates, datetimes and durations.
|
|
82
|
+
|
|
83
|
+
.. versionadded:: 0.1.0
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
values
|
|
88
|
+
The values, a ``NestedValues`` such as ``[1, 2, 3]``, ``["Paris", None]`` or ``[[1, 2], [3, 4]]``.
|
|
89
|
+
Nested lists must form a regular block.
|
|
90
|
+
dtype
|
|
91
|
+
The type to store the values as, guessed from the values when omitted. Required when no value is present.
|
|
92
|
+
|
|
93
|
+
Returns
|
|
94
|
+
-------
|
|
95
|
+
Self
|
|
96
|
+
A new Array.
|
|
97
|
+
|
|
98
|
+
Raises
|
|
99
|
+
------
|
|
100
|
+
InvalidTypeError
|
|
101
|
+
When an argument is not of the type its annotation names.
|
|
102
|
+
IrregularListError
|
|
103
|
+
When nested lists do not form a regular block.
|
|
104
|
+
IncompatibleTypesError
|
|
105
|
+
When the values mix several kinds of types, such as numbers and texts.
|
|
106
|
+
MissingTypeError
|
|
107
|
+
When ``dtype`` is omitted and no value is present.
|
|
108
|
+
UnsupportedMissingError
|
|
109
|
+
When a value is missing and the type cannot hold missing values.
|
|
110
|
+
ValueConversionError
|
|
111
|
+
When the values cannot be stored as ``dtype`` without losing information.
|
|
112
|
+
TimeOverflowError
|
|
113
|
+
When a datetime is outside 1677 to 2262, or a duration beyond about 292 years.
|
|
114
|
+
UnsupportedTypeError
|
|
115
|
+
When a value has no numdaplot type, or ``dtype`` is ``CATEGORY``.
|
|
116
|
+
|
|
117
|
+
Examples
|
|
118
|
+
--------
|
|
119
|
+
>>> import numdaplot as ndp
|
|
120
|
+
>>> ndp.Array.from_list([[1, 2], [3, None]], dtype=ndp.Type.FLOAT64)
|
|
121
|
+
Array([[ 1., 2.],
|
|
122
|
+
[ 3., nan]], dtype=FLOAT64)
|
|
123
|
+
"""
|
|
124
|
+
value_list = list[object](values)
|
|
125
|
+
converted_values = convert_list(value_list, dtype)
|
|
126
|
+
created_array = cls._create(converted_values)
|
|
127
|
+
|
|
128
|
+
return created_array
|
|
129
|
+
|
|
130
|
+
@classmethod
|
|
131
|
+
@checked_arguments
|
|
132
|
+
def from_numpy(cls, values: numpy.typing.NDArray[Any]) -> Self:
|
|
133
|
+
"""
|
|
134
|
+
Create an Array from a copy of a numpy array; changing the numpy array never changes the Array.
|
|
135
|
+
|
|
136
|
+
.. versionadded:: 0.1.0
|
|
137
|
+
|
|
138
|
+
Parameters
|
|
139
|
+
----------
|
|
140
|
+
values
|
|
141
|
+
The numpy array. Texts may mark their missing values with any marker of ``StringDType``. Durations of any
|
|
142
|
+
unit give ``DURATION``, and an object array of ``datetime.time`` and None gives ``TIME``.
|
|
143
|
+
|
|
144
|
+
Returns
|
|
145
|
+
-------
|
|
146
|
+
Self
|
|
147
|
+
A new Array.
|
|
148
|
+
|
|
149
|
+
Raises
|
|
150
|
+
------
|
|
151
|
+
InvalidTypeError
|
|
152
|
+
When an argument is not of the type its annotation names.
|
|
153
|
+
UnsupportedTypeError
|
|
154
|
+
When numdaplot has no equivalent type, for example complex numbers or other Python objects.
|
|
155
|
+
TimeOverflowError
|
|
156
|
+
When a duration in microseconds is beyond about 292 years, which ``DURATION`` cannot hold.
|
|
157
|
+
|
|
158
|
+
Examples
|
|
159
|
+
--------
|
|
160
|
+
>>> import numpy
|
|
161
|
+
>>> import numdaplot as ndp
|
|
162
|
+
>>> ndp.Array.from_numpy(numpy.array([1.5, 2.5]))
|
|
163
|
+
Array([1.5, 2.5], dtype=FLOAT64)
|
|
164
|
+
"""
|
|
165
|
+
copied_values = copy_numpy_values(values)
|
|
166
|
+
created_array = cls._create(copied_values)
|
|
167
|
+
|
|
168
|
+
return created_array
|
|
169
|
+
|
|
170
|
+
@classmethod
|
|
171
|
+
@checked_arguments
|
|
172
|
+
def filled(cls, shape: Shape, value: ScalarValue, dtype: Type | None = None) -> Self:
|
|
173
|
+
"""
|
|
174
|
+
Create an Array of a shape, with the same value everywhere.
|
|
175
|
+
|
|
176
|
+
.. versionadded:: 0.1.0
|
|
177
|
+
|
|
178
|
+
Parameters
|
|
179
|
+
----------
|
|
180
|
+
shape
|
|
181
|
+
The shape of the Array.
|
|
182
|
+
value
|
|
183
|
+
The repeated value, a ``ScalarValue`` such as ``0``, ``"Paris"`` or ``True``.
|
|
184
|
+
dtype
|
|
185
|
+
The type to store the value as, guessed from the value when omitted.
|
|
186
|
+
|
|
187
|
+
Returns
|
|
188
|
+
-------
|
|
189
|
+
Self
|
|
190
|
+
A new Array.
|
|
191
|
+
|
|
192
|
+
Raises
|
|
193
|
+
------
|
|
194
|
+
InvalidTypeError
|
|
195
|
+
When an argument is not of the type its annotation names.
|
|
196
|
+
ValueConversionError
|
|
197
|
+
When the value cannot be stored as ``dtype`` without losing information.
|
|
198
|
+
TimeOverflowError
|
|
199
|
+
When a datetime is outside 1677 to 2262, or a duration beyond about 292 years.
|
|
200
|
+
|
|
201
|
+
Examples
|
|
202
|
+
--------
|
|
203
|
+
>>> import numdaplot as ndp
|
|
204
|
+
>>> ndp.Array.filled(shape=ndp.Shape([2, 3]), value=0)
|
|
205
|
+
Array([[0, 0, 0],
|
|
206
|
+
[0, 0, 0]], dtype=INT64)
|
|
207
|
+
"""
|
|
208
|
+
filled_values = build_filled_values(shape, value, dtype)
|
|
209
|
+
created_array = cls._create(filled_values)
|
|
210
|
+
|
|
211
|
+
return created_array
|
|
212
|
+
|
|
213
|
+
@classmethod
|
|
214
|
+
@checked_arguments
|
|
215
|
+
def from_range(cls, sequence: Range) -> Self:
|
|
216
|
+
"""
|
|
217
|
+
Create a one-dimensional Array of the numbers of a regular sequence.
|
|
218
|
+
|
|
219
|
+
Unlike the Python ``range``, the stop is included by default.
|
|
220
|
+
|
|
221
|
+
.. versionadded:: 0.1.0
|
|
222
|
+
|
|
223
|
+
Parameters
|
|
224
|
+
----------
|
|
225
|
+
sequence
|
|
226
|
+
The start, the stop, the step and the bounds kept. ``LOW_ONLY`` keeps the start and drops
|
|
227
|
+
the stop, ``HIGH_ONLY`` the opposite.
|
|
228
|
+
|
|
229
|
+
Returns
|
|
230
|
+
-------
|
|
231
|
+
Self
|
|
232
|
+
A new Array of integers when the start and the step are integers, of decimals otherwise.
|
|
233
|
+
|
|
234
|
+
Raises
|
|
235
|
+
------
|
|
236
|
+
InvalidTypeError
|
|
237
|
+
When an argument is not of the type its annotation names.
|
|
238
|
+
|
|
239
|
+
Examples
|
|
240
|
+
--------
|
|
241
|
+
>>> import numdaplot as ndp
|
|
242
|
+
>>> ndp.Array.from_range(ndp.Range(start=0, stop=1, step=0.25))
|
|
243
|
+
Array([0. , 0.25, 0.5 , 0.75, 1. ], dtype=FLOAT64)
|
|
244
|
+
"""
|
|
245
|
+
range_values = compute_range_values(sequence)
|
|
246
|
+
created_array = cls._create(range_values)
|
|
247
|
+
|
|
248
|
+
return created_array
|
|
249
|
+
|
|
250
|
+
@classmethod
|
|
251
|
+
@checked_arguments
|
|
252
|
+
def from_date_parts(cls, parts: DateParts) -> Self:
|
|
253
|
+
"""
|
|
254
|
+
Create an Array of dates from their year, their month and their day, such as three columns of a file.
|
|
255
|
+
|
|
256
|
+
.. versionadded:: 0.1.0
|
|
257
|
+
|
|
258
|
+
Parameters
|
|
259
|
+
----------
|
|
260
|
+
parts
|
|
261
|
+
The year, the month and the day of each date, Arrays of whole numbers of the same shape.
|
|
262
|
+
|
|
263
|
+
Returns
|
|
264
|
+
-------
|
|
265
|
+
Self
|
|
266
|
+
A new ``DATE`` Array of the shape of the parts. A date is missing where one of its parts is missing.
|
|
267
|
+
|
|
268
|
+
Raises
|
|
269
|
+
------
|
|
270
|
+
InvalidTypeError
|
|
271
|
+
When an argument is not of the type its annotation names.
|
|
272
|
+
ValueConversionError
|
|
273
|
+
At the first part that is not a whole number, such as the day 3.5, then at the first year, month and day
|
|
274
|
+
that form no date, such as the 31st of February, a month 13 or a year outside 1 to 9999.
|
|
275
|
+
|
|
276
|
+
Examples
|
|
277
|
+
--------
|
|
278
|
+
>>> import numdaplot as ndp
|
|
279
|
+
>>> accidents = ndp.Table.from_arrays(
|
|
280
|
+
... {
|
|
281
|
+
... "jour": ndp.Array.from_list([14, 25]),
|
|
282
|
+
... "mois": ndp.Array.from_list([7, 12]),
|
|
283
|
+
... "an": ndp.Array.from_list([2025, 2025]),
|
|
284
|
+
... }
|
|
285
|
+
... )
|
|
286
|
+
>>> years = accidents.column("an")
|
|
287
|
+
>>> parts = ndp.DateParts(year=years, month=accidents.column("mois"), day=accidents.column("jour"))
|
|
288
|
+
>>> ndp.Array.from_date_parts(parts)
|
|
289
|
+
Array(['2025-07-14', '2025-12-25'], dtype=DATE)
|
|
290
|
+
"""
|
|
291
|
+
dates = build_dates(parts)
|
|
292
|
+
created_array = cls._create(dates)
|
|
293
|
+
|
|
294
|
+
return created_array
|
|
295
|
+
|
|
296
|
+
@classmethod
|
|
297
|
+
@checked_arguments
|
|
298
|
+
def from_spacing(cls, spacing: Spacing) -> Self:
|
|
299
|
+
"""
|
|
300
|
+
Create a one-dimensional Array of evenly spaced decimals.
|
|
301
|
+
|
|
302
|
+
.. versionadded:: 0.1.0
|
|
303
|
+
|
|
304
|
+
Parameters
|
|
305
|
+
----------
|
|
306
|
+
spacing
|
|
307
|
+
The bounds, the count of values and whether each bound is among them.
|
|
308
|
+
|
|
309
|
+
Returns
|
|
310
|
+
-------
|
|
311
|
+
Self
|
|
312
|
+
A new ``FLOAT64`` Array of ``count`` values.
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
Raises
|
|
316
|
+
------
|
|
317
|
+
InvalidTypeError
|
|
318
|
+
When an argument is not of the type its annotation names.
|
|
319
|
+
|
|
320
|
+
Examples
|
|
321
|
+
--------
|
|
322
|
+
>>> import numdaplot as ndp
|
|
323
|
+
>>> ndp.Array.from_spacing(ndp.Spacing(start=0, stop=1, count=5))
|
|
324
|
+
Array([0. , 0.25, 0.5 , 0.75, 1. ], dtype=FLOAT64)
|
|
325
|
+
"""
|
|
326
|
+
spacing_values = compute_spacing_values(spacing)
|
|
327
|
+
created_array = cls._create(spacing_values)
|
|
328
|
+
|
|
329
|
+
return created_array
|
|
330
|
+
|
|
331
|
+
@classmethod
|
|
332
|
+
@checked_arguments
|
|
333
|
+
def random(cls, distribution: Uniform | Normal | RandomIntegers, shape: Shape, seed: int | None = None) -> Self:
|
|
334
|
+
"""
|
|
335
|
+
Create an Array of values drawn at random from a distribution.
|
|
336
|
+
|
|
337
|
+
.. versionadded:: 0.1.0
|
|
338
|
+
|
|
339
|
+
Parameters
|
|
340
|
+
----------
|
|
341
|
+
distribution
|
|
342
|
+
The ``Distribution`` followed by the values, such as ``ndp.Uniform(low=0, high=10)``:
|
|
343
|
+
see ``Distribution`` for every distribution.
|
|
344
|
+
shape
|
|
345
|
+
The shape of the Array.
|
|
346
|
+
seed
|
|
347
|
+
A number, at least 0, giving the same values at each call. Different values at each call when omitted.
|
|
348
|
+
|
|
349
|
+
Returns
|
|
350
|
+
-------
|
|
351
|
+
Self
|
|
352
|
+
A new ``FLOAT64`` Array for ``Uniform`` and ``Normal``, ``INT64`` for ``RandomIntegers``.
|
|
353
|
+
|
|
354
|
+
Raises
|
|
355
|
+
------
|
|
356
|
+
InvalidTypeError
|
|
357
|
+
When an argument is not of the type its annotation names.
|
|
358
|
+
InvalidSeedError
|
|
359
|
+
When ``seed`` is lower than 0.
|
|
360
|
+
|
|
361
|
+
Examples
|
|
362
|
+
--------
|
|
363
|
+
>>> import numdaplot as ndp
|
|
364
|
+
>>> dice = ndp.RandomIntegers(low=1, high=6)
|
|
365
|
+
>>> ndp.Array.random(dice, shape=ndp.Shape([5]), seed=0)
|
|
366
|
+
Array([6, 4, 4, 2, 2], dtype=INT64)
|
|
367
|
+
"""
|
|
368
|
+
random_values = draw_random_values(distribution, shape, seed)
|
|
369
|
+
created_array = cls._create(random_values)
|
|
370
|
+
|
|
371
|
+
return created_array
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Values stored by an Array, shared by every group of Array methods.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Any, Never, Self, cast
|
|
8
|
+
|
|
9
|
+
import numpy
|
|
10
|
+
import numpy.typing
|
|
11
|
+
|
|
12
|
+
from numdaplot.arrays.operations.combination import combine_values
|
|
13
|
+
from numdaplot.arrays.operations.operand import Operand
|
|
14
|
+
from numdaplot.arrays.shape import Shape
|
|
15
|
+
from numdaplot.data_types.numpy_mapping import from_numpy_dtype
|
|
16
|
+
from numdaplot.data_types.time_of_day import read_time_objects
|
|
17
|
+
from numdaplot.data_types.type import Type
|
|
18
|
+
from numdaplot.errors.refused_operation_error import RefusedOperationError
|
|
19
|
+
from numdaplot.rules.rule_values import ScalarValue
|
|
20
|
+
|
|
21
|
+
CONSTRUCTOR_OPERATION = "Creating an Array with ndp.Array(...)"
|
|
22
|
+
CONSTRUCTOR_ALTERNATIVE = "ndp.Array.from_list, from_numpy, filled, from_range, from_spacing or random"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ArrayData:
|
|
26
|
+
"""
|
|
27
|
+
Values stored by an Array, shared by every group of Array methods.
|
|
28
|
+
|
|
29
|
+
Use ``ndp.Array`` and its ``from_*`` methods; this base class only holds the values.
|
|
30
|
+
|
|
31
|
+
.. versionadded:: 0.1.0
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
# numpy then hands every operation between an ndarray and an Array to the Array, which refuses it.
|
|
35
|
+
__array_ufunc__ = None
|
|
36
|
+
_values: numpy.typing.NDArray[Any]
|
|
37
|
+
|
|
38
|
+
def __init__(self, *arguments: Never, **keyword_arguments: Never) -> None:
|
|
39
|
+
"""
|
|
40
|
+
Refuse the creation of an Array by its constructor: the ``from_*`` methods create Arrays.
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.1.0
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
arguments
|
|
47
|
+
Any value, refused.
|
|
48
|
+
keyword_arguments
|
|
49
|
+
Any named value, refused.
|
|
50
|
+
|
|
51
|
+
Raises
|
|
52
|
+
------
|
|
53
|
+
RefusedOperationError
|
|
54
|
+
Always, naming the ``from_*`` methods.
|
|
55
|
+
"""
|
|
56
|
+
raise RefusedOperationError(CONSTRUCTOR_OPERATION, CONSTRUCTOR_ALTERNATIVE)
|
|
57
|
+
|
|
58
|
+
@classmethod
|
|
59
|
+
def _create(cls, values: numpy.typing.NDArray[Any]) -> Self:
|
|
60
|
+
"""
|
|
61
|
+
Return a new Array storing numpy values without copy, made read-only.
|
|
62
|
+
|
|
63
|
+
.. versionadded:: 0.1.0
|
|
64
|
+
|
|
65
|
+
Parameters
|
|
66
|
+
----------
|
|
67
|
+
values
|
|
68
|
+
The numpy values, of a type numdaplot supports.
|
|
69
|
+
|
|
70
|
+
Returns
|
|
71
|
+
-------
|
|
72
|
+
Self
|
|
73
|
+
The new Array.
|
|
74
|
+
"""
|
|
75
|
+
created_array = cls.__new__(cls)
|
|
76
|
+
values.flags.writeable = False
|
|
77
|
+
created_array._values = values
|
|
78
|
+
|
|
79
|
+
return created_array
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def shape(self) -> Shape:
|
|
83
|
+
"""
|
|
84
|
+
Number of values along each dimension.
|
|
85
|
+
|
|
86
|
+
.. versionadded:: 0.1.0
|
|
87
|
+
|
|
88
|
+
Examples
|
|
89
|
+
--------
|
|
90
|
+
>>> import numdaplot as ndp
|
|
91
|
+
>>> ndp.Array.from_list([[1, 2, 3], [4, 5, 6]]).shape
|
|
92
|
+
Shape(dimensions=[2, 3])
|
|
93
|
+
"""
|
|
94
|
+
dimensions = list(self._values.shape)
|
|
95
|
+
array_shape = Shape(dimensions)
|
|
96
|
+
|
|
97
|
+
return array_shape
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def dtype(self) -> Type:
|
|
101
|
+
"""
|
|
102
|
+
Type of the values.
|
|
103
|
+
|
|
104
|
+
.. versionadded:: 0.1.0
|
|
105
|
+
|
|
106
|
+
Examples
|
|
107
|
+
--------
|
|
108
|
+
>>> import numdaplot as ndp
|
|
109
|
+
>>> ndp.Array.from_list([1.5, 2.0]).dtype
|
|
110
|
+
<Type.FLOAT64: 10>
|
|
111
|
+
"""
|
|
112
|
+
array_type = from_numpy_dtype(self._values.dtype)
|
|
113
|
+
|
|
114
|
+
return array_type
|
|
115
|
+
|
|
116
|
+
def to_numpy(self) -> numpy.typing.NDArray[Any]:
|
|
117
|
+
"""
|
|
118
|
+
Return a numpy copy of the values; changing it never changes the Array.
|
|
119
|
+
|
|
120
|
+
.. versionadded:: 0.1.0
|
|
121
|
+
|
|
122
|
+
Returns
|
|
123
|
+
-------
|
|
124
|
+
numpy.typing.NDArray
|
|
125
|
+
A writable copy of the values. Texts use ``StringDType`` with NaN as missing value. Times of day are
|
|
126
|
+
Python ``datetime.time`` objects, None where missing, as numpy has no type for them.
|
|
127
|
+
|
|
128
|
+
Examples
|
|
129
|
+
--------
|
|
130
|
+
>>> import numdaplot as ndp
|
|
131
|
+
>>> values = ndp.Array.from_list([1, 2]).to_numpy()
|
|
132
|
+
>>> values[0] = 99
|
|
133
|
+
>>> values
|
|
134
|
+
array([99, 2])
|
|
135
|
+
"""
|
|
136
|
+
array_type = from_numpy_dtype(self._values.dtype)
|
|
137
|
+
if array_type == Type.TIME:
|
|
138
|
+
time_objects = read_time_objects(self._values)
|
|
139
|
+
return time_objects
|
|
140
|
+
|
|
141
|
+
copied_values = self._values.copy()
|
|
142
|
+
|
|
143
|
+
return copied_values
|
|
144
|
+
|
|
145
|
+
def _wrap(self, values: numpy.typing.NDArray[Any]) -> Self:
|
|
146
|
+
"""
|
|
147
|
+
Return a new Array of the same class holding other values.
|
|
148
|
+
|
|
149
|
+
.. versionadded:: 0.1.0
|
|
150
|
+
|
|
151
|
+
Parameters
|
|
152
|
+
----------
|
|
153
|
+
values
|
|
154
|
+
The numpy values of the new Array, stored without copy.
|
|
155
|
+
|
|
156
|
+
Returns
|
|
157
|
+
-------
|
|
158
|
+
Self
|
|
159
|
+
The new Array.
|
|
160
|
+
"""
|
|
161
|
+
array_class = type(self)
|
|
162
|
+
wrapped_array = array_class._create(values)
|
|
163
|
+
|
|
164
|
+
return wrapped_array
|
|
165
|
+
|
|
166
|
+
def _read_operand(self, other: object) -> Operand:
|
|
167
|
+
"""
|
|
168
|
+
Return the values of an Array, or check that a value is a single value.
|
|
169
|
+
|
|
170
|
+
.. versionadded:: 0.1.0
|
|
171
|
+
|
|
172
|
+
Parameters
|
|
173
|
+
----------
|
|
174
|
+
other
|
|
175
|
+
An Array or a single value.
|
|
176
|
+
|
|
177
|
+
Returns
|
|
178
|
+
-------
|
|
179
|
+
Operand
|
|
180
|
+
The numpy values of the Array, or the single value itself.
|
|
181
|
+
"""
|
|
182
|
+
if isinstance(other, ArrayData):
|
|
183
|
+
return other._values
|
|
184
|
+
|
|
185
|
+
single_value = cast(ScalarValue, other)
|
|
186
|
+
|
|
187
|
+
return single_value
|
|
188
|
+
|
|
189
|
+
def _combine(self, other: object, function: numpy.ufunc, symbol: str) -> Self:
|
|
190
|
+
"""
|
|
191
|
+
Return a new Array combining this Array, on the left, with another operand.
|
|
192
|
+
|
|
193
|
+
.. versionadded:: 0.1.0
|
|
194
|
+
|
|
195
|
+
Parameters
|
|
196
|
+
----------
|
|
197
|
+
other
|
|
198
|
+
An Array or a single value, on the right.
|
|
199
|
+
function
|
|
200
|
+
The numpy function, such as ``numpy.add``.
|
|
201
|
+
symbol
|
|
202
|
+
The operator shown in error messages, such as ``"+"``.
|
|
203
|
+
|
|
204
|
+
Returns
|
|
205
|
+
-------
|
|
206
|
+
Self
|
|
207
|
+
The combined Array.
|
|
208
|
+
|
|
209
|
+
Raises
|
|
210
|
+
------
|
|
211
|
+
ShapeMismatchError, IncompatibleTypesError
|
|
212
|
+
When the operand is not accepted, as in ``combine_values``.
|
|
213
|
+
"""
|
|
214
|
+
right_values = self._read_operand(other)
|
|
215
|
+
combined_values = combine_values(self._values, right_values, function, symbol)
|
|
216
|
+
combined_array = self._wrap(combined_values)
|
|
217
|
+
|
|
218
|
+
return combined_array
|
|
219
|
+
|
|
220
|
+
def _combine_reflected(self, other: object, function: numpy.ufunc, symbol: str) -> Self:
|
|
221
|
+
"""
|
|
222
|
+
Return a new Array combining another operand, on the left, with this Array.
|
|
223
|
+
|
|
224
|
+
.. versionadded:: 0.1.0
|
|
225
|
+
|
|
226
|
+
Parameters
|
|
227
|
+
----------
|
|
228
|
+
other
|
|
229
|
+
A single value, on the left.
|
|
230
|
+
function
|
|
231
|
+
The numpy function, such as ``numpy.subtract``.
|
|
232
|
+
symbol
|
|
233
|
+
The operator shown in error messages, such as ``"-"``.
|
|
234
|
+
|
|
235
|
+
Returns
|
|
236
|
+
-------
|
|
237
|
+
Self
|
|
238
|
+
The combined Array.
|
|
239
|
+
|
|
240
|
+
Raises
|
|
241
|
+
------
|
|
242
|
+
IncompatibleTypesError
|
|
243
|
+
When the operand is not accepted, as in ``combine_values``.
|
|
244
|
+
"""
|
|
245
|
+
left_values = self._read_operand(other)
|
|
246
|
+
combined_values = combine_values(left_values, self._values, function, symbol)
|
|
247
|
+
combined_array = self._wrap(combined_values)
|
|
248
|
+
|
|
249
|
+
return combined_array
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def read_stored_values(array: ArrayData) -> numpy.typing.NDArray[Any]:
|
|
253
|
+
"""
|
|
254
|
+
Return the values an Array stores, without copy, for the code of numdaplot that builds other objects from them.
|
|
255
|
+
|
|
256
|
+
Unlike ``Array.to_numpy``, times of day stay stored as the time since midnight.
|
|
257
|
+
|
|
258
|
+
.. versionadded:: 0.1.0
|
|
259
|
+
|
|
260
|
+
Parameters
|
|
261
|
+
----------
|
|
262
|
+
array
|
|
263
|
+
An Array.
|
|
264
|
+
|
|
265
|
+
Returns
|
|
266
|
+
-------
|
|
267
|
+
numpy.typing.NDArray
|
|
268
|
+
The stored values, which must not be changed.
|
|
269
|
+
|
|
270
|
+
Examples
|
|
271
|
+
--------
|
|
272
|
+
>>> from datetime import time
|
|
273
|
+
>>> import numdaplot as ndp
|
|
274
|
+
>>> from numdaplot.arrays.array_data import read_stored_values
|
|
275
|
+
>>> read_stored_values(ndp.Array.from_list([time(0, 1)]))
|
|
276
|
+
array([60000000], dtype='timedelta64[us]')
|
|
277
|
+
"""
|
|
278
|
+
# The function lives next to the class to read its stored values on behalf of the rest of numdaplot.
|
|
279
|
+
stored_values = array._values # pyright: ignore[reportPrivateUsage]
|
|
280
|
+
|
|
281
|
+
return stored_values
|