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,79 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a setting or an argument receives a value of the wrong type.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
TYPE_MESSAGE = "{target_name} expects {expected}, got {given!r}."
|
|
10
|
+
CLASS_GIVEN_MESSAGE = "ndp.{class_name} is a class, use ndp.{class_name}() instead."
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class InvalidTypeError(NumdaplotError):
|
|
14
|
+
"""
|
|
15
|
+
Raised when a setting or an argument receives a value of the wrong type, such as a number for ``Region`` rows.
|
|
16
|
+
|
|
17
|
+
A class given in place of an object, such as ``ndp.Sum`` in place of ``ndp.Sum()``, gets a message naming the
|
|
18
|
+
parentheses.
|
|
19
|
+
|
|
20
|
+
.. versionadded:: 0.1.0
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
target_name
|
|
25
|
+
What received the value, such as ``"Region rows"``.
|
|
26
|
+
expected
|
|
27
|
+
What it accepts, such as ``"an Index, a Range or None"``.
|
|
28
|
+
given
|
|
29
|
+
The rejected value.
|
|
30
|
+
|
|
31
|
+
Attributes
|
|
32
|
+
----------
|
|
33
|
+
target_name
|
|
34
|
+
What received the value.
|
|
35
|
+
expected
|
|
36
|
+
What it accepts.
|
|
37
|
+
given
|
|
38
|
+
The rejected value.
|
|
39
|
+
|
|
40
|
+
Examples
|
|
41
|
+
--------
|
|
42
|
+
>>> import numdaplot as ndp
|
|
43
|
+
>>> try:
|
|
44
|
+
... ndp.Region(rows=0)
|
|
45
|
+
... except ndp.InvalidTypeError as error:
|
|
46
|
+
... print(error)
|
|
47
|
+
Region rows expects an Index, a Range or None, got 0.
|
|
48
|
+
>>> try:
|
|
49
|
+
... ndp.Array.from_list([1, 2]).compute(ndp.Sum)
|
|
50
|
+
... except ndp.InvalidTypeError as error:
|
|
51
|
+
... print(error)
|
|
52
|
+
ndp.Sum is a class, use ndp.Sum() instead.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
def __init__(self, target_name: str, expected: str, given: object) -> None:
|
|
56
|
+
"""
|
|
57
|
+
Build the error message from what received the value, what it accepts and the rejected value.
|
|
58
|
+
|
|
59
|
+
.. versionadded:: 0.1.0
|
|
60
|
+
|
|
61
|
+
Parameters
|
|
62
|
+
----------
|
|
63
|
+
target_name
|
|
64
|
+
What received the value.
|
|
65
|
+
expected
|
|
66
|
+
What it accepts.
|
|
67
|
+
given
|
|
68
|
+
The rejected value.
|
|
69
|
+
"""
|
|
70
|
+
if isinstance(given, type):
|
|
71
|
+
message = CLASS_GIVEN_MESSAGE.format(class_name=given.__name__)
|
|
72
|
+
else:
|
|
73
|
+
message = TYPE_MESSAGE.format(target_name=target_name, expected=expected, given=given)
|
|
74
|
+
|
|
75
|
+
super().__init__(message)
|
|
76
|
+
|
|
77
|
+
self.target_name = target_name
|
|
78
|
+
self.expected = expected
|
|
79
|
+
self.given = given
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when nested lists do not form a regular block.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
IRREGULAR_LIST_MESSAGE = "Expected nested lists of equal lengths."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IrregularListError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when nested lists do not form a regular block of rows and columns.
|
|
15
|
+
|
|
16
|
+
The lists at one level have different lengths, or mix lists and single values.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Examples
|
|
21
|
+
--------
|
|
22
|
+
>>> import numdaplot as ndp
|
|
23
|
+
>>> try:
|
|
24
|
+
... ndp.Array.from_list([[1, 2], [3]])
|
|
25
|
+
... except ndp.IrregularListError as error:
|
|
26
|
+
... print(error)
|
|
27
|
+
Expected nested lists of equal lengths.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Build the error message.
|
|
33
|
+
|
|
34
|
+
.. versionadded:: 0.1.0
|
|
35
|
+
"""
|
|
36
|
+
super().__init__(IRREGULAR_LIST_MESSAGE)
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a key appears several times where a join expects it once.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
10
|
+
from numdaplot.errors.repeated_key import RepeatedKey
|
|
11
|
+
|
|
12
|
+
JOIN_RELATION_MESSAGE = (
|
|
13
|
+
"Expected each key of {table_name} to appear once for {relation_name}, but {key_names} {key_values} appears "
|
|
14
|
+
"{count} times."
|
|
15
|
+
)
|
|
16
|
+
VALUE_SEPARATOR = ", "
|
|
17
|
+
COMBINATION_FORMAT = "({joined_values})"
|
|
18
|
+
SINGLE_KEY_COUNT = 1
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class JoinRelationError(NumdaplotError):
|
|
22
|
+
"""
|
|
23
|
+
Raised when a key appears several times in a Table of a join whose ``Relation`` expects it once.
|
|
24
|
+
|
|
25
|
+
For example, ``Relation.ONE_TO_MANY`` expects each key once in the left Table, the one joined.
|
|
26
|
+
|
|
27
|
+
.. versionadded:: 0.1.0
|
|
28
|
+
|
|
29
|
+
Parameters
|
|
30
|
+
----------
|
|
31
|
+
relation_name
|
|
32
|
+
The relation checked, such as ``"Relation.ONE_TO_MANY"``.
|
|
33
|
+
table_name
|
|
34
|
+
The Table holding the repeated key: ``"the left Table"`` or ``"the right Table"``.
|
|
35
|
+
repeated_key
|
|
36
|
+
The first repeated key, its values and its number of rows.
|
|
37
|
+
|
|
38
|
+
Attributes
|
|
39
|
+
----------
|
|
40
|
+
relation_name
|
|
41
|
+
The relation checked.
|
|
42
|
+
table_name
|
|
43
|
+
The Table holding the repeated key.
|
|
44
|
+
repeated_key
|
|
45
|
+
The first repeated key, its values and its number of rows.
|
|
46
|
+
|
|
47
|
+
Examples
|
|
48
|
+
--------
|
|
49
|
+
>>> import numdaplot as ndp
|
|
50
|
+
>>> accidents = ndp.Table.from_arrays({"Num_Acc": ndp.Array.from_list([101, 101])})
|
|
51
|
+
>>> users = ndp.Table.from_arrays({"Num_Acc": ndp.Array.from_list([101])})
|
|
52
|
+
>>> try:
|
|
53
|
+
... accidents.join(ndp.Join(other=users, keys=["Num_Acc"], relation=ndp.Relation.ONE_TO_MANY))
|
|
54
|
+
... except ndp.JoinRelationError as error:
|
|
55
|
+
... print(error)
|
|
56
|
+
Expected each key of the left Table to appear once for Relation.ONE_TO_MANY, but 'Num_Acc' 101 appears 2 times.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
def __init__(self, relation_name: str, table_name: str, repeated_key: RepeatedKey) -> None:
|
|
60
|
+
"""
|
|
61
|
+
Build the error message from the relation, the Table and the repeated key.
|
|
62
|
+
|
|
63
|
+
.. versionadded:: 0.1.0
|
|
64
|
+
|
|
65
|
+
Parameters
|
|
66
|
+
----------
|
|
67
|
+
relation_name
|
|
68
|
+
The relation checked.
|
|
69
|
+
table_name
|
|
70
|
+
The Table holding the repeated key.
|
|
71
|
+
repeated_key
|
|
72
|
+
The first repeated key, its values and its number of rows.
|
|
73
|
+
"""
|
|
74
|
+
key_names = format_key_names(repeated_key.key_names)
|
|
75
|
+
key_values = format_key_values(repeated_key.key_values)
|
|
76
|
+
message = JOIN_RELATION_MESSAGE.format(
|
|
77
|
+
table_name=table_name,
|
|
78
|
+
relation_name=relation_name,
|
|
79
|
+
key_names=key_names,
|
|
80
|
+
key_values=key_values,
|
|
81
|
+
count=repeated_key.count,
|
|
82
|
+
)
|
|
83
|
+
super().__init__(message)
|
|
84
|
+
|
|
85
|
+
self.relation_name = relation_name
|
|
86
|
+
self.table_name = table_name
|
|
87
|
+
self.repeated_key = repeated_key
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def format_key_names(key_names: list[str]) -> str:
|
|
91
|
+
"""
|
|
92
|
+
Return the names of the key columns as written in the message: one name, or the combination of several.
|
|
93
|
+
|
|
94
|
+
.. versionadded:: 0.1.0
|
|
95
|
+
|
|
96
|
+
Parameters
|
|
97
|
+
----------
|
|
98
|
+
key_names
|
|
99
|
+
The names of the key columns.
|
|
100
|
+
|
|
101
|
+
Returns
|
|
102
|
+
-------
|
|
103
|
+
str
|
|
104
|
+
``'Num_Acc'`` for one key, ``('Num_Acc', 'id_vehicule')`` for several.
|
|
105
|
+
|
|
106
|
+
Examples
|
|
107
|
+
--------
|
|
108
|
+
>>> from numdaplot.errors.join_relation_error import format_key_names
|
|
109
|
+
>>> format_key_names(["Num_Acc"]), format_key_names(["Num_Acc", "id_vehicule"])
|
|
110
|
+
("'Num_Acc'", "('Num_Acc', 'id_vehicule')")
|
|
111
|
+
"""
|
|
112
|
+
quoted_names = [repr(key_name) for key_name in key_names]
|
|
113
|
+
names_text = format_combination(quoted_names)
|
|
114
|
+
|
|
115
|
+
return names_text
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def format_key_values(key_values: list[Any]) -> str:
|
|
119
|
+
"""
|
|
120
|
+
Return the values of a key as written in the message, texts in quotes.
|
|
121
|
+
|
|
122
|
+
.. versionadded:: 0.1.0
|
|
123
|
+
|
|
124
|
+
Parameters
|
|
125
|
+
----------
|
|
126
|
+
key_values
|
|
127
|
+
The value of each key column.
|
|
128
|
+
|
|
129
|
+
Returns
|
|
130
|
+
-------
|
|
131
|
+
str
|
|
132
|
+
``202500000001`` for one key, ``(202500000001, 'A01')`` for several.
|
|
133
|
+
|
|
134
|
+
Examples
|
|
135
|
+
--------
|
|
136
|
+
>>> from numdaplot.errors.join_relation_error import format_key_values
|
|
137
|
+
>>> format_key_values([202500000001, "A01"])
|
|
138
|
+
"(202500000001, 'A01')"
|
|
139
|
+
"""
|
|
140
|
+
value_texts = list[str]()
|
|
141
|
+
|
|
142
|
+
for key_value in key_values:
|
|
143
|
+
value_text = str(key_value)
|
|
144
|
+
if isinstance(key_value, str):
|
|
145
|
+
value_text = repr(key_value)
|
|
146
|
+
|
|
147
|
+
value_texts.append(value_text)
|
|
148
|
+
|
|
149
|
+
values_text = format_combination(value_texts)
|
|
150
|
+
|
|
151
|
+
return values_text
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def format_combination(texts: list[str]) -> str:
|
|
155
|
+
"""
|
|
156
|
+
Return a single text as it is, or several texts between parentheses.
|
|
157
|
+
|
|
158
|
+
.. versionadded:: 0.1.0
|
|
159
|
+
|
|
160
|
+
Parameters
|
|
161
|
+
----------
|
|
162
|
+
texts
|
|
163
|
+
The text of each key column.
|
|
164
|
+
|
|
165
|
+
Returns
|
|
166
|
+
-------
|
|
167
|
+
str
|
|
168
|
+
The single text, or the texts separated by commas between parentheses.
|
|
169
|
+
|
|
170
|
+
Examples
|
|
171
|
+
--------
|
|
172
|
+
>>> from numdaplot.errors.join_relation_error import format_combination
|
|
173
|
+
>>> format_combination(["101"]), format_combination(["101", "'A01'"])
|
|
174
|
+
('101', "(101, 'A01')")
|
|
175
|
+
"""
|
|
176
|
+
text_count = len(texts)
|
|
177
|
+
if text_count == SINGLE_KEY_COUNT:
|
|
178
|
+
return texts[0]
|
|
179
|
+
|
|
180
|
+
joined_values = VALUE_SEPARATOR.join(texts)
|
|
181
|
+
combination = COMBINATION_FORMAT.format(joined_values=joined_values)
|
|
182
|
+
|
|
183
|
+
return combination
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a file format needs an optional package that is not installed.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
MISSING_DEPENDENCY_MESSAGE = (
|
|
10
|
+
"This file format needs the {package_name} package, install it with: pip install numdaplot[{extra_name}]"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class MissingDependencyError(NumdaplotError):
|
|
15
|
+
"""
|
|
16
|
+
Raised when reading or writing Excel or Parquet files without the matching optional package.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Parameters
|
|
21
|
+
----------
|
|
22
|
+
package_name
|
|
23
|
+
Name of the missing package, such as ``openpyxl``.
|
|
24
|
+
extra_name
|
|
25
|
+
Name of the numdaplot extra that installs it, such as ``excel``.
|
|
26
|
+
|
|
27
|
+
Attributes
|
|
28
|
+
----------
|
|
29
|
+
package_name
|
|
30
|
+
Name of the missing package, such as ``openpyxl``.
|
|
31
|
+
extra_name
|
|
32
|
+
Name of the numdaplot extra that installs it, such as ``excel``.
|
|
33
|
+
|
|
34
|
+
Examples
|
|
35
|
+
--------
|
|
36
|
+
>>> import numdaplot as ndp
|
|
37
|
+
>>> print(ndp.MissingDependencyError("openpyxl", "excel"))
|
|
38
|
+
This file format needs the openpyxl package, install it with: pip install numdaplot[excel]
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
def __init__(self, package_name: str, extra_name: str) -> None:
|
|
42
|
+
"""
|
|
43
|
+
Build the error message from the package name and the extra name.
|
|
44
|
+
|
|
45
|
+
.. versionadded:: 0.1.0
|
|
46
|
+
|
|
47
|
+
Parameters
|
|
48
|
+
----------
|
|
49
|
+
package_name
|
|
50
|
+
Name of the missing package, such as ``openpyxl``.
|
|
51
|
+
extra_name
|
|
52
|
+
Name of the numdaplot extra that installs it, such as ``excel``.
|
|
53
|
+
"""
|
|
54
|
+
message = MISSING_DEPENDENCY_MESSAGE.format(package_name=package_name, extra_name=extra_name)
|
|
55
|
+
super().__init__(message)
|
|
56
|
+
|
|
57
|
+
self.package_name = package_name
|
|
58
|
+
self.extra_name = extra_name
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when the type of an Array cannot be guessed.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
MISSING_TYPE_MESSAGE = "Cannot guess the type of an Array without any present value, give dtype."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class MissingTypeError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when the type of a new Array cannot be guessed.
|
|
15
|
+
|
|
16
|
+
The Array is created without any present value and without ``dtype``.
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.1.0
|
|
19
|
+
|
|
20
|
+
Examples
|
|
21
|
+
--------
|
|
22
|
+
>>> import numdaplot as ndp
|
|
23
|
+
>>> try:
|
|
24
|
+
... ndp.Array.from_list([])
|
|
25
|
+
... except ndp.MissingTypeError as error:
|
|
26
|
+
... print(error)
|
|
27
|
+
Cannot guess the type of an Array without any present value, give dtype.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Build the error message.
|
|
33
|
+
|
|
34
|
+
.. versionadded:: 0.1.0
|
|
35
|
+
"""
|
|
36
|
+
super().__init__(MISSING_TYPE_MESSAGE)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a chart cannot draw a missing value.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
MISSING_VALUE_MESSAGE = "{chart_name} cannot draw a missing value, found one in {column_name!r}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class MissingValueError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a column drawn by a chart that needs every value, such as a ``PieChart``, has a missing value.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
chart_name
|
|
21
|
+
Name of the chart class, such as ``PieChart``.
|
|
22
|
+
column_name
|
|
23
|
+
The column holding the missing value.
|
|
24
|
+
|
|
25
|
+
Attributes
|
|
26
|
+
----------
|
|
27
|
+
chart_name
|
|
28
|
+
Name of the chart class, such as ``PieChart``.
|
|
29
|
+
column_name
|
|
30
|
+
The column holding the missing value.
|
|
31
|
+
|
|
32
|
+
Examples
|
|
33
|
+
--------
|
|
34
|
+
>>> import numdaplot as ndp
|
|
35
|
+
>>> cities = ndp.Array.from_list(["Paris", "Lyon"])
|
|
36
|
+
>>> sales = ndp.Array.from_list([120.0, None])
|
|
37
|
+
>>> shares = ndp.Table.from_arrays({"city": cities, "sales": sales})
|
|
38
|
+
>>> chart = ndp.PieChart(labels="city", values="sales")
|
|
39
|
+
>>> try:
|
|
40
|
+
... ndp.Plot.pie(shares, chart)
|
|
41
|
+
... except ndp.MissingValueError as error:
|
|
42
|
+
... print(error)
|
|
43
|
+
PieChart cannot draw a missing value, found one in 'sales'.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
def __init__(self, chart_name: str, column_name: str) -> None:
|
|
47
|
+
"""
|
|
48
|
+
Build the error message from the chart and the column.
|
|
49
|
+
|
|
50
|
+
.. versionadded:: 0.1.0
|
|
51
|
+
|
|
52
|
+
Parameters
|
|
53
|
+
----------
|
|
54
|
+
chart_name
|
|
55
|
+
Name of the chart class, such as ``PieChart``.
|
|
56
|
+
column_name
|
|
57
|
+
The column holding the missing value.
|
|
58
|
+
"""
|
|
59
|
+
message = MISSING_VALUE_MESSAGE.format(chart_name=chart_name, column_name=column_name)
|
|
60
|
+
super().__init__(message)
|
|
61
|
+
self.chart_name = chart_name
|
|
62
|
+
self.column_name = column_name
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a single value is asked from an Array holding another number of values.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
NOT_SINGLE_VALUE_MESSAGE = "Expected exactly one value, got {value_count}."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class NotSingleValueError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when ``to_value`` is called on an Array that does not hold exactly one value.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
value_count
|
|
21
|
+
Number of values held by the Array.
|
|
22
|
+
|
|
23
|
+
Attributes
|
|
24
|
+
----------
|
|
25
|
+
value_count
|
|
26
|
+
Number of values held by the Array.
|
|
27
|
+
|
|
28
|
+
Examples
|
|
29
|
+
--------
|
|
30
|
+
>>> import numdaplot as ndp
|
|
31
|
+
>>> array = ndp.Array.from_list([1, 2])
|
|
32
|
+
>>> try:
|
|
33
|
+
... array.to_value()
|
|
34
|
+
... except ndp.NotSingleValueError as error:
|
|
35
|
+
... print(error)
|
|
36
|
+
Expected exactly one value, got 2.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, value_count: int) -> None:
|
|
40
|
+
"""
|
|
41
|
+
Build the error message from the value count.
|
|
42
|
+
|
|
43
|
+
.. versionadded:: 0.1.0
|
|
44
|
+
|
|
45
|
+
Parameters
|
|
46
|
+
----------
|
|
47
|
+
value_count
|
|
48
|
+
Number of values held by the Array.
|
|
49
|
+
"""
|
|
50
|
+
message = NOT_SINGLE_VALUE_MESSAGE.format(value_count=value_count)
|
|
51
|
+
super().__init__(message)
|
|
52
|
+
|
|
53
|
+
self.value_count = value_count
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Base class of every numdaplot error.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class NumdaplotError(Exception):
|
|
9
|
+
"""
|
|
10
|
+
Base class of every error raised by numdaplot.
|
|
11
|
+
|
|
12
|
+
Catch it to handle any numdaplot error at once, or catch a precise subclass
|
|
13
|
+
to handle only one case.
|
|
14
|
+
|
|
15
|
+
.. versionadded:: 0.1.0
|
|
16
|
+
|
|
17
|
+
Examples
|
|
18
|
+
--------
|
|
19
|
+
>>> import numdaplot as ndp
|
|
20
|
+
>>> try:
|
|
21
|
+
... ndp.Quantile(1.5)
|
|
22
|
+
... except ndp.NumdaplotError as error:
|
|
23
|
+
... print(error)
|
|
24
|
+
Expected a fraction between 0 and 1, got 1.5.
|
|
25
|
+
"""
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Base class of every numdaplot warning.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class NumdaplotWarning(UserWarning):
|
|
9
|
+
"""
|
|
10
|
+
Base class of every warning emitted by numdaplot.
|
|
11
|
+
|
|
12
|
+
Filter it with the standard ``warnings`` module to silence, or turn into errors, every numdaplot warning at once
|
|
13
|
+
and only them. Filter a precise subclass to handle only one case.
|
|
14
|
+
|
|
15
|
+
.. versionadded:: 0.1.0
|
|
16
|
+
|
|
17
|
+
Examples
|
|
18
|
+
--------
|
|
19
|
+
>>> import numdaplot as ndp
|
|
20
|
+
>>> import warnings
|
|
21
|
+
>>> distances = ndp.Array.from_list([0.0, 3.0])
|
|
22
|
+
>>> hours = ndp.Array.from_list([0.0, 2.0])
|
|
23
|
+
>>> with warnings.catch_warnings(record=True) as caught_warnings:
|
|
24
|
+
... warnings.simplefilter("always")
|
|
25
|
+
... speeds = distances / hours
|
|
26
|
+
>>> isinstance(caught_warnings[0].message, ndp.NumdaplotWarning)
|
|
27
|
+
True
|
|
28
|
+
>>> with warnings.catch_warnings(record=True) as caught_warnings:
|
|
29
|
+
... warnings.simplefilter("always")
|
|
30
|
+
... warnings.simplefilter("ignore", ndp.NumdaplotWarning)
|
|
31
|
+
... speeds = distances / hours
|
|
32
|
+
>>> caught_warnings
|
|
33
|
+
[]
|
|
34
|
+
"""
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a Plot is placed on a cell of a Figure that already holds one.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
OCCUPIED_CELL_MESSAGE = "Cell ({row}, {column}) already holds a Plot."
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class OccupiedCellError(NumdaplotError):
|
|
13
|
+
"""
|
|
14
|
+
Raised when a Plot is placed on a cell of a ``Figure`` already covered by another Plot, even partly.
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.1.0
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
row
|
|
21
|
+
The row of the first occupied cell, from 0.
|
|
22
|
+
column
|
|
23
|
+
The column of the first occupied cell, from 0.
|
|
24
|
+
|
|
25
|
+
Attributes
|
|
26
|
+
----------
|
|
27
|
+
row
|
|
28
|
+
The row of the first occupied cell, from 0.
|
|
29
|
+
column
|
|
30
|
+
The column of the first occupied cell, from 0.
|
|
31
|
+
|
|
32
|
+
Examples
|
|
33
|
+
--------
|
|
34
|
+
>>> import numdaplot as ndp
|
|
35
|
+
>>> prices = ndp.Array.from_list([12.0, 15.5, 14.0])
|
|
36
|
+
>>> plot = ndp.Plot.line(prices)
|
|
37
|
+
>>> figure = ndp.Figure(ndp.Layout(rows=1, columns=2))
|
|
38
|
+
>>> first_cell = ndp.Cell(row=0, column=0)
|
|
39
|
+
>>> figure = figure.place(plot, first_cell)
|
|
40
|
+
>>> try:
|
|
41
|
+
... figure.place(plot, first_cell)
|
|
42
|
+
... except ndp.OccupiedCellError as error:
|
|
43
|
+
... print(error)
|
|
44
|
+
Cell (0, 0) already holds a Plot.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
def __init__(self, row: int, column: int) -> None:
|
|
48
|
+
"""
|
|
49
|
+
Build the error message from the occupied cell.
|
|
50
|
+
|
|
51
|
+
.. versionadded:: 0.1.0
|
|
52
|
+
|
|
53
|
+
Parameters
|
|
54
|
+
----------
|
|
55
|
+
row
|
|
56
|
+
The row of the first occupied cell, from 0.
|
|
57
|
+
column
|
|
58
|
+
The column of the first occupied cell, from 0.
|
|
59
|
+
"""
|
|
60
|
+
message = OCCUPIED_CELL_MESSAGE.format(row=row, column=column)
|
|
61
|
+
super().__init__(message)
|
|
62
|
+
self.row = row
|
|
63
|
+
self.column = column
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Error raised when a math function is applied to a value it is not defined for.
|
|
3
|
+
|
|
4
|
+
.. versionadded:: 0.1.0
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from numdaplot.errors.numdaplot_error import NumdaplotError
|
|
8
|
+
|
|
9
|
+
OUT_OF_DOMAIN_MESSAGE = "{function_name} is not defined for {value}."
|
|
10
|
+
BETWEEN_INTEGERS_MESSAGE = (
|
|
11
|
+
"{function_name} is not defined for {value} between integers. Convert the values to FLOAT64 first."
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class OutOfDomainError(NumdaplotError):
|
|
16
|
+
"""
|
|
17
|
+
Raised when a math function or an operator receives a value it is not defined for.
|
|
18
|
+
|
|
19
|
+
For example, the square root of a negative number, the logarithm of 0, or an integer divided by 0 with ``//``.
|
|
20
|
+
|
|
21
|
+
.. versionadded:: 0.1.0
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
function_name
|
|
26
|
+
Name of the math function.
|
|
27
|
+
value
|
|
28
|
+
The first value outside the domain of the function.
|
|
29
|
+
between_integers
|
|
30
|
+
True when decimals would accept the value, False by default.
|
|
31
|
+
|
|
32
|
+
Attributes
|
|
33
|
+
----------
|
|
34
|
+
function_name
|
|
35
|
+
Name of the math function.
|
|
36
|
+
value
|
|
37
|
+
The first value outside the domain of the function.
|
|
38
|
+
|
|
39
|
+
Examples
|
|
40
|
+
--------
|
|
41
|
+
>>> import numdaplot as ndp
|
|
42
|
+
>>> array = ndp.Array.from_list([4, -9])
|
|
43
|
+
>>> try:
|
|
44
|
+
... array.apply(ndp.SquareRoot())
|
|
45
|
+
... except ndp.OutOfDomainError as error:
|
|
46
|
+
... print(error)
|
|
47
|
+
SquareRoot is not defined for -9.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
def __init__(self, function_name: str, value: float, between_integers: bool = False) -> None:
|
|
51
|
+
"""
|
|
52
|
+
Build the error message from the function name and the value.
|
|
53
|
+
|
|
54
|
+
.. versionadded:: 0.1.0
|
|
55
|
+
|
|
56
|
+
Parameters
|
|
57
|
+
----------
|
|
58
|
+
function_name
|
|
59
|
+
Name of the math function.
|
|
60
|
+
value
|
|
61
|
+
The first value outside the domain of the function.
|
|
62
|
+
between_integers
|
|
63
|
+
True when decimals would accept the value, False by default.
|
|
64
|
+
"""
|
|
65
|
+
message_format = BETWEEN_INTEGERS_MESSAGE if between_integers else OUT_OF_DOMAIN_MESSAGE
|
|
66
|
+
message = message_format.format(function_name=function_name, value=value)
|
|
67
|
+
super().__init__(message)
|
|
68
|
+
|
|
69
|
+
self.function_name = function_name
|
|
70
|
+
self.value = value
|