emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Org Babel says 1 + 1 in Python is None
@ 2024-09-06 13:33 Rudolf Adamkovič
  2024-09-07  8:12 ` Dr. Arne Babenhauserheide
  2024-09-07  9:27 ` Sébastien Gendre
  0 siblings, 2 replies; 7+ messages in thread
From: Rudolf Adamkovič @ 2024-09-06 13:33 UTC (permalink / raw)
  To: emacs-orgmode

Today, I decided to start using Python in Org.

(1) I read in "WORG":

  :results {output, value}: [...] Value results are the value of the
  last expression evaluated in the code block. Value mode is the default
  (as with other languages).

(2) So, I try it, and get:

  src_python{1 + 1} {{{results(=None=)}}}

I expected this to be 2.

Questions:

- Who is correct: (1) the documentation or (2) the implementation?
- If (2) is correct, do I have to write `return' every time?

Rudy
-- 
"Mathematics takes us still further from what is human into the region
of absolute necessity, to which not only the actual world, but every
possible world, must conform."  --- Bertrand Russell, 1902

Rudolf Adamkovič <rudolf@adamkovic.org> [he/him]
http://adamkovic.org


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Org Babel says 1 + 1 in Python is None
  2024-09-06 13:33 Org Babel says 1 + 1 in Python is None Rudolf Adamkovič
@ 2024-09-07  8:12 ` Dr. Arne Babenhauserheide
  2024-10-13 11:41   ` Ihor Radchenko
  2024-09-07  9:27 ` Sébastien Gendre
  1 sibling, 1 reply; 7+ messages in thread
From: Dr. Arne Babenhauserheide @ 2024-09-07  8:12 UTC (permalink / raw)
  To: Rudolf Adamkovič; +Cc: emacs-orgmode

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

Rudolf Adamkovič <rudolf@adamkovic.org> writes:

> Today, I decided to start using Python in Org.
>
> (1) I read in "WORG":
>
>   :results {output, value}: [...] Value results are the value of the
>   last expression evaluated in the code block. Value mode is the default
>   (as with other languages).

In the org-mode documentation I read:

    For languages like Python, an explicit return statement is mandatory when using ‘:results value’.
    https://orgmode.org/manual/Results-of-Evaluation.html

So I think WORG needs to be fixed.

Can you send a patch?
https://git.sr.ht/~bzg/worg

Best wishes,
Arne
-- 
Unpolitisch sein
heißt politisch sein,
ohne es zu merken.
draketo.de

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 1125 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Org Babel says 1 + 1 in Python is None
  2024-09-06 13:33 Org Babel says 1 + 1 in Python is None Rudolf Adamkovič
  2024-09-07  8:12 ` Dr. Arne Babenhauserheide
@ 2024-09-07  9:27 ` Sébastien Gendre
  1 sibling, 0 replies; 7+ messages in thread
From: Sébastien Gendre @ 2024-09-07  9:27 UTC (permalink / raw)
  To: Rudolf Adamkovič; +Cc: emacs-orgmode

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


But, 1 + 1 should be 11.

Joke aside, for Python, how you return the value depend of if you use a
session or not.

By default, a Python code block do not use a session. In this case, when
executed, the code is wrapped into a Python function and then this
function is called. So, to return a value, you need to use the "return"
statement.

With your example:
  src_python{return 1 + 1}


When you use a session for your code block, the last statement value is
returned if it is a top level expression. In this case, you do not use a
"return" statement.



Is it the article you have read on WORG ?
https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-python.html

The part you have quoted maybe miss a reference to the section who
explain how the return mechanism work for values.


Best regards

-------
Gendre Sébastien


Rudolf Adamkovič <rudolf@adamkovic.org> writes:

> Today, I decided to start using Python in Org.
>
> (1) I read in "WORG":
>
>   :results {output, value}: [...] Value results are the value of the
>   last expression evaluated in the code block. Value mode is the default
>   (as with other languages).
>
> (2) So, I try it, and get:
>
>   src_python{1 + 1} {{{results(=None=)}}}
>
> I expected this to be 2.
>
> Questions:
>
> - Who is correct: (1) the documentation or (2) the implementation?
> - If (2) is correct, do I have to write `return' every time?
>
> Rudy

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 849 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Org Babel says 1 + 1 in Python is None
  2024-09-07  8:12 ` Dr. Arne Babenhauserheide
@ 2024-10-13 11:41   ` Ihor Radchenko
  2024-10-20  7:08     ` Jack Kamm
  0 siblings, 1 reply; 7+ messages in thread
From: Ihor Radchenko @ 2024-10-13 11:41 UTC (permalink / raw)
  To: Dr. Arne Babenhauserheide; +Cc: Rudolf Adamkovič, emacs-orgmode

"Dr. Arne Babenhauserheide" <arne_bab@web.de> writes:

