This release completely overhauls how Keithley commands are generated. Instead of hard-coding available commands for a particular series or model of Keithley, all available commands are retrieved on demand from the Keithley itself. This is possible because the Keithley's TSP scripts use the Lua programming language which allows such introspection.
The main disadvantage of this approach is that most Keithley attributes will only be generated *after* connecting to an instrument. The main advantage is that all Keithley commands of all models which use TSP are supported and support for any future commands will be automatic. This removes the need to update the driver as the command set evolves, barring changes to the syntax, and enables automatic support for models with different command sets or a different number of SMUs. Furthermore, there have been issues in the past with missing commands and constants due to oversight. Those will no longer occur.
The second major change is a switch from camel-case to snake-case for the public API. For example, `Keithley2600.applyVoltage` has been renamed to `Keithley2600.apply_voltage`.
Other changes include:
- Type hints are used throughout.
- The Python syntax has been modernised for Python 3.6.
- The Keithley no longer beeps at the end of custom sweeps.
- Added API `Keithley2600.send_trigger` to send a trigger signal to the Keithley. This can be used to manually start a pre-programmed sweep.
- Added API `KeithleyClass.create_lua_attr` to create a new attribute in the Keithley namespace. Use `Keithley2600.create_lua_attr` to create global variables.
- Added API `KeithleyClass.delete_lua_attr` to delete an attribute from the Keithley namespace. Use `Keithley2600.delete_lua_attr` to delete global variables.
- `Keithley2600.connect()` now returns `True` if the connection was established and `False` otherwise.