Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

DESCRIPTION: pseudosugar - extend python with functional programming language features

REQUIRES: LINUX OS AND PYTHON3.1

QUICK TEST: $ python3.1 setup.py build dev –quicktest

SUMMARY: pseudosugar is a pure python module. pseudosugar is a python ast tree hack, adding the following syntax sugars:

function<<<< aa, bb, cc, … -> function(aa, bb, cc, …) aa, bb, cc, … >>>>function -> function(aa, bb, cc, …)

xx ..function(aa, bb, cc) -> function(xx, aa, bb, cc) xx …function(aa, bb, cc) -> function(aa, xx, bb, cc) xx ….function(aa, bb, cc) -> function(aa, bb, xx, cc)

RECENT CHANGELOG:

20091231 - added <<<< and >>>> sugar 20091224 - added pseudomethod interactive console - revamped pseudomethod import hook 20091224 - modularized package - fix install issues - added sdist check 20091209 - improved documentation 20091205 - moved source code to c++ 20091116 - package integrated

DEMO USAGE:

>>> ## start up the interactive console
>>> from pseudosugar import *
>>> pseudo_console().interact()

Python 3.1.1 (r311:74480, Sep 13 2009, 17:17:12) [GCC 4.3.2] on linux2 Type “help”, “copyright”, “credits” or “license” for more information. (pseudo_console) pseudo_importer - adding hook <pseudosugar.pseudo_importer object at 0xb7ac754c> to sys.meta_path >>> from pseudosugar import *

>>> #### QUICK EXAMPLES
>>> ## prefix operator
>>> print<<<< 'hello', 'world'
hello world
>>> ## postfix operator
>>> 'hello', 'world' >>>>print
hello world
>>> ## pseudomethod
>>> def function(aa, bb, cc): return (aa, bb, cc)
>>> 1 ..function(0, 0) >>>>print
(1, 0, 0)
>>> 2 ...function(0, 0) >>>>print
(0, 2, 0)
>>> 3 ....function(0, 0) >>>>print
(0, 0, 3)
>>> ## '<<<<' CONVERTS FUNCTIONS INTO PREFIX OPERATORS
>>> ## foo<<<< turns foo into a prefix operator
>>> ## foo<<<< will take in everything to its right that is comma delimited
>>> ## print<<<< is useful for making print statements
>>> print<<<< 'bob says', 'hello ' + re.sub<<<< re.compile('(\w+)'), '\\1!', 'world'
bob says hello world!
>>> ## '>>>>' CONVERTS FUNCTIONS INTO POSTFIX OPERATORS
>>> ## it behaves almost exactly like '>>>>' except in reverse
>>> ## it is useful for chaining together multiple operators
>>> 'qwerty' >>>>list >>>>sorted >>>>enumerate >>>>dict >>>>print
{0: 'e', 1: 'q', 2: 'r', 3: 't', 4: 'w', 5: 'y'}
>>> ## OPERATOR PRECEDENCE
>>> ## '>>>>' has higher operator precedence than '<<<<'
>>> print( list<<<< 'abcd' >>>>tuple ) ## list(tuple('abcd'))
['a', 'b', 'c', 'd']
>>> #### PSEUDOMETHOD SYNTAX
>>> ## DYNAMICALLY BIND FUNCTION CALLS TO OBJECTS
>>> ## bind the function call print() to 'hello'
>>> print('hello')
hello
>>> 'hello' ..print()
hello
>>> 'hello' ..print('world')
hello world
>>> 'hello' ..print('world', '!')
hello world !
>>> 'hello' ..print('world', '!', file = sys.stdout)
hello world !
>>> ## create a string pseudomethod which adds an exclamation or other endings
>>> def add_ending(self, end = '!'): return self + end
>>> 'hello' ..add_ending() ..print()
hello!
>>> 'hello'.upper() ..add_ending() ..print()
HELLO!
>>> 'hello'.upper() ..add_ending(' world') ..print()
HELLO world
>>> 'hello'.upper() ..add_ending(' world').lower() ..print()
hello world
>>> 'hello'.upper() ..add_ending(' world').lower() ..add_ending('!') ..print()
hello world!
>>> 'hello'.upper() ..add_ending(' world').lower() ..add_ending('!') ..add_ending(end = '!') ..print()
hello world!!
>>> ## OPERATOR PRECEDENCE
>>> ## 'aa ..bb()' has the same operator precedence as the attribute operator 'a.b'
>>> def add(aa, bb): return aa + bb
>>> print( 2 * 3 ..add(4) + 5 == 2 * (3 + 4) + 5 )
True
>>> print( 3 == 1 ..add(2) )
True
>>> print( 0, 0 ..add(1), 0 )
0 1 0
>>> ## EXTEND RESTRICTED TYPES
>>> ## the python code object type <class 'code'> cannot be subtyped nor will it accept any method binding.
>>> ## however, we can extend it by dynamically binding ordinary functions.
>>> ## here's a pseudomethod which disassembles an instance of the type to a specified output
>>> import dis, io, sys
>>> def disassemble(self, file):
...   backup_stdout = sys.stdout ## backup sys.stdout
...   try:
...     sys.stdout = file
...     dis.dis(self) ## disassemble self
...     return file
...   finally:
...     sys.stdout = backup_stdout ## restore sys.stdout
>>> code_source = 'print( "hello" )'; code_object = compile(code_source, '', 'exec'); exec( code_object )
hello
>>> code_object ..disassemble(file = io.StringIO()).getvalue() ..print()
  1           0 LOAD_NAME                0 (print)
              3 LOAD_CONST               0 ('hello')
              6 CALL_FUNCTION            1
              9 POP_TOP
             10 LOAD_CONST               1 (None)
             13 RETURN_VALUE
