<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def i4_uniform(a, b, seed):
 """ i4_uniform returns a scaled pseudorandom I4. Discussion: The pseudorandom number will be scaled to be uniformly distributed between A and B. Reference: Paul Bratley, Bennett Fox, Linus Schrage, A Guide to Simulation, Springer Verlag, pages 201-202, 1983. Pierre L'Ecuyer, Random Number Generation, in Handbook of Simulation, edited by Jerry Banks, Wiley Interscience, page 95, 1998. Bennett Fox, Algorithm 647: Implementation and Relative Efficiency of Quasirandom Sequence Generators, ACM Transactions on Mathematical Software, Volume 12, Number 4, pages 362-376, 1986. Peter Lewis, Allen Goodman, James Miller A Pseudo-Random Number Generator for the System/360, IBM Systems Journal, Volume 8, pages 136-143, 1969. Parameters: Input, integer A, B, the minimum and maximum acceptable values. Input, integer SEED, a seed for the random number generator. Output, integer C, the randomly chosen integer. Output, integer SEED, the updated seed. """

    if seed == 0:
        print('I4_UNIFORM - Fatal error!')
        print('  Input SEED = 0!')

    seed = np.floor(seed)
    a = round(a)
    b = round(b)

    seed = np.mod(seed, 2147483647)

    if seed < 0:
        seed += 2147483647

    k = seed // 127773

    seed = 16807 * (seed - k * 127773) - k * 2836

    if seed < 0:
        seed += 2147483647

    r = seed * 4.656612875E-10

    #  Scale R to lie between A-0.5 and B+0.5.
    r = (1.0 - r) * (min(a, b) - 0.5) + r * (max(a, b) + 0.5)

    #  Use rounding to convert R to an integer between A and B.
    value = round(r)

    value = max(value, min(a, b))
    value = min(value, max(a, b))

    c = value

    return [int(c), int(seed)]