Image Range-Loop Problems

            
def double_left(filename):
    image = SimpleImage(filename)
    # style idea: the math is hard enough to follow,
    # it's helpful to introduce a variable like this to name
    # a common value we need (identify mid_x on drawing too).
    mid_x = image.width // 2
    for y in range(image.height):
        for x in range(mid_x):
            pixel = image.get_pixel(x, y)
            pixel_right = image.get_pixel(mid_x + x, y)
            pixel_right.red = pixel.red
            pixel_right.green = pixel.green
            pixel_right.blue = pixel.blue
    return image

def double_left_up(filename):
    image = SimpleImage(filename)
    mid_x = image.width // 2
    for y in range(image.height):
        for x in range(mid_x):
            pixel = image.get_pixel(x, y)
            # the key line:
            pixel_right = image.get_pixel(mid_x + x, image.height - y - 1)
            pixel_right.red = pixel.red
            pixel_right.green = pixel.green
            pixel_right.blue = pixel.blue
    return image

def copies_2(filename):
    image = SimpleImage(filename)
    # Creates a new white image with nothing in it
    out = SimpleImage('', width=image.width * 2, height=image.height)
    mid_x = image.width
    for y in range(image.height):
        for x in range(image.width):
            pixel = image.get_pixel(x, y)
            # left copy
            pixel_left = out.get_pixel(x, y)
            pixel_left.red = pixel.red
            pixel_left.green = pixel.green
            pixel_left.blue = pixel.blue
            # right copy
            pixel_right = out.get_pixel(mid_x + x, y)
            pixel_right.red = pixel.red
            pixel_right.green = pixel.green
            pixel_right.blue = pixel.blue
    return out

def squeeze_width(filename, n):
    image = SimpleImage(filename)
    out = SimpleImage('', width=image.width // n, height=image.height)
    # strategy: iterate x,y over the out pixels, compute
    # scaled * n pixel in original image.
    for y in range(out.height):
        for x in range(out.width):
            pixel_out = out.get_pixel(x, y)
            pixel = image.get_pixel(x * n, y)

            pixel_out.red = pixel.red
            pixel_out.green = pixel.green
            pixel_out.blue = pixel.blue
    return  out