ComputerAdaptiveTesting.jl implements Computer Adaptive Testing (CAT) in
Julia: composable building blocks for item selection, ability estimation,
termination rules, and simulation. See the README for motivation
and installation, docs/src/ for tutorials, and docstrings/block comments in
src/ for specifics — keep those up to date as you change code; they are the
primary documentation for humans too.
src/ComputerAdaptiveTesting.jlincludes each submodule:Aggregators(ability estimation),NextItemRules(item selection),TerminationConditions,Sim(simulation loop),Stateful(step-wise interface),DecisionTree,Compat/Comparison(R catR/mirtCAT shims and cross-checks).- Workspaces:
test/anddocs/have their ownProject.toml(Julia 1.12 workspace feature).
Follow the patterns already in the codebase rather than inventing new ones:
- Config composition: user-facing constructors take a varargs "bag of
config bits" resolved with
@requiresome/@returnsome/find1_instancefromPsychometricsBazaarBase.ConfigTools(seesrc/Aggregators/ability_estimator.jl,src/NextItemRules/). Extend this machinery; don't hand-roll keyword plumbing. - Dispatch over branching: use trait/marker types (
DomainType,IntValue) and multiple dispatch instead ofif/isachains. - Composable wrappers: prefer wrapper types (e.g.
GuardedAbilityEstimator) over conditionals embedded at call sites. Configs are functors — callable strategy objects rooted atCatConfigBase. - Sister packages: item banks come from FittedItemBanks.jl; integrators, optimizers, and config machinery from PsychometricsBazaarBase.jl. Never duplicate their functionality here.
- Docstrings: use DocStringExtensions (
$(TYPEDEF),$(SIGNATURES)); seesrc/NextItemRules/prelude/abstract.jlfor house style. New public API must appear indocs/src/api.md.
- Julia 1.12 (
Project.tomlcompat; CI tests only 1.12). - Test:
julia --project=test test/runtests.jl(includes Aqua and JET checks).Pkg.test()currently does not work — see issue #52. - Docs:
cd docs && ./build.sh(needs R via CondaPkg; CI usesJULIA_CONDAPKG_BACKEND=Systemwith conda).