code: def render_fishes(position, theta, width, height):
      position = to_pillow_coordinate(position, width, height)
      colors = [(88, 167, 210), (0, 153, 255), (56, 96, 123)]
      color_map = [i % len(colors) for i in range(BOIDS_NUM)]
  
      image = Image.new("RGB", (width, height), (255, 255, 255))
      draw = ImageDraw.Draw(image)
  
      fish_size = FISH_SIZE
      fish_size_half = (fish_size + 1) // 2
  
      for i in range(BOIDS_NUM):
          x, y = position[i]
          angle = theta[i][0]
  
          polygon_xy = [
              (x - fish_size_half, y - fish_size_half / 3),
              (x - fish_size_half / 5 * 3, y - fish_size_half / 4),
              (x, y - fish_size_half / 2),
              (x + fish_size_half / 3 * 2, y - fish_size_half / 3),
              (x + fish_size_half, y),
              (x + fish_size_half / 3 * 2, y + fish_size_half / 3),
              (x, y + fish_size_half / 2),
              (x - fish_size_half / 5 * 3, y + fish_size_half / 4),
              (x - fish_size_half, y + fish_size_half / 3),
          ]
  
          polygon_xy = [
              rotate(px, py, x, y, angle) for px, py in polygon_xy
          ]
          draw.polygon(xy=polygon_xy, fill=colors[color_map[i]])
      return image
  
imports: from PIL import Image, ImageDraw
  from functools import partial
  from typing import Tuple
  import jax
  from jax import vmap
  import jax.numpy
  from flax.struct import dataclass
  from evojax.task.base import VectorizedTask
  from evojax.task.base import TaskState
label_desc: Use image node_id 21 for calling a global function with example usage: render_fishes(position, theta, width, height) and returns: image