|
| 1 | +# spikesafe-python Releases |
| 2 | + |
| 3 | +## v1.9.7 |
| 4 | +9/17/25 |
| 5 | + |
| 6 | +- Added |
| 7 | + - Support for package aggregation (single statement import spikesafe_python) |
| 8 | + - Support upload-artifact@v4 in .yml |
| 9 | + - Precision.get_precise_pulse_width_correction_command_argument |
| 10 | + - SerialPortConnection class |
| 11 | + - SpikeSafeEvents |
| 12 | + - INTERNAL_BULK_OVER_CURRENT = 209 |
| 13 | + - MAXIMUM_BULK_VOLTAGE_BOOST_EXCEEDED = 210 |
| 14 | + - PULSE_WIDTH_ADJUSTMENT_ERROR = 211 |
| 15 | + - EXCESSIVE_BULK_VOLTAGE = 212 |
| 16 | + - BULK_POWER_FAILURE = 213 |
| 17 | + - INVALID_PARTIAL_ABORT = 434 |
| 18 | + - CANNOT_COMMUNICATE_WITH_DIGITIZER = 510 |
| 19 | + - INVALID_VOLTAGE_PROTECTION_MODE = 600 |
| 20 | +- Updated |
| 21 | + - Design for accessing static methods and enums by specifying class name, while supporting backwards compatibility |
| 22 | + - Compensation.get_custom_compensation() enable_logging default to False |
| 23 | + - Compensation.get_optimum_compensation() enable_logging default to False |
| 24 | + - DigitizerDataFetch.wait_for_new_voltage_data() to check for VOLT:NDAT? PARTIAL |
| 25 | + - EventData.parse_event_data() to support events with physical channel list |
| 26 | + |
| 27 | +## v1.8.3 |
| 28 | +1/23/25 |
| 29 | + |
| 30 | +- Added |
| 31 | + - jsonschema to requirements.txt |
| 32 | + - New info message "Custom compensation for {set_current_amps}A on {spikesafe_model_max_current_amps}A SpikeSafe model and device type '{device_type}' is LoadImpedance.{target_load_impedance} and RiseTime.{target_rise_time}." to Compensation.get_custom_compensation() |
| 33 | + - New parameter enable_logging to Compensation.get_custom_compensation() |
| 34 | + - New 80A SpikeSafe Model to Compensation.get_optimum_compensation() |
| 35 | + - Default return of LoadImpedance.MEDIUM and RiseTime.FAST if SpikeSafe Model isn't defined in Compensation.get_optimum_compensation() |
| 36 | + - New parameter enable_logging to Compensation.get_optimum_compensation() |
| 37 | + - New warning message "DC based modes do not require compensation, defaulting to LoadImpedance.VERY_LOW and RiseTime.VERY_SLOW" to Compensation.get_optimum_compensation() |
| 38 | + - New warning message "Compensation is intended for Pulse On Time of {optimum_compensation_minimum_pulse_on_time_seconds}s or less, defaulting to LoadImpedance.VERY_LOW and RiseTime.VERY_SLOW" to Compensation.get_optimum_compensation() |
| 39 | + - New warning message "{spikesafe_model_max_current_amps}A SpikeSafe Model not defined for optimum compensation, defaulting to LoadImpedance.MEDIUM and RiseTime.FAST" to Compensation.get_optimum_compensation() |
| 40 | + - New info message "Optimum compensation for {set_current_amps}A on {spikesafe_model_max_current_amps}A SpikeSafe model is LoadImpedance.{load_impedance} and RiseTime.{rise_time}." to Compensation.get_optimum_compensation() |
| 41 | + - New function ChannelData.current_reading_formatted_float() |
| 42 | + - New function ChannelData.current_reading_formatted_string() |
| 43 | + - New function ChannelData.voltage_reading_formatted_float() |
| 44 | + - New function ChannelData.voltage_reading_formatted_string() |
| 45 | + - New function DigitizerData.voltage_reading_formatted_float() |
| 46 | + - New function DigitizerData.voltage_reading_formatted_string() |
| 47 | + - New parameter enable_logging to DigitizerDataFetch.wait_for_new_voltage_data() |
| 48 | + - New function MemoryTableReadData.bulk_voltage_volts_formatted_float() |
| 49 | + - New function MemoryTableReadData.bulk_voltage_volts_formatted_string() |
| 50 | + - New class ScpitFormatter |
| 51 | + - New parameters enable_logging, default_log_level to TcpSocket() |
| 52 | + - pytests under tests/ |
| 53 | + - test_optimum_compensation |
| 54 | +- Fixed |
| 55 | + - Precision.get_precise_pulse_width_offset_command_argument() |
| 56 | + |
| 57 | +## v1.7.17 |
| 58 | +10/25/24 |
| 59 | + |
| 60 | +- Added |
| 61 | + - Official support for Python 3.13 |
| 62 | + - New function Compensation.get_custom_compensation() |
| 63 | + - New function Compensation.load_custom_compensation_table() |
| 64 | + - New function Compensation.load_custom_compensation_unique_device_types() |
| 65 | + - New schema Compensation.custom_compensation_table_schema |
| 66 | + - New attribute DigitizerData.time_since_start_seconds |
| 67 | + - New function DigitizerDataFetch.fetch_voltage_data_sampling_mode_linear() |
| 68 | + - New function DigitizerDataFetch.fetch_voltage_data_sampling_mode_logarithmic() |
| 69 | + - New function DigitizerDataFetch.fetch_voltage_data_sampling_mode_custom() |
| 70 | + - New enum DigitizerEnums.TimeSamplingMode |
| 71 | + - New enum DigitizerEnums.SamplingMode |
| 72 | + - New class DigitizerVfCustomSequence |
| 73 | + - New class DigitizerVfCustomSequenceStep |
| 74 | + - New class PulseWidthCorrection |
| 75 | + - New SpikeSafeEvents |
| 76 | + - MAX_COMPLIANCE_VOLTAGE_EXCEEDED_LIMIT = 125 |
| 77 | + - INVALID_OFF_TIME_CAUSED_BY_INVALID_PULSE_WIDTH_CORRECTION = 395 |
| 78 | + - INVALID_ON_TIME_CAUSED_BY_INVALID_PULSE_WIDTH_CORRECTION = 396 |
| 79 | + - CHANNEL_IS_PULSING_CANNOT_CHANGE_SETTING = 397 |
| 80 | + - COMMUNICATION_ERROR_DURING_IDN_QUERY_I2C_IS_RESET = 398 |
| 81 | + - CPLD_VERSIONS_DO_NOT_MATCH = 399 |
| 82 | + - DIGITIZER_THE_INPUT_RELAYS_OF_THE_DEVICE_IS_DISCONNECTED = 431 |
| 83 | + - DIGITIZER_MISSING_OUTPUT_TRIGGER_EDGE_PARAMETER = 432 |
| 84 | + - SAMPLING_CUSTOM_SEQUENCE_IS_NOT_SET = 433 |
| 85 | + - INVALID_VOLTAGE_PROTECTION_MODE = 500 |
| 86 | + - EXCEED_MAX_TOTAL_NUMBER_OF_STEPS_IN_SAMPLING_CUSTOM_SEQUENCE = 501 |
| 87 | + - INVALID_SAMPLING_CUSTOM_SEQUENCE = 502 |
| 88 | + - EXCEED_MAX_TOTAL_READ_COUNT_IN_SAMPLING_CUSTOM_SEQUENCE = 503 |
| 89 | + - EXCEED_MAX_SAMPLING_CUSTOM_SEQUENCE_STRING_LENGTH = 504 |
| 90 | + - EXCEED_MAX_TOTAL_SAMPLING_TIME_IN_SAMPLING_CUSTOM_SEQUENCE = 505 |
| 91 | + - EXCEED_MAX_TOTAL_SAMPLING_CUSTOM_SEQUENCE_STRING_LENGTH = 506 |
| 92 | + - PREVIOUS_SEQUENCE_HAVE_NOT_BEEN_CLEARED = 507 |
| 93 | + - NO_SEQUENCE_HAVE_BEEN_SET = 508 |
| 94 | + - EXCEED_MAX_SAMPLING_CUSTOM_SEQUENCE_APERTURE = 509 |
| 95 | + - pytests under tests/ |
| 96 | + - test_custom_compensation |
| 97 | + - test_digitizer_fetch_time_of_sampling |
| 98 | + - test_optimum_pulse_width_correction |
| 99 | + - workflows under .github/workflows/ |
| 100 | + - deploy_development.yml. Runs pytests, increments version, builds, and pushes to Test PyPI on push to development branch |
| 101 | + - deploy_master.yml. Runs pytests, builds, and pushes to PyPI on push to master branch |
| 102 | +- Fixed |
| 103 | + - Precision function comments to return strings which match function return type |
| 104 | +- Updated |
| 105 | + - Compensation.get_optimum_compensation() error message to format: Measurement current {set_current_amps}A exceeds SpikeSafe model maximum current capability of {spikesafe_model_max_current_amps}A. |
| 106 | + |
| 107 | +## v1.6.0 |
| 108 | +2/13/24 |
| 109 | + |
| 110 | +- Added |
| 111 | + - Threading.wait() optional os_timer_resolution_offset_time parameter |
| 112 | +- Updated |
| 113 | + - README refers to SpikeSafePythonSamples for install and usage instructions |
| 114 | + - Compensation. get_optimum_compensation() returns LoadImpedance.Medium for 500mA in Low Current Range and operating under 70% ratio |
| 115 | + |
| 116 | +## v1.5.15 |
| 117 | +12/26/23 |
| 118 | + |
| 119 | +- Added |
| 120 | + - New function Compensation.get_optimum_compensation() |
| 121 | + - New function DigitizerDataFetch. get_new_voltage_data_estimated_complete_time() |
| 122 | + - New function Discharge.get_spikesafe_channel_discharge_time() |
| 123 | + - New function Precision.get_precise_compliance_voltage_command_argument() |
| 124 | + - New function Precision.get_precise_voltage_protection_ramp_dv_command_argument() |
| 125 | + - New function Precision.get_precise_voltage_protection_ramp_dt_command_argument() |
| 126 | + - New function Precision.get_precise_pulse_width_offset_command_argument() |
| 127 | + - New function Precision.get_precise_duty_cycle_command_argument() |
| 128 | + - New function Precision.get_precise_time_command_argument() |
| 129 | + - New function Precision.get_precise_time_milliseconds_command_argument() |
| 130 | + - New function Precision.get_precise_time_microseconds_command_argument() |
| 131 | + - New function Precision.get_precise_current_command_argument() |
| 132 | + - New class LoadImpedance() |
| 133 | + - New class RiseTime() |
| 134 | + |
| 135 | +## v1.4.5 |
| 136 | +4/28/23 |
| 137 | + |
| 138 | +- Updated |
| 139 | + - README.md replaced "SMU" with "PSMU" |
| 140 | + - Made threading.wait() more accurate with time.perf_counter |
| 141 | + |
| 142 | +## v1.3.0 |
| 143 | +1/10/23 |
| 144 | + |
| 145 | +- Updated |
| 146 | + - Migrated to projectpy.toml to support Python v3.11.1. This package works with Python v3.10.0 and up. |
| 147 | + |
| 148 | +## v1.2.3 |
| 149 | +9/15/22 |
| 150 | + |
| 151 | +- Added: |
| 152 | + - SpikeSafeEvents IntEnum class |
| 153 | + - Link to spikesafe-python API Overview in README |
| 154 | + - Optional parameter for SCPI Logging |
| 155 | +- Updated: |
| 156 | + Class comments for better readability |
| 157 | + |
| 158 | +## v1.1.0 |
| 159 | +6/4/20 |
| 160 | + |
| 161 | +Initial release |
0 commit comments