v2.1.2 (2026-06-29)¶
Bug-fix release. Two user-facing regressions surfaced by the broader pandas 3 / Copy-on-Write rollout and by Windows users pasting file paths into the tutorial scripts and Voila app are addressed. No public API changes.
Fixed¶
inter.Control.set_inp_aT: the “manually adjust shift factors” control inLinViscoFit.ipynbsilently stopped updating the master curve under pandas >= 3. The callback used chained-assignment writes (self.df_aT["log_aT"].iloc[idx] += delta) which, with Copy-on-Write enabled, raiseChainedAssignmentErrorand modify a temporary copy instead ofdf_aT.master.get_curvewas then recomputed from the unchanged frame and the displayed figure looked identical to before the edit. The single-row, multi-row-below-RefT, and multi-row-above-RefT branches were all affected. The fix usesdf.loc[…]assignments on the original frame and converts the delta / index comparisons to scalars so the three branches mutatedf_aTas intended.load.file: paths copy-pasted on Windows commonly carry surrounding artefacts that surface asOSError: [Errno 22] Invalid argumentrather than the expectedFileNotFoundError, because the offending characters (",', leading whitespace, trailing newlines) are not legal in Windows file names. Two common sources are the Windows Explorer / PowerShell Copy as path command (wraps the result in double quotes) and copy-paste from terminals or web pages (introduces stray newlines/spaces).load.filenow strips surrounding whitespace and a matched pair of surrounding single or double quotes before opening, acceptsos.PathLikeinputs explicitly, and re-raises file-not-found errors asFileNotFoundErrorwith the resolved path surfaced so the original copy-paste artefact is visible in the message. Forward, back, and mixed slashes were already accepted and remain so.
Added¶
tests/test_inter.py: new dedicated regression suite for theinterGUI controller. ExercisesControl.set_inp_aTdirectly on a hand-assembledControlinstance (built viaControl.__new__with widget attributes stubbed) and asserts thatdf_aTactually mutates, that the master curve and file-package side-effect dict are refreshed, thatdelta == 0is a true no-op, and that nopandas.errors.ChainedAssignmentErroris emitted by any of the three branches.tests/test_load.py: 14 new regression tests forload.filecoveringpathlib.Pathandstrinputs, forward / back / mixed slashes, surrounding single and double quotes, leading / trailing whitespace and newlines, the combined “quoted with whitespace” case, and the descriptiveFileNotFoundErrorraised for missing files.