


"""simple docstring"""


from collections import OrderedDict
from typing import Any, Mapping, Optional

from ... import PreTrainedTokenizer
from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig, OnnxConfigWithPast, OnnxSeqaSeqConfigWithPast
from ...onnx.utils import compute_effective_axis_dimension
from ...utils import TensorType, is_torch_available, logging


a_											=     logging.get_logger(__name__)

a_											=     {
    "google/bigbird-pegasus-large-arxiv": (
        "https://huggingface.co/google/bigbird-pegasus-large-arxiv/resolve/main/config.json"
    ),
    "google/bigbird-pegasus-large-pubmed": (
        "https://huggingface.co/google/bigbird-pegasus-large-pubmed/resolve/main/config.json"
    ),
    "google/bigbird-pegasus-large-bigpatent": (
        "https://huggingface.co/google/bigbird-pegasus-large-bigpatent/resolve/main/config.json"
    ),
    # See all BigBirdPegasus models at https://huggingface.co/models?filter=bigbird_pegasus
}
class snake_case   (	_UpperCamelCase):
		__UpperCamelCase							     =      'bigbird_pegasus'
		__UpperCamelCase							     =      ['past_key_values']
		__UpperCamelCase							     =      {
		    'num_attention_heads': 'encoder_attention_heads',
		    'hidden_size': 'd_model',
		    'attention_probs_dropout_prob': 'attention_dropout',
		}







		def __init__(       self   :							Any     , a__   :							Optional[Any]=9_61_03     , a__   :							Optional[int]=40_96     , a__   :							Dict=16     , a__   :							Dict=40_96     , a__   :							Optional[int]=16     , a__   :							Any=16     , a__   :							str=40_96     , a__   :							Union[str, Any]=16     , a__   :							List[str]=0.0     , a__   :							Optional[int]=0.0     , a__   :							Optional[int]=True     , a__   :							Optional[Any]=True     , a__   :							Optional[int]="gelu_new"     , a__   :							int=10_24     , a__   :							Optional[Any]=0.1     , a__   :							Optional[Any]=0.0     , a__   :							Any=0.0     , a__   :							List[str]=0.0_2     , a__   :							int=2     , a__   :							Tuple=0.0     , a__   :							List[Any]=True     , a__   :							Any=0     , a__   :							Tuple=2     , a__   :							List[str]=1     , a__   :							Optional[int]="block_sparse"     , a__   :							Union[str, Any]=64     , a__   :							Union[str, Any]=3     , a__   :							Any=False     , **a__   :							Tuple     , )							->    Tuple:





						'''simple docstring'''







						_A       	=      vocab_size
						_A       	=      max_position_embeddings
						_A       	=      d_model
						_A       	=      encoder_ffn_dim
						_A       	=      encoder_layers
						_A       	=      encoder_attention_heads
						_A       	=      decoder_ffn_dim
						_A       	=      decoder_layers
						_A       	=      decoder_attention_heads
						_A       	=      dropout
						_A       	=      attention_dropout
						_A       	=      activation_dropout
						_A       	=      activation_function
						_A       	=      init_std
						_A       	=      encoder_layerdrop
						_A       	=      decoder_layerdrop
						_A       	=      classifier_dropout
						_A       	=      use_cache
						_A       	=      encoder_layers
						_A       	=      scale_embedding  # scale factor will be sqrt(d_model) if True

						# extra config
						_A       	=      attention_type
						_A       	=      block_size
						_A       	=      num_random_blocks
						_A       	=      use_bias

						super().__init__(
						    pad_token_id=a__     , bos_token_id=a__     , eos_token_id=a__     , is_encoder_decoder=a__     , decoder_start_token_id=a__     , **a__     , )





