pub fn run<T: core::graph::VertexExtendableHash>(
    vv: &core::graph::VertexVec<T::VertexType>,
    numbering: &mut Vec<usize>,
    orbits_output: &mut Vec<core::orbit_ops::Orbit>
) {
    if numbering.len() == 0 {
        let fixed_hash_values: Vec<core::graph::VertexFixedHashValue> = vv.all_vertices().iter()
            .map(|v| v.fixed_hash_value())
            .collect();
        *numbering = vec![vv.len(); vv.all_len()];
        orbits_output.clear();
        partition_vertices_once::<T>(vv.valid_indexes(), vv.all_vertices(), &fixed_hash_values, numbering, orbits_output);
    }

    // do GIAP again
    // case 469: COc1ccc(C(=O)C[n+]2c(C)n(Cc3c4c(cc5c3OCC5)OCC4)c3ccccc32)cc1
    let orbits_to_be_partitioned = orbits_output.clone();
    orbits_output.clear();
    partition_vertices_with_extendable_hash_value::<T>(vv.all_vertices(), &numbering.clone(), &orbits_to_be_partitioned, numbering, orbits_output);
}
/// GIVP procese
///     if vertex numbering is given, it will partition according to the extendable hash_values directly
GIVP procese
if vertex numbering is given, it will partition according to the extendable hash_values directly
GIVP procese if vertex numbering is given it will partition according to the extendable hash_values directly
pub fn run<T: core::graph::VertexExtendableHash>(
    vv: &core::graph::VertexVec<T::VertexType>,
    numbering: &mut Vec<usize>,
    orbits_output: &mut Vec<core::orbit_ops::Orbit>
) {
    if numbering.len() == 0 {
        let fixed_hash_values: Vec<core::graph::VertexFixedHashValue> = vv.all_vertices().iter()
            .map(|v| v.fixed_hash_value())
            .collect();
        *numbering = vec![vv.len(); vv.all_len()];
        orbits_output.clear();
        partition_vertices_once::<T>(vv.valid_indexes(), vv.all_vertices(), &fixed_hash_values, numbering, orbits_output);
    }
    // do GIAP again
    // case 469: COc1ccc(C(=O)C[n+]2c(C)n(Cc3c4c(cc5c3OCC5)OCC4)c3ccccc32)cc1
    let orbits_to_be_partitioned = orbits_output.clone();
    orbits_output.clear();
    partition_vertices_with_extendable_hash_value::<T>(vv.all_vertices(), &numbering.clone(), &orbits_to_be_partitioned, numbering, orbits_output);
}
pub fn run < T : core :: graph :: VertexExtendableHash > ( vv : & core :: graph :: VertexVec < T :: VertexType > , numbering : & mut Vec < usize > , orbits_output : & mut Vec < core :: orbit_ops :: Orbit > ) { if numbering . len ( ) == 0 { let fixed_hash_values : Vec < core :: graph :: VertexFixedHashValue > = vv . all_vertices ( ) . iter ( ) . map ( | v | v . fixed_hash_value ( ) ) . collect ( ) ; * numbering = vec ! [ vv len ( ) vv all_len ( ) ] ; orbits_output . clear ( ) ; partition_vertices_once :: < T > ( vv . valid_indexes ( ) , vv . all_vertices ( ) , & fixed_hash_values , numbering , orbits_output ) ; } // do GIAP again // case 469: COc1ccc(C(=O)C[n+]2c(C)n(Cc3c4c(cc5c3OCC5)OCC4)c3ccccc32)cc1 let orbits_to_be_partitioned = orbits_output . clone ( ) ; orbits_output . clear ( ) ; partition_vertices_with_extendable_hash_value :: < T > ( vv . all_vertices ( ) , & numbering . clone ( ) , & orbits_to_be_partitioned , numbering , orbits_output ) ; }
GIVP procese
if vertex numbering is given, it will partition according to the extendable hash_values directly
GIVP procese if vertex numbering is given it will partition according to the extendable hash_values directly
vv
&core::graph::VertexVec<T::VertexType>
numbering
&mut Vec<usize>
orbits_output
&mut Vec<core::orbit_ops::Orbit>
vv
&core::graph::VertexVec<T::VertexType>
numbering
&mut Vec<usize>
orbits_output
&mut Vec<core::orbit_ops::Orbit>