>> Today, I decided to start using Python in Org.
>>
>> (1) I read in "WORG":
>>
>>   :results {output, value}: [...] Value results are the value of the
>>   last expression evaluated in the code block. Value mode is the default
>>   (as with other languages).
>
> In the org-mode documentation I read:
>
>     For languages like Python, an explicit return statement is mandatory when using ‘:results value’.
>     https://orgmode.org/manual/Results-of-Evaluation.html
>
> So I think WORG needs to be fixed.
>
> Can you send a patch?
> https://git.sr.ht/~bzg/worg

Yes, patch would be welcome.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Org Babel says 1 + 1 in Python is None
  2024-10-13 11:41   ` Ihor Radchenko
@ 2024-10-20  7:08     ` Jack Kamm
  2024-10-20  9:39       ` Ihor Radchenko
  0 siblings, 1 reply; 7+ messages in thread
From: Jack Kamm @ 2024-10-20  7:08 UTC (permalink / raw)
  To: Ihor Radchenko, Dr. Arne Babenhauserheide
  Cc: Rudolf Adamkovič, emacs-orgmode

Ihor Radchenko <yantar92@posteo.net> writes:

>> In the org-mode documentation I read:
>>
>>     For languages like Python, an explicit return statement is mandatory when using ‘:results value’.
>>     https://orgmode.org/manual/Results-of-Evaluation.html
>>
>> So I think WORG needs to be fixed.
>>
>> Can you send a patch?
>> https://git.sr.ht/~bzg/worg
>
> Yes, patch would be welcome.

As Sebastian mentioned, Worg already documents the behavior, under the
section "Return values":

https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-python.html#org6eb75c6


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Org Babel says 1 + 1 in Python is None
  2024-10-20  7:08     ` Jack Kamm
@ 2024-10-20  9:39       ` Ihor Radchenko
  2024-10-21  6:00         ` Jack Kamm
  0 siblings, 1 reply; 7+ messages in thread
From: Ihor Radchenko @ 2024-10-20  9:39 UTC (permalink / raw)
  To: Jack Kamm; +Cc: Dr. Arne Babenhauserheide, Rudolf Adamkovič, emacs-orgmode

Jack Kamm <jackkamm@gmail.com> writes:

>>> So I think WORG needs to be fixed.
>>>
>>> Can you send a patch?
>>> https://git.sr.ht/~bzg/worg
>>
>> Yes, patch would be welcome.
>
> As Sebastian mentioned, Worg already documents the behavior, under the
> section "Return values":
>
> https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-python.html#org6eb75c6

Right.
Then, I see nothing else that can be done on Org side.

I'm afraid that trying to replicate Python REPL behavior for
non-interactive src blocks will be beyond what we can reasonably do in
Org: we would somehow need to detect the last statement in the src
blocks, which may or may not span a single line; and multiline statements
will need to use some kind of Python parser. All this sounds way too
fragile to be practical.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Org Babel says 1 + 1 in Python is None
  2024-10-20  9:39       ` Ihor Radchenko
@ 2024-10-21  6:00         ` Jack Kamm
  0 siblings, 0 replies; 7+ messages in thread
From: Jack Kamm @ 2024-10-21  6:00 UTC (permalink / raw)
  To: Ihor Radchenko
  Cc: Dr. Arne Babenhauserheide, Rudolf Adamkovič, emacs-orgmode

Ihor Radchenko <yantar92@posteo.net> writes:

> I'm afraid that trying to replicate Python REPL behavior for
> non-interactive src blocks will be beyond what we can reasonably do in
> Org: we would somehow need to detect the last statement in the src
> blocks, which may or may not span a single line; and multiline statements
> will need to use some kind of Python parser. All this sounds way too
> fragile to be practical.

Well, ob-python sessions implement this sort of parser in
`org-babel-python-format-session-value', which AFAIK is robust.

I think it would be feasible to switch non-session blocks to use this
parser, which IMO is nicer behavior -- the "return" statements always
felt weird to me.

But a major reason not to do it is to avoid breaking compatibility. Lots
of old ob-python nonsession blocks with "return" statements out there.

But perhaps we could implement an option to switch nonsession value to
the session value behavior (omitting "return"). The default behavior
should remain unchanged (requiring "return"), but in the long term we
could consider changing the default if there is consensus for it.

(I likely don't have bandwidth to implement such an option in the near
term, but would be supportive if anyone wants to have a go at it).


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-10-21  6:01 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-06 13:33 Org Babel says 1 + 1 in Python is None Rudolf Adamkovič
2024-09-07  8:12 ` Dr. Arne Babenhauserheide
2024-10-13 11:41   ` Ihor Radchenko
2024-10-20  7:08     ` Jack Kamm
2024-10-20  9:39       ` Ihor Radchenko
2024-10-21  6:00         ` Jack Kamm
2024-09-07  9:27 ` Sébastien Gendre

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).