From f81e65d848c2d2b2e7b8f973443f7baf22564355 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charlotte=20Ev=C3=A9quoz?= Date: Wed, 6 Aug 2025 15:24:10 +0200 Subject: [PATCH 1/6] Remove old Git Actions and test scripts --- .github/workflows/run-templates.yml | 40 ---- .github/workflows/test-scripts.yml | 74 ------- .../client/create_run/basic/main.py | 33 ---- .../client/create_run/fpy/main.py | 25 --- .../create_run/multiple_sub_units/main.py | 23 --- .../create_run/phases_string_outcome/main.py | 57 ------ .../create_run/procedure_version/main.py | 53 ----- .../client/create_run/single_sub_unit/main.py | 23 --- .../client/create_run/started_at/main.py | 29 --- .../with_all_types_of_phases/main.py | 89 --------- .../data/performance-report.pdf | Bin 1527 -> 0 bytes .../with_attachments/data/temperature-map.png | Bin 123264 -> 0 bytes .../create_run/with_attachments/main.py | 26 --- .../client/create_run/with_duration/main.py | 42 ---- .../create_run/with_phases_and_steps/main.py | 183 ------------------ .../basic/main.py | 36 ---- .../with_attachments/data/oscilloscope.jpeg | Bin 28654 -> 0 bytes .../with_attachments/data/sample_file.txt | 1 - .../with_attachments/main.py | 49 ----- .../client/delete_run/basic/main.py | 13 -- .../client/delete_unit/basic/main.py | 15 -- .../get_runs/basic/data/temperature-map.png | Bin 123264 -> 0 bytes .../client/get_runs/basic/main.py | 34 ---- .../with_attachments/data/temperature-map.png | Bin 123264 -> 0 bytes .../client/get_runs/with_attachments/main.py | 37 ---- .../client/legacy/steps/advanced/main.py | 45 ----- .../client/legacy/steps/optional/main.py | 37 ---- .../client/legacy/steps/required/main.py | 32 --- .../client/update_unit/basic/main.py | 30 --- .../all_the_things/data/oscilloscope.jpeg | Bin 28654 -> 0 bytes .../openhtf/all_the_things/main.py | 183 ------------------ .../openhtf/generic/data/oscilloscope.jpeg | Bin 28654 -> 0 bytes testing_examples/openhtf/generic/main.py | 99 ---------- testing_examples/openhtf/logger/main.py | 54 ------ .../openhtf/multi_dimensions/main.py | 104 ---------- .../openhtf/multi_measurements/main.py | 116 ----------- .../openhtf/procedure_version/main.py | 30 --- .../openhtf/regex_serial_number/main.py | 25 --- .../without_streaming/data/oscilloscope.jpeg | Bin 28654 -> 0 bytes .../openhtf/without_streaming/main.py | 183 ------------------ 40 files changed, 1820 deletions(-) delete mode 100644 .github/workflows/run-templates.yml delete mode 100644 .github/workflows/test-scripts.yml delete mode 100644 testing_examples/client/create_run/basic/main.py delete mode 100644 testing_examples/client/create_run/fpy/main.py delete mode 100644 testing_examples/client/create_run/multiple_sub_units/main.py delete mode 100644 testing_examples/client/create_run/phases_string_outcome/main.py delete mode 100644 testing_examples/client/create_run/procedure_version/main.py delete mode 100644 testing_examples/client/create_run/single_sub_unit/main.py delete mode 100644 testing_examples/client/create_run/started_at/main.py delete mode 100644 testing_examples/client/create_run/with_all_types_of_phases/main.py delete mode 100644 testing_examples/client/create_run/with_attachments/data/performance-report.pdf delete mode 100644 testing_examples/client/create_run/with_attachments/data/temperature-map.png delete mode 100644 testing_examples/client/create_run/with_attachments/main.py delete mode 100644 testing_examples/client/create_run/with_duration/main.py delete mode 100644 testing_examples/client/create_run/with_phases_and_steps/main.py delete mode 100644 testing_examples/client/create_run_from_openhtf_report/basic/main.py delete mode 100644 testing_examples/client/create_run_from_openhtf_report/with_attachments/data/oscilloscope.jpeg delete mode 100644 testing_examples/client/create_run_from_openhtf_report/with_attachments/data/sample_file.txt delete mode 100644 testing_examples/client/create_run_from_openhtf_report/with_attachments/main.py delete mode 100644 testing_examples/client/delete_run/basic/main.py delete mode 100644 testing_examples/client/delete_unit/basic/main.py delete mode 100644 testing_examples/client/get_runs/basic/data/temperature-map.png delete mode 100644 testing_examples/client/get_runs/basic/main.py delete mode 100644 testing_examples/client/get_runs/with_attachments/data/temperature-map.png delete mode 100644 testing_examples/client/get_runs/with_attachments/main.py delete mode 100644 testing_examples/client/legacy/steps/advanced/main.py delete mode 100644 testing_examples/client/legacy/steps/optional/main.py delete mode 100644 testing_examples/client/legacy/steps/required/main.py delete mode 100644 testing_examples/client/update_unit/basic/main.py delete mode 100644 testing_examples/openhtf/all_the_things/data/oscilloscope.jpeg delete mode 100644 testing_examples/openhtf/all_the_things/main.py delete mode 100644 testing_examples/openhtf/generic/data/oscilloscope.jpeg delete mode 100644 testing_examples/openhtf/generic/main.py delete mode 100644 testing_examples/openhtf/logger/main.py delete mode 100644 testing_examples/openhtf/multi_dimensions/main.py delete mode 100644 testing_examples/openhtf/multi_measurements/main.py delete mode 100644 testing_examples/openhtf/procedure_version/main.py delete mode 100644 testing_examples/openhtf/regex_serial_number/main.py delete mode 100644 testing_examples/openhtf/without_streaming/data/oscilloscope.jpeg delete mode 100644 testing_examples/openhtf/without_streaming/main.py diff --git a/.github/workflows/run-templates.yml b/.github/workflows/run-templates.yml deleted file mode 100644 index e750daa..0000000 --- a/.github/workflows/run-templates.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Run Python Mock-up Data Script - -on: - schedule: - # Run every weekday at 7:00 AM UTC - - cron: "0 7 * * 1-5" - # Run the script from GitHub interface - workflow_dispatch: - -jobs: - execute-python-scripts: - runs-on: ubuntu-latest - - steps: - # Checkout the repository - - name: Checkout code - uses: actions/checkout@v3 - - # Set up Python environment - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: "3.x" - - # Install tofupilot package - - name: Install dependencies - run: | - python -m pip install --upgrade pip - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - # Set TOFUPILOT_API_KEY and run all Python files in corresponding folder - - name: Run Battery-Testing Script - env: - TOFUPILOT_API_KEY: ${{ secrets.GET_STARTED_BATTERY_API_KEY }} - run: | - cd welcome_aboard/battery_testing - for i in {1..10}; do - echo "Execution $i" - python main.py - done diff --git a/.github/workflows/test-scripts.yml b/.github/workflows/test-scripts.yml deleted file mode 100644 index d712852..0000000 --- a/.github/workflows/test-scripts.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: Run Python Scripts - -on: - push: - branches: - - main - pull_request: - branches: - - main - # Run the script from GitHub interface - workflow_dispatch: - -jobs: - execute-python-scripts: - # Running on both ubuntu and windows - strategy: - matrix: - os: [ubuntu-latest, windows-latest] - runs-on: ${{ matrix.os }} - - env: - TOFUPILOT_API_KEY: ${{ secrets.PRODUCTION_API_KEY}} - # Forcing Python to run in UTF-8 mode for all steps in this job - PYTHONUTF8: "1" - - steps: - # Checking out the repository - - name: Checking out the repository - uses: actions/checkout@v3 - - - name: Changing code page to UTF-8 (Windows only) - if: runner.os == 'Windows' - run: chcp 65001 - - # Setting up Python - - name: Setting up Python - uses: actions/setup-python@v4 - with: - python-version: "3.11" - - # Installing dependencies - - name: Installing dependencies - shell: bash - run: | - if [[ "$RUNNER_OS" == "Windows" ]]; then - python -m pip install --upgrade pip - else - pip install --upgrade pip - fi - - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - # Running all Python scripts - - name: Running all Python scripts - shell: bash - run: | - find . -type f -name 'main.py' \ - -not -path '*/venv/*' \ - -not -path '*/.*/*' \ - -print0 | while IFS= read -r -d '' file; do - - directory="$(dirname "$file")" - - if [ -f "$directory/requirements.txt" ]; then - pip install -r "$directory/requirements.txt" - fi - - echo "Running files in $directory" - - ( - cd "$directory" || exit - python main.py - ) - done diff --git a/testing_examples/client/create_run/basic/main.py b/testing_examples/client/create_run/basic/main.py deleted file mode 100644 index 84fb1bb..0000000 --- a/testing_examples/client/create_run/basic/main.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -Basic example showing how to create a test run using the TofuPilotClient. - -This script creates a test run for a unit with the specified serial number and part number, -indicating whether the test passed. - -Ensure your API key is stored in the environment variables as per the documentation: -https://tofupilot.com/docs/user-management#api-key -""" - -import random - -from tofupilot import TofuPilotClient - - -def main(): - # Initialize the TofuPilot client. - client = TofuPilotClient() - # Create a test run for the unit with serial number "00102" and part - # number "PCB01" - random_digits = "".join([str(random.randint(0, 9)) for _ in range(5)]) - serial_number = f"00220D4K{random_digits}" - client.create_run( - procedure_id="FVT1", - unit_under_test={ - "serial_number": serial_number, - "part_number": "PCB01"}, - run_passed=True, - ) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/client/create_run/fpy/main.py b/testing_examples/client/create_run/fpy/main.py deleted file mode 100644 index 2dd951f..0000000 --- a/testing_examples/client/create_run/fpy/main.py +++ /dev/null @@ -1,25 +0,0 @@ -import random -from datetime import datetime, timedelta - -from tofupilot import TofuPilotClient - -client = TofuPilotClient() - - -def handle_test(): - # Create 2 test for same SN - for testnumber in range(2): - client.create_run( - procedure_id="FVT112", - started_at=datetime.now(), - unit_under_test={ - "part_number": "FPY", - "serial_number": "FPY-0123410", - }, - # First Good, Second KO, to check FPY - run_passed=True if testnumber == 0 else False, - ) - - -if __name__ == "__main__": - handle_test() diff --git a/testing_examples/client/create_run/multiple_sub_units/main.py b/testing_examples/client/create_run/multiple_sub_units/main.py deleted file mode 100644 index 32315d0..0000000 --- a/testing_examples/client/create_run/multiple_sub_units/main.py +++ /dev/null @@ -1,23 +0,0 @@ -""" -Example script demonstrating how to create a test run in TofuPilot with multiple sub-units. - -This script creates a test run for a unit with the specified serial number and part number, -and includes multiple sub-units in the run. - -Ensure your API key is stored in the environment variables as per the documentation: -https://tofupilot.com/docs/user-management#api-key -""" - -from tofupilot import TofuPilotClient - -# Initialize the TofuPilot client -client = TofuPilotClient() - -# Create a test run for the unit with serial number "00003" and part number "SI002", -# including sub-units with serial numbers "00002" and "00102" -client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "00003", "part_number": "SI002"}, - run_passed=True, - sub_units=[{"serial_number": "00002"}, {"serial_number": "00102"}], -) diff --git a/testing_examples/client/create_run/phases_string_outcome/main.py b/testing_examples/client/create_run/phases_string_outcome/main.py deleted file mode 100644 index ab964c9..0000000 --- a/testing_examples/client/create_run/phases_string_outcome/main.py +++ /dev/null @@ -1,57 +0,0 @@ -import random -import time - -from tofupilot import TofuPilotClient - -client = TofuPilotClient() - - -def flash_firmware(): - passed = bool(random.randint(0, 1)) - measured_value = "1.2.4" if passed else "1.2.0" - return passed, measured_value, None, None, None - - -def handle_test(): - serial_number = f"SI0364A{random.randint(10000, 99999)}" - - start_time = int(time.time() * 1000) - passed, measured_value, unit, limit_low, limit_high = flash_firmware() - end_time = int(time.time() * 1000) - - outcome = "PASS" if passed else "FAIL" - - phase = { - "name": "flash_firmware", - "outcome": outcome, - "start_time_millis": start_time, - "end_time_millis": end_time, - "measurements": [ - { - "name": "flash_firmware", - "outcome": outcome, - "measured_value": measured_value, - "units": unit, - "lower_limit": limit_low, - "upper_limit": limit_high, - } - ], - } - - client.create_run( - procedure_id="FVT9", - procedure_name="Test_QA", - unit_under_test={ - "part_number": "SI03645A", - "part_name": "test-QA", - "revision": "3.1", - "batch_number": "11-24", - "serial_number": serial_number, - }, - run_passed=passed, - phases=[phase], - ) - - -if __name__ == "__main__": - handle_test() diff --git a/testing_examples/client/create_run/procedure_version/main.py b/testing_examples/client/create_run/procedure_version/main.py deleted file mode 100644 index 9d4ab6e..0000000 --- a/testing_examples/client/create_run/procedure_version/main.py +++ /dev/null @@ -1,53 +0,0 @@ -import random -import time -from datetime import datetime, timedelta - -from tofupilot import TofuPilotClient - - -def main(): - client = TofuPilotClient() - - # Generate SN - serial_number = f"SI0364A{random.randint(10000, 99999)}" - - # 1 Phase test - start_time_millis = int(time.time() * 1000) - voltage = round(random.uniform(3, 4), 1) - limits = {"limit_low": 3.1, "limit_high": 3.5} - passed = limits["limit_low"] <= voltage <= limits["limit_high"] - outcome = {True: "PASS", False: "FAIL"}[passed] - end_time_millis = int(time.time() * 1000) - - client.create_run( - unit_under_test={ - "part_number": "SI0364", - "serial_number": serial_number, - "revision": "A", - }, - procedure_id="FVT1", # First create procedure in Application - procedure_version="1.2.20", # Create procedure version - phases=[ - { - "name": "test_voltage", - "outcome": outcome, - "start_time_millis": start_time_millis, - "end_time_millis": end_time_millis, - "measurements": [ - { - "name": "voltage_input", - "outcome": outcome, - "measured_value": voltage, - "units": "V", - "lower_limit": limits["limit_low"], - "upper_limit": limits["limit_high"], - }, - ], - }, - ], - run_passed=passed, - ) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/client/create_run/single_sub_unit/main.py b/testing_examples/client/create_run/single_sub_unit/main.py deleted file mode 100644 index 5645c7f..0000000 --- a/testing_examples/client/create_run/single_sub_unit/main.py +++ /dev/null @@ -1,23 +0,0 @@ -""" -Example script demonstrating how to create a test run in TofuPilot with a single sub-unit. - -This script creates a test run for a unit with the specified serial number and part number, -and includes a single sub-unit in the run. - -Ensure your API key is stored in the environment variables as per the documentation: -https://tofupilot.com/docs/user-management#api-key -""" - -from tofupilot import TofuPilotClient - -# Initialize the TofuPilot client -client = TofuPilotClient() - -# Create a test run for the unit with serial number "00002" and part number "SI001", -# including a sub-unit with serial number "00102" -client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "00002", "part_number": "SI001"}, - run_passed=True, - sub_units=[{"serial_number": "00102"}], -) diff --git a/testing_examples/client/create_run/started_at/main.py b/testing_examples/client/create_run/started_at/main.py deleted file mode 100644 index 9a8e821..0000000 --- a/testing_examples/client/create_run/started_at/main.py +++ /dev/null @@ -1,29 +0,0 @@ -import random -from datetime import datetime, timedelta - -from tofupilot import TofuPilotClient - - -def main(): - # Initialize the TofuPilot client. - client = TofuPilotClient() - # Create a test run for the unit with serial number "00102" and part - # number "PCB01" - random_digits = "".join([str(random.randint(0, 9)) for _ in range(5)]) - serial_number = f"00220D4K{random_digits}" - client.create_run( - procedure_id="FVT1", - unit_under_test={ - "serial_number": serial_number, - "part_number": "PCB01"}, - run_passed=True, - started_at=datetime.now() - - timedelta( - days=1), - duration=timedelta( - seconds=23), - ) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/client/create_run/with_all_types_of_phases/main.py b/testing_examples/client/create_run/with_all_types_of_phases/main.py deleted file mode 100644 index 7138be7..0000000 --- a/testing_examples/client/create_run/with_all_types_of_phases/main.py +++ /dev/null @@ -1,89 +0,0 @@ -import random -from datetime import datetime, timedelta -from random import randint - -from tofupilot import TofuPilotClient - -# Reference time to calculate start_time_millis in milliseconds since epoch -epoch = datetime(1970, 1, 1) - - -# Function to calculate milliseconds since epoch -def to_millis(dt): - return int((dt - epoch).total_seconds() * 1000) - - -client = TofuPilotClient() - -client.create_run( - procedure_id="FVT1", - unit_under_test={ - "serial_number": "SN17", - "part_number": "PNrstsrtsr", - "batch_number": "B", - }, - run_passed=True, # Overall run status - phases=[ - { - "name": "phase_connect", # First phase - "outcome": "PASS", - "start_time_millis": to_millis( - datetime.now() - ), # Start time of the step in ms - "end_time_millis": to_millis( - datetime.now() + timedelta(seconds=5, milliseconds=12) - ), # End time in ms - "measurements": [ - { - "name": "numeric_measurement", - "outcome": "PASS", - "measured_value": 12, - "units": "Hertz", - "lower_limit": 1, - "upper_limit": 20, - }, - { - "name": "string_measurement", - "outcome": "PASS", - "measured_value": "Test value", - "units": "Unitless", - "docstring": "This is a string measurement example", - }, - { - "name": "boolean_measurement_true", - "outcome": "PASS", - "measured_value": True, - "units": "BooleanUnit", - "docstring": "This is a boolean measurement example", - }, - { - "name": "boolean_measurement_false", - "outcome": "PASS", - "measured_value": False, - "units": "BooleanUnit", - "docstring": "This is a boolean measurement example", - }, - { - "name": "json_measurement", - "outcome": "PASS", - "measured_value": {"key1": "value1", "key2": 42}, - "units": "JSONUnit", - "docstring": "This is a JSON measurement example", - }, - { - "name": "empty_measurement", - "outcome": "PASS", - "measured_value": None, - "units": "EmptyUnit", - "docstring": "This is a measurement with a null value", - }, - { - "name": "no_value_measurement", - "outcome": "PASS", - "units": "NoValueUnit", - "docstring": "This is a measurement with no value specified", - }, - ], - } - ], -) diff --git a/testing_examples/client/create_run/with_attachments/data/performance-report.pdf b/testing_examples/client/create_run/with_attachments/data/performance-report.pdf deleted file mode 100644 index ce6914bace06f26b8aebc72e582e1cd0591a1857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1527 zcmbVMe`pg|9Pg^o?r5d{UMG|{mPlP~?niR@VKbrmakf-VO^cNk>8_WTZd++n(nVWq=Eo-q-R=@z%*+seCbZasO0o^P{AcgO7sOo^lt3iqmLJb*l32J~_ zEO?Qs<8=+#$b9Ec3aTN3LZ*2%K~{7a2ehDwI`lyag)sPTs7CZCu-cvY8%>Wxv71T^ zeb91!@7GMlRJP`y(#?*ZDz$I4V)eS9`D)4K8+O*zyP>XiA@%3ztxcv4-*27>_l9RA z>Sp?gsccR9i{g{X(pSv&Mc-CcQ5_>a!bs79lNHy_R{!>gKRq~n^wFU;pDBNDdOy3~ zPBor-p{a6UuJlmw;>>;U>756~mwuQ-r`PjkrD>sSU(>4jSoCIJYOG{rmpZxnli_dn z*GQ?iO4>8W#+!$0oc@ZbOx@jvl&S5(;rE8_+%|3fYIJ%$8JX;ll@CVGw{DzzW47+D zOEOiyy6^2O@6hKjE(~0$JTrg!#ML9Sbzim|wm$AZdf{;?yGxopbKgC%>cg#VH|AcR zEt`lPzn9o}V*A3(U%#g6`R~?k8NYQU{hHW+%`>BAr;C5wKE}d#_Xf9|_gPP!{^{7y zFWtT#O?3P|HgNCU#8Ad_HkJ*hhyC#N%*W-I;QU9%@xe^TFN1Fy3+4MKJJ#-Lus=#Z z%&vV$n=W!kA96&iJoS0ih{`KGpiy*_9MV8LaYzsxq-ZZPh$Sd`4-Cno2PHr|gV%T$ zZ{eK4X=5!;*Foy38Tdk20lS8xJ)#E52+$2s>4my1iM1Z2gebbj=+tu_Bu>PA{3>>h ztVRIcCad+TCNCA1HL*W)ljp;CJTrc6pi_~13>=>4*#`;Mq6Rp8aU``s9kkOprGRdQ z2~1XFHx8yJ|McdcjaZf(mu@#6uz*mG^D1zF@IppbKz0x$jL`=Ion27U0e%@zp9C=;R|XE zga5j)=ETGn)a)#lv7qMoA3WzuJeIMpz++h(mT?JBkBhPbZ1x8P>R<8M?7sj2 diff --git a/testing_examples/client/create_run/with_attachments/data/temperature-map.png b/testing_examples/client/create_run/with_attachments/data/temperature-map.png deleted file mode 100644 index c7eb24b120b34ee7424a40d7cd425dee944a2b01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123264 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�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

