Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#######
#
# E-scripts on Python.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
#   (find-eev-quick-intro)
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/python.e>
#           or at <http://angg.twu.net/e/python.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######





# «.python-bullseye»		(to "python-bullseye")
# «.tut-numbers»		(to "tut-numbers")
# «.tut-strings»		(to "tut-strings")
# «.tut-lists»			(to "tut-lists")
# «.tut-firststeps»		(to "tut-firststeps")
# «.tut-controlflow»		(to "tut-controlflow")
# «.tut-break»			(to "tut-break")
# «.tut-datastructures»		(to "tut-datastructures")
# «.tut-modules»		(to "tut-modules")
# «.tut-inputoutput»		(to "tut-inputoutput")
# «.tut-errors»			(to "tut-errors")
# «.tut-classes»		(to "tut-classes")
# «.type»			(to "type")
# «.luatree»			(to "luatree")
# «.list»			(to "list")
# «.tuple»			(to "tuple")
# «.python-wheezy»		(to "python-wheezy")
# «.python3-wheezy»		(to "python3-wheezy")
# «.python-on-squeeze»		(to "python-on-squeeze")
# «.python-on-lenny»		(to "python-on-lenny")
# «.python-base»		(to "python-base")
# «.python-3.9.9»		(to "python-3.9.9")
# «.python-examples»		(to "python-examples")
# «.pyex»			(to "pyex")
# «.pydb»			(to "pydb")
# «.pdb»			(to "pdb")
# «.python-tk»			(to "python-tk")
# «.tk»				(to "tk")
# «.tkinter»			(to "tkinter")
# «.PYTHONSTARTUP»		(to "PYTHONSTARTUP")
# «.open»			(to "open")
# «.exec»			(to "exec")
# «.read»			(to "read")
# «.execfile»			(to "execfile")
# «.str.split»			(to "str.split")
# «.os.path.split»		(to "os.path.split")
# «.ee-for-python»		(to "ee-for-python")
# «.2to3»			(to "2to3")
# «.str.format»			(to "str.format")
# «.eechannel-python»		(to "eechannel-python")
# «.sigusr1»			(to "sigusr1")
# «.python-docutils»		(to "python-docutils")
# «.rst»			(to "rst")
# «.diveintopython»		(to "diveintopython")
# «.closures»			(to "closures")
# «.python-apt»			(to "python-apt")
# «.python-apt-deb-src»		(to "python-apt-deb-src")
# «.python-opengl»		(to "python-opengl")
# «.pymacs»			(to "pymacs")
# «.python-sphinx»		(to "python-sphinx")
# «.sphinx-build»		(to "sphinx-build")
# «.sphinx-git»			(to "sphinx-git")
# «.pygame»			(to "pygame")
# «.modules»			(to "modules")
# «.module.__file__»		(to "module.__file__")
# «.tostring»			(to "tostring")
# «.MyVector»			(to "MyVector")
# «.scipy»			(to "scipy")
# «.matplotlib»			(to "matplotlib")
# «.matplotlib-examples»	(to "matplotlib-examples")
# «.matplotlib-rougier»		(to "matplotlib-rougier")
# «.numpy»			(to "numpy")
# «.scipy-lectures»		(to "scipy-lectures")
# «.ipython»			(to "ipython")
# «.ameliabot»			(to "ameliabot")
# «.rends-tutorial»		(to "rends-tutorial")
# «.environment»		(to "environment")
# «.scikits»			(to "scikits")
# «.pyobjects»			(to "pyobjects")
# «.emacs-ipython-notebook»	(to "emacs-ipython-notebook")
# «.audio»			(to "audio")
# «.pprint»			(to "pprint")
# «.sympy»			(to "sympy")
# «.spyder»			(to "spyder")
# «.idle»			(to "idle")
# «.felipe-pinheiro»		(to "felipe-pinheiro")
# «.scipy-wav»			(to "scipy-wav")
# «.pip»			(to "pip")
# «.pip3-upgrade»		(to "pip3-upgrade")
# «.pip-as-root»		(to "pip-as-root")
# «.pip-from-git»		(to "pip-from-git")
# «.tox»			(to "tox")
# «.facebook-sdk»		(to "facebook-sdk")
# «.textwrap»			(to "textwrap")
# «.easyhtmlparser»		(to "easyhtmlparser")
# «.oilercode»			(to "oilercode")
# «.faceutils»			(to "faceutils")
# «.faceutils-wrap»		(to "faceutils-wrap")
# «.poetry»			(to "poetry")
# «.pypi»			(to "pypi")
# «.requests»			(to "requests")
# «.virtualenv»			(to "virtualenv")
# «.string.gsub.old»		(to "string.gsub.old")
# «.string.gsub»		(to "string.gsub")
# «.encoding»			(to "encoding")
# «.scope»			(to "scope")
# «.import»			(to "import")
# «.importlib»			(to "importlib")
# «.inspect»			(to "inspect")
# «.re»				(to "re")
# «.re.sub»			(to "re.sub")
# «.u8_to_l1»			(to "u8_to_l1")
# «.dict»			(to "dict")
# «.print»			(to "print")
# «.tuples»			(to "tuples")
# «.tut-tuples»			(to "tut-tuples")
# «.tut-def»			(to "tut-def")
# «.def»			(to "def")
# «.comprehension»		(to "comprehension")
# «.multiline-comments»		(to "multiline-comments")
# «.lambda»			(to "lambda")
# «.after»			(to "after")
# «.graphics.py»		(to "graphics.py")
# «.python-for-cs1»		(to "python-for-cs1")
# «.turtle»			(to "turtle")
# «.help»			(to "help")
# «.books»			(to "books")
# «.popen»			(to "popen")
# «.bytes»			(to "bytes")
# «.split»			(to "split")
# «.vararg-functions»		(to "vararg-functions")
# «.pandas»			(to "pandas")
# «.elpy»			(to "elpy")
# «.naufuto»			(to "naufuto")
# «.hy»				(to "hy")
# «.codespell»			(to "codespell")
# «.pygments»			(to "pygments")
# «.pygments-pip3»		(to "pygments-pip3")
# «.plot3D»			(to "plot3D")
# «.dictionaries»		(to "dictionaries")
# «.fsmunoz-k8s-diagrams»	(to "fsmunoz-k8s-diagrams")
# «.all-the-builtins»		(to "all-the-builtins")
# «.doctest»			(to "doctest")
# «.breakpoint»			(to "breakpoint")
# «.python-repl-in-eshell»	(to "python-repl-in-eshell")
# «.conda»			(to "conda")
# «.pep-503»			(to "pep-503")
# «.pexpect»			(to "pexpect")
# «.xonsh»			(to "xonsh")
# «.iterable»			(to "iterable")
# «.pillow»			(to "pillow")
# «.midi-synth»			(to "midi-synth")
# «.pip3-repl»			(to "pip3-repl")
# «.venv-2024may13»		(to "venv-2024may13")
# «.python-lsp-server»		(to "python-lsp-server")
# «.shiv»			(to "shiv")
# «.buscador-de-meteoritos»	(to "buscador-de-meteoritos")
# «.timestr»			(to "timestr")
# «.emacs_291_as_ide»		(to "emacs_291_as_ide")
# «.habamax»			(to "habamax")
# «.skybert»			(to "skybert")
# «.pyxel»			(to "pyxel")

# (defun u () (interactive) (find-escript-upload-links "python" "u8_to_l1"))
# (to "u8_to_l1")



# (find-zsh "installeddebs | sort | grep python")
# (find-zsh "installeddebs | sort | grep python | awk -F _ '{print $1}'")

ipython3
ipython
libpython-stdlib
libpython2.7-minimal
libpython2.7-stdlib
libpython2.7
libpython3-stdlib
libpython3.5-minimal
libpython3.5-stdlib
libpython3.5
python-central
python-doc
python-matplotlib-data
python-matplotlib-doc
python-matplotlib
python-minimal

python-sympy-doc
python-sympy
python-tk
python2.7-doc
python2.7-minimal
python2.7
python3-apt
python3-debian
python3-doc
python3-examples
python3-matplotlib
python3-minimal
python3-tk
python3.5-doc
python3.5-examples
python3.5-minimal
python3.5
python3
python

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)

apti python-matplotlib python-matplotlib-doc python3-matplotlib
apti python-doc python3-doc
apti python-examples python3-examples
apti python-pip python3-pip
pip  install --upgrade pip
pip3 install --upgrade pip




;; (find-fline "/usr/share/doc/python2.7/html/_sources/")
(code-c-d "python27docsrc" "/usr/share/doc/python2.7/html/_sources/")
;; (find-python27docsrcfile "")





#####
#
# python-bullseye
# 2021aug31
#
#####

