Skip to content

Commit

Permalink
Add and use zero!, one!, neg! methods
Browse files Browse the repository at this point in the history
  • Loading branch information
fingolfin committed Sep 27, 2024
1 parent 7894c21 commit 9521cf0
Show file tree
Hide file tree
Showing 33 changed files with 460 additions and 330 deletions.
16 changes: 0 additions & 16 deletions src/HeckeMoreStuff.jl
Original file line number Diff line number Diff line change
Expand Up @@ -339,22 +339,6 @@ function numerator(a::AbsSimpleNumFieldElem)
return z
end

function one!(r::AbsSimpleNumFieldElem)
a = parent(r)
ccall((:nf_elem_one, libflint), Nothing,
(Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumField}), r, a)
return r
end

function one(r::AbsSimpleNumFieldElem)
a = parent(r)
return one(a)
end

function zero(r::AbsSimpleNumFieldElem)
return zero(parent(r))
end

function divexact!(z::AbsSimpleNumFieldElem, x::AbsSimpleNumFieldElem, y::ZZRingElem)
ccall((:nf_elem_scalar_div_fmpz, libflint), Nothing,
(Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumFieldElem}, Ref{ZZRingElem}, Ref{AbsSimpleNumField}),
Expand Down
43 changes: 24 additions & 19 deletions src/antic/nf_elem.jl
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,15 @@ defining_polynomial(K::AbsSimpleNumField) = K.pol
#
###############################################################################

function one(r::AbsSimpleNumFieldElem)
a = parent(r)
return one(a)
end

function zero(r::AbsSimpleNumFieldElem)
return zero(parent(r))
end

function hash(a::AbsSimpleNumFieldElem, h::UInt)
b = 0xc2a44fbe466a1827%UInt
d = degree(parent(a))
Expand Down Expand Up @@ -111,19 +120,9 @@ function gen(a::AbsSimpleNumField)
return r
end

function one(a::AbsSimpleNumField)
r = AbsSimpleNumFieldElem(a)
ccall((:nf_elem_one, libflint), Nothing,
(Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumField}), r, a)
return r
end
one(a::AbsSimpleNumField) = one!(AbsSimpleNumFieldElem(a))

function zero(a::AbsSimpleNumField)
r = AbsSimpleNumFieldElem(a)
ccall((:nf_elem_zero, libflint), Nothing,
(Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumField}), r, a)
return r
end
zero(a::AbsSimpleNumField) = zero!(AbsSimpleNumFieldElem(a))

