Skip to content

Commit

Permalink
Add and use zero!, one!, neg! methods (#1869)
Browse files Browse the repository at this point in the history
Co-authored-by: Lars Göttgens <[email protected]>
  • Loading branch information
fingolfin and lgoettgens authored Oct 8, 2024
1 parent 1b3e5dd commit 6755a22
Show file tree
Hide file tree
Showing 53 changed files with 612 additions and 407 deletions.
7 changes: 0 additions & 7 deletions src/HeckeMoreStuff.jl
Original file line number Diff line number Diff line change
Expand Up @@ -325,13 +325,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 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
34 changes: 15 additions & 19 deletions src/antic/nf_elem.jl
Original file line number Diff line number Diff line change
Expand Up @@ -111,19 +111,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 +264,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 +727,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
5 changes: 5 additions & 0 deletions src/arb/Complex.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1586,6 +1586,11 @@ function zero!(z::ComplexFieldElem)
return z
end

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

function add!(z::ComplexFieldElem, x::ComplexFieldElem, y::ComplexFieldElem, prec::Int = precision(Balls))
ccall((:acb_add, libflint), Nothing, (Ref{ComplexFieldElem}, Ref{ComplexFieldElem}, Ref{ComplexFieldElem}, Int),
z, x, y, prec)
Expand Down
5 changes: 5 additions & 0 deletions src/arb/ComplexPoly.jl
Original file line number Diff line number Diff line change
Expand Up @@ -707,6 +707,11 @@ function zero!(z::ComplexPolyRingElem)
return z
end

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

function fit!(z::ComplexPolyRingElem, n::Int)
ccall((:acb_poly_fit_length, libflint), Nothing,
(Ref{ComplexPolyRingElem}, Int), z, n)
Expand Down
5 changes: 5 additions & 0 deletions src/arb/Real.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1934,6 +1934,11 @@ function zero!(z::RealFieldElem)
return z
end

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

for (s,f) in (("add!","arb_add"), ("mul!","arb_mul"), ("div!", "arb_div"),
("sub!","arb_sub"))
@eval begin
Expand Down
6 changes: 6 additions & 0 deletions src/arb/RealPoly.jl
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,12 @@ function zero!(z::RealPolyRingElem)
return z
end

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

function fit!(z::RealPolyRingElem, n::Int)
ccall((:arb_poly_fit_length, libflint), Nothing,
(Ref{RealPolyRingElem}, Int), z, n)
Expand Down
5 changes: 5 additions & 0 deletions src/arb/acb.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1574,6 +1574,11 @@ function zero!(z::AcbFieldElem)
return z
end

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

function add!(z::AcbFieldElem, x::AcbFieldElem, y::AcbFieldElem)
ccall((:acb_add, libflint), Nothing, (Ref{AcbFieldElem}, Ref{AcbFieldElem}, Ref{AcbFieldElem}, Int),
z, x, y, parent(z).prec)
Expand Down
5 changes: 5 additions & 0 deletions src/arb/acb_poly.jl
Original file line number Diff line number Diff line change
Expand Up @@ -702,6 +702,11 @@ function zero!(z::AcbPolyRingElem)
return z
end

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

function fit!(z::AcbPolyRingElem, n::Int)
ccall((:acb_poly_fit_length, libflint), Nothing,
(Ref{AcbPolyRingElem}, Int), z, n)
Expand Down
5 changes: 5 additions & 0 deletions src/arb/arb.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1936,6 +1936,11 @@ function zero!(z::ArbFieldElem)
return z
end

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

for (s,f) in (("add!","arb_add"), ("mul!","arb_mul"), ("div!", "arb_div"),
("sub!","arb_sub"))
@eval begin
Expand Down
6 changes: 6 additions & 0 deletions src/arb/arb_poly.jl
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,12 @@ function zero!(z::ArbPolyRingElem)
return z
end

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

function fit!(z::ArbPolyRingElem, n::Int)
ccall((:arb_poly_fit_length, libflint), Nothing,
(Ref{ArbPolyRingElem}, Int), z, n)
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 @@ -1046,6 +1046,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 @@ -1177,11 +1182,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
7 changes: 7 additions & 0 deletions src/flint/fmpq_abs_series.jl
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,13 @@ function zero!(z::QQAbsPowerSeriesRingElem)
return z
end

function one!(z::QQAbsPowerSeriesRingElem)
ccall((:fmpq_poly_one, libflint), Nothing,
(Ref{QQAbsPowerSeriesRingElem},), z)
z.prec = parent(z).prec_max
return z
end

function fit!(z::QQAbsPowerSeriesRingElem, n::Int)
ccall((:fmpq_poly_fit_length, libflint), Nothing,
(Ref{QQAbsPowerSeriesRingElem}, Int), z, n)
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 @@ -179,12 +179,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 @@ -728,6 +723,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 @@ -791,12 +804,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
8 changes: 8 additions & 0 deletions src/flint/fmpq_rel_series.jl
Original file line number Diff line number Diff line change
Expand Up @@ -900,6 +900,14 @@ function zero!(z::QQRelPowerSeriesRingElem)
return z
end

function one!(z::QQRelPowerSeriesRingElem)
ccall((:fmpq_poly_one, libflint), Nothing,
(Ref{QQRelPowerSeriesRingElem},), z)
z.prec = parent(z).prec_max
z.val = 0
return z
end

function fit!(z::QQRelPowerSeriesRingElem, n::Int)
ccall((:fmpq_poly_fit_length, libflint), Nothing,
(Ref{QQRelPowerSeriesRingElem}, Int), z, n)
Expand Down
Loading

0 comments on commit 6755a22

Please sign in to comment.