J
Jonathan Fine
Hello
As part of the MathTran project I found myself
wanting to maintain a bijection between long
names and short names.
http://www.open.ac.uk/mathtran
In other words, I wanted to have two dictionaries
f and g such that
f[a] == b
g == a
are equivalent statements.
A google search for biject.py and bijection.py
produced no hits, so I suspect that this may not
have been done before.
I've written a partial implementation of this,
and would appreciate comments.
http://texd.cvs.sourceforge.net/texd/tex/util.py?revision=1.1&view=markup
http://texd.cvs.sourceforge.net/texd/test_tex/test_util.py?revision=1.1&view=markup
Here's the code from test_util.py, that shows how it
works. The weakref stuff is so that there isn't a
circular reference f to g to f.
===
from tex.util import biject
f, g = biject()
assert f.inverse is g
assert g.inverse is f
f[1] = 2
assert f[1] == 2
assert g[2] == 1
assert f.has_value(2)
import weakref
wr_g = weakref.ref(g)
del g
assert wr_g() == None
assert f.inverse == None
===
best regards
Jonathan
As part of the MathTran project I found myself
wanting to maintain a bijection between long
names and short names.
http://www.open.ac.uk/mathtran
In other words, I wanted to have two dictionaries
f and g such that
f[a] == b
g == a
are equivalent statements.
A google search for biject.py and bijection.py
produced no hits, so I suspect that this may not
have been done before.
I've written a partial implementation of this,
and would appreciate comments.
http://texd.cvs.sourceforge.net/texd/tex/util.py?revision=1.1&view=markup
http://texd.cvs.sourceforge.net/texd/test_tex/test_util.py?revision=1.1&view=markup
Here's the code from test_util.py, that shows how it
works. The weakref stuff is so that there isn't a
circular reference f to g to f.
===
from tex.util import biject
f, g = biject()
assert f.inverse is g
assert g.inverse is f
f[1] = 2
assert f[1] == 2
assert g[2] == 1
assert f.has_value(2)
import weakref
wr_g = weakref.ref(g)
del g
assert wr_g() == None
assert f.inverse == None
===
best regards
Jonathan