# «python-bullseye»  (to ".python-bullseye")
# (find-status   "python3.9-doc")
# (find-vldifile "python3.9-doc.list")
# (find-udfile   "python3.9-doc/")
# (find-status   "python3.9-examples")
# (find-vldifile "python3.9-examples.list")
# (find-udfile   "python3.9-examples/")
# (find-status   "python3-tk")
# (find-vldifile "python3-tk:amd64.list")
# (find-udfile   "python3-tk/")
# file:///usr/share/doc/python3.9/html/index.html
# file:///usr/share/doc/python3.9/html/library/index.html
# file:///usr/share/doc/python3.9/html/library/inspect.html
# file:///usr/share/doc/python3.9/html/tutorial/index.html
# file:///usr/share/doc/python3.9/html/tutorial/modules.html
# file:///usr/share/doc/python3.9/html/tutorial/classes.html

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/pyexamples/
mkdir  /tmp/pyexamples/
cd     /tmp/pyexamples/
cp -Rv /usr/share/doc/python3.9/examples/* /tmp/pyexamples/

# (find-fline "/tmp/pyexamples/")
# (find-fline "/usr/share/doc/python3.9/examples/pynche/")
# (find-sh "apt-file search python | grep tkinter")
# (find-sh "apt-file search python | grep turtle")

cd /usr/share/doc/python3.9/examples/pynche/
./pynche

# (find-fline "/usr/lib/python3.9/turtledemo/")
# (find-fline "/usr/lib/python3.9/turtledemo/fractalcurves.py")
cd /usr/lib/python3.9/turtledemo/
./fractalcurves.py

python3 -m tkinter


# (find-pydoc  "index")
# (find-pydoc  "tutorial/index")
# (find-pydoc  "tutorial/index")
# (find-pydoc  "tutorial/interpreter#interactive-mode")
# (find-pydocr "tutorial/interpreter#interactive-mode")




#####
#
# tutorial/introduction: comments, calculator, numbers
# 2022aug17
#
#####

# «tut-numbers»  (to ".tut-numbers")
# (find-pydoc  "tutorial/introduction")
# (find-pydoc  "tutorial/introduction#an-informal-introduction-to-python")
# (find-pydocr "tutorial/introduction#an-informal-introduction-to-python")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
# this is the first comment
spam = 1  # and this is the second comment
          # ... and now a third!
text = "# This is not a comment because it's inside quotes."

# (find-pydoc  "tutorial/introduction#numbers")
# (find-pydocr "tutorial/introduction#numbers")
# (find-pydocw "tutorial/introduction#numbers")
2 + 2
50 - 5*6
(50 - 5*6) / 4
8 / 5      # division always returns a floating point number
17 / 3     # classic division returns a float
17 // 3    # floor division discards the fractional part
17 % 3     # the % operator returns the remainder of the division
5 * 3 + 2  # result * divisor + remainder
5 ** 2     # 5 squared
2 ** 7     # 2 to the power of 7

width = 20
height = 5 * 9
width * height

n  # try to access an undefined variable
4 * 3.75 - 1
tax = 12.5 / 100
price = 100.50
price * tax
price + _
round(_, 2)



#####
#
# tut-strings
# 2022aug17
#
#####

# «tut-strings»  (to ".tut-strings")
# (find-pydoc  "tutorial/introduction#strings")
# (find-pydocr "tutorial/introduction#strings")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
'spam eggs'  # single quotes
'doesn\'t'   # use \' to escape the single quote...
"doesn't"    # ...or use double quotes instead
'"Yes," they said.'
"\"Yes,\" they said."
'"Isn\'t," they said.'
'"Isn\'t," they said.'
print('"Isn\'t," they said.')
s = 'First line.\nSecond line.'  # \n means newline
s                      # without print(), \n is included in the output
print(s)               # with print(), \n produces a new line
print('C:\some\name')  # here \n means newline!
print(r'C:\some\name') # note the r before the quote

print("""\
Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to
""")

3 * 'un' + 'ium'       # 3 times 'un', followed by 'ium'
'Py' 'thon'
text = ('Put several strings within parentheses '
        'to have them joined together.')
text
prefix = 'Py'
prefix 'thon'  # can't concatenate a variable and a string literal
('un' * 3) 'ium'
prefix + 'thon'

word = 'Python'
word[0]    # character in position 0
word[5]    # character in position 5
word[-1]   # last character
word[-2]   # second-last character
word[-6]
word[0:2]  # characters from position 0 (included) to 2 (excluded)
word[2:5]  # characters from position 2 (included) to 5 (excluded)

word[:2] + word[2:]
word[:4] + word[4:]

word[:2]   # character from the beginning to position 2 (excluded)
word[4:]   # characters from position 4 (included) to the end
word[-2:]  # characters from the second-last (included) to the end

#  +---+---+---+---+---+---+
#  | P | y | t | h | o | n |
#  +---+---+---+---+---+---+
#  0   1   2   3   4   5   6
# -6  -5  -4  -3  -2  -1

word[42]  # the word only has 6 characters

word[4:42]
word[42:]

word[0]  = 'J'    # error: Python strings cannot be changed
word[2:] = 'py'   # same
'J' + word[1:]
word[:2] + 'py'
s = 'supercalifragilisticexpialidocious'
len(s)



#####
#
# tut-lists
# 2022aug17
#
#####

# «tut-lists»  (to ".tut-lists")
# (to "list")
# (find-pydoc  "tutorial/introduction#lists")
# (find-pydocr "tutorial/introduction#lists")
# (find-pydocr "tutorial/introduction#lists" "_tut-lists:")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
squares = [1, 4, 9, 16, 25]
squares
squares[0]    # indexing returns the item
squares[-1]
squares[-3:]  # slicing returns a new list
squares[:]
squares + [36, 49, 64, 81, 100]
cubes = [1, 8, 27, 65, 125]  # something's wrong here
4 ** 3                # the cube of 4 is 64, not 65!
cubes[3] = 64         # replace the wrong value
cubes
cubes.append(216)     # add the cube of 6
cubes.append(7 ** 3)  # and the cube of 7
cubes

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
letters

letters[2:5] = ['C', 'D', 'E']    # replace some values
letters
letters[2:5] = []                 # now remove them
letters
# clear the list by replacing all the elements with an empty list
letters[:] = []
letters
letters = ['a', 'b', 'c', 'd']
len(letters)

a = ['a', 'b', 'c']
n = [1, 2, 3]
x = [a, n]
x
x[0]
x[0][1]




#####
#
# Tutorial: First Steps Towards Programming
# 2022aug17
#
#####

# «tut-firststeps»  (to ".tut-firststeps")
# (find-pydoc  "tutorial/introduction#first-steps-towards-programming")
# (find-pydocr "tutorial/introduction#first-steps-towards-programming")
# (find-pydocr "tutorial/introduction" "_tut-firststeps:")
# (find-pydocr "tutorial/introduction" "_tut-firststeps:" "space is inserted")
# (find-pydocr "tutorial/introduction" "_tut-firststeps:" "keyword argument")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)

# Fibonacci series:
# the sum of two elements defines the next
a, b = 0, 1
while a < 10:
    print(a)
    a, b = b, a+b

i = 256*256
print('The value of i is', i)

a, b = 0, 1
while a < 1000:
    print(a, end=',')
    a, b = b, a+b

# (find-pydoc "library/functions#print")
# (find-pydoc "tutorial/controlflow#defining-functions")
# (find-pydoc "tutorial/controlflow#default-argument-values")
# (find-pydoc "tutorial/controlflow#keyword-arguments")
# (find-pydoc "reference/compound_stmts#function-definitions")
# (find-pydoc "reference/compound_stmts#def")



#####
#
# Tutorial: 4. More Control Flow Tools
# 2022aug17
#
#####

# «tut-controlflow»  (to ".tut-controlflow")
# (find-pydoc  "tutorial/controlflow")
# (find-pydocr "tutorial/controlflow")
# (find-pydocw "tutorial/controlflow")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
x = int(input("Please enter an integer: "))
42
-3
if x < 0:
    x = 0
    print('Negative changed to zero')
elif x == 0:
    print('Zero')
elif x == 1:
    print('Single')
else:
    print('More')

# Measure some strings:
words = ['cat', 'window', 'defenestrate']
for w in words:
    print(w, len(w))

# Create a sample collection
users = {'Hans': 'active', 'Éléonore': 'inactive', 'Other': 'active'}

# Strategy:  Iterate over a copy
for user, status in users.copy().items():
    if status == 'inactive':
        del users[user]

# Strategy:  Create a new collection
active_users = {}
for user, status in users.items():
    if status == 'active':
        active_users[user] = status

for i in range(5):
    print(i)

range(5, 10)
range(0, 10, 3)
range(-10, -100, -30)

a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
    print(i, a[i])

print(range(10))
sum(range(4))    # 0 + 1 + 2 + 3
list(range(4))



#####
#
# Tutorial: 4. More Control Flow Tools - break, etc
# 2022aug17
#
#####

# «tut-break»  (to ".tut-break")
# (find-pydoc  "tutorial/controlflow#break-and-continue-statements-and-else-clauses-on-loops")
# (find-pydocr "tutorial/controlflow" "_tut-break:")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
    else:
        # loop fell through without finding a factor
        print(n, 'is a prime number')

for num in range(2, 10):
    if num % 2 == 0:
        print("Found an even number", num)
        continue
    print("Found an odd number", num)

# while True:
#     pass  # Busy-wait for keyboard interrupt (Ctrl+C)

class MyEmptyClass:
    pass

def initlog(*args):
    pass   # Remember to implement this!

def fib(n):    # write Fibonacci series up to n
    """Print a Fibonacci series up to n."""
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

# Now call the function we just defined:
fib(2000)

fib
f = fib
f(100)

fib(0)
print(fib(0))

def fib2(n):  # return Fibonacci series up to n
    """Return a list containing the Fibonacci series up to n."""
    result = []
    a, b = 0, 1
    while a < n:
        result.append(a)    # see below
        a, b = b, a+b
    return result

f100 = fib2(100)    # call it
f100                # write the result

def ask_ok(prompt, retries=4, reminder='Please try again!'):
    while True:
        ok = input(prompt)
        if ok in ('y', 'ye', 'yes'):
            return True
        if ok in ('n', 'no', 'nop', 'nope'):
            return False
        retries = retries - 1
        if retries < 0:
            raise ValueError('invalid user response')
        print(reminder)

ask_ok('Do you really want to quit?')
y
ask_ok('OK to overwrite the file?', 2)
foo
bar
plic
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
foo
y

i = 5

def f(arg=i):
    print(arg)

i = 6
f()

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))

# If you don't want the default to be shared between subsequent calls...

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
    print("-- This parrot wouldn't", action, end=' ')
    print("if you put", voltage, "volts through it.")
    print("-- Lovely plumage, the", type)
    print("-- It's", state, "!")

parrot(1000)                                          # 1 positional argument
parrot(voltage=1000)                                  # 1 keyword argument
parrot(voltage=1000000, action='VOOOOOM')             # 2 keyword arguments
parrot(action='VOOOOOM', voltage=1000000)             # 2 keyword arguments
parrot('a million', 'bereft of life', 'jump')         # 3 positional arguments
parrot('a thousand', state='pushing up the daisies')  # 1 positional, 1 keyword

parrot()                     # required argument missing
parrot(voltage=5.0, 'dead')  # non-keyword argument after a keyword argument
parrot(110, voltage=220)     # duplicate value for the same argument
parrot(actor='John Cleese')  # unknown keyword argument

def function(a):
    pass

function(0, a=0)         # error: multiple values for keyword argument 'a'

def cheeseshop(kind, *arguments, **keywords):
    print("-- Do you have any", kind, "?")
    print("-- I'm sorry, we're all out of", kind)
    for arg in arguments:
        print(arg)
    print("-" * 40)
    for kw in keywords:
        print(kw, ":", keywords[kw])

cheeseshop("Limburger", "It's very runny, sir.",
           "It's really very, VERY runny, sir.",
           shopkeeper="Michael Palin",
           client="John Cleese",
           sketch="Cheese Shop Sketch")






#####
#
# Tutorial: 5. Data Structures
# 2022aug17
#
#####

# «tut-datastructures»  (to ".tut-datastructures")
# (find-pydoc  "tutorial/datastructures")
# (find-pydocr "tutorial/datastructures")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)

fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
fruits.count('apple')
fruits.count('tangerine')
fruits.index('banana')
fruits.index('banana', 4)  # Find next banana starting a position 4
fruits.reverse()
fruits
fruits.append('grape')
fruits
fruits.sort()
fruits
fruits.pop()

stack = [3, 4, 5]
stack.append(6)
stack.append(7)
stack
stack.pop()
stack
stack.pop()
stack.pop()
stack

from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.append("Terry")           # Terry arrives
queue.append("Graham")          # Graham arrives
queue.popleft()                 # The first to arrive now leaves
queue.popleft()                 # The second to arrive now leaves
queue                           # Remaining queue in order of arrival

squares = []
for x in range(10):
    squares.append(x**2)

squares

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

combs = []
for x in [1,2,3]:
    for y in [3,1,4]:
        if x != y:
            combs.append((x, y))

combs

vec = [-4, -2, 0, 2, 4]
# create a new list with the values doubled
[x*2 for x in vec]
# filter the list to exclude negative numbers
[x for x in vec if x >= 0]
# apply a function to all the elements
[abs(x) for x in vec]
# call a method on each element
freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
[weapon.strip() for weapon in freshfruit]
# create a list of 2-tuples like (number, square)
[(x, x**2) for x in range(6)]
[ x, x**2  for x in range(6)]    # error: the tuple must be parenthesized
# flatten a list using a listcomp with two 'for'
vec = [[1,2,3], [4,5,6], [7,8,9]]
[num for elem in vec for num in elem]

from math import pi
[str(round(pi, i)) for i in range(1, 6)]

matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
]

[[row[i] for row in matrix] for i in range(4)]

transposed = []
for i in range(4):
    transposed.append([row[i] for row in matrix])

transposed

transposed = []
for i in range(4):
    # the following 3 lines implement the nested listcomp
    transposed_row = []
    for row in matrix:
        transposed_row.append(row[i])
    transposed.append(transposed_row)

transposed

list(zip(*matrix))

a = [-1, 1, 66.25, 333, 333, 1234.5]
del a[0]
a
del a[2:4]
a
del a[:]
a

del a
a

t = 12345, 54321, 'hello!'
t[0]
t
# Tuples may be nested:
u = t, (1, 2, 3, 4, 5)
u
# Tuples are immutable:
t[0] = 88888
# but they can contain mutable objects:
v = ([1, 2, 3], [3, 2, 1])
v

empty = ()
singleton = 'hello',    # <-- note trailing comma
len(empty)
len(singleton)
singleton

x, y, z = t




#####
#
# Tutorial: 6. Modules
# 2022aug17
#
#####

# «tut-modules»  (to ".tut-modules")
# (find-pydoc  "tutorial/modules")
# (find-pydocr "tutorial/modules")
# (find-pydoc  "tutorial/modules#the-module-search-path")
# (find-downeytppage (+ 22 32) "import statement:")
# (find-downeytptext (+ 22 32) "import statement:")
# (find-downeytppage (+ 22 32) "module object:")
# (find-downeytptext (+ 22 32) "module object:")
# (find-pydoc "library/sys#sys.path")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import sys
sys.path
type(sys.path)

# Untested.

def fib(n):    # write Fibonacci series up to n
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()

def fib2(n):   # return Fibonacci series up to n
    result = []
    a, b = 0, 1
    while a < n:
        result.append(a)
        a, b = b, a+b
    return result

import fibo

fibo.fib(1000)
fibo.fib2(100)
fibo.__name__

fib = fibo.fib
fib(500)

from fibo import fib, fib2
fib(500)

from fibo import *
fib(500)

import fibo as fib
fib.fib(500)

from fibo import fib as fibonacci
fibonacci(500)

if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

import sys
sys.ps1
sys.ps2
sys.ps1 = 'C> '

import sys
sys.path.append('/ufs/guido/lib/python')

import fibo, sys
dir(fibo)
dir(sys)  # doctest: +NORMALIZE_WHITESPACE

a = [1, 2, 3, 4, 5]
import fibo
fib = fibo.fib
dir()

import builtins
dir(builtins)  # doctest: +NORMALIZE_WHITESPACE

__all__ = ["echo", "surround", "reverse"]

import sound.effects.echo
import sound.effects.surround
from sound.effects import *

from . import echo
from .. import formats
from ..filters import equalizer




#####
#
# Tutorial: 7. Input and Output
# 2022aug17
#
#####

# «tut-inputoutput»  (to ".tut-inputoutput")
# (find-pydoc  "tutorial/inputoutput")
# (find-pydocr "tutorial/inputoutput")





#####
#
# Tutorial: 8. Errors and Exceptions
# 2022aug17
#
#####

# «tut-errors»  (to ".tut-errors")
# (find-pydoc  "tutorial/errors")
# (find-pydocr "tutorial/errors")




#####
#
# Tutorial: 9. Classes
# 2022aug17
#
#####

# «tut-classes»  (to ".tut-classes")
# (to "MyVector")
# (find-pydoc  "tutorial/classes")
# (find-pydocr "tutorial/classes")
# (find-pydoc "reference/simple_stmts#global")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
def scope_test():
    def do_local():
        spam = "local spam"
    def do_nonlocal():
        nonlocal spam
        spam = "nonlocal spam"
    def do_global():
        global spam
        spam = "global spam"
    spam = "test spam"
    do_local()
    print("After local assignment:", spam)
    do_nonlocal()
    print("After nonlocal assignment:", spam)
    do_global()
    print("After global assignment:", spam)

scope_test()
print("In global scope:", spam)

class MyClass:
    """A simple example class"""
    i = 12345
    def f(self):
        return 'hello world'

x = MyClass()

def __init__(self):
    self.data = []

x = MyClass()

class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart

x = Complex(3.0, -4.5)
x.r, x.i

x.counter = 1
while x.counter < 10:
    x.counter = x.counter * 2

print(x.counter)
del x.counter

class Dog:
    kind = 'canine'         # class variable shared by all instances
    def __init__(self, name):
        self.name = name    # instance variable unique to each instance

d = Dog('Fido')
e = Dog('Buddy')
d.kind                  # shared by all dogs
e.kind                  # shared by all dogs
d.name                  # unique to d
e.name                  # unique to e

class Dog:
    tricks = []             # mistaken use of a class variable
    def __init__(self, name):
        self.name = name
    def add_trick(self, trick):
        self.tricks.append(trick)

d = Dog('Fido')
e = Dog('Buddy')
d.add_trick('roll over')
e.add_trick('play dead')
d.tricks                # unexpectedly shared by all dogs

class Dog:
    def __init__(self, name):
        self.name = name
        self.tricks = []    # creates a new empty list for each dog
    def add_trick(self, trick):
        self.tricks.append(trick)

d = Dog('Fido')
e = Dog('Buddy')
d.add_trick('roll over')
e.add_trick('play dead')
d.tricks
e.tricks

class Warehouse:
    purpose = 'storage'
    region = 'west'

w1 = Warehouse()
print(w1.purpose, w1.region)
w2 = Warehouse()
w2.region = 'east'
print(w2.purpose, w2.region)

# Function defined outside the class
def f1(self, x, y):
    return min(x, x+y)

class C:
    f = f1
    def g(self):
        return 'hello world'
    h = g

class Bag:
    def __init__(self):
        self.data = []
    def add(self, x):
        self.data.append(x)
    def addtwice(self, x):
        self.add(x)
        self.add(x)

class Mapping:
    def __init__(self, iterable):
        self.items_list = []
        self.__update(iterable)
    def update(self, iterable):
        for item in iterable:
            self.items_list.append(item)
    __update = update   # private copy of original update() method

class MappingSubclass(Mapping):
    def update(self, keys, values):
        # provides new signature for update()
        # but does not break __init__()
        for item in zip(keys, values):
            self.items_list.append(item)

class Employee:
    pass

john = Employee()  # Create an empty employee record

# Fill the fields of the record
john.name = 'John Doe'
john.dept = 'computer lab'
john.salary = 1000

for element in [1, 2, 3]:
    print(element)

for element in (1, 2, 3):
    print(element)

for key in {'one':1, 'two':2}:
    print(key)

for char in "123":
    print(char)

for line in open("myfile.txt"):
    print(line, end='')

s = 'abc'
it = iter(s)
it
next(it)
next(it)
next(it)
next(it)

class Reverse:
    """Iterator for looping over a sequence backwards."""
    def __init__(self, data):
        self.data = data
        self.index = len(data)
    def __iter__(self):
        return self
    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]

rev = Reverse('spam')
iter(rev)
for char in rev:
    print(char)

def reverse(data):
    for index in range(len(data)-1, -1, -1):
        yield data[index]

for char in reverse('golf'):
    print(char)

sum(i*i for i in range(10))                 # sum of squares
xvec = [10, 20, 30]
yvec = [7, 5, 3]
sum(x*y for x,y in zip(xvec, yvec))         # dot product
unique_words = set(word for line in page  for word in line.split())
valedictorian = max((student.gpa, student.name) for student in graduates)
data = 'golf'
list(data[i] for i in range(len(data)-1, -1, -1))



#####
#
# type
# 2022aug22
#
#####

# «type»  (to ".type")
# (find-es "sympy" "func-and-args")
# (find-pydoc "library/types")
# (find-pydocr "library/types")
# (find-pydoc "library/functions#type")
# (find-pydoc "library/functions#isinstance")
# (find-pydoc "library/stdtypes#bltin-type-objects")
# (find-pydoc "reference/datamodel#types")
# (find-pydocrgrep "grep --color=auto -nRH --null -e __name__ *")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
55
type(55)
type(type(55))
print(55, type(55), type(type(55)))
type(55).__name__
isinstance(55, int)
isinstance("55", int)
isinstance("55", str)
type("55")



#####
#
# luatree
# 2022aug22
#
#####

# «luatree»  (to ".luatree")
# (find-anggfile "luatree/luatree.py")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import sys
sys.path[1:1] = ["/home/edrx/luatree"]
from luatree import *

s = '{[0]="[", {[0]="/", "x", "y"}, "33"}'
s
print(luatree_lua(s))


s = '{[0]="[", {[0]="/", "x", "y"}, "33"}'
s
print(luatree_lua(s))
print(luatree_dir)


sys.path




#####
#
# list
# 2022aug22
#
#####

# «list»  (to ".list")
# (to "tut-lists")
# (find-pydoc "tutorial/introduction#lists")
# (find-pydoc "library/stdtypes#list")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import sys
sys.path
type(sys.path)
luatree_dir = "~/luatree"
luatree_dir = "/home/edrx/luatree"
sys.path[1:1] = [luatree_dir]
sys.path
import luatree
luatree



#####
#
# tuple
# 2022aug23
#
#####

# «tuple»  (to ".tuple")
# (find-pydoc "library/stdtypes#tuple")





#####
#
# python on wheezy
# 2014sep08
#
#####

# «python-wheezy» (to ".python-wheezy")
# (find-zsh "availabledebs | sort | grep python")
# (find-zsh "availabledebs | sort | grep python | egrep 'dev|doc'")
# (find-zsh "installeddebs | sort | grep python")

# (find-status   "python-dev")
# (find-vldifile "python-dev.list")
# (find-udfile   "python-dev/")
# (find-status   "python-doc")
# (find-vldifile "python-doc.list")
# (find-udfile   "python-doc/")
# (find-status   "python-examples")
# (find-vldifile "python-examples.list")
# (find-udfile   "python-examples/")
# (find-status   "python2.7-dev")
# (find-vldifile "python2.7-dev.list")
# (find-udfile   "python2.7-dev/")
# (find-status   "python2.7-doc")
# (find-vldifile "python2.7-doc.list")
# (find-vldifile "python2.7-doc.list" "/usr/share/info/")
# (find-udfile   "python2.7-doc/")
# file:///usr/share/doc/python2.7/html/c-api/tuple.html
# file:///usr/share/doc/python2.7/html/library/
# file:///usr/share/doc/python2.7/html/library/stdtypes.html#bltin-file-objects
# file:///usr/share/doc/python2.7/html/library/functions.html#open

# «python3-wheezy» (to ".python3-wheezy")
# (find-status   "python3")
# (find-vldifile "python3.list")
# (find-udfile   "python3/")
# (find-status   "python3.5")
# (find-vldifile "python3.5.list")
# (find-udfile   "python3.5/")
# (find-status   "python3.7-doc")
# (find-vldifile "python3.7-doc.list")
# (find-udfile   "python3.7-doc/")
# (find-status   "python3.7-examples")
# (find-vldifile "python3.7-examples.list")
# (find-udfile   "python3.7-examples/")
# file:///usr/share/doc/python3.5/html/index.html

# (find-status   "python3-examples")
# (find-vldifile "python3-examples.list")
# (find-udfile   "python3-examples/")
# (find-status   "python3.5-examples")
# (find-vldifile "python3.5-examples.list")
# (find-udfile   "python3.5-examples/")





#####
#
# python on squeeze
# 2012mar30
#
#####

# «python-on-squeeze»  (to ".python-on-squeeze")
# (find-zsh "availabledebs | sort | grep python")
# (find-zsh "availabledebs | sort | grep python | egrep 'dev|doc'")
# (find-zsh "dmissing python | grep -e .info")






#####
#
# python on lenny
# 2010mar09
#
#####

# «python-on-lenny»  (to ".python-on-lenny")
# (find-angg ".emacs" "python")
# (find-zsh "availabledebs | sort | grep python")
# (find-zsh "availabledebs | sort | grep python | egrep 'dev|doc'")
# (find-zsh "dmissing python | grep -e .info")

apti python python-doc python-examples python-mode python-dev
apti python python-doc python-examples             python-dev
apti python2.5-doc

# (find-status   "python-dev")
# (find-vldifile "python-dev.list")
# (find-udfile   "python-dev/")
# (find-status   "python-doc")
# (find-vldifile "python-doc.list")
# (find-udfile   "python-doc/")
# (find-status   "python-examples")
# (find-vldifile "python-examples.list")
# (find-udfile   "python-examples/")
# (find-status   "python2.6-dev")
# (find-vldifile "python2.6-dev.list")
# (find-udfile   "python2.6-dev/")
# (find-status   "python2.6-doc")
# (find-vldifile "python2.6-doc.list")
# (find-vldifile "python2.6-doc.list" "/usr/share/info/")
# (find-udfile   "python2.6-doc/")
# (find-vldifile "python2.5-doc.list")
# (find-vldifile "python2.5-doc.list" "/usr/share/info/")
# (find-udfile   "python2.5-doc/")
# (find-udfile   "python2.6/html/_sources/faq/")
# (find-udfile   "python2.6/html/_sources/faq/design.txt")
# (find-udfile   "python2.6/html/_sources/tutorial/")
# (find-status   "python2.6-examples")
# (find-vldifile "python2.6-examples.list")
# (find-udfile   "python2.6-examples/")




#####
#
# Installing and finding the basic docs
# 2000may09
#
#####

Pgrepp m/python/i |& tee ~/o
# (find-fline "~/o")

apti python-base python-doc python-examples python-elisp python-dev \
  pydb python-pygresql

# (find-vldifile "python-base.list")
# (find-vldifile "python-dev.list")
# (find-vldifile "python-doc.list")
# (find-vldifile "python-elisp.list")
# (find-vldifile "python-examples.list")
# (find-fline "/usr/doc/python-base/")
# (find-fline "/usr/doc/python-dev/")
# (find-fline "/usr/doc/python-doc/")
# (find-fline "/usr/doc/python-elisp/")
# (find-fline "/usr/doc/python-examples/")

# (find-node "(python-tut)Top")
# (find-node "(python-tut)Numbers")
# (find-node "(python-lib)Top")
# (find-node "(python-ref)Top")


# (find-pytutnode "Top")

# (find-pytutnode "Defining Clean-up Actions")
# (find-pytutnode "A Word About Terminology" "if a function modifies")
# (find-pytutnode "Python Scopes and Name Spaces" "three nested")

# (find-pytutnode "Method Objects")
# (find-pytutnode "Defining Functions")

# (find-angg "EXPECT/eeg")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
class foo:
  x = 2
  def f(_, x):
    return x*20

foo
a = foo()
a
a.x
a.f
a.f(a.x)








#####
#
# python-base
# 2000may25
#
#####

# «python-base»  (to ".python-base")
# (find-status "python-base")
# (find-vldifile "python-base.list")

# (find-eeman "1 python")
# (find-fline "/usr/doc/python-base/")
# (find-fline "/usr/doc/python/")
# (find-fline "/usr/doc/python/NEWS.gz")
# (find-fline "/usr/doc/python/HISTORY.gz")
# (find-fline "/usr/doc/python/BLURB")
# (find-fline "/usr/doc/python/sample.postinst")
# (find-fline "/usr/doc/python/sample.prerm")
# (find-fline "/usr/doc/python/README.maintainers")
# (find-fline "/usr/doc/python/README.dbm")
# (find-fline "/usr/doc/python/TODO.Debian.gz")
# (find-fline "/usr/doc/python/copyright")
# (find-fline "/usr/doc/python/README.gz")
# (find-fline "/usr/doc/python/ACKS.gz")
# (find-fline "/usr/doc/python/README.Debian.gz")
laf /usr/bin/python
laf /usr/bin/python1.5

# (find-pylibfile "lib-dynload/")
laf /usr/lib/libpython1.5.so.0.0
# (find-fline "/usr/lib/menu/python-base")
# (find-fline "/usr/lib/python1.4/")




#####
#
# python and postgresql
# 2000may12
#
#####

# (find-status "python-pygresql")
# (find-vldifile "python-pygresql.list")

# (find-fline "/usr/doc/python-pygresql/")
# (find-fline "/usr/doc/python-pygresql/README.gz" "connect -")
# (find-fline "/usr/doc/python-pygresql/tutorial/")
# (find-pylibfile "site-packages/pg.py")
# (find-pylibfile "site-packages/pgsqldb.py")






# (find-vldifile "postgresql.list")
# (find-fline "/usr/doc/postgresql/")
# (find-vldifile "postgresql-client.list")
# (find-fline "/usr/doc/postgresql-client/")

# (find-fline "/var/lib/postgres/")




(w3-open-local "/snarf/http/www.idi.ntnu.no/~mlh/python/instant.html")
(find-fline "$S/http/www.python.org/doc/essays/metaclasses/meta-vladimir.txt")
(find-file "/snarf/http/www.idi.ntnu.no/~mlh/python/quicksort.py")
(find-fline "$S/http/www.strout.net/python/pattern.py")
(find-fline "$S/http/www.strout.net/python/tabfix.py")

# (find-w3 "/usr/doc/python/examples/Demo/metaclasses/index.html")

# (find-fline "/usr/lib/python1.5/cgi.py")

# (find-node "(python-ref)import statement")
# (find-pyrefnode "import statement")
# (find-pyrefnode "Module Index")
# (find-pyrefnode "standard type hierarchy")
# (find-pyrefnode "Objects")
# (find-pytutnode "A First Look at Classes")
# (find-pytutnode "Python Scopes and Name Spaces")
# (find-pyrefnode "Keywords")
# (find-pyrefnode "standard type hierarchy" "`Classes'")

#*
cat > $EEG <<'---'

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
class A:
    attr1 = "Hello"                  # an attribute of A
    def method1(self, *args): pass   # method1 of A
    def method2(self, *args): pass   # method2 of A

A                                # What is A?
a = A()                          # 'a' is the 1st instance of A 
a                                # What is 'a'? 
b = A()                          # 'b' is another instance of A
b                                # What is 'b'?
a == b                           # Is 'a' the same object as 'b'?
a.__class__                      # What is the class of 'a'?
b.__class__                      # What is the class of 'b'?
a.__class__ == b.__class__       # Is it really the same class A?
class B(A):                          # B inherits A's properties
    attr2 = "World"                  # additional attr2
    def method2(self, arg1): pass    # method2 is redefined
    def method3(self, *args): pass   # additional method3

B                                 # What is B?
B == A                            # Is B the same class as A?
A.__bases__                       # Does A have any superclasses?
B.__bases__                       # Does B have any superclasses?
B.__bases__[0] == A               # Is it really the class A?


* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import sys
sys.__dict__
type(sys.__dict__)
type(sys)
type(type)
`sys.__dict__`
type(`sys.__dict__`)
s = lambda n: n + 1
s(2)
s
type(s)
`s`



# (find-pyrefnode "Basic customization")
# (find-pyrefnode "Code blocks")
# (find-pyrefnode "Dictionary displays")
# (find-pyrefnode "String conversions")
# (find-pyrefnode "Boolean operations" "lambda x")
# (find-pyrefnode "Summary")
# (find-pyrefnode "Assignment statements" "target list")
# (find-pyrefnode "exec statement")
# (find-pyrefnode "Function definitions")
# (find-pyrefnode "Class definitions")

# (find-pylibnode "More String Operations")



#*
cat > $EEG <<'---'
vars()
import sys
vars()
"foo %d %d" % (2, 3)
"foo %s %d" % (2, 3)
"foo %s %d" % ("2", "3")
"foo %(a)d %(b)d" % {"b":2, "a":3}
---
eeg python
#*




#####
#
# python-3.9.9
# 2022mar22
#
#####

# «python-3.9.9»  (to ".python-3.9.9")
# https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "~/bigsrc/Python-3.9.9/")
rm -Rv ~/bigsrc/Python-3.9.9/
mkdir  ~/bigsrc/Python-3.9.9/
tar -C ~/bigsrc/ -xvzf $S/https/www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz
cd     ~/bigsrc/Python-3.9.9/

# (code-c-d "python399" "~/bigsrc/Python-3.9.9/")
# (find-python399file "")
# (find-python399sh "find * | sort")
# (find-python399file "Doc/library/inspect.rst")
# (find-python399file "Doc/library/inspect.rst" "function:: isawaitable")
# (find-python399file "Doc/library/inspect.rst" "def gen():")
# file:///usr/share/doc/python3.9/html/library/inspect.html
# file:///usr/share/doc/python3.9/html/library/inspect.html#inspect.isawaitable




#####
#
# python-examples
# 2000may25
#
#####

# «python-examples»  (to ".python-examples")
# «pyex»  (to ".pyex")
# (find-status "python-examples")
# (find-vldifile "python-examples.list")

# (find-pylibnode "regex")
# (find-pylibnode "re")
# (find-pylibnode "Matching vs. Searching")

# (find-pyrefnode "Miscellaneous Index")

#*
cat > $EEG <<'---'
import re
d = re.__dict__
d.keys
d.keys()
d.__methods__
re.__name__
re.__file__
re.__builtins__.keys()
[].__methods__
---
eeg python

#*
cat > $EEG <<'---'
[].__methods__
import re,string
string.join(["a", "b"])
string.join(["a", "b", "c"], "--")
---
eeg python

#*
cat > $EEG <<'---'
[].__methods__
import re, string
string.join(["a", "b"])
string.join(["a", "b", "c"], "--")
string.__dict__.keys()
dir(string)
join
string.__dict__.keys().sort.__doc__
---
eeg python

#*


#*
cat > $EEG <<'---'
a = [2, 4, 1, 3]
a.sort()
a
d = {1:2, 5:6, 3:4}
d
---
eeg python
#*

a.join



# (find-pytutnode "for Statements")
# (find-pytutnode "dir Function")
# (find-pylibnode "Mutable Sequence Types")



cd /usr/share/info/
zcat python-ref.info{,-?}.gz	 > /tmp/python-ref
zcat python-lib.info{,-?,-??}.gz > /tmp/python-lib
zcat python-tut.info{,-?}.gz	 > /tmp/python-tut


# (find-status "htmlgen")
# (find-vldifile "htmlgen.list")
# (find-fline "/usr/doc/htmlgen/")

# (find-status "idle")
# (find-vldifile "idle.list")
# (find-fline "/usr/doc/idle/")



# (find-status "python-bobo")
# (find-vldifile "python-bobo.list")
# (find-fline "/usr/doc/python-bobo/")

# (find-status "python-bobodtml")
# (find-vldifile "python-bobodtml.list")
# (find-fline "/usr/doc/python-bobodtml/")

python-bobo
apti python-bobodtml





#####
#
# dpkg-python
# 2000aug02
#
#####

pdsc $SDEBIAN/dists/woody/main/source/devel/dpkg-scriptlib_0.1-3.1.dsc
cd /usr/src/dpkg-scriptlib-0.1/

# (find-status "dpkg-python")
# (find-vldifile "dpkg-python.list")
# (find-fline "/usr/doc/dpkg-python/")

# (code-c-d "dsl" "/usr/src/dpkg-scriptlib-0.1/")
# (find-dslfile "")
# (find-dslfile "perl5/Dpkg/Archive/")
# (find-dslfile "perl5/Dpkg/Package/")
# (find-dslfile "python/dpkg/")

# (find-fline "/usr/lib/site-python/dpkg/")

#*
cat > $EEG <<'---'
import sys; sys.path.append("/usr/lib/site-python/dpkg")
from dpkg_packages import *
parse_package_name("kernel-image-2.2.15_angg.00jun13.deb")
---
eeg python
#*

echo 'import foo' \
  | strace-to ~/s python

# (find-pytutnode "Invoking the Interpreter")

python -c '
import sys; sys.path.append("/usr/lib/site-python/dpkg")
from dpkg_packages import *
print parse_package_name("kernel-image-2.2.15_angg.00jun13.deb")
'




#####
#
# classes
# 2000aug02
#
#####

# (find-pytutnode "Class Definition Syntax")
# (find-pytutnode "Class Objects")
# (find-pytutnode "Instance Objects")
# (find-pyrefnode "del statement")
# (find-pytutnode "Method Objects")
# (find-pytutnode "Random Remarks")
# (find-pytutnode "Inheritance")
# (find-pytutnode "Multiple Inheritance")

# (find-pytutnode "Dictionaries")
# (find-pyrefnode "Special method names")
# (find-pyrefnode "Emulating sequence and mapping types")
# (find-pyrefnode "Code blocks" "\"namespace\"")

# (find-shttpw3 "www.idi.ntnu.no/~mlh/python/instant.html" "__init__")

#*
cat > $EEG <<'---'
import sys
class DictFirst:
  # dict = {}		# Wrong: makes every instance share the same dict!
  def __init__(self):	# This is the corrected version.
    self.dict = {}
  def feed(self, k, v):
    # print self; print self.dict; print k; print v
    if self.dict.has_key(k):
      print "Repeated key %s, old val %s" % (k, self.dict[k])
    else:
      self.dict[k] = v

d = DictFirst()
d.feed(2,3)
d.dict
d.feed(4,5)
d.dict
d.feed(2,10)
d.dict

d2 = DictFirst()
d2.feed("a", "b")
d2.dict
d.dict		# d and d2 are sharing the same dict!

d.a = 20	# However new "fields" like a here are not shared:
d.a		# this is ok
d2.a		# but this gives an error.
d
d2
d.__dict__
d2.__dict__
d.__class__
d2.__class__

pr1 = lambda x: print "pr1 %s" % x	# error: print is a statement (?)
d.f = pr1
d.pr1(12)
d2.pr1(12)
---
eeg python

#*





#####
#
# regexps in Python (module re)
# 2000aug06
#
#####

# (find-pylibnode "re")
# (find-pylibnode "Contents of Module re")
# (find-pylibnode "Regular Expression Objects")
# (find-pylibnode "Match Objects")
# (find-pylibnode "Regular Expression Syntax" "?P<id>")
# (find-pyrefnode "String literals")

# (find-angg ".zshrc" "debbasename")

# (find-pyrefnode "Exceptions")
# (find-pyrefnode "try statement")

# (find-fline "~/PYTHON/debs.py")

#*

lynx http://www.python.org/doc/howto/

#*
cd ~/PYTHON/
echo 'from debs import *' > $EEG
eeg python
#*





#####
#
# python source
# 2000aug08
#
#####

pdsc $SDEBIAN/dists/potato/main/source/interpreters/python_1.5.2-10.dsc
cd /usr/src/python-1.5.2/

# find * | grep '\.[ch]$'
find Include Modules Objects Parser Python | grep '\.[ch]$' > .files.ch
etags $(<.files.ch)
glimpseindex -H . -y $(<.files.ch)

# (code-c-d "pysrc" "/usr/src/python-1.5.2/")
# (find-pysrcfile "")
# (find-pysrcfile "Python/")
# (find-pysrcfile "Python/bltinmodule.c")

# (find-pysrctag "execfile_doc")
# (find-pysrctag "eval_doc")
# (find-pysrctag "intern_doc")




#####
#
# compiling
# 2000aug21
#
#####

# «compiling»
# (find-pylibfile "compileall.py")
# (find-pylibfile "py_compile.py")
# (find-vldifile "" " python")




#####
#
# running interactively
# 2004aug07
#
#####

#*
# (find-pytutnode "Interactive Startup File")
# (find-pyrefnode "global statement" "execfile()")
# (find-man "1 python")
# (find-man "1 python" " PYTHONSTARTUP")

cd /usr/share/doc/python/examples/Demo/tkinter/guido/
cat > $EEG <<'---'
import os
execfile("hanoi.py")
---
eeg python

#*
cat > /tmp/test.py <<'---'
print "Hello from tmp!\n"
---
python /tmp/test.py

cd /tmp
cat > $EEG <<'---'
import test
import test
---
eeg python

#*





#####
#
# pdb
# 2004aug06
#
#####

# «pdb»  (to ".pdb")
# http://page.sourceforge.net/tricks.html
# (find-efile "progmodes/python.el" "M-x pdb")

#*
# (eev-bounded)
# This block works - both "python /tmp/fib.py" and ".../pdb.py /tmp/fib.py".

cat > /tmp/fib.py <<'%%%'
def fib(n):    # write Fibonacci series up to n
    "Print a Fibonacci series up to n"
    a, b = 0, 1
    while b < n:
        print b,
        a, b = b, a+b

# Now call the function we just defined:
fib(2000)
%%%

python /tmp/fib.py
/usr/lib/python2.1/pdb.py /tmp/fib.py

#*
# But the pdb invocation does NOT work:
# (require 'gud)
# (setq gud-pdb-command-name "/usr/lib/python2.1/pdb.py")
# (pdb "/usr/lib/python2.1/pdb.py /tmp/fib.py")

#*
# «pydb»  (to ".pydb")
#
# (find-status "pydb")
# (find-vldifile "pydb.list")
# (find-fline "/usr/doc/pydb/")

/usr/bin/pydb /tmp/fib.py

#*
# Running pdb with pydb still doesn't show the source lines, but at
# least it shows the prompt and accepts the "h" command".

# (require 'gud)
# (setq gud-pdb-command-name "/usr/bin/pydb")
# (pdb "/usr/bin/pydb /tmp/fib.py")






#####
#
# python-tk
# 2004aug07
#
#####

# «python-tk»  (to ".python-tk")
# (find-es "tcl" "blt")
# (find-status   "python-tk")
# (find-status   "python-tk" "Also known as Tkinter")
# (find-vldifile "python-tk.list")
# (find-udfile   "python-tk/")

# The following additional packages will be installed:
#   blt tk8.6-blt2.5
# Suggested packages:
#   blt-demo tix python-tk-dbg

#*
# (find-pyexdfile "tkinter/guido/hanoi.py")
cd /usr/share/doc/python2.1/examples/Demo/tkinter/guido/
python hanoi.py

#*



#####
#
# tk
# 2019jul17
#
#####

# «tk» (to ".tk")
# file:///usr/share/doc/python2.7/html/library/tk.html
# file:///usr/share/doc/python3.5/html/library/tk.html
# file:///usr/share/doc/python2.7/html/library/index.html
# file:///usr/share/doc/python3.5/html/library/index.html





#####
#
# TkInter
# 2013jan10
#
#####

# «tkinter» (to ".tkinter")
# file:///usr/share/doc/python2.7/html/library/tkinter.html
# file:///usr/share/doc/python3.5/html/library/tkinter.html
# https://www.manning.com/books/python-and-tkinter-programming
# (find-zsh "apt-file search tkinter")
# (find-fline "/usr/share/doc/python2.7/examples/Demo/tkinter/guido/")

# (find-zsh "dmissing -i tkinter")
# (find-fline "/usr/share/doc/python2.6/examples/Demo/tkinter/")
# (code-c-d "tkinterex"  "/usr/share/doc/python2.6/examples/Demo/tkinter/")
# (code-c-d "tkinterexg" "/usr/share/doc/python2.6/examples/Demo/tkinter/guido/")
# (find-tkinterexfile "")
# (find-tkinterexgfile "")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /usr/share/doc/python2.6/examples/Demo/tkinter/guido/

python hanoi.py
python ShellWindow.py
python brownian.py
python brownian2.py
python canvasevents.py
python dialog.py
python electrons.py
python hanoi.py
python hello.py
python imagedraw.py
python imageview.py
python kill.py
python listtree.py
python mbox.py
python newmenubardemo.py
python optionmenu.py
python paint.py
python rmt.py
python solitaire.py
python sortvisu.py
python ss1.py
python svkill.py
python switch.py
python tkman.py
python wish.py



<Tau>  edrx and pack this one with button2.pack(side='left')
<Tau>  edrx then after that
<Tau>  edrx call button1.destroy()
<Tau> then button2.destroy()
<Tau>  edrx and see what happens when you pack button1 with
      side='top'
<Tau> and button2 with side='top' too
<Tau>  edrx tell me when you have done

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import os
os.environ["PAGER"] = "cat"
from Tkinter import *
root = Tk()
button1 = Button(master=root)
button1.pack()
help(button1.pack)



# http://effbot.org/tkinterbook/tkinter-hello-tkinter.htm

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import os
os.environ["PAGER"] = "cat"
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()





# (find-status "python")
# (find-vldifile "python.list")
# (find-fline "/usr/doc/python/")
# (find-status "python2.1")
# (find-vldifile "python2.1.list")
# (find-fline "/usr/doc/python2.1/")

# (find-fline "/usr/lib/python2.1/")
# (find-fline "/usr/lib/python2.1/pdb.py")
# (find-fline "/usr/lib/python2.1/pdb.doc")


apti python2.1-doc
# (find-status "python2.1-doc")
# (find-vldifile "python2.1-doc.list")
# (find-fline "/usr/doc/python2.1-doc/")

# (find-progoutput "dpkg --get-selections")

# (find-status "python2.1")
# (find-vldifile "python2.1.list")
# (find-fline "/usr/doc/python2.1/")

(find-pytutnode "")
(find-pylibnode "")
(find-pyrefnode "")

(find-pyapinode "")
(find-pydistnode "")
(find-pyextnode "")

(find-pytutnode "break and continue Statements")

# (find-status "python2.1-examples")
# (find-vldifile "python2.1-examples.list")
# (find-fline "/usr/doc/python2.1-examples/")
# (find-pyexdfile "")
# (find-pyexdfile "scripts/")

# (find-status "python2.1-elisp")
# (find-vldifile "python2.1-elisp.list")
# (find-fline "/usr/doc/python2.1-elisp/")


#*
python =(<<'%%%'
print 2+3
%%%)

#*




#*
# By kov

function pyrename () { python =(<<'%%%'
import os
l = os.listdir ('.')
for arquivo in l:
   os.rename (arquivo, arquivo.replace (' ', '_'))
%%%) $*
}

rm -Rv /tmp/pyr
mkdir  /tmp/pyr
cd     /tmp/pyr
echo 1 > 'um um um'
echo 2 > 'dois dois dois'
pyrename 'um um um' 'dois dois dois'

#*





#####
#
# PYTHONSTARTUP
# 2013jun26
#
#####

# «PYTHONSTARTUP» (to ".PYTHONSTARTUP")
# (find-angg ".zshrc" "python")
# (find-man "1 python")
# (find-man "1 python3")
# (find-man "1 python3" " PYTHONSTARTUP")
# (find-man "1 python"  "~/.pythonrc.py")
# (find-man "1 python"  " PYTHONSTARTUP")
# (find-man "1 python"  " PYTHONPATH")
# (find-eevrc ".pythonrc.py")
# (find-angg ".pythonrc.py")

# (find-sh "locate python | grep user")
# (find-fline "/usr/lib/python2.7/user.py")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
PYTHONSTARTUP=$HOME/.pythonrc.py
python
# (find-angg ".pythonrc.py")



#####
#
# open
# 2019aug03
#
#####

# «open» (to ".open")
# file:///usr/share/doc/python2.7/html/library/functions.html#open
# file:///usr/share/doc/python3.5/html/library/functions.html#open
# file:///usr/share/doc/python2.7/html/library/os.html#os.write
# file:///usr/share/doc/python3.5/html/library/os.html#os.write
# (find-downeytppage (+ 22 165) "14. Files.")
# (find-downeytptext (+ 22 165)     "Files")
# (find-downeytppage (+ 22 166) "To write a file")
# (find-downeytptext (+ 22 166) "To write a file")
# (find-multiwindow-intro "5. Restarting eepitch targets")
# (find-multiwindow-intro "5. Restarting eepitch targets" "open")


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
date | tee /tmp/o

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)

readfile("/tmp/o")
writefile("/tmp/o", "HELLO\n")
readfile("/tmp/o")



#####
#
# exec
# 2022aug18
#
#####

# «exec»  (to ".exec")
# (find-pydoc "library/functions#exec")
# (find-pydoc "library/functions#open")
# (find-pydoc "library/functions#globals")
# (find-efunction 'ee-insert-test-python-mode)



#####
#
# read
# 2022aug18
#
#####

# «read»  (to ".read")
# (to "tut-inputoutput")
# (find-pydoc  "tutorial/inputoutput#reading-and-writing-files")
# (find-pydocr "tutorial/inputoutput#reading-and-writing-files")
# (find-pydocr "tutorial/inputoutput" "read_data = f.read()")
# (find-pydoc  "library/io#io.BufferedIOBase.read")
# (find-pydoc  "library/io#io.BufferedReader.read")
# (find-pydoc  "library/io#io.RawIOBase.read")
# (find-pydoc  "library/io#io.TextIOBase.read")




#####
#
# execfile and replacements for it (it was removed in Python3)
# 2016jul31
#
#####

# «execfile» (to ".execfile")
# (find-prepared-intro "An `ee' for Python")
# (find-prepared-intro "An `ee' for Python" "def ee():")
# (find-prepared-intro "An `ee' for Python" "def ee():" "execfile")
# (find-angg ".emacs" "pytest")
# (find-angg ".pythonrc.py")
# (find-angg ".pythonrc.py" "ee_dofile")
# https://docs.python.org/2/tutorial/
# https://docs.python.org/2/library/functions.html#execfile
# file:///usr/share/doc/python2.7/html/library/functions.html#execfile
# file:///usr/share/doc/python3.5/html/library/functions.html#execfile
# file:///usr/share/doc/python3.5/html/library/functions.html#exec
# file:///usr/share/doc/python3.7/html/library/functions.html#exec
# file:///usr/share/doc/python2.7/html/howto/doanddont.html#unadorned-exec-execfile-and-friends
# (find-fline "/usr/lib/python3.5/lib2to3/fixes/fix_execfile.py")
# (find-fline "/usr/lib/python2.7/lib2to3/fixes/fix_execfile.py")

# (to "2to3")
# -execfile("bar.py", globals())
# +exec(compile(open("bar.py").read(), "bar.py", 'exec'), globals())

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cat > /tmp/foo.py <<'%%%'
print(2+3)
%%%

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)
c = compile(ee_readfile("/tmp/foo.py"), "foo.py", "exec")
c
exec(c, globals())

ee_dofile("/tmp/foo.py")

https://stackoverflow.com/questions/6357361/alternative-to-execfile-in-python-3
https://stackoverflow.com/questions/436198/what-is-an-alternative-to-execfile-in-python-3



#####
#
# str.split
# 2022aug18
#
#####

# «str.split»  (to ".str.split")
# (find-pydoc "library/stdtypes#str.split")



#####
#
# os.path.split
# 2019aug04
#
#####

# «os.path.split» (to ".os.path.split")
# (find-pydoc "library/os.path#os.path.split")
# (find-anggfile "LUA/lua50init.lua" "fnamenondirectory")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
os.path.split("/tmp/foo.py")
os.path.split("/tmp/foo.py")[1]






#####
#
# an ee() function for python
# 2004nov03
#
#####

# «ee-for-python»  (to ".ee-for-python")
#*
# The wrong way:
# (find-pyrefnode "exec statement")

python <(<<'%%%'
def ee():
  exec "print 999"
  exec "print 777\ndef foo():\n  print 888\nfoo()"
ee()
print "We lost the definition of foo:"
foo()
%%%)

#*
# The right way: execfile("fname", globals())
# (find-pyrefnode "import statement")
# (find-pylibnode "os")
# (find-pylibnode "Process Parameters" "`getenv(varname[, value])'")
# (find-pylibnode "Built-in Functions" "`execfile(filename")
# (find-pyrefnode "exec statement" "`globals()'")

cat > $EEVTMPDIR/ee.py <<'%%%'
print 11
def foo():
  print 22
print 33
%%%

python =(<<'%%%'
import os
def ee():
  execfile(os.getenv("EEVTMPDIR")+"/ee.py", globals())
print 0
ee()
foo()
%%%)

#*




#####
#
# 2to3
# 2019aug03
#
#####

# «2to3» (to ".2to3")
# (find-man "1 2to3")
# (find-man "1 2to3-2.7")
# (find-man "1 2to3-3.5")
# (find-zsh "apt-file search bin/2to3")
# (find-fline "/usr/bin/" "2to3")
# (find-fline "/usr/bin/2to3-2.7")
# (find-fline "/usr/bin/2to3-3.5")

# (find-sh "locate lib2to3")
# (find-fline "/usr/lib/python2.7/lib2to3/")
# (find-fline "/usr/lib/python3.5/lib2to3/")
# (find-fline "/usr/lib/python3.5/lib2to3/fixes/fix_execfile.py")
# (find-fline "/usr/lib/python2.7/lib2to3/fixes/fix_execfile.py")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
cat > foo.py <<'%%%'
execfile("bar.py", globals())
%%%
2to3 -v foo.py
2to3    foo.py
laf
cat foo.py


#####
#
# dumping the arguments
# 2004nov04
#
#####

# (find-pylibnode "File Descriptor Operations")


#*
rm -v /tmp/o

python =(<<'%%%'
import os
def foo(*args):
  fd = open("/tmp/o", "w")
  fd.write(str(args)+"\n")
  fd.close
foo((1, 2), "3")
%%%)

cat /tmp/o

#*



#####
#
# str.format
# 2019aug04
#
#####

# «str.format» (to ".str.format")
# file:///usr/share/doc/python2.7/html/library/stdtypes.html#str.format
# file:///usr/share/doc/python3.5/html/library/stdtypes.html#str.format
# file:///usr/share/doc/python2.7/html/library/stdtypes.html#string-formatting
# file:///usr/share/doc/python3.5/html/library/stdtypes.html#string-formatting (nao)
# file:///usr/share/doc/python2.7/html/library/string.html#formatstrings
# file:///usr/share/doc/python3.5/html/library/string.html#formatstrings
# file:///usr/share/doc/python2.7/html/library/string.html#formatspec
# file:///usr/share/doc/python3.5/html/library/string.html#formatspec
# file:///usr/share/doc/python2.7/html/library/string.html#format-string-syntax
# file:///usr/share/doc/python3.5/html/library/string.html#format-string-syntax
# file:///usr/share/doc/python2.7/html/library/functions.html#str
# file:///usr/share/doc/python3.5/html/library/functions.html#str

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
"{0}\n".format("foo")
"" + 1234
"" + str(1234)
str(1234) + "\n"



#####
#
# talking to python through eechannel
# 2005jan01
#
#####

# «eechannel-python»  (to ".eechannel-python")
# http://people.debian.org/~kov/stuff/edrx.tar.gz
# (find-pylibnode "signal")
# (find-pyrefnode "Comments")
# (find-pyrefnode "String literals")
# (my-modes :scroll-bar    :pager    :erc-track    :fringe    :width80)
# (my-modes :no-scroll-bar :no-pager :no-erc-track :no-fringe :width80)

* (eebg-channel-xterm "pysh")
* (eechannel "pysh")

cd /tmp/
python

import signal, time, os

channel = 'python'
pidfile = os.getenv('EEVTMPDIR') + '/eeg.' + channel + '.pid'
strfile = os.getenv('EEVTMPDIR') + '/eeg.' + channel + '.str'
fhandle = open (pidfile, 'w')
fhandle.write (str(os.getpid()) + '\n')
fhandle.close ()

def signal_handler (num, frame):
  execfile(strfile, globals())

signal.signal (signal.SIGUSR1, signal_handler)

a = 0
while (1):
    print a
    time.sleep (1)
    a = a + 1

* (eechannel "python")
print '(hi)'
print '(hi again)'

* (find-sh0 "~/bin/Xscreenshot")
* ;; http://angg.twu.net/tmp/shot-pychannel0.png


 

# (write-region "print '(oi)'\n" nil "/tmp/coisa.py")
# (find-zsh0 "kill -SIGUSR1 $(cat /tmp/eeg.python.pid)")

(find-pytutnode "")
(find-pylibnode "")
(find-pyrefnode "")

(find-pyapinode  "")
(find-pydistnode "")
(find-pyextnode  "")



    import coisa
    del coisa




#####
#
# Listening to SIGUSR1s
# 2019aug03
#
#####

# «sigusr1» (to ".sigusr1")
# (find-channels-intro "SIGUSR1")
# (find-multiwindow-intro "5. Restarting eepitch targets")
# (find-multiwindow-intro "5. Restarting eepitch targets" "* (find-3EE")
# https://www.programcreek.com/python/example/5524/signal.SIGUSR2
# https://kite.com/python/docs/signal.SIGUSR2
# https://pymotw.com/2/signal/
# https://stackabuse.com/handling-unix-signals-in-python/
# https://docs.python.org/3.7/library/signal.html#module-signal
# file:///usr/share/doc/python2.7/html/library/signal.html
# file:///usr/share/doc/python3.5/html/library/signal.html
# file:///usr/share/doc/python2.7/html/library/signal.html#signal.signal
# file:///usr/share/doc/python3.5/html/library/signal.html#signal.signal
# file:///usr/share/doc/python2.7/html/library/os.html#os.chdir
# file:///usr/share/doc/python3.5/html/library/os.html#os.chdir
# file:///usr/share/doc/python2.7/html/library/os.html#os.getpid
# file:///usr/share/doc/python3.5/html/library/os.html#os.getpid

# Standard syntax:
#   def signal_handler (num, frame):
#     ee_dofile(strfname)
#
#   signal.signal (signal.SIGUSR1, signal_handler)

# (setenv "EEVTMPDIR" (ee-expand "~/.eev"))
# (find-fline "$EEVTMPDIR/")
# (find-angg ".pythonrc.py")

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)
import signal
channel  = "py"
pidfname = os.getenv("EEVTMPDIR") + "/eeg." + channel + ".pid"
strfname = os.getenv("EEVTMPDIR") + "/eeg." + channel + ".str"
ee_writefile(pidfname, str(os.getpid()) + "\n")
signal.signal (signal.SIGUSR1, lambda num,frame: ee_dofile(strfname))

os.getenv("EEVTMPDIR")
pidfname
strfname
os.getpid()


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
* (find-3ee '(eepitch-shell) '(eepitch-python3))
* (eepitch-shell)
cd $EEVTMPDIR
laf
echo 'print(2+3)' > $EEVTMPDIR/eeg.py.str
kill -USR1    $(cat $EEVTMPDIR/eeg.py.pid)
echo 'exit()'     > $EEVTMPDIR/eeg.py.str
kill -USR1    $(cat $EEVTMPDIR/eeg.py.pid)










#####
#
# python-docutils / ReStructuredText
# 2007mar25
#
#####

# «python-docutils»  (to ".python-docutils")
# «rst»  (to ".rst")
# (find-es "rst")
# http://docutils.sourceforge.net/rst.html
# http://docutils.sourceforge.net/docs/user/rst/quickstart.txt
# http://docutils.sourceforge.net/docs/user/emacs.html
# (find-efile "textmodes/rst.el")
# (find-status   "python-docutils")
# (find-vldifile "python-docutils.list")
# (find-udfile   "python-docutils/")

# (code-c-d "pydocudoc" "/usr/share/doc/python-docutils/")
# (find-pydocudocfile "ref/rst/introduction.txt.gz")
# (find-pydocudocfile "user/rst/quickstart.txt.gz")
# (find-pydocudocfile "user/rst/")
# (find-pydocudocfile "")

# (find-fline "/tmp/rst/")
#*
rm -Rv /tmp/rst/
mkdir  /tmp/rst/
cd /usr/share/doc/python-docutils/user/rst/
cp -v * /tmp/rst/
cd /tmp/rst/
gunzip -v *.gz
for i in *.txt; do
  echo $i
  rst2html $i > $(basename $i .txt).html
done   |& tee o

#*

# Source:
# (code-c-d "pydocusp"  "/usr/lib/site-python/docutils/")
# (find-pydocuspfile "")







#####
#
# dive into python
# 2007mar25
#
#####

# «diveintopython»  (to ".diveintopython")
# (find-status   "diveintopython")
# (find-vldifile "diveintopython.list")
# (find-udfile   "diveintopython/")
# (code-c-d "pydip" "/usr/share/doc/diveintopython/")
# (find-pydipfile "")
# (find-pydipw3m "html/toc/index.html")

# Very bad book, incredibly bad examples.
# http://oppugn.us/posts/1272050135.html Criticism of Dive into Python




#####
#
# closures
# 2008jun28
#
#####

# «closures»  (to ".closures")
# (find-pydoc "index")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)

def adder(x):
    def foo(y): 
        return y + x
    return foo

plus2 = adder(2)
plus2(3)

plus3 = adder(3)
plus3(5)




#####
#
# python-apt (from the debian sources)
# 2009jul27
#
#####

# «python-apt-deb-src»  (to ".python-apt-deb-src")
# http://ftp.de.debian.org/debian/pool/main/p/python-apt/
# http://ftp.de.debian.org/debian/pool/main/p/python-apt/python-apt_0.7.7.1+nmu1.dsc
# http://ftp.de.debian.org/debian/pool/main/p/python-apt/python-apt_0.7.7.1+nmu1.tar.gz
#*
rm -Rv ~/usrc/python-apt/
mkdir  ~/usrc/python-apt/
cd $S/http/ftp.de.debian.org/debian/pool/main/p/python-apt/
cp -v python-apt_0.7.7.1+nmu1* ~/usrc/python-apt/
cd     ~/usrc/python-apt/
dpkg-source -sn -x python-apt_0.7.7.1+nmu1.dsc
cd     ~/usrc/python-apt/python-apt-0.7.7.1+nmu1/
dpkg-buildpackage -us -uc -b -rfakeroot     |& tee odb

#*
# (find-fline "~/usrc/python-apt/")
* (eepitch-shell)
cd ~/usrc/python-apt/
sudo dpkg -i *.deb

#*
# (code-c-d "pythonapt" "~/usrc/python-apt/python-apt-0.7.7.1+nmu1/")
# (find-pythonaptfile "")
# (find-pythonaptfile "doc/examples/")




#####
#
# python-apt
# 2009jul27
#
#####

# «python-apt»  (to ".python-apt")
# (find-es "apt" "libapt")
# (find-status   "python-apt")
# (find-vldifile "python-apt.list")
# (find-udfile   "python-apt/")
# (find-status   "python-apt-doc")
# (find-vldifile "python-apt-doc.list")
# (find-udfile   "python-apt-doc/")
# (find-udfile   "python-apt/html/_sources/")
# (find-udgrep "grep -nH -e VersionCompare python-apt-doc/examples/*")
# (find-angg "LUA/apt-move.lua" "debversions")

# (find-fline "/usr/share/doc/python-apt/examples/")
# (find-fline "/usr/lib/python2.6/dist-packages/apt/")
# (find-fline "/usr/share/pyshared/apt/")
# (find-fline "/usr/share/doc/python-apt/")

# (code-c-d "pythonapt"   "/usr/lib/python2.6/dist-packages/apt/")
# (code-c-d "pythonaptex" "/usr/share/doc/python-apt/examples/")


# (find-pythonaptfile "")
# (find-pythonaptexfile "")
# (find-pythonaptexfile "build-deps.py")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import apt_pkg
import sys
import sets

def get_source_pkg(pkg, records, depcache):
        """ get the source package name of a given package """
        version = depcache.GetCandidateVer(pkg)
        if not version:
                return None
        file, index = version.FileList.pop(0)
        records.Lookup((file, index))
        if records.SourcePkg != "":
                srcpkg = records.SourcePkg
        else:
                srcpkg = pkg.Name
        return srcpkg

# main
apt_pkg.init()
cache      = apt_pkg.GetCache()
depcache   = apt_pkg.GetDepCache(cache)
depcache.Init()
records    = apt_pkg.GetPkgRecords(cache)
srcrecords = apt_pkg.GetPkgSrcRecords()

base              = cache["emacs22-el"]                 # For example
all_build_depends = sets.Set()

# get the build depdends for the package itself
srcpkg_name = get_source_pkg(base, records, depcache)
print "srcpkg_name: %s " % srcpkg_name
if not srcpkg_name:
        print "Can't find source package for '%s'" % pkg.Name

srcrec = srcrecords.Lookup(srcpkg_name)
if srcrec:
        print "Files:"
        print srcrecords.Files
        bd = srcrecords.BuildDepends
        print "build-depends of the package: %s " % bd
        for b in bd:
                all_build_depends.add(b[0])

# calculate the build depends for all dependencies
depends = depcache.GetCandidateVer(base).DependsList
for dep in depends["Depends"]: # FIXME: do we need to consider PreDepends?
        pkg = dep[0].TargetPkg
        srcpkg_name = get_source_pkg(pkg, records, depcache)
        if not srcpkg_name:
                print "Can't find source package for '%s'" % pkg.Name
                continue
        srcrec = srcrecords.Lookup(srcpkg_name)
        if srcrec:
                #print srcrecords.Package
                #print srcrecords.Binaries
                bd = srcrecords.BuildDepends
                #print "%s: %s " % (srcpkg_name, bd)
                for b in bd:
                        all_build_depends.add(b[0])

print "\n".join(all_build_depends)





#####
#
# python-opengl
# 2009jul27
#
#####

# «python-opengl»  (to ".python-opengl")
apti python-opengl python-opengl-doc

# (find-status   "python-opengl")
# (find-vldifile "python-opengl.list")
# (find-udfile   "python-opengl/")
# (find-status   "python-opengl-doc")
# (find-vldifile "python-opengl-doc.list")
# (find-udfile   "python-opengl-doc/")

# (find-fline "/usr/share/doc/python-opengl-doc/documentation/pydoc/")

# http://code.activestate.com/recipes/325391/

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
import sys

name = 'ball_glut'

def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
    glutInitWindowSize(400,400)
    glutCreateWindow(name)
    #
    glClearColor(0.,0.,0.,1.)
    glShadeModel(GL_SMOOTH)
    glEnable(GL_CULL_FACE)
    glEnable(GL_DEPTH_TEST)
    glEnable(GL_LIGHTING)
    lightZeroPosition = [10.,4.,10.,1.]
    lightZeroColor = [0.8,1.0,0.8,1.0] #green tinged
    glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition)
    glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor)
    glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1)
    glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05)
    glEnable(GL_LIGHT0)
    glutDisplayFunc(display)
    glMatrixMode(GL_PROJECTION)
    gluPerspective(40.,1.,1.,40.)
    glMatrixMode(GL_MODELVIEW)
    gluLookAt(0,0,10,
              0,0,0,
              0,1,0)
    glPushMatrix()
    glutMainLoop()
    return

def display():
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
    glPushMatrix()
    color = [1.0,0.,0.,1.]
    glMaterialfv(GL_FRONT,GL_DIFFUSE,color)
    glutSolidSphere(2,20,20)
    glPopMatrix()
    glutSwapBuffers()
    return

if __name__ == '__main__': main()




#####
#
# Pymacs
# 2011oct25
#
#####

# «pymacs»  (to ".pymacs")
# (find-status   "pymacs")
# (find-vldifile "pymacs.list")
# (find-udfile   "pymacs/")
# http://pymacs.progiciels-bpi.ca/index.html




#####
#
# Python-sphinx
# 2011nov14
#
#####

# «python-sphinx»  (to ".python-sphinx")
# (find-es "lua5" "gsl-shell")
# (find-status   "python-sphinx")
# (find-vldifile "python-sphinx.list")
# (find-udfile   "python-sphinx/")



#####
#
# sphinx-build (used by the Agda docs)
# 2019may20
#
#####

# «sphinx-build» (to ".sphinx-build")
# (find-es "sphinx" "python3-sphinx")
# (find-es "agda" "agda-git")
# https://www.sphinx-doc.org/en/1.6/man/sphinx-build.html

# (find-sh "apt-file search sphinx-build")
# (find-sh "apt-file search sphinx.ext.imgmath")
# python-sphinx:  /usr/share/sphinx/scripts/python2/sphinx-build
# python3-sphinx: /usr/share/sphinx/scripts/python3/sphinx-build
# (find-status   "python3-sphinx")
# (find-vldifile "python3-sphinx.list")
# (find-udfile   "python3-sphinx/")
# (find-status   "sphinx-common")
# (find-vldifile "sphinx-common.list")
# (find-udfile   "sphinx-common/")
# (find-status   "sphinx-doc")
# (find-vldifile "sphinx-doc.list")
# (find-udfile   "sphinx-doc/")
# (find-man "sphinx-build")

# sphinx.ext.imgmath not found:
# https://github.com/rtfd/readthedocs.org/issues/2418 sphinx.ext.imgmath not found
# https://github.com/sphinx-doc/sphinx/issues/2436

Running Sphinx v1.3.6

/conf.py
needs_sphinx = '1.4.3'

/requirements.txt
Sphinx>=1.4.3

aptrm python3-sphinx




#####
#
# sphinx-git
# 2019may21
#
#####

# «sphinx-git» (to ".sphinx-git")
# https://github.com/sphinx-doc/sphinx

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/sphinx/
cd      ~/usrc/
git clone https://github.com/sphinx-doc/sphinx
cd      ~/usrc/sphinx/

make |& tee om

# (code-c-d "sphinx" "~/usrc/sphinx/")
# (find-sphinxfile "")
# (find-gitk "~/usrc/sphinx/")

# (find-sphinxfile "setup.py" "flake8>=3.5.0")




#####
#
# PyGame
# 2011nov25 / 2024oct11
#
#####

# «pygame»  (to ".pygame")
# (find-angg ".emacs" "ee-rstdoc-:pygame")
# (find-zsh "installeddebs | sort | grep pygame")
# (find-zsh "availabledebs | sort | grep pygame")
# (find-status   "python-pygame-doc")
# (find-vldifile "python-pygame-doc.list")
# (find-udfile   "python-pygame-doc/")
# (find-status   "python3-pygame-sdl2")
# (find-vldifile "python3-pygame-sdl2.list")
# (find-udfile   "python3-pygame-sdl2/")
# (find-status   "python3-pygame")
# (find-vldifile "python3-pygame.list")
# (find-udfile   "python3-pygame/")
# (find-udfile "python-pygame/ref/")
# (find-udfile "python-pygame/tut/")
# (find-pygamedoc)
# (find-pygamedoc "genindex")
# (find-pygamedoc "ref/display#pygame.display.set_mode")
# https://dataswamp.org/~incal/pix/pixel.py

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import pygame_sdl2
screen = pygame_sdl2.display.set_mode((100,60))
screen.set_at((x, y), (r, g, b))
pygame_sdl2.display.flip()


# http://programarcadegames.com/index.php?chapter=introduction_to_graphics




#####
#
# Modules
# 2012may02
#
#####

# «modules»  (to ".modules")
# (find-pydoc "index")
# (find-pydoc "tutorial/modules")
# (find-pydoc "tutorial/modules#executing-modules-as-scripts")
# (find-fline "/tmp/fibo.py")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/

rm -v fibo.py
cat > fibo.py <<'%%%'
print "Hello"

def square (x):
    return x*x

if __name__ == "__main__":
    import sys
    print(square(int(sys.argv[1])))
else:
    print("Loading as a module")

print "Bye"
%%%

python fibo.py 6

python
import fibo
print(fibo.square(6))



#####
#
# module.__file__
# 2019sep25
#
#####

# «module.__file__» (to ".module.__file__")
# (find-pydoc "library/os.path")
# (find-pydoc "library/os.path#os.path.abspath")
# (find-pydoc "library/pathlib#module-pathlib")
# (find-pydoc "library/pathlib#operators" "slash operator")
# (find-pydoc "library/pathlib#pathlib.Path")
# (find-pydoc "reference/import#import-related-module-attributes" "__import__")

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)
import IPython
IPython
IPython.__file__
os.path.abspath(IPython.__file__)

I tried to run these lines in the REPL: "import IPython", "IPython",
"IPython.__file__", "os.abspath(IPython.__file__)"... the first three
ones work, but the last one gives this error: "AttributeError: module
'os' has no attribute 'abspath'"...






#####
#
# __tostring for Python
# 2012may08
#
#####

# «tostring»  (to ".tostring")
# (find-pydoc "index")
# (find-pydoc "library/functions#func-str")
# (find-pydoc "reference/datamodel#basic-customization")
# (find-pydoc "reference/datamodel#object.__repr__")
# (find-pydoc "reference/datamodel#object.__str__")
# (find-pydoc "reference/datamodel#special-method-names")
# (find-pydocr "reference/datamodel#object.__repr__")
# (find-books "__comp/__comp.el" "python-downey" "__str__")
# (find-pyrefnode "Special method names")
#  (find-pyrefnode "Emulating container types")
#  (find-pyrefnode "Emulating numeric types")
# http://rgruet.free.fr/PQR2.3.html#SpecialMethods

(let ((default-directory "/usr/share/doc/python3.9/html/_sources/"))
  (grep "grep --color=auto -nriH --null -e 'Container' *")
  )

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
foo = 5
foo.__str__
foo.__str__()
foo.__str__(foo)
str(foo)
"5"


#####
#
# MyVector
# 2022sep17
#
#####

# «MyVector»  (to ".MyVector")
# (to "tut-classes")
# (find-books "__comp/__comp.el" "python-downey" "__str__")
# (find-downeytppage (+ 22 199) "__init__")
# (find-downeytptext (+ 22 199) "__init__")
# (find-downeytppage (+ 22 200) "The __str__ Method")
# (find-downeytptext (+ 22 200) "The __str__ Method")
# (find-pydoc "reference/datamodel#object.__init__")
# (find-pydoc "reference/datamodel#object.__str__")
# (find-pydoc "reference/datamodel#object.__add__")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
class MyVector:
    def __init__(v, x, y):
        v.x = x
        v.y = y
    def __str__(v):
        return '(%d,%d)' % (v.x, v.y)
    def __add__(v, w):
        return MyVector(v.x+w.x, v.y+w.y)

print(MyVector(20,30))
print(MyVector(20,30)+MyVector(4,5))





#####
#
# SciPy
# 2012nov24
#
#####

# «scipy» (to ".scipy")
# http://www.scipy.org/SciPy



#####
#
# matplotlib
# 2012nov24 / 2019aug03
#
#####

# «matplotlib» (to ".matplotlib")
# https://matplotlib.org/gallery.html
# (find-zsh "installeddebs | sort | grep matplotlib")
# (find-zsh "availabledebs | sort | grep matplotlib")
# (find-mpldoc "index")
# (find-mpldoc "tutorials/index")
# (find-mpldoc "tutorials/introductory/usage")
# (find-mpldoc "tutorials/introductory/pyplot")
# (find-mpldoc "tutorials/introductory/sample_plots")
# (find-mpldoc "tutorials/introductory/images")
# (find-mpldoc "tutorials/introductory/lifecycle")
# (find-mpldoc "tutorials/introductory/customizing")

# (find-status   "python-matplotlib-doc")
# (find-vldifile "python-matplotlib-doc.list")
# (find-udfile   "python-matplotlib-doc/")
# (find-status   "python3-matplotlib")
# (find-vldifile "python3-matplotlib.list")
# (find-udfile   "python3-matplotlib/")
# (find-udfile "python-matplotlib-doc/examples/")
# (find-udfile "python-matplotlib-doc/examples/README.txt")
# file:///usr/share/doc/python-matplotlib-doc/html/index.html
# file:///usr/share/doc/python-matplotlib-doc/html/gallery.html
# file:///usr/share/doc/python-matplotlib-doc/html/
# file:///usr/share/doc/python-matplotlib-doc/html/tutorials/index.html
# file:///usr/share/doc/python-matplotlib-doc/html/tutorials/introductory/usage.html
# (find-fline "/usr/share/doc/python-matplotlib-doc/html/_sources/")
# (find-fline "/usr/share/doc/python-matplotlib-doc/html/_sources/tutorials/introductory/pyplot.rst.txt")
# (find-fline "/usr/share/doc/python-matplotlib-doc/html/_sources/tutorials/introductory/usage.rst.txt")


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti python-matplotlib-doc python3-matplotlib



# Old:
# http://stackoverflow.com/questions/tagged/matplotlib
# http://matplotlib.org/
# http://matplotlib.org/api/figure_api.html
# http://www.scipy.org/Additional_Documentation?action=show&redirect=Documentation



#####
#
# matplotlib-examples
# 2019aug29
#
#####

# «matplotlib-examples» (to ".matplotlib-examples")
# (find-angg ".emacs.templates" "find-matplotlib-links")
# (find-angg ".emacs.templates" "find-matplotlib-links" "M-x brmpd")
# (find-angg ".emacs" "matplotlib-examples")
# (find-matplotlibexfile "")
# (find-matplotlibexfile "pyplots/")
# (find-matplotlibexfile "pyplots/align_ylabels.py")
# (find-fline "~/MATPLOTLIB/")
# (find-fline "~/MATPLOTLIB/rotate_axes3d_demo.py")




#####
#
# matplotlib-rougier
# 2021sep07
#
#####

# «matplotlib-rougier»  (to ".matplotlib-rougier")
# https://github.com/rougier
# https://github.com/rougier/matplotlib-tutorial
# https://github.com/rougier/scientific-visualization-book
# https://github.com/rougier/figure-anatomy
# https://github.com/matplotlib/cheatsheets

https://news.ycombinator.com/item?id=29229103 An open access book on scientific visualization using Python and Matplotlib (github.com/rougier)






#####
#
# NumPy
# 2013may13
#
#####

# «numpy» (to ".numpy")
# http://www.scipy.org/Tentative_NumPy_Tutorial
# http://scipy-lectures.github.com/
# (find-angg ".emacs" "ipython")

# «scipy-lectures» (to ".scipy-lectures")
# (find-git-links "https://github.com/scipy-lectures/scipy-lecture-notes.git" "scipylectures")
# (find-es "rst")

# https://github.com/scipy-lectures/scipy-lecture-notes
# https://github.com/scipy-lectures/scipy-lecture-notes.git

(code-c-d "scipylectures"     "~/usrc/scipy-lecture-notes/")
(code-c-d "scipylectureshtml" "~/usrc/scipy-lecture-notes/build/html/")
;; (find-scipylecturesfile "")
;; (find-scipylecturesfile "intro/")
;; (find-scipylecturesfile "intro/intro.rst")
;; (find-scipylecturessh "find * | sort")
;; (find-scipylecturessh "find * | sort | grep rst")
;; (find-scipylectureshtmlfile "")
;; (find-scipylectureshtmlfile "_sources/packages/traits/index.txt")
;; (find-scipylectureshtmlfile "_sources/packages/scikit-learn/index.txt")
;; (find-scipylectureshtmlfile "_sources/packages/3d_plotting/")
;; file:///home/edrx/usrc/scipy-lecture-notes/build/html/index.html

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/scipy-lecture-notes/
make html |& tee om







#####
#
# ipython
# 2012sep27
#
#####

# «ipython»  (to ".ipython")
# https://en.wikipedia.org/wiki/IPython
# (find-angg ".emacs" "ipython")
# (find-angg ".emacs" "pylab")
# (find-status   "ipython")
# (find-vldifile "ipython.list")
# (find-udfile   "ipython/")
# (find-status   "python-matplotlib")
# (find-vldifile "python-matplotlib.list")
# (find-udfile   "python-matplotlib/")
# (find-sitelispfile "ipython.el")

(code-c-d "ipython"   "/usr/share/pyshared/IPython/")
(code-c-d "ipythonex" "/usr/share/doc/ipython/examples/")
;; (find-ipythonfile "")
;; (find-ipythonexfile "")

# http://www.thetechrepo.com/main-articles/465-how-to-create-a-graph-in-python
# http://coreygoldberg.blogspot.com.br/2012/01/python-matplotlib-and-numpy-on.html
# http://stackoverflow.com/questions/1596684/python-library-to-plot-graph
# http://www.youtube.com/watch?v=26wgEsg9Mcc IPython: Python at your fingertips
# http://www.youtube.com/watch?v=2G5YTlheCbw IPython in-depth: high-productivity interactive and parallel python
# http://stackoverflow.com/questions/13575703/ipython-ide-for-windows
# http://nbviewer.ipython.org/urls/raw.github.com/jrjohansson/scientific-python-lectures/master/Lecture-5-Sympy.ipynb

# (find-youtubedl-links "/sda5/videos/" "IPython_-_Python_at_your_fingertips" "26wgEsg9Mcc" ".mp4" "ipythonayf")
# (code-video "ipythonayfvideo" "/sda5/videos/IPython_-_Python_at_your_fingertips-26wgEsg9Mcc.mp4")
# (code-video "ipythonayfvideo" "/sda5/videos/IPython_-_Python_at_your_fingertips-26wgEsg9Mcc.mp4.part")
# (find-ipythonayfvideo)
# (find-ipythonayfvideo "0:00")

# (find-sh "ipython --help")
# (find-sh "ipython --help" "pylab")
# (find-sh "ipython --help-all")

apti python-matplotlib

# (find-man "1 ipcluster")
# (find-man "1 ipcontroller")
# (find-man "1 ipengine")
# (find-man "1 ipython")
# (find-man "1 ipython" "-pylab")
# (find-man "1 ipython-wx")
# (find-man "1 ipythonx")
# (find-man "1 irunner")
# (find-man "1 pycolor")

* (eepitch-pylab)
* (eepitch-kill)
* (eepitch-pylab)
?
x = randn(10000)
hist(x, 100)
?hist
print(x)
?randn





#####
#
# Ameliabot
# 2012oct27
#
#####

# «ameliabot» (to ".ameliabot")
# (find-es "git" "git-shallow-clone")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-es "cvs" "git-shallow-clone")
rm -Rfv /tmp/ameliabot/
mkdir   /tmp/ameliabot/
cd      /tmp/ameliabot/
git clone --depth 1 git://git.code.sf.net/p/ameliabot/code ameliabot-code
git clone --depth 1 git://git.code.sf.net/p/untwisted/code untwisted-code
git clone --depth 1 git://git.code.sf.net/p/uxirc/code     uxirc-code
# (find-fline "/tmp/ameliabot/")

<Tau> daí voce instala o untwisted depois o uxric lib com python
      setup.py install, se voce quiser instalar em uma conta do
      linux comum voce usa python setup.py install --prefix=$HOME
<Tau> aí pra rodar o ameliabot voce só edita o amelia.py
      configurando lá os canais/plugins etc
<Tau> e roda com python amelia.py



""" 
Author:Iury O. G. Figueiredo
Name:codenv
Description: This plugin uses codepage.org to run code.
Usage:
<Tau>.proc python .done
<Tau>def snard(value):
<Tau>    for ind in range(value):
<Tau>        print 'snardbafulator is a molester'
<Tau>snard(6)
<Tau>.done
<yu> snardbafulator is a molester snardbafulator is a molester snardbafulator is a molester snardbafulator is a molester snardbafulator is a molester snardbafulator is a molester

"""

from utils import codepad
from uxirc.misc import *
from untwisted.network import hold, xmap

class Codenv(object):
    def __init__(self, server, max_width=512 * 3):
        self.max_width = max_width
        xmap(server, ('PRIVCHAN', '.$'), self.proc)

    def proc(self, server, (nick, user, host, target, msg), lang, tag):
        code = ''
        flag = hold(server, 'PRIVCHAN')
        while True:
            event, args = yield flag 
            if args[4] == target and args[3] == host:
                if args[5] == tag:
                    break
                code = code + args[5] + '\n'
            
        url, output = codepad.sandbox(code, lang)

        if len(output) <= self.max_width:
            send_msg(server, target, output)
        else:
            send_msg(server, target, url)




#####
#
# Rend's tutorial
# 2013jan01
#
#####

# «rends-tutorial» (to ".rends-tutorial")
# (find-fline "~/LOGS/2013jan01.eev")

(defun u () (interactive)
  (find-escript-upload-links "python" "rends-tutorial"))

(defun eejump-666 ()
  (find-wset "13_o_2o_o"
      ;; ' (find-angg "TODO")
      ' (find-es "python")
      ' (ee-here '(eepitch-python))
      ' (find-ebuffer "#eev@irc.freenode.net")
	))

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
# class Car():
class Car(object):
    def __init__(self, name, model=None):
            self.name = name
            self.model = model
    def start(self):
            return 'running ...'
    def accelerate(self, number=10):
            print 'accelerating ... [%s]' % number
            self.speed = number
    def accelerate2(foo, number=10):
            print 'accelerating ... [%s]' % number
            foo.speed = number
    def speed(self):
            return 22
    def stop(self):
            return 'stopped.'

ferrari = Car("Ferrari", "M")
ferrari
ferrari.name
ferrari.model
ferrari.start
ferrari.start()
ferrari.accelerate(20)
ferrari.speed
ferrari.accelerate2(30)
ferrari.speed

# ferrari = {'start':start_func,
#            'accelerate':accelerate_func,
#            'stop':stop_func,
#            name:'Ferrari',
#            model:'whatever_model'}

class miniCar(Car):
   def jump(foo, height):
      foo.height = height
      print foo.height

minicar = miniCar('cooper')
minicar.jump(100)
minicar

ferrari = Car('Ferrari')
dir(ferrari)
ferrari.__dict__
dir(minicar)
minicar.__dict__
minicar.__sizeof__
ferrari.__sizeof__
ferrari.__sizeof__()


* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)

# A port of: (find-dn5 "eoo.lua" "test-eoo")
# See: (to "environment")
#      (to "tostring")
#      (find-pyrefnode "Basic customization" "`__repr__(self)'")
#      (find-pyrefnode "Basic customization" "`__str__(self)'")
#
import os
os.environ["PAGER"] = "cat"

import math
dir(math)
help(math.sqrt)

class V2(object):
    def __init__(self, x, y):
            self.x = x
            self.y = y
    def __repr__(self):
            return str((self.x,self.y))
            # return "(%d, %d)" % (self.x, self.y)
    def __add__(self, other):
            return V2(self.x + other.x, self.y + other.y)
    def norm(self):
            return math.sqrt(self.x ** 2 + self.y ** 2)

v = V2(3, 4)
v.norm()
v
V2(3, 4) + V2(20, 30)




#####
#
# Environment variables
# 2013jan02
#
#####

# «environment» (to ".environment")
# file:///usr/share/doc/python2.7/html/library/os.html
# file:///usr/share/doc/python3.5/html/library/os.html
# file:///usr/share/doc/python2.7/html/library/os.html#os.environ
# file:///usr/share/doc/python3.5/html/library/os.html#os.environ

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import os
os.getenv("PAGER")
os.putenv("PAGER", "cat")
os.getenv("PAGER")
os.environ["PAGER"]
os.environ["PAGER"] = "cat"
os.getenv("PAGER")
help(os)
help(os.environ)
help(os.getenv)
help(os.putenv)







#####
#
# scikits and scikits.audiolab
# 2012nov18
#
#####

# «scikits» (to ".scikits")
# (find-status   "python-scikits-learn")
# (find-vldifile "python-scikits-learn.list")
# (find-udfile   "python-scikits-learn/")
# (find-status   "python-scikits-learn-doc")
# (find-vldifile "python-scikits-learn-doc.list")
# (find-udfile   "python-scikits-learn-doc/")

apti python-scikits-learn python-scikits-learn-doc

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv /tmp/hybrid/
mkdir   /tmp/hybrid/
cd      /tmp/hybrid/
git clone git://labmacambira.git.sourceforge.net/gitroot/labmacambira/dissertacao
cd dissertacao
git pull origin msc
git checkout msc
cd scripts/

cd /tmp/hybrid/dissertacao/scripts/
# (code-c-d "hybridscripts" "/tmp/hybrid/dissertacao/scripts/")
# (find-hybridscriptsfile "")
# (find-hybridscriptsfile "pecas2.3/microTom.py")

cd /tmp/hybrid/dissertacao/scripts/pecas2.3/
python microTom.py

# (find-zsh "dmissing scikits")

<automata> em scripts vc vai encontrar pecas2.1 pecas2.2 e pecas2.3
<automata> basta entrar em cada um desses diretórios e executar
           os códigos em python




#####
#
# PyObjects (by Sergey Sergeev)
# 2013jan02
#
#####

# «pyobjects» (to ".pyobjects")
# https://github.com/sharedmemory/pyobjects
# https://github.com/jfearn/HTML-Tree/blob/master/lib/HTML/Tree/AboutObjects.pod
#                       (find-fline "/usr/share/perl5/HTML/Tree/AboutObjects.pod")
# http://lua-users.org/lists/lua-l/2009-09/msg00565.html




#####
#
# emacs-ipython-notebook
# 2012dec08
#
#####

# «emacs-ipython-notebook» (to ".emacs-ipython-notebook")
# (find-es "jupyter" "emacs-ipython-notebook")
# https://github.com/tkf/emacs-ipython-notebook




#####
#
# audio
# 2013mar06
#
#####

# «audio» (to ".audio")
# http://stackoverflow.com/questions/307305/play-a-sound-with-python
# http://wiki.python.org/moin/Audio
# http://wiki.python.org/moin/PythonInMusic




#####
#
# pprint
# 2014sep06
#
#####

# «pprint» (to ".pprint")
# file:///usr/share/doc/python2.7/html/library/pprint.html
# https://docs.python.org/2/library/pprint.html
# http://pymotw.com/2/pprint/
# http://stackoverflow.com/questions/9135485/how-to-use-pprint-to-print-an-object-using-the-built-in-str-self-method






#####
#
# SymPy
# 2013mar23
#
#####

# «sympy» (to ".sympy")
#********
#******** Tutorial:
#******** (find-es "sympy" "tutorial")
#********
# (find-status   "python-sympy")
# (find-vldifile "python-sympy.list")
# (find-udfile   "python-sympy/")



from __future__ import division
from sympy import *
x, y, z, t = symbols('x y z t')
k, m, n = symbols('k m n', integer=True)
f, g, h = symbols('f g h', cls=Function)



Stephanie, vou te passar as anotacoes por aqui pra mais gente (Hugo,
por exemplo =) ) ter noção do que a gente está começando a
fazer...

Você instalou o Python(x,y) baixando isso aqui, né?
http://www.mirrorservice.org/sites/pythonxy.com/Python(x,y)-2.7.5.0.exe

E a gente tá tentando aprender a fazer computação
simbólica nele... quando eu rodo "isympy" no Linux as mensagens
são estas:

  IPython console for SymPy 0.7.1.rc1 (Python 2.7.3-32-bit) (ground types: python)
  These commands were executed:
  >>> from __future__ import division
  >>> from sympy import *
  >>> x, y, z, t = symbols('x y z t')
  >>> k, m, n = symbols('k m n', integer=True)
  >>> f, g, h = symbols('f g h', cls=Function)
  Documentation can be found at http://www.sympy.org
  In [1]: 

e aí a gente pode dar expressões como

  (1 - x) * 2

e o interpretador responde:

  -2*x + 2

porque ele trata isto como uma expressão (um polinômio)...
Estamos dando uma olhada neste tutorial e nestas páginas de referência,

  http://docs.sympy.org/0.7.2/tutorial.html
  http://docs.sympy.org/0.7.2/modules/core.html
  http://docs.sympy.org/0.7.2/modules/polys/reference.html

mas ainda não descobrimos um modo do Python pra Windows já
começar rodando os comandos que carregam o sympy e definem x, y, z,
t, etc como "expressões"...

# http://docs.sympy.org/0.7.2/tutorial.html
# http://docs.sympy.org/0.7.2/modules/core.html
# http://docs.sympy.org/0.7.2/modules/polys/reference.html






#####
#
# Spyder
# 2013jun25
#
#####

# «spyder» (to ".spyder")
# (find-status   "spyder")
# (find-vldifile "spyder.list")
# (find-udfile   "spyder/")
# (find-status   "python-spyderlib")
# (find-vldifile "python-spyderlib.list")
# (find-udfile   "python-spyderlib/")
# (find-man "1 spyder")

* (eepitch-shell2)
* (eepitch-kill)
* (eepitch-shell2)
spyder

# (find-fline "~/.spyder2/")
# (find-fline "~/.spyder2/.temp.py")

# http://www.mirrorservice.org/sites/pythonxy.com/
# file:///usr/share/doc/python-spyderlib/html/index.html




#####
#
# Idle
# 2013jun26
#
#####

# «idle» (to ".idle")
# file:///usr/share/doc/python2.7/html/library/idle.html
# file:///usr/share/doc/python3.5/html/library/idle.html
# (find-zsh "apt-file search idle")
# (find-zsh "installeddebs | sort | grep idle")
# (find-zsh "availabledebs | sort | grep idle")

idle-python2.7
idle-python3.5
idle3-tools
idle3-tools
idle3
idle
idlestat
idlestat
telepathy-idle
telepathy-idle




# (find-angg "PYTHON/a.py")
# (find-sh "locate idle | grep -i python")
# (find-fline "/usr/lib/python2.5/idlelib/")
# (find-zsh "dmissing idlelib")
# (find-zsh "installeddebs | sort | grep python")
# (find-status   "python2.7")
# (find-vldifile "python2.7.list")
# (find-udfile   "python2.7/")

# (find-status   "idle")
# (find-vldifile "idle.list")
# (find-udfile   "idle/")
# (find-status   "idle-python2.7")
# (find-vldifile "idle-python2.7.list")
# (find-udfile   "idle-python2.7/")

# (find-man "1 idle")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
PAGER=cat python
help("import")
# sys.meta_path



#####
#
# Links do Felipe Pinheiro
# 2013jun14
#
#####

# «felipe-pinheiro» (to ".felipe-pinheiro")

Comece por aqui:
  http://ericstk.wordpress.com/2013/01/22/o-que-e-preciso-para-comecar-a-programar-em-python/
PDF, Python for Zombies(português):
  https://docs.google.com/file/d/0B2FCVdJY8NOqeUIwUV9SaU1jYlU/edit
  http://www.slideshare.net/renatopp/introduo-ao-python
  http://www.python.org.br/wiki/AprendaProgramar
 
----------------------------------------------
Exercícios:
  http://www.python.org.br/wiki/ListaDeExercicios
 
----------------------------------------------
Vídeos
 
Lógica de Programação Usando Python - Curso Completo(comece aqui)
  http://www.youtube.com/playlist?list=PL51430F6C54953B73
Exemplo Programa(médio)
  http://www.youtube.com/watch?v=eTKB6of96GQ
Curso de desenvolvimento Web com Python e Django :
  http://migre.me/cWcDU
Palestras e vídeos:
  http://aprenda-python.blogspot.com.br/2013/03/palestras-gratuitas-e-atualizadas-2013.html
Python e QT4
  http://www.youtube.com/playlist?list=PLF4575388795F2531
Python e GTK
  http://www.youtube.com/playlist?list=PL7604BFACE2442F9A
Curso em Video Aulas Python
  http://www.baixebr.org/cursos-e-apostilas/cursos/curso-video-aulas-python/
  http://www.youtube.com/course?list=EC36E7A2B75028A3D6 Computer Science - Khan Academy
  http://www.youtube.com/playlist?list=PLE549A038CF82905F Tutoriales de Programación
 
----------------------------------------------
Orientação a Objetos:
  http://www.fem.unicamp.br/~labaki/Python/ModuloB.pdf
Aprendendo Django:
  http://www.aprendendodjango.com/
Banco de dados:
  http://www.python.org.br/wiki/BancosDeDadosSql
Exemplos de programas prontos
  http://www.python.org.br/wiki/CookBook
Learn Python in 10 minutes(inglês):
  http://www.korokithakis.net/tutorials/python/
Learn Python The Hard Way(inglês):
  http://learnpythonthehardway.org/book/
Alguns tutoriais:
  http://linuxresort.blogspot.com.br/p/e-uma-linguagem-de-alto-nivel-de-mexer.html
Listas:
  http://www.lcg.ufrj.br/Cursos/algprog/Programando%20em%20Python%20-%20Listas.pdf
Introdução ao QT4(inglês):
  http://www.rkblog.rk.edu.pl/w/p/introduction-pyqt4/
PyQT(inglês):
  http://www.commandprompt.com/community/pyqt/?page=pyqtbook
  http://www.async.com.br/projects/python/pnp/
  http://aprenda-python.blogspot.com.br
  http://aprenda-python.blogspot.com.br/2010/09/curso-gratuito-de-python-em-portugues.html
  http://zetcode.com/
 
----------------------------------------------
-Livros
Python para desenvolvedores:
  http://ark4n.files.wordpress.com/2010/01/python_para_desenvolvedores_2ed.pdf
Download de vários livros(inglês):
  http://it-ebooks.info/search/?q=Python&type=title
57 livros/apostilas sobre Python(torrent):
  http://kat.ph/python-book-collection-t6830161.html





#####
#
# Playing wavs with scipy
# 2013aug12
#
#####

# «scipy-wav» (to ".scipy-wav")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cp -v ~/TH/L/html5-audio.mp3 /tmp/in.mp3
avconv -y -i /tmp/in.mp3 /tmp/in.wav
# (find-sh "file /tmp/in.wav")
file /tmp/in.wav

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import scipy
wavfile = "/tmp/in.wav"
from scipy.io import wavfile as w
amostras = w.read(wavfile)[1]


.. usa o scipy.io para abrir o wav
from scipy.io import wavfile as w
amostras = w.read('foo.wav')[1]
se quiser uma lib mais porreta, tem a pysndobj e pyo

<edrx> can anyone recommend me an audio library for python in which
       I can play sounds and use the repl at the same time? for
       example, one in which I can read the value of
       nowplaying1.currentTime, and in which changing that value
       would make the player skip to another position...

<edrx> alguem pode me recomendar alguma biblioteca pra python na
       qual eu consiga tocar arquivos de audio e rodar a repl ao
       mesmo tempo?
<edrx> o que eu queria fazer era o seguinte: deem uma olhada em
       http://angg.twu.net/html5-audio.html - os links do final
       tocam um arquivo mp3 a partir de um certo ponto... e o
       player de audio roda em paralelo com o javascript console e
       com a parte do browser que interpreta cliques e outros
       eventos na pagina html renderizada...

<edrx> isto talvez seja uma pergunta boba, mas la vai...
<edrx> meu arquivo /tmp/in.wav parece ser um arquivo WAV todo
       certinho... acabei de cria-lo com ffmpeg a partir de um mp3,
       e "file /tmp/in.wav" diz isto:
<edrx>  /tmp/in.wav: RIFF (little-endian) data, WAVE audio,
       Microsoft PCM, 16 bit, stereo 44100 Hz
<edrx> mas ai' eu rodo isto...
<edrx> import scipy
<edrx> wavfile = "/tmp/in.wav"
<edrx> from scipy.io import wavfile as w
<edrx> amostras = w.read(wavfile)[1]
<edrx> e ganho:
<edrx>  /usr/lib/python2.7/dist-packages/scipy/io/wavfile.py:31:
       WavFileWarning: Unfamiliar format bytes
<edrx>   warnings.warn("Unfamiliar format bytes", WavFileWarning)
<edrx> e quando eu tento examinar o "amostras" ganho isto:
<edrx>  NameError: name 'amostras' is not defined
<edrx> (obs: se eu desconectar do canal e' so' porque o meu cliente
       de irc ta' mal configurado, nao porque eu desisti...)


http://freenet.mcnabhosting.com/python/pyPortAudio/
http://inventwithpython.com/blog/2010/09/01/the-top-10-pygame-tutorials/
http://pygametutorials.wikidot.com/
http://pymedia.org/tut/index.html
http://pymedia.org/tut/src/play_wav.py.html
http://rope.sourceforge.net/ropemacs.html
http://www.youtube.com/watch?v=EHvQG7dbk_8 RT 2011 - Screencast 08 - Python part 2 - Running Python Code
http://www.youtube.com/watch?v=JhAF6puNTxI Audio in Python - introduction (Software Carpentry) (LOW-RES)
http://www.youtube.com/watch?v=OMi-uN-6O1Q Emacs as a Python IDE
http://www.youtube.com/watch?v=nnuEqzAAkHw pygame - tutorial part 1
https://pypi.python.org/pypi/PyAudio/

pygame

# (find-status   "python-pyaudio")
# (find-vldifile "python-pyaudio.list")
# (find-udfile   "python-pyaudio/")
# (find-status   "python-rope")
# (find-vldifile "python-rope.list")
# (find-udfile   "python-rope/")
# (find-status   "python-ropemacs")
# (find-vldifile "python-ropemacs.list")
# (find-udfile   "python-ropemacs/")
# (find-status   "pymacs")
# (find-vldifile "pymacs.list")
# (find-udfile   "pymacs/")




#####
#
# pip
# 2019aug03
#
#####

# «pip» (to ".pip")
# https://linuxize.com/post/how-to-install-pip-on-debian-9/
# https://pip.pypa.io/en/stable/user_guide/
# https://www.tecmint.com/install-pip-in-linux/
# (find-zsh "apt-file search bin/pip")
# (find-zsh "installeddebs | sort | grep pip")
# (find-zsh "availabledebs | sort | grep pip")
# (find-zsh "availabledebs | sort | grep python | grep pip")

# (find-angg ".zshrc" "pip-path")

# (find-status   "python3-pip")
# (find-vldifile "python3-pip.list")
# (find-udfile   "python3-pip/")
# (find-fline "/usr/lib/python3/dist-packages/pip/")

python-pip: /usr/bin/pip
python-pip: /usr/bin/pip2
python3-pip: /usr/bin/pip3

* (eepitch-shell2)
apti python-pip
apti python3-pip

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
pip3
pip3 install ipython
pip3 install youtube-dl




#####
#
# pip3-upgrade
# 2022may01
#
#####

# «pip3-upgrade»  (to ".pip3-upgrade")
# (find-sh "pip3 --help")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
pip3 --upgrade
pip3 list
pip3 list | awk 'NR > 2 {print $1}' | tee /tmp/o
pip3 install $(cat /tmp/o)
pip3 install --upgrade $(cat /tmp/o)

Requirement already satisfied: dblatex in /usr/lib/python3/dist-packages (0.3.12)
Collecting dblatex
  Downloading dblatex-0.3.10.tar.bz2 (1.7 MB)
     |████████████████████████████████| 1.7 MB 12.5 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_0e48fa1858794329b03ea0964192e516/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_0e48fa1858794329b03ea0964192e516/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-_10_4xy3
         cwd: /tmp/pip-install-xljt60ni/dblatex_0e48fa1858794329b03ea0964192e516/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_0e48fa1858794329b03ea0964192e516/setup.py", line 86
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/a8/1c/a07b54389399ac0c014c175936eb142f562468c607150a2df3e94d365611/dblatex-0.3.10.tar.bz2#sha256=56fee45ef3c242c4800bad20c5aeb934b31ba0894bdf86275b60b2e7b2f4cb8e (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading dblatex-0.3.9.tar.bz2 (1.7 MB)
     |████████████████████████████████| 1.7 MB 9.7 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_05d15e3c8c7b486294be3e83d8466af9/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_05d15e3c8c7b486294be3e83d8466af9/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-85z5503m
         cwd: /tmp/pip-install-xljt60ni/dblatex_05d15e3c8c7b486294be3e83d8466af9/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_05d15e3c8c7b486294be3e83d8466af9/setup.py", line 86
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/51/1b/688fcc3766dda4b3c1b90ba5f77584bf716fd63b160653983635baf1d324/dblatex-0.3.9.tar.bz2#sha256=493f7f8f6234794379e47560ec24c9abcb4bd5bdc9c4bd659175046a33211223 (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading dblatex-0.3.8.1.tar.bz2 (1.6 MB)
     |████████████████████████████████| 1.6 MB 9.8 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_63aa375a01c1405c982bb4989a50333c/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_63aa375a01c1405c982bb4989a50333c/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-vlneou_m
         cwd: /tmp/pip-install-xljt60ni/dblatex_63aa375a01c1405c982bb4989a50333c/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_63aa375a01c1405c982bb4989a50333c/setup.py", line 86
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/d1/05/c9f5d1ead06d29d4dfa23fd4d406fd742ee7556670798edc97e28bedd23a/dblatex-0.3.8.1.tar.bz2#sha256=f2716eb47d50d8c8d5588592c50e414ecda4480e92cd82086cdc47e2d3df3947 (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading dblatex-0.3.7.tar.bz2 (1.5 MB)
     |████████████████████████████████| 1.5 MB 11.1 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_9a202530b6b740e68154c2e8807b78d0/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_9a202530b6b740e68154c2e8807b78d0/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-q1vjpfn9
         cwd: /tmp/pip-install-xljt60ni/dblatex_9a202530b6b740e68154c2e8807b78d0/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_9a202530b6b740e68154c2e8807b78d0/setup.py", line 86
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/01/ae/cce6b462aa6b25e5e80dfb42cb7d2888f5b3a82efbf6f0dd54996e3d681e/dblatex-0.3.7.tar.bz2#sha256=4e868fe5c481467ab33e1e0e7f2db7477d9e979084aea4256f63eb4942b438fe (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading dblatex-0.3.6.tar.bz2 (1.5 MB)
     |████████████████████████████████| 1.5 MB 11.2 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_879b203a2ad943b0bcdd47368d2f3061/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_879b203a2ad943b0bcdd47368d2f3061/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-o04bfzlk
         cwd: /tmp/pip-install-xljt60ni/dblatex_879b203a2ad943b0bcdd47368d2f3061/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_879b203a2ad943b0bcdd47368d2f3061/setup.py", line 86
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/22/dd/3574e172fead961907274bd6f3a7e59d603f8916488db4f9fc0a4ac1fa4f/dblatex-0.3.6.tar.bz2#sha256=31b3105180ed79fad0ac81c7d32dafd941d040b99ae359f0149171241f2447ce (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading dblatex-0.3.5.tar.bz2 (1.4 MB)
     |████████████████████████████████| 1.4 MB 10.9 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_d8b1b62ceb974563bd5c4f91a7012116/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_d8b1b62ceb974563bd5c4f91a7012116/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-bxo1ci5c
         cwd: /tmp/pip-install-xljt60ni/dblatex_d8b1b62ceb974563bd5c4f91a7012116/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_d8b1b62ceb974563bd5c4f91a7012116/setup.py", line 86
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/c1/14/cc893aa9124725960934129f924eca3c46a6f868d80ea9ea2cdf5f083a0b/dblatex-0.3.5.tar.bz2#sha256=faf8373231f4cf94c20194c8282cb7b2bad9b507d3ef678d105906922682299d (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading dblatex-0.3.4.tar.bz2 (1.5 MB)
     |████████████████████████████████| 1.5 MB 11.2 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_624499ccbd66436d982db296b52e9558/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_624499ccbd66436d982db296b52e9558/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-aozqepgp
         cwd: /tmp/pip-install-xljt60ni/dblatex_624499ccbd66436d982db296b52e9558/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_624499ccbd66436d982db296b52e9558/setup.py", line 86
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/84/b4/062816b3592a13e0955175d6880c6edd89f387f11d590c15232296ef1603/dblatex-0.3.4.tar.bz2#sha256=5ca67bf5e51bd6ad94426524c599f41b9f00c5589e7fba7ebfb6bcac6d8ba3cf (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading dblatex-0.3.3.tar.bz2 (1.4 MB)
     |████████████████████████████████| 1.4 MB 9.3 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_6dcb9ae4601e49a3871a07b2fb101e27/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_6dcb9ae4601e49a3871a07b2fb101e27/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-kgf47wcx
         cwd: /tmp/pip-install-xljt60ni/dblatex_6dcb9ae4601e49a3871a07b2fb101e27/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_6dcb9ae4601e49a3871a07b2fb101e27/setup.py", line 85
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/80/0d/a5e5eada0a9443939a3b44366aa7c671525f7a22d5b2debc6f49e971f481/dblatex-0.3.3.tar.bz2#sha256=5903255da7ac15f0f090a16b577f129c0beabdc074b4b2a40bc43fc932ae7031 (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading dblatex-0.3.2.tar.bz2 (1.2 MB)
     |████████████████████████████████| 1.2 MB 11.2 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_187e182fb3d945dbb2595180567d2dd7/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_187e182fb3d945dbb2595180567d2dd7/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-kyg9hnjz
         cwd: /tmp/pip-install-xljt60ni/dblatex_187e182fb3d945dbb2595180567d2dd7/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_187e182fb3d945dbb2595180567d2dd7/setup.py", line 85
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/bb/1b/92a287d4ca36c378d1fa7bc76c5922e525d1b0b4a495bd4d7b90e81f2114/dblatex-0.3.2.tar.bz2#sha256=7a25bc0bbb990100b365e9dbbd118d4986e0a1eec595b3c2086da534436cdd9b (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  Downloading dblatex-0.3.1.1.tar.bz2 (1.2 MB)
     |████████████████████████████████| 1.2 MB 9.7 MB/s 
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-xljt60ni/dblatex_be89b4d5fb214d2f892d643248cd699b/setup.py'"'"'; __file__='"'"'/tmp/pip-install-xljt60ni/dblatex_be89b4d5fb214d2f892d643248cd699b/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-jxgn5162
         cwd: /tmp/pip-install-xljt60ni/dblatex_be89b4d5fb214d2f892d643248cd699b/
    Complete output (6 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-xljt60ni/dblatex_be89b4d5fb214d2f892d643248cd699b/setup.py", line 82
        print self._package_base
              ^
    SyntaxError: Missing parentheses in call to 'print'. Did you mean print(self._package_base)?
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/e6/bd/887d042a621631938432678e92c2314b89c682fd39acefbffe6ac27dc3d0/dblatex-0.3.1.1.tar.bz2#sha256=7b323f27c75e717536dd1f80605c40a2da187d0a50b814af2013a0f5a64c6d64 (from https://pypi.org/simple/dblatex/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.





#####
#
# Pip as root (don't!)
# 2019sep25
#
#####

# «pip-as-root» (to ".pip-as-root")
# (find-fline "~/LOGS/2019sep25.python" "when you run sudo pip")
# (find-fline "/usr/local/lib/")
# (find-fline "/usr/local/lib/python2.7/dist-packages/")
# (find-fline "/usr/local/lib/python3.5/dist-packages/")
# (find-asrootfile "/usr/local/lib/python3.5/dist-packages/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)

# (find-man "pip3")

strace -o /tmp/s2 pip
strace -o /tmp/s3 pip3

# (find-fline "/tmp/s2")
# (find-sh "sort /tmp/s2")
# (find-sh "sort /tmp/s2 | grep -v ENOENT")
# (find-sh "sort /tmp/s2 | grep -v ENOENT | grep open")
# (find-sh "sort /tmp/s3 | grep -v ENOENT | grep open")
# (find-sh "cat  /tmp/s3 | grep -v ENOENT | grep open")

# (find-fline "~/.local/lib/python2.7/site-packages/")
# (find-fline "~/.local/lib/python3.5/site-packages/")
# (find-fline "~/.local/lib/")

# (find-asrootfile "/usr/local/lib/python3.5/" "dist-packages/")
# (find-asrootfile "/home/edrx/.local/lib/python3.5/")
# (find-asrootfile "/home/edrx/.local/lib/python3.5/" "site-packages/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
pip3
pip3 install ipython

# (find-sh "pip3")
# (find-sh "pip3 list")
# (find-sh "pip3 show pycurl")




#####
#
# pip-from-git
# 2019sep25
#
#####

# «pip-from-git» (to ".pip-from-git")
# https://packages.debian.org/sid/python-pip
# https://packages.debian.org/sid/python3-pip
# https://en.wikipedia.org/wiki/Pip_(package_manager)
# https://pip.pypa.io/en/stable/
# https://pip.pypa.io/en/stable/user_guide/
# https://pip.pypa.io/en/stable/reference/
# https://pip.pypa.io/en/stable/quickstart/
# https://github.com/pypa/pip
# (find-git-links "https://github.com/pypa/pip" "pipgit")
# (find-fline "~/LOGS/2019sep25.pypa")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/pip/
cd      ~/usrc/
git clone https://github.com/pypa/pip
cd      ~/usrc/pip/

git branch --list -a
git for-each-ref
PAGER=cat git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/pip/")
# (find-gitk  "~/usrc/pip/")

# (code-c-d "pipgit" "~/usrc/pip/")
# (find-pipgitfile "")
# (find-pipgitfile "tox.ini")
# (find-pipgitfile "tox.ini" "[testenv:docs]")

<edrx> hi, I just downloaded the pip source from
       <https://github.com/pypa/pip> because I wanted to have a
       local copy of the docs, but I can't figure out how to
       compile it... I was expecting to be able to do something
       like "make docs", but it seems that it uses other tools...
       any hints?
<altendky> edrx:
           https://github.com/pypa/pip/blob/master/tox.ini#L36-L41

# (find-man "sphinx-build")
# (find-pipgitfile "docs/html/")
#
cd ~/usrc/pip/
sphinx-build -W -d _envtmpdir_/doctrees/html -b html docs/html docs/build/html
sphinx-build -W -d _envtmpdir_/doctrees/man  -b man docs/man   docs/build/man -c docs/html
#
# Extension error:
# Could not import extension pip_sphinxext (exception: No module named 'pip._internal')





#####
#
# tox
# 2019sep25
#
#####

# «tox» (to ".tox")
# https://en.wikipedia.org/wiki/Tox_(Python_testing_wrapper)
# (find-status   "tox")
# (find-vldifile "tox.list")
# (find-udfile   "tox/")
# (find-fline "/usr/share/doc/tox/html/")
# file:///usr/share/doc/tox/html/index.html
# (find-man "1 tox")

tox -h

apt-cache show tox
apt-cache search tox
apt-cache depends tox
apt-cache rdepends tox




#####
#
# virtualenv (2019)
# 2019sep25
#
#####

# «virtualenv» (to ".virtualenv")
# (find-fline "~/LOGS/2019sep25.python2" "virtualenv -p")
# (find-status   "virtualenv")
# (find-vldifile "virtualenv.list")
# (find-udfile   "virtualenv/")
# (find-status   "python3-virtualenv")
# (find-vldifile "python3-virtualenv.list")
# (find-udfile   "python3-virtualenv/")
# (find-man "1 virtualenv")
# (find-man "1 virtualenv" "-p PYTHON_EXE")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
sudo apt install virtualenv

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/myenv/
cd /tmp/
virtualenv -p python3 myenv    |& tee ov
myenv/bin/pip install tox      |& tee opi
#
# (find-fline "/tmp/myenv/")
# (find-fline "/tmp/myenv/bin/")
#
myenv/bin/python myfile.py




#####
#
# poetry
# 2019sep25 / 2023aug01
#
#####

# «poetry» (to ".poetry")
# https://python-poetry.org/docs/master/#installing-with-the-official-installer

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/.poetry/
cd /tmp/
# curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
# curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python3
  curl -sSL https://install.python-poetry.org | python3 -

# (find-fline "~/.poetry/")
# (find-fline "~/.poetry/env")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
source ~/.poetry/env
cd /tmp/
poetry new --src myproject

# Old:
# (find-fline "~/LOGS/2019sep25.python2" "poetry instead of setup.py")
# (find-fline "~/LOGS/2019sep25.python2" "poetry new --src")
# http://blog.habnab.it/blog/2013/07/21/python-packages-and-you/




#####
#
# pip, requests, virtualenv (for facebook-sdk)
# 2014aug18
#
#####

# «requests» (to ".requests")
# (find-zsh "availabledebs | sort | grep requ")
# (find-status   "python-pip")
# (find-vldifile "python-pip.list")
# (find-udfile   "python-pip/")
# (find-udfile   "python-pip/usage.txt.gz")
# (find-udfile   "python-pip/usage.rst")
# (find-status   "python3-requests")
# (find-vldifile "python3-requests.list")
# (find-udfile   "python3-requests/")
# (find-status   "python-virtualenv")
# (find-vldifile "python-virtualenv.list")
# (find-udfile   "python-virtualenv/")

# (find-pip3-links "requests")
pip3 install requests
# Requirement already satisfied: requests in /usr/lib/python3/dist-packages (2.25.1)

# (code-c-d "requests" "/usr/lib/python3/dist-packages/requests/")
# (find-requestsfile "")

# (find-fline "/usr/lib/python3/dist-packages/")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import importlib.metadata, requests, pprint
r = requests.get("https://pypi.org/pypi/requests/json")
d = r.json()
pprint.pprint(d["info"])
pprint.pprint(d["info"]["home_page"])
importlib.metadata.distribution('requests').read_text('top_level.txt').splitlines()


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
 PAGER=cat python3
import requests
help(requests)
help(help)

r = requests.get("https://pypi.org/pypi/requests/json")
# print(r.json())
pprint.pprint(r.json())



* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
PAGER=cat python3 -c '
import requests, pprint
r = requests.get("https://pypi.org/pypi/requests/json")
d = r.json()
d["info"]

data= resp.json(); data["info"]["homepage"]

pprint.pprint(r.json())
pprint.pprint(r.json().info)


pprint.pprint(r.json()["info"])



# (find-sh "curl -s https://pypi.org/pypi/requests/json | jq")

# (find-man "jq")



       this: lua5.1 -e 'import requests; r =
       requests.get("https://pypi.org/pypi/requests/json");
       pprint.pprint(r.json())'




r = requests.get('https://www.python.org')


<grym> ok, then `resp =
       requests.get("https://pypi.org/pypi/requests/json");
       print(resp.json())`





* (eepitch-shell2)
apti python-pip
sudo apt-get install python-pip python-requests python-virtualenv
sudo pip install facebook-sdk

# sudo apt-get install python-dev-all

# https://pypi.python.org/pypi/requests
# http://www.pip-installer.org/
# http://www.virtualenv.org/
# https://virtualenv.pypa.io/en/latest/
# (find-fline "/usr/local/lib/python2.7/dist-packages/")
# (find-fline "/usr/local/lib/python2.7/dist-packages/facebook.py")





#####
#
# PyPi
# 2019may21
#
#####

# «pypi» (to ".pypi")
# https://pypi.org/
# https://packaging.python.org/tutorials/installing-packages/
# (find-zsh "installeddebs | sort | grep pip")
# (find-zsh "availabledebs | sort | grep pip")
# https://packaging.python.org/guides/installing-using-linux-tools/

<BrenBarn> there's some info about pypi api here:
           https://warehouse.pypa.io/api-reference/json.html

aptrm python-pygments python3-pygments


* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd /tmp/
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py --prefix=/usr/local/

sudo pip install -U sphinx
sudo pip install -U pygments






#####
#
# facebook-sdk
# 2014aug18
#
#####

# «facebook-sdk» (to ".facebook-sdk")
# (find-angg ".emacs" "pyfb")
# https://developers.facebook.com/docs/other-sdks
# https://github.com/pythonforfacebook/facebook-sdk
# http://pythonforfacebook.com/
# (find-git-links "https://github.com/pythonforfacebook/facebook-sdk" "pyfb")

# (find-pyfbfile "")
# (find-pyfbfile "docs/")
# (find-pyfbfile ".travis.yml" "FACEBOOK_APP_ID=")
# (find-pyfbfile "examples/")
# (find-pyfbfile "examples/get_posts.py")
# (find-pyfbfile "docs/install.rst")
# (find-pyfbfile "docs/install.rst" "requests")
# (find-pyfbfile "docs/install.rst" "pip")
# (find-pyfbfile "docs/install.rst" "virtualenv")

# (find-fline "/usr/local/lib/python2.7/dist-packages/")
# (find-fline "/usr/local/lib/python2.7/dist-packages/facebook.py")





#####
#
# textwrap
# 2014aug30
#
#####

# «textwrap» (to ".textwrap")
# http://pymotw.com/2/textwrap/
# http://pymotw.com/2/articles/text_processing.html#article-text-processing
# http://docs.python.org/lib/module-textwrap.html



#####
#
# easyhtmlparser
# 2014aug28
#
#####

# «easyhtmlparser» (to ".easyhtmlparser")
# http://easyhtmlparser.sourceforge.net/
http://sourceforge.net/projects/easyhtmlparser/files/

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "~/usrc/ehp-1.3/")
rm -Rv ~/usrc/ehp-1.3/
tar -C ~/usrc/ -xvzf ~/tmp/ehp-1.3.tar.gz
cd     ~/usrc/ehp-1.3/
;; (code-c-d "ehp" "~/usrc/ehp-1.3/")
;; (find-ehpfile "")

# python setup.py install
python setup.py install --user
# Writing /home/edrx/.local/lib/python2.7/site-packages/ehp-1.3.egg-info
# (find-fline "~/.local/lib/python2.7/site-packages/")
# (find-fline "~/.local/lib/python2.7/site-packages/ehp-1.3.egg-info")

git clone ssh://olliveira@git.code.sf.net/p/easyhtmlparser/code easyhtmlparser-code





#####
#
# oilercode
# 2014aug28
#
#####

# «oilercode» (to ".oilercode")
# (find-git-links "git://git.code.sf.net/p/oiler/code" "oilercode")
# (code-c-d "oilercode" "~/usrc/code/")
# (find-oilercodefile "")
# (find-oilercodefile "python/edu/")

# (code-c-d "oilercode" "~/usrc/code/")
# (find-oilercodefile "")
# (find-oilercodefile "python/edu/")
# (find-oilercodefile "python/edu/run")
# (find-oilercodefile "python/edu/fbtxt.py")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/usrc/code/python/edu/
git pull --depth 1

cd ~/usrc/code/python/edu/


ls
python fbtxt.py fb2
python fbtxt.py fb2ah >> fb3-txt
vy fb3-txt




url = "https://www.facebook.com/sergio.martins.984991/posts/10152616093738086"
fname = "posts_sergio.martins.984991_10152616093738086"
if not file_exists(fname..".raw") then
  
end
data = curl(url)




#####
#
# faceutils (by Tau)
# 2014aug30
#
#####

# «faceutils» (to ".faceutils")
# (find-angg ".emacs" "faceutils")
# (find-fline "~/usrc/faceutils-code/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "~/.local/lib/python2.7/site-packages/" "faceutils")
rm -Rv         ~/.local/lib/python2.7/site-packages/faceutils*
rm -Rfv ~/usrc/faceutils-code/
cd      ~/usrc/
git clone git://git.code.sf.net/p/faceutils/code faceutils-code
cd      ~/usrc/faceutils-code/
python setup.py install --user |& tee osi

cd      ~/usrc/faceutils-code/
git pull
python setup.py install --user |& tee osi

# (find-gitk "~/usrc/faceutils-code/")
# (find-faceutilsfile "")


# «faceutils-wrap» (to ".faceutils-wrap")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
from faceutils import *
from textwrap import wrap
MAX = 69
dir = "/home/edrx/usrc/faceutils-code/wget/"
fname = dir + "posts_ortelladopablo_759874930744749.wget"
data0 = open(fname, 'r').read()
data = normalize(data0)
dom  = Html().feed(data)
post = str(extract_text(dom))
post = '\n'.join(wrap(post, MAX))
post = post.decode('string-escape')
print post

xs, ns = extract_comment(data)
ns = map(lambda it: '\n'.join(wrap(it, MAX)), ns)
co = '%s\n%s\n%s\n%s' % ("People who commented.", 
                           xs, 'Commentaries.', ns)
co = co.decode('string-escape')
print co

# (find-fline "~/usrc/faceutils-code/")
cd      ~/usrc/faceutils-code/




data  = normalize(data0)
dom = Html().feed(data)
print extract_text(dom)
print extract_comment(data)

fname = dir + "photofs_10204370918135974_np.104536042.1523735650.wget"




(code-c-d "faceutils" "~/usrc/faceutils-code/")
;; (find-faceutilsfile "")
;; (find-faceutilsfile "faceutils.py")
;; (find-faceutilsfile "fbtxt")
;; (find-faceutilsfile "wget/")

# (find-fline "/tmp/faceutils-code/")

Cloning into 'faceutils-code'...
warning: You appear to have cloned an empty repository.





#####
#
# Translating string.gsub to Python
# 2014sep06
#
#####

# «string.gsub.old» (to ".string.gsub")
# (find-angg "fbcache/p.py" "regexps")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
from re import sub
from re import search

REG  = '[WR]'
DATA ='/W/photos/W/WR'

def replace(match):
    REP = { 'W':'([^/]+)',
            'R':'(.*)'}
    return REP[match.group(0)]

print sub(REG, replace, DATA)

REG = "/([^/]+)/photos/([^/]+)/([^/]+)(.*)"
DATA = "/398254483624546/photos/a.398287033621291.1073741830.398254483624546/480321305417863/?type=1"

item = search(REG, DATA)
print item.groups()

"photos_%s_%s_%s" % item.groups()[:3]
"photos_%s_%s_%s".count("%")



# «string.gsub» (to ".string.gsub")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
# (find-faceutilsfile "url.py")
# (find-angg "fbcache/p.py")

import re

def string_format (fmt, tuple):
  return fmt % (tuple[:fmt.count("%s")])
def string_match (str, r):
  return re.search(r, str).groups()

r = "/([^/]+)/photos/([^/]+)/([^/]+)(.*)"
r = "^/([^/]+)/photos/([^/]+)/([^/]+)(.*)$"
str = "/398254483624546/photos/a.3.30.39824546/480863/?type=1"
str = "/398254483624546/photos/a.3.30.39824546/480863/?type=1"
m = re.search(r, str)
print m
print m.groups()
print re.search(r, str).groups()

re.escape(r)

# Test:
string_format("<%s_%s>", ("aa", "bb", "cc"))
# string_format(fmt, string_match(str, r))



    lambda (m): return tbl[m.group(0)]




item = re.search(indi, str)
        try:
            xs = item.groups()
        except AttributeError:
            pass
        else:
            return indj % xs[:indz]




import re


search(re, str).groups()

tbl = {"a":"AA", "b":"BB"}



re.search


def string_gsub_s (str, re, repl_str):
  return
def string_gsub_f (str, re, repl_f):
  return
def string_gsub_t (str, re, repl_str):
  return

f = lambda




def string_match (str, re):
  return


# (find-pydoc "howto/regex")
# (find-pydoc "howto/regex#search-and-replace")
# (find-pydoc "library/re")
# (find-pydoc "library/stdtypes#str.count")
# (find-pydoc "reference/executionmodel#naming")
# (find-pydoc "reference/expressions#lambda")








#####
#
# encoding
# 2014sep11
#
#####

# «encoding» (to ".encoding")
# SyntaxError: Non-ASCII character '\xc2' in file foo.py on line 3,
# but no encoding declared; see
# http://www.python.org/peps/pep-0263.html
# for details
# (find-anggfile "fbcache/p.py" "vim: set fileencoding=latin-1")




#####
#
# Scope (of variables)
# 2014sep21
#
#####

# «scope» (to ".scope")
# (find-pydoc "reference/executionmodel")
# (find-pydoc "tutorial/classes")
# (find-pydoc "tutorial/classes#python-scopes-and-namespaces")



#####
#
# import
# 2014oct01
#
#####

# «import» (to ".import")
# (find-pydoc  "tutorial/index")
# (find-pydoc  "reference/import")
# (find-pydoc  "reference/simple_stmts#the-import-statement")
# (find-pydoc  "tutorial/modules")
# (find-pydoc  "tutorial/modules#more-on-modules")
# (find-pydocr "tutorial/modules#more-on-modules" "from fibo import *")
# (find-pydoc  "library/importlib")
# (find-pydoc  "library/importlib#module-importlib")
# (find-pydoc  "library/importlib#importlib.import_module")
# https://github.com/drathier/stack-overflow-import
# https://stackoverflow.com/questions/67631/how-do-i-import-a-module-given-the-full-path

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import sys
sys.path.append("/home/edrx/luatree/")
import luatree



#####
#
# importlib
# 2022aug23
#
#####

# «importlib»  (to ".importlib")
# (find-pydoc "library/importlib")
# (find-pydoc "library/importlib.metadata")
# (find-pydoc  "library/importlib.metadata#distributions")
# (find-pydocw "library/importlib.metadata#distributions")
# (find-pydoc  "library/importlib.metadata#package-distributions")
# (find-pydocw "library/importlib.metadata#package-distributions")
# (find-fline "~/LOGS/2022oct19.python" "importlib.metadata")
# (find-fline "~/LOGS/2024mar04.python")
# (find-fline "~/LOGS/2024mar04.python2")
# (find-importlib-links "PIL")
# (find-pip3-links "sphinx")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import importlib.metadata, pprint
dist = importlib.metadata.distribution("sphinx")
dist.read_text('top_level.txt').splitlines()
pprint.pprint(dist.files)
md = dist.metadata
md.keys()
md["Name"]
md["Version"]
md["Summary"]
md["Home-Page"]


# (find-fline "~/LOGS/2022aug22.emacs" "it's actually importlib")
# https://cyber.com.au/~twb/tmp/secrets.pyz
# (find-fline "$S/https/cyber.com.au/~twb/tmp/" "secrets.pyz")
# (find-fline "$S/https/cyber.com.au/~twb/tmp/secrets.pyz")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "~/usrc/secrets/")
rm -Rv ~/usrc/secrets/
mkdir  ~/usrc/secrets/
cd     ~/usrc/secrets/
unzip $S/https/cyber.com.au/~twb/tmp/secrets.pyz

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)
import importlib.metadata
from pprint import pprint
d = importlib.metadata.distribution('sphinx')
pprint(d.files)
d.read_text('top_level.txt').splitlines()





dist.files[:3]






#####
#
# inspect
# 2020oct15
#
#####

# «inspect»  (to ".inspect")
# https://pymotw.com/2/inspect/
# https://www.tutorialspoint.com/inspect-live-objects-in-python
# https://gist.github.com/amitsaha/3486802

# (find-sh "locate python | grep inspect")
# (find-pydoc "library/inspect")
# (find-pydoc "library/inspect#module-inspect")
# (find-pydoc "library/inspect#classes-and-functions")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import re
import inspect
# import pprint
from pprint import pprint

re
type(re)

pprint(inspect.getmembers(re))


# (find-fline "~/LOGS/2022jun02.emacs")
# https://bpa.st/E2HQ

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import inspect
class Foo:
    def __init__(self, x):
        self.x = x

my_foo = Foo(x=1)
inspect.getmembers(my_foo)
dir(my_foo)
repr(my_foo)




#####
#
# re
# 2020oct15
#
#####

# «re»  (to ".re")
# (find-books "__comp/__comp.el" "python-downey")

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)
import re
re
type(re)



#####
#
# re.sub
# 2019aug04
#
#####

# «re.sub» (to ".re.sub")
# (find-pydoc "library/re#re.sub")

# (find-man "python3")
# (find-angg ".pythonrc.py")

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)
import re
re
type(re)

ee_dofile("/tmp/foo.py")




#####
#
# u8_to_l1
# 2014oct13
#
#####

# «u8_to_l1» (to ".u8_to_l1")
# (find-angg "LUA/lua50init.lua" "u8_to_l1")
# (find-fline "~/LOGS/2014oct12.eev")
# (find-fline "~/LOGS/2014oct12.python")
# http://nedbatchelder.com/text/unipain.html
# https://www.youtube.com/watch?v=sgHbC6udIqc
# (find-youtubedl-links "/sda5/videos/" "Pragmatic_Unicode_or_How_do_I_stop_the_pain" "sgHbC6udIqc" ".mp4" "pragmaticunicode")
# (code-video "pragmaticunicodevideo" "/sda5/videos/Pragmatic_Unicode_or_How_do_I_stop_the_pain-sgHbC6udIqc.mp4")
# (find-pragmaticunicodevideo)
# (find-pragmaticunicodevideo "0:00")
# (find-pragmaticunicodevideo "9:16" "Python 2")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import re
str1 = u'\xc3\x80'
str2 = u'abc \xc3\x80 def'
'\xc3\x80'
u'\xc3\x80'

chr(192)

def u8_to_l1(str):
  f = lambda (m): chr(ord(m.group(0)[1]) + 64)
  return re.sub("\xc3[\x80-\xbf]", f, str)

u8_to_l1('\xc3\x80')
u8_to_l1(u'\xc3\x80')

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)

str1 = '\xc3\x80'
str2 = 'abc \xc3\x80 def'
'\xc3\x80'
'\xc3\x80'

chr(192)

# file:///usr/share/doc/python3.2/html/reference/expressions.html#lambda
def u8_to_l1(str):
  f = lambda m: chr(ord(m.group(0)[1]) + 64)
  return re.sub("\xc3[\x80-\xbf]", f, str)

u8_to_l1('\xc3\x80')
u8_to_l1(u'\xc3\x80')




#####
#
# dict methods
# 2014oct25
#
#####

# «dict» (to ".dict")
# (find-pydoc "tutorial/datastructures#dictionaries")
# (find-pydoc "library/stdtypes#mapping-types-dict")
# (find-pydoc "library/stdtypes#dict.items")
# (find-pydoc "c-api/dict")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127
tel
tel['jack']
del tel['sape']
tel['irv'] = 4127
tel
tel.keys()
'guido' in tel
dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{x: x**2 for x in (2, 4, 6)}
dict(sape=4139, guido=4127, jack=4098)





#####
#
# print
# 2016jul23
#
#####

# «print» (to ".print")
# https://docs.python.org/2.7/library/functions.html#print
# https://docs.python.org/2.7/reference/simple_stmts.html
# https://docs.python.org/2.7/reference/simple_stmts.html#the-print-statement
# (find-pydoc "library/functions#print")
# (find-pydoc "whatsnew/3.0#print-is-a-function")
# (find-pydoc "reference/simple_stmts#the-print-statement")

# Old: print "The answer is", 2*2
# New: print("The answer is", 2*2)




#####
#
# Tuples
# 2016jul23
#
#####

# «tuples» (to ".tuples")
# «tut-tuples» (to ".tut-tuples")
# (find-pydoc "tutorial/datastructures")
# (find-pydoc "tutorial/datastructures#tuples-and-sequences")

# (to "print")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
t = 12345, 54321, 'hello!'
t[0]
t
# Tuples may be nested:
u = t, (1, 2, 3, 4, 5)
u
# Tuples are immutable:
t[0] = 88888
# but they can contain mutable objects:
v = ([1, 2, 3], [3, 2, 1])
v



#####
#
# Tutorial: def (and local variables)
# 2016jul23
#
#####

# «tut-def»  (to ".tut-def")
# «def»      (to ".def")
# (find-pydoc  "tutorial/controlflow#defining-functions")
# (find-pydocr "tutorial/controlflow#defining-functions")
# (find-pydoc  "reference/compound_stmts#def")
# (find-pydoc  "reference/executionmodel#naming")
# (find-downeytppage (+ 22 61) "6. Fruitful Functions.")
# https://docs.python.org/3/tutorial/controlflow.html#defining-functions
# https://docs.python.org/2.7/tutorial/controlflow.html#defining-functions

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
def fib(n):    # write Fibonacci series up to n
    """Print a Fibonacci series up to n."""
    a, b = 0, 1
    while a < n:
        print a,
        # print(a, end=' ')
        a, b = b, a+b
    # print()

# Now call the function we just defined:
fib(2000)

fib
f = fib
f(100)
fib(0)
print(fib(0))

def fib2(n):  # return Fibonacci series up to n
    """Return a list containing the Fibonacci series up to n."""
    result = []
    a, b = 0, 1
    while a < n:
        result.append(a)    # see below
        a, b = b, a+b
    return result

f100 = fib2(100)    # call it
f100                # write the result









#####
#
# Comprehension
# 2016aug23
#
#####

# «comprehension» (to ".comprehension")
# (find-pydoc "tutorial/datastructures#list-comprehensions")
# (find-pydoc "tutorial/datastructures#nested-list-comprehensions")
# http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/
# Also: dict comprehensions, set comprehensions




#####
#
# Multiline comments
# 2019jun15
#
#####

# «multiline-comments» (to ".multiline-comments")
# https://stackoverflow.com/questions/7696924/way-to-create-multiline-comments-in-python




#####
#
# lambda
# 2019jun15
#
#####

# «lambda» (to ".lambda")
# (find-pydoc "reference/expressions#lambda")
# (find-pydoc "reference/expressions#expression-lists")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
lambda: 2+3

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)
lambda: 2+3

# (find-angg ".pythonrc.py")




#####
#
# after
# 2019jul02
#
#####

# «after» (to ".after")
# https://gitlab.com/juanmeleiro/after

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/after/
cd      ~/usrc/
git clone https://gitlab.com/juanmeleiro/after
cd      ~/usrc/after/
# (find-fline "~/usrc/")
# (find-fline "~/usrc/after/")

# (code-c-d "after" "~/usrc/after/")
# (find-afterfile "")
# (find-afterfile "after")
# (find-gitk "~/usrc/after/")





#####
#
# graphics.py
# 2019jul17
#
#####

# «graphics.py» (to ".graphics.py")
# https://www.youtube.com/watch?v=R39vTAj1u_8
# (find-anggfile "PYTHON/gra.py")

# https://mcsp.wartburg.edu/zelle/python/
# https://mcsp.wartburg.edu/zelle/python/graphics.py
# https://mcsp.wartburg.edu/zelle/python/graphics/graphics/index.html
# https://mcsp.wartburg.edu/zelle/python/graphics/graphics.pdf
# (find-sh "cp -v $S/https/mcsp.wartburg.edu/zelle/python/graphics.py ~/PYTHON/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)




#####
#
# python-for-cs1
# 2019jul17
#
#####

# «python-for-cs1» (to ".python-for-cs1")
# https://mcsp.wartburg.edu/zelle/python/

# Picking a Language for Introductory CS - Why I don't like Python ()
# https://medium.com/@drmarkclewis/picking-a-languages-for-introductory-cs-the-argument-againstpython-4331cca26cfa
# https://dynamicsofprogramming.blogspot.com/2019/02/problems-with-python-for-introductory-cs.html



#####
#
# turtle
# 2019jul17
#
#####

# «turtle» (to ".turtle")
# https://docs.python.org/3/library/turtle.html
# (find-pydoc "library/turtle")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
from turtle import *
color('red', 'yellow')
begin_fill()
while True:
    forward(200)
    left(170)
    if abs(pos()) < 1:
        break

end_fill()
done()




#####
#
# help
# 2019jul17
#
#####

# «help» (to ".help")
# (find-pydoc "library/functions#help")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import os
os.environ["PAGER"] = "cat"
help(os)
help(help)



#####
#
# Books about Python
# 2019aug03
#
#####

# «books» (to ".books")
# (find-books "__comp/__comp.el" "python")
# https://realpython.com/best-python-books/
# https://realpython.com/best-python-books/#fluent-python-clear-concise-and-effective-programming
# https://realpython.com/best-python-books/#think-python
# https://realpython.com/best-python-books/#fluent-python
# https://stackabuse.com/the-best-python-books-for-all-skill-levels/
# https://hackr.io/blog/best-python-books-for-beginners-and-advanced-programmers



#####
#
# popen (is obsolete; use subprocess)
# 2019aug03
#
#####

# «popen» (to ".popen")
# (find-books "__comp/__comp.el" "python")
# (find-downeytppage (+ 22 171) "Pipes")
# (find-pydoc  "library/os#os.popen")
# (find-pydoc  "library/subprocess")
# (find-pydoc  "library/subprocess#popen-constructor")
# (find-pydoc  "library/subprocess#replacing-shell-pipeline")
# (find-pydocr "library/subprocess#replacing-shell-pipeline")
# (find-pydocr "library/subprocess#replacing-shell-pipeline" "stdin=p1.stdout")
# (find-pydocw "library/subprocess#replacing-shell-pipeline" "stdin=p1.stdout")
# (find-pydoc  "library/subprocess#subprocess.PIPE")
# (find-pydoc  "library/subprocess#subprocess.Popen.communicate")
# (find-pydoc  "library/subprocess#subprocess.Popen.stdin")
# (find-pydoc  "library/subprocess#subprocess.run")
# (find-pydoc  "library/io#io.StringIO")
# (find-angg "LUA/lua50init.lua" "getoutput")
# (find-fline "~/LOGS/2022aug22.emacs" "text=True, check=True")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import subprocess
o = subprocess.run(["ls", "-l"])
o = subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
o = subprocess.run("ls -l /dev/null".split(), stdout=subprocess.PIPE)
o
o.stdout

def getoutput(cmd):
  return subprocess.run(cmd.split(), stdout=subprocess.PIPE).stdout

getoutput("ls -l /dev/null")

subprocess.PIPE

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
import subprocess
import io
p = subprocess.run("tac", input="a\nbb\nccc\n", stdout=subprocess.PIPE, text=True)
p.stdout

totac = io.StringIO()
totac.write('a\nbb\nccc\n')


p = subprocess.run("tac", stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.stdin
p.stdin.write('a\nbb\nccc\n')

import subprocess


p
CompletedProcess(args='tac', returncode=0, stdout='abc')

p = subprocess.run("tac", input=totac, stdout=subprocess.PIPE)
p = subprocess.run("tac", stdin=totac, stdout=subprocess.PIPE)
p = subprocess.run("tac", stdin=b'foo', stdout=subprocess.PIPE)
p.stdin

https://docs.python.org/3/library/subprocess.html#replacing-shell-pipeline

# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   File "/usr/lib/python3.9/subprocess.py", line 505, in run
#     with Popen(*popenargs, **kwargs) as process:
#   File "/usr/lib/python3.9/subprocess.py", line 829, in __init__
#     errread, errwrite) = self._get_handles(stdin, stdout, stderr)
#   File "/usr/lib/python3.9/subprocess.py", line 1588, in _get_handles
#     p2cread = stdin.fileno()
# io.UnsupportedOperation: fileno


# https://0x0.st/oLSF.txt



#####
#
# bytes
# 2019aug03
#
#####

# «bytes» (to ".bytes")
# (find-pydoc "library/functions#func-bytes")
# (find-pydoc "library/functions#func-bytearray")
# (find-pydoc "library/stdtypes#bytes")
# (find-pydoc "library/stdtypes#binaryseq")
# (find-pydoc "reference/lexical_analysis#strings")
# (find-downeytppage (+ 22 170) "The result is a bytes object")
# (find-downeytptext (+ 22 170) "The result is a bytes object")




#####
#
# split
# 2019aug03
#
#####

# «split» (to ".split")
# file:///usr/share/doc/python3.5/html/library/stdtypes.html#str.split
# file:///usr/share/doc/python2.7/html/glossary.html#term-universal-newlines
# file:///usr/share/doc/python3.5/html/glossary.html#term-universal-newlines

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
"Hello   world ".split()




#####
#
# vararg-functions
# 2019aug04
#
#####

# «vararg-functions» (to ".vararg-functions")
# https://www.python.org/dev/peps/pep-3102/
# file:///usr/share/doc/python3.5/html/reference/compound_stmts.html#function-definitions
# If the form "*identifier" is present, it is initialized to a tuple
# receiving any excess positional parameters, defaulting to the empty
# tuple.




#####
#
# pandas
# 2019sep18
#
#####

# «pandas» (to ".pandas")
# https://www.learndatasci.com/tutorials/python-pandas-tutorial-complete-introduction-for-beginners/
# https://www.pythonforengineers.com/introduction-to-pandas/ Introduction to Pandas with Practical Examples



#####
#
# Elpy, the Emacs Python IDE
# 2019sep20
#
#####

# «elpy» (to ".elpy")
# <dale> VG234: I like https://github.com/jorgenschaefer/elpy.
# (find-git-links "https://github.com/jorgenschaefer/elpy" "elpy")
# https://github.com/jorgenschaefer/elpy
# https://elpy.readthedocs.io/en/latest/index.html
# https://medium.com/analytics-vidhya/managing-a-python-development-environment-in-emacs-43897fd48c6a
# https://realpython.com/emacs-the-best-python-editor/
# https://news.ycombinator.com/item?id=35507001 REBL (datomic.com)
# (find-fline "~/LOGS/2024dec12.emacs" "make it bearable with elpy mode")

# (find-epackage-links 'elpy "elpy" t)
# (find-epackage       'elpy)

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/elpy/
cd      ~/usrc/
git clone https://github.com/jorgenschaefer/elpy
cd      ~/usrc/elpy/

git branch --list -a
git for-each-ref
PAGER=cat git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/elpy/")
# (find-gitk  "~/usrc/elpy/")

# (code-c-d "elpy" "~/usrc/elpy/")
# (find-elpyfile "")
# (find-elpyfile "README.rst")
# (find-elpyfile "README.rst" "Elpy, the Emacs Python IDE")





#####
#
# naufuto (a telegram bot by Lucas Cavalcante)
# 2019sep25
#
#####

# «naufuto» (to ".naufuto")
# (find-git-links "https://github.com/LcavalcanteR/naufuto" "naufuto")
# https://github.com/LcavalcanteR/naufuto

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/naufuto/
cd      ~/usrc/
git clone https://github.com/LcavalcanteR/naufuto
cd      ~/usrc/naufuto/

git branch --list -a
git for-each-ref
PAGER=cat git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/naufuto/")
# (find-gitk  "~/usrc/naufuto/")

# (code-c-d "naufuto" "~/usrc/naufuto/")
# (find-naufutofile "")
# (find-naufutofile "naufuto.py")




#####
#
# Hy is a Lisp dialect that is embedded in Python
# 2019nov14
#
#####

# «hy» (to ".hy")
# http://docs.hylang.org/en/stable/quickstart.html
# https://docs.hylang.org/en/alpha/




#####
#
# codespell
# 2020feb07
#
#####

# «codespell» (to ".codespell")
# (find-fline "~/.local/lib/python3.7/site-packages/" "codespell")
# (find-fline "~/.local/lib/python3.7/site-packages/codespell_lib/_codespell.py")

# (setq last-kbd-macro (kbd "M-h M-2 (find-fline SPC \" 2*<delete> M-z : C-y <left> \" <delete> SPC\n M-z : C-y DEL SPC \" <delete> M-z = C-y 3*<left> C-k \") C-a <down> RET"))

cd /tmp/eev/
codespell
codespell --help
# (find-sh "codespell --help")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
pip3 install codespell
pip3 show codespell
pip3 help
pip3 list




#####
#
# pygments
# 2020dec24
#
#####

# «pygments»  (to ".pygments")
# (find-es "pygments" "pygments")



#####
#
# pygments-pip3
# 2024apr28
#
#####

# «pygments-pip3»  (to ".pygments-pip3")
# (find-es "pygments" "pygments-pip3")





#####
#
# plot3D
# 2021apr19
#
#####

# «plot3D»  (to ".plot3D")

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
import matplotlib.pyplot as plt

fig = plt.figure()
ax = plt.axes(projection="3d")
x = [0, 0, 0, 0, 1, 1, 1, 1]
y = [0, 0, 1, 1, 0, 0, 1, 1]
z = [0, 1, 0, 1, 0, 1, 0, 1]
verts = [list(zip(x, y, z))]
print(verts)

ax.plot3D(x, y, z, 'gray')
plt.show()



import numpy as np

ar = np.array([[1,2,3], [3,4,6]])
print(np.moveaxis(ar, 0, 1))





#####
#
# dictionaries
# 2021jul09
#
#####

# «dictionaries»  (to ".dictionaries")
# file:///usr/share/doc/python3.7/html/tutorial/datastructures.html#dictionaries
# file:///usr/share/doc/python3.7/html/library/stdtypes.html#dict
# file:///usr/share/doc/python3.7/html/glossary.html#term-iterable




#####
#
# fsmunoz-k8s-diagrams
# 2021oct09
#
#####

# «fsmunoz-k8s-diagrams»  (to ".fsmunoz-k8s-diagrams")
# https://github.com/fsmunoz/k8s-diagrams/blob/main/k8s-diagrams.ipynb
# https://github.com/fsmunoz/k8s-diagrams
# (find-git-links "https://github.com/fsmunoz/k8s-diagrams" "k8sdiagrams")
# (code-c-d "k8sdiagrams" "~/usrc/k8s-diagrams/")
# (find-k8sdiagramsfile "")
# (find-k8sdiagramsfile "k8s-diagrams.ipynb")

http://finisterra.motd.org/?p=302 Interactive embedded development with uLisp, Arduino and Emacs



#####
#
# Understanding Python through its builtins
# 2021oct11
#
#####

# «all-the-builtins»  (to ".all-the-builtins")
https://news.ycombinator.com/item?id=28819030 Understanding Python through its builtins (sadh.life)
https://sadh.life/post/builtins/



#####
#
# doctest
# 2021nov28
#
#####

# «doctest»  (to ".doctest")
# https://docs.python.org/3/library/doctest.html




#####
#
# breakpoint
# 2022mar01
#
#####

# «breakpoint»  (to ".breakpoint")
# file:///usr/share/doc/python3.9/html/library/functions.html#breakpoint
# file:///usr/share/doc/python3.9/html/library/bdb.html#bdb.Breakpoint





#####
#
# Python REPL in Eshell in M$ Windows
# 2022jun04
#
#####

# «python-repl-in-eshell»  (to ".python-repl-in-eshell")
# https://lists.gnu.org/archive/html/help-gnu-emacs/2022-06/msg00019.html



#####
#
# conda
# 2022aug14
#
#####

# «conda»  (to ".conda")
# (find-fline "~/LOGS/2022aug13.emacs" "conda-myths-and-misconceptions")
# https://jakevdp.github.io/blog/2016/08/25/conda-myths-and-misconceptions/
# https://peps.python.org/pep-0020/#the-zen-of-python




#####
#
# pep-503
# 2022oct19
#
#####

# «pep-503»  (to ".pep-503")
# https://peps.python.org/pep-0503/
# (find-sh "locate -i python | grep 503")




#####
#
# pexpect
# 2022nov10
#
#####

# «pexpect»  (to ".pexpect")
# (find-angg ".emacs" "ee-rstdoc-:pexpect")
# (find-pip3-links      "pexpect")
# (find-importlib-links "pexpect")
# (find-pypi-links      "pexpect")
# https://pexpect.readthedocs.io/
# https://pexpect.readthedocs.io/en/stable/
# https://github.com/pexpect/pexpect
# (find-git-links "https://github.com/pexpect/pexpect" "pexpect")
# (code-c-d "pexpect" "~/usrc/pexpect/")
# (find-pexpectfile "")
# (find-pexpectfile "examples/")
# (find-pexpectfile "doc/")
# (find-pexpectfile "doc/Makefile")
# (find-pexpectfile "doc/requirements.txt")
# (find-fline "~/LOGS/2022nov10.python" "pip install -r doc/requirements.txt")
# (find-pexpectdoc "index")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/pexpect/
cd      ~/usrc/
git clone https://github.com/pexpect/pexpect
cd      ~/usrc/pexpect/

cd      ~/usrc/pexpect/doc/
make html

cd      ~/usrc/pexpect/
python3 -m pip install -r doc/requirements.txt

# sphinx-build -b html -d _build/doctrees   . _build/html
# Running Sphinx v4.1.2
# 
# Extension error:
# Could not import extension sphinxcontrib_github_alt (exception: No module named 'sphinxcontrib_github_alt')
# make: *** [Makefile:45: html] Error 2

# (find-sh "locate pexpect")




#####
#
# xonsh
# 2022nov11
#
#####

# «xonsh»  (to ".xonsh")
# https://itsfoss.com/xonsh-shell/
# https://itsfoss.com/basic-terminal-tips-ubuntu/
# https://github.com/anki-code/xonsh-cheatsheet#basics
# https://xon.sh/
# https://xon.sh/contents.html




#####
#
# iterable
# 2024feb24
#
#####

# «iterable»  (to ".iterable")
# (find-pydoc "c-api/iterator")
# (find-pydoc "library/inspect")
# (find-pydoc "library/stdtypes")
# (find-pydoc "tutorial/classes")
# (find-pydoc "tutorial/classes#iterators")



#####
#
# pillow
# 2024mar04
#
#####

# «pillow»  (to ".pillow")
# (find-angg ".emacs" "ee-rstdoc-:pillow")
# (find-es "drawtree" "pymag-trees")
# (find-status   "python3-pil")
# (find-vldifile "python3-pil:amd64.list")
# (find-udfile   "python3-pil/")
# (find-status   "python-pil-doc")
# (find-vldifile "python-pil-doc.list")
# (find-udfile   "python-pil-doc/")
# (find-importlib-links "PIL" "pillow")

https://pypi.org/project/pillow/
https://python-pillow.org/
https://en.wikipedia.org/wiki/Python_Imaging_Library
https://pillow.readthedocs.io/en/stable/
https://gethowstuff.com/python-pillow-pil-tutorial-examples/




#####
#
# midi-synth
# 2024mar06
#
#####

# «midi-synth»  (to ".midi-synth")
# https://massimo-nazaria.github.io/midi-synth.html
# https://github.com/massimo-nazaria/midi-synth
# (find-git-links "https://github.com/massimo-nazaria/midi-synth" "midisynth")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
sudo apt-get install -y python3
sudo apt-get install -y python3-numpy
sudo apt-get install -y python3-mido
sudo apt-get install -y python3-pip	
sudo apt-get install -y portaudio19-dev
python3 -m pip install pyaudio
sudo apt-get install python3-scipy

# (code-c-d "midisynth" "~/usrc/midi-synth/")
# (find-midisynthfile "")
# (find-midisynthfile "README.md")

cd ~/usrc/midi-synth/
python3 synth.py elise.mid




#####
#
# pip3-repl
# 2024may05
#
#####

# «pip3-repl»  (to ".pip3-repl")
# (find-fline "/home/edrx/.local/bin/pip3")
# (find-fline "~/.cache/pip/")

* (eepitch-python3)
* (eepitch-kill)
* (eepitch-python3)
import re
import sys
from pip._internal.cli.main import main




#####
#
# venv-2024may13
# 2024may13
#
#####

# «venv-2024may13»  (to ".venv-2024may13")
# (find-pythonvenv-links "/tmp/test-venv/" "helloworld")
# (find-efunction 'find-pythonvenv-links)
# (find-pydoc "distributing/index#installing-the-tools")
# (find-pydoc "library/venv#module-venv")

* (eepitch-bash)
* (eepitch-kill)
* (eepitch-bash)
* (code-c-d "thisvenv" "/tmp/test-venv/")
** (find-thisvenvfile "")

rm -Rv /tmp/test-venv/
mkdir  /tmp/test-venv/
cd     /tmp/test-venv/
python3 -m venv .venv/
source          .venv/bin/activate

** (find-thisvenvsh "find | sort")
** (find-thisvenvsh "find * | sort")
** (find-thisvenvfile "")
** (find-thisvenvfile ".venv/bin/")
** (find-thisvenvfile ".venv/bin/activate")

pip3 install setuptools wheel twine
pip3 freeze
pip3 freeze | tee requirements.txt
cat requirements.txt

deactivate
rm -Rv /tmp/test-venv/.venv/
python3 -m venv /tmp/test-venv/.venv
pip3 install -r requirements.txt

# requests has four dependencies

cd     /tmp/test-venv/
source bin/activate
find * | sort | grep pkgs


pip3 freeze
pip3 freeze | pkgs.txt

find * | sort | grep pkgs




#####
#
# python-lsp-server
# 2024may18
#
#####

# «python-lsp-server»  (to ".python-lsp-server")
# (find-fline "~/LOGS/2024may18.emacs" "python-lsp-server")



#####
#
# shiv
# 2024jun05
#
#####

# «shiv»  (to ".shiv")
# https://shiv.readthedocs.io/en/latest/
# (find-fline "~/LOGS/2024jun05.emacs" "<grym> shiv.rtfd.org")



#####
#
# Buscador de meteoritos (Gabriel e Wesley)
# 2024aug13
#
#####

# «buscador-de-meteoritos»  (to ".buscador-de-meteoritos")
# https://colab.research.google.com/drive/1y0KkAOfw8KwAYWfFhGrC_GhWJR4LQWI2?usp=sharing



#####
#
# timestr
# 2024sep13
#
#####

# «timestr»  (to ".timestr")
# (find-pydoc "reference/expressions#conditional-expressions")
# (find-pydoc "library/stdtypes#printf-style-string-formatting")
# https://en.wikipedia.org/wiki/Ternary_conditional_operator#Python

* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
m       = lambda n: n  % 60
d       = lambda n: n // 60
mmss    = lambda n:      "%d:%02d" %           (d(n), m(n))
hhmmss  = lambda n: "%d:%02d:%02d" % (d(d(n)),m(d(n)),m(n))
timestr = lambda n: mmss(n) if n < 3600 else hhmmss(n)
timestr(9)
timestr(369)
timestr(3609)

from math import floor
f      = "find-acmetourvideo"
sexp   = lambda n,text: '(%s "%s" "%s")' % (f, timestr(floor(n)), text)
sexp(200, "foo")


q       = lambda s: '"' + s + '"'

from youtube_transcript_api import YouTubeTranscriptApi
from math import floor
vid    = "dP1xVpMPn8M"
f      = "find-acmetourvideo"
tr     = YouTubeTranscriptApi.get_transcript(vid)





#####
#
# Reddit: emacs_291_as_ide_for_python
# 2024oct04
#
#####

# «emacs_291_as_ide»  (to ".emacs_291_as_ide")
# https://www.reddit.com/r/emacs/comments/15wr8xu/emacs_291_as_ide_for_python/



#####
#
# Emacs, Python, Treesitter and Eglot (gist by habamax)
# 2024oct04
#
#####

# «habamax»  (to ".habamax")
# https://gist.github.com/habamax/290cda0e0cdc6118eb9a06121b9bc0d7

(setq major-mode-remap-alist
      '((python-mode . python-ts-mode)))




#####
#
# From vanilla Emacs to Python IDE - video by Skybert hacks
# 2024oct04
#
#####

# «skybert»  (to ".skybert")
# https://www.youtube.com/watch?v=JmmTUIahB1U
# (find-yttranscript-links "skybert" "JmmTUIahB1U")
# (find-skybertvideo "0:47" "pyrite was the one that worked")



#####
#
# pyxel
# 2024nov28
#
#####

# «pyxel»  (to ".pyxel")
# https://blog.garambrogne.net/pyxel-initiation-en.html



https://slinkp.com/python-emacs-lsp-20231229.html

https://github.com/norvig/pytudes/blob/main/ipynb/SplitStates.ipynb




file:///usr/share/doc/python3.5/html/library/frameworks.html
file:///usr/share/doc/python3.5/html/library/cmd.html




https://docs.python.org/3/library/turtle.html







https://www.facebook.com/jornalanovademocracia/photos/a.288492381220437.66632.187051701364506/679809862088685/
https://www.facebook.com/permalink.php?story_fbid=921476867869306&id=347772661906399
https://www.facebook.com/photo.php?fbid=10201336092313990&set=a.1569106477271.73917.1523735650

Something that would output what it got from FB in a raw-ish form -
JSON? - would be ideal. Any hints welcome, as I am trying to write a
set of scripts for caching texts posted to FB that I may want to
access quickly later... the code that converts URLs to local file
names is ready - the URLs above are associated to files with these
names,

posts_sergio.martins.984991_10152616093738086
photos_jornalanovademocracia_a.288492381220437.66632.187051701364506_679809862088685
pesfi_921476867869306_347772661906399
photofs_10201336092313990_a.1569106477271.73917.1523735650



http://sourceforge.net/p/oiler/code/ci/master/tree/python/edu/fb4-txt
http://sourceforge.net/p/oiler/code/ci/master/tree/python/edu/

cd ~/code/edu-code
ls
python fbtxt.py fb2 >> fb3-txt
vy fb3-txt












# (find-efunction 'find-gitclone-links)


# (find-man "isympy")







http://python.mirocommunity.org/
http://blip.tv/episode/5594214 About Python Namespaces (and Code Objects)

# http://rgruet.free.fr/PQR2.3.html
# http://rgruet.free.fr/bin/modern.css
# http://rgruet.free.fr/bin/classic.css
# http://rgruet.free.fr/bin/highcontrast.css
# http://rgruet.free.fr/bin/printing.css
# http://rgruet.free.fr/bin/styleswitcher.js

# http://stackoverflow.com/questions/17988/how-to-learn-python
# http://stackoverflow.com/questions/457757/what-is-the-best-python-book-for-experienced-programmers
# http://stackoverflow.com/questions/623763/what-are-some-recommended-high-quality-non-basic-python-books
# http://stackoverflow.com/questions/947942/advanced-python-programming-book-like-effective-c
# http://stackoverflow.com/questions/tagged/python+books

http://www.swaroopch.org/notes/Python

http://docs.python.org/tutorial/classes.html

http://rgruet.free.fr/

http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
http://www.effbot.org/zone/python-objects.htm
http://www.dabeaz.com/writing.html
http://www.dabeaz.com/ply/index.html






http://en.wikipedia.org/wiki/PyPy


# http://www.dabeaz.com/ply/
# (find-status   "python-ply")
# (find-vldifile "python-ply.list")
# (find-udfile   "python-ply/")


Cairo:
# http://arstechnica.com/articles/columns/linux/linux-20050822.ars
# (find-zsh "availabledebs | sort | grep cairo")

apti python-cairo-dev

http://code.google.com/p/soc/wiki/PythonStyleGuide#Naming


I would recommend that you chuck the obsolete os.popen() permanently and
learn the subprocess module: you will be much happier. Setting bufsize=0
(which is the default) should give you unbuffered output from the process.
-- Nick Dokos, org-mode-list, 2012feb08

http://codecondo.com/10-ways-to-learn-python/


https://www.facebook.com/sergio.martins.984991/posts/10152810706878086

https://blog.udemy.com/python-tutorial/

# file:///usr/share/doc/python2.7/html/library/re.html
# file:///usr/share/doc/python2.7/html/howto/regex.html
# file:///usr/share/doc/python2.7/html/howto/regex.html#search-and-replace
# file:///usr/share/doc/python2.7/html/reference/expressions.html#lambda
# file:///usr/share/doc/python2.7/html/reference/executionmodel.html#naming

https://www.python.org/~guido/
https://www.stavros.io/tutorials/python/

http://www.leancrew.com/all-this/2012/04/where-modules-go-to-die/



;; (find-fline "/usr/share/doc/python2.7/html/_sources/")
;; (find-fline "/usr/share/doc/python3.5/html/_sources/")

# (find-py2docsrcfile "whatsnew/2.7.txt" "PEP 372: Adding an Ordered Dictionary to collections")
# (find-py3docsrcfile "whatsnew/")

file:///usr/share/doc/python2.7/html/library/os.html#os.getenv

https://nostarch.com
https://nostarch.com/automatestuff2
https://nostarch.com/pythoncrashcourse2e

https://codeburst.io/building-beautiful-command-line-interfaces-with-python-26c7e1bb54df

https://wiki.debian.org/Python

NOTE: Debian testing (bullseye) has removed the "python" package and
the '/usr/bin/python' symlink due to the deprecation of Python 2. No
packaged scripts should depend on the existence of '/usr/bin/python':
if they do, that is a bug that should be reported to Debian. You can
use the 'python-is-python3' or 'python-is-python2' packages to restore
an appropriate '/usr/bin/python' symlink for third-party or legacy
scripts.

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

https://realpython.com/python-walrus-operator/

https://towardsdatascience.com/creating-fractals-with-python-d2b663786da6

https://news.ycombinator.com/item?id=30744698 Pointers and Memory Management in Python (github.com/zerointensity)
https://news.ycombinator.com/item?id=30727189 No is a complete sentence (networkingnerd.net)
https://www.youtube.com/watch?v=xWQUkRKqp2E

https://morganya.org/charisma.html The Charisma Machine: the life, death, and legacy of One Laptop per Child - OLPC
https://inventwithpython.com/blog/2021/07/10/book-review-the-charisma-machine-by-morgan-g-ames/

https://docs.python.org/3/whatsnew/index.html
https://snarky.ca/a-reverse-chronology-of-some-python-features/

https://news.ycombinator.com/item?id=31566031 WTFPython: Exploring and understanding Python through surprising snippets (github.com/satwikkansal)
https://news.ycombinator.com/item?id=31566025 Python-patterns – A collection of design patterns/idioms in Python (github.com/faif)
https://gist.github.com/RobertAKARobin/a1cba47d62c009a378121398cc5477ea Python is not a great programming language.


http://donkirkby.github.io/live-py-plugin/

# (find-epackage-links 'pyinspect "pyinspect" t)
# (find-epackage       'pyinspect)

# (find-pydoc "library/weakref")

https://news.ycombinator.com/item?id=32757511 True * 2 and False * 2
https://news.ycombinator.com/item?id=33892017 A crash course in Python “comprehensions” and “generators” (medium.com/petefison)
https://tafc.space/qna/the-topologists-world-map/
https://news.ycombinator.com/item?id=34227760 Python 2 removed from Debian (debian.org)

http://blog.sigfpe.com/2008/09/on-writing-python-one-liners.html

https://stackoverflow.com/questions/25819513/how-to-indent-code-in-emacs-with-python-mode
https://stackoverflow.com/questions/2585091/emacs-bulk-indent-for-python
https://news.ycombinator.com/item?id=34289581 Show HN: Futurecoder – A free interactive Python course for coding beginners (futurecoder.io)
https://chriswarrick.com/blog/2023/01/15/how-to-improve-python-packaging/
https://thonny.org/

https://news.ycombinator.com/item?id=34527206 Pip and cargo are not the same (williammanley.net)
https://news.ycombinator.com/item?id=34689848 PocketPy: Lightweight(~5000 LOC) Python interpreter for game engines (github.com/blueloveth)
https://realpython.com/emacs-the-best-python-editor/
https://til.simonwillison.net/python/stdlib-cli-tools

https://pulsar17.me/2024/02/ongettinghelp
https://www.norvig.com/lispy.html
https://news.ycombinator.com/item?id=39665939 (How to Write a (Lisp) Interpreter (In Python)) (2010) (norvig.com)
https://www.thepythoncodingstack.com/p/python-diffusion-simulation-demo-turtle
https://github.com/chapmanjacobd/library library (media toolkit)
https://news.ycombinator.com/item?id=41008888 CLI tools to build, browse, and blend your media library (github.com/chapmanjacobd)
https://pydong.org/posts/PythonsPreprocessor/
https://news.ycombinator.com/item?id=41322758 Python's Preprocessor (pydong.org)
https://stackoverflow.com/questions/517923/what-is-the-best-way-to-remove-accents-normalize-in-a-python-unicode-string
https://jcarroll.com.au/2024/11/28/these-languages-are-accumulating/
https://www.draketo.de/light/english/free-software/read-your-python-module-documentation-emacs

# (find-fline "~/LOGS/2024jul20.emacs" "via pytest and pudb")


# (find-status   "python-pip3")
# (find-vldifile "python-pip3.list")
# (find-udfile   "python-pip3/")

w pip3


# (find-es "vnc" "vnc2swf-2011")






#  Local Variables:
#  coding:               utf-8-unix
#  End: