class_docstr: Implements the per-arm version of the MovieLens Bandit environment.
  
  This environment implements the MovieLens 100K dataset, available at:
  https://www.kaggle.com/prajitdatta/movielens-100k-dataset
  
  This dataset contains 100K ratings from 943 users on 1682 items.
  This csv list of:
  user id | item id | rating | timestamp.
  This environment computes a low-rank matrix factorization (using SVD) of the
  data matrix `A`, such that: `A ~= U * Sigma * V^T`.
  
  The environment uses the rows of `U` as global (or user) features, and the
  rows of `V` as per-arm (or movie) features.
  
  The reward of recommending movie `v` to user `u` is `u * Sigma * v^T`.
class_docstr_tok: ["Implements","the","per-arm","version","of","the","MovieLens","Bandit","environment",".","This","environment","implements","the","MovieLens","100K","dataset",",","available","at",":","https",":","\/\/www.kaggle.com\/prajitdatta\/movielens-100k-dataset","This","dataset","contains","100K","ratings","from","943","users","on","1682","items",".","This","csv","list","of",":","user","id","|","item","id","|","rating","|","timestamp",".","This","environment","computes","a","low-rank","matrix","factorization","(","using","SVD",")","of","the","data","matrix","`","A","`",",","such","that",":","`","A","~=","U","*","Sigma","*","V^T","`",".","The","environment","uses","the","rows","of","`","U","`","as","global","(","or","user",")","features",",","and","the","rows","of","`","V","`","as","per-arm","(","or","movie",")","features",".","The","reward","of","recommending","movie","`","v","`","to","user","`","u","`","is","`","u","*","Sigma","*","v^T","`","."]
code: def compute_optimal_reward(self):
      return np.max(self._rewards_for_all_actions(), axis=-1)
  
imports: from __future__ import absolute_import
  import random
  from typing import Optional, Text
  import gin
  import numpy
  from tf_agents.bandits.environments import bandit_py_environment
  from tf_agents.bandits.environments import dataset_utilities
  from tf_agents.bandits.specs import utils
  from tf_agents.specs import array_spec
  from tf_agents.trajectories import time_step
label_desc: Use image node_id 8 for calling the MovieLensPerArmPyEnvironment obj's underlying member method code with example usage: obj.compute_optimal_reward() and returns: np