icentral-muc 0.1.0

icentral-muc is a Rust crate for interacting with Minimum Union Cycles (MUCs) in graph data structures. It provides advanced traits and implementations for efficient MUC discovery, management, and analysis to aid in identifying connectivity and betweenness centrality in complex networks.
Documentation
crate::ix!();

pub trait GraphHashMucInterface
: ExtendWith<Self> 
+ Sized
+ NumNodes 
+ NumEdges 
+ GetEdges 
+ HasMapForNode 
+ MappedNodes 
+ InsertEdge 
+ InsertNode {}

impl<T> GraphHashMucInterface for T where
T: ExtendWith<Self> 
+ Sized
+ NumNodes 
+ NumEdges 
+ GetEdges 
+ HasMapForNode 
+ MappedNodes 
+ InsertEdge 
+ InsertNode {}

pub trait GetMucs<GH> {

    fn get_mucs<'a>(&'a self) -> &Vec<MinimumUnionCycle<GH>>;
}

pub trait GetMuc<GH> {
    fn muc(&self, idx: MinimumUnionCycleId) -> &MinimumUnionCycle<GH>;
    fn muc_mut(&mut self, idx: MinimumUnionCycleId) -> &mut MinimumUnionCycle<GH>;
}

pub trait FindMucs {

    fn find_mucs_fast(&mut self) 
    -> Result<(),BetweennessCentralityError>;

    fn find_mucs(&mut self);
}

pub trait FindMucMcb<GH> {

    fn find_muc_mcb(&mut self) 
    -> Result<(),BetweennessCentralityError>;

    fn find_muc_mcb_for_cycle(
        &mut self, 
        src:           NodeId, 
        cycle_graph:   &GH, 
        visit_markers: &mut VisitMarkers) 
    -> Result<(),BetweennessCentralityError>;
}

pub trait CollectAllMucEdges {

    fn collect_all_edges_in_mucs_in_one_set(&mut self) 
    -> Result<Edges,BetweennessCentralityError>;
}

pub trait ClearMucs {

    fn clear_mucs(&mut self) 
    -> Result<(),BetweennessCentralityError>;
}

pub trait MergeMucCycle<GH> {

    fn merge_muc_cycle(
        &mut self, 
        muc:   &mut MinimumUnionCycle<GH>,
        cycle: &Cycle
    );
}

pub trait CreateSingleVertexMucs {

    fn create_single_vertex_muc(
        &mut self, 
        idx: NodeId
    );

    fn maybe_create_single_vertex_muc(
        &mut self, 
        idx: NodeId
    );

    fn create_single_vertex_mucs(&mut self);
}

pub trait FindAllMucSubgraphs {

    fn find_all_muc_subgraphs(&mut self);
}

pub trait ConstructSingleNodeMucs {

    fn maybe_construct_single_node_muc(&mut self, idx: NodeId);
    fn construct_single_node_mucs(&mut self);
}

pub trait ConstructMucsForConnectedComponent<GH> {

    fn maybe_construct_mucs_for_connected_component(
        &mut self, 
        component: GH
    );

    fn construct_mucs_for_connected_component(
        &mut self,
        component: GH
    );
}

pub trait ConstructMucs<GH> {

    fn construct_mucs(&mut self, conn_comp_vec: Vec<GH>);
}

pub trait GetNumMucs {

    fn get_num_mucs(&mut self) -> usize;
}