Architecture
This page aims to give a short technical overview of the architecture of OSCAR. A more in-depth overview of the various components of OSCAR is given on the OSCAR homepage.
Julia packages
OSCAR is developed as a pure julia package Oscar.jl
and builds on the features and interfaces provided by the julia packages for the cornerstones:
The packages are integrated into the julia package manager and will be installed automatically as dependencies of OSCAR. They can be accessed directly by their names once OSCAR is loaded.
The current versions of these packages can be inspected with the Oscar.versioninfo
command:
julia> Oscar.versioninfo()
OSCAR version 1.3.0-DEV combining: AbstractAlgebra.jl v0.44.1 GAP.jl v0.12.2 Hecke.jl v0.35.0 Nemo.jl v0.48.0 Polymake.jl v0.11.23 Singular.jl v0.24.1
Binary packages for non-julia libraries
In addition to the pure julia packages, OSCAR builds on many non-julia libraries for the cornerstones (FLINT, GAP, polymake, Singular) and their dependencies.
Both Polymake.jl and Singular.jl use CxxWrap.jl together with the corresponding libcxxwrap-julia
library as an intermediate layer between the julia packages and the C / C++ libraries.
All dependencies have been integrated into the BinaryBuilder ecosystem which provides precompiled binaries for all supported architectures. The build-recipes are maintained in julia's Yggdrasil repository. These are used to automatically build binary artifacts together with the corresponding jll
packages which allow automatic installation of all required binaries as dependencies for OSCAR.
The binary packages can be found under the JuliaBinaryWrappers organization. Each repository has an autogenerated Readme file which gives some details on the original sources, supported platforms, and dependencies.
The Oscar.versioninfo
function can also include the versions of all binary packages that are maintained by the OSCAR developers:
julia> Oscar.versioninfo(jll=true)
OSCAR version 1.3.0-DEV combining: AbstractAlgebra.jl v0.44.1 GAP.jl v0.12.2 Hecke.jl v0.35.0 Nemo.jl v0.48.0 Polymake.jl v0.11.23 Singular.jl v0.24.1 building on: FLINT_jll v300.100.301+0 GAP_jll v400.1300.102+2 Singular_jll v404.1.700+0 libpolymake_julia_jll v0.13.0+0 libsingular_julia_jll v0.46.1+0 polymake_jll v400.1300.2+0 See `]st -m` for a full list of dependencies.
For a full list of all dependencies of the current project please use using Pkg; Pkg.status(mode=PKGMODE_MANIFEST)
or the Pkg REPL command ]st -m
.
versioninfo
— FunctionOscar.versioninfo(io::IO=stdout; branch=false, jll=false, julia=false, commit=false, full=false)
Print the versions of all Oscar-related dependencies.
Arguments
branch::Bool=false
: include git branch name in the outputcommit::Bool=false
: include git commit hash and date where applicablejll::Bool=false
: include binary packages (jll) in the outputjulia::Bool=false
: include juliaversioninfo
outputfull::Bool=false
: include all of the above