Flowchart that summarizes the steps taken by GraTeLPy to find all critical fragments of a given order. The division of tasks between a single server and one or more clients is highlighted. (top diamonds) The fragment server reads in the user-specified mechanism file and generates the bipartite digraph. The server generates all fragments of an user-defined order k and places them in a queue. (center rectangles) One or more client scripts fetch fragments off the queue and process them independently. For each fragment S
, a client generates all subgraphs and computes the weight of each subgraph. The subgraph weights are then added to compute the weight of the corresponding fragment. The client passes the computed data back to the server and fetches another fragment off the queue if the queue is not yet exhausted. (bottom diamonds) After preparing the fragment queue, the server waits for the results sent by the clients. Upon receipt of client-computed results for a fragment, the server stores these results if the fragment is found to have non-zero weight. Once the queue is exhausted, the server informs the user about the number of critical fragments discovered and generates other informative output.