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 build/templates/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
5 changes: 4 additions & 1 deletion build/templates/enums.py.mako
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ config = template_parameters['metadata'].config
enums = config['enums']
%>
from enum import Enum
% if any(enums[e].get('enum_class', 'Enum') == 'IntFlag' for e in enums):
from enum import IntFlag
% endif
% for enum_name in sorted(helper.filter_codegen_enums(enums)):


class ${enums[enum_name]['python_name']}(Enum):
class ${enums[enum_name]['python_name']}(${enums[enum_name].get('enum_class', 'Enum')}):
<%
print_list = []
%>\
Expand Down
1 change: 1 addition & 0 deletions generated/nidcpower/nidcpower/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nidigital/nidigital/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nidmm/nidmm/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
6 changes: 6 additions & 0 deletions generated/nifake/nifake/_grpc_stub_interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,12 @@ def fetch_waveform(self, number_of_samples): # noqa: N802
def fetch_waveform_into(self, number_of_samples): # noqa: N802
raise NotImplementedError('numpy-specific methods are not supported over gRPC')

def function_with_intflag_parameter(self, flag): # noqa: N802
self._invoke(
self._client.FunctionWithIntflagParameter,
grpc_types.FunctionWithIntflagParameterRequest(vi=self._vi, flag=flag.value),
)

def function_with_repeated_capability_type(self, site_list): # noqa: N802
raise NotImplementedError('function_with_repeated_capability_type is not supported over gRPC')

