code: def get_calculatable_quantities(inputs, methods):
      '''
      Given an interable of input quantity names and a methods dictionary,
      returns a list of output quantities that can be calculated.
      '''
      output_quantities = []
      updated = True
      while updated:
          updated = False
          for output in methods.keys():
              if output in output_quantities or output in inputs:
                  # we already know we can calculate this
                  continue
              for args, func in methods[output].items():
                  if all([arg in inputs or arg in output_quantities
                          for arg in args]):
                      output_quantities.append(output)
                      updated = True
                      break
      return tuple(output_quantities) + tuple(inputsf get_calculatable_quantities(inputs, methods):
      '''
      Given an interable of input quantity names and a methods dictionary,
      returns a list of output quantities that can be calculated.
      '''
      output_quantities = []
      updated = True
      while updated:
          updated = False
          for output in methods.keys():
              if output in output_quantities or output in inputs:
                  # we already know we can calculate this
                  continue
              for args, func in methods[output].items():
                  if all([arg in inputs or arg in output_quantities
                          for arg in args]):
                      output_quantities.append(output)
                      updated = True
                      break
      return tuple(output_quantities) + tuple(inputs)
docs: Given an interable of input quantity names and a methods dictionary,
      returns a list of output quantities that can be calculated.