nipype / pydra

Pydra Dataflow Engine
https://nipype.github.io/pydra/
Other
120 stars 59 forks source link

FunctionTask hash inconsistency #455

Open JeffWigger opened 3 years ago

JeffWigger commented 3 years ago

What version of Pydra are you using? Pydra version: 0.14.1 Python version: 3.8.5

This is the follow-up to the caching issue from yesterdays jitsi meeting. I was able to load the _task.pklz now. The issue did not lie with ants’ ApplyTransforms. It instead originated with a FunctionTask called before it.

A FunctionTask with customized outputs generates inconsistent hashes. This happens for both the python function annotations as well as the @pydra.mark.annotate decorator. However, if using the former, the task has a new hash every time, whilst when using the latter, it just randomly alternates between two possible hashes. The two following minimal examples demonstrate this behaviour.

Decorator example:

import os
import pydra
import typing as ty

cache_dir_tmp = "/home/rerun_test/cache"

@pydra.mark.task
@pydra.mark.annotate({"return": {"res", ty.Any}})
def add_var_wait(a, b):
    print("rerun")
    return a + b

task4 = add_var_wait(name = "task4", a=4, b=6, cache_dir=cache_dir_tmp)
print(task4.inputs.hash)

with pydra.Submitter(plugin="cf", n_procs=6) as sub:
    sub(task4)

print(task4.result(return_inputs=True))
print(pydra.__version__)

Type hint example:

import os
import pydra
import typing as ty

cache_dir_tmp = "/home/rerun_test/cache"

@pydra.mark.task
def add_var_wait(a, b) -> ty.NamedTuple("output", [("res", ty.Any)]):
    print("rerun")
    return a + b

task4 = add_var_wait(name = "task4", a=4, b=6, cache_dir=cache_dir_tmp)
print(task4.inputs.hash)

with pydra.Submitter(plugin="cf", n_procs=6) as sub:
    sub(task4)

print(task4.result(return_inputs=True))
print(pydra.__version__)

The expected outcome is for the hash values of task4 to be consistent between runs, such that it can access the correct folder in the cache directory.

Removing the custom output names from all FunctionTask resolves the caching issue in these minimal examples as well as in example workflow that I am working on.

effigies commented 3 years ago

@jw-96 I was able to reproduce with a separate file:

test1.py:

import typing as ty
import cloudpickle as cp

def func(a, b) -> {"res": ty.Any}:
    print("rerun")
    return a + b

print(cp.dumps(func))
$ for i in {0..10}; do python test1.py; done | sort | uniq -c
     11 b'\x80\x05\x95\x15\x02\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test1.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94}\x94\x8c\x03res\x94\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94ss\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94N\x8c\n__module__\x94h\x19\x8c\x07__doc__\x94N\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94u\x86\x94\x86R0.'

test2.py

import typing as ty
import cloudpickle as cp

def func(a, b) -> ty.NamedTuple("output", [("res", ty.Any)]):
    print("rerun")
    return a + b

