- Remove GAP function
JuliaModule
(useJulia.MODULENAME
etc. instead) - Remove GAP function
JuliaFunction
(useJulia.FUNCNAME
etc. instead) - Support keyword arguments in
CallJuliaFunctionWithCatch
- Stop wrapping Julia modules on the GAP side in special objects
- Rewrite
julia_to_gap
, in order to- make the installation of new conversion methods from Julia to GAP simpler and safer and
- restrict the necessity to create dictionaries to situations where
recursive conversions make sense.
For that, the function
GAP.GapObj_internal
, the macroGAP.@install
, and the typeGapCacheDict
were introduced.
- Many internal changes and refactoring that should have no user facing effect but will simplify future updates
- Support AbstractAlgebra 0.43
- Fix the availability check in
Packages.install
to handle transitive dependencies - Add dependency on AbstractAlgebra
- Replace banner hiding code with the improved version from AbstractAlgebra
- Adjust
show
method for GAP objects to make use of AbstractAlgebra pretty printing
- Update to GAP 4.13.1
- Add
GetJuliaScratchspace
toJuliaInterface
- Enhance
Packages.install
- Fix access to Julia docstrings from the GAP session
- Restore compatibility with Julia nightly (for now)
- Remove the GAP user preference
IncludeJuliaStartupFile
that was used to control whether~/.julia/config/startup.jl
gets included by Julia when GAP is started together with Julia via agap.sh
script. In this situation, one can now use the environment variableJULIA_STARTUP_FILE_IN_GAP
; if its value isyes
then the startup file gets included, otherwise not. - Various janitorial changes
- Optimize conversion from
UInt
toGapObj
- Allow
GapInt(x)
as shorthand for producing a GAP integer - Show an error when trying to load GAP.jl while multithreaded GC is enabled
- Support
gap_to_julia(::AbstractVector)
- Enhance
@wrap
so that it can produce wrapper functions which coerce arguments to GAP objects (see its docstring for details and examples) - Various janitorial changes
- Update to GAP 4.13.0
- Removed bundled
etc/BuildPackages.sh
(no longer needed) - Fix GAP help access for Julia nightly
- Various janitorial changes
- Fix TAB completion for e.g. 'GAP.Globals.MTX.S' in Julia >= 1.11
- Add
GAP.Packages.locate_package
- Enhance
GAP.Packages.load
to accept a URL string for theinstall
keyword argument (see its documentation for details) - Change package downloader code to a custom Downloader object to work around certain technical issues in Julia 1.10 and upwards
- Optimize GAP function calls
- Improve type stability in a bunch of places
- Enhance
GAP.Packages.install
to work right if multiple Julia processes invoke it to install the same package simultaneously - Various janitorial changes
- Add
hasbangindex
,hasbangproperty
- Change
hash(::GapObj)
to throw an error (no general non-trivial hashing is possible for general GAP objects) - Remove support for conversion to
AbstractString
(it was not meaningful anyway, and hopefully nobody used it; but if you did, just convert toString
instead for an identical outcome) - Teach
InteractiveUtils.edit
about GAP function - Add options to
GAP.Package.install
etc. to help debug issues with it - Various janitorial changes
- Allow GAP.Obj(x,true) for recursive conversion (#910. #925)
- Improve documentation on special GAP syntax (#922, #929, #932)
- Work around a potential crash when GAP launches subprocesses (#906)
- If the environment variable
GAP_BARE_DEPS
is set, then GAP skips loading any of its packages, except for JuliaInterface (#912) - Various janitorial changes
- Allow passing a path to
GAP.Packages.load
instead of a package name - Quote
@gap
andg_str
results, to make those macros useful in functions (not just in the REPL) - Improve documentation of
evalstr_ex
,evalstr
- Reduce the occurrences of
evalstr
in docstrings - Prevent a race condition when doing
@everywhere using GAP
- Various janitorial changes
- Fix compatibility issues with upcoming Julia 1.10-DEV
- Various janitorial changes
- Allow iterating over Julia objects from within GAP
- Various janitorial changes
- Tweak @gapattribute to not require
import GAP: @gapwrap
- Update OSCAR URL
- Update package archives to a newer version (corresponding to GAP 4.12.2 plus some updates). Among other things this should fix troubles using GAP.jl under WSL.
- Catch
Downloads.download
errors, for better feedback when trying to install GAP packages while offline - Update bundled
BuildPackages.sh
script to match GAP 4.12.2 - Fix building digraphs and a few other GAP packages
- Silence scary warning about missing compiler
- Prepare for an upcoming change to serialization in Julia 1.10
Packages.install
and thus alsoPackages.load
with argumentinstall = true
admit prescribing a version number of the package to be loaded/installed- Document
recursive
keyword argument forGAP.Obj
andGAP.GapObj
- Added a longer example for using GAP.jl, based around the Rubik's cube
- Fix some type minor stability issues
- Update go GAP 4.12.1.
- Better (?) fix for the race condition the previous release was supposed to address
- Avoid a race condition when loading GAP.jl concurrently in multiple processes
- Improve the
gap_to_julia
andjulia_to_gap
documentation by providing an explicit list of types for which conversions are provided in GAP.jl (this information was already available in GAP manual forJuliaInterface
, but not on the Julia side) - Use
Scratch.jl
for the GAP root directory to hopefully avoid issues on systems where the Julia depot is read-only - Fix banner printing issues in Julia >= 1.8
- Install a
GAP.Globals.Download
method if possible (will have an effect once we start to ship the latest version of the GAP packageutils
)
- Switch GAP.Packages test to use
fga
instead ofio
- Add
getbangindex
,setbangindex!
,getbangproperty
,setbangproperty!
, helpers to access to internals of positional and component objects - Optimize speed of calls to GAP function without arguments
- Fix
Packages.install
to deal with more kinds of download errors (e.g. when the user is offline)
- Upgrade to newer GAP snapshot
- Give helpful error if
GAP_jll
is not available - Allow assigning Julia variables in arbitrary Julia modules from GAP.
For example
Julia.x := 1
sets the variablex
in theMain
module, as doesJulia.Main.x := 1
. - Change
@gapattribute
to use prefixeshas_
andset_
instead ofhas
andset
. So for example for@gapattribute isfinite(obj) = ...
the tester function now ishas_isfinite
instead ofhasisfinite
and the setter function isset_isfinite
instead ofsetisfinite
. - Remove
Base.big(obj::GapObj)
: nothing was using it and it does not really fit conceptually into this package. - Implement tab completion on GAP prompts for Julia module members;
so e.g. typing
Julia.GA
followed by a tab key press is completed toJulia.GAP
, andJulia.GAP.
then suggests the names of all members of theGAP
module - Fix a bug where a warning issues when no C/C++ compiler could be found was accidentally turned into an error that prevented loading GAP.jl. Note that installing certain GAP packages still requires a C/C++ compiler.
- Add
quiet
argument toPackages.load
- Fix compatibility with Julia nightly
- Replace some calls to low-level GAP functions by high-level synonyms, for better compatibility with future GAP releases
- Improve how we show the error messaged triggered by a user trying to load GAP.jl on native Windows (which isn't supported)
- Rewrite
@wrap
,@gapwrap
and@gapattribute
to be better compatible with future Julia versions.
- Improve type stability of the code for converting from GAP to Julia objects; now in many cases code calling it will get precise information about the result type, enabling better optimizations
- Fixed a bug in
@gapattribute
that manifested in a runtime error
- Better banner suppression logic
- Restore use of
GAP_pkg_juliainterface_jll
(accidentally broken in the previous release)
- Restore compatibility with Julia nightlies
- Use
GAP_pkg_juliainterface_jll
to install a compiled version of the bundled C code, thus for basic use of GAP.jl no C/C++ compiler is needed anymore; this also avoids compatibility issues when switching back and forth between Julia 1.6 and 1.7 - Add support for REPL tab completion on members of
GAP.Globals
; e.g. if you enterGAP.Globals.MTX.Is
into the REPL and press the TAB key twice, you should be offered a list of members of the recordGAP.Globals.MTX
whose name starts withIs
. - Fix a bug where running GAP through Julia via a
gap.sh
wrapper created usingGAP.create_gap_sh
could produce an error (specifically when aQUIT
statement is encountered while processing a GAP file by passing its path as argument togap.sh
) - Fix printing of certain containers; e.g.
repr(GAP.GapObj[])
confusingly produced the string"GAP_jll.MPtr[]"
; it now gives"GapObj[]"
resp."GAP.GapObj[]"
(depending on whetherusing GAP
orimport GAP
were used to load GAP.jl)
- Fix compatibility with Julia 1.6.0 and 1.6.1. (Note that we recommend using Julia 1.6.3 or newer anyway)
- Improve the GAP.jl manual; in particular, it now includes the manual of the JuliaInterface GAP package
- Optimize conversion of Julia ranges to GAP
- Update to a slightly newer GAP 4.12dev snapshot
This is the first release of the 0.7.x series. It contains the following breaking changes compared to the 0.6.x release:
- Require Julia 1.6 or later.
- Remove
LoadPackageAndExposeGlobals
. If you are using this, see #696 for alternatives. - Remove all
convert
methods. If you were usingconvert(GapObj, val)
, you can useGapObj(val)
orjulia_to_gap(val)
instead. If you were usingconvert(T,gapobj)
, useT(gapobj)
orjulia_to_gap(gapobj)
instead. - Remove
GAP.gap_exe()
. Instead please useGAP.create_gap_sh(path)
. - Remove GAP function
IsArgumentForJuliaFunction
. No replacement should be necessary. - Remove GAP function
ImportJuliaModuleIntoGAP
. As a replacement, useJuliaEvalString("import MODULENAME")
. - Restrict
GapObj
constructor by adding a return type annotation that ensures only values of typeGapObj
are returned. If you relied on this also returningInt
,Bool
orFFE
, please use theGAP.Obj
constructor instead. If you relied on also Julia objects being returned, you should probably revise your code; but if you determine that you still really really have to do this, you can by usingjulia_to_gap
.
Other changes:
- Add
GapInt
type union - Patch the GAP package manager to perform downloads via Julia's
Downloads.download
to avoid certain failure scenarios - Add
@wrap
macro as an alternative to@gapwrap
for certain use cases. - Don't show the GAP banner if Julia is started with the
--quiet
flag - Call the GAP AtExit handler when exiting Julia, so that e.g. the command line history is saved (if the user enabled this in their preferences) or temporary directories are removed.
- Many internal changes and refactoring
- use latest versions of
GAP_jll
,GAP_lib_jll
- Add GAP.prompt() function which gives a GAP prompt inside Julia
- Add support for Julia keyword arguments on the GAP side
- Overload the Julia 'in' operator for GAP objects
- Add conversion constructors for various Julia types, to allow for more idiomatic Julia code accessing GAP objects
- Improve GAP <-> Julia conversion
- Show the GAP banner again by default, unless we are being loaded from Oscar.jl
- Switch to Julia "artifact" system for downloading the GAP sources, which can save time and disk space when rebuilding or reinstalling GAP.jl
- Complete overhaul of the build process for GAP, making it more robust
- Ensure that we link against the same GMP and readline as other components of OSCAR do
- Remove the implicit dependency on LinearAlgebra.jl
- Fix a bunch of minor bugs
- Various janitorial changes