Skip to content

Commit af5e9c0

Browse files
authored
Add several is_known methods (#2270)
1 parent bcc2923 commit af5e9c0

27 files changed

Lines changed: 52 additions & 54 deletions

src/AbsMSeries.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,8 @@ $R$.
4040
"""
4141
symbols(R::MSeriesRing)
4242

43-
function characteristic(a::MSeriesRing)
44-
return characteristic(base_ring(a))
45-
end
43+
characteristic(R::MSeriesRing) = characteristic(base_ring(R))
44+
is_known(::typeof(characteristic), R::MSeriesRing) = is_known(characteristic, base_ring(R))
4645

4746
###############################################################################
4847
#

src/Fraction.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@ function is_exact_type(a::Type{T}) where {S <: RingElement, T <: FracElem{S}}
2020
return is_exact_type(S)
2121
end
2222

23-
function characteristic(R::FracField{T}) where T <: RingElem
24-
return characteristic(base_ring(R))
25-
end
23+
characteristic(R::FracField) = characteristic(base_ring(R))
24+
is_known(::typeof(characteristic), R::FracField) = is_known(characteristic, base_ring(R))
2625

2726
@doc raw"""
2827
vars(a::FracElem{S}) where {S <: MPolyRingElem{<: RingElement}}

src/FreeAssociativeAlgebra.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ function is_exact_type(a::Type{S}) where {T <: RingElement, S <: FreeAssociative
2222
end
2323

2424
characteristic(R::FreeAssociativeAlgebra) = characteristic(base_ring(R))
25+
is_known(::typeof(characteristic), R::FreeAssociativeAlgebra) = is_known(characteristic, base_ring(R))
2526

2627
is_finite(R::FreeAssociativeAlgebra) = is_trivial(base_ring(R)) || (nvars(R) == 0 && is_finite(base_ring(R)))
2728

src/LaurentPoly.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
###############################################################################
1212

1313
characteristic(R::LaurentPolyRing) = characteristic(base_ring(R))
14+
is_known(::typeof(characteristic), R::LaurentPolyRing) = is_known(characteristic, base_ring(R))
1415

1516
is_finite(R::LaurentPolyRing) = is_trivial(R)
1617

src/MatRing.jl

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,8 @@ function is_zero_divisor_with_annihilator(a::MatRingElem{T}) where T <: RingElem
6565
throw(NotImplementedError(:adj, a)) #return f, b*adj(A)
6666
end
6767

68-
69-
function characteristic(a::MatRing)
70-
iszero(nrows(a)) && return 1
71-
return characteristic(base_ring(a))
72-
end
68+
characteristic(R::MatRing) = iszero(nrows(R)) ? 1 : characteristic(base_ring(R))
69+
is_known(::typeof(characteristic), R::MatRing) = iszero(nrows(R)) || is_known(characteristic, base_ring(R))
7370

7471
is_finite(R::MatRing) = iszero(nrows(R)) || is_finite(base_ring(R))
7572

src/NCPoly.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ Return the number of variables of the polynomial ring, which is 1.
102102
"""
103103
number_of_variables(a::NCPolyRing) = 1
104104

105-
characteristic(a::NCPolyRing) = characteristic(base_ring(a))
105+
characteristic(R::NCPolyRing) = characteristic(base_ring(R))
106+
is_known(::typeof(characteristic), R::NCPolyRing) = is_known(characteristic, base_ring(R))
106107

107108
is_finite(a::NCPolyRing) = is_trivial(a)
108109

src/NumFields.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ end
88
number_of_generators(L::SimpleNumField{T}) where {T} = 1
99

1010
characteristic(F::NumField) = 0
11+
is_known(::typeof(characteristic), F::NumField) = true
1112

1213
promote_rule(::Type{T}, ::Type{S}) where {S<:NumFieldElem,T<:Integer} = S
1314

src/Poly.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ Return the number of variables of the polynomial ring, which is 1.
4848
"""
4949
number_of_variables(a::PolyRing) = 1
5050

51-
characteristic(a::PolyRing) = characteristic(base_ring(a))
51+
characteristic(R::PolyRing) = characteristic(coefficient_ring(R))
52+
is_known(::typeof(characteristic), R::PolyRing) = is_known(characteristic, coefficient_ring(R))
5253

5354
is_finite(a::PolyRing) = is_trivial(a)
5455

src/Residue.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,8 @@ annihilator(a::ResElem) = is_zero_divisor_with_annihilator(a)[2]
113113
deepcopy_internal(a::ResElem, dict::IdDict) =
114114
parent(a)(deepcopy_internal(data(a), dict))
115115

116-
function characteristic(a::ResidueRing{T}) where T <: Integer
117-
return modulus(a)
118-
end
116+
characteristic(R::ResidueRing{T}) where T <: Integer = modulus(R)
117+
is_known(::typeof(characteristic), R::ResidueRing{T}) where T <: Integer = true
119118

120119
###############################################################################
121120
#

src/ResidueField.jl

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,8 @@ function modulus(r::ResFieldElem)
6464
return modulus(parent(r))
6565
end
6666

67-
function characteristic(R::ResidueField)
68-
return characteristic(base_ring(R))
69-
end
70-
71-
function characteristic(r::ResidueField{T}) where T <: Integer
72-
return modulus(r)
73-
end
67+
characteristic(r::ResidueField{T}) where T <: Integer = modulus(r)
68+
is_known(::typeof(characteristic), R::ResidueField{T}) where T <: Integer = true
7469

7570
data(a::ResFieldElem) = a.data
7671

0 commit comments

Comments
 (0)