def AMI430_3D(): import numpy as np import qcodes.instrument.sims as sims from qcodes.instrument.ip_to_visa import AMI430_VISA from qcodes.instrument_drivers.american_magnetics.AMI430 import AMI430_3D visalib = sims.__file__.replace('__init__.py', 'AMI430.yaml@sim') mag_x = AMI430_VISA('x', address='GPIB::1::INSTR', visalib=visalib, terminator='\n', port=1) mag_y = AMI430_VISA('y', address='GPIB::2::INSTR', visalib=visalib, terminator='\n', port=1) mag_z = AMI430_VISA('z', address='GPIB::3::INSTR', visalib=visalib, terminator='\n', port=1) field_limit = [ lambda x, y, z: x == 0 and y == 0 and z < 3, lambda x, y, z: np.linalg.norm([x, y, z]) < 2 ] driver = AMI430_3D("AMI430_3D", mag_x, mag_y, mag_z, field_limit) try: yield driver, mag_x, mag_y, mag_z finally: driver.close() mag_x.close() mag_y.close() mag_z.close()
def current_driver(): """ Start three mock instruments representing current drivers for the x, y, and z directions. """ mag_x = AMI430_VISA('x', address='GPIB::1::65535::INSTR', visalib=visalib, terminator='\n', port=1) mag_y = AMI430_VISA('y', address='GPIB::2::65535::INSTR', visalib=visalib, terminator='\n', port=1) mag_z = AMI430_VISA('z', address='GPIB::3::65535::INSTR', visalib=visalib, terminator='\n', port=1) driver = AMI430_3D("AMI430-3D", mag_x, mag_y, mag_z, field_limit) yield driver mag_x.close() mag_y.close() mag_z.close() driver.close()
def current_driver(request): """ Start three mock instruments representing current drivers for the x, y and z directions. """ driver = AMI430_3D("AMI430-3D", AMI430("x", testing=True), AMI430("y", testing=True), AMI430("z", testing=True), field_limit) return driver
def test_instantiation_from_badly_typed_argument(magnet_axes_instances, request): mag_x, mag_y, mag_z = magnet_axes_instances request.addfinalizer(AMI430_3D.close_all) badly_typed_instrument_z_argument = 123 with pytest.raises(ValueError, match="instrument_z argument is neither of those"): AMI430_3D("AMI430-3D", mag_x.name, mag_y, badly_typed_instrument_z_argument, field_limit)
def current_driver(magnet_axes_instances): """ Instantiate AMI430_3D instrument with the three mock instruments representing current drivers for the x, y, and z directions. """ mag_x, mag_y, mag_z = magnet_axes_instances driver = AMI430_3D("AMI430-3D", mag_x, mag_y, mag_z, field_limit) yield driver driver.close()
def test_instantiation_from_name_of_nonexistent_ami_instrument( magnet_axes_instances, request): mag_x, mag_y, mag_z = magnet_axes_instances request.addfinalizer(AMI430_3D.close_all) non_existent_instrument = mag_y.name + "foo" with pytest.raises( KeyError, match=f"with name {non_existent_instrument} does not exist"): AMI430_3D("AMI430-3D", mag_x.name, non_existent_instrument, mag_z.name, field_limit)
def test_numeric_field_limit(magnet_axes_instances, field_limit, request): mag_x, mag_y, mag_z = magnet_axes_instances ami = AMI430_3D("AMI430-3D", mag_x, mag_y, mag_z, field_limit) request.addfinalizer(ami.close) assert isinstance(ami._field_limit, float) target_within_limit = (field_limit * 0.95, 0, 0) ami.cartesian(target_within_limit) target_outside_limit = (field_limit * 1.05, 0, 0) with pytest.raises(ValueError, match='_set_fields aborted; field would exceed limit'): ami.cartesian(target_outside_limit)
def test_instantiation_from_name_of_existing_non_ami_instrument( magnet_axes_instances, request): mag_x, mag_y, mag_z = magnet_axes_instances request.addfinalizer(AMI430_3D.close_all) non_ami_existing_instrument = Instrument("foo") with pytest.raises(TypeError, match=re.escape( f"Instrument {non_ami_existing_instrument.name} is " f"{type(non_ami_existing_instrument)} but {AMI430} " f"was requested")): AMI430_3D("AMI430-3D", mag_x.name, non_ami_existing_instrument.name, mag_z.name, field_limit)
def test_instantiation_from_names(magnet_axes_instances, request): """ Instantiate AMI430_3D instrument from the three mock instruments representing current drivers for the x, y, and z directions by their names as opposed from their instances. """ mag_x, mag_y, mag_z = magnet_axes_instances request.addfinalizer(AMI430_3D.close_all) driver = AMI430_3D("AMI430-3D", mag_x.name, mag_y.name, mag_z.name, field_limit) assert driver._instrument_x is mag_x assert driver._instrument_y is mag_y assert driver._instrument_z is mag_z