Metadata-Version: 2.4
Name: lcsim
Version: 0.1.5
Summary: LCSim - liquid crystal simulator.
Project-URL: Repository, https://gitlab.com/alepoydes/lcsim
Project-URL: Issues, https://gitlab.com/alepoydes/lcsim/-/issues
Author-email: Igor Lobanov <lobanov.igor@gmail.com>
License-Expression: MIT
License-File: LICENSE.md
Keywords: dynamics,liquid crystal,physics
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Scientific/Engineering :: Physics
Requires-Python: <3.14,>=3.10
Requires-Dist: numpy>=2.1
Requires-Dist: rich>=13.9.4
Requires-Dist: topovec>=0.1.9
Provides-Extra: all-cu
Requires-Dist: ffmpeg-python; extra == 'all-cu'
Requires-Dist: moderngl>=5.12.0; extra == 'all-cu'
Requires-Dist: numba-cuda[cu13]; extra == 'all-cu'
Requires-Dist: numba>=0.61; extra == 'all-cu'
Requires-Dist: requests; extra == 'all-cu'
Requires-Dist: sadcompressor>=0.1.1; extra == 'all-cu'
Requires-Dist: scipy>=1.15.2; extra == 'all-cu'
Requires-Dist: topovec[cuda]; extra == 'all-cu'
Requires-Dist: topovec[render,sad,ti]; extra == 'all-cu'
Requires-Dist: topovec[sad,ti,video,view]; extra == 'all-cu'
Requires-Dist: topovec[sad]; extra == 'all-cu'
Requires-Dist: topovec[view]; extra == 'all-cu'
Provides-Extra: all-cu12
Requires-Dist: ffmpeg-python; extra == 'all-cu12'
Requires-Dist: moderngl>=5.12.0; extra == 'all-cu12'
Requires-Dist: numba-cuda[cu12]; extra == 'all-cu12'
Requires-Dist: numba>=0.61; extra == 'all-cu12'
Requires-Dist: requests; extra == 'all-cu12'
Requires-Dist: sadcompressor>=0.1.1; extra == 'all-cu12'
Requires-Dist: scipy>=1.15.2; extra == 'all-cu12'
Requires-Dist: topovec[render,sad,ti]; extra == 'all-cu12'
Requires-Dist: topovec[sad,ti,video,view]; extra == 'all-cu12'
Requires-Dist: topovec[sad]; extra == 'all-cu12'
Requires-Dist: topovec[view]; extra == 'all-cu12'
Provides-Extra: all-cu13
Requires-Dist: ffmpeg-python; extra == 'all-cu13'
Requires-Dist: moderngl>=5.12.0; extra == 'all-cu13'
Requires-Dist: numba-cuda[cu13]; extra == 'all-cu13'
Requires-Dist: numba>=0.61; extra == 'all-cu13'
Requires-Dist: requests; extra == 'all-cu13'
Requires-Dist: sadcompressor>=0.1.1; extra == 'all-cu13'
Requires-Dist: scipy>=1.15.2; extra == 'all-cu13'
Requires-Dist: topovec[cuda]; extra == 'all-cu13'
Requires-Dist: topovec[render,sad,ti]; extra == 'all-cu13'
Requires-Dist: topovec[sad,ti,video,view]; extra == 'all-cu13'
Requires-Dist: topovec[sad]; extra == 'all-cu13'
Requires-Dist: topovec[view]; extra == 'all-cu13'
Provides-Extra: dev
Requires-Dist: pytest>=8.3; extra == 'dev'
Provides-Extra: gpu-cu12
Requires-Dist: numba-cuda[cu12]; extra == 'gpu-cu12'
Requires-Dist: numba>=0.61; extra == 'gpu-cu12'
Provides-Extra: gpu-cu13
Requires-Dist: numba-cuda[cu13]; extra == 'gpu-cu13'
Requires-Dist: numba>=0.61; extra == 'gpu-cu13'
Requires-Dist: topovec[cuda]; extra == 'gpu-cu13'
Provides-Extra: gpu-legacy
Requires-Dist: numba<0.63,>=0.61; extra == 'gpu-legacy'
Provides-Extra: gui
Requires-Dist: topovec[view]; extra == 'gui'
Provides-Extra: gui-cu12
Requires-Dist: numba-cuda[cu12]; extra == 'gui-cu12'
Requires-Dist: numba>=0.61; extra == 'gui-cu12'
Requires-Dist: topovec[view]; extra == 'gui-cu12'
Provides-Extra: gui-cu13
Requires-Dist: numba-cuda[cu13]; extra == 'gui-cu13'
Requires-Dist: numba>=0.61; extra == 'gui-cu13'
Requires-Dist: topovec[cuda]; extra == 'gui-cu13'
Requires-Dist: topovec[view]; extra == 'gui-cu13'
Provides-Extra: gui-legacy
Requires-Dist: numba<0.63,>=0.61; extra == 'gui-legacy'
Requires-Dist: topovec[view]; extra == 'gui-legacy'
Provides-Extra: legacy-render
Requires-Dist: ffmpeg-python; extra == 'legacy-render'
Requires-Dist: moderngl>=5.12.0; extra == 'legacy-render'
Requires-Dist: sadcompressor>=0.1.1; extra == 'legacy-render'
Provides-Extra: optics
Requires-Dist: scipy>=1.15.2; extra == 'optics'
Provides-Extra: render
Requires-Dist: topovec[render,sad,ti]; extra == 'render'
Provides-Extra: run-cu12
Requires-Dist: numba-cuda[cu12]; extra == 'run-cu12'
Requires-Dist: numba>=0.61; extra == 'run-cu12'
Requires-Dist: sadcompressor>=0.1.1; extra == 'run-cu12'
Requires-Dist: topovec[sad]; extra == 'run-cu12'
Provides-Extra: run-cu13
Requires-Dist: numba-cuda[cu13]; extra == 'run-cu13'
Requires-Dist: numba>=0.61; extra == 'run-cu13'
Requires-Dist: sadcompressor>=0.1.1; extra == 'run-cu13'
Requires-Dist: topovec[cuda]; extra == 'run-cu13'
Requires-Dist: topovec[sad]; extra == 'run-cu13'
Provides-Extra: run-legacy
Requires-Dist: numba<0.63,>=0.61; extra == 'run-legacy'
Requires-Dist: sadcompressor>=0.1.1; extra == 'run-legacy'
Requires-Dist: topovec[sad]; extra == 'run-legacy'
Provides-Extra: run-notify
Requires-Dist: requests; extra == 'run-notify'
Provides-Extra: sad
Requires-Dist: sadcompressor>=0.1.1; extra == 'sad'
Requires-Dist: topovec[sad]; extra == 'sad'
Provides-Extra: test
Requires-Dist: pytest>=8.3; extra == 'test'
Provides-Extra: tests
Requires-Dist: pytest>=8.3; extra == 'tests'
Provides-Extra: view
Requires-Dist: sadcompressor>=0.1.1; extra == 'view'
Requires-Dist: topovec[sad,ti,video,view]; extra == 'view'
Description-Content-Type: text/markdown

