Import in-circuit test results from a Takaya flying probe tester (ATD and ATDX result files) into TofuPilot with the Python SDK. One run per board, one phase per component class, one measurement per tester step with the limits the tester applied. Includes a drop-folder watcher for the tester's export directory and three real result files to try it on.
| Feature | Where |
|---|---|
| ATDX parser (APT-1400F and newer, semicolon-delimited) | takaya/atdx.py |
| ATD parser (classic tab-delimited, multi-board panels) | takaya/atd.py |
| Tester units and tolerances to SDK validators | takaya/units.py, takaya/mapping.py |
| Steps grouped into phases by component class | takaya/mapping.py -- classify() |
| Tester verdict kept as measurement outcome (PASS / FAIL / UNSET) | takaya/mapping.py -- outcome() |
client.runs.create() with phases, measurements, validators, metadata |
import_takaya.py |
Payload validated against the SDK schema before upload (--dry-run) |
import_takaya.py |
Drop-folder import with imported/ and failed/ handling |
watch_folder.py |
| Real tester files, MIT-licensed | samples/ |
- Sign up for a free TofuPilot account at tofupilot.app.
- Create a procedure for your ICT station and copy its ID from the procedure page.
- Create an API key under Settings > API Keys, then:
pip install "tofupilot>=2.18.0"
export TOFUPILOT_API_KEY=...
python import_takaya.py samples/PB2939800_E_BOT-20230420130239.ATD --procedure-id <id>--dry-run --json out/ builds and validates the payloads without uploading. --serial-suffix-group appends -G<n> to the serial when the tester prints the work order instead of a board serial. For continuous import, point watch_folder.py at the tester's export directory.
For deeper guides, see the TofuPilot docs and the Flying Probe ICT template page.
.
├── import_takaya.py # CLI: parse, map, validate, upload
├── watch_folder.py # Poll the tester's export folder, import new files
├── takaya/
│ ├── model.py # Board and Step, shared by both parsers
│ ├── atdx.py # ATDX parser
│ ├── atd.py # ATD parser (panels: one group per board)
│ ├── units.py # O / KO / NF ... to Ω / kΩ / nF, tolerance strings
│ └── mapping.py # Board -> runs.create payload
├── samples/ # Real Takaya result files (Virinco, MIT)
├── tests/test_takaya.py # Parser and schema checks on the samples
├── pyproject.toml
└── README.md
The tester's Func column says how it judged the step; the importer turns that into the same limits as validators:
| Func | Meaning | Validators |
|---|---|---|
EQ |
reference within -tol% / +tol% | >= ref·(1-tol-), <= ref·(1+tol+) |
OP |
open: resistance at least ref | >= ref |
SH |
short: resistance at most ref | <= ref |
GE / LE |
one-sided | >= ref / <= ref |
PASS stays PASS; FAIL, UPPER, LOWER, PHA.MISALIGN become FAIL; SKIP, UnTested, UNMEASURED and the ATD ...... jump marker become UNSET with no value. Values stay in the unit the tester printed (4.7 kΩ stays 4.7 kΩ).
SPEA, Seica and Acculogic write their own report formats. The Board / Step model in takaya/model.py and the mapping in takaya/mapping.py do not depend on Takaya; add a parser that fills a Board and the rest of the pipeline is reused.
samples/ holds three result files from the Virinco WATS Takaya converter (MIT License, Copyright 2025 Virinco): one ATDX panel with two failing boards, one ATD panel with four boards, one single-board ATD.
