Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ All notable changes to this project will be documented in this file.
* `get_pattern_pin_names` - [#1292](https://github.com/ni/nimi-python/issues/1292)
* #### Changed
* Change the type of applicable method parameters and properties to enums - [#1066](https://github.com/ni/nimi-python/issues/1066)
* `get_site_pass_fail` returns dictionary where each key is a site number and value is a bool indicating pass/fail - [#1297](https://github.com/ni/nimi-python/issues/1297)
* #### Removed
* `get_pattern_pin_list`, `get_pattern_pin_indexes` and `get_pin_name` - [#1292](https://github.com/ni/nimi-python/issues/1292)
* ### NI-TClk
Expand Down
6 changes: 4 additions & 2 deletions docs/nidigital/class.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1469,7 +1469,7 @@ get_site_pass_fail

.. py:method:: get_site_pass_fail(site_list)

TBD
Returns dictionary where each key is a site number and value is pass/fail



Expand All @@ -1483,10 +1483,12 @@ get_site_pass_fail

:type site_list: str

:rtype: list of bool
:rtype: { int: bool, int: bool, ... }
:return:


Dictionary where each key is a site number and value is pass/fail




Expand Down
24 changes: 22 additions & 2 deletions generated/nidigital/nidigital/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -2437,6 +2437,26 @@ def fetch_capture_waveform(self, site_list, waveform_name, samples_to_read, time

return waveforms

@ivi_synchronized
def get_site_pass_fail(self, site_list):
'''get_site_pass_fail

Returns dictionary where each key is a site number and value is pass/fail

Args:
site_list (str):


Returns:
pass_fail ({ int: bool, int: bool, ... }): Dictionary where each key is a site number and value is pass/fail

'''
result_list = self._get_site_pass_fail(site_list)
site_list = self.get_site_results_site_numbers(site_list, enums.SiteResult.PASS_FAIL)
assert len(site_list) == len(result_list)

return dict(zip(site_list, result_list))

@ivi_synchronized
def self_test(self):
'''self_test
Expand Down Expand Up @@ -2666,8 +2686,8 @@ def get_pattern_pin_names(self, start_label):
return _converters.convert_comma_separated_string_to_list(pin_list_ctype.value.decode(self._encoding))

@ivi_synchronized
def get_site_pass_fail(self, site_list):
r'''get_site_pass_fail
def _get_site_pass_fail(self, site_list):
r'''_get_site_pass_fail

TBD

Expand Down
1 change: 1 addition & 0 deletions src/nidigital/metadata/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -1666,6 +1666,7 @@
'returns': 'ViStatus'
},
'GetSitePassFail': {
'codegen_method': 'private',
'documentation': {
'description': 'TBD'
},
Expand Down
42 changes: 42 additions & 0 deletions src/nidigital/metadata/functions_addon.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,48 @@
},
}

functions_additional_get_site_pass_fail = {
'FancyGetSitePassFail': {
'python_name': 'get_site_pass_fail',
'codegen_method': 'python-only',
'method_templates': [
{
'documentation_filename': 'default_method',
'method_python_name_suffix': '',
'session_filename': 'fancy_get_site_pass_fail',
}
],
'documentation': {
'description': '\nReturns dictionary where each key is a site number and value is pass/fail\n\n',
},
'parameters': [
{
'direction': 'in',
'name': 'vi',
'type': 'ViSession'
},
{
'direction': 'in',
'name': 'siteList',
'type': 'ViConstString'
},
{
'direction': 'out',
'documentation': {
'description': '\nDictionary where each key is a site number and value is pass/fail\n'
},
'name': 'passFail',
'size': {
'mechanism': 'python-code',
'value': None
},
'type': 'ViBoolean',
'type_in_documentation': '{ int: bool, int: bool, ... }',
},
],
},
}

functions_additional_fetch_capture_waveform = {
'FancyFetchCaptureWaveform': {
'python_name': 'fetch_capture_waveform',
Expand Down
Binary file not shown.
182 changes: 80 additions & 102 deletions src/nidigital/system_tests/test_files/simple_pattern/pin_map.pinmap
Original file line number Diff line number Diff line change
@@ -1,103 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<PinMap xmlns="http://www.ni.com/TestStand/SemiconductorModule/PinMap.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="1.5">
<Instruments>
<NIDigitalPatternInstrument name="PXI1Slot2" numberOfChannels="32" group="Digital" />
<NIDigitalPatternInstrument name="PXI1Slot5" numberOfChannels="32" group="Digital" />
</Instruments>
<Pins>
<DUTPin name="LO0" />
<DUTPin name="LO1" />
<DUTPin name="LO2" />
<DUTPin name="LO3" />
<DUTPin name="LO4" />
<DUTPin name="LO5" />
<DUTPin name="LO6" />
<DUTPin name="LO7" />
<DUTPin name="HI0" />
<DUTPin name="HI1" />
<DUTPin name="HI2" />
<DUTPin name="HI3" />
<DUTPin name="HI4" />
<DUTPin name="HI5" />
<DUTPin name="HI6" />
<DUTPin name="HI7" />
</Pins>
<PinGroups>
<PinGroup name="AllPins">
<PinReference pin="LO0" />
<PinReference pin="LO1" />
<PinReference pin="LO2" />
<PinReference pin="LO3" />
<PinReference pin="LO4" />
<PinReference pin="LO5" />
<PinReference pin="LO6" />
<PinReference pin="LO7" />
<PinReference pin="HI0" />
<PinReference pin="HI1" />
<PinReference pin="HI2" />
<PinReference pin="HI3" />
<PinReference pin="HI4" />
<PinReference pin="HI5" />
<PinReference pin="HI6" />
<PinReference pin="HI7" />
</PinGroup>
<PinGroup name="LowPins">
<PinReference pin="LO0" />
<PinReference pin="LO1" />
<PinReference pin="LO2" />
<PinReference pin="LO3" />
<PinReference pin="LO4" />
<PinReference pin="LO5" />
<PinReference pin="LO6" />
<PinReference pin="LO7" />
</PinGroup>
<PinGroup name="HighPins">
<PinReference pin="HI0" />
<PinReference pin="HI1" />
<PinReference pin="HI2" />
<PinReference pin="HI3" />
<PinReference pin="HI4" />
<PinReference pin="HI5" />
<PinReference pin="HI6" />
<PinReference pin="HI7" />
</PinGroup>
</PinGroups>
<Sites>
<Site siteNumber="0" />
<Site siteNumber="1" />
</Sites>
<Connections>
<Connection pin="HI0" siteNumber="0" instrument="PXI1Slot2" channel="0" />
<Connection pin="HI0" siteNumber="1" instrument="PXI1Slot2" channel="1" />
<Connection pin="HI1" siteNumber="0" instrument="PXI1Slot2" channel="2" />
<Connection pin="HI1" siteNumber="1" instrument="PXI1Slot2" channel="3" />
<Connection pin="HI2" siteNumber="0" instrument="PXI1Slot2" channel="4" />
<Connection pin="HI2" siteNumber="1" instrument="PXI1Slot2" channel="5" />
<Connection pin="HI3" siteNumber="0" instrument="PXI1Slot2" channel="6" />
<Connection pin="HI3" siteNumber="1" instrument="PXI1Slot2" channel="7" />
<Connection pin="HI4" siteNumber="0" instrument="PXI1Slot2" channel="8" />
<Connection pin="HI4" siteNumber="1" instrument="PXI1Slot2" channel="9" />
<Connection pin="HI5" siteNumber="0" instrument="PXI1Slot2" channel="10" />
<Connection pin="HI5" siteNumber="1" instrument="PXI1Slot2" channel="11" />
<Connection pin="HI6" siteNumber="0" instrument="PXI1Slot2" channel="12" />
<Connection pin="HI6" siteNumber="1" instrument="PXI1Slot2" channel="13" />
<Connection pin="HI7" siteNumber="0" instrument="PXI1Slot2" channel="14" />
<Connection pin="HI7" siteNumber="1" instrument="PXI1Slot2" channel="15" />
<Connection pin="LO0" siteNumber="0" instrument="PXI1Slot5" channel="16" />
<Connection pin="LO0" siteNumber="1" instrument="PXI1Slot5" channel="17" />
<Connection pin="LO1" siteNumber="0" instrument="PXI1Slot5" channel="18" />
<Connection pin="LO1" siteNumber="1" instrument="PXI1Slot5" channel="19" />
<Connection pin="LO2" siteNumber="0" instrument="PXI1Slot5" channel="20" />
<Connection pin="LO2" siteNumber="1" instrument="PXI1Slot5" channel="21" />
<Connection pin="LO3" siteNumber="0" instrument="PXI1Slot5" channel="22" />
<Connection pin="LO3" siteNumber="1" instrument="PXI1Slot5" channel="23" />
<Connection pin="LO4" siteNumber="0" instrument="PXI1Slot5" channel="24" />
<Connection pin="LO4" siteNumber="1" instrument="PXI1Slot5" channel="25" />
<Connection pin="LO5" siteNumber="0" instrument="PXI1Slot5" channel="26" />
<Connection pin="LO5" siteNumber="1" instrument="PXI1Slot5" channel="27" />
<Connection pin="LO6" siteNumber="0" instrument="PXI1Slot5" channel="28" />
<Connection pin="LO6" siteNumber="1" instrument="PXI1Slot5" channel="29" />
<Connection pin="LO7" siteNumber="0" instrument="PXI1Slot5" channel="30" />
<Connection pin="LO7" siteNumber="1" instrument="PXI1Slot5" channel="31" />
</Connections>
<?xml version="1.0" encoding="utf-8"?>
<PinMap xmlns="http://www.ni.com/TestStand/SemiconductorModule/PinMap.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="1.5">
<Instruments>
<NIDigitalPatternInstrument name="PXI1Slot2" numberOfChannels="32" group="Digital" />
<NIDigitalPatternInstrument name="PXI1Slot5" numberOfChannels="32" group="Digital" />
</Instruments>
<Pins>
<DUTPin name="LO0" />
<DUTPin name="LO1" />
<DUTPin name="LO2" />
<DUTPin name="LO3" />
<DUTPin name="HI0" />
<DUTPin name="HI1" />
<DUTPin name="HI2" />
<DUTPin name="HI3" />
</Pins>
<PinGroups>
<PinGroup name="AllPins">
<PinReference pin="LO0" />
<PinReference pin="LO1" />
<PinReference pin="LO2" />
<PinReference pin="LO3" />
<PinReference pin="HI0" />
<PinReference pin="HI1" />
<PinReference pin="HI2" />
<PinReference pin="HI3" />
</PinGroup>
<PinGroup name="LowPins">
<PinReference pin="LO0" />
<PinReference pin="LO1" />
<PinReference pin="LO2" />
<PinReference pin="LO3" />
</PinGroup>
<PinGroup name="HighPins">
<PinReference pin="HI0" />
<PinReference pin="HI1" />
<PinReference pin="HI2" />
<PinReference pin="HI3" />
</PinGroup>
</PinGroups>
<Sites>
<Site siteNumber="0" />
<Site siteNumber="1" />
<Site siteNumber="2" />
<Site siteNumber="3" />
</Sites>
<Connections>
<Connection pin="HI0" siteNumber="0" instrument="PXI1Slot2" channel="0" />
<Connection pin="HI0" siteNumber="1" instrument="PXI1Slot2" channel="1" />
<Connection pin="HI0" siteNumber="2" instrument="PXI1Slot2" channel="2" />
<Connection pin="HI0" siteNumber="3" instrument="PXI1Slot2" channel="3" />
<Connection pin="HI1" siteNumber="0" instrument="PXI1Slot2" channel="4" />
<Connection pin="HI1" siteNumber="1" instrument="PXI1Slot2" channel="5" />
<Connection pin="HI1" siteNumber="2" instrument="PXI1Slot2" channel="6" />
<Connection pin="HI1" siteNumber="3" instrument="PXI1Slot2" channel="7" />
<Connection pin="HI2" siteNumber="0" instrument="PXI1Slot2" channel="8" />
<Connection pin="HI2" siteNumber="1" instrument="PXI1Slot2" channel="9" />
<Connection pin="HI2" siteNumber="2" instrument="PXI1Slot2" channel="10" />
<Connection pin="HI2" siteNumber="3" instrument="PXI1Slot2" channel="11" />
<Connection pin="HI3" siteNumber="0" instrument="PXI1Slot2" channel="12" />
<Connection pin="HI3" siteNumber="1" instrument="PXI1Slot2" channel="13" />
<Connection pin="HI3" siteNumber="3" instrument="PXI1Slot2" channel="15" />
<Connection pin="HI3" siteNumber="2" instrument="PXI1Slot2" channel="14" />
<Connection pin="LO0" siteNumber="0" instrument="PXI1Slot5" channel="16" />
<Connection pin="LO0" siteNumber="1" instrument="PXI1Slot5" channel="17" />
<Connection pin="LO0" siteNumber="2" instrument="PXI1Slot5" channel="18" />
<Connection pin="LO0" siteNumber="3" instrument="PXI1Slot5" channel="19" />
<Connection pin="LO1" siteNumber="0" instrument="PXI1Slot5" channel="20" />
<Connection pin="LO1" siteNumber="1" instrument="PXI1Slot5" channel="21" />
<Connection pin="LO1" siteNumber="2" instrument="PXI1Slot5" channel="22" />
<Connection pin="LO1" siteNumber="3" instrument="PXI1Slot5" channel="23" />
<Connection pin="LO2" siteNumber="0" instrument="PXI1Slot5" channel="24" />
<Connection pin="LO2" siteNumber="1" instrument="PXI1Slot5" channel="25" />
<Connection pin="LO2" siteNumber="2" instrument="PXI1Slot5" channel="26" />
<Connection pin="LO2" siteNumber="3" instrument="PXI1Slot5" channel="27" />
<Connection pin="LO3" siteNumber="0" instrument="PXI1Slot5" channel="28" />
<Connection pin="LO3" siteNumber="1" instrument="PXI1Slot5" channel="29" />
<Connection pin="LO3" siteNumber="2" instrument="PXI1Slot5" channel="30" />
<Connection pin="LO3" siteNumber="3" instrument="PXI1Slot5" channel="31" />
</Connections>
</PinMap>
25 changes: 23 additions & 2 deletions src/nidigital/system_tests/test_system_nidigital.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def test_source_waveform_parallel_broadcast(multi_instrument_session):
timeout=5)

pass_fail = multi_instrument_session.get_site_pass_fail(site_list='')
assert pass_fail == [True, True]
assert pass_fail == {0: True, 1: True}


def configure_session(session, test_name):
Expand Down Expand Up @@ -471,4 +471,25 @@ def test_get_pattern_pin_names(multi_instrument_session):

pattern_pin_names = multi_instrument_session.get_pattern_pin_names(start_label='new_pattern')

assert pattern_pin_names == ['LO' + str(i) for i in range(8)] + ['HI' + str(i) for i in range(8)]
assert pattern_pin_names == ['LO' + str(i) for i in range(4)] + ['HI' + str(i) for i in range(4)]


def test_get_site_pass_fail(multi_instrument_session):
test_files_folder = 'simple_pattern'
configure_session(multi_instrument_session, test_files_folder)

multi_instrument_session.load_pattern(get_test_file_path(test_files_folder, 'pattern.digipat'))

multi_instrument_session.burst_pattern(
site_list='',
start_label='new_pattern',
select_digital_function=True,
wait_until_done=True,
timeout=5)

pass_fail = multi_instrument_session.get_site_pass_fail(site_list='')
assert pass_fail == {0: True, 1: True, 2: True, 3: True}

pass_fail = multi_instrument_session.get_site_pass_fail(site_list='site3,site0')
assert pass_fail == {3: True, 0: True}

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<%page args="f, config, method_template"/>\
<%
'''Gets pass/fail results and site numbers corresponding to them, then returns
dictionary where each key is a site number and value is a bool indicating pass/fail'''
import build.helper as helper
%>\
def ${f['python_name']}(${helper.get_params_snippet(f, helper.ParameterUsageOptions.SESSION_METHOD_DECLARATION)}):
'''${f['python_name']}

${helper.get_function_docstring(f, False, config, indent=8)}
'''
result_list = self._get_site_pass_fail(site_list)
site_list = self.get_site_results_site_numbers(site_list, enums.SiteResult.PASS_FAIL)
assert len(site_list) == len(result_list)

return dict(zip(site_list, result_list))