Compiler transforms
This page collects documentation on the Infer.NET compiler transforms.
| Transform | Summary | 
|---|---|
| Gate | Handles if and switch statements with stochastic arguments. | 
    
| Indexing | Converts constant array indexing such as a[0] into a separate variable a_item0. | 
| Depth cloning | Clones variables to ensure that each is used at a fixed depth. | 
| Replication | Replicates any variables which are referenced in a loop, so that each reference is a unique variable. | 
| Variable | Inserts variable factors, splitting each variable into a definition, use, and marginal. | 
| If cutting | Splits if statements. | 
    
| Channel | Converts variables so that each reference becomes a unique channel variable, corresponding to an edge in the factor graph. | 
| Group | Converts GroupMember attributes into ChannelPath attributes | 
| Hybrid algorithm | Allows different algorithms to be applied to different parts of the graph. Inserts operators at algorithm boundaries to transform the messages of one algorithm into messages suitable for another. | 
| Message | Transforms a model specified in terms of channels into the set of message passing operations required to perform inference in that model. | 
| Message optimisation | Removes duplicate messages or redundant message operations. | 
| Loop cutting | Splits for loops and promotes variables declared in loops to the top level. | 
    
| Dependency analysis | Determines dependencies between statements in the code. | 
| Pruning | Removes statements whose result is never used by an output, and removes updates whose result is uniform. | 
| Iteration | Creates while(true) loops around statement blocks with cyclic dependencies. Statements not in loops, and the loops themselves, are topologically sorted. | 
    
| Scheduling | Re-orders statements within while(true) loops to respect their dependency requirements. | 
    
| Dead code elimination | Post-optimization of the schedule. Removes statements whose result is never used. | 
| Iterative process | Converts an inference method into a class which implements IGeneratedAlgorithm. Promotes local variables to fields and places parts of the inference into different methods. | 
    
| Loop merging | Optimizes the generated code by merging consecutive for loops over the same range into one for loop. |