Skip to content
Documentation

AI999X desktop app
& command line

Every AI999X scientific model on your own computer, for Windows and Linux: one desktop app with search, questions in words, forms, live figures and explanations, and a command-line program for each model. Offline, nothing to sign up for. Version 1.1.0.

1. Downloads

Desktop app: all AI999X models in one window.

Command line: one archive with every model’s program.

WhatSystemFile
Desktop appWindows x86-64ai999x-1.1.0-windows-x86_64.zip
Desktop appLinux x86-64ai999x-1.1.0-linux-x86_64.tar.gz
Command lineWindows x86-64ai999x-cli-1.1.0-windows-x86_64.zip
Command lineLinux x86-64ai999x-cli-1.1.0-linux-x86_64.tar.gz

Checksums for every file: SHA256SUMS. The newest version is always in https://www.ai999x.com/downloads/desktop/latest/ under the same file names. Requirements: Windows: Windows 10 or 11, 64-bit; Linux: 64-bit Linux (x86-64).

2. Install the desktop app

Windows

Download ai999x-1.1.0-windows-x86_64.zip, right-click it → Extract All, then open the folder and start ai999x.exe. If Windows SmartScreen asks, choose More info → Run anyway. Start it again from the same folder, or pin it to the taskbar.

Linux

In a terminal (the checksum line should print OK):

curl -LO https://www.ai999x.com/downloads/desktop/1.1.0/ai999x-1.1.0-linux-x86_64.tar.gz
curl -LO https://www.ai999x.com/downloads/desktop/1.1.0/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS
tar xzf ai999x-1.1.0-linux-x86_64.tar.gz
./ai999x-1.1.0-linux-x86_64/ai999x

Then choose a model, type a question in words or search for a capability, fill in the form and press Compute. The answer comes with what it means and with figures drawn for your inputs; change an input and they follow.

3. Install the command line

The archive holds one program per model, named after the model (the list is in section 11). The commands below unpack it, add it to your PATH and check one program.

Linux

curl -LO https://www.ai999x.com/downloads/desktop/1.1.0/ai999x-cli-1.1.0-linux-x86_64.tar.gz
curl -LO https://www.ai999x.com/downloads/desktop/1.1.0/SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS
mkdir -p ~/.local/share && tar xzf ai999x-cli-1.1.0-linux-x86_64.tar.gz -C ~/.local/share
echo 'export PATH="$HOME/.local/share/ai999x-cli-1.1.0-linux-x86_64:$PATH"' >> ~/.bashrc && source ~/.bashrc
classical-physics --version

Windows (PowerShell)

The fourth line should print True.

$F = "ai999x-cli-1.1.0-windows-x86_64.zip"
Invoke-WebRequest "https://www.ai999x.com/downloads/desktop/1.1.0/$F" -OutFile $F
Invoke-WebRequest "https://www.ai999x.com/downloads/desktop/1.1.0/SHA256SUMS" -OutFile SHA256SUMS
(Get-FileHash $F -Algorithm SHA256).Hash.ToLower() -eq ((Select-String -SimpleMatch $F SHA256SUMS).Line -split ' ')[0]
Expand-Archive $F -DestinationPath "$env:LOCALAPPDATA\AI999X" -Force
$D = "$env:LOCALAPPDATA\AI999X\ai999x-cli-1.1.0-windows-x86_64"; $env:Path += ";$D"
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";$D", "User")
classical-physics --version

What the check prints:

$ classical-physics --version
classical-physics-ai999x 1.0.3 (Rust build, ax-engine 0.1.0)

4. Ask and search

In the desktop app, type a question in words into the question box at the top; on a model page, use the “Ask in words” box of its calculator. It finds the capability, reads the numbers and units from your sentence, fills in the form and answers. Every answer says what the question was read as (“Read as: …”), and the other likely readings are one click away, with the same numbers where they fit. When a value is missing, the form opens at that input; when two capabilities fit equally, you choose. Search works the same way with a few words (“pendulum period”, “present value”).

Write the question as you would say it: the program reads the quantities and their units, picks the capability and answers.

$ classical-physics ask "A 3 kg object moves at 4 m/s. What is its kinetic energy?"
Read as: Translational kinetic energy
kinetic energy (K) = 24 J
  by: Translational kinetic energy  (K = m*v**2/2)
  m = 3 kg   [3 kg]
  v = 4 m/s   [4 m/s]
  assumes: speeds far below the speed of light

Search the capabilities by what you want to know; the first column is the id to pass to info and solve.

