λ encoding

Summary

This shows the result of using a custom codec instead of an import hook. It is only included as a proof of concept, as it is not as versatile as the import hooks.

Suppose we want to run a program that has a custom encoding: this is done in Python by inserting a special coding directive as the first line of our program. In this simple example as proof of concept, we use λ to represent Python’s lambda keyword:

# coding: lambda_encoding

square = λ x: x**2

assert square(3) == 9

print("Using lambda-encoding: λ")  # λ is not converted inside strings
print("The square of 5 is", square(5))

The basic code required create the lambda_encoding codec, reading and decoding the file, is found in lambda_codec.py

Before running our program with a custom encoding, we need to make Python aware of the existence of that encoding. Here is how we do it in the included test files, usually run by pytest:

# test_lambda_encoding.py
# The following import will automatically register a codec
from ideas.examples import lambda_codec  # noqa

def test_import():
    from . import short_program  # noqa

if __name__ == "__main__":
    import short_program

And here is the result:

(venv-ideas3.11) C:\Users\Andre\github\ideas
> py tests/lambda_encoding/test_lambda_encoding.py
lambda_encoding has been registered.
Using lambda-encoding: λ
The square of 5 is 25

Warning

At this time, the ideas console cannot handle at the same time regular import hooks that are used to transform a source and transformations done using a custom codec: you can only use one or the other.

We can also use the ideas console and have our special encoding be used.:

(venv-ideas3.11) C:\Users\Andre\github\ideas
> py
Python 3.11.9 ...

>>> from ideas.examples import lambda_codec
lambda_encoding has been registered.
>>> from ideas import console
>>> console.start()
Ideas Console version 0.2.0. [Python version: 3.11.9]
ideas> sq = λ x: x*x
ideas> sq(3)
9
ideas>