@@ -643,150 +643,3 @@ function TreeSet(
643643
644644 return TreeSet (reverse_bfs_orders, is_star, tree_edge_indices, nt)
645645end
646-
647- # # Postprocessing, mirrors decompression code
648-
649- function postprocess! (
650- color:: AbstractVector{<:Integer} ,
651- star_or_tree_set:: Union{StarSet,TreeSet} ,
652- g:: AdjacencyGraph ,
653- offsets:: AbstractVector{<:Integer} ,
654- )
655- S = pattern (g)
656- edge_to_index = edge_indices (g)
657- # flag which colors are actually used during decompression
658- nb_colors = maximum (color)
659- color_used = zeros (Bool, nb_colors)
660-
661- # nonzero diagonal coefficients force the use of their respective color (there can be no neutral colors if the diagonal is fully nonzero)
662- if has_diagonal (g)
663- for i in axes (S, 1 )
664- if ! iszero (S[i, i])
665- color_used[color[i]] = true
666- end
667- end
668- end
669-
670- if star_or_tree_set isa StarSet
671- # only the colors of the hubs are used
672- (; star, hub) = star_or_tree_set
673- nb_trivial_stars = 0
674-
675- # Iterate through all non-trivial stars
676- for s in eachindex (hub)
677- h = hub[s]
678- if h > 0
679- color_used[color[h]] = true
680- else
681- nb_trivial_stars += 1
682- end
683- end
684-
685- # Process the trivial stars (if any)
686- if nb_trivial_stars > 0
687- rvS = rowvals (S)
688- for j in axes (S, 2 )
689- for k in nzrange (S, j)
690- i = rvS[k]
691- if i > j
692- index_ij = edge_to_index[k]
693- s = star[index_ij]
694- h = hub[s]
695- if h < 0
696- h = abs (h)
697- spoke = h == j ? i : j
698- if color_used[color[spoke]]
699- # Switch the hub and the spoke to possibly avoid adding one more used color
700- hub[s] = spoke
701- else
702- # Keep the current hub
703- color_used[color[h]] = true
704- end
705- end
706- end
707- end
708- end
709- end
710- else
711- # only the colors of non-leaf vertices are used
712- (; reverse_bfs_orders, is_star, tree_edge_indices, nt) = star_or_tree_set
713- nb_trivial_trees = 0
714-
715- # Iterate through all non-trivial trees
716- for k in 1 : nt
717- # Position of the first edge in the tree
718- first = tree_edge_indices[k]
719-
720- # Total number of edges in the tree
721- ne_tree = tree_edge_indices[k + 1 ] - first
722-
723- # Check if we have more than one edge in the tree (non-trivial tree)
724- if ne_tree > 1
725- # Determine if the tree is a star
726- if is_star[k]
727- # It is a non-trivial star and only the color of the hub is needed
728- (_, hub) = reverse_bfs_orders[first]
729- color_used[color[hub]] = true
730- else
731- # It is not a star and both colors are needed during the decompression
732- (i, j) = reverse_bfs_orders[first]
733- color_used[color[i]] = true
734- color_used[color[j]] = true
735- end
736- else
737- nb_trivial_trees += 1
738- end
739- end
740-
741- # Process the trivial trees (if any)
742- if nb_trivial_trees > 0
743- for k in 1 : nt
744- # Position of the first edge in the tree
745- first = tree_edge_indices[k]
746-
747- # Total number of edges in the tree
748- ne_tree = tree_edge_indices[k + 1 ] - first
749-
750- # Check if we have exactly one edge in the tree
751- if ne_tree == 1
752- (i, j) = reverse_bfs_orders[first]
753- if color_used[color[i]]
754- # Make i the root to avoid possibly adding one more used color
755- # Switch it with the (only) leaf
756- reverse_bfs_orders[first] = (j, i)
757- else
758- # Keep j as the root
759- color_used[color[j]] = true
760- end
761- end
762- end
763- end
764- end
765-
766- # if at least one of the colors is useless, modify the color assignments of vertices
767- if any (! , color_used)
768- num_colors_useless = 0
769-
770- # determine what are the useless colors and compute the offsets
771- for ci in 1 : nb_colors
772- if color_used[ci]
773- offsets[ci] = num_colors_useless
774- else
775- num_colors_useless += 1
776- end
777- end
778-
779- # assign the neutral color to every vertex with a useless color and remap the colors
780- for i in eachindex (color)
781- ci = color[i]
782- if ! color_used[ci]
783- # assign the neutral color
784- color[i] = 0
785- else
786- # remap the color to not have any gap
787- color[i] -= offsets[ci]
788- end
789- end
790- end
791- return color
792- end
0 commit comments