DeepSolanaCoder
/
DeepSeek-Coder-main
/finetune
/venv
/lib
/python3.12
/site-packages
/dill
/temp.py
#!/usr/bin/env python | |
# | |
# Author: Mike McKerns (mmckerns @caltech and @uqfoundation) | |
# Copyright (c) 2008-2016 California Institute of Technology. | |
# Copyright (c) 2016-2024 The Uncertainty Quantification Foundation. | |
# License: 3-clause BSD. The full license text is available at: | |
# - https://github.com/uqfoundation/dill/blob/master/LICENSE | |
""" | |
Methods for serialized objects (or source code) stored in temporary files | |
and file-like objects. | |
""" | |
#XXX: better instead to have functions write to any given file-like object ? | |
#XXX: currently, all file-like objects are created by the function... | |
__all__ = ['dump_source', 'dump', 'dumpIO_source', 'dumpIO',\ | |
'load_source', 'load', 'loadIO_source', 'loadIO',\ | |
'capture'] | |
import contextlib | |
def capture(stream='stdout'): | |
"""builds a context that temporarily replaces the given stream name | |
>>> with capture('stdout') as out: | |
... print ("foo!") | |
... | |
>>> print (out.getvalue()) | |
foo! | |
""" | |
import sys | |
from io import StringIO | |
orig = getattr(sys, stream) | |
setattr(sys, stream, StringIO()) | |
try: | |
yield getattr(sys, stream) | |
finally: | |
setattr(sys, stream, orig) | |
def b(x): # deal with b'foo' versus 'foo' | |
import codecs | |
return codecs.latin_1_encode(x)[0] | |
def load_source(file, **kwds): | |
"""load an object that was stored with dill.temp.dump_source | |
file: filehandle | |
alias: string name of stored object | |
mode: mode to open the file, one of: {'r', 'rb'} | |
>>> f = lambda x: x**2 | |
>>> pyfile = dill.temp.dump_source(f, alias='_f') | |
>>> _f = dill.temp.load_source(pyfile) | |
>>> _f(4) | |
16 | |
""" | |
alias = kwds.pop('alias', None) | |
mode = kwds.pop('mode', 'r') | |
fname = getattr(file, 'name', file) # fname=file.name or fname=file (if str) | |
source = open(fname, mode=mode, **kwds).read() | |
if not alias: | |
tag = source.strip().splitlines()[-1].split() | |
if tag[0] != '#NAME:': | |
stub = source.splitlines()[0] | |
raise IOError("unknown name for code: %s" % stub) | |
alias = tag[-1] | |
local = {} | |
exec(source, local) | |
_ = eval("%s" % alias, local) | |
return _ | |
def dump_source(object, **kwds): | |
"""write object source to a NamedTemporaryFile (instead of dill.dump) | |
Loads with "import" or "dill.temp.load_source". Returns the filehandle. | |
>>> f = lambda x: x**2 | |
>>> pyfile = dill.temp.dump_source(f, alias='_f') | |
>>> _f = dill.temp.load_source(pyfile) | |
>>> _f(4) | |
16 | |
>>> f = lambda x: x**2 | |
>>> pyfile = dill.temp.dump_source(f, dir='.') | |
>>> modulename = os.path.basename(pyfile.name).split('.py')[0] | |
>>> exec('from %s import f as _f' % modulename) | |
>>> _f(4) | |
16 | |
Optional kwds: | |
If 'alias' is specified, the object will be renamed to the given string. | |
If 'prefix' is specified, the file name will begin with that prefix, | |
otherwise a default prefix is used. | |
If 'dir' is specified, the file will be created in that directory, | |
otherwise a default directory is used. | |
If 'text' is specified and true, the file is opened in text | |
mode. Else (the default) the file is opened in binary mode. On | |
some operating systems, this makes no difference. | |
NOTE: Keep the return value for as long as you want your file to exist ! | |
""" #XXX: write a "load_source"? | |
from .source import importable, getname | |
import tempfile | |
kwds.setdefault('delete', True) | |
kwds.pop('suffix', '') # this is *always* '.py' | |
alias = kwds.pop('alias', '') #XXX: include an alias so a name is known | |
name = str(alias) or getname(object) | |
name = "\n#NAME: %s\n" % name | |
#XXX: assumes kwds['dir'] is writable and on $PYTHONPATH | |
file = tempfile.NamedTemporaryFile(suffix='.py', **kwds) | |
file.write(b(''.join([importable(object, alias=alias),name]))) | |
file.flush() | |
return file | |
def load(file, **kwds): | |
"""load an object that was stored with dill.temp.dump | |
file: filehandle | |
mode: mode to open the file, one of: {'r', 'rb'} | |
>>> dumpfile = dill.temp.dump([1, 2, 3, 4, 5]) | |
>>> dill.temp.load(dumpfile) | |
[1, 2, 3, 4, 5] | |
""" | |
import dill as pickle | |
mode = kwds.pop('mode', 'rb') | |
name = getattr(file, 'name', file) # name=file.name or name=file (if str) | |
return pickle.load(open(name, mode=mode, **kwds)) | |
def dump(object, **kwds): | |
"""dill.dump of object to a NamedTemporaryFile. | |
Loads with "dill.temp.load". Returns the filehandle. | |
>>> dumpfile = dill.temp.dump([1, 2, 3, 4, 5]) | |
>>> dill.temp.load(dumpfile) | |
[1, 2, 3, 4, 5] | |
Optional kwds: | |
If 'suffix' is specified, the file name will end with that suffix, | |
otherwise there will be no suffix. | |
If 'prefix' is specified, the file name will begin with that prefix, | |
otherwise a default prefix is used. | |
If 'dir' is specified, the file will be created in that directory, | |
otherwise a default directory is used. | |
If 'text' is specified and true, the file is opened in text | |
mode. Else (the default) the file is opened in binary mode. On | |
some operating systems, this makes no difference. | |
NOTE: Keep the return value for as long as you want your file to exist ! | |
""" | |
import dill as pickle | |
import tempfile | |
kwds.setdefault('delete', True) | |
file = tempfile.NamedTemporaryFile(**kwds) | |
pickle.dump(object, file) | |
file.flush() | |
return file | |
def loadIO(buffer, **kwds): | |
"""load an object that was stored with dill.temp.dumpIO | |
buffer: buffer object | |
>>> dumpfile = dill.temp.dumpIO([1, 2, 3, 4, 5]) | |
>>> dill.temp.loadIO(dumpfile) | |
[1, 2, 3, 4, 5] | |
""" | |
import dill as pickle | |
from io import BytesIO as StringIO | |
value = getattr(buffer, 'getvalue', buffer) # value or buffer.getvalue | |
if value != buffer: value = value() # buffer.getvalue() | |
return pickle.load(StringIO(value)) | |
def dumpIO(object, **kwds): | |
"""dill.dump of object to a buffer. | |
Loads with "dill.temp.loadIO". Returns the buffer object. | |
>>> dumpfile = dill.temp.dumpIO([1, 2, 3, 4, 5]) | |
>>> dill.temp.loadIO(dumpfile) | |
[1, 2, 3, 4, 5] | |
""" | |
import dill as pickle | |
from io import BytesIO as StringIO | |
file = StringIO() | |
pickle.dump(object, file) | |
file.flush() | |
return file | |
def loadIO_source(buffer, **kwds): | |
"""load an object that was stored with dill.temp.dumpIO_source | |
buffer: buffer object | |
alias: string name of stored object | |
>>> f = lambda x:x**2 | |
>>> pyfile = dill.temp.dumpIO_source(f, alias='_f') | |
>>> _f = dill.temp.loadIO_source(pyfile) | |
>>> _f(4) | |
16 | |
""" | |
alias = kwds.pop('alias', None) | |
source = getattr(buffer, 'getvalue', buffer) # source or buffer.getvalue | |
if source != buffer: source = source() # buffer.getvalue() | |
source = source.decode() # buffer to string | |
if not alias: | |
tag = source.strip().splitlines()[-1].split() | |
if tag[0] != '#NAME:': | |
stub = source.splitlines()[0] | |
raise IOError("unknown name for code: %s" % stub) | |
alias = tag[-1] | |
local = {} | |
exec(source, local) | |
_ = eval("%s" % alias, local) | |
return _ | |
def dumpIO_source(object, **kwds): | |
"""write object source to a buffer (instead of dill.dump) | |
Loads by with dill.temp.loadIO_source. Returns the buffer object. | |
>>> f = lambda x:x**2 | |
>>> pyfile = dill.temp.dumpIO_source(f, alias='_f') | |
>>> _f = dill.temp.loadIO_source(pyfile) | |
>>> _f(4) | |
16 | |
Optional kwds: | |
If 'alias' is specified, the object will be renamed to the given string. | |
""" | |
from .source import importable, getname | |
from io import BytesIO as StringIO | |
alias = kwds.pop('alias', '') #XXX: include an alias so a name is known | |
name = str(alias) or getname(object) | |
name = "\n#NAME: %s\n" % name | |
#XXX: assumes kwds['dir'] is writable and on $PYTHONPATH | |
file = StringIO() | |
file.write(b(''.join([importable(object, alias=alias),name]))) | |
file.flush() | |
return file | |
del contextlib | |
# EOF | |