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