From d40a1d87c1a0a0c31ade0edce737a05d968f2f3d Mon Sep 17 00:00:00 2001 From: sbethur <48041236+sbethur@users.noreply.github.com> Date: Fri, 13 Mar 2020 22:42:47 -0500 Subject: [PATCH 1/5] Improve usability of get_site_pass_fail by returning dict - site: pass_fail --- docs/nidigital/class.rst | 6 ++- generated/nidigital/nidigital/session.py | 26 +++++++++++- src/nidigital/metadata/functions.py | 1 + src/nidigital/metadata/functions_addon.py | 42 +++++++++++++++++++ .../system_tests/test_system_nidigital.py | 2 +- .../fancy_get_site_pass_fail.py.mako | 18 ++++++++ 6 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 src/nidigital/templates/session.py/fancy_get_site_pass_fail.py.mako diff --git a/docs/nidigital/class.rst b/docs/nidigital/class.rst index 2a79900f5..f1dd76434 100644 --- a/docs/nidigital/class.rst +++ b/docs/nidigital/class.rst @@ -1469,7 +1469,7 @@ get_site_pass_fail .. py:method:: get_site_pass_fail(site_list) - TBD + Returns dictionary where each key is the site number and the value is the pass or fail result @@ -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 the site number and the value is the pass or fail result + diff --git a/generated/nidigital/nidigital/session.py b/generated/nidigital/nidigital/session.py index fbe9c4c0b..23061c691 100644 --- a/generated/nidigital/nidigital/session.py +++ b/generated/nidigital/nidigital/session.py @@ -2415,6 +2415,28 @@ 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 the site number and the value is the pass or fail result + + Args: + site_list (str): + + + Returns: + pass_fail ({ int: bool, int: bool, ... }): Dictionary where each key is the site number and the value is the pass or fail result + + ''' + 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) + + pass_fail = dict(zip(site_list, result_list)) + return pass_fail + @ivi_synchronized def self_test(self): '''self_test @@ -2644,8 +2666,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 diff --git a/src/nidigital/metadata/functions.py b/src/nidigital/metadata/functions.py index d2ee91a0a..e7ceba906 100644 --- a/src/nidigital/metadata/functions.py +++ b/src/nidigital/metadata/functions.py @@ -1658,6 +1658,7 @@ 'returns': 'ViStatus' }, 'GetSitePassFail': { + 'codegen_method': 'private', 'documentation': { 'description': 'TBD' }, diff --git a/src/nidigital/metadata/functions_addon.py b/src/nidigital/metadata/functions_addon.py index 40b702a5c..461eb7c34 100644 --- a/src/nidigital/metadata/functions_addon.py +++ b/src/nidigital/metadata/functions_addon.py @@ -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 the site number and the value is the pass or fail result\n\n', + }, + 'parameters': [ + { + 'direction': 'in', + 'name': 'vi', + 'type': 'ViSession' + }, + { + 'direction': 'in', + 'name': 'siteList', + 'type': 'ViConstString' + }, + { + 'direction': 'out', + 'documentation': { + 'description': '\nDictionary where each key is the site number and the value is the pass or fail result\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', diff --git a/src/nidigital/system_tests/test_system_nidigital.py b/src/nidigital/system_tests/test_system_nidigital.py index 36d5f790f..44fd8b900 100644 --- a/src/nidigital/system_tests/test_system_nidigital.py +++ b/src/nidigital/system_tests/test_system_nidigital.py @@ -110,7 +110,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): diff --git a/src/nidigital/templates/session.py/fancy_get_site_pass_fail.py.mako b/src/nidigital/templates/session.py/fancy_get_site_pass_fail.py.mako new file mode 100644 index 000000000..4792969bf --- /dev/null +++ b/src/nidigital/templates/session.py/fancy_get_site_pass_fail.py.mako @@ -0,0 +1,18 @@ +<%page args="f, config, method_template"/>\ +<% + '''Forwards to _fetch()/_read() with a nicer interface''' + 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) + + pass_fail = dict(zip(site_list, result_list)) + return pass_fail + From 11b99dd08cb935f604424158a97ff6395aa9b314 Mon Sep 17 00:00:00 2001 From: sbethur <48041236+sbethur@users.noreply.github.com> Date: Fri, 13 Mar 2020 22:46:30 -0500 Subject: [PATCH 2/5] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 284cfe1bc..46c03f3fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,7 @@ All notable changes to this project will be documented in this file. * #### Added * `get_pattern_pin_names` - [#1292](https://github.com/ni/nimi-python/issues/1292) * #### Changed + * `get_site_pass_fail` returns `dict` of `site`: `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 From 5903d41de0371a78a894790c1a628a9f17a4d16e Mon Sep 17 00:00:00 2001 From: sbethur <48041236+sbethur@users.noreply.github.com> Date: Wed, 18 Mar 2020 15:43:55 -0500 Subject: [PATCH 3/5] Addressed feedback --- CHANGELOG.md | 2 +- docs/nidigital/class.rst | 4 +- generated/nidigital/nidigital/session.py | 8 +- src/nidigital/metadata/functions_addon.py | 4 +- .../test_files/simple_pattern/pattern.digipat | Bin 4582 -> 4474 bytes .../test_files/simple_pattern/pin_map.pinmap | 182 ++++++++---------- .../system_tests/test_system_nidigital.py | 20 +- .../fancy_get_site_pass_fail.py.mako | 7 +- 8 files changed, 110 insertions(+), 117 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 189e6a50e..7032be464 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,7 +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 `dict` of `site`: `pass_fail` - [#1297](https://github.com/ni/nimi-python/issues/1297) + * `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 diff --git a/docs/nidigital/class.rst b/docs/nidigital/class.rst index dae5f8354..f451b842c 100644 --- a/docs/nidigital/class.rst +++ b/docs/nidigital/class.rst @@ -1469,7 +1469,7 @@ get_site_pass_fail .. py:method:: get_site_pass_fail(site_list) - Returns dictionary where each key is the site number and the value is the pass or fail result + Returns dictionary where each key is a site number and value is pass/fail @@ -1487,7 +1487,7 @@ get_site_pass_fail :return: - Dictionary where each key is the site number and the value is the pass or fail result + Dictionary where each key is a site number and value is pass/fail diff --git a/generated/nidigital/nidigital/session.py b/generated/nidigital/nidigital/session.py index 7a22485f7..c5d772bbc 100644 --- a/generated/nidigital/nidigital/session.py +++ b/generated/nidigital/nidigital/session.py @@ -2441,23 +2441,21 @@ def fetch_capture_waveform(self, site_list, waveform_name, samples_to_read, time def get_site_pass_fail(self, site_list): '''get_site_pass_fail - Returns dictionary where each key is the site number and the value is the pass or fail result + 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 the site number and the value is the pass or fail result + 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) - pass_fail = dict(zip(site_list, result_list)) - return pass_fail + return dict(zip(site_list, result_list)) @ivi_synchronized def self_test(self): diff --git a/src/nidigital/metadata/functions_addon.py b/src/nidigital/metadata/functions_addon.py index 461eb7c34..9d3b71795 100644 --- a/src/nidigital/metadata/functions_addon.py +++ b/src/nidigital/metadata/functions_addon.py @@ -96,7 +96,7 @@ } ], 'documentation': { - 'description': '\nReturns dictionary where each key is the site number and the value is the pass or fail result\n\n', + 'description': '\nReturns dictionary where each key is a site number and value is pass/fail\n\n', }, 'parameters': [ { @@ -112,7 +112,7 @@ { 'direction': 'out', 'documentation': { - 'description': '\nDictionary where each key is the site number and the value is the pass or fail result\n' + 'description': '\nDictionary where each key is a site number and value is pass/fail\n' }, 'name': 'passFail', 'size': { diff --git a/src/nidigital/system_tests/test_files/simple_pattern/pattern.digipat b/src/nidigital/system_tests/test_files/simple_pattern/pattern.digipat index caadb166d93472270100808dbf537f170e0e5318..f2221cd4199539dceb31bc7fa628ae27bd2ab86f 100644 GIT binary patch delta 123 zcmaE+{7Y%W3J%7S$tyX`IXM_0z+&=C4sBH*e*+(XLmz)5AAe&HPXiB6Lk~|Q4^QI| zm*8AJpu$Wc28OuFg`AFz9Fq@nN>9GWDX{q;=R`I}&&d-6EM!EWhJh#n0cU4qJo$&f FI{>1y9lihn delta 207 zcmeyR^h|lf3J%6Klh5!=O@75D%PGJB0R@v^a%jg&137X)tO&#^K&%eLT0pD|#0Eg@ z<8R>OZ|LK1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/nidigital/system_tests/test_system_nidigital.py b/src/nidigital/system_tests/test_system_nidigital.py index 5d9807b91..647566a17 100644 --- a/src/nidigital/system_tests/test_system_nidigital.py +++ b/src/nidigital/system_tests/test_system_nidigital.py @@ -471,4 +471,22 @@ 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='site3,site0') + assert pass_fail == {3: True, 0: True} + diff --git a/src/nidigital/templates/session.py/fancy_get_site_pass_fail.py.mako b/src/nidigital/templates/session.py/fancy_get_site_pass_fail.py.mako index 4792969bf..56d02a758 100644 --- a/src/nidigital/templates/session.py/fancy_get_site_pass_fail.py.mako +++ b/src/nidigital/templates/session.py/fancy_get_site_pass_fail.py.mako @@ -1,6 +1,7 @@ <%page args="f, config, method_template"/>\ <% - '''Forwards to _fetch()/_read() with a nicer interface''' + '''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)}): @@ -9,10 +10,8 @@ ${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) - pass_fail = dict(zip(site_list, result_list)) - return pass_fail + return dict(zip(site_list, result_list)) From 71be8d4812256f8dbe4ac0e793b2dca28f7ec3b6 Mon Sep 17 00:00:00 2001 From: sbethur <48041236+sbethur@users.noreply.github.com> Date: Wed, 18 Mar 2020 15:51:58 -0500 Subject: [PATCH 4/5] Add "All sites" case to test_get_site_pass_fail --- src/nidigital/system_tests/test_system_nidigital.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/nidigital/system_tests/test_system_nidigital.py b/src/nidigital/system_tests/test_system_nidigital.py index 647566a17..00e846d0a 100644 --- a/src/nidigital/system_tests/test_system_nidigital.py +++ b/src/nidigital/system_tests/test_system_nidigital.py @@ -487,6 +487,9 @@ def test_get_site_pass_fail(multi_instrument_session): 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} From be54ae8d8f53d5758b4d384a2c9c4bfca823693a Mon Sep 17 00:00:00 2001 From: sbethur <48041236+sbethur@users.noreply.github.com> Date: Wed, 18 Mar 2020 16:28:55 -0500 Subject: [PATCH 5/5] Add whitespace within dict literal, as required by flake8 --- src/nidigital/system_tests/test_system_nidigital.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nidigital/system_tests/test_system_nidigital.py b/src/nidigital/system_tests/test_system_nidigital.py index 00e846d0a..164be21a9 100644 --- a/src/nidigital/system_tests/test_system_nidigital.py +++ b/src/nidigital/system_tests/test_system_nidigital.py @@ -488,7 +488,7 @@ def test_get_site_pass_fail(multi_instrument_session): timeout=5) pass_fail = multi_instrument_session.get_site_pass_fail(site_list='') - assert pass_fail == {0: True, 1: True, 2:True, 3:True} + 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}