קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
מחרוזות מסמכים הניתנות לבדיקה
TensorFlow משתמש ב- DocTest כדי לבדוק קטעי קוד ב-Python docstrings. הקטע חייב להיות קוד Python בר הפעלה. כדי לאפשר בדיקה, הכנס לפני השורה >>> (שלוש סוגריים של זווית שמאל). לדוגמה, הנה קטע מהפונקציה tf.concat בקובץ המקור array_ops.py :
כדי להעריך את איכות תיעוד ההפניה, עיין בסעיף הדוגמה של העצה של TensorFlow 2 API Docs . (שים לב ש-Task Tracker בגיליון זה אינו בשימוש עוד.)
הפוך את הקוד לניתן לבדיקה עם DocTest
נכון לעכשיו, מחרוזות docstrings רבות משתמשות ב-backticks (```) כדי לזהות קוד. כדי להפוך את הקוד לניתן לבדיקה עם DocTest:
הסר את הסימנים האחוריים (```) והשתמש בסוגריים השמאליים (>>>) לפני כל שורה. השתמש ב-(...) לפני המשך קווים.
הוסף שורה חדשה כדי להפריד בין קטעי DocTest מטקסט Markdown לעיבוד כראוי ב-tensorflow.org.
התאמות אישיות
TensorFlow משתמש במספר התאמות אישיות ללוגיקה המובנית של doctest:
זה לא משווה ערכי צף כטקסט: ערכי צף מופקים מהטקסט ומשווים באמצעות allclose עם סובלנות atol ו- rtol ליברליות . זה מאפשר:
מסמכים ברורים יותר - מחברים אינם צריכים לכלול את כל המקומות העשרוניים.
בדיקות חזקות יותר - שינויים מספריים ביישום הבסיסי לעולם לא אמורים לגרום לבדיקת doctest להיכשל.
זה בודק את הפלט רק אם המחבר כולל פלט עבור שורה. זה מאפשר מסמכים ברורים יותר מכיוון שמחברים בדרך כלל לא צריכים ללכוד ערכי ביניים לא רלוונטיים כדי למנוע מהם להיות מודפסים.
שיקולי דוקטורט
בסך הכל : המטרה של doctest היא לספק תיעוד, ולאשר שהתיעוד עובד. זה שונה מבדיקת יחידות. כָּך:
שמור על דוגמאות פשוטות.
הימנע מיציאות ארוכות או מסובכות.
השתמש במספרים עגולים אם אפשר.
פורמט פלט : הפלט של קטע הקוד צריך להיות ישירות מתחת לקוד שיוצר את הפלט. כמו כן, הפלט במחרוזת הדוק חייב להיות שווה בדיוק למה שהפלט יהיה לאחר ביצוע הקוד. ראה את הדוגמה לעיל. כמו כן, בדוק את החלק הזה בתיעוד DocTest. אם הפלט חורג ממגבלת 80 השורות, אתה יכול לשים את הפלט הנוסף על הקו החדש ו-DocTest יזהה אותו. לדוגמה, ראה בלוקים מרובי שורות למטה.
גלובלים : המודולים `tf` , np ו- os זמינים תמיד ב-DocTest של TensorFlow.
השתמש בסמלים : ב-DocTest אתה יכול לגשת ישירות לסמלים המוגדרים באותו קובץ. כדי להשתמש בסמל שאינו מוגדר בקובץ הנוכחי, אנא השתמש ב-API הציבורי של TensorFlow tf.xxx במקום xxx . כפי שניתן לראות בדוגמה למטה, הגישה אל `random.normal` מתבצעת דרך `tf.random.normal` . הסיבה לכך היא ש- `random.normal` אינו גלוי ב- NewLayer .
ערכי נקודה צפה : ה-TensorFlow doctest מחלץ ערכי ציפה ממחרוזות התוצאה, ומשווה שימוש ב- np.allclose עם סובלנות סבירות ( atol=1e-6 , rtol=1e-6 ). כך המחברים אינם צריכים לדאוג ששרשרת מסמכים מדויקת מדי הגורמת לכשלים עקב בעיות מספריות. כל שעליך לעשות הוא להדביק את הערך הצפוי.
פלט לא דטרמיניסטי : השתמש באליפסיס ( ... ) עבור החלקים הלא בטוחים ו-DocTest יתעלם מאותה מחרוזת משנה.
אם אתה עובד על פרויקט חיצוני, או על ממשקי API של TensorFlow שממוקמים בפרויקט חיצוני, הוראות אלו לא יעבדו אלא אם לפרוייקט יש עותק מקומי משלו של tf_doctest , ואתה משתמש בעותק הזה במקום של TensorFlow.
[null,null,["עדכון אחרון: 2025-01-14 (שעון UTC)."],[],[],null,["# Contribute to the TensorFlow API documentation\n\n\u003cbr /\u003e\n\nTestable docstrings\n-------------------\n\nTensorFlow uses [DocTest](https://docs.python.org/3/library/doctest.html) to\ntest code snippets in Python docstrings. The snippet must be executable Python\ncode. To enable testing, prepend the line with `\u003e\u003e\u003e` (three left-angle\nbrackets). For example, here's a excerpt from the [`tf.concat`](https://www.tensorflow.org/api_docs/python/tf/concat) function in the\n[array_ops.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/array_ops.py)\nsource file: \n\n def concat(values, axis, name=\"concat\"):\n \"\"\"Concatenates tensors along one dimension.\n ...\n\n \u003e\u003e\u003e t1 = [[1, 2, 3], [4, 5, 6]]\n \u003e\u003e\u003e t2 = [[7, 8, 9], [10, 11, 12]]\n \u003e\u003e\u003e concat([t1, t2], 0)\n \u003ctf.Tensor: shape=(4, 3), dtype=int32, numpy=\n array([[ 1, 2, 3],\n [ 4, 5, 6],\n [ 7, 8, 9],\n [10, 11, 12]], dtype=int32)\u003e\n\n \u003c... more description or code snippets ...\u003e\n\n Args:\n values: A list of `tf.Tensor` objects or a single `tf.Tensor`.\n axis: 0-D `int32` `Tensor`. Dimension along which to concatenate. Must be\n in the range `[-rank(values), rank(values))`. As in Python, indexing for\n axis is 0-based. Positive axis in the rage of `[0, rank(values))` refers\n to `axis`-th dimension. And negative axis refers to `axis +\n rank(values)`-th dimension.\n name: A name for the operation (optional).\n\n Returns:\n A `tf.Tensor` resulting from concatenation of the input tensors.\n \"\"\"\n\n \u003ccode here\u003e\n\n| **Note:** TensorFlow DocTest uses TensorFlow 2 and Python 3.\n\nTo assess reference documentation quality, see the example section of the\n[TensorFlow 2 API Docs advice](https://docs.google.com/document/d/1e20k9CuaZ_-hp25-sSd8E8qldxKPKQR-SkwojYr_r-U/preview).\n(Be aware that the Task Tracker on this sheet is no longer in use.)\n\n### Make the code testable with DocTest\n\nCurrently, many docstrings use backticks (\\`\\`\\`) to identify code. To make the\ncode testable with DocTest:\n\n- Remove the backticks (\\`\\`\\`) and use the left-brackets (\\\u003e\\\u003e\\\u003e) in front of each line. Use (...) in front of continued lines.\n- Add a newline to separate DocTest snippets from Markdown text to render properly on tensorflow.org.\n\n### Customizations\n\nTensorFlow uses a few customizations to the builtin doctest logic:\n\n- It does not compare float values as text: Float values are extracted from the text and compared using `allclose` with *liberal `atol` and `rtol`\n tolerences* . This allows :\n - Clearer docs - Authors don't need to include all decimal places.\n - More robust tests - Numerical changes in the underlying implementation should never cause a doctest to fail.\n- It only checks the output if the author includes output for a line. This allows for clearer docs because authors usually don't need to capture irrelevant intermediate values to prevent them from being printed.\n\n### Docstring considerations\n\n- *Overall* : The goal of doctest is to provide documentation, and confirm that the documentation works. This is different from unit-testing. So:\n - Keep examples simple.\n - Avoid long or complicated outputs.\n - Use round numbers if possible.\n- *Output format* : The output of the snippet needs to be directly beneath the code that's generating the output. Also, the output in the docstring has to be exactly equal to what the output would be after the code is executed. See the above example. Also, check out [this part](https://docs.python.org/3/library/doctest.html#warnings) in the DocTest documentation. If the output exceeds the 80 line limit, you can put the extra output on the new line and DocTest will recognize it. For example, see multi-line blocks below.\n- *Globals* : The ```tf```, `np` and `os` modules are always available in TensorFlow's DocTest.\n- *Use symbols* : In DocTest you can directly access symbols defined in the\n same file. To use a symbol that's not defined in the current file, please\n use TensorFlow's public API `tf.xxx` instead of `xxx`. As you can see in the\n example below, ```random.normal``` is accessed via\n ```tf.random.normal```. This is because\n ```random.normal``` is not visible in `NewLayer`.\n\n def NewLayer():\n \"\"\"This layer does cool stuff.\n\n Example usage:\n\n \u003e\u003e\u003e x = tf.random.normal((1, 28, 28, 3))\n \u003e\u003e\u003e new_layer = NewLayer(x)\n \u003e\u003e\u003e new_layer\n \u003ctf.Tensor: shape=(1, 14, 14, 3), dtype=int32, numpy=...\u003e\n \"\"\"\n\n- *Floating point values* : The TensorFlow doctest extracts float values from\n the result strings, and compares using `np.allclose` with reasonable\n tolerances (`atol=1e-6`, `rtol=1e-6`). This way authors do not need to worry\n about overly precise docstrings causing failures due to numerical issues.\n Simply paste in the expected value.\n\n- *Non-deterministic output* : Use ellipsis(`...`) for the uncertain parts and\n DocTest will ignore that substring.\n\n x = tf.random.normal((1,))\n print(x)\n \u003ctf.Tensor: shape=(1,), dtype=float32, numpy=..., dtype=float32)\u003e\n \n- *Multi-line blocks*: DocTest is strict about the difference between a single\n and a multi-line statement. Note the usage of (...) below:\n\n if x \u003e 0:\n print(\"X is positive\")\n model.compile(\n loss=\"mse\",\n optimizer=\"adam\")\n \n- *Exceptions* : Exception details are ignored except the Exception that's\n raised. See\n [this](https://docs.python.org/3/library/doctest.html#doctest.IGNORE_EXCEPTION_DETAIL)\n for more details.\n\n np_var = np.array([1, 2])\n tf.keras.backend.is_keras_tensor(np_var)\n Traceback (most recent call last):\n\n ValueError: Unexpectedly found an instance of type `\u003cclass 'numpy.ndarray'\u003e`.\n \n### Use a project-local copy of tf-doctest.\n\n| **Note:** The tf-doctest utility is only setup to test source files within the `tensorflow` repository. If the files you are editing are in TensorFlow you can skip to the next section. Otherwise keep reading this section.\n\nSome API's in TensorFlow come from an external project:\n\n- `tf.estimator` (from [tensorflow_estimator](https://github.com/tensorflow/estimator))\n- [`tf.summary`](https://www.tensorflow.org/api_docs/python/tf/summary) [tensorboard](https://github.com/tensorflow/tensorboard))\n- [`tf.keras.preprocessing`](https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing) (from [keras-preprocessing](https://github.com/keras-team/keras-preprocessing))\n\nIf you're working on an external project, or on TensorFlow APIs that are housed\nin an external project, these instructions won't work unless that project has\nits own local copy of `tf_doctest`, and you use that copy instead of\nTensorFlow's.\n\nFor example:\n[tf_estimator_doctest.py](https://github.com/tensorflow/estimator/python/estimator/tf_estimator_doctest.py).\n\n### Test on your local machine\n\nThere are two ways to test the code in the docstring locally:\n\n- If you are only changing the docstring of a class/function/method, then you\n can test it by passing that file's path to\n [tf_doctest.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docs/tf_doctest.py).\n For example:\n\n python tf_doctest.py --file=\u003cfile_path\u003e\n\n This will run it using your installed version of TensorFlow. To be sure\n you're running the same code that you're testing:\n - Use an up to date [tf-nightly](https://pypi.org/project/tf-nightly/) `pip install -U tf-nightly`\n - Rebase your pull request onto a recent pull from [TensorFlow's](https://github.com/tensorflow/tensorflow) master branch.\n- If you are changing the code and the docstring of a class/function/method,\n then you will need to\n [build TensorFlow from source](../../install/source). Once you are setup\n to build from source, you can run the tests:\n\n bazel run //tensorflow/tools/docs:tf_doctest\n\n or \n\n bazel run //tensorflow/tools/docs:tf_doctest -- --module=ops.array_ops\n\n The `--module` is relative to `tensorflow.python`."]]