gridstate 2.6.0__tar.gz → 2.7.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.
- {gridstate-2.6.0 → gridstate-2.7.0}/CHANGELOG.md +18 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/PKG-INFO +1 -1
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/_version.py +3 -3
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algorithms/ipm_pd.py +13 -1
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate.egg-info/PKG-INFO +1 -1
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate.egg-info/scm_version.json +2 -2
- {gridstate-2.6.0 → gridstate-2.7.0}/.github/workflows/ci.yml +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/.github/workflows/release.yml +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/.gitignore +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/.pre-commit-config.yaml +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/LICENSE +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/Makefile +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/README.md +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/build_cython.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/__pyinstaller/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/__pyinstaller/hook-gridstate.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/_arrays.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/adapters/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/adapters/from_pandapower.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algebra/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algebra/_selinv_kernels.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algebra/base.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algebra/estimators.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algebra/jacobian_pattern.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algebra/normalized_residuals.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algorithms/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algorithms/_gram_numba.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algorithms/ipm.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algorithms/kkt_solver.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algorithms/status.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/algorithms/wls.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/api.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/bad_data_repass.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/bounds.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/constants.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/contract/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/contract/_legacy.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/contract/containers.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/contract/derived.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/contract/derived_tables.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/contract/serialize.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/contract/tables.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/contract/validate.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/contract/version.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/ipm_hints.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/load_characteristics.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/losses.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/measurement_ids.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/pipeline/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/pipeline/config.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/pipeline/context.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/pipeline/manifest.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/pipeline/orchestration.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/pipeline/passes.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/pipeline/preparation.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/pipeline/runner.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/pipeline/steps.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/post_processing.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/preprocessing/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/preprocessing/_scan.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/preprocessing/ipm_setup.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/preprocessing/meas_rows.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/preprocessing/mirror_voltage.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/preprocessing/node_props.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/preprocessing/pseudo_measurements.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/py.typed +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/quality_summary.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/resolve_pass.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/result.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/runtime.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/shunt_sanity.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/solution_hints.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/state.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/_filters.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/apply_resolved.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/generators.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/kinds.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/load_only_injection.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/loss_filter.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/measurements.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/noise.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/on_line.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/quality.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/rpn.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/shunts.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/sigma_floor.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/units.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/voltage_filter.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/telemetry/voltage_nominal.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/topology.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/units.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/utils.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/v_mirror.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/v_refine.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/validation/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/validation/_diagnostics.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/validation/bad_data.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/validation/chi2_test.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/validation/observability.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/working.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/ybus.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate/z_vector.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate.egg-info/SOURCES.txt +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate.egg-info/dependency_links.txt +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate.egg-info/entry_points.txt +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate.egg-info/requires.txt +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate.egg-info/scm_file_list.json +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/gridstate.egg-info/top_level.txt +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/pyproject.toml +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/setup.cfg +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/__init__.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/_golden.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/conftest.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_adapters_lazy_import.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_aggregate_generators.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_algebra_base.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_anti_overshoot.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_arrays_helpers.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_bad_data.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_bad_data_repass.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_bounds.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_boxed_balance.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_breaker_reactance.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_chain_mirror.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_contract.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_contract_edge_cases.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_contract_runtime.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case118.json +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case118.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case118_degraded.json +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case118_degraded.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case14.json +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case14.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case14_degraded.json +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case14_degraded.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case30.json +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case30.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case30_degraded.json +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/case30_degraded.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/golden/manifest.json +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/ieee/case118.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/ieee/case118_truth.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/ieee/case14.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/ieee/case14_truth.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/ieee/case30.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_data/ieee/case30_truth.npz +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_derived_tables.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_enum_codes.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_flow_sigma_floor.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_from_pandapower.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_generator_shunt_kernels.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_golden.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_gram_numba.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_ieee_cases.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_ipm.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_ipm_balance_modes.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_ipm_hints.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_ipm_injection_roles.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_ipm_integration.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_ipm_pd.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_jacobian_pattern.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_kkt_solver.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_load_characteristic_segments.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_load_only_injection.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_losses_breakdown.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_losses_q_convention.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_losses_trafo_classification.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_materialize_kernel.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_measurement_filter_kernels.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_measurement_ids.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_mirror_voltage_kernel.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_near_critical_ranking.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_neutral_wording.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_noise_model.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_normalized_residuals.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_numpy_only_runtime.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_observability.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_on_line_kernel.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_perf_synthetic_network.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_pipeline.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_pipeline_config_validation.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_pipeline_idempotent.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_pipeline_invariant_errors.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_pipeline_step_order.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_pipeline_warm_start.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_pipeline_working_layer.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_post_processing.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_preparation_steps.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_prepare_network.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_pseudo_unknown_load.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_pseudo_v_unobservable.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_quality_summary_paths.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_reconcile_balance.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_refine_merge.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_resolve_pass.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_result_quality_summary.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_rn_selected_inversion.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_serialize_npz.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_shunt_sanity.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_solution_hints.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_solve_status.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_state.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_state_range.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_telemetry_apply_kernel.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_telemetry_bounds.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_telemetry_physics_kernels.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_tm_code_quality.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_topology_kernels.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_topology_port.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_transformer_from_shunt.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_units.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_units_array_kernels.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_v_mirror.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_v_refine.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_variance_charging.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_version.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_voltage_calibration_gen_nodes.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_voltage_range_filter_fallback.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_wls.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_wls_robustness.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_working_container.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_ybus.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tests/test_z_vector.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tools/gen_ieee_fixtures.py +0 -0
- {gridstate-2.6.0 → gridstate-2.7.0}/tools/golden.py +0 -0
|
@@ -9,6 +9,24 @@ types of the merged pull requests; breaking and behavior-changing items are
|
|
|
9
9
|
listed separately under "Breaking changes" and "Behavior changes". A release is
|
|
10
10
|
cut by tagging the merged main commit; the version is derived from that tag.
|
|
11
11
|
|
|
12
|
+
## v2.7.0 (2026-10-18)
|
|
13
|
+
|
|
14
|
+
### Behavior changes
|
|
15
|
+
|
|
16
|
+
- `ipm_pd` stops the Huber reweighting once the complementarity μ is at or
|
|
17
|
+
below `huber_freeze_mu` (new solver argument, default 1e-4) and keeps the
|
|
18
|
+
last weights. Estimates move slightly (≤ 0.005 kV median |ΔV| on the test
|
|
19
|
+
models, individual nodes up to ~2e-3 p.u.); iteration counts drop.
|
|
20
|
+
|
|
21
|
+
### Perf
|
|
22
|
+
|
|
23
|
+
- `ipm_pd` end game with Huber: rows whose residual sits at the threshold
|
|
24
|
+
flipped their weight every iteration, the merit search halved every other
|
|
25
|
+
step and the solve zigzagged at a linear rate. Equality rows (the hard
|
|
26
|
+
transit balance) made it markedly worse: on the test models the hard mode
|
|
27
|
+
needed up to 109 iterations per solve where the soft one needs 18. With the
|
|
28
|
+
weights frozen: 28; the hard mode now runs within ~10–15 % of the soft one.
|
|
29
|
+
|
|
12
30
|
## v2.6.0 (2026-10-18)
|
|
13
31
|
|
|
14
32
|
### Behavior changes
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '2.
|
|
22
|
-
__version_tuple__ = version_tuple = (2,
|
|
21
|
+
__version__ = version = '2.7.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 7, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g9810ca9e9'
|
|
@@ -244,6 +244,7 @@ def solve_ipm_pd(
|
|
|
244
244
|
huber_use_mad: bool = False,
|
|
245
245
|
huber_adaptive_k: float = 6.0,
|
|
246
246
|
huber_warmup_iters: int = 5,
|
|
247
|
+
huber_freeze_mu: float = 1e-4,
|
|
247
248
|
kkt_solver: KKTSolver | None = None,
|
|
248
249
|
eq_prox: float = 1e-9,
|
|
249
250
|
box_prox: float = 1e-6,
|
|
@@ -286,6 +287,15 @@ def solve_ipm_pd(
|
|
|
286
287
|
huber_*: SHGM-IRLS reweighting of the rows of ``huber_mask``, as in
|
|
287
288
|
``solve_ipm``; the adaptive scale is recomputed every iteration
|
|
288
289
|
(μ changes every iteration).
|
|
290
|
+
huber_freeze_mu: the reweighting stops once the complementarity μ is
|
|
291
|
+
at or below it and the last weights are kept. Rows whose residual
|
|
292
|
+
sits at the Huber threshold flip their weight from one iteration to
|
|
293
|
+
the next, so the objective the step is computed for changes every
|
|
294
|
+
iteration and the merit search halves every other step; with the
|
|
295
|
+
weights frozen the end game is a plain weighted least squares and
|
|
296
|
+
converges at the Newton rate. Equality rows push the data
|
|
297
|
+
conflicts into the residuals and make this markedly worse. ``0``
|
|
298
|
+
reweights to the end.
|
|
289
299
|
kkt_solver: Newton-system solver (``None`` — scipy).
|
|
290
300
|
eq_prox: with equality rows, a proximal term ``eq_prox·max(ρ)`` on the
|
|
291
301
|
diagonal of the box coordinates. A hard balance fixes only the net
|
|
@@ -414,8 +424,9 @@ def solve_ipm_pd(
|
|
|
414
424
|
status = "stalled"
|
|
415
425
|
message = ""
|
|
416
426
|
it = 0
|
|
427
|
+
mu_last = float("inf")
|
|
417
428
|
for it in range(max_iter):
|
|
418
|
-
if use_huber and it >= huber_warmup_iters:
|
|
429
|
+
if use_huber and it >= huber_warmup_iters and mu_last > huber_freeze_mu:
|
|
419
430
|
reweighter.reset_adaptive()
|
|
420
431
|
w = w_base * reweighter.weights(r)
|
|
421
432
|
w_data = np.where(is_eq, 0.0, w)
|
|
@@ -423,6 +434,7 @@ def solve_ipm_pd(
|
|
|
423
434
|
r_l = g[il] - lo[il] - s_l
|
|
424
435
|
r_u = hi[iu] - g[iu] - s_u
|
|
425
436
|
mu = (float(s_l @ y_l) + float(s_u @ y_u)) / n_pairs if n_pairs else 0.0
|
|
437
|
+
mu_last = mu
|
|
426
438
|
eq_inf = float(np.max(np.abs(c))) if c.size else 0.0
|
|
427
439
|
feas_inf = float(np.max(np.abs(np.concatenate([r_l, r_u])))) if n_pairs else 0.0
|
|
428
440
|
if (
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|