※当サイトの記事には、広告・プロモーションが含まれます。

Pythonの標準ライブラリのurllib.parse.urljoinメソッドの挙動が罠過ぎる...

nazology.kusuguru.co.jp

ドイツのマックスプランク光学研究所(MPL)と中国の南京大学の共同研究により、AIが設計した新しい実験手法によって、共通の起源を持たない独立した光子間に量子もつれを生成することが実現されました。

AIが「量子もつれ」を作り出す新しい方法を発見! - ナゾロジー

この方法では、従来必要とされていた「事前の量子もつれ生成」や「ベル測定」と呼ばれる特殊な測定も不要で、簡素な手法で新たな量子もつれを生成できます。

AIが「量子もつれ」を作り出す新しい方法を発見! - ナゾロジー

この革新的な技術は、量子通信ネットワークや量子コンピューティングの効率化に大きく貢献する可能性があります。

AIが「量子もつれ」を作り出す新しい方法を発見! - ナゾロジー

⇧「完全情報ゲーム」みたいなものに対しては、「AI」が向いているってことなんですかね?

完全情報ゲーム(かんぜんじょうほうゲーム、game with perfect information)とは、すべての意思決定点において、これまでにとられた行動や実現した状態に関する情報がすべて与えられているような展開型ゲームのことをいう。言いかえれば、情報集合がすべて 1 点からなっており、どのノードにおいてもそこで手番をもつプレーヤーがそれまでの歴史を完全に把握できるようなゲームである。

完全情報ゲーム - Wikipedia

完全情報と完備情報

類似した概念に完備情報がある。両者の違いは、端的に言えば、完全情報は全員が相手のこれまでの行動などゲームの内部情報について知っていること、完備情報は全員が相手の利得関数などゲームの構造について知っていることである。例えば、囚人のジレンマでは、相手の利得関数については互いに知っているが、相手がどのような行動をとったのかについては知らないので、完備情報ではあるが不完全情報である。

完全情報ゲーム - Wikipedia

テーブルゲームでは、囲碁将棋リバーシなどの古典的ボードゲームのほとんどが完備情報かつ完全情報であるが、コントラクトブリッジポーカー麻雀などのカードゲーム・タイルゲームは相手がどのような手札の中から場に出す札を選択したのかなどの情報が全員にあきらかとは言えない。

完全情報ゲーム - Wikipedia

⇧「AI」は「幻覚(ハルシネーション)」を引き起こすとは言え、人類に比べれば、「完全情報」により近い位置にはいそうですし...

「エネルギー問題」「食糧問題」「環境問題」なども解決して欲しいものですな...

Pythonの標準ライブラリのurllib.parse.urljoinメソッドの挙動が罠過ぎる...

「Ruff」を使うと、「ファイルパス」や「URL」を文字列連結する際に、「os.sep.join」を使うな、「Path」使えって言われるので、「Path」を使うと正常に文字列連結されず、「urllib.parse.urljoin」を使ったら、よく分からん挙動をしたので備忘録として。

公式のドキュメントによりますと、

docs.python.org

⇧ とあり、何か補正がかかってしまうのかね?

試してみる。

■/home/ts0818/work/app/python/app/src/test/py/test_poc.py

import logging
from urllib.parse import urljoin


class TestPoc:
    _logger = logging.getLogger(__name__)
    _logger.setLevel(logging.DEBUG)

    def test_urljoin(self) -> None:
        """urljoinのテスト."""
        owner = "ts0818"
        git_clone_url_base = f"https://github.com/{owner}"
        repo_name = "test_github_app.git"

        url_by_urljoin: str = urljoin(git_clone_url_base, repo_name)
        url_by_str_join: str = f"{git_clone_url_base}/{repo_name}"
        url_by_path: str = str(Path(git_clone_url_base) / repo_name)
        url_by_os_sep_join: str = os.sep.join([git_clone_url_base, repo_name])

        self._logger.debug("\n■■■git_clone_url_base■■■\n %s", git_clone_url_base)
        self._logger.debug("\n■■■url_by_urljoin■■■\n %s", url_by_urljoin)
        self._logger.debug("\n■■■url_by_str_join■■■\n %s", url_by_str_join)
        self._logger.debug("\n■■■url_by_path■■■\n %s", url_by_path)
        self._logger.debug("\n■■■url_by_os_sep_join■■■\n %s", url_by_os_sep_join)

⇧ を実行してみる。

以下、結果。

 

Running pytest with args: ['-p', 'vscode_pytest', '-c', '/home/ts0818/work/app/python/app/src/test/resources/pytest/conf/pytest.ini', '--cache-clear', '--rootdir=/home/ts0818/work/app/python/app', '--cov=.', '/home/ts0818/work/app/python/app/src/test/py/test_poc.py::TestPoc::test_urljoin']
============================= test session starts ==============================
platform linux -- Python 3.9.18, pytest-8.3.3, pluggy-1.5.0
rootdir: /home/ts0818/work/app/python/app
configfile: src/test/resources/pytest/conf/pytest.ini
plugins: cov-6.0.0
collected 1 item

src/test/py/test_poc.py::TestPoc::test_urljoin 
-------------------------------- live log call ---------------------------------
2024-12-09 21:50:10 DEBUG 
■■■git_clone_url_base■■■
 https://github.com/ts0818
2024-12-09 21:50:10 DEBUG 
■■■url_by_urljoin■■■
 https://github.com/test_github_app.git
2024-12-09 21:50:10 DEBUG 
■■■url_by_str_join■■■
 https://github.com/ts0818/test_github_app.git
2024-12-09 21:50:10 DEBUG 
■■■url_by_path■■■
 https:/github.com/ts0818/test_github_app.git
2024-12-09 21:50:10 DEBUG 
■■■url_by_os_sep_join■■■
 https://github.com/ts0818/test_github_app.git
PASSED                                                                   [100%]

---------- coverage: platform linux, python 3.9.18-final-0 -----------
Name                      Stmts   Miss  Cover
---------------------------------------------
src/test/py/test_poc.py      20      0   100%
---------------------------------------------
TOTAL                        20      0   100%


============================== 1 passed in 0.31s ===============================
Finished running tests!

⇧ とあり、よく分からん形での文字列連結という結果になってしまうという...

「Ruff」が代替案を出してくれるのは構わないんだが、まさか異なる結果になるとは思わんのよね...

Python」全く分からん...

毎度モヤモヤ感が半端ない…

今回はこのへんで。