<commit_before>################################################################################
#
#  FakeFmpqMat.jl : Model fmpq_mat's as fmpz_mat's with denominator
#
################################################################################

export num, den

num(x::FakeFmpqMat) = x.num

den(x::FakeFmpqMat) = x.den

function simplify_content!(x::FakeFmpqMat)
  c = content(x.num)
  c = gcd(c, x.den)
  if c != 1 
    x.num = divexact(x.num, c)
    x.den = div(x.den, c)
  end
  y = canonical_unit(x.den)
  x.den *= y
  x.num *= y
end

################################################################################
#
#  Hashing
#
################################################################################

function hash(a::FakeFmpqMat, b::UInt)
  h = Base.hash(num(a)) $ Base.hash(den(a))
  h = h $ Base.hash(b)
  h = (h << 1) | (h >> (sizeof(Int)*8 - 1))
  return h
end

################################################################################
#
#  String I/O
#
################################################################################

function show(io::IO, x::FakeFmpqMat)
  print(io, "FakeFmpqMat with numerator\n", num(x), "\nand denominator ", den(x))
end

################################################################################
#<commit_msg>use inplace operations for somplify_content of fmpz_mat<commit_after>################################################################################
#
#  FakeFmpqMat.jl : Model fmpq_mat's as fmpz_mat's with denominator
#
################################################################################

export num, den

num(x::FakeFmpqMat) = x.num

den(x::FakeFmpqMat) = x.den

function simplify_content!(x::FakeFmpqMat)
  c = content(x.num)
  c = gcd(c, x.den)
  if c != 1 
    divexact!(x.num, x.num, c)
    x.den = div(x.den, c)
  end
  y = canonical_unit(x.den)
  if !isone(y)
    x.den *= y
    mul!(x.num, x.num, y)
  end
end

################################################################################
#
#  Hashing
#
################################################################################

function hash(a::FakeFmpqMat, b::UInt)
  h = Base.hash(num(a)) $ Base.hash(den(a))
  h = h $ Base.hash(b)
  h = (h << 1) | (h >> (sizeof(Int)*8 - 1))
  return h
end

################################################################################
#
#  String I/O
#
################################################################################

function show(io::IO, x::FakeFmpqMat)
  print(io, "FakeFmpqMat with numerator\n", num(x), "\nand denominator ", den(x))
end

################################################################################
#
{'fraction_non_alphanumeric': 0.5244913338357197, 'fraction_numerical': 0.003014318010550113, 'mean_word_length': 6.334254143646409, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3724178', 'n_tokens_mistral': 809, 'n_tokens_neox': 758, 'n_words': 154}