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,404 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Arithmetic operators of an Array, with the Array on the left.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Self
|
|
8
|
+
|
|
9
|
+
import numpy
|
|
10
|
+
|
|
11
|
+
from numdaplot.arrays.array_data import ArrayData
|
|
12
|
+
from numdaplot.arrays.operations.integer_rules import require_opposite_fits
|
|
13
|
+
from numdaplot.arrays.operations.transformation import transform_values
|
|
14
|
+
from numdaplot.rules.rule_values import ScalarValue
|
|
15
|
+
from numdaplot.settings.argument_types import checked_arguments
|
|
16
|
+
|
|
17
|
+
ADDITION_SYMBOL = "+"
|
|
18
|
+
SUBTRACTION_SYMBOL = "-"
|
|
19
|
+
MULTIPLICATION_SYMBOL = "*"
|
|
20
|
+
DIVISION_SYMBOL = "/"
|
|
21
|
+
FLOOR_DIVISION_SYMBOL = "//"
|
|
22
|
+
REMAINDER_SYMBOL = "%"
|
|
23
|
+
POWER_SYMBOL = "**"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ArrayArithmetic(ArrayData):
|
|
27
|
+
"""
|
|
28
|
+
Arithmetic operators of an Array, with the Array on the left.
|
|
29
|
+
|
|
30
|
+
``+``, ``-``, ``*``, ``/``, ``//``, ``%``, ``**`` and the opposite ``-array``.
|
|
31
|
+
|
|
32
|
+
.. versionadded:: 0.1.0
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
@checked_arguments
|
|
36
|
+
def __add__(self, other: Self | ScalarValue) -> Self:
|
|
37
|
+
"""
|
|
38
|
+
Return the sum of each value and another operand, written ``array + other``.
|
|
39
|
+
|
|
40
|
+
Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
|
|
41
|
+
as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
|
|
42
|
+
|
|
43
|
+
.. versionadded:: 0.1.0
|
|
44
|
+
|
|
45
|
+
Parameters
|
|
46
|
+
----------
|
|
47
|
+
other
|
|
48
|
+
An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
|
|
49
|
+
|
|
50
|
+
Returns
|
|
51
|
+
-------
|
|
52
|
+
Self
|
|
53
|
+
A new Array.
|
|
54
|
+
|
|
55
|
+
Warns
|
|
56
|
+
-----
|
|
57
|
+
CalculationWarning
|
|
58
|
+
When values of decimals become NaN or an infinite value.
|
|
59
|
+
|
|
60
|
+
Raises
|
|
61
|
+
------
|
|
62
|
+
InvalidTypeError
|
|
63
|
+
When an argument is not of the type its annotation names.
|
|
64
|
+
ShapeMismatchError
|
|
65
|
+
When the shapes of two Arrays cannot be combined.
|
|
66
|
+
IncompatibleTypesError
|
|
67
|
+
When the operation does not apply to the types, such as a number and a text.
|
|
68
|
+
IntegerOverflowError
|
|
69
|
+
When a result does not fit its integer type, which refuses to wrap around to a wrong number.
|
|
70
|
+
TimeOverflowError
|
|
71
|
+
When a date or a datetime leaves 1677 to 2262, a duration exceeds about 292 years, or a time of day moves
|
|
72
|
+
past midnight.
|
|
73
|
+
|
|
74
|
+
Examples
|
|
75
|
+
--------
|
|
76
|
+
>>> import numdaplot as ndp
|
|
77
|
+
>>> prices = ndp.Array.from_list([10, 20])
|
|
78
|
+
>>> prices + 5
|
|
79
|
+
Array([15, 25], dtype=INT64)
|
|
80
|
+
"""
|
|
81
|
+
combined_array = self._combine(other, numpy.add, ADDITION_SYMBOL)
|
|
82
|
+
|
|
83
|
+
return combined_array
|
|
84
|
+
|
|
85
|
+
@checked_arguments
|
|
86
|
+
def __sub__(self, other: Self | ScalarValue) -> Self:
|
|
87
|
+
"""
|
|
88
|
+
Return the difference of each value and another operand, written ``array - other``.
|
|
89
|
+
|
|
90
|
+
Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
|
|
91
|
+
as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
|
|
92
|
+
|
|
93
|
+
.. versionadded:: 0.1.0
|
|
94
|
+
|
|
95
|
+
Parameters
|
|
96
|
+
----------
|
|
97
|
+
other
|
|
98
|
+
An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
|
|
99
|
+
|
|
100
|
+
Returns
|
|
101
|
+
-------
|
|
102
|
+
Self
|
|
103
|
+
A new Array.
|
|
104
|
+
|
|
105
|
+
Warns
|
|
106
|
+
-----
|
|
107
|
+
CalculationWarning
|
|
108
|
+
When values of decimals become NaN or an infinite value.
|
|
109
|
+
|
|
110
|
+
Raises
|
|
111
|
+
------
|
|
112
|
+
InvalidTypeError
|
|
113
|
+
When an argument is not of the type its annotation names.
|
|
114
|
+
ShapeMismatchError
|
|
115
|
+
When the shapes of two Arrays cannot be combined.
|
|
116
|
+
IncompatibleTypesError
|
|
117
|
+
When the operation does not apply to the types, such as a number and a text.
|
|
118
|
+
IntegerOverflowError
|
|
119
|
+
When a result does not fit its integer type, which refuses to wrap around to a wrong number.
|
|
120
|
+
TimeOverflowError
|
|
121
|
+
When a date or a datetime leaves 1677 to 2262, a duration exceeds about 292 years, or a time of day moves
|
|
122
|
+
past midnight.
|
|
123
|
+
|
|
124
|
+
Examples
|
|
125
|
+
--------
|
|
126
|
+
>>> import numdaplot as ndp
|
|
127
|
+
>>> prices = ndp.Array.from_list([10, 20])
|
|
128
|
+
>>> prices - 5
|
|
129
|
+
Array([ 5, 15], dtype=INT64)
|
|
130
|
+
"""
|
|
131
|
+
combined_array = self._combine(other, numpy.subtract, SUBTRACTION_SYMBOL)
|
|
132
|
+
|
|
133
|
+
return combined_array
|
|
134
|
+
|
|
135
|
+
@checked_arguments
|
|
136
|
+
def __mul__(self, other: Self | ScalarValue) -> Self:
|
|
137
|
+
"""
|
|
138
|
+
Return the product of each value and another operand, written ``array * other``.
|
|
139
|
+
|
|
140
|
+
Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
|
|
141
|
+
as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
|
|
142
|
+
|
|
143
|
+
.. versionadded:: 0.1.0
|
|
144
|
+
|
|
145
|
+
Parameters
|
|
146
|
+
----------
|
|
147
|
+
other
|
|
148
|
+
An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
|
|
149
|
+
|
|
150
|
+
Returns
|
|
151
|
+
-------
|
|
152
|
+
Self
|
|
153
|
+
A new Array.
|
|
154
|
+
|
|
155
|
+
Warns
|
|
156
|
+
-----
|
|
157
|
+
CalculationWarning
|
|
158
|
+
When values of decimals become NaN or an infinite value.
|
|
159
|
+
|
|
160
|
+
Raises
|
|
161
|
+
------
|
|
162
|
+
InvalidTypeError
|
|
163
|
+
When an argument is not of the type its annotation names.
|
|
164
|
+
ShapeMismatchError
|
|
165
|
+
When the shapes of two Arrays cannot be combined.
|
|
166
|
+
IncompatibleTypesError
|
|
167
|
+
When the operation does not apply to the types, such as a number and a text.
|
|
168
|
+
IntegerOverflowError
|
|
169
|
+
When a result does not fit its integer type, which refuses to wrap around to a wrong number.
|
|
170
|
+
TimeOverflowError
|
|
171
|
+
When a date or a datetime leaves 1677 to 2262, or a duration exceeds about 292 years.
|
|
172
|
+
|
|
173
|
+
Examples
|
|
174
|
+
--------
|
|
175
|
+
>>> import numdaplot as ndp
|
|
176
|
+
>>> prices = ndp.Array.from_list([10, 20])
|
|
177
|
+
>>> prices * 2
|
|
178
|
+
Array([20, 40], dtype=INT64)
|
|
179
|
+
"""
|
|
180
|
+
combined_array = self._combine(other, numpy.multiply, MULTIPLICATION_SYMBOL)
|
|
181
|
+
|
|
182
|
+
return combined_array
|
|
183
|
+
|
|
184
|
+
@checked_arguments
|
|
185
|
+
def __truediv__(self, other: Self | ScalarValue) -> Self:
|
|
186
|
+
"""
|
|
187
|
+
Return the quotient of each value and another operand, written ``array / other``.
|
|
188
|
+
|
|
189
|
+
Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
|
|
190
|
+
as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
|
|
191
|
+
|
|
192
|
+
.. versionadded:: 0.1.0
|
|
193
|
+
|
|
194
|
+
Parameters
|
|
195
|
+
----------
|
|
196
|
+
other
|
|
197
|
+
An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
|
|
198
|
+
|
|
199
|
+
Returns
|
|
200
|
+
-------
|
|
201
|
+
Self
|
|
202
|
+
A new Array.
|
|
203
|
+
|
|
204
|
+
Warns
|
|
205
|
+
-----
|
|
206
|
+
CalculationWarning
|
|
207
|
+
When values of decimals become NaN or an infinite value.
|
|
208
|
+
|
|
209
|
+
Raises
|
|
210
|
+
------
|
|
211
|
+
InvalidTypeError
|
|
212
|
+
When an argument is not of the type its annotation names.
|
|
213
|
+
ShapeMismatchError
|
|
214
|
+
When the shapes of two Arrays cannot be combined.
|
|
215
|
+
IncompatibleTypesError
|
|
216
|
+
When the operation does not apply to the types, such as a number and a text.
|
|
217
|
+
TimeOverflowError
|
|
218
|
+
When a date or a datetime leaves 1677 to 2262, or a duration exceeds about 292 years.
|
|
219
|
+
|
|
220
|
+
Examples
|
|
221
|
+
--------
|
|
222
|
+
>>> import numdaplot as ndp
|
|
223
|
+
>>> prices = ndp.Array.from_list([10, 20])
|
|
224
|
+
>>> prices / 4
|
|
225
|
+
Array([2.5, 5. ], dtype=FLOAT64)
|
|
226
|
+
"""
|
|
227
|
+
combined_array = self._combine(other, numpy.true_divide, DIVISION_SYMBOL)
|
|
228
|
+
|
|
229
|
+
return combined_array
|
|
230
|
+
|
|
231
|
+
@checked_arguments
|
|
232
|
+
def __floordiv__(self, other: Self | ScalarValue) -> Self:
|
|
233
|
+
"""
|
|
234
|
+
Return the whole quotient of each value and another operand, written ``array // other``.
|
|
235
|
+
|
|
236
|
+
Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
|
|
237
|
+
as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
|
|
238
|
+
|
|
239
|
+
.. versionadded:: 0.1.0
|
|
240
|
+
|
|
241
|
+
Parameters
|
|
242
|
+
----------
|
|
243
|
+
other
|
|
244
|
+
An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
|
|
245
|
+
|
|
246
|
+
Returns
|
|
247
|
+
-------
|
|
248
|
+
Self
|
|
249
|
+
A new Array.
|
|
250
|
+
|
|
251
|
+
Warns
|
|
252
|
+
-----
|
|
253
|
+
CalculationWarning
|
|
254
|
+
When values of decimals become NaN or an infinite value.
|
|
255
|
+
|
|
256
|
+
Raises
|
|
257
|
+
------
|
|
258
|
+
InvalidTypeError
|
|
259
|
+
When an argument is not of the type its annotation names.
|
|
260
|
+
ShapeMismatchError
|
|
261
|
+
When the shapes of two Arrays cannot be combined.
|
|
262
|
+
IncompatibleTypesError
|
|
263
|
+
When the operation does not apply to the types, such as a number and a text.
|
|
264
|
+
OutOfDomainError
|
|
265
|
+
When integers are divided by 0: convert them to ``FLOAT64`` first.
|
|
266
|
+
IntegerOverflowError
|
|
267
|
+
When a result does not fit its integer type, which refuses to wrap around to a wrong number.
|
|
268
|
+
|
|
269
|
+
Examples
|
|
270
|
+
--------
|
|
271
|
+
>>> import numdaplot as ndp
|
|
272
|
+
>>> prices = ndp.Array.from_list([10, 20])
|
|
273
|
+
>>> prices // 3
|
|
274
|
+
Array([3, 6], dtype=INT64)
|
|
275
|
+
"""
|
|
276
|
+
combined_array = self._combine(other, numpy.floor_divide, FLOOR_DIVISION_SYMBOL)
|
|
277
|
+
|
|
278
|
+
return combined_array
|
|
279
|
+
|
|
280
|
+
@checked_arguments
|
|
281
|
+
def __mod__(self, other: Self | ScalarValue) -> Self:
|
|
282
|
+
"""
|
|
283
|
+
Return the remainder of each value and another operand, written ``array % other``.
|
|
284
|
+
|
|
285
|
+
Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
|
|
286
|
+
as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
|
|
287
|
+
|
|
288
|
+
.. versionadded:: 0.1.0
|
|
289
|
+
|
|
290
|
+
Parameters
|
|
291
|
+
----------
|
|
292
|
+
other
|
|
293
|
+
An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
|
|
294
|
+
|
|
295
|
+
Returns
|
|
296
|
+
-------
|
|
297
|
+
Self
|
|
298
|
+
A new Array.
|
|
299
|
+
|
|
300
|
+
Warns
|
|
301
|
+
-----
|
|
302
|
+
CalculationWarning
|
|
303
|
+
When values of decimals become NaN or an infinite value.
|
|
304
|
+
|
|
305
|
+
Raises
|
|
306
|
+
------
|
|
307
|
+
InvalidTypeError
|
|
308
|
+
When an argument is not of the type its annotation names.
|
|
309
|
+
ShapeMismatchError
|
|
310
|
+
When the shapes of two Arrays cannot be combined.
|
|
311
|
+
IncompatibleTypesError
|
|
312
|
+
When the operation does not apply to the types, such as a number and a text.
|
|
313
|
+
OutOfDomainError
|
|
314
|
+
When integers are divided by 0: convert them to ``FLOAT64`` first.
|
|
315
|
+
|
|
316
|
+
Examples
|
|
317
|
+
--------
|
|
318
|
+
>>> import numdaplot as ndp
|
|
319
|
+
>>> prices = ndp.Array.from_list([10, 20])
|
|
320
|
+
>>> prices % 3
|
|
321
|
+
Array([1, 2], dtype=INT64)
|
|
322
|
+
"""
|
|
323
|
+
combined_array = self._combine(other, numpy.remainder, REMAINDER_SYMBOL)
|
|
324
|
+
|
|
325
|
+
return combined_array
|
|
326
|
+
|
|
327
|
+
@checked_arguments
|
|
328
|
+
def __pow__(self, other: Self | ScalarValue) -> Self:
|
|
329
|
+
"""
|
|
330
|
+
Return the power of each value and another operand, written ``array ** other``.
|
|
331
|
+
|
|
332
|
+
Two Arrays are combined value by value. Two Arrays of different shapes are stretched to match,
|
|
333
|
+
as in numpy, with a ``BroadcastWarning``. The result follows the numpy type rules.
|
|
334
|
+
|
|
335
|
+
.. versionadded:: 0.1.0
|
|
336
|
+
|
|
337
|
+
Parameters
|
|
338
|
+
----------
|
|
339
|
+
other
|
|
340
|
+
An Array or a ``ScalarValue``, such as ``10`` or ``2.5``.
|
|
341
|
+
|
|
342
|
+
Returns
|
|
343
|
+
-------
|
|
344
|
+
Self
|
|
345
|
+
A new Array.
|
|
346
|
+
|
|
347
|
+
Warns
|
|
348
|
+
-----
|
|
349
|
+
CalculationWarning
|
|
350
|
+
When values of decimals become NaN or an infinite value.
|
|
351
|
+
|
|
352
|
+
Raises
|
|
353
|
+
------
|
|
354
|
+
InvalidTypeError
|
|
355
|
+
When an argument is not of the type its annotation names.
|
|
356
|
+
ShapeMismatchError
|
|
357
|
+
When the shapes of two Arrays cannot be combined.
|
|
358
|
+
IncompatibleTypesError
|
|
359
|
+
When the operation does not apply to the types, such as a number and a text.
|
|
360
|
+
OutOfDomainError
|
|
361
|
+
When integers are raised to a negative power: convert them to ``FLOAT64`` first.
|
|
362
|
+
IntegerOverflowError
|
|
363
|
+
When a result does not fit its integer type, which refuses to wrap around to a wrong number.
|
|
364
|
+
|
|
365
|
+
Examples
|
|
366
|
+
--------
|
|
367
|
+
>>> import numdaplot as ndp
|
|
368
|
+
>>> prices = ndp.Array.from_list([10, 20])
|
|
369
|
+
>>> prices ** 2
|
|
370
|
+
Array([100, 400], dtype=INT64)
|
|
371
|
+
"""
|
|
372
|
+
combined_array = self._combine(other, numpy.power, POWER_SYMBOL)
|
|
373
|
+
|
|
374
|
+
return combined_array
|
|
375
|
+
|
|
376
|
+
def __neg__(self) -> Self:
|
|
377
|
+
"""
|
|
378
|
+
Return the opposite of each value, written ``-array``.
|
|
379
|
+
|
|
380
|
+
.. versionadded:: 0.1.0
|
|
381
|
+
|
|
382
|
+
Returns
|
|
383
|
+
-------
|
|
384
|
+
Self
|
|
385
|
+
A new Array.
|
|
386
|
+
|
|
387
|
+
Raises
|
|
388
|
+
------
|
|
389
|
+
IncompatibleTypesError
|
|
390
|
+
When the values have no opposite, such as texts or booleans.
|
|
391
|
+
IntegerOverflowError
|
|
392
|
+
When an integer has no opposite in its type, such as any positive ``UINT8``.
|
|
393
|
+
|
|
394
|
+
Examples
|
|
395
|
+
--------
|
|
396
|
+
>>> import numdaplot as ndp
|
|
397
|
+
>>> -ndp.Array.from_list([1, -2])
|
|
398
|
+
Array([-1, 2], dtype=INT64)
|
|
399
|
+
"""
|
|
400
|
+
require_opposite_fits(self._values, SUBTRACTION_SYMBOL)
|
|
401
|
+
negated_values = transform_values(self._values, numpy.negative, SUBTRACTION_SYMBOL)
|
|
402
|
+
negated_array = self._wrap(negated_values)
|
|
403
|
+
|
|
404
|
+
return negated_array
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Statistics, math functions and time functions computed on an Array.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Self
|
|
8
|
+
|
|
9
|
+
from numdaplot.arrays.array_data import ArrayData
|
|
10
|
+
from numdaplot.arrays.calculation.math_function_values import apply_math_function
|
|
11
|
+
from numdaplot.arrays.calculation.statistic_values import compute_statistic
|
|
12
|
+
from numdaplot.arrays.calculation.time_function_values import apply_time_function
|
|
13
|
+
from numdaplot.arrays.mapping.mapped_values import map_values
|
|
14
|
+
from numdaplot.arrays.mapping.value_mapping import ValueMapping
|
|
15
|
+
from numdaplot.arrays.math_functions.math_function import MathFunction
|
|
16
|
+
from numdaplot.dates.time_function import TimeFunction
|
|
17
|
+
from numdaplot.positions.axis import Axis
|
|
18
|
+
from numdaplot.settings.argument_types import checked_arguments
|
|
19
|
+
from numdaplot.statistics.statistic import Statistic
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ArrayCalculation(ArrayData):
|
|
23
|
+
"""
|
|
24
|
+
Statistics with ``compute``, math and time functions with ``apply``.
|
|
25
|
+
|
|
26
|
+
.. versionadded:: 0.1.0
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
@checked_arguments
|
|
30
|
+
def compute(self, statistic: Statistic, axis: Axis | None = None) -> Self:
|
|
31
|
+
"""
|
|
32
|
+
Return a statistic of the values, ignoring missing values unless ``Count`` is set to include them.
|
|
33
|
+
|
|
34
|
+
.. versionadded:: 0.1.0
|
|
35
|
+
|
|
36
|
+
Parameters
|
|
37
|
+
----------
|
|
38
|
+
statistic
|
|
39
|
+
A ``Statistic``, such as ``ndp.Mean()`` or ``ndp.Quantile(0.9)``: see ``Statistic`` for every statistic.
|
|
40
|
+
axis
|
|
41
|
+
``EACH_ROW`` for one result per row, ``EACH_COLUMN`` for one per column, only for a
|
|
42
|
+
two-dimensional Array. A single result for the whole Array when omitted.
|
|
43
|
+
|
|
44
|
+
Returns
|
|
45
|
+
-------
|
|
46
|
+
Self
|
|
47
|
+
A new Array: one value when ``axis`` is omitted, read it with ``to_value``.
|
|
48
|
+
|
|
49
|
+
Raises
|
|
50
|
+
------
|
|
51
|
+
InvalidTypeError
|
|
52
|
+
When an argument is not of the type its annotation names.
|
|
53
|
+
IncompatibleTypesError
|
|
54
|
+
When the statistic does not apply to the type of the values, such as the mean of texts.
|
|
55
|
+
DimensionError
|
|
56
|
+
When an axis is given for an Array that is not two-dimensional.
|
|
57
|
+
EmptyArrayError
|
|
58
|
+
When the statistic needs a value, such as ``Mean``, and the whole Array, or a row or column,
|
|
59
|
+
has no present value.
|
|
60
|
+
IntegerOverflowError
|
|
61
|
+
When the ``Sum`` of integers does not fit their type.
|
|
62
|
+
|
|
63
|
+
Warns
|
|
64
|
+
-----
|
|
65
|
+
CalculationWarning
|
|
66
|
+
When a result on decimals becomes an infinite value or NaN.
|
|
67
|
+
|
|
68
|
+
Examples
|
|
69
|
+
--------
|
|
70
|
+
>>> import numdaplot as ndp
|
|
71
|
+
>>> temperatures = ndp.Array.from_list([12.0, None, 18.0])
|
|
72
|
+
>>> temperatures.compute(ndp.Mean()).to_value()
|
|
73
|
+
15.0
|
|
74
|
+
"""
|
|
75
|
+
statistic_values = compute_statistic(self._values, statistic, axis)
|
|
76
|
+
statistic_array = self._wrap(statistic_values)
|
|
77
|
+
|
|
78
|
+
return statistic_array
|
|
79
|
+
|
|
80
|
+
@checked_arguments
|
|
81
|
+
def apply(self, function: MathFunction | TimeFunction | ValueMapping) -> Self:
|
|
82
|
+
"""
|
|
83
|
+
Return a math function, a time function or a value mapping applied to each value.
|
|
84
|
+
|
|
85
|
+
.. versionadded:: 0.1.0
|
|
86
|
+
|
|
87
|
+
Parameters
|
|
88
|
+
----------
|
|
89
|
+
function
|
|
90
|
+
A ``MathFunction``, such as ``ndp.SquareRoot()``, applied to numbers, or a ``TimeFunction``,
|
|
91
|
+
such as ``ndp.DatePart(unit=ndp.DatePartUnit.MONTH)``, applied to dates, datetimes, durations or
|
|
92
|
+
numbers as each one states: see ``MathFunction`` and ``TimeFunction`` for every function. Or a
|
|
93
|
+
``ValueMapping`` giving a new value to listed values, such as codes replaced by labels.
|
|
94
|
+
|
|
95
|
+
Returns
|
|
96
|
+
-------
|
|
97
|
+
Self
|
|
98
|
+
A new Array of the same shape. Missing values stay missing.
|
|
99
|
+
|
|
100
|
+
Raises
|
|
101
|
+
------
|
|
102
|
+
InvalidTypeError
|
|
103
|
+
When an argument is not of the type its annotation names.
|
|
104
|
+
IncompatibleTypesError
|
|
105
|
+
When the function does not apply to the type of the values.
|
|
106
|
+
OutOfDomainError
|
|
107
|
+
When a value is outside the domain of a math function, such as the square root of -1.
|
|
108
|
+
UnmatchedValueError
|
|
109
|
+
When a value has no ``ValueChange`` in a ``ValueMapping`` whose ``others`` is ``Unmatched.ERROR``.
|
|
110
|
+
UnsupportedMissingError
|
|
111
|
+
When a ``ValueMapping`` gives integers or booleans and a missing value.
|
|
112
|
+
|
|
113
|
+
Warns
|
|
114
|
+
-----
|
|
115
|
+
CalculationWarning
|
|
116
|
+
When a result of a math function becomes an infinite value or NaN.
|
|
117
|
+
|
|
118
|
+
Examples
|
|
119
|
+
--------
|
|
120
|
+
>>> from datetime import date
|
|
121
|
+
>>> import numdaplot as ndp
|
|
122
|
+
>>> ndp.Array.from_list([1, 4, 9]).apply(ndp.SquareRoot())
|
|
123
|
+
Array([1., 2., 3.], dtype=FLOAT64)
|
|
124
|
+
>>> ndp.Array.from_list([date(2026, 3, 14)]).apply(ndp.DatePart(unit=ndp.DatePartUnit.MONTH))
|
|
125
|
+
Array([3.], dtype=FLOAT64)
|
|
126
|
+
>>> sexes = ndp.ValueMapping(changes=[ndp.ValueChange(1, "M"), ndp.ValueChange(2, "F")])
|
|
127
|
+
>>> ndp.Array.from_list([2, 1]).apply(sexes)
|
|
128
|
+
Array(['F', 'M'], dtype=TEXT)
|
|
129
|
+
"""
|
|
130
|
+
if isinstance(function, ValueMapping):
|
|
131
|
+
mapped_values = map_values(self._values, function)
|
|
132
|
+
mapped_array = self._wrap(mapped_values)
|
|
133
|
+
return mapped_array
|
|
134
|
+
|
|
135
|
+
if isinstance(function, TimeFunction):
|
|
136
|
+
time_values = apply_time_function(self._values, function)
|
|
137
|
+
time_array = self._wrap(time_values)
|
|
138
|
+
return time_array
|
|
139
|
+
|
|
140
|
+
transformed_values = apply_math_function(self._values, function)
|
|
141
|
+
transformed_array = self._wrap(transformed_values)
|
|
142
|
+
|
|
143
|
+
return transformed_array
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Conversion of an Array to Python values and text, and comparison of two Arrays.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
10
|
+
|
|
11
|
+
from numdaplot.arrays.array_data import ArrayData
|
|
12
|
+
from numdaplot.arrays.conversion.array_text import format_array
|
|
13
|
+
from numdaplot.arrays.conversion.equality_check import are_equal
|
|
14
|
+
from numdaplot.arrays.conversion.python_values import to_python_list
|
|
15
|
+
from numdaplot.errors.invalid_type_error import InvalidTypeError
|
|
16
|
+
from numdaplot.errors.not_single_value_error import NotSingleValueError
|
|
17
|
+
from numdaplot.settings.argument_types import checked_arguments
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
from numdaplot.arrays.equality import Equality
|
|
21
|
+
|
|
22
|
+
SINGLE_VALUE_COUNT = 1
|
|
23
|
+
FLAT_DIMENSIONS = (-1,)
|
|
24
|
+
EQUALITY_TARGET = "Array.is_equal other"
|
|
25
|
+
EQUALITY_EXPECTED = "an Array"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ArrayConversion(ArrayData):
|
|
29
|
+
"""
|
|
30
|
+
Conversion of an Array with ``to_list`` and ``to_value``, comparison with ``is_equal``, and its text.
|
|
31
|
+
|
|
32
|
+
.. versionadded:: 0.1.0
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def to_list(self) -> list[Any]:
|
|
36
|
+
"""
|
|
37
|
+
Return the values as a Python list, with one nested list per row for several dimensions.
|
|
38
|
+
|
|
39
|
+
This is the way to loop over the values: ``for value in array.to_list()``.
|
|
40
|
+
|
|
41
|
+
.. versionadded:: 0.1.0
|
|
42
|
+
|
|
43
|
+
Returns
|
|
44
|
+
-------
|
|
45
|
+
list[Any]
|
|
46
|
+
Python values, ``datetime.time`` for times of day. A missing date, datetime, duration or time of day
|
|
47
|
+
becomes ``None``, a missing decimal ``nan``.
|
|
48
|
+
|
|
49
|
+
Examples
|
|
50
|
+
--------
|
|
51
|
+
>>> import numdaplot as ndp
|
|
52
|
+
>>> ndp.Array.from_list([[1, 2], [3, 4]]).to_list()
|
|
53
|
+
[[1, 2], [3, 4]]
|
|
54
|
+
"""
|
|
55
|
+
python_values = to_python_list(self._values)
|
|
56
|
+
|
|
57
|
+
return python_values
|
|
58
|
+
|
|
59
|
+
def to_value(self) -> Any:
|
|
60
|
+
"""
|
|
61
|
+
Return the single value of an Array holding exactly one value, as a Python value.
|
|
62
|
+
|
|
63
|
+
.. versionadded:: 0.1.0
|
|
64
|
+
|
|
65
|
+
Returns
|
|
66
|
+
-------
|
|
67
|
+
Any
|
|
68
|
+
The value, ``None`` for a missing date, datetime or duration.
|
|
69
|
+
|
|
70
|
+
Raises
|
|
71
|
+
------
|
|
72
|
+
NotSingleValueError
|
|
73
|
+
When the Array does not hold exactly one value.
|
|
74
|
+
|
|
75
|
+
Examples
|
|
76
|
+
--------
|
|
77
|
+
>>> import numdaplot as ndp
|
|
78
|
+
>>> ndp.Array.from_list([3, 1, 2]).compute(ndp.Max()).to_value()
|
|
79
|
+
3
|
|
80
|
+
"""
|
|
81
|
+
if self._values.size != SINGLE_VALUE_COUNT:
|
|
82
|
+
raise NotSingleValueError(self._values.size)
|
|
83
|
+
|
|
84
|
+
flat_values = self._values.reshape(FLAT_DIMENSIONS)
|
|
85
|
+
python_values = to_python_list(flat_values)
|
|
86
|
+
single_value = python_values[0]
|
|
87
|
+
|
|
88
|
+
return single_value
|
|
89
|
+
|
|
90
|
+
@checked_arguments
|
|
91
|
+
def is_equal(self, equality: Equality) -> bool:
|
|
92
|
+
"""
|
|
93
|
+
Return whether this Array and another one have the same shape and the same values.
|
|
94
|
+
|
|
95
|
+
Two missing values at the same position are equal.
|
|
96
|
+
|
|
97
|
+
.. versionadded:: 0.1.0
|
|
98
|
+
|
|
99
|
+
Parameters
|
|
100
|
+
----------
|
|
101
|
+
equality
|
|
102
|
+
The other Array, and whether the types must also be the same.
|
|
103
|
+
|
|
104
|
+
Returns
|
|
105
|
+
-------
|
|
106
|
+
bool
|
|
107
|
+
True when both Arrays are equal.
|
|
108
|
+
|
|
109
|
+
Raises
|
|
110
|
+
------
|
|
111
|
+
InvalidTypeError
|
|
112
|
+
When an argument is not of the type its annotation names.
|
|
113
|
+
|
|
114
|
+
Examples
|
|
115
|
+
--------
|
|
116
|
+
>>> import numdaplot as ndp
|
|
117
|
+
>>> integers = ndp.Array.from_list([1, 2])
|
|
118
|
+
>>> decimals = ndp.Array.from_list([1.0, 2.0])
|
|
119
|
+
>>> integers.is_equal(ndp.Equality(other=decimals))
|
|
120
|
+
True
|
|
121
|
+
"""
|
|
122
|
+
other = cast(object, equality.other)
|
|
123
|
+
if not isinstance(other, ArrayData):
|
|
124
|
+
raise InvalidTypeError(EQUALITY_TARGET, EQUALITY_EXPECTED, other)
|
|
125
|
+
|
|
126
|
+
other_values = other._values
|
|
127
|
+
is_equal = are_equal(self._values, other_values, equality.types)
|
|
128
|
+
|
|
129
|
+
return is_equal
|
|
130
|
+
|
|
131
|
+
def __repr__(self) -> str:
|
|
132
|
+
"""
|
|
133
|
+
Return the text of the Array: its values, then its type.
|
|
134
|
+
|
|
135
|
+
.. versionadded:: 0.1.0
|
|
136
|
+
|
|
137
|
+
Returns
|
|
138
|
+
-------
|
|
139
|
+
str
|
|
140
|
+
The text, such as ``Array([1, 2, 3], dtype=INT64)``.
|
|
141
|
+
|
|
142
|
+
Examples
|
|
143
|
+
--------
|
|
144
|
+
>>> import numdaplot as ndp
|
|
145
|
+
>>> ndp.Array.from_list(["a", "b"])
|
|
146
|
+
Array(['a', 'b'], dtype=TEXT)
|
|
147
|
+
"""
|
|
148
|
+
array_text = format_array(self._values)
|
|
149
|
+
|
|
150
|
+
return array_text
|