code: def dup_zz_hensel_step(m, f, g, h, s, t, K):
      """
      One step in Hensel lifting in `Z[x]`.
  
      Given positive integer `m` and `Z[x]` polynomials `f`, `g`, `h`, `s`
      and `t` such that::
  
          f = g*h (mod m)
          s*g + t*h = 1 (mod m)
  
          lc(f) is not a zero divisor (mod m)
          lc(h) = 1
  
          deg(f) = deg(g) + deg(h)
          deg(s) < deg(h)
          deg(t) < deg(g)
  
      returns polynomials `G`, `H`, `S` and `T`, such that::
  
          f = G*H (mod m**2)
          S*G + T*H = 1 (mod m**2)
  
      References
      ==========
  
      .. [1] [Gathen99]_
  
      """
      M = m**2
  
      e = dup_sub_mul(f, g, h, K)
      e = dup_trunc(e, M, K)
  
      q, r = dup_div(dup_mul(s, e, K), h, K)
  
      q = dup_trunc(q, M, K)
      r = dup_trunc(r, M, K)
  
      u = dup_add(dup_mul(t, e, K), dup_mul(q, g, K), K)
      G = dup_trunc(dup_add(g, u, K), M, K)
      H = dup_trunc(dup_add(h, r, K), M, K)
  
      u = dup_add(dup_mul(s, G, K), dup_mul(t, H, K), K)
      b = dup_trunc(dup_sub(u, [K.one], K), M, K)
  
      c, d = dup_div(dup_mul(s, b, K), H, K)
  
      c = dup_trunc(c, M, K)
      d = dup_trunc(d, M, K)
  
      u = dup_add(dup_mul(t, b, K), dup_mul(c, G, K), K)
      S = dup_trunc(dup_sub(s, d, K), M, K)
      T = dup_trunc(dup_sub(t, u, K), M, K)
  
      return G, H, S, T
  
imports: from sympy.external.gmpy import GROUND_TYPES
  from sympy.core.random import _randint
  from sympy.polys.galoistools import gf_from_int_poly, gf_to_int_poly, gf_lshift, gf_add_mul, gf_mul, gf_div, gf_rem, gf_gcdex, gf_sqf_p, gf_factor_sqf, gf_factor
  from sympy.polys.densebasic import dup_LC, dmp_LC, dmp_ground_LC, dup_TC, dup_convert, dmp_convert, dup_degree, dmp_degree, dmp_degree_in, dmp_degree_list, dmp_from_dict, dmp_zero_p, dmp_one, dmp_nest, dmp_raise, dup_strip, dmp_ground, dup_inflate, dmp_exclude, dmp_include, dmp_inject, dmp_eject, dup_terms_gcd, dmp_terms_gcd
  from sympy.polys.densearith import dup_neg, dmp_neg, dup_add, dmp_add, dup_sub, dmp_sub, dup_mul, dmp_mul, dup_sqr, dmp_pow, dup_div, dmp_div, dup_quo, dmp_quo, dmp_expand, dmp_add_mul, dup_sub_mul, dmp_sub_mul, dup_lshift, dup_max_norm, dmp_max_norm, dup_l1_norm, dup_mul_ground, dmp_mul_ground, dup_quo_ground, dmp_quo_ground
  from sympy.polys.densetools import dup_clear_denoms, dmp_clear_denoms, dup_trunc, dmp_ground_trunc, dup_content, dup_monic, dmp_ground_monic, dup_primitive, dmp_ground_primitive, dmp_eval_tail, dmp_eval_in, dmp_diff_eval_in, dmp_compose, dup_shift, dup_mirror
  from sympy.polys.euclidtools import dmp_primitive, dup_inner_gcd, dmp_inner_gcd
  from sympy.polys.sqfreetools import dup_sqf_p, dup_sqf_norm, dmp_sqf_norm, dup_sqf_part, dmp_sqf_part
  from sympy.polys.polyutils import _sort_factors
  from sympy.polys.polyconfig import query
  from sympy.polys.polyerrors import ExtraneousFactors, DomainError, CoercionFailed, EvaluationFailed
  from sympy.utilities import subsets
  from math import ceil, log
label_desc: Use image node_id 5 for calling a global function with example usage: dup_zz_hensel_step(m, f, g, h, s, t, K) and returns: G,  H,  S,  T