print(cp.dumps(func))
$ for i in {0..10}; do python test2.py; done | sort | uniq -c
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 0a293e4374074dcfb4482cc6dfec2226\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 109f257a616946d0821c36e367021a7a\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 143cb3b9fd364439a195ae3f05656d21\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 332fadd109894d8880f30ff48c883064\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 5e20c4b32eea4a7e8a5df6363b42d815\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 63ae9f757e4342bdb4b4e94fff1a789e\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 6490bea6389f4c2cb7224f26fe2c2106\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 65fe5e05ca45414c816d655571ab195b\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 72832cbcd284414a82c7301df00d14ec\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c 8170a1cc68ab443697550290bc67cc3f\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'
      1 b'\x80\x05\x95s\x0b\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test2.py\x94\x8c\x04func\x94K\x04C\x04\x00\x01\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94h\x00\x8c\x14_make_skeleton_class\x94\x93\x94(\x8c\x08builtins\x94\x8c\x04type\x94\x93\x94\x8c\x06output\x94h(\x8c\x05tuple\x94\x93\x94\x85\x94}\x94\x8c\t__slots__\x94)s\x8c aa90e6d49c5d42fd9b6c31e8ef1b475b\x94Nt\x94R\x94h\x1d\x8c\x0f_class_setstate\x94\x93\x94h3}\x94(\x8c\x07__doc__\x94\x8c\x0coutput(res,)\x94h0)\x8c\x07_fields\x94\x8c\x03res\x94\x85\x94\x8c\x0f_field_defaults\x94}\x94\x8c\x07__new__\x94h(\x8c\x0cstaticmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x02K\x03KCC\x0ct\x00|\x00|\x01f\x01\x83\x02S\x00\x94N\x85\x94\x8c\n_tuple_new\x94\x85\x94\x8c\x04_cls\x94h:\x86\x94\x8c\x08<string>\x94\x8c\x08<lambda>\x94K\x01C\x00\x94))t\x94R\x94}\x94h\x18\x8c\x11namedtuple_output\x94sNNNt\x94R\x94h\x1fhO}\x94}\x94(h\x18h>h"\x8c\x0eoutput.__new__\x94h#}\x94h:\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94)\x8c\n__module__\x94hMh7\x8c#Create new instance of output(res,)\x94\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94hC\x8c\x08builtins\x94\x8c\x07getattr\x94\x93\x94h-\x8c\x07__new__\x94\x86\x94R\x94su\x86\x94\x86R0\x85\x94R\x94\x8c\x05_make\x94h(\x8c\x0bclassmethod\x94\x93\x94h\x05(h\x08(K\x02K\x00K\x00K\x03K\x06K\x13C2\x88\x02|\x00|\x01\x83\x02}\x02\x88\x00|\x02\x83\x01\x88\x01k\x03r.t\x00d\x01\x88\x01\x9b\x00d\x02t\x01|\x02\x83\x01\x9b\x00\x9d\x04\x83\x01\x82\x01|\x02S\x00\x94N\x8c\tExpected \x94\x8c\x10 arguments, got \x94\x87\x94\x8c\tTypeError\x94\x8c\x03len\x94\x86\x94\x8c\x03cls\x94\x8c\x08iterable\x94\x8c\x06result\x94\x87\x94\x8cQ/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections/__init__.py\x94hiM\xb5\x01C\x08\x00\x02\n\x01\x0c\x01\x18\x01\x94\x8c\x04_len\x94\x8c\nnum_fields\x94\x8c\ttuple_new\x94\x87\x94)t\x94R\x94}\x94(h\x17\x8c\x0bcollections\x94h\x18h\x80\x8c\x08__path__\x94]\x94\x8cE/home/chris/miniconda3/envs/cloudpickle-dev/lib/python3.9/collections\x94ah\x1ahwuNNh\x00\x8c\x10_make_empty_cell\x94\x93\x94)R\x94h\x85)R\x94h\x85)R\x94\x87\x94t\x94R\x94h\x1fh\x8b}\x94}\x94(h\x18hih"\x8c\x0coutput._make\x94h#}\x94hWNhXNhYh\x80h7\x8c4Make a new output object from a sequence or iterable\x94h[h\x00\x8c\n_make_cell\x94\x93\x94h`\x8c\x03len\x94\x93\x94\x85\x94R\x94h\x92K\x01\x85\x94R\x94h\x92he\x85\x94R\x94\x87\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x85\x94R\x94\x8c\x08_replace\x94h\x05(h\x08(K\x01K\x01K\x00K\x03K\x06K\x1bC.|\x00\xa0\x00\x88\x00|\x01j\x01\x88\x01|\x00\x83\x03\xa1\x01}\x02|\x01r*t\x02d\x01t\x03|\x01\x83\x01\x9b\x02\x9d\x02\x83\x01\x82\x01|\x02S\x00\x94N\x8c\x1cGot unexpected field names: \x94\x86\x94(hi\x8c\x03pop\x94\x8c\nValueError\x94\x8c\x04list\x94t\x94\x8c\x04self\x94\x8c\x04kwds\x94hu\x87\x94hwh\xa1M\xbf\x01C\x08\x00\x01\x14\x01\x04\x01\x12\x01\x94\x8c\x04_map\x94\x8c\x0bfield_names\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xb6}\x94}\x94(h\x18h\xa1h"\x8c\x0foutput._replace\x94h#}\x94hWNhXNhYh\x80h7\x8cEReturn a new output object replacing specified fields with new values\x94h[h\x92h(\x8c\x03map\x94\x93\x94\x85\x94R\x94h\x92h;\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x08__repr__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x03K\x13C\x10|\x00j\x00j\x01\x88\x00|\x00\x16\x00\x17\x00S\x00\x94\x8c/Return a nicely formatted representation string\x94\x85\x94\x8c\t__class__\x94h\x18\x86\x94h\xa9\x85\x94hwh\xc6M\xc8\x01C\x02\x00\x02\x94\x8c\x08repr_fmt\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fh\xd5}\x94}\x94(h\x18h\xc6h"\x8c\x0foutput.__repr__\x94h#}\x94hWNhXNhYh\x80h7h\xc8h[h\x92\x8c\x08(res=%r)\x94\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x07_asdict\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x04K\x13C\x10\x88\x00\x88\x01|\x00j\x00|\x00\x83\x02\x83\x01S\x00\x94\x8c9Return a new dict which maps field names to their values.\x94\x85\x94h9\x85\x94h\xcchwh\xe1M\xcc\x01C\x02\x00\x02\x94\x8c\x05_dict\x94\x8c\x04_zip\x94\x86\x94)t\x94R\x94h\x7fNNh\x85)R\x94h\x85)R\x94\x86\x94t\x94R\x94h\x1fh\xf0}\x94}\x94(h\x18h\xe1h"\x8c\x0eoutput._asdict\x94h#}\x94hWNhXNhYh\x80h7h\xe3h[h\x92h(\x8c\x04dict\x94\x93\x94\x85\x94R\x94h\x92h(\x8c\x03zip\x94\x93\x94\x85\x94R\x94\x86\x94h\\]\x94h^}\x94u\x86\x94\x86R0\x8c\x0e__getnewargs__\x94h\x05(h\x08(K\x01K\x00K\x00K\x01K\x02K\x13C\x08\x88\x00|\x00\x83\x01S\x00\x94\x8c7Return self as a plain tuple.  Used by copy and pickle.\x94\x85\x94)h\xcchwj\x01\x01\x00\x00M\xd0\x01C\x02\x00\x02\x94\x8c\x06_tuple\x94\x85\x94)t\x94R\x94h\x7fNNh\x85)R\x94\x85\x94t\x94R\x94h\x1fj\r\x01\x00\x00}\x94}\x94(h\x18j\x01\x01\x00\x00h"\x8c\x15output.__getnewargs__\x94h#}\x94hWNhXNhYh\x80h7j\x03\x01\x00\x00h[h\x92h-\x85\x94R\x94\x85\x94h\\]\x94h^}\x94u\x86\x94\x86R0h:\x8c\x0c_collections\x94\x8c\x0c_tuplegetter\x94\x93\x94K\x00\x8c\x18Alias for field number 0\x94\x86\x94R\x94hYh\x19h#hSu}\x94\x86\x94\x86R0shWNhXNhYh\x19h7Nh[Nh\\]\x94h^}\x94u\x86\x94\x86R0.'

