def test_invalid_box_specs(self):
    # not all box specs are pairs
    box_specs_list = [[(1.0, 1.0), (2.0, 1.0), (1.0, 0.5)],
                      [(1.0, 1.0), (1.0, 0.5, .3)]]
    with self.assertRaises(ValueError):
      ag.MultipleGridAnchorGenerator(box_specs_list)

    # box_specs_list is not a list of lists
    box_specs_list = [(1.0, 1.0), (2.0, 1.0), (1.0, 0.5)]
    with self.assertRaises(ValueError):
      ag.MultipleGridAnchorGenerator(box_specs_list)
 def graph_fn(height, width):
   box_specs_list = [[(1.0, 1.0)]]
   anchor_generator = ag.MultipleGridAnchorGenerator(
       box_specs_list, base_anchor_size=tf.constant([1, 1],
                                                    dtype=tf.float32))
   anchors_list = anchor_generator.generate(feature_map_shape_list=[(height,
                                                                     width)])
   return anchors_list[0].get()
    def graph_fn():
      box_specs_list = [[(0.5, 1.0), (1.0, 1.0), (2.0, 1.0)]]

      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([10, 10], dtype=tf.float32),
          anchor_strides=[(19, 19)],
          anchor_offsets=[(0, 0)])
      anchors_list = anchor_generator.generate(feature_map_shape_list=[(2, 2)])
      return anchors_list[0].get()
    def graph_fn():

      box_specs_list = [[(.5, .25), (1.0, .25), (2.0, .25),
                         (.5, 1.0), (1.0, 1.0), (2.0, 1.0),
                         (.5, 4.0), (1.0, 4.0), (2.0, 4.0)]]
      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([256, 256], dtype=tf.float32),
          anchor_strides=[(16, 16)],
          anchor_offsets=[(7, -3)])
      anchors_list = anchor_generator.generate(feature_map_shape_list=[(1, 1)])
      return anchors_list[0].get()
    def graph_fn():
      box_specs_list = [[(1.0, 1.0), (2.0, 1.0), (1.0, 0.5)],
                        [(1.0, 1.0), (1.0, 0.5)]]

      clip_window = tf.constant([0, 0, 1, 1], dtype=tf.float32)
      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([1.0, 1.0], dtype=tf.float32),
          clip_window=clip_window)
      anchors_list = anchor_generator.generate(feature_map_shape_list=[(4, 4), (
          2, 2)])
      return [anchors.get() for anchors in anchors_list]
    def graph_fn():
      box_specs_list = [[(1.0, 1.0), (2.0, 1.0), (1.0, 0.5)],
                        [(1.0, 1.0), (1.0, 0.5)]]

      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([1.0, 1.0], dtype=tf.float32),
          anchor_strides=[(.25, .25), (.5, .5)],
          anchor_offsets=[(.125, .125), (.25, .25)])
      anchors_list = anchor_generator.generate(feature_map_shape_list=[(4, 4), (
          2, 2)])
      return [anchors.get() for anchors in anchors_list]
    def graph_fn():
      box_specs_list = [[(1.0, 1.0)]]

      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list, base_anchor_size=tf.constant([1, 1],
                                                       dtype=tf.float32))
      anchors_list = anchor_generator.generate(
          feature_map_shape_list=[(tf.constant(1, dtype=tf.int32), tf.constant(
              2, dtype=tf.int32))],
          im_height=320,
          im_width=640)
      return anchors_list[0].get()
  def test_invalid_generate_arguments(self):
    box_specs_list = [[(1.0, 1.0), (2.0, 1.0), (1.0, 0.5)],
                      [(1.0, 1.0), (1.0, 0.5)]]

    # incompatible lengths with box_specs_list
    with self.assertRaises(ValueError):
      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([1.0, 1.0], dtype=tf.float32),
          anchor_strides=[(.25, .25)],
          anchor_offsets=[(.125, .125), (.25, .25)])
      anchor_generator.generate(feature_map_shape_list=[(4, 4), (2, 2)])
    with self.assertRaises(ValueError):
      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([1.0, 1.0], dtype=tf.float32),
          anchor_strides=[(.25, .25), (.5, .5)],
          anchor_offsets=[(.125, .125), (.25, .25)])
      anchor_generator.generate(feature_map_shape_list=[(4, 4), (2, 2), (1, 1)])
    with self.assertRaises(ValueError):
      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([1.0, 1.0], dtype=tf.float32),
          anchor_strides=[(.5, .5)],
          anchor_offsets=[(.25, .25)])
      anchor_generator.generate(feature_map_shape_list=[(4, 4), (2, 2)])

    # not pairs
    with self.assertRaises(ValueError):
      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([1.0, 1.0], dtype=tf.float32),
          anchor_strides=[(.25, .25), (.5, .5)],
          anchor_offsets=[(.125, .125), (.25, .25)])
      anchor_generator.generate(feature_map_shape_list=[(4, 4, 4), (2, 2)])
    with self.assertRaises(ValueError):
      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([1.0, 1.0], dtype=tf.float32),
          anchor_strides=[(.25, .25, .1), (.5, .5)],
          anchor_offsets=[(.125, .125), (.25, .25)])
      anchor_generator.generate(feature_map_shape_list=[(4, 4), (2, 2)])
    with self.assertRaises(ValueError):
      anchor_generator = ag.MultipleGridAnchorGenerator(
          box_specs_list,
          base_anchor_size=tf.constant([1.0, 1.0], dtype=tf.float32),
          anchor_strides=[(.25, .25), (.5, .5)],
          anchor_offsets=[(.125, .125), (.25, .25)])
      anchor_generator.generate(feature_map_shape_list=[(4), (2, 2)])