$ classical-physics search "two resistors in series and in parallel"
two_resistors_series_parallel        Two resistors in series and in parallel  (circuits)
parallel_plate_capacitor             Capacitance of parallel plates  (capacitors)
coupled_fast_mode                    Higher normal-mode frequency of two coupled oscillators  (oscillations)
rl_time_constant                     Time constant of an RL circuit  (induction)
uniform_field_potential              Potential difference in a uniform field  (electrostatics)
elastic_collision_first_final        Final velocity of the first body in a one-dimensional elastic collision  (collisions)
elastic_collision_second_final       Final velocity of the second body in a one-dimensional elastic collision  (collisions)
ohm_power_current                    Power from current and resistance  (circuits)
… 9 more

Every capability the program answers: its id (what you pass to solve) and its name.

$ classical-physics list
uniform_motion                           Motion at constant velocity
velocity_time                            Velocity under constant acceleration
displacement_time                        Displacement under constant acceleration
velocity_displacement                    Speed after a displacement under constant acceleration
average_velocity_displacement            Displacement from the mean of initial and final velocity
newton_second                            Net force and acceleration
weight                                   Weight in a uniform gravitational field
net_force_friction                       Net force with an opposing friction force
… 126 more

5. Solve a capability

Each capability has an id. info shows what it needs; solve takes the inputs as name=value, each value in any unit of the right kind (quote an argument with a space).

What a capability needs

The equation or method, every input and output with its SI unit. Read this before solve: it tells you the input names.

$ classical-physics info two_resistors_series_parallel
Two resistors in series and in parallel
  series resistances add; parallel conductances add
  in   r1       first resistance [ohm]
  in   r2       second resistance [ohm]
  out  rs       series equivalent [ohm]
  out  rp       parallel equivalent [ohm]

Solve

Inputs as name=value, each with any unit of the right kind. The answer lists every output, the method used, each input converted to SI, and the conditions the answer assumes.

$ classical-physics solve two_resistors_series_parallel "r1=6 ohm" "r2=3 ohm"
rs = 9 ohm
rp = 2 ohm
  by: Two resistors in series and in parallel  (series resistances add; parallel conductances add)
  r1 = 6 ohm
  r2 = 3 ohm
  assumes: r1 > 0; r2 > 0

When an input is missing

No number is guessed: the answer names what is missing, shows a complete call, and the program exits with status 1.

$ classical-physics solve two_resistors_series_parallel "r1=6 ohm"
NEEDS_INPUT: two_resistors_series_parallel needs r2 (second resistance). Example: solve('two_resistors_series_parallel', r1='6 ohm', r2='3 ohm').

Solve an equation for another quantity

An equation can be solved for any of its quantities: give the others and name the one you want with –target (here ve).

$ classical-physics solve rocket_delta_v "m0=1000 kg" "mf=400 kg" "dv=2748.87 m/s" --target ve
exhaust velocity (ve) = 2999.997604 m/s
  by: Velocity change of a rocket (Tsiolkovsky)  (dv = ve*log(m0/mf))
  m0 = 1000 kg   [1000 kg]
  mf = 400 kg   [400 kg]
  dv = 2748.87 m/s   [2748.87 m/s]
  assumes: no gravity or drag during the burn; a constant exhaust velocity; the situation is: rocket

Exit status: 0 when the question was answered, 1 when it was not (the message says why: a missing input, an invalid value, a question outside the model), 2 for a command the program does not know.

6. Figures

In the desktop app and on every model page, figures are drawn for your own inputs as soon as you press Compute. On the command line, figures takes the same inputs as solve and writes each figure as an SVG file into the folder given with --out; open them in any browser.

$ classical-physics figures rocket_delta_v "ve=3000 m/s" "m0=1000 kg" "mf=400 kg" --out .
[
  {
    "slug": "rocket-delta-v-live-1",
    "title": "Change in velocity as initial mass varies",
    "caption": "Change in velocity as m0 runs from 437.5 to 1750 kg, every other input as you entered it (36 solutions). Marked: your m0 = 1000 kg gives dv = 2749. Your inputs: ve = 3000 m/s, m0 = 1000 kg, mf = 400 kg.",
    "file": "./rocket-delta-v-live-1.svg"
  },
  {
    "slug": "rocket-delta-v-live-2",
    "title": "Change in velocity as exhaust velocity varies",
    "caption": "Change in velocity as ve runs from 750 to 5250 m/s, every other input as you entered it (29 solutions). Marked: your ve = 3000 m/s gives dv = 2749. Your inputs: ve = 3000 m/s, m0 = 1000 kg, mf = 400 kg.",
    "file": "./rocket-delta-v-live-2.svg"
  }
]

