Giter VIP home page Giter VIP logo

Comments (8)

nsajko avatar nsajko commented on July 2, 2024 1

The code is for finding the eigenvalues of a family of matrices. Here it is, in case you're interested:

# An attempt at finding the eigenvalue with largest magnitude of some
# large matrices defined by a small number of parameters. Inspired by
# this post on Julia's Discourse:
#
# https://discourse.julialang.org/t/strategy-for-finding-eigenvalues-of-an-infinite-banded-matrix/106513/3?u=nsajko
#
# The idea is to use the characteristic polynomial and other known
# relations for constructing a system of polynomial equations, which
# could perhaps be solved using Gröbner bases, as implemented in the
# Groebner.jl Julia package, given enough additional relations.
#
# The relations that are currently in use are *not* restrictive enough
# for obtaining a finite set of solutions for the eigenvalues. Trying
# to think of other relations to add to the system.

# In Mason's problem, the parameters are all negative. Here they're all
# positive instead. This is OK because, for any matrix `M`, the
# eigenvalues of `-M` are just the eigenvalues of `M`, but with
# all signs reversed.

# Parameters, they define the elements of the matrix: `a`, `b`, `c₀`,
# `c₁`, `c₂`. `x` is the indeterminate representing an eigenvalue.

module EigenMasonEquations

import LinearAlgebra, LinearAlgebraX, MultivariatePolynomials

const MP = MultivariatePolynomials

const NT = NTuple{n,Any} where {n}

square(x) = x*x

"""
An equation that represents the inequality `0 ≤ target`. `scratch`
should be a dedicated variable, used just in this equation.
"""
is_ordered_after_zero(::typeof(), target, scratch) =
  square(scratch) - target

"""
An equation that represents the inequality `0 < target`. `scratch`
should be a dedicated variable, used just in this equation.
"""
is_ordered_after_zero(::typeof(<), target, scratch) =
  square(scratch) * target - true

is_ordered_after_zero(
  r::R, ::Type{T}, target, scratch,
) where {R<:Union{typeof(≤),typeof(<)}, T} =
  is_ordered_after_zero(r, target, scratch + zero(T))

"""
An equation that represents the inequality `l o r`. `scratch`
should be a variable dedicated just for this equation.
"""
are_ordered(
  o::R, ::Type{T}, l, r, scratch,
) where {R<:Union{typeof(≤),typeof(<)}, T} =
  is_ordered_after_zero(o, T, r - l, scratch)

"""
An equation that represents the Laguerre–Samuelson inequality for the
polynomial `p` with indeterminate `x`.
`scratch` should be a variable dedicated just for this equation.
"""
function laguerre_samuelson_inequality(::Type{I}, p, x, scratch) where {I}
  n = MP.maxdegree(p, x)
  coef = let p = p, x = x
    i -> MP.coefficient(p, x^i, (x,))
  end
  isone(coef(n)) || error("polynomial not monic")
  a_nm1 = coef(n - 1)
  a_nm2 = coef(n - 2)
  c0 = I(n)::I
  c1 = I(n - 1)::I
  c2 = I(2*n)::I
  are_ordered(
    , I,
    square(c0*x + a_nm1),
    c1*(c1*square(a_nm1) - c2*a_nm2),
    scratch,
  )
end

uniform_scaling_matrix(x, n) = (LinearAlgebra.Diagonal  fill)(x, n)

function characteristic_polynomial(m, x)
  n = LinearAlgebra.checksquare(m)
  LinearAlgebraX.detx(m - uniform_scaling_matrix(x, n))
end

symmetric_setindex!(m::LinearAlgebra.Symmetric, v, i, j) =
  m[begin + i, begin + j] = v

function symmetric_setindex!(m::AbstractMatrix, v, i, j)
  m[begin + i, begin + j] = v
  m[begin + j, begin + i] = v
end

function symmetric_set_diagonal!(m, j, x)
  n = LinearAlgebra.checksquare(m)
  (j  0:(n - 1)) || error("`j` out of bounds")
  for i  0:(n - 1 - j)
    symmetric_setindex!(m, x, i, i + j)
  end
end

new_square_zero_matrix(::Type{T}, n) where {T} = zeros(T, n, n)

function the_matrix(::Type{I}, n, ab::NT{2}, c::NT{m}) where {I, m}
  T = (eltype  promote)(zero(I), ab..., c...)
  ret = new_square_zero_matrix(T, n)
  c! = let r = ret, c = c
    i -> symmetric_set_diagonal!(r, 2*i, c[begin + i])
  end
  for i  Base.OneTo(m)
    c!(i - 1)
  end
  (a, b) = ab
  if 0 < n
    symmetric_setindex!(ret, a, 0, 0)
    if 1 < n
      symmetric_setindex!(ret, a, 1, 1)
      symmetric_setindex!(ret, b, 0, 1)
    end
  end
  LinearAlgebra.issymmetric(ret) || error("matrix not symmetric")
  S = LinearAlgebra.Symmetric
  S(ret)::S{T}
