 
   /// The exploitability descent loss for a policy.
   @differentiable(wrt: policy)
-  public mutating func loss(for policy: TensorFlowTabularPolicy<Game>) -> Double {
+  public func loss(for policy: TensorFlowTabularPolicy<Game>) -> Double {
     let (nashConv0, qValues0, counterfactualReachProbabilities0) =
       actionValuesAgainstBestResponder(
         player: .player(0),

    self.game = informationStateCache.game
  }

  mutating func reset() {
    reachProbabilities = [[:], [:]]
    counterfactualReachProbabilities = [[:], [:]]
    chanceReachProbabilities = [[:], [:]]


/// Calculates state and action values and three kinds of state reach probabilities for a pair of
/// policies, caching intermediate results.
public final class ActionValueCalculator<Game: GameProtocol> {
  public let informationStateCache: InformationStateCache<Game>
  public let game: Game
  /// Probabilities of reaching each information state, conditional on the supplied policies.