test3.py:

import pydra
import typing as ty
import cloudpickle as cp

@pydra.mark.annotate({"return": {"res", ty.Any}})
def func(a, b):
    print("rerun")
    return a + b

print(cp.dumps(func))
$ for i in {0..10}; do python test3.py; done | sort | uniq -c
      5 b'\x80\x05\x95\x16\x02\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test3.py\x94\x8c\x04func\x94K\x05C\x04\x00\x02\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94\x8f\x94(\x8c\x03res\x94\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94\x90s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94N\x8c\n__module__\x94h\x19\x8c\x07__doc__\x94N\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94u\x86\x94\x86R0.'
      6 b'\x80\x05\x95\x16\x02\x00\x00\x00\x00\x00\x00\x8c\x17cloudpickle.cloudpickle\x94\x8c\r_builtin_type\x94\x93\x94\x8c\nLambdaType\x94\x85\x94R\x94(h\x02\x8c\x08CodeType\x94\x85\x94R\x94(K\x02K\x00K\x00K\x02K\x02KCC\x10t\x00d\x01\x83\x01\x01\x00|\x00|\x01\x17\x00S\x00\x94N\x8c\x05rerun\x94\x86\x94\x8c\x05print\x94\x85\x94\x8c\x01a\x94\x8c\x01b\x94\x86\x94\x8c)/home/chris/Projects/cloudpickle/test3.py\x94\x8c\x04func\x94K\x05C\x04\x00\x02\x08\x01\x94))t\x94R\x94}\x94(\x8c\x0b__package__\x94N\x8c\x08__name__\x94\x8c\x08__main__\x94\x8c\x08__file__\x94h\x11uNNNt\x94R\x94\x8c\x1ccloudpickle.cloudpickle_fast\x94\x8c\x12_function_setstate\x94\x93\x94h\x1c}\x94}\x94(h\x18h\x12\x8c\x0c__qualname__\x94h\x12\x8c\x0f__annotations__\x94}\x94\x8c\x06return\x94\x8f\x94(\x8c\x06typing\x94\x8c\x03Any\x94\x93\x94\x8c\x03res\x94\x90s\x8c\x0e__kwdefaults__\x94N\x8c\x0c__defaults__\x94N\x8c\n__module__\x94h\x19\x8c\x07__doc__\x94N\x8c\x0b__closure__\x94N\x8c\x17_cloudpickle_submodules\x94]\x94\x8c\x0b__globals__\x94}\x94u\x86\x94\x86R0.'

I'm realizing that the problem with Test 3 is that you annotated with a set, not a dict. It should be

 import pydra
 import typing as ty
 import cloudpickle as cp

-@pydra.mark.annotate({"return": {"res", ty.Any}})
+@pydra.mark.annotate({"return": {"res": ty.Any}})
 def func(a, b):
     print("rerun")
     return a + b

 print(cp.dumps(func))

So my assessment is that, for the moment NamedTuple is a mess, but we can do just as well with a dict, so let's do that.

JeffWigger commented 3 years ago

Thank you @effigies. I will continue with using dictionaries instead of NamedTubles. It is more readable anyway.

effigies commented 2 years ago

We should:

1) Removed the NamedTuple option from any docs. 2) Deprecate support for annotating with NamedTuples and plan to remove in a future version

An alternative could be to convert NamedTuples to dicts internally.