end

the_polynomial(::Type{I}, n, x, ab::NT{2}, c::NT{m}) where {I, m} =
  characteristic_polynomial(the_matrix(I, n, ab, c), x)

struct Variables{
  m, X, AB<:NT{2}, CF, CR<:NT{m}, SAB<:NT{2}, SCF, SCR<:NT{m},
  LS, OA, OC, OAB, OBA, OCC1<:NT{m}, OCC2<:Tuple,
}
  x::X
  ab::AB
  c_first::CF
  c_rest::CR
  sign_ab::SAB
  sign_c_first::SCF
  sign_c_rest::SCR
  laguerre_samuelson::LS
  order_a::OA
  order_c::OC
  order_ab::OAB
  order_ba::OBA
  order_cc1::OCC1
  order_cc2::OCC2
end

function the_equations(
  ::Type{I}, n, vars::Variables{c_rest_len},
) where {I, c_rest_len}
  is_pos = (l, s) -> is_ordered_after_zero(<, I, l, s)
  greater_than  = (l, r, s) -> are_ordered(<, I, l, r, s)
  greater_or_eq = (l, r, s) -> are_ordered(, I, l, r, s)

  p = the_polynomial(I, n, vars.x, vars.ab, (vars.c_first, vars.c_rest...))
  s_ab = map(is_pos, vars.ab, vars.sign_ab)
  s_c_first = is_pos(vars.c_first, vars.sign_c_first)
  s_c_rest = map(is_pos, vars.c_rest, vars.sign_c_rest)
  ls = laguerre_samuelson_inequality(I, p, vars.x, vars.laguerre_samuelson)

  # Theorem 4.8 from *Eigenvalues of Nonnegative Symmetric Matrices*, 1974,
  # Miroslav Fiedler, 10.1016/0024-3795(74)90031-7
  #
  # Only necessarily holds for the greatest eigenvalue; i.e., if we assume
  # these equations hold, we're potentially losing all other eigenvalues.
  o_a = greater_or_eq(first(vars.ab), vars.x, vars.order_a)
  o_c = greater_or_eq(vars.c_first  , vars.x, vars.order_c)

  mag_fac_small = I(2)
  mag_fac_big   = I(1000)

  # Some equations specific to Mason's problem
  #
  # * b < a
  # * a,b have similar magnitudes: a ≤ mag_fac_small*b
  # * c_first is of greater magnitude than any of c_rest
  # * all c_rest values have similar magnitudes
  occ1 = let ge = greater_or_eq, cf = vars.c_first, cr = vars.c_rest,
             cc = vars.order_cc1
    i -> ge(mag_fac_big*(cr[i]), cf, cc[i])
  end
  occ2 = let ge = greater_or_eq, cr = vars.c_rest, cc = vars.order_cc2
    function(i)
      j = i - 1
      k = j >>> true
      a = cr[begin + k]
      b = cr[begin + k + 1]
      if iseven(j)
        ge(a, mag_fac_small*b, cc[i])
      else
        ge(b, mag_fac_small*a, cc[i])
      end
    end
  end
  (va, vb) = vars.ab
  spec = (
    greater_than(vb, va, vars.order_ab),
    greater_or_eq(va, mag_fac_small*vb, vars.order_ba),
    ntuple(occ1, Val(c_rest_len))...,
    ntuple(occ2, Val(2*(c_rest_len - 1)))...,
  )

  ret = (p, s_ab..., s_c_first, s_c_rest..., ls, o_a, o_c, spec...)
  collect(ret)
end

end

import Groebner, DynamicPolynomials, TypedPolynomials
const GRB = Groebner
const POL = DynamicPolynomials
const EME = EigenMasonEquations

my_groebner_(::Type{I}, n, vars; kwargs...) where {I} =
  GRB.groebner((collect  EME.the_equations)(I, n, vars); kwargs...)

function default_vars()
  POL.@polyvar x c₀ c₀ₛ l aₒ c₀ₒ abₒ baₒ
  v_ab      = POL.@polyvar a b
  v_c_rest  = POL.@polyvar c₁ c₂
  v_sign_ab = POL.@polyvar aₛ bₛ
  v_sign_c  = POL.@polyvar c₁ₛ c₂ₛ
  v_cc1     = POL.@polyvar q₁ q₂
  v_cc2     = POL.@polyvar r₁ r₂
  EME.Variables(
    x, v_ab, c₀, v_c_rest, v_sign_ab, c₀ₛ, v_sign_c, l, aₒ, c₀ₒ,
    abₒ, baₒ, v_cc1, v_cc2,
  )
end

