numdaplot 0.1.0__tar.gz
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-0.1.0/.github/workflows/checks.yml +47 -0
- numdaplot-0.1.0/.github/workflows/release.yml +141 -0
- numdaplot-0.1.0/.gitignore +10 -0
- numdaplot-0.1.0/CHANGELOG.md +144 -0
- numdaplot-0.1.0/LICENSE +28 -0
- numdaplot-0.1.0/PKG-INFO +176 -0
- numdaplot-0.1.0/README.md +150 -0
- numdaplot-0.1.0/conftest.py +167 -0
- numdaplot-0.1.0/docs/changelog.md +1 -0
- numdaplot-0.1.0/docs/index.md +1 -0
- numdaplot-0.1.0/docs/stylesheets/symbols.css +232 -0
- numdaplot-0.1.0/mkdocs.yml +93 -0
- numdaplot-0.1.0/pyproject.toml +89 -0
- numdaplot-0.1.0/release_notes.md +136 -0
- numdaplot-0.1.0/run_tests.py +37 -0
- numdaplot-0.1.0/src/numdaplot/__init__.py +506 -0
- numdaplot-0.1.0/src/numdaplot/arrays/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array.py +92 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_arithmetic.py +404 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_calculation.py +143 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_conversion.py +150 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_creation.py +371 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_data.py +281 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_layout.py +179 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_logic.py +227 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_reflected_arithmetic.py +334 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_refusals.py +339 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_selection.py +195 -0
- numdaplot-0.1.0/src/numdaplot/arrays/array_sorting.py +59 -0
- numdaplot-0.1.0/src/numdaplot/arrays/axis_number.py +58 -0
- numdaplot-0.1.0/src/numdaplot/arrays/calculation/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/arrays/calculation/counting_statistics.py +325 -0
- numdaplot-0.1.0/src/numdaplot/arrays/calculation/location_statistics.py +268 -0
- numdaplot-0.1.0/src/numdaplot/arrays/calculation/math_function_values.py +183 -0
- numdaplot-0.1.0/src/numdaplot/arrays/calculation/statistic_values.py +209 -0
- numdaplot-0.1.0/src/numdaplot/arrays/calculation/time_function_values.py +419 -0
- numdaplot-0.1.0/src/numdaplot/arrays/conversion/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/arrays/conversion/array_text.py +62 -0
- numdaplot-0.1.0/src/numdaplot/arrays/conversion/equality_check.py +72 -0
- numdaplot-0.1.0/src/numdaplot/arrays/conversion/python_values.py +70 -0
- numdaplot-0.1.0/src/numdaplot/arrays/conversion/time_text.py +290 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/date_parts.py +89 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/date_parts_values.py +437 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/distribution.py +54 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/filled_values.py +58 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/list_conversion.py +311 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/list_shape.py +97 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/normal.py +65 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/numpy_conversion.py +149 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/random_integers.py +104 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/random_values.py +97 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/range_values.py +73 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/spacing.py +84 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/spacing_values.py +63 -0
- numdaplot-0.1.0/src/numdaplot/arrays/creation/uniform.py +63 -0
- numdaplot-0.1.0/src/numdaplot/arrays/equality.py +68 -0
- numdaplot-0.1.0/src/numdaplot/arrays/layout/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/arrays/layout/sorting_values.py +113 -0
- numdaplot-0.1.0/src/numdaplot/arrays/layout/unique_values.py +49 -0
- numdaplot-0.1.0/src/numdaplot/arrays/mapping/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/arrays/mapping/mapped_values.py +286 -0
- numdaplot-0.1.0/src/numdaplot/arrays/mapping/unmatched.py +50 -0
- numdaplot-0.1.0/src/numdaplot/arrays/mapping/value_change.py +55 -0
- numdaplot-0.1.0/src/numdaplot/arrays/mapping/value_mapping.py +161 -0
- numdaplot-0.1.0/src/numdaplot/arrays/math_functions/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/arrays/math_functions/absolute.py +27 -0
- numdaplot-0.1.0/src/numdaplot/arrays/math_functions/cosine.py +28 -0
- numdaplot-0.1.0/src/numdaplot/arrays/math_functions/exponential.py +27 -0
- numdaplot-0.1.0/src/numdaplot/arrays/math_functions/logarithm.py +72 -0
- numdaplot-0.1.0/src/numdaplot/arrays/math_functions/math_function.py +58 -0
- numdaplot-0.1.0/src/numdaplot/arrays/math_functions/round.py +58 -0
- numdaplot-0.1.0/src/numdaplot/arrays/math_functions/sine.py +28 -0
- numdaplot-0.1.0/src/numdaplot/arrays/math_functions/square_root.py +27 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/boolean_operands.py +48 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/combination.py +157 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/float_errors.py +170 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/integer_bounds.py +175 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/integer_rules.py +397 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/operand.py +139 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/time_arithmetic.py +479 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/time_bounds.py +286 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/time_result_bounds.py +397 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/transformation.py +54 -0
- numdaplot-0.1.0/src/numdaplot/arrays/operations/type_requirements.py +94 -0
- numdaplot-0.1.0/src/numdaplot/arrays/replacement.py +66 -0
- numdaplot-0.1.0/src/numdaplot/arrays/selection/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/arrays/selection/comparison_masks.py +131 -0
- numdaplot-0.1.0/src/numdaplot/arrays/selection/membership_masks.py +118 -0
- numdaplot-0.1.0/src/numdaplot/arrays/selection/missing_mask.py +50 -0
- numdaplot-0.1.0/src/numdaplot/arrays/selection/region_index.py +178 -0
- numdaplot-0.1.0/src/numdaplot/arrays/selection/replaced_values.py +120 -0
- numdaplot-0.1.0/src/numdaplot/arrays/selection/rule_mask.py +83 -0
- numdaplot-0.1.0/src/numdaplot/arrays/selection/time_reference.py +172 -0
- numdaplot-0.1.0/src/numdaplot/arrays/shape.py +74 -0
- numdaplot-0.1.0/src/numdaplot/arrays/type_match.py +51 -0
- numdaplot-0.1.0/src/numdaplot/data_types/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/data_types/library.py +57 -0
- numdaplot-0.1.0/src/numdaplot/data_types/numpy_mapping.py +207 -0
- numdaplot-0.1.0/src/numdaplot/data_types/pandas_mapping.py +114 -0
- numdaplot-0.1.0/src/numdaplot/data_types/time_of_day.py +292 -0
- numdaplot-0.1.0/src/numdaplot/data_types/type.py +224 -0
- numdaplot-0.1.0/src/numdaplot/data_types/value_family.py +149 -0
- numdaplot-0.1.0/src/numdaplot/data_types/value_type.py +147 -0
- numdaplot-0.1.0/src/numdaplot/dates/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/dates/custom_date_format.py +83 -0
- numdaplot-0.1.0/src/numdaplot/dates/date_format.py +120 -0
- numdaplot-0.1.0/src/numdaplot/dates/date_part.py +59 -0
- numdaplot-0.1.0/src/numdaplot/dates/date_part_unit.py +153 -0
- numdaplot-0.1.0/src/numdaplot/dates/date_period.py +57 -0
- numdaplot-0.1.0/src/numdaplot/dates/duration_in.py +58 -0
- numdaplot-0.1.0/src/numdaplot/dates/duration_unit.py +90 -0
- numdaplot-0.1.0/src/numdaplot/dates/period_unit.py +101 -0
- numdaplot-0.1.0/src/numdaplot/dates/time_function.py +56 -0
- numdaplot-0.1.0/src/numdaplot/dates/time_zone.py +68 -0
- numdaplot-0.1.0/src/numdaplot/dates/time_zone_change.py +71 -0
- numdaplot-0.1.0/src/numdaplot/dates/time_zone_mode.py +81 -0
- numdaplot-0.1.0/src/numdaplot/dates/to_duration.py +58 -0
- numdaplot-0.1.0/src/numdaplot/errors/__init__.py +7 -0
- numdaplot-0.1.0/src/numdaplot/errors/broadcast_warning.py +36 -0
- numdaplot-0.1.0/src/numdaplot/errors/calculation_warning.py +35 -0
- numdaplot-0.1.0/src/numdaplot/errors/cell_out_of_range_error.py +77 -0
- numdaplot-0.1.0/src/numdaplot/errors/column_not_found_error.py +64 -0
- numdaplot-0.1.0/src/numdaplot/errors/conflicting_settings_error.py +60 -0
- numdaplot-0.1.0/src/numdaplot/errors/dimension_error.py +62 -0
- numdaplot-0.1.0/src/numdaplot/errors/display_warning.py +32 -0
- numdaplot-0.1.0/src/numdaplot/errors/duplicate_column_error.py +82 -0
- numdaplot-0.1.0/src/numdaplot/errors/duplicate_label_error.py +55 -0
- numdaplot-0.1.0/src/numdaplot/errors/duplicate_statistic_error.py +55 -0
- numdaplot-0.1.0/src/numdaplot/errors/duplicate_value_error.py +54 -0
- numdaplot-0.1.0/src/numdaplot/errors/empty_array_error.py +55 -0
- numdaplot-0.1.0/src/numdaplot/errors/empty_list_error.py +52 -0
- numdaplot-0.1.0/src/numdaplot/errors/empty_region_error.py +34 -0
- numdaplot-0.1.0/src/numdaplot/errors/empty_text_error.py +34 -0
- numdaplot-0.1.0/src/numdaplot/errors/empty_total_error.py +62 -0
- numdaplot-0.1.0/src/numdaplot/errors/empty_values_error.py +34 -0
- numdaplot-0.1.0/src/numdaplot/errors/file_access_error.py +70 -0
- numdaplot-0.1.0/src/numdaplot/errors/file_exists_error.py +62 -0
- numdaplot-0.1.0/src/numdaplot/errors/file_not_found_error.py +56 -0
- numdaplot-0.1.0/src/numdaplot/errors/incompatible_charts_error.py +80 -0
- numdaplot-0.1.0/src/numdaplot/errors/incompatible_types_error.py +104 -0
- numdaplot-0.1.0/src/numdaplot/errors/integer_overflow_error.py +61 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_base_error.py +52 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_bin_width_error.py +66 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_bounds_error.py +58 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_chart_data_error.py +81 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_color_count_error.py +63 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_color_error.py +51 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_column_name_error.py +52 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_conversion_error.py +119 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_count_error.py +61 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_date_format_error.py +51 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_deviation_error.py +52 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_fraction_error.py +51 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_label_count_error.py +61 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_limits_error.py +111 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_opacity_error.py +52 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_point_size_error.py +52 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_position_error.py +106 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_resolution_error.py +51 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_rotation_error.py +53 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_seed_error.py +53 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_separator_error.py +52 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_shape_error.py +52 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_sheet_name_error.py +54 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_size_error.py +58 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_step_error.py +77 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_suffixes_error.py +61 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_time_zone_change_error.py +63 -0
- numdaplot-0.1.0/src/numdaplot/errors/invalid_type_error.py +79 -0
- numdaplot-0.1.0/src/numdaplot/errors/irregular_list_error.py +36 -0
- numdaplot-0.1.0/src/numdaplot/errors/join_relation_error.py +183 -0
- numdaplot-0.1.0/src/numdaplot/errors/missing_dependency_error.py +58 -0
- numdaplot-0.1.0/src/numdaplot/errors/missing_type_error.py +36 -0
- numdaplot-0.1.0/src/numdaplot/errors/missing_value_error.py +62 -0
- numdaplot-0.1.0/src/numdaplot/errors/not_single_value_error.py +53 -0
- numdaplot-0.1.0/src/numdaplot/errors/numdaplot_error.py +25 -0
- numdaplot-0.1.0/src/numdaplot/errors/numdaplot_warning.py +34 -0
- numdaplot-0.1.0/src/numdaplot/errors/occupied_cell_error.py +63 -0
- numdaplot-0.1.0/src/numdaplot/errors/out_of_domain_error.py +70 -0
- numdaplot-0.1.0/src/numdaplot/errors/readability_warning.py +35 -0
- numdaplot-0.1.0/src/numdaplot/errors/refused_operation_error.py +64 -0
- numdaplot-0.1.0/src/numdaplot/errors/refused_setting_error.py +60 -0
- numdaplot-0.1.0/src/numdaplot/errors/rejected_dates.py +60 -0
- numdaplot-0.1.0/src/numdaplot/errors/repeated_key.py +36 -0
- numdaplot-0.1.0/src/numdaplot/errors/shape_mismatch_error.py +67 -0
- numdaplot-0.1.0/src/numdaplot/errors/time_overflow_error.py +131 -0
- numdaplot-0.1.0/src/numdaplot/errors/time_zone_mismatch_error.py +83 -0
- numdaplot-0.1.0/src/numdaplot/errors/unknown_time_zone_error.py +51 -0
- numdaplot-0.1.0/src/numdaplot/errors/unmatched_value_error.py +81 -0
- numdaplot-0.1.0/src/numdaplot/errors/unsupported_image_format_error.py +56 -0
- numdaplot-0.1.0/src/numdaplot/errors/unsupported_index_error.py +38 -0
- numdaplot-0.1.0/src/numdaplot/errors/unsupported_missing_error.py +129 -0
- numdaplot-0.1.0/src/numdaplot/errors/unsupported_type_error.py +62 -0
- numdaplot-0.1.0/src/numdaplot/errors/value_conversion_error.py +215 -0
- numdaplot-0.1.0/src/numdaplot/ordering/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/ordering/missing_position.py +46 -0
- numdaplot-0.1.0/src/numdaplot/ordering/order.py +46 -0
- numdaplot-0.1.0/src/numdaplot/package_version.py +36 -0
- numdaplot-0.1.0/src/numdaplot/plots/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/plots/chart_layer.py +47 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/bar_chart.py +98 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/bar_layout.py +58 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/bin_count.py +61 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/bin_width.py +78 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/box_chart.py +97 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/cell_values.py +61 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/chart.py +59 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/chart_settings.py +105 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/color_scale.py +147 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/heatmap_chart.py +92 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/histogram_chart.py +93 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/line_chart.py +100 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/line_type.py +75 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/marker_shape.py +113 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/missing_chart.py +60 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/missing_map_chart.py +27 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/orientation.py +58 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/outliers.py +49 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/percentages.py +55 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/pie_chart.py +87 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/scatter_chart.py +159 -0
- numdaplot-0.1.0/src/numdaplot/plots/charts/value_axis.py +66 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/array_values.py +128 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/chart_data.py +143 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/chart_values.py +109 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/column_reading.py +468 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/heatmap_values.py +63 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/missing_cells.py +165 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/pie_values.py +215 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/point_values.py +249 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/position_kind.py +83 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/renamed_layers.py +340 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/sample_values.py +160 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/shown_columns.py +248 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/table_values.py +256 -0
- numdaplot-0.1.0/src/numdaplot/plots/data/unique_labels.py +45 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/bar_drawing.py +316 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/box_drawing.py +344 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/cell_merging.py +237 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/chart_texts.py +124 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/color_bar.py +57 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/color_scale_values.py +120 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/default_labels.py +41 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/drawn_chart.py +50 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/grid_axes.py +75 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/heatmap_drawing.py +313 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/histogram_drawing.py +350 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/label_room.py +344 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/label_thinning.py +216 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/layer_alignment.py +319 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/layer_colors.py +123 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/line_drawing.py +85 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/marker_codes.py +20 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/missing_drawing.py +360 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/moment_period_formatter.py +253 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/pie_drawing.py +185 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/plot_axes.py +38 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/plot_drawing.py +288 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/plot_theme.py +45 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/position_axis.py +278 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/scatter_drawing.py +364 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/series_colors.py +177 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/size_inches.py +45 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/style_drawing.py +410 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/text_contrast.py +44 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/tick_rotation.py +354 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/time_axis.py +212 -0
- numdaplot-0.1.0/src/numdaplot/plots/drawing/whole_numbers.py +72 -0
- numdaplot-0.1.0/src/numdaplot/plots/figure/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/plots/figure/cell.py +95 -0
- numdaplot-0.1.0/src/numdaplot/plots/figure/figure.py +256 -0
- numdaplot-0.1.0/src/numdaplot/plots/figure/figure_drawing.py +99 -0
- numdaplot-0.1.0/src/numdaplot/plots/figure/figure_style.py +60 -0
- numdaplot-0.1.0/src/numdaplot/plots/figure/layout.py +71 -0
- numdaplot-0.1.0/src/numdaplot/plots/figure/placement.py +150 -0
- numdaplot-0.1.0/src/numdaplot/plots/layer_reading.py +166 -0
- numdaplot-0.1.0/src/numdaplot/plots/output/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/plots/output/image_saving.py +187 -0
- numdaplot-0.1.0/src/numdaplot/plots/output/plot_display.py +181 -0
- numdaplot-0.1.0/src/numdaplot/plots/output/shown_object.py +45 -0
- numdaplot-0.1.0/src/numdaplot/plots/overlay_checks.py +245 -0
- numdaplot-0.1.0/src/numdaplot/plots/plot.py +31 -0
- numdaplot-0.1.0/src/numdaplot/plots/plot_data.py +140 -0
- numdaplot-0.1.0/src/numdaplot/plots/plot_distribution_creation.py +237 -0
- numdaplot-0.1.0/src/numdaplot/plots/plot_output.py +124 -0
- numdaplot-0.1.0/src/numdaplot/plots/plot_overlays.py +273 -0
- numdaplot-0.1.0/src/numdaplot/plots/plot_overview_creation.py +195 -0
- numdaplot-0.1.0/src/numdaplot/plots/plot_series_creation.py +213 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/axis_settings.py +60 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/color.py +168 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/custom_color.py +65 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/grid_lines.py +49 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/image_options.py +71 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/legend_position.py +149 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/plot_style.py +136 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/size.py +70 -0
- numdaplot-0.1.0/src/numdaplot/plots/style/size_unit.py +62 -0
- numdaplot-0.1.0/src/numdaplot/positions/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/positions/axis.py +54 -0
- numdaplot-0.1.0/src/numdaplot/positions/index.py +51 -0
- numdaplot-0.1.0/src/numdaplot/positions/range.py +90 -0
- numdaplot-0.1.0/src/numdaplot/positions/region.py +92 -0
- numdaplot-0.1.0/src/numdaplot/py.typed +0 -0
- numdaplot-0.1.0/src/numdaplot/ratios/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/ratios/fraction.py +40 -0
- numdaplot-0.1.0/src/numdaplot/ratios/measure.py +48 -0
- numdaplot-0.1.0/src/numdaplot/rules/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/rules/between.py +78 -0
- numdaplot-0.1.0/src/numdaplot/rules/bounds.py +83 -0
- numdaplot-0.1.0/src/numdaplot/rules/case.py +48 -0
- numdaplot-0.1.0/src/numdaplot/rules/contains.py +63 -0
- numdaplot-0.1.0/src/numdaplot/rules/equal.py +43 -0
- numdaplot-0.1.0/src/numdaplot/rules/greater.py +39 -0
- numdaplot-0.1.0/src/numdaplot/rules/greater_or_equal.py +38 -0
- numdaplot-0.1.0/src/numdaplot/rules/is_in.py +67 -0
- numdaplot-0.1.0/src/numdaplot/rules/is_missing.py +25 -0
- numdaplot-0.1.0/src/numdaplot/rules/is_present.py +25 -0
- numdaplot-0.1.0/src/numdaplot/rules/less.py +39 -0
- numdaplot-0.1.0/src/numdaplot/rules/less_or_equal.py +38 -0
- numdaplot-0.1.0/src/numdaplot/rules/not_equal.py +45 -0
- numdaplot-0.1.0/src/numdaplot/rules/rule.py +62 -0
- numdaplot-0.1.0/src/numdaplot/rules/rule_values.py +44 -0
- numdaplot-0.1.0/src/numdaplot/rules/value_rule.py +110 -0
- numdaplot-0.1.0/src/numdaplot/settings/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/settings/argument_types.py +327 -0
- numdaplot-0.1.0/src/numdaplot/settings/field_types.py +593 -0
- numdaplot-0.1.0/src/numdaplot/statistics/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/statistics/count.py +71 -0
- numdaplot-0.1.0/src/numdaplot/statistics/count_distinct.py +27 -0
- numdaplot-0.1.0/src/numdaplot/statistics/counted_missing.py +46 -0
- numdaplot-0.1.0/src/numdaplot/statistics/maximum.py +27 -0
- numdaplot-0.1.0/src/numdaplot/statistics/mean.py +27 -0
- numdaplot-0.1.0/src/numdaplot/statistics/median.py +27 -0
- numdaplot-0.1.0/src/numdaplot/statistics/minimum.py +27 -0
- numdaplot-0.1.0/src/numdaplot/statistics/most_frequent.py +27 -0
- numdaplot-0.1.0/src/numdaplot/statistics/most_frequent_count.py +27 -0
- numdaplot-0.1.0/src/numdaplot/statistics/quantile.py +61 -0
- numdaplot-0.1.0/src/numdaplot/statistics/standard_deviation.py +29 -0
- numdaplot-0.1.0/src/numdaplot/statistics/statistic.py +63 -0
- numdaplot-0.1.0/src/numdaplot/statistics/sum.py +27 -0
- numdaplot-0.1.0/src/numdaplot/tables/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/aggregation/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/aggregation/aggregated_frame.py +189 -0
- numdaplot-0.1.0/src/numdaplot/tables/aggregation/aggregation.py +97 -0
- numdaplot-0.1.0/src/numdaplot/tables/aggregation/calculation.py +123 -0
- numdaplot-0.1.0/src/numdaplot/tables/aggregation/result_column.py +108 -0
- numdaplot-0.1.0/src/numdaplot/tables/aggregation/row_groups.py +96 -0
- numdaplot-0.1.0/src/numdaplot/tables/aggregation/statistic_name.py +122 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/added_column.py +89 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/boolean_conversion.py +144 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/boolean_rule.py +59 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/bracket_end.py +50 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/bracket_names.py +346 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/bracketed_column.py +179 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/brackets.py +234 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/chosen_columns.py +55 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/column_choice.py +84 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/column_mode.py +64 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/column_names.py +186 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/conversion.py +103 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/converted_column.py +669 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/date_conversion.py +526 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/date_range.py +135 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/name_change.py +67 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/new_column.py +79 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/number_conversion.py +281 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/renamed_columns.py +60 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/renaming.py +81 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/text_conversion.py +70 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/time_conversion.py +313 -0
- numdaplot-0.1.0/src/numdaplot/tables/columns/time_zone_conversion.py +128 -0
- numdaplot-0.1.0/src/numdaplot/tables/conflict.py +68 -0
- numdaplot-0.1.0/src/numdaplot/tables/description/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/description/described_frame.py +335 -0
- numdaplot-0.1.0/src/numdaplot/tables/description/description.py +155 -0
- numdaplot-0.1.0/src/numdaplot/tables/duplicates/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/duplicates/deduplicated_frame.py +66 -0
- numdaplot-0.1.0/src/numdaplot/tables/duplicates/deduplication.py +88 -0
- numdaplot-0.1.0/src/numdaplot/tables/duplicates/keep.py +81 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/column_names.py +60 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/csv_file.py +265 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/csv_read_options.py +89 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/csv_separator.py +41 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/csv_write_options.py +79 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/decimal_count.py +42 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/encoding.py +82 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/excel_file.py +171 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/excel_read_options.py +79 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/excel_sheet.py +50 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/excel_time_cells.py +146 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/excel_write_options.py +63 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/file_access.py +152 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/file_paths.py +106 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/json_decimals.py +387 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/json_file.py +203 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/json_layout.py +63 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/json_read_options.py +64 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/json_write_options.py +71 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/missing_texts.py +63 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/optional_package.py +42 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/pandas_backend.py +11 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/parquet_file.py +91 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/parquet_read_options.py +56 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/sas_file.py +94 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/sas_read_options.py +67 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/stata_file.py +83 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/stata_read_options.py +56 -0
- numdaplot-0.1.0/src/numdaplot/tables/files/xpt_read_options.py +65 -0
- numdaplot-0.1.0/src/numdaplot/tables/filtering/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/filtering/checked_frame.py +60 -0
- numdaplot-0.1.0/src/numdaplot/tables/filtering/column_mask.py +71 -0
- numdaplot-0.1.0/src/numdaplot/tables/filtering/column_match.py +62 -0
- numdaplot-0.1.0/src/numdaplot/tables/filtering/condition.py +94 -0
- numdaplot-0.1.0/src/numdaplot/tables/filtering/filter.py +74 -0
- numdaplot-0.1.0/src/numdaplot/tables/filtering/filter_mode.py +67 -0
- numdaplot-0.1.0/src/numdaplot/tables/filtering/row_mask.py +152 -0
- numdaplot-0.1.0/src/numdaplot/tables/filtering/rule_moments.py +164 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/array_frame.py +95 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/cleaned_names.py +132 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/column.py +15 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/column_values.py +273 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/frame_equality.py +130 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/frame_normalization.py +459 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/named_column_errors.py +85 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/pandas_decimals.py +113 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/region_positions.py +113 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/table_text.py +222 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/time_columns.py +345 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/time_range_errors.py +117 -0
- numdaplot-0.1.0/src/numdaplot/tables/frames/time_zones.py +271 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/join.py +110 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/join_keys.py +367 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/join_mode.py +93 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/join_relation.py +149 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/join_suffixes.py +71 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/joined_frame.py +166 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/joined_names.py +107 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/joined_rows.py +235 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/key_types.py +57 -0
- numdaplot-0.1.0/src/numdaplot/tables/joining/relation.py +78 -0
- numdaplot-0.1.0/src/numdaplot/tables/missing/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/missing/missing_count.py +59 -0
- numdaplot-0.1.0/src/numdaplot/tables/missing/missing_counts.py +214 -0
- numdaplot-0.1.0/src/numdaplot/tables/missing/missing_drop.py +98 -0
- numdaplot-0.1.0/src/numdaplot/tables/missing/missing_mode.py +63 -0
- numdaplot-0.1.0/src/numdaplot/tables/missing/missing_ratio.py +71 -0
- numdaplot-0.1.0/src/numdaplot/tables/missing/missing_removal.py +257 -0
- numdaplot-0.1.0/src/numdaplot/tables/missing/missing_summary.py +174 -0
- numdaplot-0.1.0/src/numdaplot/tables/missing/ratio_comparison.py +70 -0
- numdaplot-0.1.0/src/numdaplot/tables/pivot/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/pivot/pivot_table.py +104 -0
- numdaplot-0.1.0/src/numdaplot/tables/pivot/pivoted_frame.py +244 -0
- numdaplot-0.1.0/src/numdaplot/tables/preview/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/preview/notebook_display.py +238 -0
- numdaplot-0.1.0/src/numdaplot/tables/preview/preview.py +100 -0
- numdaplot-0.1.0/src/numdaplot/tables/preview/preview_rows.py +55 -0
- numdaplot-0.1.0/src/numdaplot/tables/preview/shown_columns.py +62 -0
- numdaplot-0.1.0/src/numdaplot/tables/preview/side.py +82 -0
- numdaplot-0.1.0/src/numdaplot/tables/sorting/__init__.py +5 -0
- numdaplot-0.1.0/src/numdaplot/tables/sorting/sort_key.py +71 -0
- numdaplot-0.1.0/src/numdaplot/tables/sorting/sorted_frame.py +81 -0
- numdaplot-0.1.0/src/numdaplot/tables/sorting/sorting.py +82 -0
- numdaplot-0.1.0/src/numdaplot/tables/table.py +71 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_calculation.py +172 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_columns.py +214 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_conversion.py +351 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_data.py +321 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_display.py +56 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_joining.py +80 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_layout.py +105 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_missing.py +146 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_reading.py +451 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_refusals.py +295 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_selection.py +163 -0
- numdaplot-0.1.0/src/numdaplot/tables/table_writing.py +269 -0
- numdaplot-0.1.0/tests/data/airline.sas7bdat +0 -0
- numdaplot-0.1.0/tests/data/paxraw_d_short.xpt +0 -0
- numdaplot-0.1.0/tests/functional/test_argument_types.py +157 -0
- numdaplot-0.1.0/tests/functional/test_array_calculation_limits.py +408 -0
- numdaplot-0.1.0/tests/functional/test_array_conversion.py +161 -0
- numdaplot-0.1.0/tests/functional/test_array_creation.py +161 -0
- numdaplot-0.1.0/tests/functional/test_array_dates.py +233 -0
- numdaplot-0.1.0/tests/functional/test_array_layout.py +142 -0
- numdaplot-0.1.0/tests/functional/test_array_math.py +121 -0
- numdaplot-0.1.0/tests/functional/test_array_missing_texts.py +445 -0
- numdaplot-0.1.0/tests/functional/test_array_operations.py +143 -0
- numdaplot-0.1.0/tests/functional/test_array_refusals.py +70 -0
- numdaplot-0.1.0/tests/functional/test_array_selection.py +161 -0
- numdaplot-0.1.0/tests/functional/test_array_statistics.py +150 -0
- numdaplot-0.1.0/tests/functional/test_bar_number_labels.py +193 -0
- numdaplot-0.1.0/tests/functional/test_base_class_refusals.py +126 -0
- numdaplot-0.1.0/tests/functional/test_bool_labels.py +211 -0
- numdaplot-0.1.0/tests/functional/test_color_scales.py +244 -0
- numdaplot-0.1.0/tests/functional/test_column_name_cleaning.py +235 -0
- numdaplot-0.1.0/tests/functional/test_column_type_errors.py +208 -0
- numdaplot-0.1.0/tests/functional/test_constructor_refusals.py +69 -0
- numdaplot-0.1.0/tests/functional/test_csv_decimals.py +157 -0
- numdaplot-0.1.0/tests/functional/test_csv_mixed_blocks.py +139 -0
- numdaplot-0.1.0/tests/functional/test_data_types.py +38 -0
- numdaplot-0.1.0/tests/functional/test_date_parts.py +122 -0
- numdaplot-0.1.0/tests/functional/test_default_descriptions.py +419 -0
- numdaplot-0.1.0/tests/functional/test_default_settings.py +130 -0
- numdaplot-0.1.0/tests/functional/test_default_titles.py +173 -0
- numdaplot-0.1.0/tests/functional/test_default_wording.py +285 -0
- numdaplot-0.1.0/tests/functional/test_distribution_plots.py +134 -0
- numdaplot-0.1.0/tests/functional/test_errors.py +144 -0
- numdaplot-0.1.0/tests/functional/test_exact_decimal_reading.py +183 -0
- numdaplot-0.1.0/tests/functional/test_family_docstrings.py +104 -0
- numdaplot-0.1.0/tests/functional/test_figures.py +109 -0
- numdaplot-0.1.0/tests/functional/test_file_access.py +237 -0
- numdaplot-0.1.0/tests/functional/test_heatmap_plots.py +211 -0
- numdaplot-0.1.0/tests/functional/test_json_decimals.py +313 -0
- numdaplot-0.1.0/tests/functional/test_label_thinning.py +375 -0
- numdaplot-0.1.0/tests/functional/test_member_examples.py +271 -0
- numdaplot-0.1.0/tests/functional/test_missing_plots.py +135 -0
- numdaplot-0.1.0/tests/functional/test_missing_texts.py +129 -0
- numdaplot-0.1.0/tests/functional/test_number_brackets.py +132 -0
- numdaplot-0.1.0/tests/functional/test_object_time_columns.py +223 -0
- numdaplot-0.1.0/tests/functional/test_overlaid_plots.py +300 -0
- numdaplot-0.1.0/tests/functional/test_pie_plots.py +104 -0
- numdaplot-0.1.0/tests/functional/test_plot_display.py +47 -0
- numdaplot-0.1.0/tests/functional/test_plot_renaming.py +303 -0
- numdaplot-0.1.0/tests/functional/test_plots.py +424 -0
- numdaplot-0.1.0/tests/functional/test_positions.py +81 -0
- numdaplot-0.1.0/tests/functional/test_public_names.py +71 -0
- numdaplot-0.1.0/tests/functional/test_rules.py +69 -0
- numdaplot-0.1.0/tests/functional/test_scatter_look.py +237 -0
- numdaplot-0.1.0/tests/functional/test_setting_checks.py +134 -0
- numdaplot-0.1.0/tests/functional/test_setting_field_types.py +167 -0
- numdaplot-0.1.0/tests/functional/test_setting_types.py +174 -0
- numdaplot-0.1.0/tests/functional/test_statistics.py +64 -0
- numdaplot-0.1.0/tests/functional/test_table_aggregation.py +267 -0
- numdaplot-0.1.0/tests/functional/test_table_columns.py +286 -0
- numdaplot-0.1.0/tests/functional/test_table_creation.py +174 -0
- numdaplot-0.1.0/tests/functional/test_table_dates.py +500 -0
- numdaplot-0.1.0/tests/functional/test_table_display.py +138 -0
- numdaplot-0.1.0/tests/functional/test_table_files.py +300 -0
- numdaplot-0.1.0/tests/functional/test_table_filter.py +148 -0
- numdaplot-0.1.0/tests/functional/test_table_join.py +257 -0
- numdaplot-0.1.0/tests/functional/test_table_layout.py +111 -0
- numdaplot-0.1.0/tests/functional/test_table_missing.py +257 -0
- numdaplot-0.1.0/tests/functional/test_table_pivot.py +131 -0
- numdaplot-0.1.0/tests/functional/test_table_refusals.py +81 -0
- numdaplot-0.1.0/tests/functional/test_table_wide_display.py +139 -0
- numdaplot-0.1.0/tests/functional/test_time_limits.py +393 -0
- numdaplot-0.1.0/tests/functional/test_time_plots.py +426 -0
- numdaplot-0.1.0/tests/functional/test_time_rule_limits.py +231 -0
- numdaplot-0.1.0/tests/functional/test_time_storage_limits.py +240 -0
- numdaplot-0.1.0/tests/functional/test_time_table_limits.py +188 -0
- numdaplot-0.1.0/tests/functional/test_times_of_day.py +462 -0
- numdaplot-0.1.0/tests/functional/test_value_mapping.py +100 -0
- numdaplot-0.1.0/tests/functional/test_version.py +34 -0
- numdaplot-0.1.0/tests/unit/arrays/calculation/test_counting_statistics.py +188 -0
- numdaplot-0.1.0/tests/unit/arrays/calculation/test_location_statistics.py +172 -0
- numdaplot-0.1.0/tests/unit/arrays/calculation/test_math_function_values.py +201 -0
- numdaplot-0.1.0/tests/unit/arrays/calculation/test_statistic_values.py +169 -0
- numdaplot-0.1.0/tests/unit/arrays/calculation/test_time_function_values.py +334 -0
- numdaplot-0.1.0/tests/unit/arrays/conversion/test_array_text.py +94 -0
- numdaplot-0.1.0/tests/unit/arrays/conversion/test_equality_check.py +102 -0
- numdaplot-0.1.0/tests/unit/arrays/conversion/test_python_values.py +94 -0
- numdaplot-0.1.0/tests/unit/arrays/conversion/test_time_text.py +190 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_date_parts.py +51 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_date_parts_values.py +190 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_distribution.py +51 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_filled_values.py +54 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_list_conversion.py +301 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_list_shape.py +97 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_normal.py +48 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_numpy_conversion.py +184 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_random_integers.py +89 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_random_values.py +132 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_range_values.py +109 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_spacing.py +59 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_spacing_values.py +54 -0
- numdaplot-0.1.0/tests/unit/arrays/creation/test_uniform.py +45 -0
- numdaplot-0.1.0/tests/unit/arrays/layout/test_sorting_values.py +115 -0
- numdaplot-0.1.0/tests/unit/arrays/layout/test_unique_values.py +43 -0
- numdaplot-0.1.0/tests/unit/arrays/mapping/test_mapped_values.py +211 -0
- numdaplot-0.1.0/tests/unit/arrays/mapping/test_value_change.py +46 -0
- numdaplot-0.1.0/tests/unit/arrays/mapping/test_value_mapping.py +117 -0
- numdaplot-0.1.0/tests/unit/arrays/math_functions/test_logarithm.py +51 -0
- numdaplot-0.1.0/tests/unit/arrays/math_functions/test_math_function.py +51 -0
- numdaplot-0.1.0/tests/unit/arrays/math_functions/test_round.py +31 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_boolean_operands.py +39 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_combination.py +106 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_float_errors.py +91 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_integer_bounds.py +149 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_integer_rules.py +319 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_operand.py +123 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_time_arithmetic.py +439 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_time_bounds.py +276 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_time_result_bounds.py +329 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_transformation.py +42 -0
- numdaplot-0.1.0/tests/unit/arrays/operations/test_type_requirements.py +80 -0
- numdaplot-0.1.0/tests/unit/arrays/selection/test_comparison_masks.py +123 -0
- numdaplot-0.1.0/tests/unit/arrays/selection/test_membership_masks.py +142 -0
- numdaplot-0.1.0/tests/unit/arrays/selection/test_missing_mask.py +84 -0
- numdaplot-0.1.0/tests/unit/arrays/selection/test_region_index.py +173 -0
- numdaplot-0.1.0/tests/unit/arrays/selection/test_replaced_values.py +117 -0
- numdaplot-0.1.0/tests/unit/arrays/selection/test_rule_mask.py +130 -0
- numdaplot-0.1.0/tests/unit/arrays/selection/test_time_reference.py +166 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array.py +74 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_arithmetic.py +163 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_calculation.py +202 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_conversion.py +191 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_creation.py +188 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_data.py +309 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_layout.py +221 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_logic.py +139 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_refusals.py +82 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_selection.py +210 -0
- numdaplot-0.1.0/tests/unit/arrays/test_array_sorting.py +33 -0
- numdaplot-0.1.0/tests/unit/arrays/test_axis_number.py +59 -0
- numdaplot-0.1.0/tests/unit/arrays/test_equality.py +50 -0
- numdaplot-0.1.0/tests/unit/arrays/test_replacement.py +39 -0
- numdaplot-0.1.0/tests/unit/arrays/test_shape.py +92 -0
- numdaplot-0.1.0/tests/unit/data_types/test_numpy_mapping.py +178 -0
- numdaplot-0.1.0/tests/unit/data_types/test_pandas_mapping.py +172 -0
- numdaplot-0.1.0/tests/unit/data_types/test_time_of_day.py +152 -0
- numdaplot-0.1.0/tests/unit/data_types/test_value_family.py +71 -0
- numdaplot-0.1.0/tests/unit/data_types/test_value_type.py +140 -0
- numdaplot-0.1.0/tests/unit/dates/test_date_settings.py +160 -0
- numdaplot-0.1.0/tests/unit/dates/test_time_function.py +52 -0
- numdaplot-0.1.0/tests/unit/errors/test_broadcast_warning.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_calculation_warning.py +26 -0
- numdaplot-0.1.0/tests/unit/errors/test_cell_out_of_range_error.py +49 -0
- numdaplot-0.1.0/tests/unit/errors/test_column_not_found_error.py +69 -0
- numdaplot-0.1.0/tests/unit/errors/test_conflicting_settings_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_dimension_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_display_warning.py +53 -0
- numdaplot-0.1.0/tests/unit/errors/test_duplicate_column_error.py +82 -0
- numdaplot-0.1.0/tests/unit/errors/test_duplicate_label_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_duplicate_value_error.py +33 -0
- numdaplot-0.1.0/tests/unit/errors/test_empty_array_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_empty_list_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_empty_region_error.py +29 -0
- numdaplot-0.1.0/tests/unit/errors/test_empty_text_error.py +29 -0
- numdaplot-0.1.0/tests/unit/errors/test_empty_total_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_empty_values_error.py +29 -0
- numdaplot-0.1.0/tests/unit/errors/test_file_access_error.py +48 -0
- numdaplot-0.1.0/tests/unit/errors/test_file_exists_error.py +54 -0
- numdaplot-0.1.0/tests/unit/errors/test_file_not_found_error.py +54 -0
- numdaplot-0.1.0/tests/unit/errors/test_incompatible_charts_error.py +47 -0
- numdaplot-0.1.0/tests/unit/errors/test_incompatible_types_error.py +84 -0
- numdaplot-0.1.0/tests/unit/errors/test_integer_overflow_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_base_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_bin_width_error.py +60 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_bounds_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_chart_data_error.py +63 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_color_count_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_color_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_column_name_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_conversion_error.py +111 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_count_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_date_format_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_deviation_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_fraction_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_label_count_error.py +35 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_limits_error.py +61 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_opacity_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_point_size_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_position_error.py +60 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_resolution_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_rotation_error.py +32 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_seed_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_separator_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_shape_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_sheet_name_error.py +33 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_size_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_step_error.py +61 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_suffixes_error.py +35 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_time_zone_change_error.py +59 -0
- numdaplot-0.1.0/tests/unit/errors/test_invalid_type_error.py +51 -0
- numdaplot-0.1.0/tests/unit/errors/test_irregular_list_error.py +31 -0
- numdaplot-0.1.0/tests/unit/errors/test_join_relation_error.py +106 -0
- numdaplot-0.1.0/tests/unit/errors/test_missing_dependency_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_missing_type_error.py +31 -0
- numdaplot-0.1.0/tests/unit/errors/test_missing_value_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_not_single_value_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_numdaplot_error.py +30 -0
- numdaplot-0.1.0/tests/unit/errors/test_numdaplot_warning.py +26 -0
- numdaplot-0.1.0/tests/unit/errors/test_occupied_cell_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_out_of_domain_error.py +57 -0
- numdaplot-0.1.0/tests/unit/errors/test_readability_warning.py +53 -0
- numdaplot-0.1.0/tests/unit/errors/test_refused_operation_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_refused_setting_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_repeated_key.py +24 -0
- numdaplot-0.1.0/tests/unit/errors/test_shape_mismatch_error.py +59 -0
- numdaplot-0.1.0/tests/unit/errors/test_time_overflow_error.py +102 -0
- numdaplot-0.1.0/tests/unit/errors/test_time_zone_mismatch_error.py +86 -0
- numdaplot-0.1.0/tests/unit/errors/test_unknown_time_zone_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_unmatched_value_error.py +51 -0
- numdaplot-0.1.0/tests/unit/errors/test_unsupported_image_format_error.py +43 -0
- numdaplot-0.1.0/tests/unit/errors/test_unsupported_index_error.py +33 -0
- numdaplot-0.1.0/tests/unit/errors/test_unsupported_missing_error.py +117 -0
- numdaplot-0.1.0/tests/unit/errors/test_unsupported_type_error.py +45 -0
- numdaplot-0.1.0/tests/unit/errors/test_value_conversion_error.py +233 -0
- numdaplot-0.1.0/tests/unit/plots/charts/test_bins.py +106 -0
- numdaplot-0.1.0/tests/unit/plots/charts/test_chart.py +51 -0
- numdaplot-0.1.0/tests/unit/plots/charts/test_chart_settings.py +93 -0
- numdaplot-0.1.0/tests/unit/plots/charts/test_charts.py +297 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_array_values.py +139 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_chart_data.py +99 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_column_reading.py +340 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_heatmap_values.py +53 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_missing_cells.py +87 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_pie_values.py +165 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_point_values.py +120 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_renamed_layers.py +186 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_sample_values.py +164 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_shown_columns.py +174 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_table_values.py +238 -0
- numdaplot-0.1.0/tests/unit/plots/data/test_unique_labels.py +41 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_bar_drawing.py +145 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_box_drawing.py +258 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_cell_merging.py +193 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_chart_texts.py +58 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_color_bar.py +68 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_color_scale_values.py +61 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_heatmap_drawing.py +278 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_histogram_drawing.py +398 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_label_room.py +294 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_label_thinning.py +270 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_layer_alignment.py +274 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_layer_colors.py +73 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_line_drawing.py +95 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_missing_drawing.py +311 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_moment_period_formatter.py +369 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_pie_drawing.py +169 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_plot_drawing.py +267 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_position_axis.py +170 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_scatter_drawing.py +186 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_series_colors.py +121 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_size_inches.py +55 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_style_drawing.py +304 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_text_contrast.py +48 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_tick_rotation.py +389 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_time_axis.py +195 -0
- numdaplot-0.1.0/tests/unit/plots/drawing/test_whole_numbers.py +67 -0
- numdaplot-0.1.0/tests/unit/plots/figure/test_cell.py +61 -0
- numdaplot-0.1.0/tests/unit/plots/figure/test_figure.py +177 -0
- numdaplot-0.1.0/tests/unit/plots/figure/test_figure_drawing.py +84 -0
- numdaplot-0.1.0/tests/unit/plots/figure/test_figure_style.py +35 -0
- numdaplot-0.1.0/tests/unit/plots/figure/test_layout.py +42 -0
- numdaplot-0.1.0/tests/unit/plots/figure/test_placement.py +88 -0
- numdaplot-0.1.0/tests/unit/plots/output/test_image_saving.py +195 -0
- numdaplot-0.1.0/tests/unit/plots/output/test_plot_display.py +440 -0
- numdaplot-0.1.0/tests/unit/plots/output/test_shown_object.py +29 -0
- numdaplot-0.1.0/tests/unit/plots/style/test_axis_settings.py +55 -0
- numdaplot-0.1.0/tests/unit/plots/style/test_style_settings.py +183 -0
- numdaplot-0.1.0/tests/unit/plots/test_layer_reading.py +86 -0
- numdaplot-0.1.0/tests/unit/plots/test_overlay_checks.py +167 -0
- numdaplot-0.1.0/tests/unit/plots/test_plot.py +66 -0
- numdaplot-0.1.0/tests/unit/plots/test_plot_data.py +84 -0
- numdaplot-0.1.0/tests/unit/plots/test_plot_distribution_creation.py +143 -0
- numdaplot-0.1.0/tests/unit/plots/test_plot_output.py +230 -0
- numdaplot-0.1.0/tests/unit/plots/test_plot_overlays.py +181 -0
- numdaplot-0.1.0/tests/unit/plots/test_plot_overview_creation.py +53 -0
- numdaplot-0.1.0/tests/unit/plots/test_plot_series_creation.py +95 -0
- numdaplot-0.1.0/tests/unit/positions/test_index.py +38 -0
- numdaplot-0.1.0/tests/unit/positions/test_range.py +80 -0
- numdaplot-0.1.0/tests/unit/positions/test_region.py +111 -0
- numdaplot-0.1.0/tests/unit/ratios/test_fraction.py +46 -0
- numdaplot-0.1.0/tests/unit/rules/test_between.py +111 -0
- numdaplot-0.1.0/tests/unit/rules/test_bounds.py +25 -0
- numdaplot-0.1.0/tests/unit/rules/test_contains.py +46 -0
- numdaplot-0.1.0/tests/unit/rules/test_is_in.py +85 -0
- numdaplot-0.1.0/tests/unit/rules/test_rule.py +51 -0
- numdaplot-0.1.0/tests/unit/rules/test_value_rule.py +157 -0
- numdaplot-0.1.0/tests/unit/settings/test_argument_types.py +215 -0
- numdaplot-0.1.0/tests/unit/settings/test_field_types.py +263 -0
- numdaplot-0.1.0/tests/unit/statistics/test_count.py +45 -0
- numdaplot-0.1.0/tests/unit/statistics/test_quantile.py +63 -0
- numdaplot-0.1.0/tests/unit/statistics/test_statistic.py +51 -0
- numdaplot-0.1.0/tests/unit/tables/aggregation/test_aggregation_settings.py +128 -0
- numdaplot-0.1.0/tests/unit/tables/aggregation/test_aggregation_values.py +365 -0
- numdaplot-0.1.0/tests/unit/tables/aggregation/test_statistic_name.py +97 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_boolean_conversion.py +152 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_bracket_names.py +229 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_bracketed_column.py +139 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_brackets.py +194 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_column_conversion.py +601 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_column_names.py +126 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_column_operations.py +213 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_column_settings.py +173 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_conversion_settings.py +339 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_date_conversion.py +556 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_date_range.py +119 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_time_conversion.py +221 -0
- numdaplot-0.1.0/tests/unit/tables/columns/test_time_zone_conversion.py +117 -0
- numdaplot-0.1.0/tests/unit/tables/description/test_described_frame.py +196 -0
- numdaplot-0.1.0/tests/unit/tables/description/test_description.py +103 -0
- numdaplot-0.1.0/tests/unit/tables/duplicates/test_duplicates.py +138 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_csv_file.py +420 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_csv_read_options.py +86 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_csv_separator.py +38 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_csv_write_options.py +64 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_decimal_count.py +37 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_excel_file.py +334 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_excel_read_options.py +82 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_excel_sheet.py +46 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_excel_time_cells.py +208 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_excel_write_options.py +45 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_file_access.py +175 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_file_paths.py +118 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_json_decimals.py +208 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_json_file.py +167 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_json_read_options.py +31 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_json_write_options.py +35 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_missing_texts.py +66 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_optional_package.py +37 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_parquet_file.py +103 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_parquet_read_options.py +30 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_sas_file.py +129 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_sas_read_options.py +42 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_stata_file.py +64 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_stata_read_options.py +30 -0
- numdaplot-0.1.0/tests/unit/tables/files/test_xpt_read_options.py +42 -0
- numdaplot-0.1.0/tests/unit/tables/filtering/test_checked_frame.py +115 -0
- numdaplot-0.1.0/tests/unit/tables/filtering/test_filter_settings.py +88 -0
- numdaplot-0.1.0/tests/unit/tables/filtering/test_masks.py +258 -0
- numdaplot-0.1.0/tests/unit/tables/filtering/test_rule_moments.py +131 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_array_frame.py +76 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_cleaned_names.py +105 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_column_values.py +249 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_frame_equality.py +151 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_frame_normalization.py +410 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_named_column_errors.py +94 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_pandas_decimals.py +134 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_region_positions.py +145 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_table_text.py +263 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_time_columns.py +204 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_time_range_errors.py +81 -0
- numdaplot-0.1.0/tests/unit/tables/frames/test_time_zones.py +153 -0
- numdaplot-0.1.0/tests/unit/tables/joining/test_join.py +78 -0
- numdaplot-0.1.0/tests/unit/tables/joining/test_join_keys.py +270 -0
- numdaplot-0.1.0/tests/unit/tables/joining/test_join_relation.py +175 -0
- numdaplot-0.1.0/tests/unit/tables/joining/test_join_suffixes.py +46 -0
- numdaplot-0.1.0/tests/unit/tables/joining/test_joined_frame.py +94 -0
- numdaplot-0.1.0/tests/unit/tables/joining/test_joined_names.py +77 -0
- numdaplot-0.1.0/tests/unit/tables/joining/test_joined_rows.py +119 -0
- numdaplot-0.1.0/tests/unit/tables/missing/test_missing_counts.py +238 -0
- numdaplot-0.1.0/tests/unit/tables/missing/test_missing_removal.py +248 -0
- numdaplot-0.1.0/tests/unit/tables/missing/test_missing_settings.py +110 -0
- numdaplot-0.1.0/tests/unit/tables/missing/test_missing_summary.py +122 -0
- numdaplot-0.1.0/tests/unit/tables/pivot/test_pivot_table.py +115 -0
- numdaplot-0.1.0/tests/unit/tables/pivot/test_pivoted_frame.py +310 -0
- numdaplot-0.1.0/tests/unit/tables/preview/test_notebook_columns.py +160 -0
- numdaplot-0.1.0/tests/unit/tables/preview/test_notebook_rows.py +154 -0
- numdaplot-0.1.0/tests/unit/tables/preview/test_preview.py +447 -0
- numdaplot-0.1.0/tests/unit/tables/sorting/test_sorting.py +154 -0
- numdaplot-0.1.0/tests/unit/tables/test_table.py +64 -0
- numdaplot-0.1.0/tests/unit/tables/test_table_conversion.py +345 -0
- numdaplot-0.1.0/tests/unit/tables/test_table_data.py +338 -0
- numdaplot-0.1.0/tests/unit/tables/test_table_display.py +185 -0
- numdaplot-0.1.0/tests/unit/tables/test_table_joining.py +44 -0
- numdaplot-0.1.0/tests/unit/tables/test_table_operations.py +380 -0
- numdaplot-0.1.0/tests/unit/tables/test_table_reading.py +230 -0
- numdaplot-0.1.0/tests/unit/tables/test_table_refusals.py +86 -0
- numdaplot-0.1.0/tests/unit/tables/test_table_writing.py +277 -0
- numdaplot-0.1.0/tests/unit/test_package_version.py +89 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_api_pages.py +232 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_code_links.py +303 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_cross_references.py +184 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_default_values.py +212 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_example_code.py +211 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_figure_images.py +225 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_link_targets.py +173 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_page_references.py +100 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_public_bases.py +86 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_section_separators.py +81 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_tab_indentation.py +87 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_value_types.py +127 -0
- numdaplot-0.1.0/tests/unit/tools/docs/test_version_directives.py +100 -0
- numdaplot-0.1.0/tools/docs/api_pages.py +507 -0
- numdaplot-0.1.0/tools/docs/code_links.py +335 -0
- numdaplot-0.1.0/tools/docs/cross_references.py +200 -0
- numdaplot-0.1.0/tools/docs/default_values.py +262 -0
- numdaplot-0.1.0/tools/docs/example_code.py +271 -0
- numdaplot-0.1.0/tools/docs/figure_images.py +270 -0
- numdaplot-0.1.0/tools/docs/link_targets.py +216 -0
- numdaplot-0.1.0/tools/docs/page_references.py +163 -0
- numdaplot-0.1.0/tools/docs/public_bases.py +97 -0
- numdaplot-0.1.0/tools/docs/section_separators.py +99 -0
- numdaplot-0.1.0/tools/docs/tab_indentation.py +106 -0
- numdaplot-0.1.0/tools/docs/value_types.py +108 -0
- numdaplot-0.1.0/tools/docs/version_directives.py +114 -0
- numdaplot-0.1.0/uv.lock +1421 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
name: Checks
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_call:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
checks:
|
|
11
|
+
name: Python ${{ matrix.python }} - ${{ matrix.dependencies }} dependencies
|
|
12
|
+
runs-on: ubuntu-24.04
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
include:
|
|
17
|
+
- python: "3.13"
|
|
18
|
+
dependencies: latest
|
|
19
|
+
resolution: highest
|
|
20
|
+
- python: "3.13"
|
|
21
|
+
dependencies: minimum
|
|
22
|
+
resolution: lowest-direct
|
|
23
|
+
- python: "3.14"
|
|
24
|
+
dependencies: latest
|
|
25
|
+
resolution: highest
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
28
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
29
|
+
with:
|
|
30
|
+
version: "0.12.23"
|
|
31
|
+
python-version: ${{ matrix.python }}
|
|
32
|
+
- name: Resolve dependencies
|
|
33
|
+
run: uv lock --resolution ${{ matrix.resolution }} --upgrade
|
|
34
|
+
- name: Install
|
|
35
|
+
run: uv sync --frozen --all-extras
|
|
36
|
+
- name: Lint
|
|
37
|
+
run: uv run --frozen ruff check .
|
|
38
|
+
- name: Format
|
|
39
|
+
run: uv run --frozen ruff format --check .
|
|
40
|
+
- name: Type check
|
|
41
|
+
run: uv run --frozen pyright
|
|
42
|
+
- name: Tests
|
|
43
|
+
run: uv run --frozen coverage run run_tests.py
|
|
44
|
+
- name: Coverage
|
|
45
|
+
run: uv run --frozen coverage report
|
|
46
|
+
- name: Documentation
|
|
47
|
+
run: uv run --frozen mkdocs build --strict
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: release
|
|
12
|
+
cancel-in-progress: false
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
checks:
|
|
16
|
+
uses: ./.github/workflows/checks.yml
|
|
17
|
+
|
|
18
|
+
build:
|
|
19
|
+
name: Build the package
|
|
20
|
+
needs: checks
|
|
21
|
+
runs-on: ubuntu-24.04
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
24
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
25
|
+
with:
|
|
26
|
+
version: "0.12.23"
|
|
27
|
+
python-version: "3.13"
|
|
28
|
+
- name: Check that the tag names the version of the project
|
|
29
|
+
run: |
|
|
30
|
+
project_version="$(uv version --short)"
|
|
31
|
+
tag_version="${GITHUB_REF_NAME#v}"
|
|
32
|
+
if [ "$project_version" != "$tag_version" ]; then
|
|
33
|
+
echo "The tag $GITHUB_REF_NAME does not name the version $project_version of pyproject.toml."
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
36
|
+
- name: Read the changes of the version in the changelog
|
|
37
|
+
if: ${{ !contains(github.ref_name, 'rc') }}
|
|
38
|
+
run: |
|
|
39
|
+
version="${GITHUB_REF_NAME#v}"
|
|
40
|
+
awk -v heading="## [$version]" '
|
|
41
|
+
index($0, heading) == 1 { found = 1; next }
|
|
42
|
+
found && /^## \[/ { exit }
|
|
43
|
+
found { print }
|
|
44
|
+
' CHANGELOG.md > release_notes.md
|
|
45
|
+
if [ ! -s release_notes.md ]; then
|
|
46
|
+
echo "CHANGELOG.md has no section for $version."
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
50
|
+
if: ${{ !contains(github.ref_name, 'rc') }}
|
|
51
|
+
with:
|
|
52
|
+
name: release-notes
|
|
53
|
+
path: release_notes.md
|
|
54
|
+
- name: Build
|
|
55
|
+
run: uv build
|
|
56
|
+
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
57
|
+
with:
|
|
58
|
+
name: package
|
|
59
|
+
path: dist/
|
|
60
|
+
|
|
61
|
+
testpypi:
|
|
62
|
+
name: Publish on TestPyPI
|
|
63
|
+
needs: build
|
|
64
|
+
runs-on: ubuntu-24.04
|
|
65
|
+
environment:
|
|
66
|
+
name: testpypi
|
|
67
|
+
url: https://test.pypi.org/p/numdaplot
|
|
68
|
+
permissions:
|
|
69
|
+
id-token: write
|
|
70
|
+
steps:
|
|
71
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
72
|
+
with:
|
|
73
|
+
name: package
|
|
74
|
+
path: dist/
|
|
75
|
+
- uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
76
|
+
with:
|
|
77
|
+
repository-url: https://test.pypi.org/legacy/
|
|
78
|
+
|
|
79
|
+
pypi:
|
|
80
|
+
name: Publish on PyPI
|
|
81
|
+
needs: testpypi
|
|
82
|
+
if: ${{ !contains(github.ref_name, 'rc') }}
|
|
83
|
+
runs-on: ubuntu-24.04
|
|
84
|
+
environment:
|
|
85
|
+
name: pypi
|
|
86
|
+
url: https://pypi.org/p/numdaplot
|
|
87
|
+
permissions:
|
|
88
|
+
id-token: write
|
|
89
|
+
steps:
|
|
90
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
91
|
+
with:
|
|
92
|
+
name: package
|
|
93
|
+
path: dist/
|
|
94
|
+
- uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
95
|
+
|
|
96
|
+
site:
|
|
97
|
+
name: Publish the site
|
|
98
|
+
needs: pypi
|
|
99
|
+
runs-on: ubuntu-24.04
|
|
100
|
+
environment:
|
|
101
|
+
name: github-pages
|
|
102
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
103
|
+
permissions:
|
|
104
|
+
pages: write
|
|
105
|
+
id-token: write
|
|
106
|
+
steps:
|
|
107
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
108
|
+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
109
|
+
with:
|
|
110
|
+
version: "0.12.23"
|
|
111
|
+
python-version: "3.13"
|
|
112
|
+
- name: Install
|
|
113
|
+
run: uv sync --frozen --all-extras
|
|
114
|
+
- name: Build
|
|
115
|
+
run: uv run --frozen mkdocs build --strict
|
|
116
|
+
- uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
|
|
117
|
+
with:
|
|
118
|
+
path: site
|
|
119
|
+
- id: deployment
|
|
120
|
+
uses: actions/deploy-pages@368f82528645a54fb793d4d04e342629a3f51346 # v5.0.1
|
|
121
|
+
|
|
122
|
+
github-release:
|
|
123
|
+
name: Create the GitHub release
|
|
124
|
+
needs: pypi
|
|
125
|
+
runs-on: ubuntu-24.04
|
|
126
|
+
permissions:
|
|
127
|
+
contents: write
|
|
128
|
+
steps:
|
|
129
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
130
|
+
with:
|
|
131
|
+
name: package
|
|
132
|
+
path: dist/
|
|
133
|
+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
134
|
+
with:
|
|
135
|
+
name: release-notes
|
|
136
|
+
- name: Create the release
|
|
137
|
+
env:
|
|
138
|
+
GH_TOKEN: ${{ github.token }}
|
|
139
|
+
run: >
|
|
140
|
+
gh release create "$GITHUB_REF_NAME" dist/*
|
|
141
|
+
--repo "$GITHUB_REPOSITORY" --title "$GITHUB_REF_NAME" --notes-file release_notes.md
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to numdaplot are listed in this file.
|
|
4
|
+
|
|
5
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and numdaplot follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.1.0] - 2026-11-10
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `numdaplot.__version__` gives the version of the installed package.
|
|
13
|
+
- `dir(numdaplot)` and the completion of notebooks show only the public names and `__version__`.
|
|
14
|
+
- `Array`: values of one type in one or several dimensions, created with `Array.from_list`, `Array.from_numpy`,
|
|
15
|
+
`Array.filled`, `Array.from_range`, `Array.from_spacing`, `Array.from_date_parts` and `Array.random`; combined with
|
|
16
|
+
`+`, `-`, `*`, `/`, `//`, `%`, `**` and, for booleans, `&`, `|`, `~`; read with `Array.select`, `Array.check`,
|
|
17
|
+
`Array.take`, `Array.replace`, `Array.compute`, `Array.apply`, `Array.reshape`, `Array.transpose`, `Array.flatten`,
|
|
18
|
+
`Array.sort`, `Array.unique`, `Array.to_list`, `Array.to_value`, `Array.to_numpy` and `Array.is_equal`.
|
|
19
|
+
- `Array.from_date_parts(DateParts(year, month, day))` builds a `DATE` Array from three Arrays of whole numbers, such
|
|
20
|
+
as the day, month and year columns of a file, a date being missing where a part is missing; `ValueConversionError`
|
|
21
|
+
names a part that is not whole or a year, month and day that form no date.
|
|
22
|
+
- Array settings: `Shape`, `Spacing`, `ArraySorting`, `Replacement`, `Equality` and the `TypeMatch` enum.
|
|
23
|
+
- Dates: arithmetic between dates, datetimes, durations and numbers on `Array`, time functions applied by
|
|
24
|
+
`Array.apply` (`TimeFunction`, `DatePart`, `DatePeriod`, `DurationIn`, `ToDuration`, with the `DatePartUnit`,
|
|
25
|
+
`PeriodUnit` and `DurationUnit` enums), date formats and time zones for `Table.convert` (`DateFormat` enum,
|
|
26
|
+
`CustomDateFormat`, `TimeZone`, `TimeZoneChange` and the `TimeZoneMode` enum), and `Table.column_time_zones`.
|
|
27
|
+
- Plots: `Plot.line`, `Plot.bar`, `Plot.scatter`, `Plot.histogram`, `Plot.box`, `Plot.pie`, `Plot.heatmap`,
|
|
28
|
+
`Plot.missing_by_column` and `Plot.missing_map` create a `Plot`, shown with `Plot.show`, saved as a PNG, SVG
|
|
29
|
+
or PDF image with `Plot.save` and turned into a matplotlib figure with `Plot.to_matplotlib`. `Plot.add_line`,
|
|
30
|
+
`Plot.add_bar` and `Plot.add_scatter` draw other charts over a Plot, on its axis or on a second axis on the
|
|
31
|
+
right with the `ValueAxis` enum.
|
|
32
|
+
- Plots of missing values: `Plot.missing_by_column` writes the count and the share of the rows above each bar, and
|
|
33
|
+
`Plot.missing_map` keeps a mark for every missing value of a long Table, with its total in a legend past the axes.
|
|
34
|
+
- `PlotStyle(renaming=Renaming(...))` shows columns under other names in the legend, the labels of boxes, heatmaps
|
|
35
|
+
and missing value charts and the default title and axis labels, on every chart of a Plot, without renaming the
|
|
36
|
+
Table; the columns of an Array are named `"0"`, `"1"`...
|
|
37
|
+
- Plot titles and axis labels are written by default: the title is the `y` label by the `x` label, such as
|
|
38
|
+
`sales by month`, and `PlotStyle` replaces them or removes them with an empty text.
|
|
39
|
+
- Plots with many text labels, such as bars, heatmaps and boxes, only create the labels that fit, so they stay fast
|
|
40
|
+
on long Tables.
|
|
41
|
+
- `Plot.heatmap` shows the mean of the cells in each band when they do not fit in the image, with a
|
|
42
|
+
`ReadabilityWarning`, instead of leaving most of them out.
|
|
43
|
+
- Figures: `Figure` places Plots on the cells of a `Layout` with `Figure.place` and `Cell`, takes its title and its
|
|
44
|
+
size from a `FigureStyle`, and has `show`, `save` and `to_matplotlib` like a Plot.
|
|
45
|
+
- `Plot.show` and `Figure.show` emit a `DisplayWarning` at the line calling them when no window can be opened, such
|
|
46
|
+
as without `tkinter` or on a server, suggesting to install `tkinter` or to save the image.
|
|
47
|
+
- Plot settings: `Chart`, `LineChart`, `BarChart`, `ScatterChart`, `HistogramChart`, `BoxChart`, `PieChart`,
|
|
48
|
+
`HeatmapChart`, `MissingChart`, `BinCount`, `BinWidth`, `PlotStyle`, `Size`, `CustomColor`, `ImageOptions`, and the
|
|
49
|
+
`Color`, `LineType`, `MarkerShape`, `Orientation`, `BarLayout`, `Outliers`, `Percentages`, `ColorScale`,
|
|
50
|
+
`CellValues`, `LegendPosition`, `GridLines` and `SizeUnit` enums.
|
|
51
|
+
- Plots: the labels of an axis without enough room are left out, one out of as many as needed from the first one,
|
|
52
|
+
with a `ReadabilityWarning` when they may be texts.
|
|
53
|
+
- Plot errors and warnings: `ConflictingSettingsError`, `DuplicateLabelError`, `EmptyTotalError`,
|
|
54
|
+
`InvalidBinWidthError`, `InvalidChartDataError`, `InvalidColorCountError`, `InvalidColorError`,
|
|
55
|
+
`InvalidOpacityError`, `InvalidPointSizeError`, `InvalidResolutionError`, `InvalidRotationError`,
|
|
56
|
+
`InvalidSizeError`, `MissingValueError`, `RefusedSettingError`,
|
|
57
|
+
`UnsupportedImageFormatError`, `IncompatibleChartsError`, `OccupiedCellError`, `CellOutOfRangeError`,
|
|
58
|
+
`ReadabilityWarning` and `DisplayWarning`.
|
|
59
|
+
- Date errors: `InvalidConversionError`, `InvalidDateFormatError`, `InvalidTimeZoneChangeError`,
|
|
60
|
+
`TimeZoneMismatchError` and `UnknownTimeZoneError`.
|
|
61
|
+
- `Table`: named columns of one type each, read with `Table.from_csv`, `Table.from_json`, `Table.from_excel`,
|
|
62
|
+
`Table.from_parquet`, `Table.from_stata`, `Table.from_sas`, `Table.from_xpt`, `Table.from_pandas` and
|
|
63
|
+
`Table.from_arrays`; written with `Table.to_csv`, `Table.to_json`, `Table.to_excel`, `Table.to_parquet` and
|
|
64
|
+
`Table.to_stata`; changed with `Table.filter`, `Table.take`, `Table.choose_columns`, `Table.rename`,
|
|
65
|
+
`Table.convert`, `Table.add_column`, `Table.aggregate`, `Table.describe`, `Table.sort`,
|
|
66
|
+
`Table.drop_duplicates` and `Table.drop_missing`; read with `Table.column`, `Table.check`,
|
|
67
|
+
`Table.count_missing`, `Table.to_value`, `Table.to_pandas`, `Table.is_equal`, `Table.row_count`,
|
|
68
|
+
`Table.column_count`, `Table.column_names`, `Table.column_types`, `Table.preview`, `Table.preview_missing`
|
|
69
|
+
and `print`.
|
|
70
|
+
- A `Table` written at the end of a notebook cell is shown as the HTML table of `Table.preview`, with every column
|
|
71
|
+
and the type of each column under its name; a long Table shows its first and last rows, as its text does.
|
|
72
|
+
- `Table.from_csv` gives each column the type of all its values, even when pandas reads a long file in blocks: a
|
|
73
|
+
column mixing numbers and texts keeps every text as written, such as `01`, without the pandas `DtypeWarning`.
|
|
74
|
+
- `Array`, `Table` and `Plot`, and the base classes `Rule`, `Statistic`, `MathFunction`, `TimeFunction`,
|
|
75
|
+
`Distribution` and `Chart`, refuse their constructor with `RefusedOperationError`, which names what to use instead.
|
|
76
|
+
Settings, methods and arithmetic operators check their values against their annotations and raise
|
|
77
|
+
`InvalidTypeError`, which names what they accept.
|
|
78
|
+
- Settings that work as they are may be omitted: `Array.sort`, `Table.preview`, `Table.describe`,
|
|
79
|
+
`Table.drop_duplicates`, `Table.drop_missing` and `Table.count_missing` use their default settings, and the Plot
|
|
80
|
+
creation methods and `Plot.add_*`, except `Plot.pie`, their default chart.
|
|
81
|
+
- `Table.convert` converts booleans to numbers, 1 for `True` and 0 for `False`, and numbers to booleans, only 0 and
|
|
82
|
+
1 by default or every number but 0 as `True` with `BooleanRule.NONZERO_TRUE`.
|
|
83
|
+
- File settings, separate for reading and writing so that each setting only exists where it applies:
|
|
84
|
+
`CsvReadOptions`, `CsvWriteOptions`, `JsonReadOptions`, `JsonWriteOptions`, `ExcelReadOptions`,
|
|
85
|
+
`ExcelWriteOptions`, `SasReadOptions`, `XptReadOptions`, `ParquetReadOptions` and `StataReadOptions`.
|
|
86
|
+
- Every file reading and `Table.from_pandas` remove the spaces, tabs and line breaks at the start and the end of each
|
|
87
|
+
column name, unless `ColumnNames.KEPT` is given; two names that become the same raise `DuplicateColumnError`.
|
|
88
|
+
- `CsvReadOptions` and `ExcelReadOptions` take `missing_texts`, the texts read as missing values, which replace the 19
|
|
89
|
+
texts pandas reads as missing by default; an Excel column named like one of them, such as `NA`, keeps its name.
|
|
90
|
+
- Table settings: `Filter`, `Condition`,
|
|
91
|
+
`Aggregation`, `Calculation`, `PivotTable`, `Description`, `ColumnChoice`, `Renaming`, `NameChange`, `Conversion`, `NewColumn`,
|
|
92
|
+
`Sorting`, `SortKey`, `Deduplication`, `Preview`, `MissingCount`, `MissingDrop`, `MissingRatio`, and the `BooleanRule`, `Encoding`,
|
|
93
|
+
`JsonLayout`, `Conflict`, `FilterMode`, `ColumnMatch`, `ColumnMode`, `Keep`, `Side`, `ShownColumns`, `MissingMode`,
|
|
94
|
+
`RatioComparison` and `Measure` enums. `Equality` compares two Tables as well as two Arrays.
|
|
95
|
+
- Table errors: `ColumnNotFoundError`, `DuplicateColumnError`, `DuplicateStatisticError`, `EmptyListError`,
|
|
96
|
+
`FileAccessError`, `FileExistsError`, `FileNotFoundError`, `InvalidColumnNameError`, `InvalidSeparatorError`,
|
|
97
|
+
`InvalidSheetNameError`, `MissingDependencyError` and `UnsupportedIndexError`. `FileNotFoundError` and
|
|
98
|
+
`FileExistsError` are also the Python errors of the same name, and `FileAccessError` is also an `OSError`.
|
|
99
|
+
- Distributions: `Distribution`, `Uniform`, `Normal`, `RandomIntegers`.
|
|
100
|
+
- Number brackets: `Conversion(dtype=Type.CATEGORY, format=Brackets(limits, bounds, labels, first, last, others))`
|
|
101
|
+
cuts a number column into categories kept in the order of the brackets, named after the values they hold, such as
|
|
102
|
+
`0 to 9` or `65 or more`, with the `BracketEnd` enum and the `InvalidLimitsError` and `InvalidLabelCountError`
|
|
103
|
+
errors; `UnmatchedValueError` also names a value in no bracket.
|
|
104
|
+
- Value mapping: `Array.apply(ValueMapping(changes=[ValueChange(old_value, new_value)], others=Unmatched.ERROR))`
|
|
105
|
+
replaces listed values by new ones, such as codes by labels, with `DuplicateValueError` for an old value given twice
|
|
106
|
+
and `UnmatchedValueError` for a value without new value; `Unmatched.MISSING` makes those values missing.
|
|
107
|
+
- Math functions: `MathFunction`, `SquareRoot`, `Exponential`, `Logarithm`, `Absolute`, `Round`, `Sine`, `Cosine`.
|
|
108
|
+
- Array errors: `DimensionError`, `EmptyArrayError`, `IncompatibleTypesError`, `InvalidBaseError`,
|
|
109
|
+
`InvalidCountError`, `InvalidDeviationError`, `InvalidPositionError`, `InvalidSeedError`,
|
|
110
|
+
`IntegerOverflowError`, `InvalidShapeError`, `IrregularListError`, `MissingTypeError`, `NotSingleValueError`, `OutOfDomainError`,
|
|
111
|
+
`RefusedOperationError`, `ShapeMismatchError`, `TimeOverflowError`, `UnsupportedMissingError`,
|
|
112
|
+
`ValueConversionError`.
|
|
113
|
+
- `Type.TIME`: times of day from 00:00 to 23:59:59.999999, created from `datetime.time` values with
|
|
114
|
+
`Array.from_list`, read back as `datetime.time` by `to_list`, `to_numpy` and `Table.to_pandas`, compared by the
|
|
115
|
+
rules and sorted; durations of any unit read from numpy or pandas stay `DURATION`.
|
|
116
|
+
- `Table.convert` reads texts as `TIME`, as `HH:MM`, `HH:MM:SS` or `HH:MM:SS.ffffff` by default or with a
|
|
117
|
+
`CustomDateFormat` of a time only such as `"%H%M"`, takes the local time of day of a `DATETIME`, and writes `TIME` as
|
|
118
|
+
texts or categories, `15:35:00` by default.
|
|
119
|
+
- Calculations on `TIME`: two times subtracted give a `DURATION`, a duration added or subtracted moves a time within
|
|
120
|
+
its day with a `TimeOverflowError` past midnight, a `DATE` plus a `TIME` gives a `DATETIME`, `DatePart` reads the
|
|
121
|
+
hour, the minute and the second, and `Min`, `Max`, `Count`, `CountDistinct` and `MostFrequent` apply to times.
|
|
122
|
+
- `TIME` columns are written as texts such as `15:35:00` in CSV, JSON, Excel and Stata files, read back as `TEXT`,
|
|
123
|
+
and as Parquet times read back as `TIME`.
|
|
124
|
+
- `Table.from_excel` reads columns of time cells as `TIME` and columns of duration cells as `DURATION`.
|
|
125
|
+
- Plots place `TIME` columns at their hours on the x axis of line, bar and scatter charts, labeled `HH:MM`, and
|
|
126
|
+
name heatmap rows, pie slices, `color_by` groups and box `group_by` groups with `HH:MM` labels.
|
|
127
|
+
- Plots measure `TIME` values on an axis labeled `HH:MM`: `y` of line and scatter charts, box charts, histograms
|
|
128
|
+
and Arrays of times of day. A histogram of times has one bin per hour from 00:00 to 24:00 by default, and
|
|
129
|
+
`BinWidth` takes a duration of at most a day for times of day.
|
|
130
|
+
- `Table.join` joins two Tables on key columns (`Join`, `JoinMode`, `JoinSuffixes`, `KeyTypes`): inner, left,
|
|
131
|
+
right and outer joins, missing keys never matching, keys of one family by default, an optional check of how many
|
|
132
|
+
times each key appears (`Relation`), `InvalidSuffixesError` and `JoinRelationError`.
|
|
133
|
+
- `Type` enum of value types and its conversion to numpy and pandas dtypes, and the `Library` enum read on
|
|
134
|
+
`UnsupportedTypeError`.
|
|
135
|
+
- Rules: `Equal`, `NotEqual`, `Greater`, `GreaterOrEqual`, `Less`, `LessOrEqual`, `Between`, `IsIn`,
|
|
136
|
+
`Contains`, `IsMissing`, `IsPresent`, with the `Bounds` and `Case` enums.
|
|
137
|
+
- Statistics: `Sum`, `Mean`, `Median`, `Min`, `Max`, `Count` with the `CountedMissing` enum, `CountDistinct`,
|
|
138
|
+
`StandardDeviation`, `Quantile`, `MostFrequent`, `MostFrequentCount`.
|
|
139
|
+
- Positions: `Region`, `Index`, `Range` and the `Axis` enum.
|
|
140
|
+
- Sort settings: `Order` and `MissingPosition` enums.
|
|
141
|
+
- Errors: `NumdaplotError`, `EmptyRegionError`, `EmptyTextError`, `EmptyValuesError`, `InvalidBoundsError`,
|
|
142
|
+
`InvalidFractionError`, `InvalidTypeError`, `InvalidStepError`, `UnsupportedTypeError`, and the
|
|
143
|
+
`BroadcastWarning` and `CalculationWarning` warnings.
|
|
144
|
+
- `NumdaplotWarning`, the base of every numdaplot warning, filters them all at once with the `warnings` module.
|
numdaplot-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, Ryieru
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
contributors may be used to endorse or promote products derived from
|
|
17
|
+
this software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
numdaplot-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: numdaplot
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A simpler, explicit API over numpy, pandas and matplotlib.
|
|
5
|
+
Project-URL: Repository, https://github.com/Ryieru/numdaplot
|
|
6
|
+
Project-URL: Documentation, https://ryieru.github.io/numdaplot/
|
|
7
|
+
Author: Ryieru
|
|
8
|
+
License-Expression: BSD-3-Clause
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering
|
|
16
|
+
Classifier: Typing :: Typed
|
|
17
|
+
Requires-Python: >=3.13
|
|
18
|
+
Requires-Dist: matplotlib<4,>=3.10.7
|
|
19
|
+
Requires-Dist: numpy<3,>=2.2
|
|
20
|
+
Requires-Dist: pandas<4,>=2.3
|
|
21
|
+
Provides-Extra: excel
|
|
22
|
+
Requires-Dist: openpyxl<4,>=3.1.3; extra == 'excel'
|
|
23
|
+
Provides-Extra: parquet
|
|
24
|
+
Requires-Dist: pyarrow>=18.1; extra == 'parquet'
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
|
|
27
|
+
# numdaplot
|
|
28
|
+
|
|
29
|
+
A simpler, explicit API over numpy, pandas and matplotlib.
|
|
30
|
+
|
|
31
|
+
Each action has exactly one way to be written, settings are typed objects that check their values
|
|
32
|
+
when they are created, and every operation returns a new object.
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
import numdaplot as ndp
|
|
36
|
+
|
|
37
|
+
prices = ndp.Array.from_list([12.5, 8.0, None, 30.0])
|
|
38
|
+
taxed_prices = prices * 1.2
|
|
39
|
+
high_prices = taxed_prices.select(ndp.Greater(10))
|
|
40
|
+
mean_price = prices.compute(ndp.Mean()).to_value()
|
|
41
|
+
|
|
42
|
+
sales = ndp.Table.from_csv("sales.csv")
|
|
43
|
+
expensive = ndp.Condition(rule=ndp.Greater(100), columns=["price"])
|
|
44
|
+
expensive_sales = sales.filter(ndp.Filter(conditions=[expensive]))
|
|
45
|
+
average_price = ndp.Calculation(column="price", function=ndp.Mean())
|
|
46
|
+
by_city = expensive_sales.aggregate(ndp.Aggregation(calculations=[average_price], group_by=["city"]))
|
|
47
|
+
|
|
48
|
+
chart = ndp.BarChart(x="city", y=["price_mean"])
|
|
49
|
+
style = ndp.PlotStyle(title="Average price per city")
|
|
50
|
+
plot = ndp.Plot.bar(by_city, chart, style)
|
|
51
|
+
plot.save("prices.png")
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Status
|
|
55
|
+
|
|
56
|
+
numdaplot is in alpha: the API can still change between versions, and `ndp.__version__` gives the installed version.
|
|
57
|
+
The shared foundations (types, rules, statistics, positions,
|
|
58
|
+
sort settings, errors), `Array`, `Table`, the tools for missing values and dates (formats, time zones,
|
|
59
|
+
parts, periods and durations), line, bar, scatter, histogram, box, pie, heatmap and missing value plots,
|
|
60
|
+
charts overlaid on a plot, and figures placing plots on a grid are available.
|
|
61
|
+
|
|
62
|
+
## Requirements
|
|
63
|
+
|
|
64
|
+
- Python 3.13 or later
|
|
65
|
+
- numpy 2.2+, pandas 2.3+ and matplotlib 3.10.7+
|
|
66
|
+
- Optional extras: `excel` (openpyxl) and `parquet` (pyarrow)
|
|
67
|
+
|
|
68
|
+
## Installation
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
pip install numdaplot
|
|
72
|
+
pip install "numdaplot[excel,parquet]"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The `excel` extra reads and writes Excel files, the `parquet` extra reads and writes Parquet files.
|
|
76
|
+
|
|
77
|
+
## Development
|
|
78
|
+
|
|
79
|
+
From a clone of the repository, with [uv](https://docs.astral.sh/uv/):
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
uv sync --all-extras
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The extras are needed to run every test, since the Excel and Parquet tests write real files.
|
|
86
|
+
|
|
87
|
+
## Run the tests
|
|
88
|
+
|
|
89
|
+
The test entry point runs the unit tests, the functional tests and every docstring example:
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
uv run python run_tests.py
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Arguments are passed to pytest, for example `uv run python run_tests.py -k between`.
|
|
96
|
+
|
|
97
|
+
## Measure the coverage
|
|
98
|
+
|
|
99
|
+
The coverage of every line and every branch of `src/numdaplot` and `tools/docs` is measured while the whole suite
|
|
100
|
+
runs, and must reach 99.50%:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
uv run coverage run run_tests.py
|
|
104
|
+
uv run coverage report
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
`uv run coverage html` writes a detailed report in `htmlcov/`.
|
|
108
|
+
|
|
109
|
+
## Check the code
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
uv run ruff check .
|
|
113
|
+
uv run ruff format --check .
|
|
114
|
+
uv run pyright
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Documentation
|
|
118
|
+
|
|
119
|
+
The documentation is online at https://ryieru.github.io/numdaplot/. It is generated from the docstrings,
|
|
120
|
+
and shown locally with:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
uv run mkdocs serve
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Release
|
|
127
|
+
|
|
128
|
+
A version is published by pushing a tag `v<version>`. The `Release` workflow then runs the checks, builds the
|
|
129
|
+
package, publishes it on TestPyPI, waits for an approval on GitHub, publishes it on PyPI, publishes the
|
|
130
|
+
documentation site and creates the GitHub release with the changes of `CHANGELOG.md`.
|
|
131
|
+
|
|
132
|
+
1. A minor or major version, such as `0.2.0` or `1.0.0`, is first tried as a release candidate: set
|
|
133
|
+
`version = "0.2.0rc1"` in `pyproject.toml`, commit, push, then push the tag. A release candidate only goes to
|
|
134
|
+
TestPyPI. Check its page and its installation, and fix with `0.2.0rc2` and so on until it is right.
|
|
135
|
+
2. Set the final version in `pyproject.toml`, and replace `## [Unreleased]` with `## [0.2.0] - <date>` in
|
|
136
|
+
`CHANGELOG.md`. Commit, push, then push the tag.
|
|
137
|
+
3. Check the version on TestPyPI, then approve the `pypi` environment in the workflow run on GitHub.
|
|
138
|
+
|
|
139
|
+
A patch version, such as `0.1.1`, skips step 1. When TestPyPI shows a problem, the approval is refused and the patch
|
|
140
|
+
is tried again as `0.1.1rc1`.
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
git tag v0.2.0rc1
|
|
144
|
+
git push origin v0.2.0rc1
|
|
145
|
+
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ numdaplot==0.2.0rc1
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Code organization
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
src/numdaplot/
|
|
152
|
+
__init__.py every public name, available as ndp.*
|
|
153
|
+
arrays/ Array and its settings: Shape, Spacing, distributions, math functions...
|
|
154
|
+
tables/ Table and its settings: file options, Filter, Aggregation, PivotTable, Sorting, Preview...
|
|
155
|
+
dates/ DateFormat, TimeZone, TimeZoneChange, DatePart, DatePeriod, DurationIn, ToDuration...
|
|
156
|
+
plots/ Plot and its creation methods, the charts, the PlotStyle and Figure
|
|
157
|
+
errors/ NumdaplotError, the precise errors, NumdaplotWarning and the precise warnings
|
|
158
|
+
data_types/ the Type enum and its conversion to numpy and pandas dtypes
|
|
159
|
+
ratios/ validation of fractions between 0 and 1, and the Measure enum
|
|
160
|
+
rules/ tests applied to each value: Equal, Greater, Between, IsIn, Contains, IsMissing...
|
|
161
|
+
statistics/ Sum, Mean, Median, Quantile, StandardDeviation...
|
|
162
|
+
positions/ Region, Index, Range and Axis
|
|
163
|
+
ordering/ Order and MissingPosition
|
|
164
|
+
settings/ check of the settings against their annotations, InvalidTypeError being raised
|
|
165
|
+
tests/
|
|
166
|
+
unit/ one test file per source file, mirroring src/numdaplot
|
|
167
|
+
functional/ one test file per notion, using the library as ndp
|
|
168
|
+
docs/ pages and stylesheet of the documentation site
|
|
169
|
+
tools/docs/ griffe extensions and MkDocs hooks building the documentation site and its API pages
|
|
170
|
+
run_tests.py test entry point
|
|
171
|
+
conftest.py pytest settings shared by the tests and the docstring examples
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## License
|
|
175
|
+
|
|
176
|
+
BSD-3-Clause, see [LICENSE](https://github.com/Ryieru/numdaplot/blob/main/LICENSE).
|