1
0
mirror of https://github.com/kalmarek/SmallHyperbolic synced 2024-11-23 15:35:27 +01:00

split parse_magma_fpgroup to get gens/rels as strings

This commit is contained in:
Marek Kaluba 2022-01-17 20:31:26 +01:00
parent 44ebfad5e4
commit fbb0008457
No known key found for this signature in database
GPG Key ID: 8BF1A3855328FC15

View File

@ -6,13 +6,15 @@ const COMMUTATOR_regex = r"\((?<comm>[\w](\s?,\s?[\w]){1+})\)"
iscomment(line) = startswith(line, "//") iscomment(line) = startswith(line, "//")
ismagma_presentation(line) = (m = match(MAGMA_PRESENTATION_regex, line); return !isnothing(m), m) ismagma_presentation(line) = (m = match(MAGMA_PRESENTATION_regex, line); return !isnothing(m), m)
function parse_magma_fpgroup(str::AbstractString)
function split_magma_presentation(str::AbstractString)
m = match(MAGMA_PRESENTATION_regex, str) m = match(MAGMA_PRESENTATION_regex, str)
gens_str = strip.(split(m[:gens], ",")) gens_str = strip.(split(m[:gens], ","))
rels_str = m[:rels] rels_str = m[:rels]
split_indices = [0] split_indices = [0]
in_function_call=0 in_function_call = 0
for (i,s) in enumerate(rels_str) for (i, s) in enumerate(rels_str)
if s == '(' if s == '('
in_function_call += 1 in_function_call += 1
elseif s == ')' elseif s == ')'
@ -23,13 +25,20 @@ function parse_magma_fpgroup(str::AbstractString)
end end
end end
@assert in_function_call == 0 @assert in_function_call == 0
push!(split_indices, length(rels_str)+1) push!(split_indices, length(rels_str) + 1)
rels_strs = [strip.(String(rels_str[s+1:e-1])) for (s,e) in zip(split_indices, Iterators.rest(split_indices, 2))] rels_strs = [
strip.(String(rels_str[s+1:e-1])) for
(s, e) in zip(split_indices, Iterators.rest(split_indices, 2))
]
# rels_strs = replace.(rels_strs, COMMUTATOR_regex=> s"comm(\g<comm>)") # rels_strs = replace.(rels_strs, COMMUTATOR_regex=> s"comm(\g<comm>)")
# @show rels_strs # @show rels_strs
return gens_str, rels_strs
end
function parse_magma_fpgroup(str::AbstractString)
gens_str, rels_strs = split_magma_presentation(str)
return parse_magma_fpgroup(gens_str, rels_strs) return parse_magma_fpgroup(gens_str, rels_strs)
end end