class_docstr: Graph for Gibbs sampling from Coconet.
docstr: Given input pianorolls, runs Gibbs sampling to fill in the rest.
  
  When total_gibbs_steps is 0, total_gibbs_steps is set to
  time * instruments.  If faster sampling is desired on the expanse of sample
  quality, total_gibbs_steps can be explicitly set to a lower number,
  possibly to the value of sample_steps if do not plan on stopping sample
  early to obtain intermediate results.
  
  This function can be used to return intermediate results by setting the
  sample_steps to when results should be returned and leaving
  total_gibbs_steps to be 0.
  
  To continue sampling from intermediate results, set current_step to the
  number of steps taken, and feed in the intermediate pianorolls.  Again
  leaving total_gibbs_steps as 0.
  
  Builds the graph and restores checkpoint if necessary.
  
  Args:
    pianorolls: a 4D numpy array of shape (batch, time, pitch, instrument)
    masks: a 4D numpy array of the same shape as pianorolls, with 1s
        indicating mask out.  If is None, then the masks will be where have 1s
        where there are no notes, indicating to the model they should be
        filled in.
    sample_steps: an integer indicating the number of steps to sample in this
        call.  If set to 0, then it defaults to total_gibbs_steps.
    current_step: an integer indicating how many steps might have already
        sampled before.
    total_gibbs_steps: an integer indicating the total number of steps that
        a complete sampling procedure would take.
    temperature: a float indicating the temperature for sampling from softmax.
    timeout_ms: Timeout for session.Run. Set to zero for no timeout.
  
  Returns:
    A dictionary, consisting of "pianorolls" which is a 4D numpy array of
    the sampled results and "time_taken" which is the time taken in sampling.
docstr_tok: ["Given","input","pianorolls",",","runs","Gibbs","sampling","to","fill","in","the","rest",".","When","total_gibbs_steps","is","0",",","total_gibbs_steps","is","set","to","time","*","instruments",".","If","faster","sampling","is","desired","on","the","expanse","of","sample","quality",",","total_gibbs_steps","can","be","explicitly","set","to","a","lower","number",",","possibly","to","the","value","of","sample_steps","if","do","not","plan","on","stopping","sample","early","to","obtain","intermediate","results",".","This","function","can","be","used","to","return","intermediate","results","by","setting","the","sample_steps","to","when","results","should","be","returned","and","leaving","total_gibbs_steps","to","be","0",".","To","continue","sampling","from","intermediate","results",",","set","current_step","to","the","number","of","steps","taken",",","and","feed","in","the","intermediate","pianorolls",".","Again","leaving","total_gibbs_steps","as","0",".","Builds","the","graph","and","restores","checkpoint","if","necessary",".","Args",":","pianorolls",":","a","4D","numpy","array","of","shape","(","batch",",","time",",","pitch",",","instrument",")","masks",":","a","4D","numpy","array","of","the","same","shape","as","pianorolls",",","with","1s","indicating","mask","out",".","If","is","None",",","then","the","masks","will","be","where","have","1s","where","there","are","no","notes",",","indicating","to","the","model","they","should","be","filled","in",".","sample_steps",":","an","integer","indicating","the","number","of","steps","to","sample","in","this","call",".","If","set","to","0",",","then","it","defaults","to","total_gibbs_steps",".","current_step",":","an","integer","indicating","how","many","steps","might","have","already","sampled","before",".","total_gibbs_steps",":","an","integer","indicating","the","total","number","of","steps","that","a","complete","sampling","procedure","would","take",".","temperature",":","a","float","indicating","the","temperature","for","sampling","from","softmax",".","timeout_ms",":","Timeout","for","session.Run",".","Set","to","zero","for","no","timeout",".","Returns",":","A","dictionary",",","consisting","of","``","pianorolls","''","which","is","a","4D","numpy","array","of","the","sampled","results","and","``","time_taken","''","which","is","the","time","taken","in","sampling","."]
code: def run(
      self,
      pianorolls,
      masks=None,
      sample_steps=0,
      current_step=0,
      total_gibbs_steps=0,
      temperature=0.99,
      timeout_ms=0,
  ):
      """Given input pianorolls, runs Gibbs sampling to fill in the rest.
  
      When total_gibbs_steps is 0, total_gibbs_steps is set to
      time * instruments.  If faster sampling is desired on the expanse of sample
      quality, total_gibbs_steps can be explicitly set to a lower number,
      possibly to the value of sample_steps if do not plan on stopping sample
      early to obtain intermediate results.
  
      This function can be used to return intermediate results by setting the
      sample_steps to when results should be returned and leaving
      total_gibbs_steps to be 0.
  
      To continue sampling from intermediate results, set current_step to the
      number of steps taken, and feed in the intermediate pianorolls.  Again
      leaving total_gibbs_steps as 0.
  
      Builds the graph and restores checkpoint if necessary.
  
      Args:
        pianorolls: a 4D numpy array of shape (batch, time, pitch, instrument)
        masks: a 4D numpy array of the same shape as pianorolls, with 1s
            indicating mask out.  If is None, then the masks will be where have 1s
            where there are no notes, indicating to the model they should be
            filled in.
        sample_steps: an integer indicating the number of steps to sample in this
            call.  If set to 0, then it defaults to total_gibbs_steps.
        current_step: an integer indicating how many steps might have already
            sampled before.
        total_gibbs_steps: an integer indicating the total number of steps that
            a complete sampling procedure would take.
        temperature: a float indicating the temperature for sampling from softmax.
        timeout_ms: Timeout for session.Run. Set to zero for no timeout.
  
      Returns:
        A dictionary, consisting of "pianorolls" which is a 4D numpy array of
        the sampled results and "time_taken" which is the time taken in sampling.
      """
      if self.sess is None:
          # Build graph and restore checkpoint.
          self.instantiate_sess_and_restore_checkpoint()
  
      if masks is None:
          masks = np.zeros_like(pianorolls)
  
      start_time = time.time()
      run_options = None
      if timeout_ms:
          run_options = tf.RunOptions(timeout_in_ms=timeout_ms)
      new_piece = self.sess.run(
          self.samples,
          feed_dict={
              self.placeholders["pianorolls"]: pianorolls,
              self.placeholders["outer_masks"]: masks,
              self.placeholders["sample_steps"]: sample_steps,
              self.placeholders["total_gibbs_steps"]: total_gibbs_steps,
              self.placeholders["current_step"]: current_step,
              self.placeholders["temperature"]: temperature,
          },
          options=run_options,
      )
  
      label = "independent blocked gibbs"
      time_taken = (time.time() - start_time) / 60.0
      tf.logging.info("exit  %s (%.3fmin)" % (label, time_taken))
      return dict(pianorolls=new_piece, time_taken=time_taken)
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import time
  from magenta.models.coconet import lib_graph
  from magenta.models.coconet import lib_hparams
  import numpy
  import tensorflow.compat.v1
label_desc: Use image node_id 8 for calling the CoconetSampleGraph obj's underlying member method code with example usage: obj.run(pianorolls, masks, sample_steps, current_step, total_gibbs_steps, temperature, timeout_ms) and returns: dict