@doc raw"""
is_gen(a::AbsSimpleNumFieldElem)
Expand Down Expand Up @@ -274,13 +273,7 @@ canonical_unit(x::AbsSimpleNumFieldElem) = x
#
###############################################################################

function -(a::AbsSimpleNumFieldElem)
r = a.parent()
ccall((:nf_elem_neg, libflint), Nothing,
(Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumField}),
r, a, a.parent)
return r
end
-(a::AbsSimpleNumFieldElem) = neg!(a.parent(), a)

###############################################################################
#
Expand Down Expand Up @@ -743,6 +736,18 @@ function zero!(a::AbsSimpleNumFieldElem)
return a
end

function one!(a::AbsSimpleNumFieldElem)
ccall((:nf_elem_one, libflint), Nothing,
(Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumField}), a, parent(a))
return a
end

function neg!(z::AbsSimpleNumFieldElem, a::AbsSimpleNumFieldElem)
ccall((:nf_elem_neg, libflint), Nothing,
(Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumField}), z, a, parent(a))
return z
end

function mul!(z::AbsSimpleNumFieldElem, x::AbsSimpleNumFieldElem, y::AbsSimpleNumFieldElem)
ccall((:nf_elem_mul, libflint), Nothing,
(Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumFieldElem}, Ref{AbsSimpleNumField}),
Expand Down
23 changes: 14 additions & 9 deletions src/calcium/ca.jl
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,7 @@ end

zero(C::CalciumField) = C()

function one(C::CalciumField)
z = CalciumFieldElem(C)
ccall((:ca_one, libflint), Nothing, (Ref{CalciumFieldElem}, Ref{CalciumField}), z, C)
return z
end
one(C::CalciumField) = one!(CalciumFieldElem(C))

###############################################################################
#
Expand Down Expand Up @@ -350,10 +346,7 @@ end
###############################################################################

function -(a::CalciumFieldElem)
C = a.parent
r = C()
ccall((:ca_neg, libflint), Nothing,
(Ref{CalciumFieldElem}, Ref{CalciumFieldElem}, Ref{CalciumField}), r, a, C)
r = neg!(a.parent(), a)
check_special(r)
return r
end
Expand Down Expand Up @@ -1391,6 +1384,18 @@ function zero!(z::CalciumFieldElem)
return z
end

function one!(z::CalciumFieldElem)
C = z.parent
ccall((:ca_one, libflint), Nothing, (Ref{CalciumFieldElem}, Ref{CalciumField}), z, C)
return z
end

function neg!(z::CalciumFieldElem, a::CalciumFieldElem)
C = z.parent
ccall((:ca_neg, libflint), Nothing, (Ref{CalciumFieldElem}, Ref{CalciumFieldElem}, Ref{CalciumField}), z, a, C)
return z
end

function mul!(z::CalciumFieldElem, x::CalciumFieldElem, y::CalciumFieldElem)
if z.parent != x.parent || x.parent != y.parent
error("different parents in in-place operation")
Expand Down
16 changes: 11 additions & 5 deletions src/calcium/qqbar.jl
Original file line number Diff line number Diff line change
Expand Up @@ -360,11 +360,7 @@ end
#
###############################################################################

function -(a::QQBarFieldElem)
z = QQBarFieldElem()
ccall((:qqbar_neg, libflint), Nothing, (Ref{QQBarFieldElem}, Ref{QQBarFieldElem}), z, a)
return z
end
-(a::QQBarFieldElem) = neg!(QQBarFieldElem(), a)

###############################################################################
#
Expand Down Expand Up @@ -1499,6 +1495,16 @@ function zero!(z::QQBarFieldElem)
return z
end

function one!(z::QQBarFieldElem)
ccall((:qqbar_one, libflint), Nothing, (Ref{QQBarFieldElem},), z)
return z
end

function neg!(z::QQBarFieldElem, a::QQBarFieldElem)
ccall((:qqbar_neg, libflint), Nothing, (Ref{QQBarFieldElem}, Ref{QQBarFieldElem}), z, a)
return z
end

function mul!(z::QQBarFieldElem, x::QQBarFieldElem, y::QQBarFieldElem)
ccall((:qqbar_mul, libflint), Nothing,
(Ref{QQBarFieldElem}, Ref{QQBarFieldElem}, Ref{QQBarFieldElem}), z, x, y)
Expand Down
10 changes: 5 additions & 5 deletions src/flint/fmpq.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1039,6 +1039,11 @@ function one!(c::QQFieldElemOrPtr)
set!(c, 1)
end

function neg!(z::QQFieldElemOrPtr, a::QQFieldElemOrPtr)
ccall((:fmpq_neg, libflint), Nothing, (Ref{QQFieldElem}, Ref{QQFieldElem}), z, a)
return z
end

function set!(c::QQFieldElemOrPtr, a::QQFieldElemOrPtr)
@ccall libflint.fmpq_set(c::Ref{QQFieldElem}, a::Ref{QQFieldElem})::Nothing
return c
Expand Down Expand Up @@ -1170,11 +1175,6 @@ function sub!(z::QQFieldElemOrPtr, a::QQFieldElemOrPtr, b::UInt)
return z
end

function neg!(z::QQFieldElemOrPtr, a::QQFieldElemOrPtr)
ccall((:fmpq_neg, libflint), Nothing, (Ref{QQFieldElem}, Ref{QQFieldElem}), z, a)
return z
end

function divexact!(z::QQFieldElemOrPtr, a::QQFieldElemOrPtr, b::QQFieldElemOrPtr)
ccall((:fmpq_div, libflint), Nothing, (Ref{QQFieldElem}, Ref{QQFieldElem}, Ref{QQFieldElem}), z, a, b)
return z
Expand Down
31 changes: 19 additions & 12 deletions src/flint/fmpq_mat.jl
Original file line number Diff line number Diff line change
Expand Up @@ -203,12 +203,7 @@ canonical_unit(a::QQMatrix) = canonical_unit(a[1, 1])
#
###############################################################################

function -(x::QQMatrix)
z = similar(x)
ccall((:fmpq_mat_neg, libflint), Nothing,
(Ref{QQMatrix}, Ref{QQMatrix}), z, x)
return z
end
-(x::QQMatrix) = neg!(similar(x), x)

###############################################################################
#
Expand Down Expand Up @@ -752,6 +747,24 @@ end
#
###############################################################################

function zero!(z::QQMatrix)
ccall((:fmpq_mat_zero, libflint), Nothing,
(Ref{QQMatrix},), z)
return z
end

function one!(z::QQMatrix)
ccall((:fmpq_mat_one, libflint), Nothing,
(Ref{QQMatrix},), z)
return z
end

function neg!(z::QQMatrix, a::QQMatrix)
ccall((:fmpq_mat_neg, libflint), Nothing,
(Ref{QQMatrix}, Ref{QQMatrix}), z, a)
return z
end

function mul!(z::QQMatrix, x::QQMatrix, y::QQMatrix)
ccall((:fmpq_mat_mul, libflint), Nothing,
(Ref{QQMatrix}, Ref{QQMatrix}, Ref{QQMatrix}), z, x, y)
Expand Down Expand Up @@ -815,12 +828,6 @@ mul!(x::QQMatrix, y::IntegerUnion) = mul!(x, x, y)

mul!(z::QQMatrix, y::QQMatrix, x::Integer) = mul!(z, y, ZZ(x))

function zero!(z::QQMatrix)
ccall((:fmpq_mat_zero, libflint), Nothing,
(Ref{QQMatrix},), z)
return z
end

function Generic.add_one!(a::QQMatrix, i::Int, j::Int)
@boundscheck _checkbounds(a, i, j)
GC.@preserve a begin
Expand Down
2 changes: 0 additions & 2 deletions src/flint/fmpq_mpoly.jl
Original file line number Diff line number Diff line change
Expand Up @@ -818,8 +818,6 @@ function neg!(a::QQMPolyRingElem, b::QQMPolyRingElem)
return a
end

neg!(a::QQMPolyRingElem) = neg!(a, a)

function add!(a::QQMPolyRingElem, b::QQMPolyRingElem, c::QQMPolyRingElem)
ccall((:fmpq_mpoly_add, libflint), Nothing,
(Ref{QQMPolyRingElem}, Ref{QQMPolyRingElem},
Expand Down
19 changes: 13 additions & 6 deletions src/flint/fmpq_poly.jl
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,7 @@ canonical_unit(a::QQPolyRingElem) = canonical_unit(leading_coefficient(a))
#
###############################################################################

function -(x::QQPolyRingElem)
z = parent(x)()
ccall((:fmpq_poly_neg, libflint), Nothing,
(Ref{QQPolyRingElem}, Ref{QQPolyRingElem}), z, x)
return z
end
-(x::QQPolyRingElem) = neg!(parent(x)(), x)

###############################################################################
#
Expand Down Expand Up @@ -783,6 +778,18 @@ function zero!(z::QQPolyRingElem)
return z
end

function one!(z::QQPolyRingElem)
ccall((:fmpq_poly_one, libflint), Nothing,
(Ref{QQPolyRingElem},), z)
return z
end

function neg!(z::QQPolyRingElem, a::QQPolyRingElem)
ccall((:fmpq_poly_neg, libflint), Nothing,
(Ref{QQPolyRingElem}, Ref{QQPolyRingElem}), z, a)
return z
end

function fit!(z::QQPolyRingElem, n::Int)
ccall((:fmpq_poly_fit_length, libflint), Nothing,
(Ref{QQPolyRingElem}, Int), z, n)
Expand Down
16 changes: 7 additions & 9 deletions src/flint/fmpz.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2525,6 +2525,13 @@ function one!(z::ZZRingElemOrPtr)
set!(z, UInt(1))
end

function neg!(z::ZZRingElemOrPtr, a::ZZRingElemOrPtr)
ccall((:fmpz_neg, libflint), Nothing,
(Ref{ZZRingElem}, Ref{ZZRingElem}),
z, a)
return z
end

function set!(z::ZZRingElemOrPtr, a::ZZRingElemOrPtr)
@ccall libflint.fmpz_set(z::Ref{ZZRingElem}, a::Ref{ZZRingElem})::Nothing
return z
Expand Down Expand Up @@ -2572,15 +2579,6 @@ end
add!(z::ZZRingElem, a::ZZRingElem, b::Integer) = add!(z, a, ZZRingElem(b))
add!(z::ZZRingElem, x::Int, y::ZZRingElem) = add!(z, y, x)

function neg!(z::ZZRingElemOrPtr, a::ZZRingElemOrPtr)
ccall((:fmpz_neg, libflint), Nothing,
(Ref{ZZRingElem}, Ref{ZZRingElem}),
z, a)
return z
end

neg!(a::ZZRingElemOrPtr) = neg!(a, a)

function sub!(z::ZZRingElemOrPtr, a::ZZRingElemOrPtr, b::ZZRingElemOrPtr)
ccall((:fmpz_sub, libflint), Nothing,
(Ref{ZZRingElem}, Ref{ZZRingElem}, Ref{ZZRingElem}),
Expand Down
34 changes: 18 additions & 16 deletions src/flint/fmpz_mat.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1820,6 +1820,23 @@ end
#
###############################################################################

function zero!(z::ZZMatrix)
ccall((:fmpz_mat_zero, libflint), Nothing,
(Ref{ZZMatrix},), z)
return z
end

function one!(z::ZZMatrix)
ccall((:fmpz_mat_one, libflint), Nothing,
(Ref{ZZMatrix},), z)
return z
end

function neg!(z::ZZMatrix, w::ZZMatrix)
ccall((:fmpz_mat_neg, libflint), Nothing, (Ref{ZZMatrix}, Ref{ZZMatrix}), z, w)
return z
end

function add!(z::ZZMatrix, x::ZZMatrix, y::ZZMatrix)
ccall((:fmpz_mat_add, libflint), Nothing,
(Ref{ZZMatrix}, Ref{ZZMatrix}, Ref{ZZMatrix}), z, x, y)
Expand Down Expand Up @@ -1870,19 +1887,6 @@ function addmul!(z::ZZMatrix, y::ZZMatrix, x::Int)
return z
end

function zero!(z::ZZMatrix)
ccall((:fmpz_mat_zero, libflint), Nothing,
(Ref{ZZMatrix},), z)
return z
end

function neg!(z::ZZMatrix, w::ZZMatrix)
ccall((:fmpz_mat_neg, libflint), Nothing, (Ref{ZZMatrix}, Ref{ZZMatrix}), z, w)
return z
end

neg!(z::ZZMatrix) = neg!(z, z)

function mul!(z::Vector{ZZRingElem}, a::ZZMatrix, b::Vector{ZZRingElem})
ccall((:fmpz_mat_mul_fmpz_vec_ptr, libflint), Nothing,
(Ptr{Ref{ZZRingElem}}, Ref{ZZMatrix}, Ptr{Ref{ZZRingElem}}, Int),
Expand Down Expand Up @@ -2079,9 +2083,7 @@ function identity_matrix(R::ZZRing, n::Int)
if n < 0
error("dimension must not be negative")
end
z = ZZMatrix(n, n)
ccall((:fmpz_mat_one, libflint), Nothing, (Ref{ZZMatrix}, ), z)
return z
return one!(ZZMatrix(n, n))
end

################################################################################
Expand Down
Loading

0 comments on commit 9521cf0

Please sign in to comment.