class snake_case   (	_UpperCamelCase):







		@property
		def 			a_			(       self   :							Optional[int]		)							->    Mapping[str, Mapping[int, str]]:





						'''simple docstring'''







						if self.task in ["default", "seq2seq-lm"]:
										_A       	=      OrderedDict(
										    [
										        ("input_ids", {0: "batch", 1: "encoder_sequence"}),
										        ("attention_mask", {0: "batch", 1: "encoder_sequence"}),
										    ]		)

										if self.use_past:
														_A       	=      {0: "batch"}
														_A       	=      {0: "batch", 1: "past_decoder_sequence + sequence"}
										else:
														_A       	=      {0: "batch", 1: "decoder_sequence"}
														_A       	=      {0: "batch", 1: "decoder_sequence"}

										if self.use_past:
														self.fill_with_past_key_values_(a__     , direction="inputs"		)
						elif self.task == "causal-lm":
										# TODO: figure this case out.
										_A       	=      OrderedDict(
										    [
										        ("input_ids", {0: "batch", 1: "encoder_sequence"}),
										        ("attention_mask", {0: "batch", 1: "encoder_sequence"}),
										    ]		)
										if self.use_past:
														_A	,		_A       	=      self.num_layers
														for i in range(a__		):
																		_A       	=      {0: "batch", 2: "past_sequence + sequence"}
																		_A       	=      {0: "batch", 2: "past_sequence + sequence"}
						else:
										_A       	=      OrderedDict(
										    [
										        ("input_ids", {0: "batch", 1: "encoder_sequence"}),
										        ("attention_mask", {0: "batch", 1: "encoder_sequence"}),
										        ("decoder_input_ids", {0: "batch", 1: "decoder_sequence"}),
										        ("decoder_attention_mask", {0: "batch", 1: "decoder_sequence"}),
										    ]		)

						return common_inputs







		@property
		def 			a_			(       self   :							int		)							->    Mapping[str, Mapping[int, str]]:





						'''simple docstring'''







						if self.task in ["default", "seq2seq-lm"]:
										_A       	=      super().outputs
						else:
										_A       	=      super(a__     , self		).outputs
										if self.use_past:
														_A	,		_A       	=      self.num_layers
														for i in range(a__		):
																		_A       	=      {0: "batch", 2: "past_sequence + sequence"}
																		_A       	=      {0: "batch", 2: "past_sequence + sequence"}
						return common_outputs







		def 			a_			(       self   :							int     , a__   :							PreTrainedTokenizer     , a__   :							int = -1     , a__   :							int = -1     , a__   :							bool = False     , a__   :							Optional[TensorType] = None     , )							->    Mapping[str, Any]:





						'''simple docstring'''







						_A       	=      self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
						    a__     , a__     , a__     , a__     , a__		)

						# Generate decoder inputs
						_A       	=      seq_length if not self.use_past else 1
						_A       	=      self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
						    a__     , a__     , a__     , a__     , a__		)
						_A       	=      {F"""decoder_{name}""": tensor for name, tensor in decoder_inputs.items()}
						_A       	=      dict(**a__     , **a__		)

						if self.use_past:
										if not is_torch_available():
														raise ValueError("Cannot generate dummy past_keys inputs without PyTorch installed."		)
										else:
														import torch
										_A	,		_A       	=      common_inputs["input_ids"].shape
										_A       	=      common_inputs["decoder_input_ids"].shape[1]
										_A	,		_A       	=      self.num_attention_heads
										_A       	=      (
										    batch,
										    num_encoder_attention_heads,
										    encoder_seq_length,
										    self._config.hidden_size // num_encoder_attention_heads,
										)
										_A       	=      decoder_seq_length + 3
										_A       	=      (
										    batch,
										    num_decoder_attention_heads,
										    decoder_past_length,
										    self._config.hidden_size // num_decoder_attention_heads,
										)

										_A       	=      torch.cat(
										    [common_inputs["decoder_attention_mask"], torch.ones(a__     , a__		)]     , dim=1		)

										_A       	=      []
										# If the number of encoder and decoder layers are present in the model configuration, both are considered
										_A	,		_A       	=      self.num_layers
										_A       	=      min(a__     , a__		)
										_A       	=      max(a__     , a__		) - min_num_layers
										_A       	=      "encoder" if num_encoder_layers > num_decoder_layers else "decoder"

										for _ in range(a__		):
														common_inputs["past_key_values"].append(
														    (
														        torch.zeros(a__		),
														        torch.zeros(a__		),
														        torch.zeros(a__		),
														        torch.zeros(a__		),
														    )		)
										# TODO: test this.
										_A       	=      encoder_shape if remaining_side_name == "encoder" else decoder_shape
										for _ in range(a__     , a__		):
														common_inputs["past_key_values"].append((torch.zeros(a__		), torch.zeros(a__		))		)
						return common_inputs







		def 			a_			(       self   :							Union[str, Any]     , a__   :							PreTrainedTokenizer     , a__   :							int = -1     , a__   :							int = -1     , a__   :							bool = False     , a__   :							Optional[TensorType] = None     , )							->    Mapping[str, Any]:





						'''simple docstring'''







						_A       	=      self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
						    a__     , a__     , a__     , a__     , a__		)

						if self.use_past:
										if not is_torch_available():
														raise ValueError("Cannot generate dummy past_keys inputs without PyTorch installed."		)
										else:
														import torch
										_A	,		_A       	=      common_inputs["input_ids"].shape
										# Not using the same length for past_key_values
										_A       	=      seqlen + 2
										_A	,		_A       	=      self.num_layers
										_A	,		_A       	=      self.num_attention_heads
										_A       	=      (
										    batch,
										    num_encoder_attention_heads,
										    past_key_values_length,
										    self._config.hidden_size // num_encoder_attention_heads,
										)

										_A       	=      common_inputs["attention_mask"].dtype
										_A       	=      torch.cat(
										    [common_inputs["attention_mask"], torch.ones(a__     , a__     , dtype=a__		)]     , dim=1		)
										_A       	=      [
										    (torch.zeros(a__		), torch.zeros(a__		)) for _ in range(a__		)
										]
						return common_inputs







		def 			a_			(       self   :							List[Any]     , a__   :							PreTrainedTokenizer     , a__   :							int = -1     , a__   :							int = -1     , a__   :							bool = False     , a__   :							Optional[TensorType] = None     , )							->    Mapping[str, Any]:





						'''simple docstring'''







						_A       	=      compute_effective_axis_dimension(
						    a__     , fixed_dimension=OnnxConfig.default_fixed_batch     , num_token_to_add=0		)

						# If dynamic axis (-1) we forward with a fixed dimension of 8 tokens to avoid optimizations made by ONNX
						_A       	=      tokenizer.num_special_tokens_to_add(a__		)
						_A       	=      compute_effective_axis_dimension(
						    a__     , fixed_dimension=OnnxConfig.default_fixed_sequence     , num_token_to_add=a__		)

						# Generate dummy inputs according to compute batch and sequence
						_A       	=      [" ".join([tokenizer.unk_token]		) * seq_length] * batch_size
						_A       	=      dict(tokenizer(a__     , return_tensors=a__		)		)
						return common_inputs







		def 			a_			(       self   :							Union[str, Any]     , a__   :							PreTrainedTokenizer     , a__   :							int = -1     , a__   :							int = -1     , a__   :							bool = False     , a__   :							Optional[TensorType] = None     , )							->    Mapping[str, Any]:





						'''simple docstring'''







						if self.task in ["default", "seq2seq-lm"]:
										_A       	=      self._generate_dummy_inputs_for_default_and_seqaseq_lm(
										    a__     , batch_size=a__     , seq_length=a__     , is_pair=a__     , framework=a__		)

						elif self.task == "causal-lm":
										_A       	=      self._generate_dummy_inputs_for_causal_lm(
										    a__     , batch_size=a__     , seq_length=a__     , is_pair=a__     , framework=a__		)
						else:
										_A       	=      self._generate_dummy_inputs_for_sequence_classification_and_question_answering(
										    a__     , batch_size=a__     , seq_length=a__     , is_pair=a__     , framework=a__		)

						return common_inputs







		def 			a_			(       self   :							List[str]     , a__   :							Union[str, Any]     , a__   :							Optional[int]     , a__   :							int     , a__   :							Dict		)							->    int:





						'''simple docstring'''







						if self.task in ["default", "seq2seq-lm"]:
										_A       	=      super()._flatten_past_key_values_(a__     , a__     , a__     , a__		)
						else:
										_A       	=      super(a__     , self		)._flatten_past_key_values_(
										    a__     , a__     , a__     , a__		)



