Release Notes
0.9.23 (2024-08-22)
- Bug fixes.
0.9.22 (2024-08-07)
- Finalizers are now thread-safe, meaning PythonCall now works in the presence of multi-threaded Julia code. Previously, tricks such as disabling the garbage collector were required. Python code must still be called on the main thread.
GC.disable()
andGC.enable()
are now a no-op and deprecated since they are no longer required for thread-safety. These will be removed in v1.- Adds
GC.gc()
. - Adds module
GIL
withlock()
,unlock()
,@lock
and@unlock
for handling the Python Global Interpreter Lock. In combination with the above improvements, these allow Julia and Python to co-operate on multiple threads. - Adds method
_jl_call_nogil
tojuliacall.AnyValue
andjuliacall.RawValue
to call Julia functions with the GIL unlocked.
0.9.21 (2024-07-20)
Serialization.serialize
can usedill
instead ofpickle
by setting the env varJULIA_PYTHONCALL_PICKLE=dill
.numpy.bool_
can now be converted toBool
and other number types.datetime.timedelta
can now be converted toDates.Nanosecond
,Microsecond
,Millisecond
andSecond
. This behaviour was already documented.- In JuliaCall, the Julia runtime is now properly terminated when Python exits. This means all finalizers should always run.
- NULL Python objects (such as from
pynew()
) can be safely displayed in multimedia contexts (VSCode/Pluto/etc.)
0.9.20 (2024-05-01)
- The IPython extension is now automatically loaded upon import if IPython is detected.
- JuliaCall now compatible with Julia 1.10.3.
- Minimum supported Python version is now 3.8.
0.9.19 (2024-03-19)
- Bug fixes.
0.9.18 (2024-03-18)
- Bug fixes.
0.9.17 (2024-03-16)
- Bug fixes.
0.9.16 (2024-03-14)
- Big internal refactor.
- New unexported functions:
python_executable_path
,python_library_path
,python_library_handle
andpython_version
. Py
is now treated as a scalar when broadcasting.PyArray
is now serializable.- Removed compatibility with Julia 1.10.1 and 1.10.2 (to be fixed in 1.10.3 and 1.11.0) due to an upstream bug.
- Bug fixes.
0.9.15 (2023-10-25)
- JuliaCall now supports
-X juliacall-startup-file=no
to disable running startup.jl. - If you are using CondaPkg then Python can optionally now be installed from the anaconda channel (instead of only conda-forge).
- Bug fixes.
0.9.14 (2023-07-26)
- Wrapped Julia values support truthiness (
__bool__
) better: all values are true, except for zero numbers and empty arrays, dicts and sets. - JuliaCall now supports the Julia
--handle-signals
option. Setting this toyes
allows allocating multithreaded Julia code to be called from JuliaCall without segfaulting. The default isno
while compatibility concerns are investigated, and may be changed toyes
in a future release.
0.9.13 (2023-05-14)
- Conversion to wrapper types
PyList
,PySet
,PyDict
orPyIterable
now default to having element typeAny
instead ofPy
. - The
__repr__
method of wrapped Julia objects now uses the 3-arg show method for nicer (richer and truncated) display at the Python REPL. - The IPython extension can now be loaded as just
%load_ext juliacall
. - The
%%julia
IPython magic can now synchronise variables between Python and Julia. - Bug fixes.
0.9.12 (2023-02-28)
- Bug fixes.
0.9.11 (2023-02-15)
- In
PyArray{T}(x)
, the eltypeT
no longer needs to exactly match the stored data type. Ifx
has numeric elements, then any number typeT
is allowed. Ifx
has string elements, then any string typeT
is allowed. StaticString
(the inline string type used byPyArray
) supports theAbstractString
interface better.
0.9.10 (2022-12-02)
- Bug fixes.
0.9.9 (2022-10-20)
- Bug fixes.
0.9.8 (2022-10-18)
- Adds
line_buffering
option toPyIO
. - Improvements to stdout when using
juliacall.ipython
including line-buffering.
0.9.7 (2022-10-11)
- If CondaPkg is using the Null backend, PythonCall will now use
python
from the PATH. - Bug fixes.
0.9.6 (2022-09-09)
- When using JuliaCall from an interactive Python session, Julia is put into interactive mode:
isinteractive()
is true, InteractiveUtils is loaded, and a nicer display is used. - Wrapped Julia values now truncate their output when displayed via
_repr_mimebundle_
. - Numpy arrays with structured dtypes can now be converted to
PyArray
, provided the fields are aligned. - Python named tuples can be converted to Julia named tuples.
- Bug fixes.
0.9.5 (2022-08-19)
- Adds
PythonCall.GC.disable()
andPythonCall.GC.enable()
. - Experimental new function
juliacall.interactive()
allows the Julia async event loop to run in the background of the Python REPL. - Experimental new IPython extension
juliacall.ipython
providing the%julia
and%%julia
magics for executing Julia code. - Experimental new module
juliacall.importer
allowing you to write Python modules in Julia. - Bug fixes.
0.9.4 (2022-07-26)
- Bug fixes.
0.9.3 (2022-07-02)
- Bug fixes.
0.9.2 (2022-07-02)
- Many Julia CLI options (such sysimage or number of threads) can be set from JuliaCall.
- Bug fixes.
0.9.1 (2022-06-18)
PyArray
can be constructed using the__array_struct__
part of the Numpy array interface. ConstructingPyArray(x)
is now about 50x faster, or 175x faster if you fully specify the type.- JuliaCall can now be imported on Apple M1.
0.9.0 (2022-05-27)
- Breaking. Removes
getpy
: you may now overloadPy
directly, which now need not always return a new object (e.g. for singletons or wrappers). - Breaking. Conversion rules no longer take a new object every time.
- Breaking. Improved Tables-interface support for
PyPandasDataFrame
: better inferred column types; better handling of non-string column names; columns are usually wrappers (PyArray
orPyList
). Constructor arguments have changed. Dict methods have been removed (basically only the Tables interface is supported). - Breaking. A
Py
which is convertible toPyTable
is no longer considered to be a table itself; you must convert explicitly. - Adds
pyhasitem
and 3-argpygetitem
. - Extends
Base.get
,Base.get!
,Base.haskey
and 2-argBase.hash
forPy
. PyArray
can now have any element type when the underlying array is of Python objects.- Adds
ArrayValue.to_numpy()
. - Bug fixes.
v0.8.0 (2022-03-17)
- Breaking: Removes
pymethod
andpyclass
. In the future,pyclass
may become sugar fortypes.new_class
(namely you can specify a metaclass). - Adds
pyfunc
,pyclassmethod
,pystaticmethod
andpyproperty
. pyconvert_add_rule
is now documented. Its semantics have changed, including the separator of the first argument from/
to:
.- A pandas
<NA>
value is now converted tomissing
. - A
NaN
in aPyPandasDataFrame
is converted tomissing
. - Breaking: Removes
using
andAs
from JuliaCall. - Adds
convert
to JuliaCall (replacingAs
). - Bug fixes.
v0.6.1 (2022-02-21)
- Conversions from simple ctypes types, e.g.
ctypes.c_float
toCfloat
. - Conversions from simple numpy types, e.g.
numpy.float32
toFloat32
. - Bug fixes.
v0.6.0 (2022-02-17)
- Breaking: JuliaCall now uses JuliaPkg to manage Julia dependencies.
- Bug fixes.
v0.5.1 (2022-01-24)
- Bug fixes.
v0.5.0 (2021-12-11)
- Breaking: PythonCall now uses CondaPkg to manage Python dependencies.
- Python objects can be shared with PyCall provided it uses the same interpreter, using methods
PythonCall.Py(::PyCall.PyObject)
andPyCall.PyObject(::PythonCall.Py)
. - Adds
PythonDisplay
which displays objects by printing to Python'ssys.stdout
. Used automatically in IPython in addition toIPythonDisplay
. - Removes the
GLOBAL
mode from@pyexec
. Useglobal
in the code instead. - Bug fixes.