When you start using LabVIEW, one of the first tools you’ll encounter is the Functions Palette. This palette helps you locate the blocks needed to build your program’s logic by organizing them into various sections. As you gain experience, you start using the QuickDrop tool, which lets you add blocks and structures by searching for them.
Figure 1: Functions Palette

Figure 2: QuickDrop

To complement QuickDrop, we have been working on DMC-Complete: a tool that has the potential to supercharge the way you use LabVIEW by predicting the blocks you need right when you need them.
Simply clicking on a block triggers the DMC-Complete interface to predict what block you are most likely to use next, speeding up the process of programming so you can focus on the logic of your code rather than the tedium of searching for a specific block.
DMC-Complete Offers:
- Blazing speed – predictions happen in milliseconds
- Fully local operation – no internet required
- Minimal resource usage – runs efficiently even on VMs
- Full library compatibility – works with custom and VIPM packages
- Strong privacy – your code stays on your device
- Easy retraining – add or remove packages with minimal effort
- Open-source access – check out the code, available under the BSD 3-Clause License
Getting Started
If you want to get started with using DMC-Complete, check out our repository where the code for this project lives: https://github.com/fadilf/DMC-Complete
The Installation and Usage sections of the README.md file should help you get up and running with the tool in no time! Keep in mind that the project is currently an early beta, so if you encounter any issues while using it, please file them on the GitHub page.
How It Works
At GDevCon NA in Chicago this year, DMC got a chance to give a talk on how the tool works in more detail!
Markov Chains
The key to understanding DMC Complete? Markov chains. A Markov chain can model a sequence of events in which the probability of each event depends only on a limited set of prior states. This approach can be used to model things as important as the weather or something as mundane as your opponent’s next move in rock-paper-scissors:
[…, ☀️, ☁️, 🌧️] → ⛈️ (50%) / 🌧️ (30%) / ☁️ (20%)
[…, rock, paper, scissors] → rock (60%) / paper (30%) / scissors (10%)
These simple statistical relationships form the basis for predicting the next LabVIEW block in your block diagram.
Analyzing Block Diagrams
Figure 3

Let’s look at an example block diagram. We’ve got different types of blocks like controls, indicators, constants, DAQmx functions, etc., as well as a for loop structure. If we ignore structures, our block diagram looks like this:
Figure 4

We then genericize the blocks so we can treat them as Markov states for analysis. You might notice that this looks a lot like a directed acyclic graph.
Figure 5

Once we have this set of Markov states, we can start to observe patterns of blocks to make predictions later. If we count 2-block sequences, a pattern begins to emerge.
Figure 6

Figure 7

Once you have a table like figure 7, you can reorganize it into a Markov model, which looks more like this:
Figure 8

Now, when we see a numeric control, we know that the next block is either a Sine Wave (50% chance), a DAQmx Create Channel block (~33% chance), or a DAQmx Timing block (~17% chance). If we apply this process to our entire training set, including the example files included with LabVIEW and any libraries we install, we get a model that learns the pattern of how we code with the blocks we have.
This model is just a mapping/dictionary, so it only takes up a few megabytes on disk and in memory. Using it is as simple as a map lookup, so it’s an instant O(1) operation. Behind the scenes, there is a caching mechanism that takes place, so if you want to retrain with fewer/more files, the retraining process runs very quickly. The slowest part of training is the initial conversion of a VI file into a graph, which is why we have taken on the burden of creating a pre-made cache that should speed up initial training as well.
Summary
DMC-Complete demonstrates how classical AI techniques can deliver surprising results. By combining the simple principle of Markov modeling with the power of LabVIEW’s graphical programming, you can have a practical, private, and responsive coding companion. Sometimes, the simplest solutions are the most effective.
By developing this tool, we hope to contribute to the ever-growing landscape of open-source projects written in LabVIEW that work to improve productivity and serve our needs as well as our clients’ needs better. Contributions to the project are welcome at the repository link provided above.
Want to leverage the expertise of our world-class LabVIEW developers with Test and Measurement Automation experience in a broad range of industries? Contact us today to learn more about our solutions and how we can help you achieve your goals.







