LoopStructural 1.6.23__tar.gz → 1.6.24__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.
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_discrete_interpolator.py +39 -4
- loopstructural-1.6.24/LoopStructural/modelling/features/builders/_fault_builder.py +731 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/builders/_geological_feature_builder.py +1 -1
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/maths.py +9 -0
- loopstructural-1.6.24/LoopStructural/version.py +1 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural.egg-info/PKG-INFO +1 -1
- {loopstructural-1.6.23 → loopstructural-1.6.24}/PKG-INFO +1 -1
- loopstructural-1.6.23/LoopStructural/modelling/features/builders/_fault_builder.py +0 -585
- loopstructural-1.6.23/LoopStructural/version.py +0 -1
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LICENSE +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/_base.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/_example_models.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/claudius.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/claudiusbb.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/duplex.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/duplexbb.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/fault_trace/fault_trace.cpg +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/fault_trace/fault_trace.dbf +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/fault_trace/fault_trace.prj +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/fault_trace/fault_trace.shp +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/fault_trace/fault_trace.shx +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/geological_map_data/bbox.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/geological_map_data/contacts.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/geological_map_data/fault_displacement.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/geological_map_data/fault_edges.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/geological_map_data/fault_locations.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/geological_map_data/fault_orientations.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/geological_map_data/stratigraphic_order.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/geological_map_data/stratigraphic_orientations.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/geological_map_data/stratigraphic_thickness.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/intrusion.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/intrusionbb.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/onefoldbb.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/onefolddata.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/refolded_bb.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/refolded_fold.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datasets/data/tabular_intrusion.csv +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datatypes/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datatypes/_bounding_box.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datatypes/_point.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datatypes/_structured_grid.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/datatypes/_surface.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/export/exporters.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/export/file_formats.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/export/geoh5.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/export/gocad.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/export/omf_wrapper.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_api.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_builders.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_constant_norm.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_cython/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_discrete_fold_interpolator.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_finite_difference_interpolator.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_geological_interpolator.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_interpolator_builder.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_interpolator_factory.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_interpolatortype.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_operator.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_p1interpolator.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_p2interpolator.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/_surfe_wrapper.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_2d_base_unstructured.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_2d_p1_unstructured.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_2d_p2_unstructured.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_2d_structured_grid.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_2d_structured_tetra.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_3d_base_structured.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_3d_p2_tetra.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_3d_structured_grid.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_3d_structured_tetra.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_3d_unstructured_tetra.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_aabb.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_base_support.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_face_table.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/interpolators/supports/_support_factory.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/core/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/core/fault_topology.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/core/geological_model.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/core/stratigraphic_column.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_analytical_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_base_geological_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_cross_product_geological_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_feature_converters.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_geological_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_lambda_geological_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_projected_vector_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_region.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_structural_frame.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/_unconformity_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/builders/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/builders/_analytical_fold_builder.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/builders/_base_builder.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/builders/_folded_feature_builder.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/builders/_structural_frame_builder.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fault/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fault/_fault_function.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fault/_fault_function_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fault/_fault_segment.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/_fold.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/_foldframe.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/_svariogram.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/fold_function/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/fold_function/_base_fold_rotation_angle.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/fold_function/_fourier_series_fold_rotation_angle.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/fold_function/_lambda_fold_rotation_angle.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/input/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/input/fault_network.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/input/map2loop_processor.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/input/process_data.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/input/project_file.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/intrusions/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/intrusions/geom_conceptual_models.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/intrusions/geometric_scaling_functions.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/intrusions/intrusion_builder.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/intrusions/intrusion_feature.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/intrusions/intrusion_frame_builder.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/modelling/intrusions/intrusion_support_functions.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/_surface.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/_transformation.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/colours.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/config.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/dtm_creator.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/exceptions.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/features.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/helper.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/json_encoder.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/linalg.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/logging.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/observer.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/regions.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/typing.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/utils/utils.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural/visualisation/__init__.py +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural.egg-info/SOURCES.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural.egg-info/dependency_links.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural.egg-info/requires.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/LoopStructural.egg-info/top_level.txt +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/README.md +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/pyproject.toml +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/setup.cfg +0 -0
- {loopstructural-1.6.23 → loopstructural-1.6.24}/setup.py +0 -0
|
@@ -62,7 +62,9 @@ class DiscreteInterpolator(GeologicalInterpolator):
|
|
|
62
62
|
self.interpolation_weights = {}
|
|
63
63
|
logger.info("Creating discrete interpolator with {} degrees of freedom".format(self.dof))
|
|
64
64
|
self.type = InterpolatorType.BASE_DISCRETE
|
|
65
|
-
|
|
65
|
+
self.apply_scaling_matrix = True
|
|
66
|
+
self.add_ridge_regulatisation = True
|
|
67
|
+
self.ridge_factor = 1e-8
|
|
66
68
|
def set_nelements(self, nelements: int) -> int:
|
|
67
69
|
return self.support.set_nelements(nelements)
|
|
68
70
|
|
|
@@ -511,6 +513,25 @@ class DiscreteInterpolator(GeologicalInterpolator):
|
|
|
511
513
|
|
|
512
514
|
B = np.hstack(bs)
|
|
513
515
|
return A, B
|
|
516
|
+
def compute_column_scaling_matrix(self, A: sparse.csr_matrix) -> sparse.dia_matrix:
|
|
517
|
+
"""Compute column scaling matrix S for matrix A so that A @ S has columns with unit norm.
|
|
518
|
+
|
|
519
|
+
Parameters
|
|
520
|
+
----------
|
|
521
|
+
A : sparse.csr_matrix
|
|
522
|
+
interpolation matrix
|
|
523
|
+
|
|
524
|
+
Returns
|
|
525
|
+
-------
|
|
526
|
+
scipy.sparse.dia_matrix
|
|
527
|
+
diagonal scaling matrix S
|
|
528
|
+
"""
|
|
529
|
+
col_norms = sparse.linalg.norm(A, axis=0)
|
|
530
|
+
scaling_factors = np.ones(A.shape[1])
|
|
531
|
+
mask = col_norms > 0
|
|
532
|
+
scaling_factors[mask] = 1.0 / col_norms[mask]
|
|
533
|
+
S = sparse.diags(scaling_factors)
|
|
534
|
+
return S
|
|
514
535
|
|
|
515
536
|
def add_equality_block(self, A, B):
|
|
516
537
|
if len(self.equal_constraints) > 0:
|
|
@@ -591,6 +612,15 @@ class DiscreteInterpolator(GeologicalInterpolator):
|
|
|
591
612
|
raise ValueError("Pre solve failed")
|
|
592
613
|
|
|
593
614
|
A, b = self.build_matrix()
|
|
615
|
+
if self.add_ridge_regulatisation:
|
|
616
|
+
ridge = sparse.eye(A.shape[1]) * self.ridge_factor
|
|
617
|
+
A = sparse.vstack([A, ridge])
|
|
618
|
+
b = np.hstack([b, np.zeros(A.shape[1])])
|
|
619
|
+
logger.info("Adding ridge regularisation to interpolation matrix")
|
|
620
|
+
if self.apply_scaling_matrix:
|
|
621
|
+
S = self.compute_column_scaling_matrix(A)
|
|
622
|
+
A = A @ S
|
|
623
|
+
|
|
594
624
|
Q, bounds = self.build_inequality_matrix()
|
|
595
625
|
if callable(solver):
|
|
596
626
|
logger.warning('Using custom solver')
|
|
@@ -620,12 +650,14 @@ class DiscreteInterpolator(GeologicalInterpolator):
|
|
|
620
650
|
|
|
621
651
|
elif solver == 'lsmr':
|
|
622
652
|
logger.info("Solving using lsmr")
|
|
623
|
-
if 'atol' not in solver_kwargs:
|
|
624
|
-
|
|
625
|
-
|
|
653
|
+
# if 'atol' not in solver_kwargs:
|
|
654
|
+
# if tol is not None:
|
|
655
|
+
# solver_kwargs['atol'] = tol
|
|
626
656
|
if 'btol' not in solver_kwargs:
|
|
627
657
|
if tol is not None:
|
|
628
658
|
solver_kwargs['btol'] = tol
|
|
659
|
+
solver_kwargs['atol'] = 0.
|
|
660
|
+
logger.info(f"Setting lsmr btol to {tol}")
|
|
629
661
|
logger.info(f"Solver kwargs: {solver_kwargs}")
|
|
630
662
|
res = sparse.linalg.lsmr(A, b, **solver_kwargs)
|
|
631
663
|
if res[1] == 1 or res[1] == 4 or res[1] == 2 or res[1] == 5:
|
|
@@ -684,6 +716,9 @@ class DiscreteInterpolator(GeologicalInterpolator):
|
|
|
684
716
|
logger.error(f"Unknown solver {solver}")
|
|
685
717
|
self.up_to_date = False
|
|
686
718
|
# self._post_solve()
|
|
719
|
+
# apply scaling matrix to solution
|
|
720
|
+
if self.apply_scaling_matrix:
|
|
721
|
+
self.c = S @ self.c
|
|
687
722
|
return self.up_to_date
|
|
688
723
|
|
|
689
724
|
def update(self) -> bool:
|