Skip to content

Commit 2854cbb

Browse files
authored
nirfsg: Refactor get_deembedding_sparameters to match the interpreter interfaces (#2167)
1 parent a43789a commit 2854cbb

6 files changed

Lines changed: 55 additions & 82 deletions

File tree

generated/nirfsg/nirfsg/_library_interpreter.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,15 +384,20 @@ def get_attribute_vi_string(self, channel_name, attribute): # noqa: N802
384384
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
385385
return value_ctype.value.decode(self._encoding)
386386

387-
def get_deembedding_sparameters(self, sparameters, sparameters_array_size): # noqa: N802
387+
def get_deembedding_sparameters(self):
388+
import numpy as np
389+
number_of_ports = self.get_deembedding_table_number_of_ports()
390+
sparameters_array_size = number_of_ports ** 2
391+
sparameters = np.full((number_of_ports, number_of_ports), 0 + 0j, dtype=np.complex128)
388392
vi_ctype = _visatype.ViSession(self._vi) # case S110
389393
sparameters_ctype = _get_ctypes_pointer_for_buffer(value=sparameters, library_type=_complextype.NIComplexNumber) # case B510
390394
sparameters_array_size_ctype = _visatype.ViInt32(sparameters_array_size) # case S150
391395
number_of_sparameters_ctype = _visatype.ViInt32() # case S220
392396
number_of_ports_ctype = _visatype.ViInt32() # case S220
393397
error_code = self._library.niRFSG_GetDeembeddingSparameters(vi_ctype, sparameters_ctype, sparameters_array_size_ctype, None if number_of_sparameters_ctype is None else (ctypes.pointer(number_of_sparameters_ctype)), None if number_of_ports_ctype is None else (ctypes.pointer(number_of_ports_ctype)))
394398
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
395-
return int(number_of_sparameters_ctype.value), int(number_of_ports_ctype.value)
399+
sparameters = sparameters.reshape((int(number_of_ports_ctype.value), int(number_of_ports_ctype.value)))
400+
return sparameters
396401

397402
def get_deembedding_table_number_of_ports(self): # noqa: N802
398403
vi_ctype = _visatype.ViSession(self._vi) # case S110

generated/nirfsg/nirfsg/session.py

Lines changed: 2 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -6362,7 +6362,7 @@ def create_deembedding_sparameter_table_array(self, port, table_name, frequencie
63626362
raise TypeError("Unsupported datatype. Expected numpy array.")
63636363

63646364
def get_deembedding_sparameters(self):
6365-
'''get_deembedding_sparameters
6365+
r'''get_deembedding_sparameters
63666366

63676367
Returns the S-parameters used for de-embedding a measurement on the selected port.
63686368

@@ -6378,12 +6378,7 @@ def get_deembedding_sparameters(self):
63786378
sparameters (numpy.array(dtype=numpy.complex128)): Returns an array of S-parameters. The S-parameters are returned in the following order: s11, s12, s21, s22.
63796379

63806380
'''
6381-
import numpy as np
6382-
number_of_ports = self._get_deembedding_table_number_of_ports()
6383-
sparameter_array_size = number_of_ports ** 2
6384-
sparameters = np.full((number_of_ports, number_of_ports), 0 + 0j, dtype=np.complex128)
6385-
_, number_of_ports = self._get_deembedding_sparameters(sparameters, sparameter_array_size)
6386-
sparameters = sparameters.reshape((number_of_ports, number_of_ports))
6381+
sparameters = self._interpreter.get_deembedding_sparameters()
63876382
return sparameters
63886383

63896384
@ivi_synchronized
@@ -6416,59 +6411,6 @@ def get_all_script_names(self):
64166411
script_names = self._interpreter.get_all_script_names()
64176412
return _converters.convert_comma_separated_string_to_list(script_names)
64186413

6419-
@ivi_synchronized
6420-
def _get_deembedding_sparameters(self, sparameters, sparameters_array_size):
6421-
r'''_get_deembedding_sparameters
6422-
6423-
Returns the S-parameters used for de-embedding a measurement on the selected port.
6424-
6425-
This includes interpolation of the parameters based on the configured carrier frequency. This method returns an empty array if no de-embedding is done.
6426-
6427-
If you want to call this method just to get the required buffer size, you can pass 0 for **S-parameter Size** and VI_NULL for the **S-parameters** buffer.
6428-
6429-
**Supported Devices** : PXIe-5830/5831/5832/5840/5841/5842/5860
6430-
6431-
Note: The port orientation for the returned S-parameters is normalized to SparameterOrientation.PORT1_TOWARDS_DUT.
6432-
6433-
Args:
6434-
sparameters (numpy.array(dtype=numpy.complex128)): Returns an array of S-parameters. The S-parameters are returned in the following order: s11, s12, s21, s22.
6435-
6436-
sparameters_array_size (int): Specifies the size of the array that is returned by the SPARAMETERS output.
6437-
6438-
Note:
6439-
One or more of the referenced properties are not in the Python API for this driver.
6440-
6441-
6442-
Returns:
6443-
number_of_sparameters (int): Returns the number of S-parameters.
6444-
6445-
number_of_ports (int): Returns the number of S-parameter ports. The **sparameter** array is always *n* x *n*, where span *n* is the number of ports.
6446-
6447-
'''
6448-
import numpy
6449-
6450-
if type(sparameters) is not numpy.ndarray:
6451-
raise TypeError('sparameters must be {0}, is {1}'.format(numpy.ndarray, type(sparameters)))
6452-
if numpy.isfortran(sparameters) is True:
6453-
raise TypeError('sparameters must be in C-order')
6454-
if sparameters.dtype is not numpy.dtype('complex128'):
6455-
raise TypeError('sparameters must be numpy.ndarray of dtype=complex128, is ' + str(sparameters.dtype))
6456-
number_of_sparameters, number_of_ports = self._interpreter.get_deembedding_sparameters(sparameters, sparameters_array_size)
6457-
return number_of_sparameters, number_of_ports
6458-
6459-
@ivi_synchronized
6460-
def _get_deembedding_table_number_of_ports(self):
6461-
r'''_get_deembedding_table_number_of_ports
6462-
6463-
Returns the number of S-parameter ports.
6464-
6465-
Returns:
6466-
number_of_ports (int): Returns the number of S-parameter ports. The **sparameter** array is always *n* x *n*, where span *n* is the number of ports.
6467-
6468-
'''
6469-
number_of_ports = self._interpreter.get_deembedding_table_number_of_ports()
6470-
return number_of_ports
6471-
64726414
@ivi_synchronized
64736415
def _get_external_calibration_last_date_and_time(self):
64746416
r'''_get_external_calibration_last_date_and_time

src/nirfsg/metadata/functions.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1513,7 +1513,7 @@
15131513
'documentation_filename': 'default_method',
15141514
'library_interpreter_filename': 'none',
15151515
'method_python_name_suffix': '',
1516-
'session_filename': 'get_deembedding_sparameter'
1516+
'session_filename': 'default_method'
15171517
}
15181518
],
15191519
'parameters': [
@@ -2054,9 +2054,9 @@
20542054
'method_templates': [
20552055
{
20562056
'documentation_filename': 'numpy_method',
2057-
'library_interpreter_filename': 'numpy_read_method',
2057+
'library_interpreter_filename': 'get_deembedding_sparameter',
20582058
'method_python_name_suffix': '',
2059-
'session_filename': 'numpy_read_method'
2059+
'session_filename': 'none'
20602060
}
20612061
],
20622062
'parameters': [
@@ -2121,6 +2121,14 @@
21212121
'description': '\nReturns the number of S-parameter ports.'
21222122
},
21232123
'included_in_proto': True,
2124+
'method_templates': [
2125+
{
2126+
'documentation_filename': 'default_method',
2127+
'library_interpreter_filename': 'default_method',
2128+
'method_python_name_suffix': '',
2129+
'session_filename': 'none'
2130+
}
2131+
],
21242132
'parameters': [
21252133
{
21262134
'direction': 'in',
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<%page args="f, config, method_template"/>\
2+
<%
3+
'''Retrieves S-parameters from the gRPC call response and converts them to a reshaped numpy array.'''
4+
import build.helper as helper
5+
%>\
6+
def ${f['interpreter_name']}(self):
7+
import numpy as np
8+
response = self._invoke(
9+
self._client.GetDeembeddingSparameters,
10+
grpc_types.GetDeembeddingSparametersRequest(vi=self._vi),
11+
)
12+
number_of_ports = response.number_of_ports
13+
sparameters = np.array([c.real + 1j * c.imaginary for c in response.sparameters], dtype=np.complex128)
14+
sparameters = sparameters.reshape((number_of_ports, number_of_ports))
15+
return sparameters
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<%page args="f, config, method_template"/>\
2+
<%
3+
'''Gets S-parameters from the driver. Queries the number of ports, retrieves the S-parameter data into a pre-allocated buffer, and reshapes it.'''
4+
import build.helper as helper
5+
%>\
6+
7+
def ${f['interpreter_name']}(self):
8+
import numpy as np
9+
number_of_ports = self.get_deembedding_table_number_of_ports()
10+
sparameters_array_size = number_of_ports ** 2
11+
sparameters = np.full((number_of_ports, number_of_ports), 0 + 0j, dtype=np.complex128)
12+
vi_ctype = _visatype.ViSession(self._vi) # case S110
13+
sparameters_ctype = _get_ctypes_pointer_for_buffer(value=sparameters, library_type=_complextype.NIComplexNumber) # case B510
14+
sparameters_array_size_ctype = _visatype.ViInt32(sparameters_array_size) # case S150
15+
number_of_sparameters_ctype = _visatype.ViInt32() # case S220
16+
number_of_ports_ctype = _visatype.ViInt32() # case S220
17+
error_code = self._library.niRFSG_GetDeembeddingSparameters(vi_ctype, sparameters_ctype, sparameters_array_size_ctype, None if number_of_sparameters_ctype is None else (ctypes.pointer(number_of_sparameters_ctype)), None if number_of_ports_ctype is None else (ctypes.pointer(number_of_ports_ctype)))
18+
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
19+
sparameters = sparameters.reshape((int(number_of_ports_ctype.value), int(number_of_ports_ctype.value)))
20+
return sparameters

src/nirfsg/templates/session.py/get_deembedding_sparameter.py.mako

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)