"""simple docstring"""


import colorsys
import io

import cva
import matplotlib as mpl
import matplotlib.colors as mplc
import matplotlib.figure as mplfigure
import numpy as np
import torch
from matplotlib.backends.backend_agg import FigureCanvasAgg

from utils import img_tensorize


a_											=     10_00
class snake_case   :







		def __init__(       self   :							Optional[int]     , a__   :							int     , a__   :							List[str]=1.2     , a__   :							int="g"     , a__   :							List[Any]=0.5     , a__   :							Tuple="-"     , a__   :							Optional[int]="test_out.jpg"     , a__   :							Tuple=True     , a__   :							List[str]=False     , a__   :							Dict=None     , a__   :							Optional[Any]=None     , a__   :							Optional[int]=0.7     , )							->    Union[str, Any]:





						'''simple docstring'''







						if isinstance(a__     , torch.Tensor		):
										_A       	=      img.numpy().astype("np.uint8"		)
						if isinstance(a__     , a__		):
										_A       	=      img_tensorize(a__		)
						assert isinstance(a__     , np.ndarray		)

						_A	,		_A       	=      img.shape[1], img.shape[0]
						_A       	=      mplfigure.Figure(frameon=a__		)
						_A       	=      fig.get_dpi()
						_A       	=      (width * scale + 1E-2) / dpi
						_A       	=      (height * scale + 1E-2) / dpi
						fig.set_size_inches(a__     , a__		)
						_A       	=      fig.add_axes([0.0, 0.0, 1.0, 1.0]		)
						ax.axis("off"		)
						ax.set_xlim(0.0     , a__		)
						ax.set_ylim(a__		)

						_A       	=      saveas
						_A       	=      rgb
						_A       	=      pynb
						_A       	=      img
						_A       	=      edgecolor
						_A       	=      0.5
						_A       	=      linestyle
						_A       	=      int(np.sqrt(min(a__     , a__		)		) * scale // 3		)
						_A       	=      width
						_A       	=      height
						_A       	=      scale
						_A       	=      fig
						_A       	=      ax
						_A       	=      pad
						_A       	=      idaobj
						_A       	=      idaattr
						_A       	=      FigureCanvasAgg(a__		)







		def 			a_			(       self   :							List[Any]     , a__   :							Union[str, Any]     , a__   :							Tuple=None		)							->    Tuple:





						'''simple docstring'''







						if color is None:
										_A       	=      self.edgecolor
						((_A)	,		(_A)	,		(_A)	,		(_A))       	=      box
						_A       	=      xa - xa
						_A       	=      ya - ya
						self.ax.add_patch(
						    mpl.patches.Rectangle(
						        (xa, ya)     , a__     , a__     , fill=a__     , edgecolor=a__     , linewidth=self.font_size // 3     , alpha=self.alpha     , linestyle=self.linestyle     , )		)







		def 			a_			(       self   :							Union[str, Any]     , a__   :							Dict     , a__   :							List[Any]=None     , a__   :							int=None     , a__   :							str=None     , a__   :							Optional[int]=None		)							->    List[str]:





						'''simple docstring'''







						if len(boxes.shape		) > 2:
										_A       	=      boxes[0]
						if len(obj_ids.shape		) > 1:
										_A       	=      obj_ids[0]
						if len(obj_scores.shape		) > 1:
										_A       	=      obj_scores[0]
						if len(attr_ids.shape		) > 1:
										_A       	=      attr_ids[0]
						if len(attr_scores.shape		) > 1:
										_A       	=      attr_scores[0]
						if isinstance(a__     , torch.Tensor		):
										_A       	=      boxes.numpy()
						if isinstance(a__     , a__		):
										_A       	=      np.array(a__		)
						assert isinstance(a__     , np.ndarray		)
						_A       	=      np.prod(boxes[:, 2:] - boxes[:, :2]     , axis=1		)
						_A       	=      np.argsort(-areas		).tolist()
						_A       	=      boxes[sorted_idxs] if boxes is not None else None
						_A       	=      obj_ids[sorted_idxs] if obj_ids is not None else None
						_A       	=      obj_scores[sorted_idxs] if obj_scores is not None else None
						_A       	=      attr_ids[sorted_idxs] if attr_ids is not None else None
						_A       	=      attr_scores[sorted_idxs] if attr_scores is not None else None

						_A       	=      [self._random_color(maximum=1		) for _ in range(len(a__		)		)]
						_A       	=      [assigned_colors[idx] for idx in sorted_idxs]
						if obj_ids is not None:
										_A       	=      self._create_text_labels_attr(a__     , a__     , a__     , a__		)
										for i in range(len(a__		)		):
														_A       	=      assigned_colors[i]
														self.add_box(boxes[i]     , a__		)
														self.draw_labels(labels[i]     , boxes[i]     , a__		)







		def 			a_			(       self   :							List[str]     , a__   :							Any     , a__   :							List[str]     , a__   :							Tuple		)							->    int:





						'''simple docstring'''







						_A	,		_A	,		_A	,		_A       	=      box
						_A       	=      (xa, ya)
						_A       	=      (ya - ya) * (xa - xa)
						_A       	=      _SMALL_OBJ * self.scale
						if instance_area < small or ya - ya < 40 * self.scale:
										if ya >= self.height - 5:
														_A       	=      (xa, ya)
										else:
														_A       	=      (xa, ya)

						_A       	=      (ya - ya) / np.sqrt(self.height * self.width		)
						_A       	=      self._change_color_brightness(a__     , brightness_factor=0.7		)
						_A       	=      np.clip((height_ratio - 0.0_2) / 0.0_8 + 1     , 1.2     , 2		)
						font_size *= 0.7_5 * self.font_size

						self.draw_text(
						    text=a__     , position=a__     , color=a__     , )







		def 			a_			(       self   :							str     , a__   :							Optional[int]     , a__   :							Optional[int]     , a__   :							Any="g"     , a__   :							Optional[int]="left"     , )							->    Dict:





						'''simple docstring'''







						_A       	=      0
						_A       	=      self.font_size
						_A       	=      np.maximum(list(mplc.to_rgb(a__		)		)     , 0.2		)
						_A       	=      max(0.8     , np.max(a__		)		)
						_A       	=      {
						    "facecolor": "black",
						    "alpha": self.alpha,
						    "pad": self.pad,
						    "edgecolor": "none",
						}
						_A	,		_A       	=      position
						self.ax.text(
						    a__     , a__     , a__     , size=font_size * self.scale     , family="sans-serif"     , bbox=a__     , verticalalignment="top"     , horizontalalignment=a__     , color=a__     , zorder=10     , rotation=a__     , )







		def 			a_			(       self   :							List[str]     , a__   :							str=None		)							->    Optional[int]:





						'''simple docstring'''







						if saveas is None:
										_A       	=      self.saveas
						if saveas.lower().endswith(".jpg"		) or saveas.lower().endswith(".png"		):
										cva.imwrite(
										    a__     , self._get_buffer()[:, :, ::-1]     , )
						else:
										self.fig.savefig(a__		)







		def 			a_			(       self   :							Union[str, Any]     , a__   :							Optional[Any]     , a__   :							List[Any]     , a__   :							Tuple     , a__   :							List[str]		)							->    Optional[int]:





						'''simple docstring'''







						_A       	=      [self.idaobj[i] for i in classes]
						_A       	=      [self.idaattr[i] for i in attr_classes]
						_A       	=      [
						    F"""{label} {score:.2f} {attr} {attr_score:.2f}"""
						    for label, score, attr, attr_score in zip(a__     , a__     , a__     , a__		)
						]
						return labels







		def 			a_			(       self   :							Any     , a__   :							Dict     , a__   :							Tuple		)							->    Dict:





						'''simple docstring'''







						_A       	=      [self.idaobj[i] for i in classes]
						if scores is not None:
										if labels is None:
														_A       	=      ["{:.0f}%".format(s * 1_00		) for s in scores]
										else:
														_A       	=      ["{} {:.0f}%".format(a__     , s * 1_00		) for li, s in zip(a__     , a__		)]
						return labels







		def 			a_			(       self   :							List[Any]     , a__   :							Optional[Any]=2_55		)							->    str:





						'''simple docstring'''







						_A       	=      np.random.randint(0     , len(_COLORS		)		)
						_A       	=      _COLORS[idx] * maximum
						if not self.rgb:
										_A       	=      ret[::-1]
						return ret







		def 			a_			(       self   :							int		)							->    Dict:





						'''simple docstring'''







						if not self.pynb:
										_A	,		_A       	=      self.canvas.print_to_buffer()
										if (width, height) != (self.width, self.height):
														_A       	=      cva.resize(self.img     , (width, height)		)
										else:
														_A       	=      self.img
						else:
										_A       	=      io.BytesIO()  # works for cairo backend
										self.canvas.print_rgba(a__		)
										_A	,		_A       	=      self.width, self.height
										_A       	=      buf.getvalue()
										_A       	=      self.img

						_A       	=      np.frombuffer(a__     , dtype="uint8"		)
						_A       	=      buffer.reshape(a__     , a__     , 4		)
						_A	,		_A       	=      np.split(a__     , [3]     , axis=2		)

						try:
										import numexpr as ne  # fuse them with numexpr

										_A       	=      ne.evaluate("img * (1 - alpha / 255.0) + rgb * (alpha / 255.0)"		)
						except ImportError:
										_A       	=      alpha.astype("float32"		) / 2_5_5.0
										_A       	=      img * (1 - alpha) + rgb * alpha

						return visualized_image.astype("uint8"		)







		def 			a_			(       self   :							Optional[int]     , a__   :							str     , a__   :							Union[str, Any]		)							->    str:





						'''simple docstring'''







						assert brightness_factor >= -1.0 and brightness_factor <= 1.0
						_A       	=      mplc.to_rgb(a__		)
						_A       	=      colorsys.rgb_to_hls(*mplc.to_rgb(a__		)		)
						_A       	=      polygon_color[1] + (brightness_factor * polygon_color[1])
						_A       	=      0.0 if modified_lightness < 0.0 else modified_lightness
						_A       	=      1.0 if modified_lightness > 1.0 else modified_lightness
						_A       	=      colorsys.hls_to_rgb(polygon_color[0]     , a__     , polygon_color[2]		)
						return modified_color





a_											=     (
    np.array(
        [
            0.0_00,
            0.4_47,
            0.7_41,
            0.8_50,
            0.3_25,
            0.0_98,
            0.9_29,
            0.6_94,
            0.1_25,
            0.4_94,
            0.1_84,
            0.5_56,
            0.4_66,
            0.6_74,
            0.1_88,
            0.3_01,
            0.7_45,
            0.9_33,
            0.6_35,
            0.0_78,
            0.1_84,
            0.3_00,
            0.3_00,
            0.3_00,
            0.6_00,
            0.6_00,
            0.6_00,
            1.0_00,
            0.0_00,
            0.0_00,
            1.0_00,
            0.5_00,
            0.0_00,
            0.7_49,
            0.7_49,
            0.0_00,
            0.0_00,
            1.0_00,
            0.0_00,
            0.0_00,
            0.0_00,
            1.0_00,
            0.6_67,
            0.0_00,
            1.0_00,
            0.3_33,
            0.3_33,
            0.0_00,
            0.3_33,
            0.6_67,
            0.0_00,
            0.3_33,
            1.0_00,
            0.0_00,
            0.6_67,
            0.3_33,
            0.0_00,
            0.6_67,
            0.6_67,
            0.0_00,
            0.6_67,
            1.0_00,
            0.0_00,
            1.0_00,
            0.3_33,
            0.0_00,
            1.0_00,
            0.6_67,
            0.0_00,
            1.0_00,
            1.0_00,
            0.0_00,
            0.0_00,
            0.3_33,
            0.5_00,
            0.0_00,
            0.6_67,
            0.5_00,
            0.0_00,
            1.0_00,
            0.5_00,
            0.3_33,
            0.0_00,
            0.5_00,
            0.3_33,
            0.3_33,
            0.5_00,
            0.3_33,
            0.6_67,
            0.5_00,
            0.3_33,
            1.0_00,
            0.5_00,
            0.6_67,
            0.0_00,
            0.5_00,
            0.6_67,
            0.3_33,
            0.5_00,
            0.6_67,
            0.6_67,
            0.5_00,
            0.6_67,
            1.0_00,
            0.5_00,
            1.0_00,
            0.0_00,
            0.5_00,
            1.0_00,
            0.3_33,
            0.5_00,
            1.0_00,
            0.6_67,
            0.5_00,
            1.0_00,
            1.0_00,
            0.5_00,
            0.0_00,
            0.3_33,
            1.0_00,
            0.0_00,
            0.6_67,
            1.0_00,
            0.0_00,
            1.0_00,
            1.0_00,
            0.3_33,
            0.0_00,
            1.0_00,
            0.3_33,
            0.3_33,
            1.0_00,
            0.3_33,
            0.6_67,
            1.0_00,
            0.3_33,
            1.0_00,
            1.0_00,
            0.6_67,
            0.0_00,
            1.0_00,
            0.6_67,
            0.3_33,
            1.0_00,
            0.6_67,
            0.6_67,
            1.0_00,
            0.6_67,
            1.0_00,
            1.0_00,
            1.0_00,
            0.0_00,
            1.0_00,
            1.0_00,
            0.3_33,
            1.0_00,
            1.0_00,
            0.6_67,
            1.0_00,
            0.3_33,
            0.0_00,
            0.0_00,
            0.5_00,
            0.0_00,
            0.0_00,
            0.6_67,
            0.0_00,
            0.0_00,
            0.8_33,
            0.0_00,
            0.0_00,
            1.0_00,
            0.0_00,
            0.0_00,
            0.0_00,
            0.1_67,
            0.0_00,
            0.0_00,
            0.3_33,
            0.0_00,
            0.0_00,
            0.5_00,
            0.0_00,
            0.0_00,
            0.6_67,
            0.0_00,
            0.0_00,
            0.8_33,
            0.0_00,
            0.0_00,
            1.0_00,
            0.0_00,
            0.0_00,
            0.0_00,
            0.1_67,
            0.0_00,
            0.0_00,
            0.3_33,
            0.0_00,
            0.0_00,
            0.5_00,
            0.0_00,
            0.0_00,
            0.6_67,
            0.0_00,
            0.0_00,
            0.8_33,
            0.0_00,
            0.0_00,
            1.0_00,
            0.0_00,
            0.0_00,
            0.0_00,
            0.1_43,
            0.1_43,
            0.1_43,
            0.8_57,
            0.8_57,
            0.8_57,
            1.0_00,
            1.0_00,
            1.0_00,
        ]
    )
    .astype(np.floataa)
    .reshape(-1, 3)
)