diff --git a/JuliaExperimental/gap/numfield.g b/JuliaExperimental/gap/numfield.g index 03885a5ca..20c779e76 100644 --- a/JuliaExperimental/gap/numfield.g +++ b/JuliaExperimental/gap/numfield.g @@ -165,27 +165,28 @@ end ); ## whose columns are the exponent vectors of the monomials. ## BindGlobal( "Nemo_Polynomial", function( R, descr ) - local fmpq, div, aux, pol, coeffs, monoms; + local fmpq, aux, pol, coeffs, monoms; if not IsNemoPolynomialRing( R ) then Error( " must be a Nemo polynomial ring" ); elif Length( descr ) = 0 then return Zero( R ); elif R!.isUnivariatePolynomialRing = true then + # Create a univariate polynomial if ForAll( descr, IsInt ) then - # Nothing is to do. + # Convert the coefficient list from "Array{Any,1}" to "Array{Int,1}". + descr:= Julia.Base.convert( JuliaEvalString( "Array{Int,1}" ), + ConvertedToJulia( descr ) ); elif ForAll( descr, IsRat ) then # 'ConvertedToJulia' does not allow us to transfer rationals. fmpq:= Julia.Nemo.fmpq; - div:= Julia.Base.("//"); descr:= JuliaArrayOfFmpq( descr ); else Error( " must be a list of rationals (or integers)" ); fi; - aux:= Julia.GAPUtilsExperimental.MatrixFromNestedArray( descr ); - aux:= Julia.Base.vec( aux ); - pol:= JuliaPointer( R )( aux ); + pol:= JuliaPointer( R )( descr ); else + # Create a multivariate polynomial if IsList( descr ) and Length( descr ) = 2 then coeffs:= JuliaArrayOfFmpq( descr[1] ); monoms:= Julia.Base.convert( @@ -820,7 +821,7 @@ InstallMethod( TraceMat, function( nemomat ) local trace, type; - trace:= Julia.Base.trace( JuliaPointer( nemomat ) ); + trace:= Julia.LinearAlgebra.tr( JuliaPointer( nemomat ) ); type:= ElementsFamily( ElementsFamily( FamilyObj( nemomat ) ) )!.defaultType; return ObjectifyWithAttributes( rec(), type, JuliaPointer, trace ); end ); diff --git a/JuliaExperimental/julia/numfield.jl b/JuliaExperimental/julia/numfield.jl index bb3d275b0..13b7a9c2b 100644 --- a/JuliaExperimental/julia/numfield.jl +++ b/JuliaExperimental/julia/numfield.jl @@ -42,7 +42,7 @@ function Nemo_Matrix_over_NumberField( f, m::Int, n::Int, lst, denom::Int ) local pos, mat, d, i, j pos = 1 - mat = Array{Any}( m, n ) + mat = Array{Any}( undef, m, n ) d = Nemo.fmpz( denom ) for i = 1:m for j = 1:n @@ -64,7 +64,7 @@ end function CoefficientVectorOfNumberFieldElement( elm::Nemo.nf_elem, d::Int ) local arr, i - arr = Array{Nemo.fmpq,1}( d ) + arr = Array{Nemo.fmpq,1}( undef, d ) for i = 1:d arr[i] = Nemo.coeff( elm, i-1 ) end @@ -83,8 +83,8 @@ end function CoefficientVectorsNumDenOfNumberFieldElement( elm, d ) local num, den, i, onecoeff - num = Array{Nemo.fmpz,1}( d ) - den = Array{Nemo.fmpz,1}( d ) + num = Array{Nemo.fmpz,1}( undef, d ) + den = Array{Nemo.fmpz,1}( undef, d ) for i = 1:d onecoeff = Nemo.coeff( elm, i-1 ) num[i] = numerator( onecoeff ) @@ -105,8 +105,8 @@ function MatricesOfCoefficientVectorsNumDen( nemomat, d ) local m, n, num, den, i, j, resnum, resden m, n = size( nemomat ) - num = Array{Any,1}( 0 ) - den = Array{Any,1}( 0 ) + num = Array{Any,1}( undef, 0 ) + den = Array{Any,1}( undef, 0 ) for i = 1:m for j = 1:n resnum, resden = CoefficientVectorsNumDenOfNumberFieldElement( @@ -116,8 +116,8 @@ function MatricesOfCoefficientVectorsNumDen( nemomat, d ) end end - return Nemo.matrix( Nemo.ZZ, hcat( num... )' ), - Nemo.matrix( Nemo.ZZ, hcat( den... )' ) + return Nemo.matrix( Nemo.ZZ, copy( transpose( hcat( num... ) ) ) ), + Nemo.matrix( Nemo.ZZ, copy( transpose( hcat( den... ) ) ) ) end @@ -136,9 +136,9 @@ end # f, x = Nemo.CyclotomicField( N, "x" ) # n = length( lst ) # m = MatrixSpace( Nemo.ZZ, n, length( lst[1] ) ) -# mat = m( hcat( lst... )' ) +# mat = m( copy( transpose( hcat( lst... ) ) ) ) # d = Nemo.fmpz( denom ) -# res = Array{Any}( n ) +# res = Array{Any}( undef, n ) # for i = 1:n # res[i] = QabElem( Nemo.elem_from_mat_row( f, mat, i, d ), N ) # end diff --git a/JuliaExperimental/julia/utils.jl b/JuliaExperimental/julia/utils.jl index 2fde1fdc4..fee662745 100644 --- a/JuliaExperimental/julia/utils.jl +++ b/JuliaExperimental/julia/utils.jl @@ -14,7 +14,7 @@ module GAPUtilsExperimental > Return a 2-dim array created from the 1-dim array of 1-dim arrays `lst`. > (Note that GAP's `ConvertedToJulia` creates nested arrays.) """ -function MatrixFromNestedArray( lst ) return hcat( lst... )' end +function MatrixFromNestedArray( lst ) return copy( hcat( lst... )' ) end """ diff --git a/JuliaExperimental/read.g b/JuliaExperimental/read.g index 43b7c6b11..b125d6885 100644 --- a/JuliaExperimental/read.g +++ b/JuliaExperimental/read.g @@ -37,7 +37,11 @@ ReadPackage( "JuliaExperimental", "gap/gapperm.g"); # Nemo's number fields. -if JuliaImportPackage( "Nemo" ) then +# 'Nemo' imports (some functions from) 'LinearAlgebra', +# see its 'Nemo.jl', but we have to tell GAP about 'LinearAlgebra', +# in order to use, e. g., 'Julia.LinearAlgebra.tr'. +if JuliaImportPackage( "LinearAlgebra" ) and + JuliaImportPackage( "Nemo" ) then ReadPackage( "JuliaExperimental", "gap/gapnemo.g"); ReadPackage( "JuliaExperimental", "gap/numfield.g"); fi; diff --git a/JuliaExperimental/tst/numfield.tst b/JuliaExperimental/tst/numfield.tst index 5bd88ba73..91928777d 100644 --- a/JuliaExperimental/tst/numfield.tst +++ b/JuliaExperimental/tst/numfield.tst @@ -26,8 +26,7 @@ gap> Nemo_Polynomial( R, [ [ 1, 2, 3/2 ], [ [ 4, 5, 6 ], [ 7, 8, 9 ] ] ] ); gap> x:= X( Rationals );; gap> f:= AlgebraicExtension( Rationals, x^2+1 );; gap> iso:= IsomorphismToNemoField( f );; -gap> ff:= Range( iso ); - +gap> ff:= Range( iso );; # remove one semicolon when GAP has the right method gap> one:= Image( iso, One( f ) ); <> gap> PreImage( iso, one ); @@ -61,7 +60,7 @@ gap> mat:= [ [ o, a/2 ], [ z, o ] ]; gap> nmat:= NemoMatrix( ff, mat ); <> -gap> PrintObj( nmat ); +gap> PrintObj( nmat ); Print( "\n" ); [1 1//2*a] [0 1] gap> TraceMat( nmat );