diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..d60f070 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" # Location of package manifests + schedule: + interval: "monthly" diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 3d9a89b..0f1e650 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -24,7 +24,7 @@ jobs: arch: - x64 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: julia-actions/setup-julia@latest with: version: ${{ matrix.version }} diff --git a/.github/workflows/TagBot.yml b/.github/workflows/TagBot.yml index 778c06f..90dc100 100644 --- a/.github/workflows/TagBot.yml +++ b/.github/workflows/TagBot.yml @@ -4,6 +4,22 @@ on: types: - created workflow_dispatch: + inputs: + lookback: + default: 3 +permissions: + actions: read + checks: read + contents: write + deployments: read + issues: read + discussions: read + packages: read + pages: read + pull-requests: read + repository-projects: read + security-events: read + statuses: read jobs: TagBot: if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot' @@ -12,3 +28,6 @@ jobs: - uses: JuliaRegistries/TagBot@v1 with: token: ${{ secrets.GITHUB_TOKEN }} + # Edit the following line to reflect the actual name of the GitHub Secret containing your private key + ssh: ${{ secrets.DOCUMENTER_KEY }} + # ssh: ${{ secrets.NAME_OF_MY_SSH_PRIVATE_KEY_SECRET }} diff --git a/README.md b/README.md index 818c53e..d9dd41e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## MATLAB -| ❗ Windows and MacOS platforms : MATLAB versions R2022 and R2023 do not work with `MATLAB.jl` ❗
You can use older versions as explained [further down](https://github.com/JuliaInterop/MATLAB.jl#changing-matlab-version). | +| ❗ If you get a 'Segmentation fault' error when calling MATLAB with version R2022 or newer, try using an [older version](https://github.com/JuliaInterop/MATLAB.jl#changing-matlab-version) of MATLAB. ❗ | |:----:| The `MATLAB.jl` package provides an interface for using [MATLAB®](http://www.mathworks.com/products/matlab/) from [Julia](http://julialang.org) using the MATLAB C api. In other words, this package allows users to call MATLAB functions within Julia, thus making it easy to interoperate with MATLAB from the Julia language. diff --git a/src/mxarray.jl b/src/mxarray.jl index ae77272..cb423bc 100644 --- a/src/mxarray.jl +++ b/src/mxarray.jl @@ -289,7 +289,7 @@ function mxarray(a::AbstractArray{T}) where {T<:MxRealNum} return mx end -function mxarray(a::AbstractArray{T}) where {T<:MxComplexNum} +function mxarray(a::AbstractArray{T}) where {T <: MxComplexNum} mx = mxarray(T, size(a)) na = length(a) rdat = unsafe_wrap(Array, real_ptr(mx), na) @@ -302,6 +302,36 @@ function mxarray(a::AbstractArray{T}) where {T<:MxComplexNum} end +function mxarray(a::NTuple{N, T}) where {N, T <: MxRealNum} + mx = mxarray(T, N) + pdat = ccall(mx_get_data[], Ptr{T}, (Ptr{Cvoid},), mx) + dat = unsafe_wrap(Array, pdat, N) + for i in 1:N + dat[i] = a[i] + end + return mx +end + +function mxarray(a::NTuple{N, T}) where {N, T <: MxComplexNum} + mx = mxarray(T, size(a)) + na = length(a) + rdat = unsafe_wrap(Array, real_ptr(mx), na) + idat = unsafe_wrap(Array, imag_ptr(mx), na) + for (i, ix) in enumerate(eachindex(a)) + rdat[i] = real(a[ix]) + idat[i] = imag(a[ix]) + end + return mx +end + +function mxarray(a::Tuple) + mx = mxcellarray(length(a)) + for i in 1:length(a) + set_cell(mx, i, mxarray(a[i])) + end + return mx +end + # sparse matrix function mxsparse(ty::Type{Float64}, m::Integer, n::Integer, nzmax::Integer) diff --git a/test/mxarray.jl b/test/mxarray.jl index b92b1cb..a712dd6 100644 --- a/test/mxarray.jl +++ b/test/mxarray.jl @@ -405,6 +405,28 @@ delete(x) @test isa(y, Array{Bool,3}) @test isequal(y, a) +# Issue: Tuples converted to MATLAB structs +# https://github.com/JuliaInterop/MATLAB.jl/issues/178 +a = (2.5, 2.6) +x = mxarray(a) +y = jvalue(x) +@test classid(x) == MATLAB.mxDOUBLE_CLASS +@test nrows(x) == 2 +@test ncols(x) == 1 +delete(x) +@test isa(y, Vector{Float64}) +@test isequal(y, collect(a)) + +# Tuple with mixed types +a = (1, 2.0, "MATLAB", [1, 2, 3]) +x = mxarray(a) +y = jvalue(x) +@test nrows(x) == 4 +@test ncols(x) == 1 +@test classid(x) == MATLAB.mxCELL_CLASS +@test isa(y, Vector{Any}) +@test length(y) == length(a) +@test isequal(y, collect(a)) ##############################