Skip to content

Commit 2cb48f6

Browse files
authored
Implement Base.show (#17)
* Implement Base.show * Fix ambiguity * Fix doc
1 parent 78d2837 commit 2cb48f6

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

src/interface.jl

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Society for Industrial and Applied Mathematics, **2012**.
99
"""
1010
abstract type AbstractPolynomialBasis end
1111

12+
generators(basis::AbstractPolynomialBasis) = basis.polynomials
13+
1214
function MP.polynomial(coefs::Vector, basis::AbstractPolynomialBasis)
1315
return MP.polynomial(i -> coefs[i], basis)
1416
end
@@ -39,7 +41,46 @@ julia> @polyvar x
3941
(x,)
4042
4143
julia> basis_covering_monomials(ChebyshevBasis, [x^2, x^4])
42-
ChebyshevBasisFirstKind{Polynomial{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, Graded{LexOrder}, Float64}}(Polynomial{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, Graded{LexOrder}, Float64}[1.0, -1.0 + 2.0x², 1.0 - 8.0x² + 8.0x⁴])
44+
ChebyshevBasisFirstKind([1.0, -1.0 + 2.0x², 1.0 - 8.0x² + 8.0x⁴])
4345
```
4446
"""
4547
function basis_covering_monomials end
48+
49+
function _show(io::IO, mime::MIME, basis::AbstractPolynomialBasis)
50+
T = typeof(basis)
51+
print(io, nameof(T))
52+
print(io, "([")
53+
first = true
54+
# TODO use Base.show_vector here, maybe by wrapping the `generator` vector
55+
# into something that spits objects wrapped with the `mime` type
56+
for g in generators(basis)
57+
if !first
58+
print(io, ", ")
59+
end
60+
first = false
61+
show(io, mime, g)
62+
end
63+
return print(io, "])")
64+
end
65+
66+
function Base.show(
67+
io::IO,
68+
mime::MIME"text/plain",
69+
basis::AbstractPolynomialBasis,
70+
)
71+
return _show(io, mime, basis)
72+
end
73+
function Base.show(
74+
io::IO,
75+
mime::MIME"text/print",
76+
basis::AbstractPolynomialBasis,
77+
)
78+
return _show(io, mime, basis)
79+
end
80+
81+
function Base.print(io::IO, basis::AbstractPolynomialBasis)
82+
return show(io, MIME"text/print"(), basis)
83+
end
84+
function Base.show(io::IO, basis::AbstractPolynomialBasis)
85+
return show(io, MIME"text/plain"(), basis)
86+
end

src/monomial.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ function merge_bases(basis1::MB, basis2::MB) where {MB<:AbstractMonomialBasis}
5252
return MB(monos), I1, I2
5353
end
5454

55+
generators(basis::AbstractMonomialBasis) = basis.monomials
56+
5557
"""
5658
struct MonomialBasis{MT<:MP.AbstractMonomial, MV<:AbstractVector{MT}} <: AbstractPolynomialBasis
5759
monomials::MV

test/fixed.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ using DynamicPolynomials
99
@test polynomial(one, basis) == 3
1010
@test basis[1] == 1 - x^2
1111
@test basis[2] == x^2 + 2
12+
@test sprint(show, basis) == "FixedPolynomialBasis([1 - x², 2 + x²])"
13+
@test sprint(print, basis) == "FixedPolynomialBasis([1 - x^2, 2 + x^2])"
1214
end
1315
@testset "Monomial" begin
1416
basis = FixedPolynomialBasis([x, x^2])

test/monomial.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ using DynamicPolynomials
1010
@test coefficients(x + 4y, MonomialBasis) == [4, 1]
1111
@test basis[1] == y
1212
@test basis[2] == x
13+
@test sprint(show, basis) == "MonomialBasis([y, x])"
14+
@test sprint(show, MIME"text/print"(), basis) == "MonomialBasis([y, x])"
15+
@test sprint(show, MIME"text/plain"(), basis) == "MonomialBasis([y, x])"
16+
@test sprint(print, basis) == "MonomialBasis([y, x])"
1317
end
1418
@testset "Affine" begin
1519
# It will be sorted and 1 will be moved at the end
@@ -23,6 +27,8 @@ end
2327
@test polynomial_type(basis, Int) == polynomial_type(x, Int)
2428
@test polynomial(i -> i^2, basis) == 9x^2 + 4x * y + y^2
2529
@test coefficients(x^2 + 4x * y + 9y^2, MonomialBasis) == [9, 4, 1]
30+
@test sprint(show, basis) == "MonomialBasis([y², xy, x²])"
31+
@test sprint(print, basis) == "MonomialBasis([y^2, x*y, x^2])"
2632
end
2733
@testset "merge_bases" begin
2834
basis1 = MonomialBasis([x^2, y^2])

0 commit comments

Comments
 (0)