Changelog
v0.4.0 (2026)
Bug Fixes
Fixed
Trap.__str__crash (typo referencing non-existent attributes)Fixed efficiency formula operator precedence for concentrated light
Fixed DOS normalization overwrite in scfermi solver
Fixed hardcoded
Tanneal=853ignoring user parameterFixed
@classmethodusingselfinstead ofclsFixed
q3=0sentinel conflicting with real charge state 0; now usesq3=Nonefor single-level trapsRemoved debug print statements
Replaced
np.arangefloat step withnp.linspace
New Features
DefectDatadataclass for direct SRH inputdefect_data_from_doped()integration with doped packageTrap.single_level()factory for common single-level trapstlc.sq_limit()classmethod for quick SQ calculationsConfigurable absorption data path
Keyword arguments for
Trapclass
UX Improvements
Unified
calculate()method with optionaldefect_dataat initresultsproperty andto_dataframe()for parameter sweepsax=parameter on all plot methods for matplotlib composabilityAccept
pd.DataFrameornp.ndarrayfor absorption data (alpha=)TLC(uppercase) promoted as canonical class nameDefectData.from_effective_masses()classmethodTrap.two_level()classmethodis_sqproperty (replacesl_sq)
Deprecations
calculate_rad()— usecalculate()alpha_file=— usealpha=l_sq=— useTLC.sq_limit()oris_sqTrap.D— useTrap.defect_name
Refactoring
Removed dependency on internal
scfermi.py(moved totlc/legacy/)Removed
pymatgenas required dependencyRemoved
setup.py(replaced bypyproject.toml)Removed
pkg_resourcesdeprecation warningAdded
pyproject.tomlwith modern packagingAdded pytest test suite (SQ limit + SRH integration tests)
Added GitHub Actions CI
Consolidated docs: removed
quickstart.rst, droppednbsphinx(redundant withmyst-nb)