Expand Down
9 changes: 9 additions & 0 deletions generated/nifake/nifake/_library.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def __init__(self, ctypes_library):
self.niFake_EnumInputFunctionWithDefaults_cfunc = None
self.niFake_ExportAttributeConfigurationBuffer_cfunc = None
self.niFake_FetchWaveform_cfunc = None
self.niFake_FunctionWithIntflagParameter_cfunc = None
self.niFake_FunctionWithRepeatedCapabilityType_cfunc = None
self.niFake_GetABoolean_cfunc = None
self.niFake_GetANumber_cfunc = None
Expand Down Expand Up @@ -187,6 +188,14 @@ def niFake_FetchWaveform(self, vi, number_of_samples, waveform_data, actual_numb
self.niFake_FetchWaveform_cfunc.restype = ViStatus # noqa: F405
return self.niFake_FetchWaveform_cfunc(vi, number_of_samples, waveform_data, actual_number_of_samples)

def niFake_FunctionWithIntflagParameter(self, vi, flag): # noqa: N802
with self._func_lock:
if self.niFake_FunctionWithIntflagParameter_cfunc is None:
self.niFake_FunctionWithIntflagParameter_cfunc = self._get_library_function('niFake_FunctionWithIntflagParameter')
self.niFake_FunctionWithIntflagParameter_cfunc.argtypes = [ViSession, ViUInt64] # noqa: F405
self.niFake_FunctionWithIntflagParameter_cfunc.restype = ViStatus # noqa: F405
return self.niFake_FunctionWithIntflagParameter_cfunc(vi, flag)

def niFake_FunctionWithRepeatedCapabilityType(self, vi, site_list): # noqa: N802
with self._func_lock:
if self.niFake_FunctionWithRepeatedCapabilityType_cfunc is None:
Expand Down
7 changes: 7 additions & 0 deletions generated/nifake/nifake/_library_interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,13 @@ def fetch_waveform_into(self, waveform_data): # noqa: N802
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return

def function_with_intflag_parameter(self, flag): # noqa: N802
vi_ctype = _visatype.ViSession(self._vi) # case S110
flag_ctype = _visatype.ViUInt64(flag.value) # case S130
error_code = self._library.niFake_FunctionWithIntflagParameter(vi_ctype, flag_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return

def function_with_repeated_capability_type(self, site_list): # noqa: N802
vi_ctype = _visatype.ViSession(self._vi) # case S110
site_list_ctype = ctypes.create_string_buffer(site_list.encode(self._encoding)) # case C010
Expand Down
1 change: 1 addition & 0 deletions generated/nifake/nifake/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
16 changes: 16 additions & 0 deletions generated/nifake/nifake/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# This file was generated

from enum import Enum
from enum import IntFlag


class Color(Enum):
Expand Down Expand Up @@ -53,6 +54,21 @@ class FloatEnum(Enum):
'''


class IntFlagEnum(IntFlag):
A = 1
r'''
Flag A option.
'''
B = 2
r'''
Flag B option.
'''
C = 9223372036854775808
r'''
Flag C option.
'''


class MobileOSNames(Enum):
ANDROID = 'Android'
r'''
Expand Down
14 changes: 14 additions & 0 deletions generated/nifake/nifake/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -945,6 +945,20 @@ def fetch_waveform_into(self, waveform_data):
raise TypeError('waveform_data must be numpy.ndarray of dtype=float64, is ' + str(waveform_data.dtype))
self._interpreter.fetch_waveform_into(waveform_data)

@ivi_synchronized
def function_with_intflag_parameter(self, flag):
r'''function_with_intflag_parameter

Calls a method that takes a flag parameter which can be OR'd from multiple enum values.

Args:
flag (enums.IntFlagEnum): A flag parameter that can be a combination (bitwise OR) of IntFlagEnum values.

'''
if type(flag) is not enums.IntFlagEnum:
raise TypeError('Parameter flag must be of type ' + str(enums.IntFlagEnum))
self._interpreter.function_with_intflag_parameter(flag)

@ivi_synchronized
def get_a_boolean(self):
r'''get_a_boolean
Expand Down
9 changes: 9 additions & 0 deletions generated/nifake/nifake/unit_tests/_mock_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ def __init__(self):
self._defaults['FetchWaveform']['return'] = 0
self._defaults['FetchWaveform']['waveformData'] = None
self._defaults['FetchWaveform']['actualNumberOfSamples'] = None
self._defaults['FunctionWithIntflagParameter'] = {}
self._defaults['FunctionWithIntflagParameter']['return'] = 0
self._defaults['FunctionWithRepeatedCapabilityType'] = {}
self._defaults['FunctionWithRepeatedCapabilityType']['return'] = 0
self._defaults['GetABoolean'] = {}
Expand Down Expand Up @@ -337,6 +339,11 @@ def niFake_FetchWaveform(self, vi, number_of_samples, waveform_data, actual_numb
actual_number_of_samples.contents.value = self._defaults['FetchWaveform']['actualNumberOfSamples']
return self._defaults['FetchWaveform']['return']

def niFake_FunctionWithIntflagParameter(self, vi, flag): # noqa: N802
if self._defaults['FunctionWithIntflagParameter']['return'] != 0:
return self._defaults['FunctionWithIntflagParameter']['return']
return self._defaults['FunctionWithIntflagParameter']['return']

def niFake_FunctionWithRepeatedCapabilityType(self, vi, site_list): # noqa: N802
if self._defaults['FunctionWithRepeatedCapabilityType']['return'] != 0:
return self._defaults['FunctionWithRepeatedCapabilityType']['return']
Expand Down Expand Up @@ -1036,6 +1043,8 @@ def set_side_effects_and_return_values(self, mock_library):
mock_library.niFake_ExportAttributeConfigurationBuffer.return_value = 0
mock_library.niFake_FetchWaveform.side_effect = MockFunctionCallError("niFake_FetchWaveform")
mock_library.niFake_FetchWaveform.return_value = 0
mock_library.niFake_FunctionWithIntflagParameter.side_effect = MockFunctionCallError("niFake_FunctionWithIntflagParameter")
mock_library.niFake_FunctionWithIntflagParameter.return_value = 0
mock_library.niFake_FunctionWithRepeatedCapabilityType.side_effect = MockFunctionCallError("niFake_FunctionWithRepeatedCapabilityType")
mock_library.niFake_FunctionWithRepeatedCapabilityType.return_value = 0
mock_library.niFake_GetABoolean.side_effect = MockFunctionCallError("niFake_GetABoolean")
Expand Down
21 changes: 18 additions & 3 deletions generated/nifake/nifake/unit_tests/test_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import nifake
import nifake.errors
import numpy
import pytest

from unittest.mock import MagicMock
from unittest.mock import patch
Expand Down Expand Up @@ -837,10 +838,26 @@ def test_return_timedeltas(self):
assert returned_timedeltas == expected_timedeltas
self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values))

def test_with_valid_intflag_parameter(self):
flags = nifake.IntFlagEnum.C | nifake.IntFlagEnum.A
self.patched_library_interpreter.function_with_intflag_parameter.side_effect = None
self.patched_library_interpreter.function_with_intflag_parameter.return_value = None
with nifake.Session('dev1') as session:
session.function_with_intflag_parameter(flags)
self.patched_library_interpreter.function_with_intflag_parameter.assert_called_once_with(9223372036854775809)

def test_with_intflag_parameter_invalid(self):
invalid_flag = 5
with nifake.Session('dev1') as session:
try:
session.function_with_intflag_parameter(invalid_flag)
assert False
except TypeError:
pass

def test_session_write_waveform_numpy_complex64_invalid_dtype(self):
invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128)
expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex64, is complex128"
import pytest
with nifake.Session('dev1') as session:
with pytest.raises(TypeError) as exc_info:
session.write_waveform_numpy_complex64(invalid_waveform_data)
Expand All @@ -849,7 +866,6 @@ def test_session_write_waveform_numpy_complex64_invalid_dtype(self):
def test_session_write_waveform_numpy_complex128_invalid_dtype(self):
invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex64)
expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex128, is complex64"
import pytest
with nifake.Session('dev1') as session:
with pytest.raises(TypeError) as exc_info:
session.write_waveform_numpy_complex128(invalid_waveform_data)
Expand All @@ -858,7 +874,6 @@ def test_session_write_waveform_numpy_complex128_invalid_dtype(self):
def test_session_write_waveform_numpy_complex_interleaved_i16_invalid_dtype(self):
invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex64)
expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=int16, is complex64"
import pytest
with nifake.Session('dev1') as session:
with pytest.raises(TypeError) as exc_info:
session.write_waveform_numpy_complex_interleaved_i16(invalid_waveform_data)
Expand Down
1 change: 1 addition & 0 deletions generated/nifgen/nifgen/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nimodinst/nimodinst/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nirfsg/nirfsg/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/niscope/niscope/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nise/nise/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/niswitch/niswitch/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nitclk/nitclk/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
27 changes: 27 additions & 0 deletions src/nifake/metadata/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,33 @@
}
]
},
'IntFlagEnum': {
'codegen_method': 'public',
'enum_class': 'IntFlag',
'values': [
{
'documentation': {
'description': 'Flag A option.'
},
'name': 'NIFAKE_VAL_FLAG_A',
'value': 1
},
{
'documentation': {
'description': 'Flag B option.'
},
'name': 'NIFAKE_VAL_FLAG_B',
'value': 2
},
{
'documentation': {
'description': 'Flag C option.'
},
'name': 'NIFAKE_VAL_FLAG_C',
'value': 9223372036854775808
}
]
},
'MobileOSNames': {
'values': [
{
Expand Down
28 changes: 28 additions & 0 deletions src/nifake/metadata/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,34 @@
],
'returns': 'ViStatus'
},
'FunctionWithIntflagParameter': {
'codegen_method': 'public',
'documentation': {
'description': "Calls a function that takes a flag parameter which can be OR'd from multiple enum values."
},
'included_in_proto': True,
'parameters': [
{
'direction': 'in',
'documentation': {
'description': 'Identifies a particular instrument session.'
},
'name': 'vi',
'type': 'ViSession'
},
{
'direction': 'in',
'documentation': {
'description': 'A flag parameter that can be a combination (bitwise OR) of IntFlagEnum values.'
},
'enum': 'IntFlagEnum',
'grpc_enum': None,
'name': 'flag',
'type': 'ViUInt64'
}
],
'returns': 'ViStatus'
},
'FunctionWithRepeatedCapabilityType': {
'documentation': {
'description': 'A function with a parameter that specifies repeated_capability_type.'
Expand Down
Loading