Source code for pyrigi.framework._rigidity.redundant
"""This module provides algorithms related to redundant rigidity of frameworks."""from__future__importannotationsfromcopyimportdeepcopyfrompyrigi.framework.baseimportFrameworkBasefrompyrigi.graphimport_generalasgraph_generalfrom.importinfinitesimalasinfinitesimal_rigidity
[docs]defis_redundantly_inf_rigid(framework:FrameworkBase,use_copy:bool=True,**kwargs)->bool:""" Return if the framework is infinitesimally redundantly rigid. For implementation details and possible parameters, see :func:`~.is_inf_rigid`. Definitions ----------- :prf:ref:`Redundant infinitesimal rigidity <def-redundantly-rigid-framework>` Parameters ---------- framework: use_copy: If ``False``, the framework's edges are deleted and added back during runtime. Otherwise, a new modified framework is created, while the original framework remains unchanged (default). Examples -------- >>> F = Framework.Empty(dim=2) >>> F.add_vertices([(1,0), (1,1), (0,3), (-1,1)], ['a','b','c','d']) >>> F.add_edges([('a','b'), ('b','c'), ('c','d'), ('a','d'), ('a','c'), ('b','d')]) >>> is_redundantly_inf_rigid(F) True >>> F.delete_edge(('a','c')) >>> is_redundantly_inf_rigid(F) False """# noqa: E501F=frameworkifuse_copy:F=deepcopy(framework)foredgeingraph_general.edge_list(F._graph):F.delete_edge(edge)ifnotinfinitesimal_rigidity.is_inf_rigid(F,**kwargs):F.add_edge(edge)returnFalseF.add_edge(edge)returnTrue