From b0b9a71fd9a6d795343b6c8df1626e9a2c04a67e Mon Sep 17 00:00:00 2001 From: Simon Forman Date: Thu, 25 Nov 2021 11:12:02 -0800 Subject: [PATCH] Joy Jupyter kernel loads defs.txt --- docs/jupyter_kernel/joy_kernel.py | 3 ++- joy/defs.txt | 1 + joy/library.py | 14 +++++++++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/jupyter_kernel/joy_kernel.py b/docs/jupyter_kernel/joy_kernel.py index 8f4f7d1..65d2ce1 100644 --- a/docs/jupyter_kernel/joy_kernel.py +++ b/docs/jupyter_kernel/joy_kernel.py @@ -1,6 +1,6 @@ import sys from ipykernel.kernelbase import Kernel -from joy.library import initialize, inscribe +from joy.library import default_defs, initialize, inscribe from joy.joy import run from joy.utils.stack import stack_to_string from joy.utils.pretty_print import trace @@ -45,6 +45,7 @@ class JoyKernel(Kernel): def __init__(self, *a, **b): self.D = initialize() + default_defs(self.D) self.S = () super(JoyKernel, self).__init__(*a, **b) diff --git a/joy/defs.txt b/joy/defs.txt index 4945b66..a1be10d 100644 --- a/joy/defs.txt +++ b/joy/defs.txt @@ -87,6 +87,7 @@ sum [+] step_zero swapd [swap] dip swons swap cons swoncat swap concat +sqr dup mul tailrec [i] genrec take [] roll> [shift] times pop ternary binary popd diff --git a/joy/library.py b/joy/library.py index c0bb388..551d6c6 100644 --- a/joy/library.py +++ b/joy/library.py @@ -23,11 +23,14 @@ functions. Its main export is a Python function initialize() that returns a dictionary of Joy functions suitable for use with the joy() function. ''' +from pkg_resources import resource_stream +from io import TextIOWrapper from inspect import getdoc, getmembers, isfunction from functools import wraps from itertools import count import operator, math +from . import __name__ as _joy_package_name from .parser import text_to_expression, Symbol from .utils import generated_library as genlib from .utils.errors import ( @@ -44,6 +47,14 @@ from .utils.stack import ( ) +def default_defs(dictionary): + def_stream = TextIOWrapper( + resource_stream(_joy_package_name, 'defs.txt'), + encoding='UTF_8', + ) + Def.load_definitions(def_stream, dictionary) + + HELP_TEMPLATE = '''\ ==== Help on %s ==== @@ -190,7 +201,8 @@ class Def(object): if line.lstrip().startswith('#'): continue name, body = text_to_expression(line) - inscribe(class_(name, body), dictionary) + if name not in dictionary: + inscribe(class_(name, body), dictionary) #