futurize stage2 core
This commit is contained in:
parent
e758d7d2be
commit
29d510eb46
|
|
@ -11,6 +11,9 @@ functions, during inference? Could I write out better code that way?
|
||||||
In any event, I am proceeding with this sort of ad hoc way for now.
|
In any event, I am proceeding with this sort of ad hoc way for now.
|
||||||
'''
|
'''
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
from builtins import next
|
||||||
|
from builtins import str
|
||||||
|
from builtins import object
|
||||||
from joy.parser import text_to_expression, Symbol
|
from joy.parser import text_to_expression, Symbol
|
||||||
from joy.utils.stack import concat, iter_stack, list_to_stack
|
from joy.utils.stack import concat, iter_stack, list_to_stack
|
||||||
from joy.library import SimpleFunctionWrapper, YIN_STACK_EFFECTS
|
from joy.library import SimpleFunctionWrapper, YIN_STACK_EFFECTS
|
||||||
|
|
@ -33,7 +36,7 @@ class InfiniteStack(tuple):
|
||||||
_NAMES = _names()
|
_NAMES = _names()
|
||||||
next(_NAMES)
|
next(_NAMES)
|
||||||
|
|
||||||
names = _NAMES.next
|
names = _NAMES.__next__
|
||||||
reset = lambda _, _n=_NAMES: _n.send(-1)
|
reset = lambda _, _n=_NAMES: _n.send(-1)
|
||||||
|
|
||||||
def __init__(self, code):
|
def __init__(self, code):
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
from builtins import str
|
||||||
from joy.parser import Symbol
|
from joy.parser import Symbol
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -10,7 +11,7 @@ def _names():
|
||||||
|
|
||||||
class InfiniteStack(tuple):
|
class InfiniteStack(tuple):
|
||||||
|
|
||||||
names = _names().next
|
names = _names().__next__
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
if not self:
|
if not self:
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ left.
|
||||||
# (Kinda clunky and hacky. This should be swapped out in favor of much
|
# (Kinda clunky and hacky. This should be swapped out in favor of much
|
||||||
# smarter stuff.)
|
# smarter stuff.)
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
from builtins import object
|
||||||
from traceback import print_exc
|
from traceback import print_exc
|
||||||
from .stack import expression_to_string, stack_to_string
|
from .stack import expression_to_string, stack_to_string
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ printed left-to-right. These functions are written to support :doc:`../pretty`.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
from builtins import map
|
||||||
def list_to_stack(el, stack=()):
|
def list_to_stack(el, stack=()):
|
||||||
'''Convert a Python list (or other sequence) to a Joy stack::
|
'''Convert a Python list (or other sequence) to a Joy stack::
|
||||||
|
|
||||||
|
|
@ -129,7 +130,6 @@ def expression_to_string(expression):
|
||||||
|
|
||||||
|
|
||||||
def _to_string(stack, f):
|
def _to_string(stack, f):
|
||||||
if isinstance(stack, long): return str(stack).rstrip('L')
|
|
||||||
if not isinstance(stack, tuple): return repr(stack)
|
if not isinstance(stack, tuple): return repr(stack)
|
||||||
if not stack: return '' # shortcut
|
if not stack: return '' # shortcut
|
||||||
return ' '.join(map(_s, f(stack)))
|
return ' '.join(map(_s, f(stack)))
|
||||||
|
|
@ -137,7 +137,6 @@ def _to_string(stack, f):
|
||||||
|
|
||||||
_s = lambda s: (
|
_s = lambda s: (
|
||||||
'[%s]' % expression_to_string(s) if isinstance(s, tuple)
|
'[%s]' % expression_to_string(s) if isinstance(s, tuple)
|
||||||
else str(s).rstrip('L') if isinstance(s, long)
|
|
||||||
else repr(s)
|
else repr(s)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,10 @@
|
||||||
# along with Thun. If not see <http://www.gnu.org/licenses/>.
|
# along with Thun. If not see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
from builtins import str
|
||||||
|
from builtins import map
|
||||||
|
from past.builtins import basestring
|
||||||
|
from builtins import object
|
||||||
from logging import getLogger, addLevelName
|
from logging import getLogger, addLevelName
|
||||||
from functools import reduce
|
from functools import reduce
|
||||||
|
|
||||||
|
|
@ -25,7 +29,7 @@ _log = getLogger(__name__)
|
||||||
addLevelName(15, 'hmm')
|
addLevelName(15, 'hmm')
|
||||||
|
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from itertools import imap, chain, product
|
from itertools import chain, product
|
||||||
from inspect import stack as inspect_stack
|
from inspect import stack as inspect_stack
|
||||||
from joy.utils.stack import (
|
from joy.utils.stack import (
|
||||||
concat,
|
concat,
|
||||||
|
|
@ -41,7 +45,7 @@ class AnyJoyType(object):
|
||||||
Joy type variable. Represents any Joy value.
|
Joy type variable. Represents any Joy value.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
accept = tuple, int, float, long, complex, str, unicode, bool, Symbol
|
accept = tuple, int, float, int, complex, str, bool, Symbol
|
||||||
prefix = 'a'
|
prefix = 'a'
|
||||||
|
|
||||||
def __init__(self, number):
|
def __init__(self, number):
|
||||||
|
|
@ -81,7 +85,7 @@ class BooleanJoyType(AnyJoyType):
|
||||||
|
|
||||||
|
|
||||||
class NumberJoyType(AnyJoyType):
|
class NumberJoyType(AnyJoyType):
|
||||||
accept = bool, int, float, long, complex
|
accept = bool, int, float, complex
|
||||||
prefix = 'n'
|
prefix = 'n'
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -105,7 +109,7 @@ class StackJoyType(AnyJoyType):
|
||||||
accept = tuple
|
accept = tuple
|
||||||
prefix = 's'
|
prefix = 's'
|
||||||
|
|
||||||
def __nonzero__(self):
|
def __bool__(self):
|
||||||
# Imitate () at the end of cons list.
|
# Imitate () at the end of cons list.
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
@ -453,7 +457,7 @@ def compilable(f):
|
||||||
Return True if a stack effect represents a function that can be
|
Return True if a stack effect represents a function that can be
|
||||||
automatically compiled (to Python), False otherwise.
|
automatically compiled (to Python), False otherwise.
|
||||||
'''
|
'''
|
||||||
return isinstance(f, tuple) and all(imap(compilable, f)) or _stacky(f)
|
return isinstance(f, tuple) and all(map(compilable, f)) or _stacky(f)
|
||||||
|
|
||||||
|
|
||||||
def doc_from_stack_effect(inputs, outputs=('??', ())):
|
def doc_from_stack_effect(inputs, outputs=('??', ())):
|
||||||
|
|
@ -721,7 +725,7 @@ def combinator_effect(number, *expect):
|
||||||
|
|
||||||
|
|
||||||
def show(DEFS):
|
def show(DEFS):
|
||||||
for name, stack_effect_comment in sorted(DEFS.iteritems()):
|
for name, stack_effect_comment in sorted(DEFS.items()):
|
||||||
t = ' *'[compilable(stack_effect_comment)]
|
t = ' *'[compilable(stack_effect_comment)]
|
||||||
print(name, '=', doc_from_stack_effect(*stack_effect_comment), t)
|
print(name, '=', doc_from_stack_effect(*stack_effect_comment), t)
|
||||||
|
|
||||||
|
|
@ -731,7 +735,7 @@ def generate_library_code(DEFS, f=None):
|
||||||
import sys
|
import sys
|
||||||
f = sys.stdout
|
f = sys.stdout
|
||||||
print('# GENERATED FILE. DO NOT EDIT.\n', file=f)
|
print('# GENERATED FILE. DO NOT EDIT.\n', file=f)
|
||||||
for name, stack_effect_comment in sorted(DEFS.iteritems()):
|
for name, stack_effect_comment in sorted(DEFS.items()):
|
||||||
if not compilable(stack_effect_comment):
|
if not compilable(stack_effect_comment):
|
||||||
continue
|
continue
|
||||||
print(file=f)
|
print(file=f)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue