emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* (9.2) Noweb syntax not understood in Python blocks
@ 2019-02-04 11:29 Emmanuel Charpentier
  0 siblings, 0 replies; only message in thread
From: Emmanuel Charpentier @ 2019-02-04 11:29 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 3073 bytes --]

Seen in `org-mode' version `9.2'.

Using `noweb' syntax works OK with `emacs-lisp':

┌────
│ #+name: a
│ #+begin_src emacs-lisp
│   (setq L (append L (list i)))
│ #+end_src
│ 
│ #+name: b
│ #+begin_src emacs-lisp :noweb yes :exports both
│   ;; Lisp version
│   (setq L nil)
│   (dotimes (i 5) <<a>>)
│   L
│ #+end_src
└────

This gives :

┌────
│ (setq L (append L (list i)))
└────

┌────
│ ;; Lisp version
│ (setq L nil)
│ (dotimes (i 5) )
│ L
└────

The `noweb' syntax also works with `Sage' (a symbolic maths oriented
Python derivative):

┌────
│ #+name: Aaarghhh
│ #+begin_src sage
│   L.append(i)
│ #+end_src
│ 
│ #+name: Berde
│ #+begin_src sage :noweb yes :exports both
│   ## Python version
│   L=[]
│   for i in range(1,6):
│       <<Aaarghhh>>
│   L
│ #+end_src
└────

wich gives :

┌────
│ L.append(i)
└────

┌────
│ ## Sage version
│ L=[]
│ for i in range(1,6):
│ 
│ L
└────

But using the same syntax in Python fails miserably:

┌────
│ #+name: Ah
│ #+begin_src python
│   L.append(i)
│ #+end_src
│ 
│ #+name: Beee
│ #+begin_src python :noweb yes :exports both
│   ## Python version
│   L=[]
│   for i in range(1,6):
│       <<Ah>>
│   L
│ #+end_src
└────

┌────
│ L.append(i)
└────

┌────
│ ## Python version
│ L=[]
│ for i in range(1,6):
│     <<Ah>>
│ L
└────

┌────
│ []
└────


It *seems* that the "Ah" block is not expanded.

The code itself should be sound *if* it expanded:

┌────
│ #+name: B0
│ #+begin_src python :exports both
│   L=[]
│   for i in range(1,6):
│       L.append(i)
│   L
│ #+end_src
└────

┌────
│ L=[]
│ for i in range(1,6):
│     L.append(i)
│ L
└────

━━━━━━━━━━━━━━━
 1  2  3  4  5 
━━━━━━━━━━━━━━━

During the compilation of the source of this mail, the following is
printed in the `*Python*' buffer:

┌────
│ >>> L.append(i)
│ >>> 
│ >>> open('/tmp/babel-OJSsxf/python-dVESY4', 'w').write(str(_))
│ >>> 
│ >>> 
│ >>> 'org_babel_python_eoe'
│ 'org_babel_python_eoe'
│ >>> ## Python version
│ ... L=[]
│ >>> for i in range(1,6):
│ ...     <<Ah>>
│   File "<stdin>", line 2
│     <<Ah>>
│      ^
│ SyntaxError: invalid syntax
│ >>> 
│ >>> L
│ []
│ >>> 
│ >>> open('/tmp/babel-OJSsxf/python-9NR46u', 'w').write(str(_))
│ >>> 
│ >>> 
│ >>> 'org_babel_python_eoe'
│ 'org_babel_python_eoe'
│ >>> L=[]
│ >>> for i in range(1,6):
│ ...     L.append(i)
│ ... 
│ >>> L
│ [1, 2, 3, 4, 5]
│ >>> 
│ >>> open('/tmp/babel-OJSsxf/python-fW5gK0', 'w').write(str(_))
│ >>> 
│ >>> 
│ >>> 'org_babel_python_eoe'
│ 'org_babel_python_eoe'
│ >>> 
└────

The source code of this mail is attached.

--
Emmanuel Charpentier


[-- Attachment #2: PythonNowebProblem.org --]
[-- Type: text/plain, Size: 2819 bytes --]

# Syntaxe noweb ?

#+title:
#+date:
#+author:
#+options: toc:nil

#+property: header-args:python :session
#+property: header-args:sage :session

Seen in ~org-mode~ version src_emacs-lisp{org-version}.

Using ~noweb~ syntax works OK with ~emacs-lisp~:

#+begin_example
#+name: a
#+begin_src emacs-lisp
  (setq L (append L (list i)))
#+end_src

#+name: b
#+begin_src emacs-lisp :noweb yes :exports both
  ;; Lisp version
  (setq L nil)
  (dotimes (i 5) <<a>>)
  L
#+end_src
#+end_example

This gives :

#+name: a
#+begin_src emacs-lisp
  (setq L (append L (list i)))
#+end_src

#+name: b
#+begin_src emacs-lisp :noweb yes :exports both
  ;; Lisp version
  (setq L nil)
  (dotimes (i 5) <<a>>)
  L
#+end_src

The ~noweb~ syntax also works with ~Sage~ (a symbolic maths oriented
Python derivative):

#+begin_example
#+name: Aaarghhh
#+begin_src sage
  L.append(i)
#+end_src

#+name: Berde
#+begin_src sage :noweb yes :exports both
  ## Python version
  L=[]
  for i in range(1,6):
      <<Aaarghhh>>
  L
#+end_src
#+end_example

wich gives :

#+name: Aaarghhh
#+begin_src sage
  L.append(i)
#+end_src

#+name: Berde
#+begin_src sage :noweb yes :exports both
  ## Sage version
  L=[]
  for i in range(1,6):
      <<Aaarghhh>>
  L
#+end_src

But using the same syntax in Python fails miserably:

#+begin_example
#+name: Ah
#+begin_src python
  L.append(i)
#+end_src

#+name: Beee
#+begin_src python :noweb yes :exports both
  ## Python version
  L=[]
  for i in range(1,6):
      <<Ah>>
  L
#+end_src
#+end_example

#+name: Ah
#+begin_src python
  L.append(i)
#+end_src

#+name: Beee
#+begin_src python :noweb yes :exports both
  ## Python version
  L=[]
  for i in range(1,6):
      <<Ah>>
  L
#+end_src

It *seems* that the "Ah" block is not expanded.

The code itself should be sound *if* it expanded:

#+begin_example
#+name: B0
#+begin_src python :exports both
  L=[]
  for i in range(1,6):
      L.append(i)
  L
#+end_src
#+end_example

#+name: B0
#+begin_src python :exports both
  L=[]
  for i in range(1,6):
      L.append(i)
  L
#+end_src

During the compilation of the source of this mail, the following is
printed in the ~*Python*~ buffer:

#+begin_example
>>> L.append(i)
>>> 
>>> open('/tmp/babel-OJSsxf/python-dVESY4', 'w').write(str(_))
>>> 
>>> 
>>> 'org_babel_python_eoe'
'org_babel_python_eoe'
>>> ## Python version
... L=[]
>>> for i in range(1,6):
...     <<Ah>>
  File "<stdin>", line 2
    <<Ah>>
     ^
SyntaxError: invalid syntax
>>> 
>>> L
[]
>>> 
>>> open('/tmp/babel-OJSsxf/python-9NR46u', 'w').write(str(_))
>>> 
>>> 
>>> 'org_babel_python_eoe'
'org_babel_python_eoe'
>>> L=[]
>>> for i in range(1,6):
...     L.append(i)
... 
>>> L
[1, 2, 3, 4, 5]
>>> 
>>> open('/tmp/babel-OJSsxf/python-fW5gK0', 'w').write(str(_))
>>> 
>>> 
>>> 'org_babel_python_eoe'
'org_babel_python_eoe'
>>> 
#+end_example

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-02-04 11:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-04 11:29 (9.2) Noweb syntax not understood in Python blocks Emmanuel Charpentier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).