nlib3


Namenlib3 JSON
Version 1.19.1 PyPI version JSON
download
home_pagehttps://github.com/nicoyou/nlib
SummaryYou can use a slightly useful function.
upload_time2024-02-23 04:59:26
maintainer
docs_urlNone
authornicoyou
requires_python
licenseMIT
keywords nlib3 nlib library utility nicoyou_lib nicoyou
VCS
bugtrack_url
requirements setuptools wheel twine
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # nlib3

### Useful functions and classes are available.



[![PyPI](https://img.shields.io/pypi/v/nlib3)](https://pypi.org/project/nlib3/)

![Python versions](https://img.shields.io/pypi/pyversions/nlib3)





## Installation

```bash

pip install nlib3

```





## USAGE ( Sample of some functions )

```python

import nlib3



# 2 次元ベクトルの値を格納するためのクラス

pos = nlib3.Vector2(10, 20)

print(pos)                      # x=10, y=20

print(pos.x, pos.y)             # 10 20

print(pos[0], pos[1])           # 10 20

print(pos["x"], pos["y"])       # 10 20

print(pos + pos)                # x=20, y=40





# URL を保持して、パラメーターやパスを簡単に編集できるクラス

url = Url("https://a.com/b")

print(url)                                      # https://a.com/b

print(url := url / "aaa")                       # https://a.com/b/aaa

print(url := url.with_name("test"))             # https://a.com/b/test

print(url := url.add_param("id", 10))           # https://a.com/b/test?id=10

print(url := url.parent.parent / "index.html")  # https://a.com/index.html?id=10

print(url := url.add_param("sample", False))    # https://a.com/index.html?id=10&sample=false

print(url.name)                                 # index.html

if "id" in url:

    print(url["id"])                            # 10





# str のサブクラスでもある列挙型を作成する基底クラス

class Alphabet(nlib3.StrEnum):

    a = "a"

    b = "b"

    c = "c"



print(Alphabet.a)               # a

print(str(Alphabet.b))          # b

print(f"{Alphabet.c}")          # c





# Json ファイルから一つの値を読み込んで保持するクラス

# ネストされた辞書にもアクセスでき、json ファイルの他の値には影響を及ぼさない

jd = nlib3.JsonData(["a", "b", "c"], None, "test.json")

jd.set(8, True)                 # 値を 8 に変更して保存する

"""                             # このような json が生成されます

{

    "a": {

        "b": {

            "c": 8

        }

    }

}

"""

```







## Release Notes

```text

----------------------------------------------------------------------------------------------------------

ver.1.19.1 (2023/12/28)

create_logger 関数に置き換わった print_log 関数を削除

ライブラリ内のロギングを全て create_logger 関数に置き換え



----------------------------------------------------------------------------------------------------------

ver.1.19.0 (2023/12/21)

print_log 関数を代替する create_logger 関数を追加



get_datetime_now 関数のタイプミスを修正



----------------------------------------------------------------------------------------------------------

ver.1.18.0 (2023/03/21)

readme にライブラリの使用サンプルを追加

Url クラスに format, pop_param メソッドや特殊メソッドを複数追加



Url クラスの初期 URL にパラメーターを含む URL を渡すと正常に動作しない不具合を修正

Url クラスの / 演算子がパラメーターを引き継がない不具合を修正

Url クラスの parent メソッドが、不要な例外を投げていた不具合を修正



----------------------------------------------------------------------------------------------------------

ver.1.17.0 (2022/12/10)

属性を文字列として扱う列挙子を定義できる StrEnum クラスを追加

JsonData クラスに file_exists メソッドと __str__ メソッドを追加

イテラブルな型のエイリアスを 4 種類追加

get_datetime_now 関数にオーバーロードを追加



一部関数の型ヒントが間違っていた不具合を修正

format構文を f文字列 に、文字列で定義されているファイルパスを pathlib にリファクタリング



----------------------------------------------------------------------------------------------------------

ver.1.16.0 (2022/11/12)

Url クラスを追加

Vector2 クラスに set メソッドを追加



インデントをタブからスペースに変更



----------------------------------------------------------------------------------------------------------

ver.1.15.0 (2022/09/09)

型ヒントを Python 3.10 で追加された書き方に変更 ( Python 3.9 以下では実行不可 )

Vector2 クラスに比較演算子、算術演算子、単項演算子のオーバーロードを追加

Vector2 クラスに 6 つの関数を追加

Vector2 クラスのコンストラクタにリスト、タプル、自クラスを指定できる機能を追加



----------------------------------------------------------------------------------------------------------

ver.1.14.0 (2022/07/12)

ライブラリ名を nlib に変更、PyPIに公開

load_json() 関数と save_json() 関数を追加

JsonData() クラス内のファイルIO処理を全て新規追加した関数に変更

ファイルIO時の標準エンコードを定数に追加



----------------------------------------------------------------------------------------------------------

ver.1.13.0 (2022/07/05)

get_check_digit() 関数を追加

サードパーティー製ライブラリを使用していた convert_file_encoding() 関数を削除

download_file() 関数と、download_and_check_file() 関数で対応できるエラーを追加

download_and_check_file() 関数に再試行に関するパラメーターを指定できる引数を追加、返り値の型を変更

エラーコード名 LibErrorCode.file を LibErrorCode.file_not_found に変更



----------------------------------------------------------------------------------------------------------

ver.1.12.0 (2022/06/07)

全クラスと関数に引数の型と返り値の型を追加、トップのコメントをdocstringに書き換え

Vector2 クラスの仕様を変更し、コンストラクタで x しか値が与えられなかった場合は y が 0 で初期化されるように変更

print_log() 関数にログを出力するファイル名を指定する事ができる引数を追加

マルチスレッドのデコレータ関数がスレットを返すように変更



関数内のデバッグ出力で print_debug() 関数を使用せずに print() 関数を使用していた箇所がいくつかあった不具合を修正

ファイルをダウンロードする関数が 302 エラーを稀に起こす対策としてユーザーエージェントを追加



----------------------------------------------------------------------------------------------------------

ver.1.11.0 (2021/10/03)

ファイルパスの指定した階層をリネームする関数を追加

OSのコマンドを実行する関数を追加

print_debug 関数に引数 end を追加



----------------------------------------------------------------------------------------------------------

ver.1.10.1 (2021/07/16)

JsonData()クラスで、同時に同じファイルを更新しようとすると、ファイルのデータが初期化される不具合を修正

返り値の値を調整、JsonData.incrementをリファクタリング



----------------------------------------------------------------------------------------------------------

ver.1.10.0 (2021/06/06)

JSON文字列を整形して print 出力する関数を JsonData クラスに追加

関数をマルチスレッドで実行するためのデコレーターを追加

print_log関数でクラス名が存在しないときにクラッシュすることがある不具合を修正

PyLintを使用して、プログラムをリファクタリング



----------------------------------------------------------------------------------------------------------

ver.1.9.0 (2021/04/24)

2次元ベクトルの値を保存する構造体を追加

read_tail 関数で encoding を指定できるように引数を追加

print_log 関数のエラーログを出力する際の引数を bool 値のフラグを指定するだけで出力できるように簡略化



----------------------------------------------------------------------------------------------------------

ver.1.8.0 (2021/04/09)

エラーログに出力されるソースコードの情報にファイル名とクラス名を追加

エラーログが複数行の場合は、2行目以降の左の空白に日時が出力されるように変更

ログファイルの最大容量を 10MB から 50MB まで増加



----------------------------------------------------------------------------------------------------------

ver.1.7.0 (2021/03/13)

スタックされているエラーを表示する関数を追加

指定されたファイルが指定された文字コードでなければ指定された文字コードに変換する関数を追加

ネストされた辞書内の特定の値のみを再帰で変更する関数を JsonData クラス内からライブラリの関数に移動

ログを出力する際に OS のデフォルト文字コードで出力していたのを utf-8 で出力するように変更

JsonData クラスに値をインクリメントしてファイルに保存する関数を追加

JsonData クラスで扱うファイルの文字コードを OS のデフォルト文字コードから utf-8 に変更 ( 過去verで保存したファイルの読み込み不可 )

JsonData クラスで読み込んだJsonファイルに文法エラーがあった場合に、データを新しく上書き保存できない不具合を修正



----------------------------------------------------------------------------------------------------------

ver.1.6.0 (2021/03/07)

Jsonデータを読み込んで保持するクラスで、自由な数のキーを指定できる用に変更

キャストできるかどうかを確認する関数を追加



----------------------------------------------------------------------------------------------------------

ver.1.5.0 (2021/02/15)

ファイルを後ろから指定した行だけ読み込む関数を追加

16進数の文字列を圧縮、展開する関数を追加



----------------------------------------------------------------------------------------------------------

ver.1.4.0 (2021/01/12)

Pythonのバージョン情報を文字列で取得する関数を追加

デバッグログを出力する関数を追加

ログに出力する日付の計算に get_datetime_now 関数を使うように変更



----------------------------------------------------------------------------------------------------------

ver.1.3.1 (2020/12/24)

get_datetime 関数の名前を get_datetime_now に変更、文字列に変換した際のフォーマットを変更



----------------------------------------------------------------------------------------------------------

ver.1.3.0 (2020/12/01)

日本の現在の datetime を取得する関数を追加

Jsonデータを読み込んで保持するクラスを追加

初期化関数をライブラリ内で使用するディレクトリを作成する関数に名前を変更



----------------------------------------------------------------------------------------------------------

ver.1.2.1 (2020/11/24)

ログを出力する際に、元のメッセージの最後に改行が含まれていた場合は改行を削除するように調整

エラーログを出力する関数を複数行のログに対応

起動時の初期化処理を行う関数を作成



----------------------------------------------------------------------------------------------------------

ver.1.2.0 (2020/10/29)

条件に一致する文字が入力されるまで再入力を求める入力関数を追加



----------------------------------------------------------------------------------------------------------

ver.1.1.1 (2020/10/20)

download_file関数とdownload_and_check_file関数でファイルが既に存在する場合に上書きするかどうかを指定できる引数を追加



----------------------------------------------------------------------------------------------------------

ver.1.1.0 (2020/10/17)

通常のログを出力する関数を追加

プログラム終了時に一時停止する関数を追加

リンク先が存在するかどうかを確認する関数を追加

ライブラリ内エラーコードからエラーメッセージを取得する関数を追加

列挙型のライブラリ内エラーコードを追加



インターネット上からファイルをダウンロードする関数で、存在しないURLを指定するとクラッシュする不具合を修正

print_log関数に文字列以外のものを渡した際にクラッシュする不具合を修正



----------------------------------------------------------------------------------------------------------

ver.1.0.0 (2020/10/15)

初版

エラーログを出力する関数を実装

インターネット上からファイルをダウンロードする関数を追加

ファイルをダウンロードして、失敗時に再ダウンロードを試みる関数

```





## Author

Nicoyou



[@NicoyouSoft](https://twitter.com/NicoyouSoft)


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/nicoyou/nlib",
    "name": "nlib3",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "nlib3 nlib library utility nicoyou_lib nicoyou",
    "author": "nicoyou",
    "author_email": "nicoyou.info@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/67/72/a0c1ef1718e0b81d2e0e293414239b79c204f99dfafe779810bc2bf24045/nlib3-1.19.1.tar.gz",
    "platform": null,
    "description": "# nlib3\r\n\r\n### Useful functions and classes are available.\r\n\r\n\r\n\r\n[![PyPI](https://img.shields.io/pypi/v/nlib3)](https://pypi.org/project/nlib3/)\r\n\r\n![Python versions](https://img.shields.io/pypi/pyversions/nlib3)\r\n\r\n\r\n\r\n\r\n\r\n## Installation\r\n\r\n```bash\r\n\r\npip install nlib3\r\n\r\n```\r\n\r\n\r\n\r\n\r\n\r\n## USAGE ( Sample of some functions )\r\n\r\n```python\r\n\r\nimport nlib3\r\n\r\n\r\n\r\n# 2 \u6b21\u5143\u30d9\u30af\u30c8\u30eb\u306e\u5024\u3092\u683c\u7d0d\u3059\u308b\u305f\u3081\u306e\u30af\u30e9\u30b9\r\n\r\npos = nlib3.Vector2(10, 20)\r\n\r\nprint(pos)                      # x=10, y=20\r\n\r\nprint(pos.x, pos.y)             # 10 20\r\n\r\nprint(pos[0], pos[1])           # 10 20\r\n\r\nprint(pos[\"x\"], pos[\"y\"])       # 10 20\r\n\r\nprint(pos + pos)                # x=20, y=40\r\n\r\n\r\n\r\n\r\n\r\n# URL \u3092\u4fdd\u6301\u3057\u3066\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3084\u30d1\u30b9\u3092\u7c21\u5358\u306b\u7de8\u96c6\u3067\u304d\u308b\u30af\u30e9\u30b9\r\n\r\nurl = Url(\"https://a.com/b\")\r\n\r\nprint(url)                                      # https://a.com/b\r\n\r\nprint(url := url / \"aaa\")                       # https://a.com/b/aaa\r\n\r\nprint(url := url.with_name(\"test\"))             # https://a.com/b/test\r\n\r\nprint(url := url.add_param(\"id\", 10))           # https://a.com/b/test?id=10\r\n\r\nprint(url := url.parent.parent / \"index.html\")  # https://a.com/index.html?id=10\r\n\r\nprint(url := url.add_param(\"sample\", False))    # https://a.com/index.html?id=10&sample=false\r\n\r\nprint(url.name)                                 # index.html\r\n\r\nif \"id\" in url:\r\n\r\n    print(url[\"id\"])                            # 10\r\n\r\n\r\n\r\n\r\n\r\n# str \u306e\u30b5\u30d6\u30af\u30e9\u30b9\u3067\u3082\u3042\u308b\u5217\u6319\u578b\u3092\u4f5c\u6210\u3059\u308b\u57fa\u5e95\u30af\u30e9\u30b9\r\n\r\nclass Alphabet(nlib3.StrEnum):\r\n\r\n    a = \"a\"\r\n\r\n    b = \"b\"\r\n\r\n    c = \"c\"\r\n\r\n\r\n\r\nprint(Alphabet.a)               # a\r\n\r\nprint(str(Alphabet.b))          # b\r\n\r\nprint(f\"{Alphabet.c}\")          # c\r\n\r\n\r\n\r\n\r\n\r\n# Json \u30d5\u30a1\u30a4\u30eb\u304b\u3089\u4e00\u3064\u306e\u5024\u3092\u8aad\u307f\u8fbc\u3093\u3067\u4fdd\u6301\u3059\u308b\u30af\u30e9\u30b9\r\n\r\n# \u30cd\u30b9\u30c8\u3055\u308c\u305f\u8f9e\u66f8\u306b\u3082\u30a2\u30af\u30bb\u30b9\u3067\u304d\u3001json \u30d5\u30a1\u30a4\u30eb\u306e\u4ed6\u306e\u5024\u306b\u306f\u5f71\u97ff\u3092\u53ca\u307c\u3055\u306a\u3044\r\n\r\njd = nlib3.JsonData([\"a\", \"b\", \"c\"], None, \"test.json\")\r\n\r\njd.set(8, True)                 # \u5024\u3092 8 \u306b\u5909\u66f4\u3057\u3066\u4fdd\u5b58\u3059\u308b\r\n\r\n\"\"\"                             # \u3053\u306e\u3088\u3046\u306a json \u304c\u751f\u6210\u3055\u308c\u307e\u3059\r\n\r\n{\r\n\r\n    \"a\": {\r\n\r\n        \"b\": {\r\n\r\n            \"c\": 8\r\n\r\n        }\r\n\r\n    }\r\n\r\n}\r\n\r\n\"\"\"\r\n\r\n```\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n## Release Notes\r\n\r\n```text\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.19.1 (2023/12/28)\r\n\r\ncreate_logger \u95a2\u6570\u306b\u7f6e\u304d\u63db\u308f\u3063\u305f print_log \u95a2\u6570\u3092\u524a\u9664\r\n\r\n\u30e9\u30a4\u30d6\u30e9\u30ea\u5185\u306e\u30ed\u30ae\u30f3\u30b0\u3092\u5168\u3066 create_logger \u95a2\u6570\u306b\u7f6e\u304d\u63db\u3048\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.19.0 (2023/12/21)\r\n\r\nprint_log \u95a2\u6570\u3092\u4ee3\u66ff\u3059\u308b create_logger \u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\nget_datetime_now \u95a2\u6570\u306e\u30bf\u30a4\u30d7\u30df\u30b9\u3092\u4fee\u6b63\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.18.0 (2023/03/21)\r\n\r\nreadme \u306b\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4f7f\u7528\u30b5\u30f3\u30d7\u30eb\u3092\u8ffd\u52a0\r\n\r\nUrl \u30af\u30e9\u30b9\u306b format, pop_param \u30e1\u30bd\u30c3\u30c9\u3084\u7279\u6b8a\u30e1\u30bd\u30c3\u30c9\u3092\u8907\u6570\u8ffd\u52a0\r\n\r\n\r\n\r\nUrl \u30af\u30e9\u30b9\u306e\u521d\u671f URL \u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u542b\u3080 URL \u3092\u6e21\u3059\u3068\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u306a\u3044\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\nUrl \u30af\u30e9\u30b9\u306e / \u6f14\u7b97\u5b50\u304c\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u5f15\u304d\u7d99\u304c\u306a\u3044\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\nUrl \u30af\u30e9\u30b9\u306e parent \u30e1\u30bd\u30c3\u30c9\u304c\u3001\u4e0d\u8981\u306a\u4f8b\u5916\u3092\u6295\u3052\u3066\u3044\u305f\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.17.0 (2022/12/10)\r\n\r\n\u5c5e\u6027\u3092\u6587\u5b57\u5217\u3068\u3057\u3066\u6271\u3046\u5217\u6319\u5b50\u3092\u5b9a\u7fa9\u3067\u304d\u308b StrEnum \u30af\u30e9\u30b9\u3092\u8ffd\u52a0\r\n\r\nJsonData \u30af\u30e9\u30b9\u306b file_exists \u30e1\u30bd\u30c3\u30c9\u3068 __str__ \u30e1\u30bd\u30c3\u30c9\u3092\u8ffd\u52a0\r\n\r\n\u30a4\u30c6\u30e9\u30d6\u30eb\u306a\u578b\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\u3092 4 \u7a2e\u985e\u8ffd\u52a0\r\n\r\nget_datetime_now \u95a2\u6570\u306b\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n\u4e00\u90e8\u95a2\u6570\u306e\u578b\u30d2\u30f3\u30c8\u304c\u9593\u9055\u3063\u3066\u3044\u305f\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\nformat\u69cb\u6587\u3092 f\u6587\u5b57\u5217 \u306b\u3001\u6587\u5b57\u5217\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092 pathlib \u306b\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.16.0 (2022/11/12)\r\n\r\nUrl \u30af\u30e9\u30b9\u3092\u8ffd\u52a0\r\n\r\nVector2 \u30af\u30e9\u30b9\u306b set \u30e1\u30bd\u30c3\u30c9\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u30bf\u30d6\u304b\u3089\u30b9\u30da\u30fc\u30b9\u306b\u5909\u66f4\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.15.0 (2022/09/09)\r\n\r\n\u578b\u30d2\u30f3\u30c8\u3092 Python 3.10 \u3067\u8ffd\u52a0\u3055\u308c\u305f\u66f8\u304d\u65b9\u306b\u5909\u66f4 ( Python 3.9 \u4ee5\u4e0b\u3067\u306f\u5b9f\u884c\u4e0d\u53ef )\r\n\r\nVector2 \u30af\u30e9\u30b9\u306b\u6bd4\u8f03\u6f14\u7b97\u5b50\u3001\u7b97\u8853\u6f14\u7b97\u5b50\u3001\u5358\u9805\u6f14\u7b97\u5b50\u306e\u30aa\u30fc\u30d0\u30fc\u30ed\u30fc\u30c9\u3092\u8ffd\u52a0\r\n\r\nVector2 \u30af\u30e9\u30b9\u306b 6 \u3064\u306e\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\nVector2 \u30af\u30e9\u30b9\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306b\u30ea\u30b9\u30c8\u3001\u30bf\u30d7\u30eb\u3001\u81ea\u30af\u30e9\u30b9\u3092\u6307\u5b9a\u3067\u304d\u308b\u6a5f\u80fd\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.14.0 (2022/07/12)\r\n\r\n\u30e9\u30a4\u30d6\u30e9\u30ea\u540d\u3092 nlib \u306b\u5909\u66f4\u3001PyPI\u306b\u516c\u958b\r\n\r\nload_json() \u95a2\u6570\u3068 save_json() \u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\nJsonData() \u30af\u30e9\u30b9\u5185\u306e\u30d5\u30a1\u30a4\u30ebIO\u51e6\u7406\u3092\u5168\u3066\u65b0\u898f\u8ffd\u52a0\u3057\u305f\u95a2\u6570\u306b\u5909\u66f4\r\n\r\n\u30d5\u30a1\u30a4\u30ebIO\u6642\u306e\u6a19\u6e96\u30a8\u30f3\u30b3\u30fc\u30c9\u3092\u5b9a\u6570\u306b\u8ffd\u52a0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.13.0 (2022/07/05)\r\n\r\nget_check_digit() \u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30fc\u88fd\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u7528\u3057\u3066\u3044\u305f convert_file_encoding() \u95a2\u6570\u3092\u524a\u9664\r\n\r\ndownload_file() \u95a2\u6570\u3068\u3001download_and_check_file() \u95a2\u6570\u3067\u5bfe\u5fdc\u3067\u304d\u308b\u30a8\u30e9\u30fc\u3092\u8ffd\u52a0\r\n\r\ndownload_and_check_file() \u95a2\u6570\u306b\u518d\u8a66\u884c\u306b\u95a2\u3059\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u6307\u5b9a\u3067\u304d\u308b\u5f15\u6570\u3092\u8ffd\u52a0\u3001\u8fd4\u308a\u5024\u306e\u578b\u3092\u5909\u66f4\r\n\r\n\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9\u540d LibErrorCode.file \u3092 LibErrorCode.file_not_found \u306b\u5909\u66f4\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.12.0 (2022/06/07)\r\n\r\n\u5168\u30af\u30e9\u30b9\u3068\u95a2\u6570\u306b\u5f15\u6570\u306e\u578b\u3068\u8fd4\u308a\u5024\u306e\u578b\u3092\u8ffd\u52a0\u3001\u30c8\u30c3\u30d7\u306e\u30b3\u30e1\u30f3\u30c8\u3092docstring\u306b\u66f8\u304d\u63db\u3048\r\n\r\nVector2 \u30af\u30e9\u30b9\u306e\u4ed5\u69d8\u3092\u5909\u66f4\u3057\u3001\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067 x \u3057\u304b\u5024\u304c\u4e0e\u3048\u3089\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f y \u304c 0 \u3067\u521d\u671f\u5316\u3055\u308c\u308b\u3088\u3046\u306b\u5909\u66f4\r\n\r\nprint_log() \u95a2\u6570\u306b\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u6307\u5b9a\u3059\u308b\u4e8b\u304c\u3067\u304d\u308b\u5f15\u6570\u3092\u8ffd\u52a0\r\n\r\n\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u306e\u30c7\u30b3\u30ec\u30fc\u30bf\u95a2\u6570\u304c\u30b9\u30ec\u30c3\u30c8\u3092\u8fd4\u3059\u3088\u3046\u306b\u5909\u66f4\r\n\r\n\r\n\r\n\u95a2\u6570\u5185\u306e\u30c7\u30d0\u30c3\u30b0\u51fa\u529b\u3067 print_debug() \u95a2\u6570\u3092\u4f7f\u7528\u305b\u305a\u306b print() \u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u3044\u305f\u7b87\u6240\u304c\u3044\u304f\u3064\u304b\u3042\u3063\u305f\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\n\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u95a2\u6570\u304c 302 \u30a8\u30e9\u30fc\u3092\u7a00\u306b\u8d77\u3053\u3059\u5bfe\u7b56\u3068\u3057\u3066\u30e6\u30fc\u30b6\u30fc\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.11.0 (2021/10/03)\r\n\r\n\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u6307\u5b9a\u3057\u305f\u968e\u5c64\u3092\u30ea\u30cd\u30fc\u30e0\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\nOS\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\nprint_debug \u95a2\u6570\u306b\u5f15\u6570 end \u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.10.1 (2021/07/16)\r\n\r\nJsonData()\u30af\u30e9\u30b9\u3067\u3001\u540c\u6642\u306b\u540c\u3058\u30d5\u30a1\u30a4\u30eb\u3092\u66f4\u65b0\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u30c7\u30fc\u30bf\u304c\u521d\u671f\u5316\u3055\u308c\u308b\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\n\u8fd4\u308a\u5024\u306e\u5024\u3092\u8abf\u6574\u3001JsonData.increment\u3092\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.10.0 (2021/06/06)\r\n\r\nJSON\u6587\u5b57\u5217\u3092\u6574\u5f62\u3057\u3066 print \u51fa\u529b\u3059\u308b\u95a2\u6570\u3092 JsonData \u30af\u30e9\u30b9\u306b\u8ffd\u52a0\r\n\r\n\u95a2\u6570\u3092\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u3067\u5b9f\u884c\u3059\u308b\u305f\u3081\u306e\u30c7\u30b3\u30ec\u30fc\u30bf\u30fc\u3092\u8ffd\u52a0\r\n\r\nprint_log\u95a2\u6570\u3067\u30af\u30e9\u30b9\u540d\u304c\u5b58\u5728\u3057\u306a\u3044\u3068\u304d\u306b\u30af\u30e9\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u304c\u3042\u308b\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\nPyLint\u3092\u4f7f\u7528\u3057\u3066\u3001\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.9.0 (2021/04/24)\r\n\r\n\uff12\u6b21\u5143\u30d9\u30af\u30c8\u30eb\u306e\u5024\u3092\u4fdd\u5b58\u3059\u308b\u69cb\u9020\u4f53\u3092\u8ffd\u52a0\r\n\r\nread_tail \u95a2\u6570\u3067 encoding \u3092\u6307\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u5f15\u6570\u3092\u8ffd\u52a0\r\n\r\nprint_log \u95a2\u6570\u306e\u30a8\u30e9\u30fc\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u969b\u306e\u5f15\u6570\u3092 bool \u5024\u306e\u30d5\u30e9\u30b0\u3092\u6307\u5b9a\u3059\u308b\u3060\u3051\u3067\u51fa\u529b\u3067\u304d\u308b\u3088\u3046\u306b\u7c21\u7565\u5316\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.8.0 (2021/04/09)\r\n\r\n\u30a8\u30e9\u30fc\u30ed\u30b0\u306b\u51fa\u529b\u3055\u308c\u308b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u60c5\u5831\u306b\u30d5\u30a1\u30a4\u30eb\u540d\u3068\u30af\u30e9\u30b9\u540d\u3092\u8ffd\u52a0\r\n\r\n\u30a8\u30e9\u30fc\u30ed\u30b0\u304c\u8907\u6570\u884c\u306e\u5834\u5408\u306f\u3001\uff12\u884c\u76ee\u4ee5\u964d\u306e\u5de6\u306e\u7a7a\u767d\u306b\u65e5\u6642\u304c\u51fa\u529b\u3055\u308c\u308b\u3088\u3046\u306b\u5909\u66f4\r\n\r\n\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u5927\u5bb9\u91cf\u3092 10MB \u304b\u3089 50MB \u307e\u3067\u5897\u52a0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.7.0 (2021/03/13)\r\n\r\n\u30b9\u30bf\u30c3\u30af\u3055\u308c\u3066\u3044\u308b\u30a8\u30e9\u30fc\u3092\u8868\u793a\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u6307\u5b9a\u3055\u308c\u305f\u6587\u5b57\u30b3\u30fc\u30c9\u3067\u306a\u3051\u308c\u3070\u6307\u5b9a\u3055\u308c\u305f\u6587\u5b57\u30b3\u30fc\u30c9\u306b\u5909\u63db\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u30cd\u30b9\u30c8\u3055\u308c\u305f\u8f9e\u66f8\u5185\u306e\u7279\u5b9a\u306e\u5024\u306e\u307f\u3092\u518d\u5e30\u3067\u5909\u66f4\u3059\u308b\u95a2\u6570\u3092 JsonData \u30af\u30e9\u30b9\u5185\u304b\u3089\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u95a2\u6570\u306b\u79fb\u52d5\r\n\r\n\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u969b\u306b OS \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u6587\u5b57\u30b3\u30fc\u30c9\u3067\u51fa\u529b\u3057\u3066\u3044\u305f\u306e\u3092 utf-8 \u3067\u51fa\u529b\u3059\u308b\u3088\u3046\u306b\u5909\u66f4\r\n\r\nJsonData \u30af\u30e9\u30b9\u306b\u5024\u3092\u30a4\u30f3\u30af\u30ea\u30e1\u30f3\u30c8\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\nJsonData \u30af\u30e9\u30b9\u3067\u6271\u3046\u30d5\u30a1\u30a4\u30eb\u306e\u6587\u5b57\u30b3\u30fc\u30c9\u3092 OS \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u6587\u5b57\u30b3\u30fc\u30c9\u304b\u3089 utf-8 \u306b\u5909\u66f4 ( \u904e\u53bbver\u3067\u4fdd\u5b58\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f\u4e0d\u53ef )\r\n\r\nJsonData \u30af\u30e9\u30b9\u3067\u8aad\u307f\u8fbc\u3093\u3060Json\u30d5\u30a1\u30a4\u30eb\u306b\u6587\u6cd5\u30a8\u30e9\u30fc\u304c\u3042\u3063\u305f\u5834\u5408\u306b\u3001\u30c7\u30fc\u30bf\u3092\u65b0\u3057\u304f\u4e0a\u66f8\u304d\u4fdd\u5b58\u3067\u304d\u306a\u3044\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.6.0 (2021/03/07)\r\n\r\nJson\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3093\u3067\u4fdd\u6301\u3059\u308b\u30af\u30e9\u30b9\u3067\u3001\u81ea\u7531\u306a\u6570\u306e\u30ad\u30fc\u3092\u6307\u5b9a\u3067\u304d\u308b\u7528\u306b\u5909\u66f4\r\n\r\n\u30ad\u30e3\u30b9\u30c8\u3067\u304d\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.5.0 (2021/02/15)\r\n\r\n\u30d5\u30a1\u30a4\u30eb\u3092\u5f8c\u308d\u304b\u3089\u6307\u5b9a\u3057\u305f\u884c\u3060\u3051\u8aad\u307f\u8fbc\u3080\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n16\u9032\u6570\u306e\u6587\u5b57\u5217\u3092\u5727\u7e2e\u3001\u5c55\u958b\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.4.0 (2021/01/12)\r\n\r\nPython\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831\u3092\u6587\u5b57\u5217\u3067\u53d6\u5f97\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u30c7\u30d0\u30c3\u30b0\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u30ed\u30b0\u306b\u51fa\u529b\u3059\u308b\u65e5\u4ed8\u306e\u8a08\u7b97\u306b get_datetime_now \u95a2\u6570\u3092\u4f7f\u3046\u3088\u3046\u306b\u5909\u66f4\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.3.1 (2020/12/24)\r\n\r\nget_datetime \u95a2\u6570\u306e\u540d\u524d\u3092 get_datetime_now \u306b\u5909\u66f4\u3001\u6587\u5b57\u5217\u306b\u5909\u63db\u3057\u305f\u969b\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u5909\u66f4\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.3.0 (2020/12/01)\r\n\r\n\u65e5\u672c\u306e\u73fe\u5728\u306e datetime \u3092\u53d6\u5f97\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\nJson\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u3093\u3067\u4fdd\u6301\u3059\u308b\u30af\u30e9\u30b9\u3092\u8ffd\u52a0\r\n\r\n\u521d\u671f\u5316\u95a2\u6570\u3092\u30e9\u30a4\u30d6\u30e9\u30ea\u5185\u3067\u4f7f\u7528\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3059\u308b\u95a2\u6570\u306b\u540d\u524d\u3092\u5909\u66f4\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.2.1 (2020/11/24)\r\n\r\n\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u969b\u306b\u3001\u5143\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u6700\u5f8c\u306b\u6539\u884c\u304c\u542b\u307e\u308c\u3066\u3044\u305f\u5834\u5408\u306f\u6539\u884c\u3092\u524a\u9664\u3059\u308b\u3088\u3046\u306b\u8abf\u6574\r\n\r\n\u30a8\u30e9\u30fc\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u95a2\u6570\u3092\u8907\u6570\u884c\u306e\u30ed\u30b0\u306b\u5bfe\u5fdc\r\n\r\n\u8d77\u52d5\u6642\u306e\u521d\u671f\u5316\u51e6\u7406\u3092\u884c\u3046\u95a2\u6570\u3092\u4f5c\u6210\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.2.0 (2020/10/29)\r\n\r\n\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u6587\u5b57\u304c\u5165\u529b\u3055\u308c\u308b\u307e\u3067\u518d\u5165\u529b\u3092\u6c42\u3081\u308b\u5165\u529b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.1.1 (2020/10/20)\r\n\r\ndownload_file\u95a2\u6570\u3068download_and_check_file\u95a2\u6570\u3067\u30d5\u30a1\u30a4\u30eb\u304c\u65e2\u306b\u5b58\u5728\u3059\u308b\u5834\u5408\u306b\u4e0a\u66f8\u304d\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u6307\u5b9a\u3067\u304d\u308b\u5f15\u6570\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.1.0 (2020/10/17)\r\n\r\n\u901a\u5e38\u306e\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u30d7\u30ed\u30b0\u30e9\u30e0\u7d42\u4e86\u6642\u306b\u4e00\u6642\u505c\u6b62\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u30ea\u30f3\u30af\u5148\u304c\u5b58\u5728\u3059\u308b\u304b\u3069\u3046\u304b\u3092\u78ba\u8a8d\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u30e9\u30a4\u30d6\u30e9\u30ea\u5185\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9\u304b\u3089\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d6\u5f97\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u5217\u6319\u578b\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u5185\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\r\n\r\n\r\n\r\n\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u4e0a\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u95a2\u6570\u3067\u3001\u5b58\u5728\u3057\u306a\u3044URL\u3092\u6307\u5b9a\u3059\u308b\u3068\u30af\u30e9\u30c3\u30b7\u30e5\u3059\u308b\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\nprint_log\u95a2\u6570\u306b\u6587\u5b57\u5217\u4ee5\u5916\u306e\u3082\u306e\u3092\u6e21\u3057\u305f\u969b\u306b\u30af\u30e9\u30c3\u30b7\u30e5\u3059\u308b\u4e0d\u5177\u5408\u3092\u4fee\u6b63\r\n\r\n\r\n\r\n----------------------------------------------------------------------------------------------------------\r\n\r\nver.1.0.0 (2020/10/15)\r\n\r\n\u521d\u7248\r\n\r\n\u30a8\u30e9\u30fc\u30ed\u30b0\u3092\u51fa\u529b\u3059\u308b\u95a2\u6570\u3092\u5b9f\u88c5\r\n\r\n\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u4e0a\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u95a2\u6570\u3092\u8ffd\u52a0\r\n\r\n\u30d5\u30a1\u30a4\u30eb\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3001\u5931\u6557\u6642\u306b\u518d\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3092\u8a66\u307f\u308b\u95a2\u6570\r\n\r\n```\r\n\r\n\r\n\r\n\r\n\r\n## Author\r\n\r\nNicoyou\r\n\r\n\r\n\r\n[@NicoyouSoft](https://twitter.com/NicoyouSoft)\r\n\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "You can use a slightly useful function.",
    "version": "1.19.1",
    "project_urls": {
        "Homepage": "https://github.com/nicoyou/nlib"
    },
    "split_keywords": [
        "nlib3",
        "nlib",
        "library",
        "utility",
        "nicoyou_lib",
        "nicoyou"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c84e046a09fc31a98159985534cc42989259cfa7b29bb604ad214f095818ff0c",
                "md5": "bf2290f95a199c7fd541ff87e7248350",
                "sha256": "ad0dd2b076c70c2cdafa82c9d3868a7ecba872859f0232ffc29e152dc86788a6"
            },
            "downloads": -1,
            "filename": "nlib3-1.19.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bf2290f95a199c7fd541ff87e7248350",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 15826,
            "upload_time": "2024-02-23T04:59:24",
            "upload_time_iso_8601": "2024-02-23T04:59:24.878556Z",
            "url": "https://files.pythonhosted.org/packages/c8/4e/046a09fc31a98159985534cc42989259cfa7b29bb604ad214f095818ff0c/nlib3-1.19.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6772a0c1ef1718e0b81d2e0e293414239b79c204f99dfafe779810bc2bf24045",
                "md5": "92e5860e5332955b85de787e2142b93e",
                "sha256": "3d6f2f8063631220ee8af6b7e21113684fdc6e8160453259cad53041046b3aea"
            },
            "downloads": -1,
            "filename": "nlib3-1.19.1.tar.gz",
            "has_sig": false,
            "md5_digest": "92e5860e5332955b85de787e2142b93e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 19500,
            "upload_time": "2024-02-23T04:59:26",
            "upload_time_iso_8601": "2024-02-23T04:59:26.938054Z",
            "url": "https://files.pythonhosted.org/packages/67/72/a0c1ef1718e0b81d2e0e293414239b79c204f99dfafe779810bc2bf24045/nlib3-1.19.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-23 04:59:26",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "nicoyou",
    "github_project": "nlib",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "setuptools",
            "specs": []
        },
        {
            "name": "wheel",
            "specs": []
        },
        {
            "name": "twine",
            "specs": []
        }
    ],
    "lcname": "nlib3"
}
        
Elapsed time: 0.19689s