code: def to_sharded(lbs: List[LazyBuffer], axis: int) -> List[LazyBuffer]:
      if DEBUG >= 3 and lbs[0].shape[axis] % len(lbs) != 0:
          print(
              f"multi axis uneven: {lbs[0].shape=} {axis=} {len(lbs)=}"
          )
      sz = round_up(lbs[0].shape[axis], len(lbs)) // len(lbs)
      return [
          lb.shrink(
              tuple(
                  (0, s)
                  if a != axis
                  else (sz * i, min(s, sz * (i + 1)))
                  for a, s in enumerate(lb.shape)
              )
          )
          for i, lb in enumerate(lbs)
      ]
  
imports: from __future__ import annotations
  from typing import Optional, Union, Any, Tuple, List
  import functools
  from tinygrad.helpers import all_same, dedup, round_up, DEBUG
  from tinygrad.dtype import DType
  from tinygrad.ops import BinaryOps, LoadOps, UnaryOps, TernaryOps, ReduceOps
  from tinygrad.lazy import LazyBuffer, create_schedule
  from tinygrad.shape.shapetracker import ShapeTracker, sint
label_desc: Use image node_id 2 for calling a global function with example usage: to_sharded(lbs, axis) and returns: unknown