docs: def set_meta(self, meta_data):
          '''
          node.set_meta(meta) yields a calculation node identical to the given node except that its
          meta_data attribute has been set to the given dictionary meta. If meta is not persistent,
          it is cast to a persistent dictionary first.
          '''
          if not (isinstance(meta_data, ps.PMap) or isinstance(meta_data, IMap)):
              meta_data = ps.pmap(meta_data)
          new_cnode = copy.copy(self)
          object.__setattr__(new_cnode, 'meta_data', meta_data)
          return new_cnode