# LCSim

Liquid crystal simulation tools and command-line utilities.

## Installation

LCSim is published on PyPI. For regular use, install it as a `uv` tool.
Detailed OS-specific instructions:

- Windows: [WINDOWS-INSTALL.md](WINDOWS-INSTALL.md)
- Ubuntu: [UBUNTU-INSTALL.md](UBUNTU-INSTALL.md)

The default dependency set is intentionally light: it is enough for the
`lcsim` dispatcher and shared Python code, but not for running simulations,
opening the GUI, viewing files, or rendering videos. Install one profile for
the workflow you actually use. Do not install every extra at once: CUDA profiles conflict by design.
For every runtime mode in one environment, use `all-cu` (`all-cu13`) or
`all-cu12`. For one mode, use a convenience profile such as `run-cu13` or `gui-cu13`.
For a mixed environment, choose one low-level GPU extra such as `gpu-cu13` and
add non-conflicting feature extras (`sad`, `gui`, `view`, `render`, `run-notify`) around it.

Recommended PyPI tool installs:

```sh
# All runtime modes, recommended CUDA 13 profile.
uv tool install 'lcsim[all-cu]'

# Batch simulation, recommended CUDA 13 profile.
uv tool install 'lcsim[run-cu13]'

# Interactive GUI, recommended CUDA 13 profile.
uv tool install 'lcsim[gui-cu13]'

# New TopoVec-based renderer for SAD/TopoVec state files.
uv tool install 'lcsim[render]'

# Saved-file viewer with LCSIM scenes and TopoVec scenes.
uv tool install 'lcsim[view]'

# Optional Telegram notifications for `lcsim run`.
uv tool install 'lcsim[run-cu13,run-notify]'

# Combined run + GUI environment with one shared GPU profile.
uv tool install 'lcsim[gpu-cu13,sad,gui]'
```

`all-cu` and `all-cu13` install the CUDA 13 runtime, TopoVec CUDA backend,
`lcsim run`, `lcsim gui`, `lcsim view`, `lcsim render`, run notifications,
optics, and legacy renderer Python dependencies. `all-cu12` keeps the lcsim
runtime on the CUDA 12 family and omits TopoVec's CUDA 13-only CUDA backend.
Legacy `lcsrender` still needs a system `ffmpeg` executable on `PATH`.

For one-off execution without installing persistent commands:

```sh
uvx --from 'lcsim[run-cu13]' lcsim run --help
uvx --from 'lcsim[gui-cu13]' lcsim gui --help
```

From a repository checkout, use the same extras with `uv sync --extra ...` and
run commands with `uv run ...`.

## Command-line tools

The primary public entry point is now `lcsim`:

```sh
lcsim --help
lcsim run --help
lcsim gui --help
lcsim view --help
lcsim render --help
```

Typical usage:

```sh
# Run an off-screen simulation.
lcsim run --preset consym --history HISTORY.json --period 10 --output --sad

# Open the interactive viewer.
lcsim gui

# View a saved simulation state; read-only Settings appear beside Data Sources.
lcsim view run.sad

# Render a SAD file with simulation-time video sampling.
lcsim render run.sad --scene "Jones RGB" --output run.mp4 --fps 25
```

Legacy commands remain available as compatibility wrappers, but they print a
deprecation notice:

- [`lcsrun`](doc/lcsrun.md): use `lcsim run ...` for new workflows.
- [`lcsgui`](doc/lcsgui.md): use `lcsim gui ...` for new workflows.
- [`lcsrender`](doc/lcsrender.md): legacy renderer; use `lcsim render ...` for the new renderer.
- `lcsoptics`: optional optics utility. Install the `optics` extra if you want to use it.

Legacy `lcsrender` requires a system `ffmpeg` executable on `PATH`; the new
`lcsim run` path writes SAD and leaves video generation to `lcsim render`.
