






"""simple docstring"""



import unittest

from transformers import ElectraConfig, is_torch_available
from transformers.models.auto import get_values
from transformers.testing_utils import require_torch, slow, torch_device

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
    import torch

    from transformers import (
        MODEL_FOR_PRETRAINING_MAPPING,
        ElectraForCausalLM,
        ElectraForMaskedLM,
        ElectraForMultipleChoice,
        ElectraForPreTraining,
        ElectraForQuestionAnswering,
        ElectraForSequenceClassification,
        ElectraForTokenClassification,
        ElectraModel,
    )
    from transformers.models.electra.modeling_electra import ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST

class 			a	:







    def __init__(     self				,						_lowerCamelCase				,						_lowerCamelCase=1_3				,						_lowerCamelCase=7				,						_lowerCamelCase=True				,						_lowerCamelCase=True				,						_lowerCamelCase=True				,						_lowerCamelCase=True				,						_lowerCamelCase=9_9				,						_lowerCamelCase=3_2				,						_lowerCamelCase=5				,						_lowerCamelCase=4				,						_lowerCamelCase=3_7				,						_lowerCamelCase="gelu"				,						_lowerCamelCase=0.1				,						_lowerCamelCase=0.1				,						_lowerCamelCase=5_1_2				,						_lowerCamelCase=1_6				,						_lowerCamelCase=2				,						_lowerCamelCase=0.0_2				,						_lowerCamelCase=3				,						_lowerCamelCase=4				,						_lowerCamelCase=None				,						):
      lowercase				       =			parent
      lowercase				       =			batch_size
      lowercase				       =			seq_length
      lowercase				       =			is_training
      lowercase				       =			use_input_mask
      lowercase				       =			use_token_type_ids
      lowercase				       =			use_labels
      lowercase				       =			vocab_size
      lowercase				       =			hidden_size
      lowercase				       =			num_hidden_layers
      lowercase				       =			num_attention_heads
      lowercase				       =			intermediate_size
      lowercase				       =			hidden_act
      lowercase				       =			hidden_dropout_prob
      lowercase				       =			attention_probs_dropout_prob
      lowercase				       =			max_position_embeddings
      lowercase				       =			type_vocab_size
      lowercase				       =			type_sequence_label_size
      lowercase				       =			initializer_range
      lowercase				       =			num_labels
      lowercase				       =			num_choices
      lowercase				       =			scope







    def      UpperCamelCase_ (     self			):
      lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						self.vocab_size			)

      lowercase				       =			None
      if self.use_input_mask:
        lowercase				       =			random_attention_mask([self.batch_size, self.seq_length]			)

      lowercase				       =			None
      if self.use_token_type_ids:
        lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						self.type_vocab_size			)

      lowercase				       =			None
      lowercase				       =			None
      lowercase				       =			None
      if self.use_labels:
        lowercase				       =			ids_tensor([self.batch_size]				,						self.type_sequence_label_size			)
        lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						self.num_labels			)
        lowercase				       =			ids_tensor([self.batch_size]				,						self.num_choices			)
        lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						1			)

      lowercase				       =			self.get_config()

      return (
          config,
          input_ids,
          token_type_ids,
          input_mask,
          sequence_labels,
          token_labels,
          choice_labels,
          fake_token_labels,
      )







    def      UpperCamelCase_ (     self			):
      return ElectraConfig(
          vocab_size=self.vocab_size				,						hidden_size=self.hidden_size				,						num_hidden_layers=self.num_hidden_layers				,						num_attention_heads=self.num_attention_heads				,						intermediate_size=self.intermediate_size				,						hidden_act=self.hidden_act				,						hidden_dropout_prob=self.hidden_dropout_prob				,						attention_probs_dropout_prob=self.attention_probs_dropout_prob				,						max_position_embeddings=self.max_position_embeddings				,						type_vocab_size=self.type_vocab_size				,						is_decoder=_lowerCamelCase				,						initializer_range=self.initializer_range				,						)







    def      UpperCamelCase_ (     self			):
      (
          (
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	
      )				       =			self.prepare_config_and_inputs()

      lowercase				       =			True
      lowercase				       =			floats_tensor([self.batch_size, self.seq_length, self.hidden_size]			)
      lowercase				       =			ids_tensor([self.batch_size, self.seq_length]				,						vocab_size=2			)

      return (
          config,
          input_ids,
          token_type_ids,
          input_mask,
          sequence_labels,
          token_labels,
          choice_labels,
          encoder_hidden_states,
          encoder_attention_mask,
      )







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			ElectraModel(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase			)
      lowercase				       =			model(_lowerCamelCase				,						token_type_ids=_lowerCamelCase			)
      lowercase				       =			model(_lowerCamelCase			)
      self.parent.assertEqual(result.last_hidden_state.shape				,						(self.batch_size, self.seq_length, self.hidden_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			True
      lowercase				       =			ElectraModel(_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(
          _lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						encoder_hidden_states=_lowerCamelCase				,						encoder_attention_mask=_lowerCamelCase				,						)
      lowercase				       =			model(
          _lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						encoder_hidden_states=_lowerCamelCase				,						)
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase			)
      self.parent.assertEqual(result.last_hidden_state.shape				,						(self.batch_size, self.seq_length, self.hidden_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			ElectraForMaskedLM(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.seq_length, self.vocab_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			ElectraForCausalLM(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.seq_length, self.vocab_size)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			self.num_labels
      lowercase				       =			ElectraForTokenClassification(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.seq_length, self.num_labels)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			self.num_labels
      lowercase				       =			ElectraForPreTraining(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.seq_length)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			self.num_labels
      lowercase				       =			ElectraForSequenceClassification(_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase			)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.num_labels)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			ElectraForQuestionAnswering(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			model(
          _lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						start_positions=_lowerCamelCase				,						end_positions=_lowerCamelCase				,						)
      self.parent.assertEqual(result.start_logits.shape				,						(self.batch_size, self.seq_length)			)
      self.parent.assertEqual(result.end_logits.shape				,						(self.batch_size, self.seq_length)			)







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase				,						):
      lowercase				       =			self.num_choices
      lowercase				       =			ElectraForMultipleChoice(config=_lowerCamelCase			)
      model.to(_lowerCamelCase			)
      model.eval()
      lowercase				       =			input_ids.unsqueeze(1			).expand(-1				,						self.num_choices				,						-1			).contiguous()
      lowercase				       =			token_type_ids.unsqueeze(1			).expand(-1				,						self.num_choices				,						-1			).contiguous()
      lowercase				       =			input_mask.unsqueeze(1			).expand(-1				,						self.num_choices				,						-1			).contiguous()
      lowercase				       =			model(
          _lowerCamelCase				,						attention_mask=_lowerCamelCase				,						token_type_ids=_lowerCamelCase				,						labels=_lowerCamelCase				,						)
      self.parent.assertEqual(result.logits.shape				,						(self.batch_size, self.num_choices)			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.prepare_config_and_inputs()
      (
          (
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	(
          lowercase
      )       ,	
      )				       =			config_and_inputs
      lowercase				       =			{'input_ids': input_ids, 'token_type_ids': token_type_ids, 'attention_mask': input_mask}
      return config, inputs_dict


@require_torch
class 			a	(  a_,							a_,							unittest.TestCase      ):
    UpperCAmelCase_					:	List[str]      	=(
        (
            ElectraModel,
            ElectraForPreTraining,
            ElectraForMaskedLM,
            ElectraForCausalLM,
            ElectraForMultipleChoice,
            ElectraForTokenClassification,
            ElectraForSequenceClassification,
            ElectraForQuestionAnswering,
        )
        if is_torch_available()
        else ()
    )
    UpperCAmelCase_					:	Optional[Any]      	=(
        {
            "feature-extraction": ElectraModel,
            "fill-mask": ElectraForMaskedLM,
            "question-answering": ElectraForQuestionAnswering,
            "text-classification": ElectraForSequenceClassification,
            "text-generation": ElectraForCausalLM,
            "token-classification": ElectraForTokenClassification,
            "zero-shot": ElectraForSequenceClassification,
        }
        if is_torch_available()
        else {}
    )
    UpperCAmelCase_					:	Tuple      	=True







    def      UpperCamelCase_ (     self				,						_lowerCamelCase				,						_lowerCamelCase				,						_lowerCamelCase=False			):
      lowercase				       =			super()._prepare_for_class(_lowerCamelCase				,						_lowerCamelCase				,						return_labels=_lowerCamelCase			)

      if return_labels:
        if model_class in get_values(_lowerCamelCase			):
          lowercase				       =			torch.zeros(
              (self.model_tester.batch_size, self.model_tester.seq_length)				,						dtype=torch.long				,						device=_lowerCamelCase			)
      return inputs_dict







    def      UpperCamelCase_ (     self			):
      lowercase				       =			ElectraModelTester(self			)
      lowercase				       =			ConfigTester(self				,						config_class=_lowerCamelCase				,						hidden_size=3_7			)







    def      UpperCamelCase_ (     self			):
      self.config_tester.run_common_tests()







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_model(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs_for_decoder()
      self.model_tester.create_and_check_electra_model_as_decoder(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      for type in ["absolute", "relative_key", "relative_key_query"]:
        lowercase				       =			type
        self.model_tester.create_and_check_electra_model(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_masked_lm(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_token_classification(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_pretraining(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_sequence_classification(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_question_answering(*_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs()
      self.model_tester.create_and_check_electra_for_multiple_choice(*_lowerCamelCase			)







    @slow
    def      UpperCamelCase_ (     self			):
      for model_name in ELECTRA_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
        lowercase				       =			ElectraModel.from_pretrained(_lowerCamelCase			)
        self.assertIsNotNone(_lowerCamelCase			)







    def      UpperCamelCase_ (     self			):
      lowercase				       =			self.model_tester.prepare_config_and_inputs_for_decoder()
      self.model_tester.create_and_check_electra_for_causal_lm(*_lowerCamelCase			)


@require_torch
class 			a	(  unittest.TestCase      ):







    @slow
    def      UpperCamelCase_ (     self			):
      lowercase				       =			ElectraModel.from_pretrained('google/electra-small-discriminator'			)
      lowercase				       =			torch.tensor([[0, 3_4_5, 2_3_2, 3_2_8, 7_4_0, 1_4_0, 1_6_9_5, 6_9, 6_0_7_8, 1_5_8_8, 2]]			)
      lowercase				       =			torch.tensor([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]			)
      lowercase				       =			model(_lowerCamelCase				,						attention_mask=_lowerCamelCase			)[0]
      lowercase				       =			torch.Size((1, 1_1, 2_5_6)			)
      self.assertEqual(output.shape				,						_lowerCamelCase			)
      lowercase				       =			torch.tensor(
          [[[0.4_4_7_1, 0.6_8_2_1, -0.3_2_6_5], [0.4_6_2_7, 0.5_2_5_5, -0.3_6_6_8], [0.4_5_3_2, 0.3_3_1_3, -0.4_3_4_4]]]			)

      self.assertTrue(torch.allclose(output[:, 1:4, 1:4]				,						_lowerCamelCase				,						atol=1e-4			)			)



'''simple docstring'''
import gym
import numpy as np
import torch
from mujoco_py import GlfwContext

from transformers import DecisionTransformerModel


GlfwContext(offscreen=True)  # Create a window to init GLFW.







def 			_UpperCamelCase			(  _a						:						List[Any]					,  _a						:						Dict					,  _a						:						Optional[int]					,  _a						:						Dict					,  _a						:						int					,  _a						:						List[str]      ):




    """simple docstring"""



    __UpperCamelCase						:						Union[str, Any]		     =	states.reshape(1					,  -1					,  model.config.state_dim      )
    __UpperCamelCase						:						Tuple		     =	actions.reshape(1					,  -1					,  model.config.act_dim      )
    __UpperCamelCase						:						Optional[Any]		     =	returns_to_go.reshape(1					,  -1					,  1      )
    __UpperCamelCase						:						Optional[int]		     =	timesteps.reshape(1					,  -1      )

    if model.config.max_length is not None:
        __UpperCamelCase						:						Any		     =	states[:, -model.config.max_length :]
        __UpperCamelCase						:						int		     =	actions[:, -model.config.max_length :]
        __UpperCamelCase						:						Any		     =	returns_to_go[:, -model.config.max_length :]
        __UpperCamelCase						:						Tuple		     =	timesteps[:, -model.config.max_length :]

        # pad all tokens to sequence length
        __UpperCamelCase						:						str		     =	torch.cat(
            [torch.zeros(model.config.max_length - states.shape[1]      ), torch.ones(states.shape[1]      )]      )
        __UpperCamelCase						:						int		     =	attention_mask.to(dtype=torch.long					,  device=states.device      ).reshape(1					,  -1      )
        __UpperCamelCase						:						Any		     =	torch.cat(
            [
                torch.zeros(
                    (states.shape[0], model.config.max_length - states.shape[1], model.config.state_dim)					,  device=states.device					,  ),
                states,
            ]					,  dim=1					,  ).to(dtype=torch.floataa      )
        __UpperCamelCase						:						Tuple		     =	torch.cat(
            [
                torch.zeros(
                    (actions.shape[0], model.config.max_length - actions.shape[1], model.config.act_dim)					,  device=actions.device					,  ),
                actions,
            ]					,  dim=1					,  ).to(dtype=torch.floataa      )
        __UpperCamelCase						:						Optional[Any]		     =	torch.cat(
            [
                torch.zeros(
                    (returns_to_go.shape[0], model.config.max_length - returns_to_go.shape[1], 1)					,  device=returns_to_go.device					,  ),
                returns_to_go,
            ]					,  dim=1					,  ).to(dtype=torch.floataa      )
        __UpperCamelCase						:						Tuple		     =	torch.cat(
            [
                torch.zeros(
                    (timesteps.shape[0], model.config.max_length - timesteps.shape[1])					,  device=timesteps.device      ),
                timesteps,
            ]					,  dim=1					,  ).to(dtype=torch.long      )
    else:
        __UpperCamelCase						:						List[str]		     =	None

    __UpperCamelCase     ,       __UpperCamelCase     ,       __UpperCamelCase						:						Union[str, Any]		     =	model(
        states=_a					,  actions=_a					,  rewards=_a					,  returns_to_go=_a					,  timesteps=_a					,  attention_mask=_a					,  return_dict=_a					,  )

    return action_preds[0, -1]


# build the environment

a=	gym.make('''Hopper-v3''')
a=	env.observation_space.shape[0]
a=	env.action_space.shape[0]
a=	1_0_0_0
a=	'''cuda'''
a=	1_000.0  # normalization for rewards/returns
a=	3_6_0_0 / scale  # evaluation conditioning targets, 3600 is reasonable from the paper LINK
a=	np.array(
    [
        1.311_279,
        -0.08_469_521,
        -0.5_382_719,
        -0.07_201_576,
        0.04_932_366,
        2.1_066_856,
        -0.15_017_354,
        0.00_878_345,
        -0.2_848_186,
        -0.18_540_096,
        -0.28_461_286,
    ]
)
a=	np.array(
    [
        0.17_790_751,
        0.05_444_621,
        0.21_297_139,
        0.14_530_419,
        0.6_124_444,
        0.85_174_465,
        1.4_515_252,
        0.6_751_696,
        1.536_239,
        1.6_160_746,
        5.6_072_536,
    ]
)
a=	torch.from_numpy(state_mean).to(device=device)
a=	torch.from_numpy(state_std).to(device=device)

# Create the decision transformer model
a=	DecisionTransformerModel.from_pretrained('''edbeeching/decision-transformer-gym-hopper-medium''')
a=	model.to(device)
model.eval()

for ep in range(1_0):
  a,      a=	0, 0
  a=	env.reset()
  a=	torch.tensor(TARGET_RETURN, device=device, dtype=torch.floataa).reshape(1, 1)
  a=	torch.from_numpy(state).reshape(1, state_dim).to(device=device, dtype=torch.floataa)
  a=	torch.zeros((0, act_dim), device=device, dtype=torch.floataa)
  a=	torch.zeros(0, device=device, dtype=torch.floataa)

  a=	torch.tensor(0, device=device, dtype=torch.long).reshape(1, 1)
  for t in range(max_ep_len):
    env.render()
    # add padding
    a=	torch.cat([actions, torch.zeros((1, act_dim), device=device)], dim=0)
    a=	torch.cat([rewards, torch.zeros(1, device=device)])

    a=	get_action(
        model,
        (states.to(dtype=torch.floataa) - state_mean) / state_std,
        actions.to(dtype=torch.floataa),
        rewards.to(dtype=torch.floataa),
        target_return.to(dtype=torch.floataa),
        timesteps.to(dtype=torch.long),
    )
    a=	action
    a=	action.detach().cpu().numpy()

    a,      a,      a,      a=	env.step(action)

    a=	torch.from_numpy(state).to(device=device).reshape(1, state_dim)
    a=	torch.cat([states, cur_state], dim=0)
    a=	reward

    a=	target_return[0, -1] - (reward / scale)
    a=	torch.cat([target_return, pred_return.reshape(1, 1)], dim=1)
    a=	torch.cat([timesteps, torch.ones((1, 1), device=device, dtype=torch.long) * (t + 1)], dim=1)

    episode_return += reward
    episode_length += 1

    if done:
      break



