# generate_proposals — CPU crash
# 根因: bbox_deltas batch=0 或 im_shape 第二维=0

# --- 模式 A: bbox_deltas batch=0 ---

# case A1
vision.ops.generate_proposals(scores=Tensor.float32((1, 15, 40, 60)), bbox_deltas=Tensor.float32((0, 60, 40, 60)), im_shape=Tensor.float32((1, 2)), anchors=Tensor.float32((36000, 4)), variances=Tensor.float32((36000, 4)), pre_nms_top_n=12000, post_nms_top_n=2000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case A2
vision.ops.generate_proposals(scores=Tensor.float32((1, 15, 42, 63)), bbox_deltas=Tensor.float32((0, 60, 42, 63)), im_shape=Tensor.float32((1, 2)), anchors=Tensor.float32((39690, 4)), variances=Tensor.float32((39690, 4)), pre_nms_top_n=12000, post_nms_top_n=2000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case A3
vision.ops.generate_proposals(scores=Tensor.float32((1, 3, 10, 14)), bbox_deltas=Tensor.float32((0, 12, 10, 14)), im_shape=Tensor.float32((1, 2)), anchors=Tensor.float32((420, 4)), variances=Tensor.float32((420, 4)), pre_nms_top_n=2000, post_nms_top_n=2000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case A4
vision.ops.generate_proposals(scores=Tensor.float32((1, 3, 10, 15)), bbox_deltas=Tensor.float32((0, 12, 10, 15)), im_shape=Tensor.float32((1, 2)), anchors=Tensor.float32((450, 4)), variances=Tensor.float32((450, 4)), pre_nms_top_n=2000, post_nms_top_n=2000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case A5
vision.ops.generate_proposals(scores=Tensor.float32((1, 4, 16, 16)), bbox_deltas=Tensor.float32((0, 16, 16, 16)), im_shape=Tensor.float32((1, 2)), anchors=Tensor.float32((16, 16, 4, 4)), variances=Tensor.float32((16, 16, 4, 4)), pre_nms_top_n=12000, post_nms_top_n=5000, nms_thresh=0.7, min_size=3.0, eta=1.0, pixel_offset=True, return_rois_num=True)

# case A6
vision.ops.generate_proposals(scores=Tensor.float32((1, 9, 10, 8)), bbox_deltas=Tensor.float32((0, 36, 10, 8)), im_shape=Tensor.float32((1, 2)), anchors=Tensor.float32((720, 4)), variances=Tensor.float32((720, 4)), pre_nms_top_n=4000, post_nms_top_n=4000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case A7
vision.ops.generate_proposals(scores=Tensor.float32((1, 9, 12, 9)), bbox_deltas=Tensor.float32((0, 36, 12, 9)), im_shape=Tensor.float32((1, 2)), anchors=Tensor.float32((972, 4)), variances=Tensor.float32((972, 4)), pre_nms_top_n=4000, post_nms_top_n=4000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case A8
vision.ops.generate_proposals(scores=Tensor.float32((2, 3, 4, 4)), bbox_deltas=Tensor.float32((0, 12, 4, 4)), im_shape=Tensor.float32((2, 3)), anchors=Tensor.float32((4, 4, 3, 4)), variances=Tensor.float32((4, 4, 3, 4)), pre_nms_top_n=10, post_nms_top_n=5, return_rois_num=True)

# --- 模式 B: im_shape 第二维=0 ---

# case B1
vision.ops.generate_proposals(scores=Tensor.float32((1, 15, 40, 60)), bbox_deltas=Tensor.float32((1, 60, 40, 60)), im_shape=Tensor.float32((1, 0)), anchors=Tensor.float32((36000, 4)), variances=Tensor.float32((36000, 4)), pre_nms_top_n=12000, post_nms_top_n=2000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case B2
vision.ops.generate_proposals(scores=Tensor.float32((1, 15, 42, 63)), bbox_deltas=Tensor.float32((1, 60, 42, 63)), im_shape=Tensor.float32((1, 0)), anchors=Tensor.float32((39690, 4)), variances=Tensor.float32((39690, 4)), pre_nms_top_n=12000, post_nms_top_n=2000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case B3
vision.ops.generate_proposals(scores=Tensor.float32((1, 3, 10, 14)), bbox_deltas=Tensor.float32((1, 12, 10, 14)), im_shape=Tensor.float32((1, 0)), anchors=Tensor.float32((420, 4)), variances=Tensor.float32((420, 4)), pre_nms_top_n=2000, post_nms_top_n=2000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case B4
vision.ops.generate_proposals(scores=Tensor.float32((1, 3, 10, 15)), bbox_deltas=Tensor.float32((1, 12, 10, 15)), im_shape=Tensor.float32((1, 0)), anchors=Tensor.float32((450, 4)), variances=Tensor.float32((450, 4)), pre_nms_top_n=2000, post_nms_top_n=2000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case B5
vision.ops.generate_proposals(scores=Tensor.float32((1, 4, 16, 16)), bbox_deltas=Tensor.float32((1, 16, 16, 16)), im_shape=Tensor.float32((1, 0)), anchors=Tensor.float32((16, 16, 4, 4)), variances=Tensor.float32((16, 16, 4, 4)), pre_nms_top_n=12000, post_nms_top_n=5000, nms_thresh=0.7, min_size=3.0, eta=1.0, pixel_offset=True, return_rois_num=True)

# case B6
vision.ops.generate_proposals(scores=Tensor.float32((1, 9, 10, 8)), bbox_deltas=Tensor.float32((1, 36, 10, 8)), im_shape=Tensor.float32((1, 0)), anchors=Tensor.float32((720, 4)), variances=Tensor.float32((720, 4)), pre_nms_top_n=4000, post_nms_top_n=4000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case B7
vision.ops.generate_proposals(scores=Tensor.float32((1, 9, 12, 9)), bbox_deltas=Tensor.float32((1, 36, 12, 9)), im_shape=Tensor.float32((1, 0)), anchors=Tensor.float32((972, 4)), variances=Tensor.float32((972, 4)), pre_nms_top_n=4000, post_nms_top_n=4000, nms_thresh=0.7, min_size=0.0, eta=1.0, return_rois_num=True)

# case B8
vision.ops.generate_proposals(scores=Tensor.float32((2, 3, 4, 4)), bbox_deltas=Tensor.float32((2, 12, 4, 4)), im_shape=Tensor.float32((2, 0)), anchors=Tensor.float32((4, 4, 3, 4)), variances=Tensor.float32((4, 4, 3, 4)), pre_nms_top_n=10, post_nms_top_n=5, return_rois_num=True)