my_groebner_(::Type{I}, n; kwargs...) where {I} = my_groebner_(I, n, default_vars(); kwargs...)

my_groebner_2(::Type{I}, n) where {I} = my_groebner_(I, n, ordering = GRB.DegLex())
my_groebner_3(::Type{I}, n) where {I} = my_groebner_(I, n, ordering = GRB.DegRevLex())

my_groebner(n) = my_groebner_3(BigInt, n)

from groebner.jl.

nsajko avatar nsajko commented on July 2, 2024

In this case I "fixed" the issue by changing to a different term ordering (the computation is now done instantly!), however the questions still stand.

from groebner.jl.

sumiya11 avatar sumiya11 commented on July 2, 2024

Does this mean that my computation is restarting completely, from scratch?

Yes.

I don't know what is an exponent vector, but I wonder whether there's a way to increase the exponent size in advance, before starting the computation. Otherwise there's a lot of wasted computational effort, if the computation restarts multiple times each time I start the process.

At the moment there is no such feature.
Note however: seeing this warning message can often mean that the problem is out of reach for Groebner.jl (I am guessing you use Lex term ordering?).

The algorithm in Groebner.jl is very much more efficient for DegLex and DegRevLex term orderings. If these term orderings are sufficient for your task, I would very much recommend using DegRevLex.

from groebner.jl.

nsajko avatar nsajko commented on July 2, 2024

I am guessing you use Lex term ordering?

No, the error was with DegLex, but afterwards I switched to DegRevLex, which makes groebner finish almost instantly.

The algorithm in Groebner.jl is very much more efficient for DegLex and DegRevLex term orderings.

Thanks, good to know.

from groebner.jl.

sumiya11 avatar sumiya11 commented on July 2, 2024

I am guessing you use Lex term ordering?

No, the error was with DegLex, but afterwards I switched to DegRevLex, which makes groebner finish almost instantly.

Ah.. it is interesting that it is slow with DegLex. Does this polynomial system come from some specific application?

from groebner.jl.

sumiya11 avatar sumiya11 commented on July 2, 2024

Thanks for sharing the example! I will try to look at it this weekend.

Unfortunately at the moment if I do my_groebner(5) I get this error:

ERROR: LoadError: polynomial not monic
Stacktrace:
  [1] error(s::String)
    @ Base .\error.jl:35
  [2] laguerre_samuelson_inequality(#unused#::Type{BigInt}, p::DynamicPolynomials.Polynomial{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}, BigInt}, x::DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, scratch::DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}})
    @ Main.EigenMasonEquations C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:48        
  [3] the_equations(#unused#::Type{BigInt}, n::Int64, vars::Main.EigenMasonEquations.Variables{2, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}})
    @ Main.EigenMasonEquations C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:154       
  [4] call_composed(fs::Tuple{typeof(Main.EigenMasonEquations.the_equations)}, x::Tuple{DataType, Int64, Main.EigenMasonEquations.Variables{2, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}}}, kw::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base .\operators.jl:1035
  [5] call_composed(fs::Tuple{typeof(collect), typeof(Main.EigenMasonEquations.the_equations)}, x::Tuple{DataType, Int64, Main.EigenMasonEquations.Variables{2, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}}}, kw::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base .\operators.jl:1034
  [6] (::ComposedFunction{typeof(collect), typeof(Main.EigenMasonEquations.the_equations)})(::Type, ::Vararg{Any}; kw::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base .\operators.jl:1031
  [7] ComposedFunction
    @ .\operators.jl:1031 [inlined]
  [8] my_groebner_(::Type{BigInt}, n::Int64, vars::Main.EigenMasonEquations.Variables{2, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}, Tuple{DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}, DynamicPolynomials.Variable{DynamicPolynomials.Commutative{DynamicPolynomials.CreationOrder}, MultivariatePolynomials.Graded{MultivariatePolynomials.LexOrder}}}}; kwargs::Base.Pairs{Symbol, 
Groebner.DegRevLex{Nothing}, Tuple{Symbol}, NamedTuple{(:ordering,), Tuple{Groebner.DegRevLex{Nothing}}}})   
    @ Main C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:208
  [9] my_groebner_
    @ C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:208 [inlined]
 [10] #my_groebner_#4
    @ C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:237 [inlined]
 [11] my_groebner_
    @ C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:237 [inlined]
 [12] my_groebner_3
    @ C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:241 [inlined]
 [13] my_groebner(n::Int64)
    @ Main C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:243
 [14] top-level scope
    @ C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:245
in expression starting at C:\data\projects\gbgb\Groebner.jl\experimental\linear-algebra\stuff:245

from groebner.jl.

nsajko avatar nsajko commented on July 2, 2024

Ah, yes, the n has to be even and at least six.

from groebner.jl.

sumiya11 avatar sumiya11 commented on July 2, 2024

Oh, I see, thanks

from groebner.jl.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.