7. Explanations

Under each answer, the desktop app and the model pages say in plain words what the result means, with your own numbers in it. Each model page also explains every capability: what it does, what it needs, when it applies and why the worked example comes out as it does.

8. Scripts and agents

--json prints one answer as one line of JSON (values in SI units). batch reads one request per line and writes one JSON answer per line, in order, starting the program once. catalog prints every capability with its inputs as JSON, to build forms or tool definitions. In PowerShell, pipe a file in with Get-Content cases.jsonl | classical-physics batch.

$ classical-physics solve two_resistors_series_parallel "r1=6 ohm" "r2=3 ohm" --json
{"outcome":"SOLVED","message":"","value":9.0,"unit":"ohm","solved_for":"rs","si":[["r1",6.0],["r2",3.0]],"values":[["rs",9.0,"ohm"],["rp",2.0,"ohm"]],"target":"rs","phrase":"series equivalent","assumptions":["r1 > 0","r2 > 0"],"name":"Two resistors in series and in parallel","equation":"series resistances add; parallel conductances add"}
cases.jsonl
{"key": "two_resistors_series_parallel", "inputs": {"r1": "6 ohm", "r2": "3 ohm"}}
{"key": "rocket_delta_v", "inputs": {"ve": "3000 m/s", "m0": "1000 kg", "mf": "400 kg"}}
$ classical-physics batch < cases.jsonl
{"outcome":"SOLVED","message":"","value":9.0,"unit":"ohm","solved_for":"rs","si":[["r1",6.0],["r2",3.0]],"values":[["rs",9.0,"ohm"],["rp",2.0,"ohm"]],"target":"rs","phrase":"series equivalent","assumptions":["r1 > 0","r2 > 0"],"name":"Two resistors in series and in parallel","equation":"series resistances add; parallel conductances add"}
{"outcome":"SOLVED","message":"","value":2748.8721956224654,"unit":"m/s","solved_for":"dv","si":[["ve",3000.0],["m0",1000.0],["mf",400.0]],"target":"dv","phrase":"change in velocity","assumptions":["no gravity or drag during the burn","a constant exhaust velocity","the situation is: rocket"],"name":"Velocity change of a rocket (Tsiolkovsky)","equation":"dv = ve*log(m0/mf)"}

9. Offline use

The desktop app and the command-line programs compute everything on your computer: no network connection, no account and no Python are needed, and nothing you type is sent anywhere. The same compiled programs run in your browser on each model page, as WebAssembly, also on your own device.

10. Versions and checksums

This is version 1.1.0 of the desktop app and the command-line bundle; each model has its own version, printed by classical-physics --version and shown in the desktop app. Check a download before you run it:

sha256sum -c --ignore-missing SHA256SUMS            # Linux: prints OK for each file
Get-FileHash <file> -Algorithm SHA256          # Windows: compare with the line in SHA256SUMS

Every version stays at https://www.ai999x.com/downloads/desktop/<version>/; the newest is also at latest/. To update, download the new version and replace the old folder. To uninstall, delete the folder (and, for the command line, remove it from your PATH).

11. Every model's program

ModelProgramCapabilities
Aerospace Engineeringaerospace-engineering80
Astronomyastronomy67
Bayesian Statisticsbayesian-statistics78
Biomedical Sciencebiomedical-science86
Calculuscalculus71
Chemical Engineeringchemical-engineering91
Chemistrychemistry103
Civil Engineeringcivil-engineering88
Classical Physicsclassical-physics134
Computational Biologycomputational-biology83
Data Science and Machine Learningdata-science-ml107
Differential Equationsdifferential-equations77
Discrete Mathdiscrete-math99
Earth Scienceearth-science85
Economics and Financeeconomics-finance96
Electrical Engineeringelectrical-engineering64
Energy Systemsenergy-systems79
Geometrygeometry76
Geospatial Analyticsgeospatial-analytics99
Linear Algebralinear-algebra89
Materials Sciencematerials-science87
Math Foundationsmath-foundations100
Mechanical Engineeringmechanical-engineering90
Nuclear Engineeringnuclear-engineering83
Optimizationoptimization72
Quantum Physicsquantum-physics75
Signal Processingsignal-processing74
Statisticsstatistics110
Thermofluidsthermofluids99
Time Seriestime-series77
Transportationtransportation77

Each model page has the full list of its capabilities, every one with a command and what the program printed for it, and a Rust user guide (PDF) with the same.

12. Help

Questions and reports: support@ai999x.com. Prefer Python? Every model is also a Python package: pip install <model>-ai999x; see its model page.