y 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 JgPL9R{{R+5KQjOT diff --git a/testing_examples/client/create_run/with_attachments/main.py b/testing_examples/client/create_run/with_attachments/main.py deleted file mode 100644 index 7f9fe21..0000000 --- a/testing_examples/client/create_run/with_attachments/main.py +++ /dev/null @@ -1,26 +0,0 @@ -""" -Example script demonstrating how to create a test run in TofuPilot with attachments. - -This script creates a test run for a unit with the specified serial number and part number, -and includes attachments, such as images and reports, that are related to the test. - -Ensure your API key is stored in the environment variables as per the documentation: -https://tofupilot.com/docs/user-management#api-key -""" - -from tofupilot import TofuPilotClient - -# Initialize the TofuPilot client -client = TofuPilotClient() - -# Create a test run for the unit with serial number "00102" and part number "PCB01", -# including attachments such as images and PDF reports -client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "00102", "part_number": "PCB01"}, - run_passed=True, - attachments=[ - "data/temperature-map.png", # Path to your local files - "data/performance-report.pdf", - ], -) diff --git a/testing_examples/client/create_run/with_duration/main.py b/testing_examples/client/create_run/with_duration/main.py deleted file mode 100644 index d96aaac..0000000 --- a/testing_examples/client/create_run/with_duration/main.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Example script demonstrating how to create a test run in TofuPilot with the duration of the test. - -This script measures the duration of a test function, then creates a test run for a unit -with the specified serial number and part number, including the duration as part of the run data. - -Ensure your API key is stored in the environment variables as per the documentation: -https://tofupilot.com/docs/user-management#api-key -""" - -import time -from datetime import timedelta - -from tofupilot import TofuPilotClient - -# Initialize the TofuPilot client -client = TofuPilotClient() - - -def test_function(): - """ - Simulates a test execution. - """ - # Simulate test execution with a delay - time.sleep(1) # Placeholder for test execution time - return True - - -# Measure the duration of the test_function -start_time = time.time() -run_passed = test_function() -end_time = time.time() -duration = timedelta(seconds=end_time - start_time) # Calculate duration - -# Create a test run for the unit with serial number "00102" and part number "PCB01", -# including the duration of the test -client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "00102", "part_number": "PCB01"}, - run_passed=run_passed, - duration=duration, # Optional argument to include the duration -) diff --git a/testing_examples/client/create_run/with_phases_and_steps/main.py b/testing_examples/client/create_run/with_phases_and_steps/main.py deleted file mode 100644 index 9c729d6..0000000 --- a/testing_examples/client/create_run/with_phases_and_steps/main.py +++ /dev/null @@ -1,183 +0,0 @@ -import random -from datetime import datetime, timedelta -from random import randint - -from tofupilot import TofuPilotClient - -# Reference time to calculate start_time_millis in milliseconds since epoch -epoch = datetime(1970, 1, 1) - - -# Function to calculate milliseconds since epoch -def to_millis(dt): - return int((dt - epoch).total_seconds() * 1000) - - -client = TofuPilotClient() - -client.create_run( - procedure_id="FVT1", - unit_under_test={ - "serial_number": "SN17", - "part_number": "PNrstsrtsr", - "batch_number": "B", - }, - run_passed=True, # Overall run status - steps=[ - { - "name": "step_connect", # First step - "step_passed": True, # Status of the step - # Duration of the step - "duration": timedelta(seconds=5, milliseconds=12), - "started_at": datetime.now(), # Start time of the step - }, - { - "name": "step_string2", # First step - "step_passed": True, # Status of the step - # Duration of the step - "duration": timedelta(seconds=5, milliseconds=12), - "started_at": datetime.now(), # Start time of the step - "measurement_value": "This is a string", - }, - { - "name": "step_initial_charge_check", # Second step - "step_passed": True, # Status of the step - "duration": timedelta( - seconds=3, milliseconds=100 - ), # Duration of the step (<1s) - "started_at": datetime.now() - + timedelta(seconds=3), # Start time of the second step - "measurement_value": randint(90, 100), # Measured value - }, - { - "name": "step_initial_temp_check", # Third step - "step_passed": True, # Status of the step - "duration": timedelta( - seconds=1, milliseconds=100 - ), # Duration of the step (<1s) - "started_at": datetime.now() - # Start time of the third step - + timedelta(seconds=2, milliseconds=500), - "measurement_value": randint(-5, 20), # Measured temperature value - "measurement_unit": "°C", # Unit of the measurement (temperature) - "limit_low": 0, # Lower limit of acceptable temperature - }, - { - "name": "step_temp_calibration", # Fourth step - "step_passed": False, # Status of the step - "duration": timedelta( - seconds=3, milliseconds=100 - ), # Duration of the step (<1s) - "started_at": datetime.now() - timedelta(days=1, minutes=20), - "measurement_value": randint( - 69, 81 - ), # Measured temperature value after calibration - "measurement_unit": "°C", # Unit of the measurement (temperature) - "limit_low": 70, # Lower limit of acceptable temperature - "limit_high": 80, # Upper limit of acceptable temperature - }, - ], - phases=[ - { - "name": "phase_connect", # First phase - "outcome": "PASS", - "start_time_millis": to_millis( - datetime.now() - ), # Start time of the step in ms - "end_time_millis": to_millis( - datetime.now() + timedelta(seconds=5, milliseconds=12) - ), # End time in ms - "measurements": [ - { - "name": "connectivity_check", - "outcome": "PASS", # Measurement outcome - "measured_value": None, - "units": None, - "lower_limit": None, - "upper_limit": None, - } - ], - }, - { - "name": "phase_initial_charge_check", # Second phase - "outcome": "PASS", - "start_time_millis": to_millis( - datetime.now() + timedelta(seconds=3) - ), # Start time in ms - "end_time_millis": to_millis( - datetime.now() + timedelta(seconds=6, milliseconds=100) - ), # End time in ms - "measurements": [ - { - "name": "initial_charge", - "outcome": "PASS", # Measurement outcome - "measured_value": randint(90, 100), # Measured value - "units": None, - "lower_limit": None, - "upper_limit": None, - }, - { - "name": "initial_temperature", - "outcome": "PASS", # Measurement outcome - # Measured temperature value - "measured_value": randint(-5, 20), - "units": "°C", # Unit of the measurement - "lower_limit": 0, # Lower limit - "upper_limit": None, - }, - { - "name": "initial_temperature_2", - "outcome": "FAIL", # Measurement outcome - # Measured temperature value - "measured_value": randint(-5, 20), - "units": "°C", # Unit of the measurement - "lower_limit": 0, # Lower limit - "upper_limit": 15, # Upper limit - }, - ], - }, - { - "name": "phase_initial_temp_check", # Third phase - "outcome": "PASS", - "start_time_millis": to_millis( - datetime.now() + timedelta(seconds=2, milliseconds=500) - ), # Start time in ms - "end_time_millis": to_millis( - datetime.now() + timedelta(seconds=3, milliseconds=600) - ), # End time in ms - "measurements": [ - { - "name": "initial_temperature", - "outcome": "PASS", # Measurement outcome - # Measured temperature value - "measured_value": randint(-5, 20), - "units": "°C", # Unit of the measurement - "lower_limit": 0, # Lower limit - "upper_limit": None, - } - ], - }, - { - "name": "phase_temp_calibration", # Fourth phase - "outcome": "FAIL", - "start_time_millis": to_millis( - datetime.now() - timedelta(days=1, minutes=20) - ), # Start time in ms - "end_time_millis": to_millis( - datetime.now() - - timedelta(days=1, minutes=20) - + timedelta(seconds=3, milliseconds=100) - ), # End time in ms - "measurements": [ - { - "name": "temperature_calibration", - "outcome": "FAIL", # Measurement outcome - "measured_value": randint(69, 81), # Measured value - "units": "°C", # Unit of the measurement - "lower_limit": 70, # Lower limit - "upper_limit": 80, - } - ], - }, - ], -) diff --git a/testing_examples/client/create_run_from_openhtf_report/basic/main.py b/testing_examples/client/create_run_from_openhtf_report/basic/main.py deleted file mode 100644 index 536f5e9..0000000 --- a/testing_examples/client/create_run_from_openhtf_report/basic/main.py +++ /dev/null @@ -1,36 +0,0 @@ -from openhtf import PhaseResult, Test -from openhtf.output.callbacks import json_factory -from openhtf.plugs import user_input -from tofupilot import TofuPilotClient - -client = TofuPilotClient() - - -# Define a test phase to simulate the power-on procedure -def power_on_test(test): - print("Power on.") - return PhaseResult.CONTINUE - - -# Function to execute the test and save results to a JSON file -def execute_test(file_path): - test = Test(power_on_test, serial_number="PCB01") - - # Set output callback to save the test results as a JSON file - test.add_output_callbacks(json_factory.OutputToJSON(file_path)) - - # Execute the test with a specific device identifier - test.execute(lambda: "0001") - - -def main(): - # Specify the file path for saving test results - file_path = "./test_result.json" - execute_test(file_path) - - # Upload the test results to TofuPilot, specifying the importer type - client.create_run_from_openhtf_report(file_path) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/client/create_run_from_openhtf_report/with_attachments/data/oscilloscope.jpeg b/testing_examples/client/create_run_from_openhtf_report/with_attachments/data/oscilloscope.jpeg deleted file mode 100644 index d49014b45f840932a28524ead0c65bd264ce5235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28654 zcmb5Vb97}v(>Hoz-paM-al{ewf0(j zckQm)-BrKp>gxVn`TPe!m64E^0Dyr30AODi;By@y3V?!ugoK2E`no|uK|#YH!oqwN z6a)k~L?8+p8W05tM90F%M#sR#1OmU2e8VLmAR;0{$0j8wB_ziuBqIDzBVb>j!a&0y z!@?pHVgNA+|9_XyegF^_@Cn8U0Y(Y{2ZBKW!9Irp1ONayI0V>#{kug*8>^=8b|_zPKv?8DoiG#tYU;|>=cjyi-k?j#^LN5 zn3&u+|4k#MfPz!ht)W>}v#@Dyft^du#3guOkV;%VsOakYt8HAc|FHRg8GrGI1c!hE zgZ`@H1^yqt;IPnO;80Nik?cRjkU%ta5*8?BXjWk(r+|V63{tj)fvY)@ZA>z9l|oTt z=f>;LH2@;S7cCG12>1@DrPULgnO-dUW#RLinCV-1jPgao^6?na;CEF2KAx;M<;#;{ z_loB=i&L1l6*Emi!Z~Y&1={<{R~MY{$%E(xT+XTKeD{7v_uf9QLMp|on6!O1x7^uB z+jKuP?vVHAsjZzje+{;)gkh%3KjxnR4DXlvjLb3kY%s_!R)KC`77k(qfP+5xNQuJ z4xgUOC}8=PPU_Wz*GAewYSOEu%x0}lhQ!t8Z?0D)&f+Ja07s?ldvGj?zn=@&Q_&VE z`hT+{es&3YPs+JzwLEZP*!M}Eepui71Qc79EeD>kJsBYvsDyWfG4t1_D7WF1vKmpx z&-wxp-q&adOROygH-T~|{sD1zK;?e)zS?EwEAu@YLdP5nI1lG3{MQufN zeZpRL>h21sNv>Oc3Wf|T*g#nKSxGXDf0W((DiU^AJL zMY+Ra+=@PeT;c=bN^7;y*ifc4<;d`(PTTP*LSC zsO+7Gu$r64hTf>!_k`d2%NL8FO{N&Tz;^7~zLl{SPzT@jG)Z>#*lEf)t%naeP#YyW+;E^~a6V z;uAGYjI2T`AtFmzo3wRaX-j8P-ciQyVLZ^j6xXO~-cX zr?w;S4DuY8m?wBn_`m%{m<4qBg{Cs5Gu>#_@z@Wr%J^vYc(``ruXzgc~0?QwvX zkIHbCnU+BfK)l4$j!bvOIL4Cfs>eldW5}fH@q^Y=FvlPvM&h;dkcw|<(<46JauY%6 z8I@c)O`^_)LlowsYEu7*C1!Np$#OZCQ%g!S%X~Yr@Ex{RGDMX{`mYq^2<57UqD^J=JSoREXPFRi)7a$xK6VrLcE+rY3 zY37g8Fiyy9LN*W4C`nR~h@ASygd0$BpV>kj+^UFB;#M0c4Tpu^Hhfl$UdD?v$x8Fv z2=VVTIG4`qGxJ><_&xQxwO*RdDHBVB2f{M;Q_L{HcXUC(+*yc$Q73D>4&=x2zm0>j zOkq1kqDn5fBZ|4%4Gyqg_g&6Zgf?THkVw z-=EGbh|Nm&eHpmBD^Y=Z3a#&x)DHIJA)9}sz`NGW|FV@q3)&4@m|}Qy#0ldSJ;>zL zJ5To`yj&2r+vTjgVQ7!l!jnF4fkHS>Wbee(>M}tYD;SQ0+U)PV2U5l&XUmGiN|GGK z7hnpl;~0?b^@cKQL_XxSoq+MLGlhI!_LKwo@X+& zpxSG7Xx+l>}8#a;!)G@ns&h2xL`a7^!#3n)ye#J>_SWJ(hf=&qtBPfvjgj zHQ}_G6Fy~)udka@=-&_LzuzCS+tqynvIIbPZYC=op8&xQ7CaaJ1AT!!+Mb7>SBZ!p zIFlKK%;s|au&=bGyUhneIBJ+j6jZMdH;Z0L;1n*QG>GI-7VKn|+hFX;tqzbtg&xlr zOP#vhE~e=bdvi))oYOcL5o(F)T)S{Sm%wh?MWnjg%<6Fnlm*{`u=u@1`QryS!d2Wb z(f=TFp}bAV#M}1k-qegU@=^p1!!ZTZ{6Eln>sFn7FP}*<&IUsoyB6YDx;PeFTve

U=B%2GVw~aR&Q($>NqHhBkTM$&TAlSJ)KG0>&z} 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 ZHthDa$QPUMG6EyZD>|e@E=K<>|1WJe3-$m2 diff --git a/testing_examples/client/create_run_from_openhtf_report/with_attachments/data/sample_file.txt b/testing_examples/client/create_run_from_openhtf_report/with_attachments/data/sample_file.txt deleted file mode 100644 index 0089758..0000000 --- a/testing_examples/client/create_run_from_openhtf_report/with_attachments/data/sample_file.txt +++ /dev/null @@ -1 +0,0 @@ -OpenHTF + TofuPilot = <3 \ No newline at end of file diff --git a/testing_examples/client/create_run_from_openhtf_report/with_attachments/main.py b/testing_examples/client/create_run_from_openhtf_report/with_attachments/main.py deleted file mode 100644 index a0189e0..0000000 --- a/testing_examples/client/create_run_from_openhtf_report/with_attachments/main.py +++ /dev/null @@ -1,49 +0,0 @@ -import openhtf as htf -from openhtf import PhaseResult, Test -from openhtf.output.callbacks import json_factory -from openhtf.plugs import user_input -from tofupilot import TofuPilotClient -from tofupilot.openhtf import TofuPilot - -client = TofuPilotClient() - - -# Define a test phase to simulate the power-on procedure -def power_on_test(test): - print("Power on.") - return PhaseResult.CONTINUE - - -# Define a phase that attaches a file -def phase_file_attachment(test): - test.attach_from_file("data/sample_file.txt") - test.attach_from_file("data/oscilloscope.jpeg") - return htf.PhaseResult.CONTINUE - - -# Function to execute the test and save results to a JSON file -def execute_test(file_path): - test = Test( - power_on_test, - phase_file_attachment, - procedure_id="FVT7", - serial_number="PCB01") - - # Set output callback to save the test results as a JSON file - test.add_output_callbacks(json_factory.OutputToJSON(file_path)) - - # Execute the test with a specific device identifier - test.execute(lambda: "0001") - - -def main(): - # Specify the file path for saving test results - file_path = "./test_result.json" - execute_test(file_path) - - # Upload the test results to TofuPilot, specifying the importer type - client.create_run_from_openhtf_report(file_path) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/client/delete_run/basic/main.py b/testing_examples/client/delete_run/basic/main.py deleted file mode 100644 index e62f1eb..0000000 --- a/testing_examples/client/delete_run/basic/main.py +++ /dev/null @@ -1,13 +0,0 @@ -from tofupilot import TofuPilotClient - -client = TofuPilotClient() - -response = client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "00102", "part_number": "PCB01"}, - run_passed=True, -) - -run_id = response.get("id") - -client.delete_run(run_id=run_id) diff --git a/testing_examples/client/delete_unit/basic/main.py b/testing_examples/client/delete_unit/basic/main.py deleted file mode 100644 index 11343f0..0000000 --- a/testing_examples/client/delete_unit/basic/main.py +++ /dev/null @@ -1,15 +0,0 @@ -from tofupilot import TofuPilotClient - -client = TofuPilotClient() - -response = client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "NEW_UNIT", "part_number": "PCB01"}, - run_passed=True, -) - -run_id = response.get("id") - -client.delete_run(run_id=run_id) - -client.delete_unit(serial_number="NEW_UNIT") diff --git a/testing_examples/client/get_runs/basic/data/temperature-map.png b/testing_examples/client/get_runs/basic/data/temperature-map.png deleted file mode 100644 index c7eb24b120b34ee7424a40d7cd425dee944a2b01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123264 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�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

y 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 JgPL9R{{R+5KQjOT diff --git a/testing_examples/client/get_runs/basic/main.py b/testing_examples/client/get_runs/basic/main.py deleted file mode 100644 index ba6e286..0000000 --- a/testing_examples/client/get_runs/basic/main.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -Example script demonstrating how to create and then fetch a test run in TofuPilot. - -This script first creates a test run for a unit with a specified serial number and part number, -then retrieves the run data using the serial number. - -Ensure your API key is stored in the environment variables as per the documentation: -https://tofupilot.com/docs/user-management#api-key -""" - -from tofupilot import TofuPilotClient -import json - -# Initialize the TofuPilot client -client = TofuPilotClient() - -# Define the serial number of the unit under test -serial_number = "SN00106" - -client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": serial_number, "part_number": "PCB01"}, - run_passed=True, -) - -# Fetch the created run using the serial number -response = client.get_runs(serial_number=serial_number) - - -# Save JSON response locally -with open("response_saved.json", "w") as f: - json.dump(response, f, indent=2) - -print("Response saved to response_saved.json") diff --git a/testing_examples/client/get_runs/with_attachments/data/temperature-map.png b/testing_examples/client/get_runs/with_attachments/data/temperature-map.png deleted file mode 100644 index c7eb24b120b34ee7424a40d7cd425dee944a2b01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123264 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�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

y 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 JgPL9R{{R+5KQjOT diff --git a/testing_examples/client/get_runs/with_attachments/main.py b/testing_examples/client/get_runs/with_attachments/main.py deleted file mode 100644 index 516b176..0000000 --- a/testing_examples/client/get_runs/with_attachments/main.py +++ /dev/null @@ -1,37 +0,0 @@ -from tofupilot import TofuPilotClient -import requests -from pathlib import Path - - -def main(): - # First create a run - client = TofuPilotClient() - - serial_number = "SN00106" - - client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": serial_number, "part_number": "PCB01"}, - run_passed=True, - attachments=[ - "qa/client/get_runs/basic/data/temperature-map.png" - ], # Update with your file path - ) - - # Then fetch the created run using the serial number - res = client.get_runs(serial_number=serial_number) - attachments = res["data"][0]["attachments"] - - # Download and save each attachment next to the script - for attachment in attachments: - response = requests.get(attachment["url"]) - response.raise_for_status() - - file_path = Path(__file__).parent / attachment["name"] - - with open(file_path, "wb+") as f: - f.write(response.content) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/client/legacy/steps/advanced/main.py b/testing_examples/client/legacy/steps/advanced/main.py deleted file mode 100644 index 8ae17fe..0000000 --- a/testing_examples/client/legacy/steps/advanced/main.py +++ /dev/null @@ -1,45 +0,0 @@ -from datetime import datetime, timedelta - -from tofupilot import TofuPilotClient - - -def main(): - client = TofuPilotClient() - - client.create_run( - procedure_id="FVT1", - unit_under_test={ - "serial_number": "PCB1A002", - "part_number": "PCB1", - }, - run_passed=True, - steps=[ - { - "name": "step_connect", - "step_passed": True, - "duration": timedelta(seconds=3), - "started_at": datetime.now(), - }, - { - "name": "test_firmware_version_check", - "step_passed": True, - "duration": timedelta(minutes=1, seconds=42), - "started_at": datetime.now() + timedelta(seconds=3), - "measurement_value": "v2.5.1", - }, - { - "name": "step_temp_calibration", - "step_passed": True, - "duration": timedelta(milliseconds=500), - "started_at": datetime.now() + timedelta(seconds=4), - "measurement_value": 75, - "measurement_unit": "°C", - "limit_low": 70, - "limit_high": 80, - }, - ], - ) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/client/legacy/steps/optional/main.py b/testing_examples/client/legacy/steps/optional/main.py deleted file mode 100644 index 04b2cfa..0000000 --- a/testing_examples/client/legacy/steps/optional/main.py +++ /dev/null @@ -1,37 +0,0 @@ -from datetime import datetime, timedelta - -from tofupilot import TofuPilotClient - - -def step_one(): - step = [ - { - "name": "step_one", - "step_passed": True, - "started_at": datetime.now(), - "duration": timedelta(seconds=30), - # Add a measurement with value, units and limits - "measurement_unit": "V", - "measurement_value": 3.3, - "limit_low": 3.1, - "limit_high": 3.5, - } - ] - return step - - -def main(): - steps = step_one() - - client = TofuPilotClient() - - client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "PCB1A001", "part_number": "PCB1"}, - steps=steps, - run_passed=all(step["step_passed"] for step in steps), - ) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/client/legacy/steps/required/main.py b/testing_examples/client/legacy/steps/required/main.py deleted file mode 100644 index 54524d3..0000000 --- a/testing_examples/client/legacy/steps/required/main.py +++ /dev/null @@ -1,32 +0,0 @@ -from datetime import datetime, timedelta - -from tofupilot import TofuPilotClient - - -def step_one(): - step = [ - { - "name": "step_one", - "step_passed": True, - "duration": timedelta(seconds=30), - "started_at": datetime.now(), - } - ] - return step - - -def main(): - steps = step_one() - - client = TofuPilotClient() - - client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "PCB1A001", "part_number": "PCB1"}, - steps=steps, - run_passed=all(step["step_passed"] for step in steps), - ) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/client/update_unit/basic/main.py b/testing_examples/client/update_unit/basic/main.py deleted file mode 100644 index 9385262..0000000 --- a/testing_examples/client/update_unit/basic/main.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Simple example showing how to add a sub-unit to an existing unit using the TofuPilotClient. - -This script assumes you already have two units with the respective serial numbers "00102" and "00103". -If the units do not exist, you can uncomment the lines to create them first. - -Ensure your API key is stored in the environment variables as per the documentation: -https://tofupilot.com/docs/user-management#api-key -""" - -from tofupilot import TofuPilotClient - -# Initialize the TofuPilot client -client = TofuPilotClient() - -# Creating units -client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "00102", "part_number": "PCB01"}, - run_passed=True, -) -client.create_run( - procedure_id="FVT1", - unit_under_test={"serial_number": "00103", "part_number": "PSU01"}, - run_passed=True, -) - -# Update unit "00102" by adding unit "00103" as a sub-unit -client.update_unit(serial_number="00102", - sub_units=[{"serial_number": "00103"}]) diff --git a/testing_examples/openhtf/all_the_things/data/oscilloscope.jpeg b/testing_examples/openhtf/all_the_things/data/oscilloscope.jpeg deleted file mode 100644 index d49014b45f840932a28524ead0c65bd264ce5235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28654 zcmb5Vb97}v(>Hoz-paM-al{ewf0(j zckQm)-BrKp>gxVn`TPe!m64E^0Dyr30AODi;By@y3V?!ugoK2E`no|uK|#YH!oqwN z6a)k~L?8+p8W05tM90F%M#sR#1OmU2e8VLmAR;0{$0j8wB_ziuBqIDzBVb>j!a&0y z!@?pHVgNA+|9_XyegF^_@Cn8U0Y(Y{2ZBKW!9Irp1ONayI0V>#{kug*8>^=8b|_zPKv?8DoiG#tYU;|>=cjyi-k?j#^LN5 zn3&u+|4k#MfPz!ht)W>}v#@Dyft^du#3guOkV;%VsOakYt8HAc|FHRg8GrGI1c!hE zgZ`@H1^yqt;IPnO;80Nik?cRjkU%ta5*8?BXjWk(r+|V63{tj)fvY)@ZA>z9l|oTt z=f>;LH2@;S7cCG12>1@DrPULgnO-dUW#RLinCV-1jPgao^6?na;CEF2KAx;M<;#;{ z_loB=i&L1l6*Emi!Z~Y&1={<{R~MY{$%E(xT+XTKeD{7v_uf9QLMp|on6!O1x7^uB z+jKuP?vVHAsjZzje+{;)gkh%3KjxnR4DXlvjLb3kY%s_!R)KC`77k(qfP+5xNQuJ z4xgUOC}8=PPU_Wz*GAewYSOEu%x0}lhQ!t8Z?0D)&f+Ja07s?ldvGj?zn=@&Q_&VE z`hT+{es&3YPs+JzwLEZP*!M}Eepui71Qc79EeD>kJsBYvsDyWfG4t1_D7WF1vKmpx z&-wxp-q&adOROygH-T~|{sD1zK;?e)zS?EwEAu@YLdP5nI1lG3{MQufN zeZpRL>h21sNv>Oc3Wf|T*g#nKSxGXDf0W((DiU^AJL zMY+Ra+=@PeT;c=bN^7;y*ifc4<;d`(PTTP*LSC zsO+7Gu$r64hTf>!_k`d2%NL8FO{N&Tz;^7~zLl{SPzT@jG)Z>#*lEf)t%naeP#YyW+;E^~a6V z;uAGYjI2T`AtFmzo3wRaX-j8P-ciQyVLZ^j6xXO~-cX zr?w;S4DuY8m?wBn_`m%{m<4qBg{Cs5Gu>#_@z@Wr%J^vYc(``ruXzgc~0?QwvX zkIHbCnU+BfK)l4$j!bvOIL4Cfs>eldW5}fH@q^Y=FvlPvM&h;dkcw|<(<46JauY%6 z8I@c)O`^_)LlowsYEu7*C1!Np$#OZCQ%g!S%X~Yr@Ex{RGDMX{`mYq^2<57UqD^J=JSoREXPFRi)7a$xK6VrLcE+rY3 zY37g8Fiyy9LN*W4C`nR~h@ASygd0$BpV>kj+^UFB;#M0c4Tpu^Hhfl$UdD?v$x8Fv z2=VVTIG4`qGxJ><_&xQxwO*RdDHBVB2f{M;Q_L{HcXUC(+*yc$Q73D>4&=x2zm0>j zOkq1kqDn5fBZ|4%4Gyqg_g&6Zgf?THkVw z-=EGbh|Nm&eHpmBD^Y=Z3a#&x)DHIJA)9}sz`NGW|FV@q3)&4@m|}Qy#0ldSJ;>zL zJ5To`yj&2r+vTjgVQ7!l!jnF4fkHS>Wbee(>M}tYD;SQ0+U)PV2U5l&XUmGiN|GGK z7hnpl;~0?b^@cKQL_XxSoq+MLGlhI!_LKwo@X+& zpxSG7Xx+l>}8#a;!)G@ns&h2xL`a7^!#3n)ye#J>_SWJ(hf=&qtBPfvjgj zHQ}_G6Fy~)udka@=-&_LzuzCS+tqynvIIbPZYC=op8&xQ7CaaJ1AT!!+Mb7>SBZ!p zIFlKK%;s|au&=bGyUhneIBJ+j6jZMdH;Z0L;1n*QG>GI-7VKn|+hFX;tqzbtg&xlr zOP#vhE~e=bdvi))oYOcL5o(F)T)S{Sm%wh?MWnjg%<6Fnlm*{`u=u@1`QryS!d2Wb z(f=TFp}bAV#M}1k-qegU@=^p1!!ZTZ{6Eln>sFn7FP}*<&IUsoyB6YDx;PeFTve

U=B%2GVw~aR&Q($>NqHhBkTM$&TAlSJ)KG0>&z} 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 ZHthDa$QPUMG6EyZD>|e@E=K<>|1WJe3-$m2 diff --git a/testing_examples/openhtf/all_the_things/main.py b/testing_examples/openhtf/all_the_things/main.py deleted file mode 100644 index 0cefc39..0000000 --- a/testing_examples/openhtf/all_the_things/main.py +++ /dev/null @@ -1,183 +0,0 @@ -import os.path -import time - -import openhtf as htf -from openhtf import util -from openhtf.output import callbacks -from openhtf.output.callbacks import console_summary, json_factory -from openhtf.util import units -from tofupilot.openhtf import TofuPilot - - -@htf.measures( - htf.Measurement("widget_type") - .matches_regex(r".*Widget$") - .doc("""This measurement tracks the type of widgets."""), - htf.Measurement("widget_color").doc("Color of the widget"), - htf.Measurement("widget_size").in_range(1, 4).doc("Size of widget"), -) -@htf.measures( - "specified_as_args", - docstring="Helpful docstring", - units=units.HERTZ, - validators=[util.validators.matches_regex("Measurement")], -) -def hello_world(test): - """A hello world test phase.""" - test.logger.info("Hello World!") - test.measurements.widget_type = "MyWidget" - test.measurements.widget_color = "Black" - test.measurements.widget_size = 3 - test.measurements.specified_as_args = "Measurement args specified directly" - - -# Timeout if this phase takes longer than 10 seconds. -@htf.PhaseOptions(timeout_s=10) -@htf.measures(*(htf.Measurement("level_%s" % i) - for i in ["none", "some", "all"])) -def set_measurements(test): - """Test phase that sets a measurement.""" - test.measurements.level_none = 0 - time.sleep(1) - test.measurements.level_some = 8 - time.sleep(1) - test.measurements.level_all = 9 - time.sleep(1) - level_all = test.get_measurement("level_all") - assert level_all.value == 9 - - -@htf.measures( - htf.Measurement("dimensions").with_dimensions(units.HERTZ), - htf.Measurement("lots_of_dims").with_dimensions( - units.HERTZ, - units.SECOND, - htf.Dimension(description="my_angle", unit=units.RADIAN), - ), -) -def dimensions(test): - """Phase with dimensioned measurements.""" - for dim in range(5): - test.measurements.dimensions[dim] = 1 << dim - for x, y, z in zip( - list( - range( - 1, 5)), list( - range( - 21, 25)), list( - range( - 101, 105))): - test.measurements.lots_of_dims[x, y, z] = x + y + z - - -@htf.measures( - htf.Measurement("replaced_min_only").in_range( - "{minimum}", 5, type=int), htf.Measurement("replaced_max_only").in_range( - 0, "{maximum}", type=int), htf.Measurement("replaced_min_max").in_range( - "{minimum}", "{maximum}", type=int), ) -def measures_with_args(test, minimum, maximum): - """Phase with measurement with arguments.""" - del minimum # Unused. - del maximum # Unused. - test.measurements.replaced_min_only = 1 - test.measurements.replaced_max_only = 1 - test.measurements.replaced_min_max = 1 - - -@htf.measures( - htf.Measurement("replaced_marginal_min_only").in_range( - 0, 10, "{marginal_minimum}", 8, type=int - ), - htf.Measurement("replaced_marginal_max_only").in_range( - 0, 10, 2, "{marginal_maximum}", type=int - ), - htf.Measurement("replaced_marginal_min_max").in_range( - 0, 10, "{marginal_minimum}", "{marginal_maximum}", type=int - ), -) -def measures_with_marginal_args(test, marginal_minimum, marginal_maximum): - """Phase with measurement with marginal arguments.""" - del marginal_minimum # Unused. - del marginal_maximum # Unused. - test.measurements.replaced_marginal_min_only = 3 - test.measurements.replaced_marginal_max_only = 3 - test.measurements.replaced_marginal_min_max = 3 - - -def attachments(test): - test.attach( - "test_attachment", - "This is test attachment data.".encode("utf-8")) - test.attach_from_file("data/oscilloscope.jpeg") - - test_attachment = test.get_attachment("test_attachment") - assert test_attachment.data == b"This is test attachment data." - - -@htf.PhaseOptions(run_if=lambda: False) -def skip_phase(): - """Don't run this phase.""" - - -def analysis(test): # pylint: disable=missing-function-docstring - level_all = test.get_measurement("level_all") - assert level_all.value == 9 - test_attachment = test.get_attachment("test_attachment") - assert test_attachment.data == b"This is test attachment data." - lots_of_dims = test.get_measurement("lots_of_dims") - assert lots_of_dims.value.value == [ - (1, 21, 101, 123), - (2, 22, 102, 126), - (3, 23, 103, 129), - (4, 24, 104, 132), - ] - test.logger.info( - "Pandas datafram of lots_of_dims \n:%s", - lots_of_dims.value.to_dataframe()) - - -def teardown(test): - test.logger.info("Running teardown") - - -def make_test(): - return htf.Test( - htf.PhaseGroup.with_teardown(teardown)( - hello_world, - set_measurements, - dimensions, - attachments, - skip_phase, - measures_with_args.with_args(minimum=1, maximum=4), - measures_with_marginal_args.with_args( - marginal_minimum=4, marginal_maximum=6 - ), - analysis, - ), - test_name="MyTest", - test_description="OpenHTF Example Test", - test_version="1.0.0", - part_number="PCB01", - procedure_id="FVT1", - ) - - -def main(): - test = make_test() - test.add_output_callbacks( - callbacks.OutputToFile( - "./{dut_id}.{metadata[test_name]}.{start_time_millis}.pickle" - ) - ) - test.add_output_callbacks( - json_factory.OutputToJSON( - "./{dut_id}.{metadata[test_name]}.{start_time_millis}.json", - indent=4)) - test.add_output_callbacks(console_summary.ConsoleSummary()) - - with TofuPilot(test): - test.execute(lambda: "00220D4K") - - -if __name__ == "__main__": - main() diff --git a/testing_examples/openhtf/generic/data/oscilloscope.jpeg b/testing_examples/openhtf/generic/data/oscilloscope.jpeg deleted file mode 100644 index d49014b45f840932a28524ead0c65bd264ce5235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28654 zcmb5Vb97}v(>Hoz-paM-al{ewf0(j zckQm)-BrKp>gxVn`TPe!m64E^0Dyr30AODi;By@y3V?!ugoK2E`no|uK|#YH!oqwN z6a)k~L?8+p8W05tM90F%M#sR#1OmU2e8VLmAR;0{$0j8wB_ziuBqIDzBVb>j!a&0y z!@?pHVgNA+|9_XyegF^_@Cn8U0Y(Y{2ZBKW!9Irp1ONayI0V>#{kug*8>^=8b|_zPKv?8DoiG#tYU;|>=cjyi-k?j#^LN5 zn3&u+|4k#MfPz!ht)W>}v#@Dyft^du#3guOkV;%VsOakYt8HAc|FHRg8GrGI1c!hE zgZ`@H1^yqt;IPnO;80Nik?cRjkU%ta5*8?BXjWk(r+|V63{tj)fvY)@ZA>z9l|oTt z=f>;LH2@;S7cCG12>1@DrPULgnO-dUW#RLinCV-1jPgao^6?na;CEF2KAx;M<;#;{ z_loB=i&L1l6*Emi!Z~Y&1={<{R~MY{$%E(xT+XTKeD{7v_uf9QLMp|on6!O1x7^uB z+jKuP?vVHAsjZzje+{;)gkh%3KjxnR4DXlvjLb3kY%s_!R)KC`77k(qfP+5xNQuJ z4xgUOC}8=PPU_Wz*GAewYSOEu%x0}lhQ!t8Z?0D)&f+Ja07s?ldvGj?zn=@&Q_&VE z`hT+{es&3YPs+JzwLEZP*!M}Eepui71Qc79EeD>kJsBYvsDyWfG4t1_D7WF1vKmpx z&-wxp-q&adOROygH-T~|{sD1zK;?e)zS?EwEAu@YLdP5nI1lG3{MQufN zeZpRL>h21sNv>Oc3Wf|T*g#nKSxGXDf0W((DiU^AJL zMY+Ra+=@PeT;c=bN^7;y*ifc4<;d`(PTTP*LSC zsO+7Gu$r64hTf>!_k`d2%NL8FO{N&Tz;^7~zLl{SPzT@jG)Z>#*lEf)t%naeP#YyW+;E^~a6V z;uAGYjI2T`AtFmzo3wRaX-j8P-ciQyVLZ^j6xXO~-cX zr?w;S4DuY8m?wBn_`m%{m<4qBg{Cs5Gu>#_@z@Wr%J^vYc(``ruXzgc~0?QwvX zkIHbCnU+BfK)l4$j!bvOIL4Cfs>eldW5}fH@q^Y=FvlPvM&h;dkcw|<(<46JauY%6 z8I@c)O`^_)LlowsYEu7*C1!Np$#OZCQ%g!S%X~Yr@Ex{RGDMX{`mYq^2<57UqD^J=JSoREXPFRi)7a$xK6VrLcE+rY3 zY37g8Fiyy9LN*W4C`nR~h@ASygd0$BpV>kj+^UFB;#M0c4Tpu^Hhfl$UdD?v$x8Fv z2=VVTIG4`qGxJ><_&xQxwO*RdDHBVB2f{M;Q_L{HcXUC(+*yc$Q73D>4&=x2zm0>j zOkq1kqDn5fBZ|4%4Gyqg_g&6Zgf?THkVw z-=EGbh|Nm&eHpmBD^Y=Z3a#&x)DHIJA)9}sz`NGW|FV@q3)&4@m|}Qy#0ldSJ;>zL zJ5To`yj&2r+vTjgVQ7!l!jnF4fkHS>Wbee(>M}tYD;SQ0+U)PV2U5l&XUmGiN|GGK z7hnpl;~0?b^@cKQL_XxSoq+MLGlhI!_LKwo@X+& zpxSG7Xx+l>}8#a;!)G@ns&h2xL`a7^!#3n)ye#J>_SWJ(hf=&qtBPfvjgj zHQ}_G6Fy~)udka@=-&_LzuzCS+tqynvIIbPZYC=op8&xQ7CaaJ1AT!!+Mb7>SBZ!p zIFlKK%;s|au&=bGyUhneIBJ+j6jZMdH;Z0L;1n*QG>GI-7VKn|+hFX;tqzbtg&xlr zOP#vhE~e=bdvi))oYOcL5o(F)T)S{Sm%wh?MWnjg%<6Fnlm*{`u=u@1`QryS!d2Wb z(f=TFp}bAV#M}1k-qegU@=^p1!!ZTZ{6Eln>sFn7FP}*<&IUsoyB6YDx;PeFTve

U=B%2GVw~aR&Q($>NqHhBkTM$&TAlSJ)KG0>&z} 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 ZHthDa$QPUMG6EyZD>|e@E=K<>|1WJe3-$m2 diff --git a/testing_examples/openhtf/generic/main.py b/testing_examples/openhtf/generic/main.py deleted file mode 100644 index d932c0e..0000000 --- a/testing_examples/openhtf/generic/main.py +++ /dev/null @@ -1,99 +0,0 @@ -import random -import time -from datetime import datetime, timedelta - -import openhtf as htf -from openhtf.util import units -from tofupilot.openhtf import TofuPilot - - -@htf.measures(htf.Measurement("firmware_version").equals("1.4.3")) -def pcba_firmware_version(test): - test.measurements.firmware_version = "1.4.3" if random.random() < 0.99 else "1.4.2" - - -@htf.measures(htf.Measurement("button_status").equals(True)) -def check_button(test): - test.measurements.button_status = random.choice([True, False]) - time.sleep(1) - - -@htf.measures(htf.Measurement("input_voltage").in_range(4.5, - 5).with_units(units.VOLT)) -def test_voltage_input(test): - test.measurements.input_voltage = round(random.uniform(3.7, 4.9), 2) - - -@htf.measures( - htf.Measurement("output_voltage").in_range(3.2, 3.4).with_units(units.VOLT) -) -def test_voltage_output(test): - test.measurements.output_voltage = round(random.uniform(2.95, 3.35), 2) - - -@htf.measures( - htf.Measurement("current_protection_triggered") - .in_range(maximum=1.5) - .with_units(units.AMPERE) -) -def test_overcurrent_protection(test): - test.measurements.current_protection_triggered = round( - random.uniform(1.0, 1.7), 3) - time.sleep(1) - - -def test_battery_switch(): - if random.random() < 0.9: - return htf.PhaseResult.CONTINUE - else: - return htf.PhaseResult.STOP - - -@htf.measures( - htf.Measurement("efficiency").in_range(85, 98).with_units(units.Unit("%")) -) -def test_converter_efficiency(test): - input_power = 500 - output_power = round(random.uniform(425, 480)) - test.measurements.efficiency = round( - ((output_power / input_power) * 100), 1) - time.sleep(1) - - -def visual_control_pcb_coating(test): - if random.random() < 0.98: - test.attach_from_file("qa/openhtf/generic/data/oscilloscope.jpeg") - return htf.PhaseResult.CONTINUE - else: - return htf.PhaseResult.STOP - - -def main(): - # Define the test plan with all steps - test = htf.Test( - pcba_firmware_version, - check_button, - test_voltage_input, - test_voltage_output, - test_overcurrent_protection, - test_battery_switch, - test_converter_efficiency, - visual_control_pcb_coating, - procedure_id="FVT1", - part_number="00220", - revision="A", - # batch_number="1024-0001", - # sub_units=[{"serial_number": "00102"}], - ) - - # Generate random Serial Number - random_digits = "".join([str(random.randint(0, 9)) for _ in range(5)]) - serial_number = f"00220B4K{random_digits}" - - # Execute the test - with TofuPilot(test): - test.execute(lambda: serial_number) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/openhtf/logger/main.py b/testing_examples/openhtf/logger/main.py deleted file mode 100644 index cc6c53f..0000000 --- a/testing_examples/openhtf/logger/main.py +++ /dev/null @@ -1,54 +0,0 @@ -import random - -import openhtf as htf -from openhtf.output.callbacks import json_factory -from tofupilot.openhtf import TofuPilot - - -@htf.measures(htf.Measurement("button_status").equals(True)) -def phase_info_logger(test): - test.measurements.button_status = True - test.logger.info("Logging an info in the logger") - - -def phase_error_logger(test): - test.logger.error("Logging error in the logger") - return htf.PhaseResult.CONTINUE - - -def phase_warning_logger(test): - test.logger.warning("Logging a warning in the logger") - return htf.PhaseResult.CONTINUE - - -def phase_critical_logger(test): - test.logger.critical("Logging a critical in the logger") - return htf.PhaseResult.CONTINUE - - -def main(): - # Define the test plan with all steps - test = htf.Test( - phase_info_logger, - phase_error_logger, - phase_warning_logger, - phase_critical_logger, - procedure_id="FVT9", - part_number="00220D", - ) - - # Generate random Serial Number - random_digits = "".join([str(random.randint(0, 9)) for _ in range(5)]) - serial_number = f"00220D4K{random_digits}" - - test.add_output_callbacks( - json_factory.OutputToJSON( - "test_result.json", indent=2)) - - # Execute the test - with TofuPilot(test): - test.execute(lambda: serial_number) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/openhtf/multi_dimensions/main.py b/testing_examples/openhtf/multi_dimensions/main.py deleted file mode 100644 index 5f2cfdd..0000000 --- a/testing_examples/openhtf/multi_dimensions/main.py +++ /dev/null @@ -1,104 +0,0 @@ -import random -import time - -import numpy as np -import openhtf as htf -from openhtf.output.callbacks import json_factory -from openhtf.util import units -from tofupilot.openhtf import TofuPilot - - -@htf.measures( - htf.Measurement("voltage").with_dimensions(units.SECOND).with_units(units.VOLT), - htf.Measurement("mean_voltage").with_units(units.VOLT).in_range(3.3, 3.5), - htf.Measurement("sinus").with_dimensions(units.SECOND).with_units(units.AMPERE), - htf.Measurement("neg_x_axis").with_dimensions(units.SECOND).with_units(units.VOLT), - htf.Measurement("neg_y_axis").with_dimensions(units.SECOND).with_units(units.VOLT), - htf.Measurement("parameters"), -) -def multi_dimension_phase(test): - len = 50 - sum_voltage = 0.0 - min_voltage = float("inf") - max_voltage = float("-inf") - for t in range(len): - voltage = round(random.uniform(3.3, 3.5), 2) - test.measurements.voltage[t] = voltage - sum_voltage += voltage - - if voltage < min_voltage: - min_voltage = voltage - if voltage > max_voltage: - max_voltage = voltage - - negative_timestamp = -t - test.measurements.neg_x_axis[negative_timestamp] = voltage - test.measurements.neg_y_axis[t] = -voltage - - test.measurements.mean_voltage = sum_voltage / len - - # metadata array - test.measurements.parameters = { - "mean_voltage": test.measurements.mean_voltage, - "min_voltage": min_voltage, - "max_voltage": max_voltage, - "duration": 345, - } - - # Sinus - x = np.linspace(0, 2 * np.pi, 100) - y = np.sin(x) - for i, amp in enumerate(y): - test.measurements.sinus[i] = amp - - -@htf.measures( - htf.Measurement("current_and_voltage_over_time") - .with_dimensions(units.SECOND, units.VOLT) - .with_units(units.AMPERE), - htf.Measurement("current_voltage_resistence_over_time") - .with_dimensions(units.SECOND, units.VOLT, units.AMPERE) - .with_units(units.OHM), -) -def power_phase(test): - for t in range(100): - timestamp = t / 100 - voltage = round(random.uniform(3.3, 3.5), 2) - current = round(random.uniform(0.3, 0.8), 3) - resistance = voltage / current - test.measurements.current_and_voltage_over_time[timestamp, - voltage] = current - test.measurements.current_voltage_resistence_over_time[ - timestamp, voltage, current - ] = resistance - - -def main(): - test = htf.Test( - multi_dimension_phase, - power_phase, - procedure_id="FVT2", - part_number="00220S", - revision="B", - batch_number="1124-0001", - ) - - random_digits = "".join([str(random.randint(0, 9)) for _ in range(5)]) - serial_number = f"00220D4K{random_digits}" - - test.add_output_callbacks( - json_factory.OutputToJSON( - "test_result.json", indent=2)) - - start = time.time() - # Execute the test - with TofuPilot(test): - test.execute(lambda: serial_number) - - end = time.time() - duration = end - start - print(f"Durée : {duration:.2f} secondes") - - -if __name__ == "__main__": - main() diff --git a/testing_examples/openhtf/multi_measurements/main.py b/testing_examples/openhtf/multi_measurements/main.py deleted file mode 100644 index 7157e23..0000000 --- a/testing_examples/openhtf/multi_measurements/main.py +++ /dev/null @@ -1,116 +0,0 @@ -import random - -import openhtf as htf -from openhtf.util import units -from tofupilot.openhtf import TofuPilot - - -@htf.measures( - htf.Measurement("firmware_version").equals("1.4.3"), - htf.Measurement("power_mode_functional").equals("on"), -) -def string_test(test): - test.measurements.firmware_version = "1.4.3" if random.random() < 0.99 else "1.4.2" - test.measurements.power_mode_functional = "on" - - -@htf.measures(htf.Measurement("button_status").equals(True)) -def boolean_test(test): - test.measurements.button_status = True - - -def phaseresult_test(): - return htf.PhaseResult.CONTINUE - - -@htf.measures( - htf.Measurement("two_limits").in_range( - 4.5, 5).with_units( - units.VOLT), htf.Measurement("one_limit").in_range( - maximum=1.5).with_units( - units.AMPERE), htf.Measurement("percentage").in_range( - 85, 98).with_units( - units.Unit("%")), ) -def measure_test_with_limits(test): - test.measurements.two_limits = round(random.uniform(3.8, 4.9), 2) - test.measurements.one_limit = round(random.uniform(1.0, 1.6), 3) - input_power = 500 - output_power = round(random.uniform(425, 480)) - test.measurements.percentage = round( - ((output_power / input_power) * 100), 1) - - -@htf.measures(htf.Measurement("is_connected").equals(True), - htf.Measurement("firmware_version").equals("1.2.7"), - htf.Measurement("temperature").in_range(20, - 25).with_units(units.DEGREE_CELSIUS), - ) -def phase_multi_measurements(test): - test.measurements.is_connected = True - test.measurements.firmware_version = ( - "1.2.7" if test.measurements.is_connected else "N/A" - ) - test.measurements.temperature = round(random.uniform(22.5, 23), 2) - - -@htf.measures( - htf.Measurement("dimensions").with_dimensions(units.HERTZ), - htf.Measurement("lots_of_dims").with_dimensions( - units.HERTZ, - units.SECOND, - htf.Dimension(description="my_angle", unit=units.RADIAN), - ), -) -def dimensions(test): - """Phase with dimensioned measurements.""" - for dim in range(5): - test.measurements.dimensions[dim] = 1 << dim - for x, y, z in zip( - list( - range( - 1, 5)), list( - range( - 21, 25)), list( - range( - 101, 105))): - test.measurements.lots_of_dims[x, y, z] = x + y + z - - -@htf.measures( - htf.Measurement("binary_measure").equals(True), - htf.Measurement("string_measure").equals("1.2.7"), - htf.Measurement("numerical_measure") - .in_range(20, 25) - .with_units(units.DEGREE_CELSIUS), -) -def not_working_multi_measurements(test): - test.measurements.binary_measure = 42 - test.measurements.string_measure = 123 - test.measurements.numerical_measure = 35 - - -def main(): - # Define the test plan with all steps - test = htf.Test( - phase_multi_measurements, - dimensions, - string_test, - boolean_test, - phaseresult_test, - measure_test_with_limits, - not_working_multi_measurements, - procedure_id="FVT9", - part_number="00220D", - ) - - # Generate random Serial Number - random_digits = "".join([str(random.randint(0, 9)) for _ in range(5)]) - serial_number = f"00220D4K{random_digits}" - - # Execute the test - with TofuPilot(test): - test.execute(lambda: serial_number) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/openhtf/procedure_version/main.py b/testing_examples/openhtf/procedure_version/main.py deleted file mode 100644 index 7157b78..0000000 --- a/testing_examples/openhtf/procedure_version/main.py +++ /dev/null @@ -1,30 +0,0 @@ -import random - -import openhtf as htf -from tofupilot.openhtf import TofuPilot - - -@htf.measures(htf.Measurement("button_status").equals(True)) -def check_button(test): - test.measurements.button_status = bool(random.randint(0, 1)) - - -def main(): - test = htf.Test( - check_button, - procedure_id="FVT1", # No need to specify the ID - procedure_version="1.2.20", # Create procedure version - part_number="00220", - revision="B", - ) - - # Generate random Serial Number - serial_number = f"00220B4K{random.randint(10000, 99999)}" - - # Execute the test - with TofuPilot(test, stream=False): - test.execute(lambda: serial_number) - - -if __name__ == "__main__": - main() diff --git a/testing_examples/openhtf/regex_serial_number/main.py b/testing_examples/openhtf/regex_serial_number/main.py deleted file mode 100644 index f7344b4..0000000 --- a/testing_examples/openhtf/regex_serial_number/main.py +++ /dev/null @@ -1,25 +0,0 @@ -import random - -import openhtf as htf -from tofupilot.openhtf import TofuPilot - - -@htf.measures(htf.Measurement("button_status").equals(True)) -def check_button(test): - test.measurements.button_status = bool(random.randint(0, 1)) - - -def main(): - test = htf.Test( - check_button, - procedure_id="FVT1", - # REGEX is defined in the Settings from Serial Number for: - # part_number="PCB01", - ) - - with TofuPilot(test): - test.execute(lambda: "PCB01A123") - - -if __name__ == "__main__": - main() diff --git a/testing_examples/openhtf/without_streaming/data/oscilloscope.jpeg b/testing_examples/openhtf/without_streaming/data/oscilloscope.jpeg deleted file mode 100644 index d49014b45f840932a28524ead0c65bd264ce5235..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28654 zcmb5Vb97}v(>Hoz-paM-al{ewf0(j zckQm)-BrKp>gxVn`TPe!m64E^0Dyr30AODi;By@y3V?!ugoK2E`no|uK|#YH!oqwN z6a)k~L?8+p8W05tM90F%M#sR#1OmU2e8VLmAR;0{$0j8wB_ziuBqIDzBVb>j!a&0y z!@?pHVgNA+|9_XyegF^_@Cn8U0Y(Y{2ZBKW!9Irp1ONayI0V>#{kug*8>^=8b|_zPKv?8DoiG#tYU;|>=cjyi-k?j#^LN5 zn3&u+|4k#MfPz!ht)W>}v#@Dyft^du#3guOkV;%VsOakYt8HAc|FHRg8GrGI1c!hE zgZ`@H1^yqt;IPnO;80Nik?cRjkU%ta5*8?BXjWk(r+|V63{tj)fvY)@ZA>z9l|oTt z=f>;LH2@;S7cCG12>1@DrPULgnO-dUW#RLinCV-1jPgao^6?na;CEF2KAx;M<;#;{ z_loB=i&L1l6*Emi!Z~Y&1={<{R~MY{$%E(xT+XTKeD{7v_uf9QLMp|on6!O1x7^uB z+jKuP?vVHAsjZzje+{;)gkh%3KjxnR4DXlvjLb3kY%s_!R)KC`77k(qfP+5xNQuJ z4xgUOC}8=PPU_Wz*GAewYSOEu%x0}lhQ!t8Z?0D)&f+Ja07s?ldvGj?zn=@&Q_&VE z`hT+{es&3YPs+JzwLEZP*!M}Eepui71Qc79EeD>kJsBYvsDyWfG4t1_D7WF1vKmpx z&-wxp-q&adOROygH-T~|{sD1zK;?e)zS?EwEAu@YLdP5nI1lG3{MQufN zeZpRL>h21sNv>Oc3Wf|T*g#nKSxGXDf0W((DiU^AJL zMY+Ra+=@PeT;c=bN^7;y*ifc4<;d`(PTTP*LSC zsO+7Gu$r64hTf>!_k`d2%NL8FO{N&Tz;^7~zLl{SPzT@jG)Z>#*lEf)t%naeP#YyW+;E^~a6V z;uAGYjI2T`AtFmzo3wRaX-j8P-ciQyVLZ^j6xXO~-cX zr?w;S4DuY8m?wBn_`m%{m<4qBg{Cs5Gu>#_@z@Wr%J^vYc(``ruXzgc~0?QwvX zkIHbCnU+BfK)l4$j!bvOIL4Cfs>eldW5}fH@q^Y=FvlPvM&h;dkcw|<(<46JauY%6 z8I@c)O`^_)LlowsYEu7*C1!Np$#OZCQ%g!S%X~Yr@Ex{RGDMX{`mYq^2<57UqD^J=JSoREXPFRi)7a$xK6VrLcE+rY3 zY37g8Fiyy9LN*W4C`nR~h@ASygd0$BpV>kj+^UFB;#M0c4Tpu^Hhfl$UdD?v$x8Fv z2=VVTIG4`qGxJ><_&xQxwO*RdDHBVB2f{M;Q_L{HcXUC(+*yc$Q73D>4&=x2zm0>j zOkq1kqDn5fBZ|4%4Gyqg_g&6Zgf?THkVw z-=EGbh|Nm&eHpmBD^Y=Z3a#&x)DHIJA)9}sz`NGW|FV@q3)&4@m|}Qy#0ldSJ;>zL zJ5To`yj&2r+vTjgVQ7!l!jnF4fkHS>Wbee(>M}tYD;SQ0+U)PV2U5l&XUmGiN|GGK z7hnpl;~0?b^@cKQL_XxSoq+MLGlhI!_LKwo@X+& zpxSG7Xx+l>}8#a;!)G@ns&h2xL`a7^!#3n)ye#J>_SWJ(hf=&qtBPfvjgj zHQ}_G6Fy~)udka@=-&_LzuzCS+tqynvIIbPZYC=op8&xQ7CaaJ1AT!!+Mb7>SBZ!p zIFlKK%;s|au&=bGyUhneIBJ+j6jZMdH;Z0L;1n*QG>GI-7VKn|+hFX;tqzbtg&xlr zOP#vhE~e=bdvi))oYOcL5o(F)T)S{Sm%wh?MWnjg%<6Fnlm*{`u=u@1`QryS!d2Wb z(f=TFp}bAV#M}1k-qegU@=^p1!!ZTZ{6Eln>sFn7FP}*<&IUsoyB6YDx;PeFTve

U=B%2GVw~aR&Q($>NqHhBkTM$&TAlSJ)KG0>&z} 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 ZHthDa$QPUMG6EyZD>|e@E=K<>|1WJe3-$m2 diff --git a/testing_examples/openhtf/without_streaming/main.py b/testing_examples/openhtf/without_streaming/main.py deleted file mode 100644 index f89d527..0000000 --- a/testing_examples/openhtf/without_streaming/main.py +++ /dev/null @@ -1,183 +0,0 @@ -import os.path -import time - -import openhtf as htf -from openhtf import util -from openhtf.output import callbacks -from openhtf.output.callbacks import console_summary, json_factory -from openhtf.util import units -from tofupilot.openhtf import TofuPilot - - -@htf.measures( - htf.Measurement("widget_type") - .matches_regex(r".*Widget$") - .doc("""This measurement tracks the type of widgets."""), - htf.Measurement("widget_color").doc("Color of the widget"), - htf.Measurement("widget_size").in_range(1, 4).doc("Size of widget"), -) -@htf.measures( - "specified_as_args", - docstring="Helpful docstring", - units=units.HERTZ, - validators=[util.validators.matches_regex("Measurement")], -) -def hello_world(test): - """A hello world test phase.""" - test.logger.info("Hello World!") - test.measurements.widget_type = "MyWidget" - test.measurements.widget_color = "Black" - test.measurements.widget_size = 3 - test.measurements.specified_as_args = "Measurement args specified directly" - - -# Timeout if this phase takes longer than 10 seconds. -@htf.PhaseOptions(timeout_s=10) -@htf.measures(*(htf.Measurement("level_%s" % i) - for i in ["none", "some", "all"])) -def set_measurements(test): - """Test phase that sets a measurement.""" - test.measurements.level_none = 0 - time.sleep(1) - test.measurements.level_some = 8 - time.sleep(1) - test.measurements.level_all = 9 - time.sleep(1) - level_all = test.get_measurement("level_all") - assert level_all.value == 9 - - -@htf.measures( - htf.Measurement("dimensions").with_dimensions(units.HERTZ), - htf.Measurement("lots_of_dims").with_dimensions( - units.HERTZ, - units.SECOND, - htf.Dimension(description="my_angle", unit=units.RADIAN), - ), -) -def dimensions(test): - """Phase with dimensioned measurements.""" - for dim in range(5): - test.measurements.dimensions[dim] = 1 << dim - for x, y, z in zip( - list( - range( - 1, 5)), list( - range( - 21, 25)), list( - range( - 101, 105))): - test.measurements.lots_of_dims[x, y, z] = x + y + z - - -@htf.measures( - htf.Measurement("replaced_min_only").in_range( - "{minimum}", 5, type=int), htf.Measurement("replaced_max_only").in_range( - 0, "{maximum}", type=int), htf.Measurement("replaced_min_max").in_range( - "{minimum}", "{maximum}", type=int), ) -def measures_with_args(test, minimum, maximum): - """Phase with measurement with arguments.""" - del minimum # Unused. - del maximum # Unused. - test.measurements.replaced_min_only = 1 - test.measurements.replaced_max_only = 1 - test.measurements.replaced_min_max = 1 - - -@htf.measures( - htf.Measurement("replaced_marginal_min_only").in_range( - 0, 10, "{marginal_minimum}", 8, type=int - ), - htf.Measurement("replaced_marginal_max_only").in_range( - 0, 10, 2, "{marginal_maximum}", type=int - ), - htf.Measurement("replaced_marginal_min_max").in_range( - 0, 10, "{marginal_minimum}", "{marginal_maximum}", type=int - ), -) -def measures_with_marginal_args(test, marginal_minimum, marginal_maximum): - """Phase with measurement with marginal arguments.""" - del marginal_minimum # Unused. - del marginal_maximum # Unused. - test.measurements.replaced_marginal_min_only = 3 - test.measurements.replaced_marginal_max_only = 3 - test.measurements.replaced_marginal_min_max = 3 - - -def attachments(test): - test.attach( - "test_attachment", - "This is test attachment data.".encode("utf-8")) - test.attach_from_file("data/oscilloscope.jpeg") - - test_attachment = test.get_attachment("test_attachment") - assert test_attachment.data == b"This is test attachment data." - - -@htf.PhaseOptions(run_if=lambda: False) -def skip_phase(): - """Don't run this phase.""" - - -def analysis(test): # pylint: disable=missing-function-docstring - level_all = test.get_measurement("level_all") - assert level_all.value == 9 - test_attachment = test.get_attachment("test_attachment") - assert test_attachment.data == b"This is test attachment data." - lots_of_dims = test.get_measurement("lots_of_dims") - assert lots_of_dims.value.value == [ - (1, 21, 101, 123), - (2, 22, 102, 126), - (3, 23, 103, 129), - (4, 24, 104, 132), - ] - test.logger.info( - "Pandas datafram of lots_of_dims \n:%s", - lots_of_dims.value.to_dataframe()) - - -def teardown(test): - test.logger.info("Running teardown") - - -def make_test(): - return htf.Test( - htf.PhaseGroup.with_teardown(teardown)( - hello_world, - set_measurements, - dimensions, - attachments, - skip_phase, - measures_with_args.with_args(minimum=1, maximum=4), - measures_with_marginal_args.with_args( - marginal_minimum=4, marginal_maximum=6 - ), - analysis, - ), - test_name="MyTest", - test_description="OpenHTF Example Test", - test_version="1.0.0", - part_number="PCB01", - procedure_id="FVT1", - ) - - -def main(): - test = make_test() - test.add_output_callbacks( - callbacks.OutputToFile( - "./{dut_id}.{metadata[test_name]}.{start_time_millis}.pickle" - ) - ) - test.add_output_callbacks( - json_factory.OutputToJSON( - "./{dut_id}.{metadata[test_name]}.{start_time_millis}.json", - indent=4)) - test.add_output_callbacks(console_summary.ConsoleSummary()) - - with TofuPilot(test, stream=False): - test.execute(lambda: "00220D4K") - - -if __name__ == "__main__": - main() From 87fe5652877f74f6e0bcaa91fd6c0944cded6987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charlotte=20Ev=C3=A9quoz?= Date: Wed, 6 Aug 2025 15:25:33 +0200 Subject: [PATCH 2/6] Move doc examples in api_v1 folder --- .../attachments/client/data/temperature-map.png | Bin .../{ => api_v1}/attachments/client/main.py | 0 .../attachments/openhtf/data/temperature-map.png | Bin .../{ => api_v1}/attachments/openhtf/main.py | 0 .../{ => api_v1}/integrations/client/main.py | 0 .../{ => api_v1}/integrations/openhtf/main.py | 0 docs_tofupilot/{ => api_v1}/logger/client/main.py | 0 docs_tofupilot/{ => api_v1}/logger/openhtf/main.py | 0 .../measurements/boolean/client/main.py | 0 .../measurements/boolean/openhtf/main.py | 0 .../measurements/dimensional/client/main.py | 0 .../measurements/dimensional/openhtf/main.py | 0 .../measurements/multi-measurements/client/main.py | 0 .../measurements/multi-measurements/openhtf/main.py | 0 .../measurements/numerical/client/main.py | 0 .../measurements/numerical/openhtf/main.py | 0 .../{ => api_v1}/measurements/string/client/main.py | 0 .../measurements/string/openhtf/main.py | 0 .../{ => api_v1}/offline-upload/client/main.py | 0 ...A69658.openhtf_test.2025-01-20_15-32-06-058.json | 0 .../{ => api_v1}/offline-upload/openhtf/main.py | 0 .../{ => api_v1}/phases/advanced/client/main.py | 0 .../{ => api_v1}/phases/advanced/openhtf/main.py | 0 .../{ => api_v1}/phases/optional/client/main.py | 0 .../{ => api_v1}/phases/optional/openhtf/main.py | 0 .../{ => api_v1}/phases/required/client/main.py | 0 .../{ => api_v1}/phases/required/openhtf/main.py | 0 .../{ => api_v1}/procedures/client/main.py | 0 .../{ => api_v1}/procedures/openhtf/main.py | 0 docs_tofupilot/{ => api_v1}/stations/client/main.py | 0 .../{ => api_v1}/stations/openhtf/main.py | 0 .../{ => api_v1}/sub-units/client/main.py | 0 .../{ => api_v1}/sub-units/openhtf/main.py | 0 .../{ => api_v1}/unit-under-test/client/main.py | 0 .../{ => api_v1}/unit-under-test/openhtf/main.py | 0 35 files changed, 0 insertions(+), 0 deletions(-) rename docs_tofupilot/{ => api_v1}/attachments/client/data/temperature-map.png (100%) rename docs_tofupilot/{ => api_v1}/attachments/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/attachments/openhtf/data/temperature-map.png (100%) rename docs_tofupilot/{ => api_v1}/attachments/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/integrations/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/integrations/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/logger/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/logger/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/boolean/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/boolean/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/dimensional/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/dimensional/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/multi-measurements/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/multi-measurements/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/numerical/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/numerical/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/string/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/measurements/string/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/offline-upload/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/offline-upload/openhtf/data/PCB01A69658.openhtf_test.2025-01-20_15-32-06-058.json (100%) rename docs_tofupilot/{ => api_v1}/offline-upload/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/phases/advanced/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/phases/advanced/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/phases/optional/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/phases/optional/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/phases/required/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/phases/required/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/procedures/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/procedures/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/stations/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/stations/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/sub-units/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/sub-units/openhtf/main.py (100%) rename docs_tofupilot/{ => api_v1}/unit-under-test/client/main.py (100%) rename docs_tofupilot/{ => api_v1}/unit-under-test/openhtf/main.py (100%) diff --git a/docs_tofupilot/attachments/client/data/temperature-map.png b/docs_tofupilot/api_v1/attachments/client/data/temperature-map.png similarity index 100% rename from docs_tofupilot/attachments/client/data/temperature-map.png rename to docs_tofupilot/api_v1/attachments/client/data/temperature-map.png diff --git a/docs_tofupilot/attachments/client/main.py b/docs_tofupilot/api_v1/attachments/client/main.py similarity index 100% rename from docs_tofupilot/attachments/client/main.py rename to docs_tofupilot/api_v1/attachments/client/main.py diff --git a/docs_tofupilot/attachments/openhtf/data/temperature-map.png b/docs_tofupilot/api_v1/attachments/openhtf/data/temperature-map.png similarity index 100% rename from docs_tofupilot/attachments/openhtf/data/temperature-map.png rename to docs_tofupilot/api_v1/attachments/openhtf/data/temperature-map.png diff --git a/docs_tofupilot/attachments/openhtf/main.py b/docs_tofupilot/api_v1/attachments/openhtf/main.py similarity index 100% rename from docs_tofupilot/attachments/openhtf/main.py rename to docs_tofupilot/api_v1/attachments/openhtf/main.py diff --git a/docs_tofupilot/integrations/client/main.py b/docs_tofupilot/api_v1/integrations/client/main.py similarity index 100% rename from docs_tofupilot/integrations/client/main.py rename to docs_tofupilot/api_v1/integrations/client/main.py diff --git a/docs_tofupilot/integrations/openhtf/main.py b/docs_tofupilot/api_v1/integrations/openhtf/main.py similarity index 100% rename from docs_tofupilot/integrations/openhtf/main.py rename to docs_tofupilot/api_v1/integrations/openhtf/main.py diff --git a/docs_tofupilot/logger/client/main.py b/docs_tofupilot/api_v1/logger/client/main.py similarity index 100% rename from docs_tofupilot/logger/client/main.py rename to docs_tofupilot/api_v1/logger/client/main.py diff --git a/docs_tofupilot/logger/openhtf/main.py b/docs_tofupilot/api_v1/logger/openhtf/main.py similarity index 100% rename from docs_tofupilot/logger/openhtf/main.py rename to docs_tofupilot/api_v1/logger/openhtf/main.py diff --git a/docs_tofupilot/measurements/boolean/client/main.py b/docs_tofupilot/api_v1/measurements/boolean/client/main.py similarity index 100% rename from docs_tofupilot/measurements/boolean/client/main.py rename to docs_tofupilot/api_v1/measurements/boolean/client/main.py diff --git a/docs_tofupilot/measurements/boolean/openhtf/main.py b/docs_tofupilot/api_v1/measurements/boolean/openhtf/main.py similarity index 100% rename from docs_tofupilot/measurements/boolean/openhtf/main.py rename to docs_tofupilot/api_v1/measurements/boolean/openhtf/main.py diff --git a/docs_tofupilot/measurements/dimensional/client/main.py b/docs_tofupilot/api_v1/measurements/dimensional/client/main.py similarity index 100% rename from docs_tofupilot/measurements/dimensional/client/main.py rename to docs_tofupilot/api_v1/measurements/dimensional/client/main.py diff --git a/docs_tofupilot/measurements/dimensional/openhtf/main.py b/docs_tofupilot/api_v1/measurements/dimensional/openhtf/main.py similarity index 100% rename from docs_tofupilot/measurements/dimensional/openhtf/main.py rename to docs_tofupilot/api_v1/measurements/dimensional/openhtf/main.py diff --git a/docs_tofupilot/measurements/multi-measurements/client/main.py b/docs_tofupilot/api_v1/measurements/multi-measurements/client/main.py similarity index 100% rename from docs_tofupilot/measurements/multi-measurements/client/main.py rename to docs_tofupilot/api_v1/measurements/multi-measurements/client/main.py diff --git a/docs_tofupilot/measurements/multi-measurements/openhtf/main.py b/docs_tofupilot/api_v1/measurements/multi-measurements/openhtf/main.py similarity index 100% rename from docs_tofupilot/measurements/multi-measurements/openhtf/main.py rename to docs_tofupilot/api_v1/measurements/multi-measurements/openhtf/main.py diff --git a/docs_tofupilot/measurements/numerical/client/main.py b/docs_tofupilot/api_v1/measurements/numerical/client/main.py similarity index 100% rename from docs_tofupilot/measurements/numerical/client/main.py rename to docs_tofupilot/api_v1/measurements/numerical/client/main.py diff --git a/docs_tofupilot/measurements/numerical/openhtf/main.py b/docs_tofupilot/api_v1/measurements/numerical/openhtf/main.py similarity index 100% rename from docs_tofupilot/measurements/numerical/openhtf/main.py rename to docs_tofupilot/api_v1/measurements/numerical/openhtf/main.py diff --git a/docs_tofupilot/measurements/string/client/main.py b/docs_tofupilot/api_v1/measurements/string/client/main.py similarity index 100% rename from docs_tofupilot/measurements/string/client/main.py rename to docs_tofupilot/api_v1/measurements/string/client/main.py diff --git a/docs_tofupilot/measurements/string/openhtf/main.py b/docs_tofupilot/api_v1/measurements/string/openhtf/main.py similarity index 100% rename from docs_tofupilot/measurements/string/openhtf/main.py rename to docs_tofupilot/api_v1/measurements/string/openhtf/main.py diff --git a/docs_tofupilot/offline-upload/client/main.py b/docs_tofupilot/api_v1/offline-upload/client/main.py similarity index 100% rename from docs_tofupilot/offline-upload/client/main.py rename to docs_tofupilot/api_v1/offline-upload/client/main.py diff --git a/docs_tofupilot/offline-upload/openhtf/data/PCB01A69658.openhtf_test.2025-01-20_15-32-06-058.json b/docs_tofupilot/api_v1/offline-upload/openhtf/data/PCB01A69658.openhtf_test.2025-01-20_15-32-06-058.json similarity index 100% rename from docs_tofupilot/offline-upload/openhtf/data/PCB01A69658.openhtf_test.2025-01-20_15-32-06-058.json rename to docs_tofupilot/api_v1/offline-upload/openhtf/data/PCB01A69658.openhtf_test.2025-01-20_15-32-06-058.json diff --git a/docs_tofupilot/offline-upload/openhtf/main.py b/docs_tofupilot/api_v1/offline-upload/openhtf/main.py similarity index 100% rename from docs_tofupilot/offline-upload/openhtf/main.py rename to docs_tofupilot/api_v1/offline-upload/openhtf/main.py diff --git a/docs_tofupilot/phases/advanced/client/main.py b/docs_tofupilot/api_v1/phases/advanced/client/main.py similarity index 100% rename from docs_tofupilot/phases/advanced/client/main.py rename to docs_tofupilot/api_v1/phases/advanced/client/main.py diff --git a/docs_tofupilot/phases/advanced/openhtf/main.py b/docs_tofupilot/api_v1/phases/advanced/openhtf/main.py similarity index 100% rename from docs_tofupilot/phases/advanced/openhtf/main.py rename to docs_tofupilot/api_v1/phases/advanced/openhtf/main.py diff --git a/docs_tofupilot/phases/optional/client/main.py b/docs_tofupilot/api_v1/phases/optional/client/main.py similarity index 100% rename from docs_tofupilot/phases/optional/client/main.py rename to docs_tofupilot/api_v1/phases/optional/client/main.py diff --git a/docs_tofupilot/phases/optional/openhtf/main.py b/docs_tofupilot/api_v1/phases/optional/openhtf/main.py similarity index 100% rename from docs_tofupilot/phases/optional/openhtf/main.py rename to docs_tofupilot/api_v1/phases/optional/openhtf/main.py diff --git a/docs_tofupilot/phases/required/client/main.py b/docs_tofupilot/api_v1/phases/required/client/main.py similarity index 100% rename from docs_tofupilot/phases/required/client/main.py rename to docs_tofupilot/api_v1/phases/required/client/main.py diff --git a/docs_tofupilot/phases/required/openhtf/main.py b/docs_tofupilot/api_v1/phases/required/openhtf/main.py similarity index 100% rename from docs_tofupilot/phases/required/openhtf/main.py rename to docs_tofupilot/api_v1/phases/required/openhtf/main.py diff --git a/docs_tofupilot/procedures/client/main.py b/docs_tofupilot/api_v1/procedures/client/main.py similarity index 100% rename from docs_tofupilot/procedures/client/main.py rename to docs_tofupilot/api_v1/procedures/client/main.py diff --git a/docs_tofupilot/procedures/openhtf/main.py b/docs_tofupilot/api_v1/procedures/openhtf/main.py similarity index 100% rename from docs_tofupilot/procedures/openhtf/main.py rename to docs_tofupilot/api_v1/procedures/openhtf/main.py diff --git a/docs_tofupilot/stations/client/main.py b/docs_tofupilot/api_v1/stations/client/main.py similarity index 100% rename from docs_tofupilot/stations/client/main.py rename to docs_tofupilot/api_v1/stations/client/main.py diff --git a/docs_tofupilot/stations/openhtf/main.py b/docs_tofupilot/api_v1/stations/openhtf/main.py similarity index 100% rename from docs_tofupilot/stations/openhtf/main.py rename to docs_tofupilot/api_v1/stations/openhtf/main.py diff --git a/docs_tofupilot/sub-units/client/main.py b/docs_tofupilot/api_v1/sub-units/client/main.py similarity index 100% rename from docs_tofupilot/sub-units/client/main.py rename to docs_tofupilot/api_v1/sub-units/client/main.py diff --git a/docs_tofupilot/sub-units/openhtf/main.py b/docs_tofupilot/api_v1/sub-units/openhtf/main.py similarity index 100% rename from docs_tofupilot/sub-units/openhtf/main.py rename to docs_tofupilot/api_v1/sub-units/openhtf/main.py diff --git a/docs_tofupilot/unit-under-test/client/main.py b/docs_tofupilot/api_v1/unit-under-test/client/main.py similarity index 100% rename from docs_tofupilot/unit-under-test/client/main.py rename to docs_tofupilot/api_v1/unit-under-test/client/main.py diff --git a/docs_tofupilot/unit-under-test/openhtf/main.py b/docs_tofupilot/api_v1/unit-under-test/openhtf/main.py similarity index 100% rename from docs_tofupilot/unit-under-test/openhtf/main.py rename to docs_tofupilot/api_v1/unit-under-test/openhtf/main.py From 18b04f63f541e0938ac48aad29c4df6829d857c4 Mon Sep 17 00:00:00 2001 From: Julien Buteau Date: Wed, 29 Jul 2026 19:12:04 +0200 Subject: [PATCH 3/6] Add DVT Excel migration example (#70) Two steps for moving a design-verification report out of a spreadsheet: - xcu_import.py brings existing reports in, handling stacked cells and plots embedded in the drawing layer that the native Excel mapper cannot read - smps_dvt/ is the same tests as a TofuPilot procedure, capturing values and waveforms from the instruments instead of transcribing them off screen Plugs return representative data so the procedure runs without a bench; the real SCPI calls sit commented alongside each method. Co-authored-by: Julien Buteau --- dvt_excel_migration/README.md | 75 ++++ .../smps_dvt/phases/crossed_regulation.py | 12 + .../phases/crossed_regulation_sweep.py | 35 ++ .../smps_dvt/phases/ripple_23v.py | 21 ++ .../smps_dvt/phases/ripple_9v.py | 21 ++ .../smps_dvt/plugs/ac_source.py | 31 ++ dvt_excel_migration/smps_dvt/plugs/scope.py | 141 +++++++ dvt_excel_migration/smps_dvt/procedure.yaml | 132 +++++++ dvt_excel_migration/xcu_import.py | 344 ++++++++++++++++++ 9 files changed, 812 insertions(+) create mode 100644 dvt_excel_migration/README.md create mode 100644 dvt_excel_migration/smps_dvt/phases/crossed_regulation.py create mode 100644 dvt_excel_migration/smps_dvt/phases/crossed_regulation_sweep.py create mode 100644 dvt_excel_migration/smps_dvt/phases/ripple_23v.py create mode 100644 dvt_excel_migration/smps_dvt/phases/ripple_9v.py create mode 100644 dvt_excel_migration/smps_dvt/plugs/ac_source.py create mode 100644 dvt_excel_migration/smps_dvt/plugs/scope.py create mode 100644 dvt_excel_migration/smps_dvt/procedure.yaml create mode 100644 dvt_excel_migration/xcu_import.py diff --git a/dvt_excel_migration/README.md b/dvt_excel_migration/README.md new file mode 100644 index 0000000..f4a53cb --- /dev/null +++ b/dvt_excel_migration/README.md @@ -0,0 +1,75 @@ +# DVT Excel migration + +Moving a design-verification report out of a spreadsheet and onto the bench, in +two steps. + +## Step 1 — Import the reports you already have + +`xcu_import.py` reads a DVT workbook and creates one TofuPilot run from it. + +TofuPilot imports Excel natively, but two shapes common in hand-written reports +defeat the column mapper: + +- **Stacked cells.** A cell holding `22.33 - 10.11 / 22.34 - 10.10 / 22.35 - 10.11` + is three samples of a two-rail measurement, not one value. +- **Embedded plots.** Screenshots live in the drawing layer, so a mapper that + reads cells never sees them. Their anchor row is what ties a plot to the test + it proves. + +The script flattens both: it expands stacked cells to one measurement per +sample per temperature block, and pulls the images out of the `.xlsx` zip keyed +by anchor row. + +```bash +pip install tofupilot openpyxl +export TOFUPILOT_API_KEY=... + +python xcu_import.py "DVT report.xlsx" \ + --procedure-id \ + --serial-number SN-0001 \ + --part-number PCB-REV-A +``` + +Add `--dry-run` to see what it would create without uploading, and +`--waveforms

` to promote curves to multi-dimensional measurements when +scope CSVs are available (named `_.csv`). + +On a real 5-sheet report this produced one run with 13 phases, 111 +measurements and 49 attached plots in about 30 seconds. + +## Step 2 — Stop writing the report + +`smps-dvt/` is the same tests as a TofuPilot procedure, so values are captured +as they are measured rather than read off a screen and typed into a sheet. + +``` +smps-dvt/ +├── procedure.yaml phases, measurements and limits +├── phases/ the Python each phase runs +└── plugs/ one class per instrument +``` + +```bash +tofupilot run ./smps-dvt +``` + +The plugs return representative data so the procedure runs anywhere. Every +method keeps its real SCPI call directly above, commented out — swap the two +and the same procedure drives the bench: + +- `plugs/scope.py` — Tektronix MSO5-series, 12-bit High Res, AC-coupled ripple + with a 20 MHz bandwidth limit, `CURVe?` waveform readback with + `YMUlt`/`YOFf`/`YZEro`/`XINcr` scaling +- `plugs/ac_source.py` — programmable AC source for the mains sweep + +What the spreadsheet cannot do: + +- The eleven crossed-regulation rows become **one sweep**, recorded as a + regulation curve indexed by input voltage, with `min`/`max` aggregations + validated against the rail limits. +- Each ripple test keeps **the waveform itself**, not a picture of it, and the + 400 mV ceiling is checked against the trace rather than a transcribed number. + +Because the curve is data, the same measurement stays comparable across samples +and across temperature setpoints. Run one per chamber setpoint and the drift is +visible directly. diff --git a/dvt_excel_migration/smps_dvt/phases/crossed_regulation.py b/dvt_excel_migration/smps_dvt/phases/crossed_regulation.py new file mode 100644 index 0000000..75d7a5c --- /dev/null +++ b/dvt_excel_migration/smps_dvt/phases/crossed_regulation.py @@ -0,0 +1,12 @@ +"""Both rails at nominal input: one row of the report.""" + +CH_23V, CH_9V = 1, 2 + + +def crossed_regulation(measurements, scope, ac_source): + ac_source.set_voltage(230) + scope.configure_channel(CH_23V, 5.0) + scope.configure_channel(CH_9V, 2.0) + + measurements.rail_23v = scope.measure_dc(CH_23V) + measurements.rail_9v = scope.measure_dc(CH_9V) diff --git a/dvt_excel_migration/smps_dvt/phases/crossed_regulation_sweep.py b/dvt_excel_migration/smps_dvt/phases/crossed_regulation_sweep.py new file mode 100644 index 0000000..d07a04f --- /dev/null +++ b/dvt_excel_migration/smps_dvt/phases/crossed_regulation_sweep.py @@ -0,0 +1,35 @@ +"""The rows a report fills in one at a time, as a single sweep. + +Each rail becomes a curve indexed by input voltage, so regulation is something +to compare across samples rather than a column of numbers to read. +""" + +# Nominal 230 Vac +/-10%. +MAINS_SWEEP_VAC = (207, 216, 230, 244, 253) + +CH_23V, CH_9V = 1, 2 + + +def crossed_regulation_sweep(measurements, scope, ac_source): + mains = [] + rail_23v = [] + rail_9v = [] + + for volts in MAINS_SWEEP_VAC: + ac_source.set_voltage(volts) + mains.append(volts) + rail_23v.append(scope.measure_dc(CH_23V)) + rail_9v.append(scope.measure_dc(CH_9V)) + + measurements.rail_23v_vs_mains.x_axis = mains + measurements.rail_23v_vs_mains.y_axis.rail_23v = rail_23v + # The sweep passes when the rail stays inside its limits at every point. + measurements.rail_23v_vs_mains.y_axis.rail_23v.aggregations.min = min(rail_23v) + measurements.rail_23v_vs_mains.y_axis.rail_23v.aggregations.max = max(rail_23v) + + measurements.rail_9v_vs_mains.x_axis = mains + measurements.rail_9v_vs_mains.y_axis.rail_9v = rail_9v + measurements.rail_9v_vs_mains.y_axis.rail_9v.aggregations.min = min(rail_9v) + measurements.rail_9v_vs_mains.y_axis.rail_9v.aggregations.max = max(rail_9v) + + ac_source.set_voltage(230) diff --git a/dvt_excel_migration/smps_dvt/phases/ripple_23v.py b/dvt_excel_migration/smps_dvt/phases/ripple_23v.py new file mode 100644 index 0000000..c8a883d --- /dev/null +++ b/dvt_excel_migration/smps_dvt/phases/ripple_23v.py @@ -0,0 +1,21 @@ +"""23V ripple: the two transcribed figures, plus the trace they came from.""" + +CH_23V = 1 + + +def ripple_23v(measurements, scope): + scope.configure_channel(CH_23V, 0.02) # 20 mV/div + scope.set_timebase(0.01) # 10 ms/div: ~20 cycles of 100 Hz ripple + scope.acquire() + + peak_mv, rms_mv = scope.measure_ripple(CH_23V) + measurements.ripple_23v_peak_to_peak = peak_mv + measurements.ripple_23v_rms = rms_mv + + times, values = scope.capture_waveform(CH_23V) + measurements.ripple_23v_waveform.x_axis = times + measurements.ripple_23v_waveform.y_axis.ripple = values + # The same ceiling as the transcribed figure, checked against the trace. + measurements.ripple_23v_waveform.y_axis.ripple.aggregations.peak_to_peak = ( + max(values) - min(values) + ) diff --git a/dvt_excel_migration/smps_dvt/phases/ripple_9v.py b/dvt_excel_migration/smps_dvt/phases/ripple_9v.py new file mode 100644 index 0000000..fed3d0a --- /dev/null +++ b/dvt_excel_migration/smps_dvt/phases/ripple_9v.py @@ -0,0 +1,21 @@ +"""9V ripple: the two transcribed figures, plus the trace they came from.""" + +CH_9V = 2 + + +def ripple_9v(measurements, scope): + scope.configure_channel(CH_9V, 0.02) # 20 mV/div + scope.set_timebase(0.01) # 10 ms/div: ~20 cycles of 100 Hz ripple + scope.acquire() + + peak_mv, rms_mv = scope.measure_ripple(CH_9V) + measurements.ripple_9v_peak_to_peak = peak_mv + measurements.ripple_9v_rms = rms_mv + + times, values = scope.capture_waveform(CH_9V) + measurements.ripple_9v_waveform.x_axis = times + measurements.ripple_9v_waveform.y_axis.ripple = values + # The same ceiling as the transcribed figure, checked against the trace. + measurements.ripple_9v_waveform.y_axis.ripple.aggregations.peak_to_peak = ( + max(values) - min(values) + ) diff --git a/dvt_excel_migration/smps_dvt/plugs/ac_source.py b/dvt_excel_migration/smps_dvt/plugs/ac_source.py new file mode 100644 index 0000000..6e4ee38 --- /dev/null +++ b/dvt_excel_migration/smps_dvt/plugs/ac_source.py @@ -0,0 +1,31 @@ +"""Programmable AC source driving the mains side of the regulation sweep.""" + +# VISA resource of the AC source on the bench LAN. +AC_SOURCE_RESOURCE = "TCPIP0::192.0.2.11::inst0::INSTR" + +LINE_FREQUENCY_HZ = 50.0 + + +class ACSource: + def __init__(self): + self._source = None + + # import pyvisa + # + # self._source = pyvisa.ResourceManager().open_resource(AC_SOURCE_RESOURCE) + # self._source.timeout = 10_000 + # self._source.write(f"SOURce:FREQuency {LINE_FREQUENCY_HZ}") + # self._source.write("OUTPut:STATe ON") + + def __del__(self): + # self._source.write("OUTPut:STATe OFF") + pass + + def identity(self) -> str: + # return self._source.query("*IDN?").strip() + return "GW-INSTEK,APS-7100,SIMULATED,1.0" + + def set_voltage(self, volts: float) -> None: + # self._source.write(f"SOURce:VOLTage {volts}") + # self._source.query("*OPC?") + pass diff --git a/dvt_excel_migration/smps_dvt/plugs/scope.py b/dvt_excel_migration/smps_dvt/plugs/scope.py new file mode 100644 index 0000000..047fb00 --- /dev/null +++ b/dvt_excel_migration/smps_dvt/plugs/scope.py @@ -0,0 +1,141 @@ +"""Tektronix MSO5-series oscilloscope. + +Reads the same figures a hand-written report transcribes off the screen +(Peak-to-Peak and RMS) and, unlike a screenshot, also returns the waveform +behind them. + +The methods below generate representative data so the procedure runs anywhere. +Each keeps its real instrument call directly above, commented out: swap the two +and the same procedure drives the bench. +""" + +import math +import random + +# VISA resource of the scope on the bench LAN. +SCOPE_RESOURCE = "TCPIP0::192.0.2.10::inst0::INSTR" + +RAIL_23V_NOM = 23.0 +RAIL_9V_NOM = 9.0 +CH_23V = 1 + +# Rectified mains ripple sits at twice the line frequency. +LINE_FREQUENCY_HZ = 50.0 + + +class Oscilloscope: + def __init__(self): + self._scope = None + + # import pyvisa + # + # self._scope = pyvisa.ResourceManager().open_resource(SCOPE_RESOURCE) + # self._scope.timeout = 20_000 + # self._scope.write("*RST") + # # 12-bit High Res: at 400 mV of ripple on a 23 V rail the extra bits + # # are the difference between measuring ripple and measuring the + # # quantiser. + # self._scope.write("ACQuire:MODe HIRes") + # self._scope.write("HORizontal:MODe AUTO") + + def identity(self) -> str: + """Model and firmware, recorded with the run for traceability.""" + # return self._scope.query("*IDN?").strip() + return "TEKTRONIX,MSO54,SIMULATED,1.0" + + def configure_channel(self, channel: int, volts_per_div: float) -> None: + """AC-couple the rail so its DC level does not eat the vertical range.""" + # self._scope.write(f"DISplay:GLObal:CH{channel}:STATE ON") + # self._scope.write(f"CH{channel}:COUPling AC") + # # 20 MHz is the usual bandwidth limit for a ripple measurement. + # self._scope.write(f"CH{channel}:BANdwidth 20E6") + # self._scope.write(f"CH{channel}:SCAle {volts_per_div}") + # self._scope.write(f"CH{channel}:OFFSet 0") + pass + + def set_timebase(self, seconds_per_div: float) -> None: + # self._scope.write(f"HORizontal:SCAle {seconds_per_div}") + pass + + def acquire(self) -> None: + """One single-sequence acquisition, so every read is the same capture.""" + # self._scope.write("ACQuire:STOPAfter SEQuence") + # self._scope.write("ACQuire:STATE RUN") + # self._scope.query("*OPC?") + pass + + def measure_dc(self, channel: int) -> float: + """Rail voltage in volts, DC-coupled mean.""" + # self._scope.write(f"CH{channel}:COUPling DC") + # self.acquire() + # self._scope.write("MEASUrement:ADDMEAS MEAN") + # self._scope.write(f"MEASUrement:MEAS1:SOUrce CH{channel}") + # self._scope.write("MEASUrement:MEAS1:TYPe MEAN") + # self._scope.query("*OPC?") + # return float( + # self._scope.query("MEASUrement:MEAS1:RESUlt:CURRentacq:MEAN?") + # ) + nominal = RAIL_23V_NOM if channel == CH_23V else RAIL_9V_NOM + return round(random.gauss(nominal, 0.04), 3) + + def measure_ripple(self, channel: int): + """Peak-to-peak and RMS ripple in millivolts, AC-coupled.""" + # self._scope.write("MEASUrement:ADDMEAS PK2PK") + # self._scope.write(f"MEASUrement:MEAS1:SOUrce CH{channel}") + # self._scope.write("MEASUrement:MEAS1:TYPe PK2PK") + # self._scope.write("MEASUrement:ADDMEAS RMS") + # self._scope.write(f"MEASUrement:MEAS2:SOUrce CH{channel}") + # self._scope.write("MEASUrement:MEAS2:TYPe RMS") + # self._scope.query("*OPC?") + # peak_volts = float( + # self._scope.query("MEASUrement:MEAS1:RESUlt:CURRentacq:MEAN?") + # ) + # rms_volts = float( + # self._scope.query("MEASUrement:MEAS2:RESUlt:CURRentacq:MEAN?") + # ) + # return peak_volts * 1000.0, rms_volts * 1000.0 + peak_mv = random.uniform(120.0, 340.0) + # Rectified-mains ripple sits near a crest factor of 4. + return round(peak_mv, 1), round(peak_mv / 4.2, 2) + + def capture_waveform(self, channel: int): + """The trace behind those numbers, as (seconds, millivolts). + + The record is decimated to a couple of thousand points: enough to keep + the ripple envelope, small enough to store on every run. + """ + # self._scope.write(f"DATa:SOUrce CH{channel}") + # self._scope.write("DATa:ENCdg ASCII") + # self._scope.write("DATa:STARt 1") + # record = int(self._scope.query("HORizontal:RECOrdlength?")) + # self._scope.write(f"DATa:STOP {record}") + # + # counts = [float(v) for v in self._scope.query("CURVe?").split(",")] + # y_multiplier = float(self._scope.query("WFMOutpre:YMUlt?")) + # y_offset = float(self._scope.query("WFMOutpre:YOFf?")) + # y_zero = float(self._scope.query("WFMOutpre:YZEro?")) + # x_increment = float(self._scope.query("WFMOutpre:XINcr?")) + # + # stride = max(1, len(counts) // 2000) + # times, values = [], [] + # for index in range(0, len(counts), stride): + # volts = (counts[index] - y_offset) * y_multiplier + y_zero + # times.append(index * x_increment) + # values.append(volts * 1000.0) + # return times, values + + points = 500 + duration = 0.2 # 10 ms/div across 20 divisions + step = duration / points + amplitude = random.uniform(60.0, 170.0) + ripple_hz = 2 * LINE_FREQUENCY_HZ + + times, values = [], [] + for index in range(points): + moment = index * step + fundamental = amplitude * math.sin(2 * math.pi * ripple_hz * moment) + # Switching noise rides on the rectified ripple. + noise = random.gauss(0, amplitude * 0.06) + times.append(round(moment, 6)) + values.append(round(fundamental + noise, 3)) + return times, values diff --git a/dvt_excel_migration/smps_dvt/procedure.yaml b/dvt_excel_migration/smps_dvt/procedure.yaml new file mode 100644 index 0000000..189fe0d --- /dev/null +++ b/dvt_excel_migration/smps_dvt/procedure.yaml @@ -0,0 +1,132 @@ +name: SMPS Regulation and Ripple +version: 1.0.0 + +unit: + auto_identify: true + serial_number: + default_value: "SN-0001" + part_number: + default_value: "PCB-REV-A" + +plugs: + - key: scope + name: Oscilloscope + python: plugs.scope:Oscilloscope + - key: ac_source + name: AC Source + python: plugs.ac_source:ACSource + +main: + - name: Crossed Regulation + python: phases.crossed_regulation + measurements: + # Rail limits come straight from the report's Min./Max. criteria columns. + - name: Rail 23V + unit: V + validators: + - operator: ">=" + expected_value: 21.9 + - operator: "<=" + expected_value: 23.1 + - name: Rail 9V + unit: V + validators: + - operator: ">=" + expected_value: 8.5 + - operator: "<=" + expected_value: 9.5 + + - name: Crossed Regulation Sweep + python: phases.crossed_regulation_sweep + measurements: + # The rows a report fills in one at a time become a regulation curve. + - name: Rail 23V vs Mains + title: 23V rail across the mains range + x_axis: + legend: Mains + unit: Vac + y_axis: + - legend: Rail 23V + unit: V + aggregations: + - type: min + validators: + - operator: ">=" + expected_value: 21.9 + - type: max + validators: + - operator: "<=" + expected_value: 23.1 + - name: Rail 9V vs Mains + title: 9V rail across the mains range + x_axis: + legend: Mains + unit: Vac + y_axis: + - legend: Rail 9V + unit: V + aggregations: + - type: min + validators: + - operator: ">=" + expected_value: 8.5 + - type: max + validators: + - operator: "<=" + expected_value: 9.5 + + - name: Ripple 23V + python: phases.ripple_23v + measurements: + # The two figures a hand-written report transcribes off the scope screen. + - name: Ripple 23V Peak-to-Peak + unit: mV + validators: + - operator: "<=" + expected_value: 400 + - name: Ripple 23V RMS + unit: mV + validators: + - operator: "<=" + expected_value: 100 + # ...and the trace they were measured on, kept as data. + - name: Ripple 23V Waveform + title: 23V ripple + x_axis: + legend: Time + unit: s + y_axis: + - legend: Ripple + unit: mV + aggregations: + - type: peak_to_peak + validators: + - operator: "<=" + expected_value: 400 + + - name: Ripple 9V + python: phases.ripple_9v + measurements: + - name: Ripple 9V Peak-to-Peak + unit: mV + validators: + - operator: "<=" + expected_value: 400 + - name: Ripple 9V RMS + unit: mV + validators: + - operator: "<=" + expected_value: 100 + - name: Ripple 9V Waveform + title: 9V ripple + x_axis: + legend: Time + unit: s + y_axis: + - legend: Ripple + unit: mV + aggregations: + - type: peak_to_peak + validators: + - operator: "<=" + expected_value: 400 diff --git a/dvt_excel_migration/xcu_import.py b/dvt_excel_migration/xcu_import.py new file mode 100644 index 0000000..c09b1bf --- /dev/null +++ b/dvt_excel_migration/xcu_import.py @@ -0,0 +1,344 @@ +"""Import a DVT report spreadsheet into TofuPilot. + +Written for reports that keep several sample readings inside a single cell and +store their plots as embedded images: neither shape survives the native Excel +import, because the column mapper reads one value per cell and never sees the +drawing layer. This script flattens both. + + pip install tofupilot openpyxl + export TOFUPILOT_API_KEY=... + python xcu_import.py "DVT report.xlsx" --procedure-id \\ + --serial-number SN-0001 --part-number PCB-REV-A + +Waveform CSVs exported from the scope are picked up automatically when a +--waveforms directory is passed: a curve then lands as a real multi-dimensional +measurement (per-axis units, validators, comparable across runs) instead of a +screenshot pinned to the run. +""" + +from __future__ import annotations + +import argparse +import os +import re +import zipfile +from dataclasses import dataclass, field +from datetime import datetime, timezone +from pathlib import Path +from urllib.request import Request, urlopen + +import openpyxl +from tofupilot.v2 import TofuPilot + +# Row 50 names the temperature block, row 51 the columns; readings start at 52. +BLOCK_ROW = 50 +HEADER_ROW = 51 +SHEET = "SMPS reg+ripple" + +# Each temperature block repeats (value, units, result) at a fixed offset. The +# sample class sits in row 48 above the same columns. +BLOCK_COLUMNS = (18, 23, 28, 33, 38, 43, 48) # R, W, AB, AG, AL, AQ, AV +VALUE_OFFSET, UNITS_OFFSET, RESULT_OFFSET = 0, 1, 3 + +# "22.33 - 10.11" is one reading of a dual-rail test, not two measurements. +RAIL_SPLIT = re.compile(r"\s*-\s*") +NUMERIC = re.compile(r"-?\d+(?:[.,]\d+)?") + + +@dataclass +class Reading: + """One test row, expanded to one entry per sample.""" + + test_number: str + description: str + procedure: str + conditions: str + sample: str + values: list[float] + units: str + lower: float | None + upper: float | None + outcome: str + plots: list[str] = field(default_factory=list) + + +def parse_stacked(cell: object) -> list[list[float]]: + """Split a cell holding one reading per line into per-sample values. + + "22.33 - 10.11\\n22.34 - 10.10\\n22.35 - 10.11" is three samples of a + two-rail measurement, so it yields [[22.33, 10.11], [22.34, 10.10], ...]. + """ + if cell is None: + return [] + if isinstance(cell, (int, float)): + return [[float(cell)]] + + rows: list[list[float]] = [] + for line in str(cell).replace("\r", "\n").split("\n"): + if not line.strip(): + continue + rails = [NUMERIC.search(part) for part in RAIL_SPLIT.split(line)] + values = [float(m.group().replace(",", ".")) for m in rails if m] + if values: + rows.append(values) + return rows + + +def extract_images(workbook_path: Path, out_dir: Path) -> dict[int, list[Path]]: + """Pull embedded PNGs out of the .xlsx and group them by anchor row. + + openpyxl drops images on load, so the drawing XML is read straight from the + zip. The anchor row is what ties a plot to the test it proves — the whole + reason these cannot go in as one undifferentiated pile. + """ + out_dir.mkdir(parents=True, exist_ok=True) + by_row: dict[int, list[Path]] = {} + + with zipfile.ZipFile(workbook_path) as z: + rels = {} + for name in z.namelist(): + if re.fullmatch(r"xl/drawings/_rels/drawing\d+\.xml\.rels", name): + body = z.read(name).decode("utf8", "ignore") + rels[name] = re.findall(r'Id="([^"]+)"[^>]*?media/([^"]+)"', body) + + for name in z.namelist(): + if not re.fullmatch(r"xl/drawings/drawing\d+\.xml", name): + continue + rel_key = name.replace("drawings/", "drawings/_rels/") + ".rels" + media = dict(rels.get(rel_key, [])) + body = z.read(name).decode("utf8", "ignore") + + for anchor in re.finditer( + r".*?(\d+).*?embed=\"([^\"]+)\"", + body, + re.S, + ): + row = int(anchor.group(1)) + 1 # xdr rows are 0-based + target = media.get(anchor.group(2)) + if not target: + continue + dest = out_dir / target + if not dest.exists(): + dest.write_bytes(z.read(f"xl/media/{target}")) + by_row.setdefault(row, []).append(dest) + + return by_row + + +def load_waveform(path: Path) -> tuple[list[float], list[float]]: + """Read a two-column scope CSV into (time, amplitude).""" + xs: list[float] = [] + ys: list[float] = [] + for line in path.read_text(errors="ignore").splitlines(): + parts = line.replace(";", ",").split(",") + if len(parts) < 2: + continue + try: + xs.append(float(parts[0])) + ys.append(float(parts[1])) + except ValueError: + continue # header or preamble line + return xs, ys + + +def read_report(path: Path, images: dict[int, list[Path]]) -> list[Reading]: + sheet = openpyxl.load_workbook(path, data_only=True)[SHEET] + readings: list[Reading] = [] + + def text(row: int, col: int) -> str: + value = sheet.cell(row=row, column=col).value + return "" if value is None else str(value).strip() + + for row in range(HEADER_ROW + 1, sheet.max_row + 1): + description = text(row, 3) # C: Testdescription + if not description: + continue + + limits = [sheet.cell(row=row, column=col).value for col in (10, 12)] # J, L + lower, upper = ( + float(v) if isinstance(v, (int, float)) else None for v in limits + ) + conditions = " ".join( + filter(None, (text(row, col) for col in range(5, 10))) # E..I + ) + + for block in BLOCK_COLUMNS: + # Row 50 gives the temperature, row 48 the sample class. + temperature = text(BLOCK_ROW, block) or "Room temp." + sample_class = text(48, block) + per_sample = parse_stacked( + sheet.cell(row=row, column=block + VALUE_OFFSET).value + ) + if not per_sample: + continue + + units = text(row, block + UNITS_OFFSET).split("\n")[0] + outcome = text(row, block + RESULT_OFFSET) + + for index, values in enumerate(per_sample, start=1): + label = f"{sample_class} #{index}" if sample_class else f"#{index}" + readings.append( + Reading( + test_number=text(row, 2) or str(row), # B: Testnr + description=description, + procedure=text(row, 4), # D: Measuring procedure + conditions=conditions, + sample=f"{label} @ {temperature}", + values=values, + units=units, + lower=lower, + upper=upper, + outcome=outcome or "UNSET", + plots=[str(p) for p in images.get(row, [])], + ) + ) + + return readings + + +def to_outcome(raw: str) -> str: + """Their result column is prose ("Same result, Pass", "ToDo").""" + lowered = raw.strip().lower() + if "fail" in lowered: + return "FAIL" + if "pass" in lowered: + return "PASS" + return "UNSET" + + +def build_phases(readings: list[Reading], waveforms: Path | None) -> list[dict]: + phases: dict[str, dict] = {} + + for reading in readings: + phase = phases.setdefault( + reading.description, + { + "name": reading.description, + "outcome": "PASS", + "started_at": datetime.now(timezone.utc), + "ended_at": datetime.now(timezone.utc), + "docstring": reading.procedure or None, + "measurements": [], + }, + ) + + outcome = to_outcome(reading.outcome) + if outcome == "FAIL": + phase["outcome"] = "FAIL" + + validators = [] + if reading.lower is not None: + validators.append({"operator": ">=", "expected_value": reading.lower}) + if reading.upper is not None: + validators.append({"operator": "<=", "expected_value": reading.upper}) + + curve = None + if waveforms: + candidate = waveforms / f"{reading.test_number}_{reading.sample}.csv" + if candidate.exists(): + curve = load_waveform(candidate) + + measurement: dict = { + "name": f"{reading.description} — {reading.sample}", + "outcome": outcome, + "docstring": reading.conditions or None, + } + + if curve: + # A real curve carries its own axes, so it stays comparable across + # samples and temperatures rather than being a picture of a result. + times, amplitudes = curve + measurement["x_axis"] = {"name": "Time", "units": "s", "data": times} + measurement["y_axis"] = [ + { + "name": reading.description, + "units": reading.units or "V", + "data": amplitudes, + "validators": validators or None, + } + ] + else: + measurement["measured_value"] = reading.values[0] + measurement["units"] = reading.units or None + if validators: + measurement["validators"] = validators + + phase["measurements"].append(measurement) + + return list(phases.values()) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("workbook", type=Path) + parser.add_argument("--procedure-id", required=True) + parser.add_argument("--serial-number", required=True) + parser.add_argument("--part-number", required=True) + parser.add_argument( + "--waveforms", + type=Path, + help="Directory of scope CSVs named _.csv", + ) + parser.add_argument("--dry-run", action="store_true") + args = parser.parse_args() + + plots_dir = args.workbook.parent / "plots" + images = extract_images(args.workbook, plots_dir) + readings = read_report(args.workbook, images) + phases = build_phases(readings, args.waveforms) + + curves = sum(1 for p in phases for m in p["measurements"] if "y_axis" in m) + print( + f"{len(readings)} readings across {len(phases)} phases " + f"({curves} as waveforms, {sum(len(v) for v in images.values())} plots)" + ) + + if args.dry_run: + for phase in phases: + print(f" {phase['name']}: {len(phase['measurements'])} measurements") + return + + now = datetime.now(timezone.utc) + client_options = {"api_key": os.environ["TOFUPILOT_API_KEY"]} + if os.environ.get("TOFUPILOT_URL"): + client_options["server_url"] = os.environ["TOFUPILOT_URL"] + + with TofuPilot(**client_options) as client: + run = client.runs.create( + outcome="FAIL" if any(p["outcome"] == "FAIL" for p in phases) else "PASS", + procedure_id=args.procedure_id, + started_at=now, + ended_at=now, + serial_number=args.serial_number, + part_number=args.part_number, + phases=phases, + ) + print(f"run {run.id}") + + # Screenshots ride along on the run; a curve imported as a measurement + # above already sits on its own test. Each upload is initialize -> PUT + # to the pre-signed URL -> finalize. + uploads = [] + for paths in images.values(): + for path in paths: + blob = Path(path) + upload = client.attachments.initialize(name=blob.name) + response = urlopen( + Request( + upload.upload_url, + data=blob.read_bytes(), + method="PUT", + headers={"Content-Type": "image/png"}, + ) + ) + response.read() + client.attachments.finalize(id=upload.id) + uploads.append(upload.id) + + if uploads: + client.runs.update(id=run.id, attachments=uploads) + print(f"{len(uploads)} plots attached") + + +if __name__ == "__main__": + main() From ded19d762423a3e5dc0b9fe430c44b7f94806ac8 Mon Sep 17 00:00:00 2001 From: Julien Buteau Date: Wed, 29 Jul 2026 19:28:58 +0200 Subject: [PATCH 4/6] Add touchpad positional accuracy example (#73) --- touchpad_accuracy/README.md | 71 +++++++++++++++ .../touchpad_ptp/phases/center_linearity.py | 37 ++++++++ .../phases/click_actuation_force.py | 13 +++ .../phases/edge_band_linearity.py | 39 ++++++++ .../touchpad_ptp/phases/home_fixture.py | 12 +++ .../touchpad_ptp/plugs/force_gauge.py | 42 +++++++++ .../touchpad_ptp/plugs/touch_robot.py | 71 +++++++++++++++ touchpad_accuracy/touchpad_ptp/procedure.yaml | 89 +++++++++++++++++++ 8 files changed, 374 insertions(+) create mode 100644 touchpad_accuracy/README.md create mode 100644 touchpad_accuracy/touchpad_ptp/phases/center_linearity.py create mode 100644 touchpad_accuracy/touchpad_ptp/phases/click_actuation_force.py create mode 100644 touchpad_accuracy/touchpad_ptp/phases/edge_band_linearity.py create mode 100644 touchpad_accuracy/touchpad_ptp/phases/home_fixture.py create mode 100644 touchpad_accuracy/touchpad_ptp/plugs/force_gauge.py create mode 100644 touchpad_accuracy/touchpad_ptp/plugs/touch_robot.py create mode 100644 touchpad_accuracy/touchpad_ptp/procedure.yaml diff --git a/touchpad_accuracy/README.md b/touchpad_accuracy/README.md new file mode 100644 index 0000000..65e9451 --- /dev/null +++ b/touchpad_accuracy/README.md @@ -0,0 +1,71 @@ +# Touchpad positional accuracy + +A touchpad is tested by pressing it. A robot puts a known force on a known +coordinate, and the pad reports where it thinks it was touched; the number that +matters is the distance between the two. + +`touchpad_ptp/` records that distance against the Precision Touchpad linearity +limits — **0.5 mm** across the pad, relaxed to **1.5 mm** within 3.5 mm of an +edge, where the sensor is least linear. Windows reports these distances in +himetric units (0.01 mm), which is what the HID read in `plugs/touch_robot.py` +converts from. + +``` +touchpad_ptp/ +├── procedure.yaml phases, measurements and limits +├── phases/ the Python each phase runs +└── plugs/ one class per instrument +``` + +```bash +tofupilot run ./touchpad_ptp +``` + +The plugs return representative data so the procedure runs anywhere. Every +method keeps its real call directly above, commented out — swap the two and the +same procedure drives the bench: + +- `plugs/touch_robot.py` — motion controller over VISA for the press, HID + digitizer report for the contact the pad reported +- `plugs/force_gauge.py` — load cell ramped until the dome switch closes, + triggered on the closure rather than sampled and compared afterwards + +## The grid is one measurement, not nine + +A manual test taps each target and writes down whether it looked right. Here +each grid becomes a curve indexed by target, with `max` validated against the +spec limit and `mean` against a tighter working limit: + +```yaml +- name: Edge Positional Error + x_axis: + legend: Target + y_axis: + - legend: Error + unit: mm + aggregations: + - type: max + validators: + - operator: "<=" + expected_value: 1.5 +``` + +`max` is what fails the unit — one target outside the limit is a failure no +average should absorb. Keeping the whole series alongside it is what separates +a pad that is off in one corner from one that is off everywhere, which is the +difference between a fixture problem and a sensor problem. + +The worst edge target is recorded a second time as a scalar, so the failing +number is filterable on its own and trendable across a population. + +## Two limits, one press + +The central grid and the edge band run the same code against the same fixture. +They are separate phases only because the spec allows three times the error +inside the border strip, and a single limit would either pass a bad centre or +fail a good edge. + +Click actuation force comes off the same fixture in the same cycle. It has +nothing to do with position, but a dome that stiffens or softens is an early +sign of the same mechanical drift that moves the positional error, and it costs +one extra phase to catch. diff --git a/touchpad_accuracy/touchpad_ptp/phases/center_linearity.py b/touchpad_accuracy/touchpad_ptp/phases/center_linearity.py new file mode 100644 index 0000000..fe91bc1 --- /dev/null +++ b/touchpad_accuracy/touchpad_ptp/phases/center_linearity.py @@ -0,0 +1,37 @@ +"""The nine targets a manual test taps by hand, as one curve. + +Each target is a commanded coordinate; the measurement is the distance between +it and the contact the pad reported. Keeping the whole grid as a series means a +unit that is off in one corner is distinguishable from one that is off +everywhere, which a single worst-case number hides. +""" + +import math + +# 2 mm grid across the central region, clear of the edge band. +TARGETS = ( + (26, 16), (52, 16), (79, 16), + (26, 32), (52, 32), (79, 32), + (26, 49), (52, 49), (79, 49), +) + + +def center_linearity(measurements, robot, log): + index = [] + errors = [] + + for n, (target_x, target_y) in enumerate(TARGETS, start=1): + reported_x, reported_y = robot.press(target_x, target_y) + error = round(math.dist((target_x, target_y), (reported_x, reported_y)), 3) + + log.info(f"({target_x},{target_y}) -> ({reported_x:.2f},{reported_y:.2f}) = {error} mm") + index.append(n) + errors.append(error) + + measurements.center_positional_error.x_axis = index + measurements.center_positional_error.y_axis.error = errors + # The unit passes when every target is inside the limit, not on average. + measurements.center_positional_error.y_axis.error.aggregations.max = max(errors) + measurements.center_positional_error.y_axis.error.aggregations.mean = round( + sum(errors) / len(errors), 3 + ) diff --git a/touchpad_accuracy/touchpad_ptp/phases/click_actuation_force.py b/touchpad_accuracy/touchpad_ptp/phases/click_actuation_force.py new file mode 100644 index 0000000..796768f --- /dev/null +++ b/touchpad_accuracy/touchpad_ptp/phases/click_actuation_force.py @@ -0,0 +1,13 @@ +"""How hard the pad has to be pressed before it clicks. + +Unrelated to position, but it comes off the same fixture in the same cycle, and +a dome that stiffens or softens is an early sign of the same mechanical problem +that moves the positional error. +""" + + +def click_actuation_force(measurements, gauge, log): + grams = gauge.ramp_until_actuation() + log.info(f"Switch actuated at {grams} g") + + measurements.actuation_force = grams diff --git a/touchpad_accuracy/touchpad_ptp/phases/edge_band_linearity.py b/touchpad_accuracy/touchpad_ptp/phases/edge_band_linearity.py new file mode 100644 index 0000000..fc3d5d6 --- /dev/null +++ b/touchpad_accuracy/touchpad_ptp/phases/edge_band_linearity.py @@ -0,0 +1,39 @@ +"""The border, where touchpads actually fail. + +Same press, same measurement as the central grid, but within 3.5 mm of an edge +the spec allows three times the error. Sampling the corners and the middle of +each side is what catches a sensor whose linearity falls apart only at one end. +""" + +import math + +# Targets inside the 3.5 mm border strip: four corners, four side midpoints. +TARGETS = ( + (2, 2), (52, 2), (103, 2), + (2, 32), (103, 32), + (2, 63), (52, 63), (103, 63), +) + + +def edge_band_linearity(measurements, robot, log): + index = [] + errors = [] + + for n, (target_x, target_y) in enumerate(TARGETS, start=1): + reported_x, reported_y = robot.press(target_x, target_y) + error = round(math.dist((target_x, target_y), (reported_x, reported_y)), 3) + + log.info(f"({target_x},{target_y}) -> ({reported_x:.2f},{reported_y:.2f}) = {error} mm") + index.append(n) + errors.append(error) + + measurements.edge_positional_error.x_axis = index + measurements.edge_positional_error.y_axis.error = errors + measurements.edge_positional_error.y_axis.error.aggregations.max = max(errors) + measurements.edge_positional_error.y_axis.error.aggregations.mean = round( + sum(errors) / len(errors), 3 + ) + + # Repeated as a scalar so the failing number is filterable on its own, and + # so drift on the worst target is trendable across a population. + measurements.worst_edge_error = max(errors) diff --git a/touchpad_accuracy/touchpad_ptp/phases/home_fixture.py b/touchpad_accuracy/touchpad_ptp/phases/home_fixture.py new file mode 100644 index 0000000..c04556f --- /dev/null +++ b/touchpad_accuracy/touchpad_ptp/phases/home_fixture.py @@ -0,0 +1,12 @@ +"""Home the probe and zero the gauge before anything is measured. + +Positional error is only comparable across units if every press starts from the +same reference, so this runs first and the rest depend on it implicitly. +""" + + +def home_fixture(log, robot, gauge): + log.info(f"Robot: {robot.identity()}") + log.info(f"Gauge: {gauge.identity()}") + gauge.zero() + log.info("Fixture homed and zeroed") diff --git a/touchpad_accuracy/touchpad_ptp/plugs/force_gauge.py b/touchpad_accuracy/touchpad_ptp/plugs/force_gauge.py new file mode 100644 index 0000000..a24efbb --- /dev/null +++ b/touchpad_accuracy/touchpad_ptp/plugs/force_gauge.py @@ -0,0 +1,42 @@ +"""Inline load cell reading the force at which the dome switch actuates.""" + +# Load cell indicator on the bench LAN. +GAUGE_RESOURCE = "TCPIP0::192.0.2.21::inst0::INSTR" + +# Ramp until the switch reports, or give up. +RAMP_LIMIT_G = 120.0 + +import random + + +class ForceGauge: + def __init__(self): + self._gauge = None + + # import pyvisa + # + # self._gauge = pyvisa.ResourceManager().open_resource(GAUGE_RESOURCE) + # self._gauge.timeout = 10_000 + # self._gauge.write("UNIT:FORCe GRAM") + + def __del__(self): + pass + + def identity(self) -> str: + # return self._gauge.query("*IDN?").strip() + return "SIMULATED-LOAD-CELL,1.0" + + def zero(self) -> None: + # self._gauge.write("SENSe:CORRection:COLLect:ZERO") + # self._gauge.query("*OPC?") + pass + + def ramp_until_actuation(self) -> float: + """Ramp force at the pad centre; return the force at the click, in grams.""" + # The switch closure is what stops the ramp, so the gauge is read on + # the edge rather than sampled and compared afterwards. + # self._gauge.write(f"SOURce:FORCe:RAMP {RAMP_LIMIT_G}") + # self._gauge.write("TRIGger:SOURce EXTernal") + # return float(self._gauge.query("FETCh:FORCe?")) + + return round(random.gauss(60.5, 3.4), 1) diff --git a/touchpad_accuracy/touchpad_ptp/plugs/touch_robot.py b/touchpad_accuracy/touchpad_ptp/plugs/touch_robot.py new file mode 100644 index 0000000..33ec4e4 --- /dev/null +++ b/touchpad_accuracy/touchpad_ptp/plugs/touch_robot.py @@ -0,0 +1,71 @@ +"""Cartesian probe pressing a calibrated force at a commanded x/y target. + +Two halves on a real bench: the motion controller that puts the tip somewhere, +and the HID read that says where the pad thought it was touched. The positional +error is the distance between the two, so both have to come from the same press. +""" + +# Motion controller on the bench LAN. +ROBOT_RESOURCE = "TCPIP0::192.0.2.20::inst0::INSTR" + +# Pad geometry, mm. The border strip where the spec relaxes its limit. +PAD_W, PAD_H = 105.0, 65.0 +EDGE_BAND = 3.5 + +# Probe force held constant across the grid so error stays comparable. +PROBE_FORCE_G = 60.0 + +import random + + +class TouchRobot: + def __init__(self): + self._axes = None + self._hid = None + + # import pyvisa + # import hid + # + # self._axes = pyvisa.ResourceManager().open_resource(ROBOT_RESOURCE) + # self._axes.timeout = 10_000 + # self._axes.write("HOME") + # self._axes.query("*OPC?") + # self._axes.write(f"FORCe {PROBE_FORCE_G}") + # + # # The pad under test, as the OS sees it. + # self._hid = hid.Device(vid=0x0000, pid=0x0000) + + def __del__(self): + # self._axes.write("PARK") + pass + + def identity(self) -> str: + # return self._axes.query("*IDN?").strip() + return "SIMULATED-XY-STAGE,1.0" + + def in_edge_band(self, x: float, y: float) -> bool: + return ( + x < EDGE_BAND + or y < EDGE_BAND + or x > PAD_W - EDGE_BAND + or y > PAD_H - EDGE_BAND + ) + + def press(self, x: float, y: float) -> tuple[float, float]: + """Press at a commanded target; return the contact the pad reported.""" + # self._axes.write(f"MOVE {x:.3f} {y:.3f}") + # self._axes.query("*OPC?") + # self._axes.write("PRESS") + # self._axes.query("*OPC?") + # + # # Digitizer report: absolute X/Y in himetric (0.01 mm), the unit the + # # Precision Touchpad tests report distances in. + # report = self._hid.read(64, timeout=1000) + # reported_x = int.from_bytes(report[2:4], "little") / 100.0 + # reported_y = int.from_bytes(report[4:6], "little") / 100.0 + # return reported_x, reported_y + + # Simulated: the sensor is markedly less linear near the border, which + # is the whole reason the spec carries two limits. + sigma = 0.42 if self.in_edge_band(x, y) else 0.14 + return x + random.gauss(0.0, sigma), y + random.gauss(0.0, sigma) diff --git a/touchpad_accuracy/touchpad_ptp/procedure.yaml b/touchpad_accuracy/touchpad_ptp/procedure.yaml new file mode 100644 index 0000000..cf43eab --- /dev/null +++ b/touchpad_accuracy/touchpad_ptp/procedure.yaml @@ -0,0 +1,89 @@ +name: Touchpad Positional Accuracy +version: 1.0.0 + +unit: + auto_identify: true + serial_number: + default_value: "SN-0001" + part_number: + default_value: "TPAD-REV-A" + +plugs: + - key: robot + name: Touch Robot + python: plugs.touch_robot:TouchRobot + - key: gauge + name: Force Gauge + python: plugs.force_gauge:ForceGauge + +main: + - name: Home Fixture + key: home_fixture + python: phases.home_fixture + + # Every press is referenced to the homed position, so the grid phases wait + # for it rather than racing it. + - name: Center Linearity + python: phases.center_linearity + depends_on: + - home_fixture + measurements: + # Precision Touchpad linearity: 0.5 mm edge to edge, away from the border. + - name: Center Positional Error + title: Positional error across the central region + x_axis: + legend: Target + y_axis: + - legend: Error + unit: mm + aggregations: + - type: max + validators: + - operator: "<=" + expected_value: 0.5 + - type: mean + validators: + - operator: "<=" + expected_value: 0.35 + + - name: Edge Band Linearity + python: phases.edge_band_linearity + depends_on: + - home_fixture + measurements: + # Within 3.5 mm of an edge the same spec relaxes to 1.5 mm. + - name: Edge Positional Error + title: Positional error along the 3.5 mm edge band + x_axis: + legend: Target + y_axis: + - legend: Error + unit: mm + aggregations: + - type: max + validators: + - operator: "<=" + expected_value: 1.5 + - type: mean + validators: + - operator: "<=" + expected_value: 1.1 + # The worst single target is what fails a unit, so it is kept on its own. + - name: Worst Edge Error + unit: mm + validators: + - operator: "<=" + expected_value: 1.5 + + - name: Click Actuation Force + python: phases.click_actuation_force + depends_on: + - home_fixture + measurements: + - name: Actuation Force + unit: g + validators: + - operator: ">=" + expected_value: 50 + - operator: "<=" + expected_value: 70 From fc190f7cd507ec6b53fba4c4368b1a2a0a8e5125 Mon Sep 17 00:00:00 2001 From: Julien Buteau Date: Fri, 31 Jul 2026 14:19:56 +0200 Subject: [PATCH 5/6] Skip letterheads and duplicate images in the DVT import (#75) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A report's drawing layer holds more than the scope captures: the company letterhead sits there too, anchored on several rows, so it was attached once per row it appeared on. Filter on PNG dimensions rather than file size — a full-window scope grab is wide and roughly landscape, a banner is not — and keep an image only once even when it is anchored repeatedly. On the reference report this drops 4 attachments and keeps all 45 captures. Co-authored-by: Julien Buteau --- dvt_excel_migration/xcu_import.py | 38 ++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/dvt_excel_migration/xcu_import.py b/dvt_excel_migration/xcu_import.py index c09b1bf..bbaa485 100644 --- a/dvt_excel_migration/xcu_import.py +++ b/dvt_excel_migration/xcu_import.py @@ -21,6 +21,7 @@ import argparse import os import re +import struct import zipfile from dataclasses import dataclass, field from datetime import datetime, timezone @@ -84,15 +85,42 @@ def parse_stacked(cell: object) -> list[list[float]]: return rows +# Letterheads and icons sit in the drawing layer next to the real captures. +# A scope screenshot is a full window grab, so it is wide, roughly landscape, +# and never a small banner. Filtering on pixels rather than file size keeps a +# lightly-compressed plot and drops a detailed logo. +MIN_PLOT_WIDTH = 600 +MIN_PLOT_HEIGHT = 300 + + +def png_size(payload: bytes) -> tuple[int, int] | None: + """Width and height from a PNG's IHDR, without a decoder dependency.""" + if len(payload) < 24 or payload[:8] != b"\x89PNG\r\n\x1a\n": + return None + width, height = struct.unpack(">II", payload[16:24]) + return width, height + + +def is_plot(payload: bytes) -> bool: + size = png_size(payload) + if size is None: + return True # not a PNG we can measure; let it through rather than lose data + width, height = size + return width >= MIN_PLOT_WIDTH and height >= MIN_PLOT_HEIGHT + + def extract_images(workbook_path: Path, out_dir: Path) -> dict[int, list[Path]]: """Pull embedded PNGs out of the .xlsx and group them by anchor row. openpyxl drops images on load, so the drawing XML is read straight from the zip. The anchor row is what ties a plot to the test it proves — the whole reason these cannot go in as one undifferentiated pile. + + Logos are skipped, and an image repeated across rows is only kept once. """ out_dir.mkdir(parents=True, exist_ok=True) by_row: dict[int, list[Path]] = {} + seen: set[str] = set() with zipfile.ZipFile(workbook_path) as z: rels = {} @@ -117,9 +145,17 @@ def extract_images(workbook_path: Path, out_dir: Path) -> dict[int, list[Path]]: target = media.get(anchor.group(2)) if not target: continue + + payload = z.read(f"xl/media/{target}") + if not is_plot(payload): + continue # letterhead or icon, not a capture + if target in seen: + continue # same image anchored on several rows + + seen.add(target) dest = out_dir / target if not dest.exists(): - dest.write_bytes(z.read(f"xl/media/{target}")) + dest.write_bytes(payload) by_row.setdefault(row, []).append(dest) return by_row From ae6e28b7513e85385854ef61ac634545c98f2270 Mon Sep 17 00:00:00 2001 From: upview Date: Fri, 31 Jul 2026 12:20:11 +0000 Subject: [PATCH 6/6] Auto code format --- .../phases/crossed_regulation_sweep.py | 12 ++++-- .../smps_dvt/phases/ripple_23v.py | 5 +-- .../smps_dvt/phases/ripple_9v.py | 5 +-- dvt_excel_migration/smps_dvt/plugs/scope.py | 3 +- dvt_excel_migration/xcu_import.py | 37 +++++++++++++------ .../touchpad_ptp/phases/center_linearity.py | 26 +++++++++---- .../phases/edge_band_linearity.py | 22 ++++++++--- .../touchpad_ptp/plugs/force_gauge.py | 4 +- .../touchpad_ptp/plugs/touch_robot.py | 4 +- 9 files changed, 77 insertions(+), 41 deletions(-) diff --git a/dvt_excel_migration/smps_dvt/phases/crossed_regulation_sweep.py b/dvt_excel_migration/smps_dvt/phases/crossed_regulation_sweep.py index d07a04f..69158ca 100644 --- a/dvt_excel_migration/smps_dvt/phases/crossed_regulation_sweep.py +++ b/dvt_excel_migration/smps_dvt/phases/crossed_regulation_sweep.py @@ -24,12 +24,16 @@ def crossed_regulation_sweep(measurements, scope, ac_source): measurements.rail_23v_vs_mains.x_axis = mains measurements.rail_23v_vs_mains.y_axis.rail_23v = rail_23v # The sweep passes when the rail stays inside its limits at every point. - measurements.rail_23v_vs_mains.y_axis.rail_23v.aggregations.min = min(rail_23v) - measurements.rail_23v_vs_mains.y_axis.rail_23v.aggregations.max = max(rail_23v) + measurements.rail_23v_vs_mains.y_axis.rail_23v.aggregations.min = min( + rail_23v) + measurements.rail_23v_vs_mains.y_axis.rail_23v.aggregations.max = max( + rail_23v) measurements.rail_9v_vs_mains.x_axis = mains measurements.rail_9v_vs_mains.y_axis.rail_9v = rail_9v - measurements.rail_9v_vs_mains.y_axis.rail_9v.aggregations.min = min(rail_9v) - measurements.rail_9v_vs_mains.y_axis.rail_9v.aggregations.max = max(rail_9v) + measurements.rail_9v_vs_mains.y_axis.rail_9v.aggregations.min = min( + rail_9v) + measurements.rail_9v_vs_mains.y_axis.rail_9v.aggregations.max = max( + rail_9v) ac_source.set_voltage(230) diff --git a/dvt_excel_migration/smps_dvt/phases/ripple_23v.py b/dvt_excel_migration/smps_dvt/phases/ripple_23v.py index c8a883d..7ac0e85 100644 --- a/dvt_excel_migration/smps_dvt/phases/ripple_23v.py +++ b/dvt_excel_migration/smps_dvt/phases/ripple_23v.py @@ -16,6 +16,5 @@ def ripple_23v(measurements, scope): measurements.ripple_23v_waveform.x_axis = times measurements.ripple_23v_waveform.y_axis.ripple = values # The same ceiling as the transcribed figure, checked against the trace. - measurements.ripple_23v_waveform.y_axis.ripple.aggregations.peak_to_peak = ( - max(values) - min(values) - ) + measurements.ripple_23v_waveform.y_axis.ripple.aggregations.peak_to_peak = max( + values) - min(values) diff --git a/dvt_excel_migration/smps_dvt/phases/ripple_9v.py b/dvt_excel_migration/smps_dvt/phases/ripple_9v.py index fed3d0a..8d4b477 100644 --- a/dvt_excel_migration/smps_dvt/phases/ripple_9v.py +++ b/dvt_excel_migration/smps_dvt/phases/ripple_9v.py @@ -16,6 +16,5 @@ def ripple_9v(measurements, scope): measurements.ripple_9v_waveform.x_axis = times measurements.ripple_9v_waveform.y_axis.ripple = values # The same ceiling as the transcribed figure, checked against the trace. - measurements.ripple_9v_waveform.y_axis.ripple.aggregations.peak_to_peak = ( - max(values) - min(values) - ) + measurements.ripple_9v_waveform.y_axis.ripple.aggregations.peak_to_peak = max( + values) - min(values) diff --git a/dvt_excel_migration/smps_dvt/plugs/scope.py b/dvt_excel_migration/smps_dvt/plugs/scope.py index 047fb00..75bdb82 100644 --- a/dvt_excel_migration/smps_dvt/plugs/scope.py +++ b/dvt_excel_migration/smps_dvt/plugs/scope.py @@ -133,7 +133,8 @@ def capture_waveform(self, channel: int): times, values = [], [] for index in range(points): moment = index * step - fundamental = amplitude * math.sin(2 * math.pi * ripple_hz * moment) + fundamental = amplitude * \ + math.sin(2 * math.pi * ripple_hz * moment) # Switching noise rides on the rectified ripple. noise = random.gauss(0, amplitude * 0.06) times.append(round(moment, 6)) diff --git a/dvt_excel_migration/xcu_import.py b/dvt_excel_migration/xcu_import.py index bbaa485..4afbd14 100644 --- a/dvt_excel_migration/xcu_import.py +++ b/dvt_excel_migration/xcu_import.py @@ -109,7 +109,8 @@ def is_plot(payload: bytes) -> bool: return width >= MIN_PLOT_WIDTH and height >= MIN_PLOT_HEIGHT -def extract_images(workbook_path: Path, out_dir: Path) -> dict[int, list[Path]]: +def extract_images(workbook_path: Path, + out_dir: Path) -> dict[int, list[Path]]: """Pull embedded PNGs out of the .xlsx and group them by anchor row. openpyxl drops images on load, so the drawing XML is read straight from the @@ -127,7 +128,8 @@ def extract_images(workbook_path: Path, out_dir: Path) -> dict[int, list[Path]]: for name in z.namelist(): if re.fullmatch(r"xl/drawings/_rels/drawing\d+\.xml\.rels", name): body = z.read(name).decode("utf8", "ignore") - rels[name] = re.findall(r'Id="([^"]+)"[^>]*?media/([^"]+)"', body) + rels[name] = re.findall( + r'Id="([^"]+)"[^>]*?media/([^"]+)"', body) for name in z.namelist(): if not re.fullmatch(r"xl/drawings/drawing\d+\.xml", name): @@ -190,7 +192,12 @@ def text(row: int, col: int) -> str: if not description: continue - limits = [sheet.cell(row=row, column=col).value for col in (10, 12)] # J, L + limits = [ + sheet.cell( + row=row, + column=col).value for col in ( + 10, + 12)] # J, L lower, upper = ( float(v) if isinstance(v, (int, float)) else None for v in limits ) @@ -242,7 +249,8 @@ def to_outcome(raw: str) -> str: return "UNSET" -def build_phases(readings: list[Reading], waveforms: Path | None) -> list[dict]: +def build_phases(readings: list[Reading], + waveforms: Path | None) -> list[dict]: phases: dict[str, dict] = {} for reading in readings: @@ -264,13 +272,16 @@ def build_phases(readings: list[Reading], waveforms: Path | None) -> list[dict]: validators = [] if reading.lower is not None: - validators.append({"operator": ">=", "expected_value": reading.lower}) + validators.append( + {"operator": ">=", "expected_value": reading.lower}) if reading.upper is not None: - validators.append({"operator": "<=", "expected_value": reading.upper}) + validators.append( + {"operator": "<=", "expected_value": reading.upper}) curve = None if waveforms: - candidate = waveforms / f"{reading.test_number}_{reading.sample}.csv" + candidate = waveforms / \ + f"{reading.test_number}_{reading.sample}.csv" if candidate.exists(): curve = load_waveform(candidate) @@ -284,7 +295,8 @@ def build_phases(readings: list[Reading], waveforms: Path | None) -> list[dict]: # A real curve carries its own axes, so it stays comparable across # samples and temperatures rather than being a picture of a result. times, amplitudes = curve - measurement["x_axis"] = {"name": "Time", "units": "s", "data": times} + measurement["x_axis"] = { + "name": "Time", "units": "s", "data": times} measurement["y_axis"] = [ { "name": reading.description, @@ -326,12 +338,12 @@ def main() -> None: curves = sum(1 for p in phases for m in p["measurements"] if "y_axis" in m) print( f"{len(readings)} readings across {len(phases)} phases " - f"({curves} as waveforms, {sum(len(v) for v in images.values())} plots)" - ) + f"({curves} as waveforms, {sum(len(v) for v in images.values())} plots)") if args.dry_run: for phase in phases: - print(f" {phase['name']}: {len(phase['measurements'])} measurements") + print( + f" {phase['name']}: {len(phase['measurements'])} measurements") return now = datetime.now(timezone.utc) @@ -341,7 +353,8 @@ def main() -> None: with TofuPilot(**client_options) as client: run = client.runs.create( - outcome="FAIL" if any(p["outcome"] == "FAIL" for p in phases) else "PASS", + outcome="FAIL" if any( + p["outcome"] == "FAIL" for p in phases) else "PASS", procedure_id=args.procedure_id, started_at=now, ended_at=now, diff --git a/touchpad_accuracy/touchpad_ptp/phases/center_linearity.py b/touchpad_accuracy/touchpad_ptp/phases/center_linearity.py index fe91bc1..cb0727f 100644 --- a/touchpad_accuracy/touchpad_ptp/phases/center_linearity.py +++ b/touchpad_accuracy/touchpad_ptp/phases/center_linearity.py @@ -10,9 +10,15 @@ # 2 mm grid across the central region, clear of the edge band. TARGETS = ( - (26, 16), (52, 16), (79, 16), - (26, 32), (52, 32), (79, 32), - (26, 49), (52, 49), (79, 49), + (26, 16), + (52, 16), + (79, 16), + (26, 32), + (52, 32), + (79, 32), + (26, 49), + (52, 49), + (79, 49), ) @@ -22,16 +28,20 @@ def center_linearity(measurements, robot, log): for n, (target_x, target_y) in enumerate(TARGETS, start=1): reported_x, reported_y = robot.press(target_x, target_y) - error = round(math.dist((target_x, target_y), (reported_x, reported_y)), 3) + error = round( + math.dist( + (target_x, target_y), (reported_x, reported_y)), 3) - log.info(f"({target_x},{target_y}) -> ({reported_x:.2f},{reported_y:.2f}) = {error} mm") + log.info( + f"({target_x},{target_y}) -> ({reported_x:.2f},{reported_y:.2f}) = {error} mm" + ) index.append(n) errors.append(error) measurements.center_positional_error.x_axis = index measurements.center_positional_error.y_axis.error = errors # The unit passes when every target is inside the limit, not on average. - measurements.center_positional_error.y_axis.error.aggregations.max = max(errors) + measurements.center_positional_error.y_axis.error.aggregations.max = max( + errors) measurements.center_positional_error.y_axis.error.aggregations.mean = round( - sum(errors) / len(errors), 3 - ) + sum(errors) / len(errors), 3) diff --git a/touchpad_accuracy/touchpad_ptp/phases/edge_band_linearity.py b/touchpad_accuracy/touchpad_ptp/phases/edge_band_linearity.py index fc3d5d6..c016726 100644 --- a/touchpad_accuracy/touchpad_ptp/phases/edge_band_linearity.py +++ b/touchpad_accuracy/touchpad_ptp/phases/edge_band_linearity.py @@ -9,9 +9,14 @@ # Targets inside the 3.5 mm border strip: four corners, four side midpoints. TARGETS = ( - (2, 2), (52, 2), (103, 2), - (2, 32), (103, 32), - (2, 63), (52, 63), (103, 63), + (2, 2), + (52, 2), + (103, 2), + (2, 32), + (103, 32), + (2, 63), + (52, 63), + (103, 63), ) @@ -21,15 +26,20 @@ def edge_band_linearity(measurements, robot, log): for n, (target_x, target_y) in enumerate(TARGETS, start=1): reported_x, reported_y = robot.press(target_x, target_y) - error = round(math.dist((target_x, target_y), (reported_x, reported_y)), 3) + error = round( + math.dist( + (target_x, target_y), (reported_x, reported_y)), 3) - log.info(f"({target_x},{target_y}) -> ({reported_x:.2f},{reported_y:.2f}) = {error} mm") + log.info( + f"({target_x},{target_y}) -> ({reported_x:.2f},{reported_y:.2f}) = {error} mm" + ) index.append(n) errors.append(error) measurements.edge_positional_error.x_axis = index measurements.edge_positional_error.y_axis.error = errors - measurements.edge_positional_error.y_axis.error.aggregations.max = max(errors) + measurements.edge_positional_error.y_axis.error.aggregations.max = max( + errors) measurements.edge_positional_error.y_axis.error.aggregations.mean = round( sum(errors) / len(errors), 3 ) diff --git a/touchpad_accuracy/touchpad_ptp/plugs/force_gauge.py b/touchpad_accuracy/touchpad_ptp/plugs/force_gauge.py index a24efbb..875dac7 100644 --- a/touchpad_accuracy/touchpad_ptp/plugs/force_gauge.py +++ b/touchpad_accuracy/touchpad_ptp/plugs/force_gauge.py @@ -1,13 +1,13 @@ """Inline load cell reading the force at which the dome switch actuates.""" # Load cell indicator on the bench LAN. +import random + GAUGE_RESOURCE = "TCPIP0::192.0.2.21::inst0::INSTR" # Ramp until the switch reports, or give up. RAMP_LIMIT_G = 120.0 -import random - class ForceGauge: def __init__(self): diff --git a/touchpad_accuracy/touchpad_ptp/plugs/touch_robot.py b/touchpad_accuracy/touchpad_ptp/plugs/touch_robot.py index 33ec4e4..9f86a3d 100644 --- a/touchpad_accuracy/touchpad_ptp/plugs/touch_robot.py +++ b/touchpad_accuracy/touchpad_ptp/plugs/touch_robot.py @@ -6,6 +6,8 @@ """ # Motion controller on the bench LAN. +import random + ROBOT_RESOURCE = "TCPIP0::192.0.2.20::inst0::INSTR" # Pad geometry, mm. The border strip where the spec relaxes its limit. @@ -15,8 +17,6 @@ # Probe force held constant across the grid so error stays comparable. PROBE_FORCE_G = 60.0 -import random - class TouchRobot: def __init__(self):