>>> ## '...' AND '....' SYNTAX
>>> ## sometimes we instead want the 2nd or 3rd argument of a function bound to an object.
>>> ## '...' and '....' will do this respectively
>>> '2nd' ...print(0, 0)
0 2nd 0
>>> '3rd' ....print(0, 0)
0 0 3rd
>>> ## '....' is useful for chaining re.sub
>>> ss = 'file = io.StringIO(); print 1, 2, 3 >> file; print file.getvalue()'; print( ss )
file = io.StringIO(); print 1, 2, 3 >> file; print file.getvalue()
>>> print(
...   re.sub('print (.*?)$', 'print( \\1 )',
...          re.sub('print (.*) >> (.*?);', 'print( \\1, file = \\2 );', ss)
...          )
...   )
file = io.StringIO(); print( 1, 2, 3, file = file ); print( file.getvalue() )
>>> ss ....re.sub('print (.*) >> (.*?);', 'print( \\1, file = \\2 );') \
...    ....re.sub('print (.*?)$', 'print( \\1 )') \
...    ..print()
file = io.StringIO(); print( 1, 2, 3, file = file ); print( file.getvalue() )
>>> ## in fact, another primary use of pseudomethod is to flatten ugly, hard-to-read, lisp-like nested function calls
>>> print( dict( enumerate( zip( 'abc',  sorted( 'abc bca cab'.split(' '), key = lambda x: x[1] ) ) ) ) )
{0: ('a', 'cab'), 1: ('b', 'abc'), 2: ('c', 'bca')}
>>> 'abc bca cab'.split(' ') ..sorted(key = lambda x: x[1]) ...zip('abc') ..enumerate() ..dict() ..print()
{0: ('a', 'cab'), 1: ('b', 'abc'), 2: ('c', 'bca')}
>>> ## IMPORT MODULES WRITTEN WITH PSEUDOMETHOD SYNTAX
>>> ## create test_module.py
>>> open('test_module.py', 'w').write('"hello" ..print()\n') ..print('bytes written')
18 bytes written
>>> ## during import, insert the magic prefix 'pseudosugar.' before the last module
>>> ## import pseudosugar.a
>>> ## import a.pseudosugar.b
>>> ## import a.b.pseudosugar.c
>>> import pseudosugar.test_module
hello

Metadata

Release files for pseudosugar 2010.01.01.README

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pseudosugar 2010.01.01.README
File Size Uploaded Provenance
pseudosugar-2010.01.01.README.tar.gz 90.1 kB Without provenance Details

Release files / pseudosugar-2010.01.01.README.tar.gz

Download URL pseudosugar-2010.01.01.README.tar.gz
Size 90.1 kB
Tags Source
SHA-256 checksum
How to use checksums
736e1bfe5fef9e81c368eb32d668c2e4599ce230ca398793561788e505526456
BLAKE2b-256 checksum
How to use checksums
0f91bfbbd5ff836e03472387e89320a14940908f795d73d098312b33f1b8046f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for pseudosugar 2010.01.01.README

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page