Changelog
1.5.0
Added:
New
LCREISclass andLCREISTestParameters, enabling multi-frequency EIS measurement and compensation using an NI PXIe-4190 LCR Meter. This includes new API calls and a new example:lcr_eis_simple.py— a basic EIS measurement with an LCR meter (usesLCREISConfigFile.json).
New compensation-focused examples for switching workflows:
acir_create_compensation_with_switching.py— create an ACIR compensation file while switching across channels.acir_with_switching_and_compensation_list.py— run ACIR across channels using a per-channel compensation list.eis_create_compensation_with_switching.py— create an EIS compensation file while switching across channels.eis_with_switching_and_compensation_list.py— run EIS across channels using a per-channel compensation list.
Fixed:
The SMU / electronic load output relays are now reliably disconnected at the end of every ACIR, EIS, and DCIR test (and their parallel variants) for a proper workflow and power safety.
ACIR / EIS single-sided spectrum amplitude correction: the reported voltage and current phasor magnitudes now apply the factor-of-two single-sided FFT correction. Impedance results are unaffected, since the factor cancels in the voltage-to-current ratio.
Removed an obsolete DCIR current-level range workaround.
LCRACIRnow inherits from the sharedMeasurementbase class for consistent behavior with the other measurement types.
Changed:
Internally refactored Parallel Measurement classes. Users should not notice any major difference while interacting with the API.
Call Path Deprecation Related to the internal refactor, the
EISandParallelEIScallback path got flagged as deprecated:measurement_callbackis now a constructor parameter and a settable property onEISandParallelEIS, instead of being passed torun()andrun_with_switching().To signal this, the old call path is still part of the API, but using it causes a
DeprecationWarning. To mitigate this, use the new call path.Migration guide: Pass
measurement_callbackat construction time or via the property before callingrun()orrun_with_switching(). BothEISandParallelEISare affected.# Before (deprecated - raises DeprecationWarning): eis.run(compensation, measurement_callback=my_callback) eis.run_with_switching(compensation, measurement_callback=my_callback) # After - option 1: pass at construction time: eis = EIS(device, params, measurement_callback=my_callback) eis.run(compensation) # After - option 2: set the property before running: eis = EIS(device, params) eis.measurement_callback = my_callback eis.run(compensation)
Further consolidated shared
ParallelMeasurementinternals used byParallelACIRandParallelDCIRto reduce duplication while preserving behavior.Breaking change: All public measurement result collections now return immutable
tupleinstead of mutablelist.EIS.run()now returnstuple[SMUResult, ...](waslist[SMUResult])EIS.run_with_switching()now returnstuple[tuple[SMUCellData, tuple[SMUResult, ...]], ...](waslist[tuple[SMUCellData, list[SMUResult]]])EIS.get_plots()switching branch now returnstuple[tuple[PlotSeries, PlotSeries, PlotSeries], ...](waslist[...])ACIR.run_with_switching()now returnstuple[tuple[SMUCellData, SMUResult], ...](waslist[tuple[SMUCellData, SMUResult]])OCV.run_with_switching()now returnstuple[tuple[str, tuple[datetime, datetime, float]], ...](waslist[...])ParallelEIS.run()now returnstuple[SMUResult, ...](waslist[SMUResult])SMUMeasurement.voltage_valuesis nowtuple[float, ...](waslist[float])SMUMeasurement.current_valuesis nowtuple[float, ...](waslist[float])Migration guide: Most user code continues to work without changes. Iteration (
for r in results), indexing (results[0]), slicing (results[:3]), length checkslen(), and unpacking all work identically on tuples. Only code that incorrectly mutates the returned collection needs updating:# Before (no longer works): results = eis.run(compensation) results.append(extra) # raises AttributeError results[0] = modified # raises TypeError # After - copy to a list if mutation is required: results = list(eis.run(compensation)) results.append(extra) # works
1.4.0
Fixed:
Calibratornow actually supportsDeviceFamily.ELoad. It was missing this in previous release.
Added:
New
ParallelMeasurementbase abstract class for parallel measurements.New
ParallelDCIRclass, helping you create DCIR Parallel Measurements (based on theParallelMeasurementabstract class). This includes new API calls and a new example:dcir_parallel_simple.py— a basic parallel DCIR measurement.
New
ParallelACIRclass, helping you create ACIR Parallel Measurements (based on theParallelMeasurementabstract class). This includes new API calls and a new examples:acir_parallel_simple.py— a basic parallel ACIR measurement.acir_parallel_create_compensation_file.py— basic parallel ACIR compensation with thermocouple.acir_parallel_create_compensation_with_kit.py— parallel ACIR SHORT compensation using a KIT file.
New
ParallelEISclass, helping you create EIS Parallel Measurements (based on theParallelACIRandEISclasses). This includes new API calls and a new examples:eis_parallel_simple.py— a basic parallel EIS measurement.eis_parallel_create_compensation_file.py— basic parallel EIS compensation with thermocouple.eis_parallel_create_compensation_with_kit.py— parallel EIS SHORT compensation using a KIT file.
New Simulated
ELoadExample.Checks for
DeviceFamily.ELoadin Simulated Device examples.New
LCRACIRclass andLCRTestParameters, enabling single-frequency ACIR measurement and compensation using an NI PXIe-4190 LCR Meter. This includes new API calls and new examples:lcr_acir_simple.py— a basic ACIR measurement with an LCR meter.lcr_create_compensation.py— create an LCR meter compensation for ACIR.
Changed:
SwitchAwarebehaviour is moved fromMeasurementto a separateSwitchingSupportmixin class.Now only specific measurements using
SwitchingSupporthaverun_with_switchingfunction and completeSwitchAwarebehaviour.Added type hints to all public API docstrings for improved API Reference documentation.
1.3.0
Fixed:
Replaced
print()warning messages in temperature module with proper Pythonloggingto stderr (issue #56).
Added:
Custom exception classes for unified error handling in
errors.py:BCQError(base class) and specific subclasses for common error scenarios (e.g.,EmptySerialNumberError,HardwareIncompatibilityError, etc.):Most of these come from the LabVIEW API.
Two are Python specific (
DMMParameterErrorandTemperatureError).
These exceptions are now used throughout the codebase for clearer and more maintainable error handling.
Changed:
Testing is now done with the new Error Handling Framework.
1.2.1
Added:
TemperatureAware.validate_temperature(target_temperature)- Measures and Validates temperature for measurement classes (ACIR, EIS, etc.).Historical changelog to documentation.
New Warnings to temperature validation logic, when delta was overwritten and when target is set but no measurement is available.
Two new examples showing error handling with both temperature and switching support is present.
New
temperatureproperty forTemperatureAwareclass, containing only the measured temperature value, without the delta limits.
Changed:
Temperature submodule:
Made
TemperatureCapability.run_task()public.Made
TemperatureCapability.validate_latest_temperature()public.Warning messages now prefixed with
[nibcq]for clarity.Renamed
TemperatureParameterto a more genericCenteredRangename. The new field names arecenteranddelta.
Measurement classes:
Now
ACIRandEISrun()includes temperature validation when it is necessary and supported.
Examples:
Examples demonstrating temperature validation workflow in
acir_with_temperature.pyandeis_with_temperature.py.Error handling in examples with temperature measurement.
Updated documentation, including new examples.
Renamed
temperature_measurementproperty totemperature_range.
Fixed:
Temperature validation now correctly uses overridden
acceptable_temperature_deltawhen user sets custom value.Setting temperature delta now actually possible during device creation.
Compensation file creation examples set temperature delta correctly.
Added None check for
target_temperatureparameter in validation methods, solving an issue when usingNo Compensationcompensation method.Some typos.
1.2.0
Added:
Basic functionality for OCV, ACIR, DCIR and EIS measurements.
Switching support for multi-channel measurements.
Temperature measurement support with thermocouple integration.