wandb 0.20.1rc20250604__py3-none-any.whl → 0.21.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. wandb/__init__.py +3 -6
  2. wandb/__init__.pyi +24 -23
  3. wandb/analytics/sentry.py +2 -2
  4. wandb/apis/importers/internals/internal.py +0 -3
  5. wandb/apis/internal.py +3 -0
  6. wandb/apis/paginator.py +17 -4
  7. wandb/apis/public/api.py +85 -4
  8. wandb/apis/public/artifacts.py +10 -8
  9. wandb/apis/public/files.py +5 -5
  10. wandb/apis/public/projects.py +44 -3
  11. wandb/apis/public/registries/{utils.py → _utils.py} +12 -12
  12. wandb/apis/public/registries/registries_search.py +2 -2
  13. wandb/apis/public/registries/registry.py +19 -18
  14. wandb/apis/public/reports.py +64 -8
  15. wandb/apis/public/runs.py +16 -23
  16. wandb/automations/__init__.py +10 -10
  17. wandb/automations/_filters/run_metrics.py +0 -2
  18. wandb/automations/_utils.py +0 -2
  19. wandb/automations/actions.py +0 -2
  20. wandb/automations/automations.py +0 -2
  21. wandb/automations/events.py +0 -2
  22. wandb/bin/gpu_stats +0 -0
  23. wandb/cli/beta.py +1 -7
  24. wandb/cli/cli.py +0 -30
  25. wandb/env.py +0 -6
  26. wandb/integration/catboost/catboost.py +6 -2
  27. wandb/integration/kfp/kfp_patch.py +3 -1
  28. wandb/integration/sb3/sb3.py +3 -3
  29. wandb/integration/ultralytics/callback.py +6 -2
  30. wandb/plot/__init__.py +2 -0
  31. wandb/plot/bar.py +30 -29
  32. wandb/plot/confusion_matrix.py +75 -71
  33. wandb/plot/histogram.py +26 -25
  34. wandb/plot/line.py +33 -32
  35. wandb/plot/line_series.py +100 -103
  36. wandb/plot/pr_curve.py +33 -32
  37. wandb/plot/roc_curve.py +38 -38
  38. wandb/plot/scatter.py +27 -27
  39. wandb/proto/v3/wandb_internal_pb2.py +366 -385
  40. wandb/proto/v3/wandb_settings_pb2.py +2 -2
  41. wandb/proto/v3/wandb_telemetry_pb2.py +10 -10
  42. wandb/proto/v4/wandb_internal_pb2.py +352 -356
  43. wandb/proto/v4/wandb_settings_pb2.py +2 -2
  44. wandb/proto/v4/wandb_telemetry_pb2.py +10 -10
  45. wandb/proto/v5/wandb_internal_pb2.py +352 -356
  46. wandb/proto/v5/wandb_settings_pb2.py +2 -2
  47. wandb/proto/v5/wandb_telemetry_pb2.py +10 -10
  48. wandb/proto/v6/wandb_internal_pb2.py +352 -356
  49. wandb/proto/v6/wandb_settings_pb2.py +2 -2
  50. wandb/proto/v6/wandb_telemetry_pb2.py +10 -10
  51. wandb/sdk/artifacts/_generated/__init__.py +12 -1
  52. wandb/sdk/artifacts/_generated/input_types.py +20 -2
  53. wandb/sdk/artifacts/_generated/link_artifact.py +21 -0
  54. wandb/sdk/artifacts/_generated/operations.py +9 -0
  55. wandb/sdk/artifacts/_validators.py +40 -2
  56. wandb/sdk/artifacts/artifact.py +163 -21
  57. wandb/sdk/artifacts/storage_handlers/s3_handler.py +42 -1
  58. wandb/sdk/backend/backend.py +1 -1
  59. wandb/sdk/data_types/base_types/media.py +9 -7
  60. wandb/sdk/data_types/base_types/wb_value.py +6 -6
  61. wandb/sdk/data_types/saved_model.py +3 -3
  62. wandb/sdk/data_types/table.py +41 -41
  63. wandb/sdk/data_types/trace_tree.py +12 -12
  64. wandb/sdk/interface/interface.py +8 -19
  65. wandb/sdk/interface/interface_shared.py +7 -16
  66. wandb/sdk/internal/datastore.py +18 -18
  67. wandb/sdk/internal/handler.py +4 -74
  68. wandb/sdk/internal/internal_api.py +54 -0
  69. wandb/sdk/internal/sender.py +23 -3
  70. wandb/sdk/internal/sender_config.py +9 -0
  71. wandb/sdk/launch/_project_spec.py +3 -3
  72. wandb/sdk/launch/agent/agent.py +3 -3
  73. wandb/sdk/launch/agent/job_status_tracker.py +3 -1
  74. wandb/sdk/launch/utils.py +3 -3
  75. wandb/sdk/lib/console_capture.py +66 -19
  76. wandb/sdk/lib/printer.py +6 -7
  77. wandb/sdk/lib/progress.py +1 -3
  78. wandb/sdk/lib/service/ipc_support.py +13 -0
  79. wandb/sdk/lib/{service_connection.py → service/service_connection.py} +20 -56
  80. wandb/sdk/lib/service/service_port_file.py +105 -0
  81. wandb/sdk/lib/service/service_process.py +111 -0
  82. wandb/sdk/lib/service/service_token.py +164 -0
  83. wandb/sdk/lib/sock_client.py +8 -12
  84. wandb/sdk/wandb_init.py +1 -5
  85. wandb/sdk/wandb_require.py +9 -21
  86. wandb/sdk/wandb_run.py +23 -137
  87. wandb/sdk/wandb_settings.py +233 -80
  88. wandb/sdk/wandb_setup.py +2 -13
  89. {wandb-0.20.1rc20250604.dist-info → wandb-0.21.0.dist-info}/METADATA +1 -3
  90. {wandb-0.20.1rc20250604.dist-info → wandb-0.21.0.dist-info}/RECORD +93 -119
  91. wandb/sdk/internal/flow_control.py +0 -263
  92. wandb/sdk/internal/internal.py +0 -401
  93. wandb/sdk/internal/internal_util.py +0 -97
  94. wandb/sdk/internal/system/__init__.py +0 -0
  95. wandb/sdk/internal/system/assets/__init__.py +0 -25
  96. wandb/sdk/internal/system/assets/aggregators.py +0 -31
  97. wandb/sdk/internal/system/assets/asset_registry.py +0 -20
  98. wandb/sdk/internal/system/assets/cpu.py +0 -163
  99. wandb/sdk/internal/system/assets/disk.py +0 -210
  100. wandb/sdk/internal/system/assets/gpu.py +0 -416
  101. wandb/sdk/internal/system/assets/gpu_amd.py +0 -233
  102. wandb/sdk/internal/system/assets/interfaces.py +0 -205
  103. wandb/sdk/internal/system/assets/ipu.py +0 -177
  104. wandb/sdk/internal/system/assets/memory.py +0 -166
  105. wandb/sdk/internal/system/assets/network.py +0 -125
  106. wandb/sdk/internal/system/assets/open_metrics.py +0 -293
  107. wandb/sdk/internal/system/assets/tpu.py +0 -154
  108. wandb/sdk/internal/system/assets/trainium.py +0 -393
  109. wandb/sdk/internal/system/env_probe_helpers.py +0 -13
  110. wandb/sdk/internal/system/system_info.py +0 -248
  111. wandb/sdk/internal/system/system_monitor.py +0 -224
  112. wandb/sdk/internal/writer.py +0 -204
  113. wandb/sdk/lib/service_token.py +0 -93
  114. wandb/sdk/service/__init__.py +0 -0
  115. wandb/sdk/service/_startup_debug.py +0 -22
  116. wandb/sdk/service/port_file.py +0 -53
  117. wandb/sdk/service/server.py +0 -107
  118. wandb/sdk/service/server_sock.py +0 -286
  119. wandb/sdk/service/service.py +0 -252
  120. wandb/sdk/service/streams.py +0 -425
  121. wandb/sdk/wandb_metadata.py +0 -623
  122. {wandb-0.20.1rc20250604.dist-info → wandb-0.21.0.dist-info}/WHEEL +0 -0
  123. {wandb-0.20.1rc20250604.dist-info → wandb-0.21.0.dist-info}/entry_points.txt +0 -0
  124. {wandb-0.20.1rc20250604.dist-info → wandb-0.21.0.dist-info}/licenses/LICENSE +0 -0
@@ -23,16 +23,16 @@ def confusion_matrix(
23
23
  """Constructs a confusion matrix from a sequence of probabilities or predictions.
24
24
 
25
25
  Args:
26
- probs (Sequence[Sequence[float]] | None): A sequence of predicted probabilities for each
26
+ probs: A sequence of predicted probabilities for each
27
27
  class. The sequence shape should be (N, K) where N is the number of samples
28
28
  and K is the number of classes. If provided, `preds` should not be provided.
29
- y_true (Sequence[T] | None): A sequence of true labels.
30
- preds (Sequence[T] | None): A sequence of predicted class labels. If provided,
29
+ y_true: A sequence of true labels.
30
+ preds: A sequence of predicted class labels. If provided,
31
31
  `probs` should not be provided.
32
- class_names (Sequence[str] | None): Sequence of class names. If not
32
+ class_names: Sequence of class names. If not
33
33
  provided, class names will be defined as "Class_1", "Class_2", etc.
34
- title (str): Title of the confusion matrix chart.
35
- split_table (bool): Whether the table should be split into a separate section
34
+ title: Title of the confusion matrix chart.
35
+ split_table: Whether the table should be split into a separate section
36
36
  in the W&B UI. If `True`, the table will be displayed in a section named
37
37
  "Custom Chart Tables". Default is `False`.
38
38
 
@@ -48,75 +48,79 @@ def confusion_matrix(
48
48
  wandb.Error: If numpy is not installed.
49
49
 
50
50
  Examples:
51
- 1. Logging a confusion matrix with random probabilities for wildlife
52
- classification:
53
- ```
54
- import numpy as np
55
- import wandb
56
-
57
- # Define class names for wildlife
58
- wildlife_class_names = ["Lion", "Tiger", "Elephant", "Zebra"]
59
-
60
- # Generate random true labels (0 to 3 for 10 samples)
61
- wildlife_y_true = np.random.randint(0, 4, size=10)
62
-
63
- # Generate random probabilities for each class (10 samples x 4 classes)
64
- wildlife_probs = np.random.rand(10, 4)
65
- wildlife_probs = np.exp(wildlife_probs) / np.sum(
66
- np.exp(wildlife_probs),
67
- axis=1,
68
- keepdims=True,
51
+ Logging a confusion matrix with random probabilities for wildlife
52
+ classification:
53
+
54
+ ```python
55
+ import numpy as np
56
+ import wandb
57
+
58
+ # Define class names for wildlife
59
+ wildlife_class_names = ["Lion", "Tiger", "Elephant", "Zebra"]
60
+
61
+ # Generate random true labels (0 to 3 for 10 samples)
62
+ wildlife_y_true = np.random.randint(0, 4, size=10)
63
+
64
+ # Generate random probabilities for each class (10 samples x 4 classes)
65
+ wildlife_probs = np.random.rand(10, 4)
66
+ wildlife_probs = np.exp(wildlife_probs) / np.sum(
67
+ np.exp(wildlife_probs),
68
+ axis=1,
69
+ keepdims=True,
70
+ )
71
+
72
+ # Initialize W&B run and log confusion matrix
73
+ with wandb.init(project="wildlife_classification") as run:
74
+ confusion_matrix = wandb.plot.confusion_matrix(
75
+ probs=wildlife_probs,
76
+ y_true=wildlife_y_true,
77
+ class_names=wildlife_class_names,
78
+ title="Wildlife Classification Confusion Matrix",
69
79
  )
80
+ run.log({"wildlife_confusion_matrix": confusion_matrix})
81
+ ```
82
+
83
+ In this example, random probabilities are used to generate a confusion
84
+ matrix.
85
+
86
+ Logging a confusion matrix with simulated model predictions and 85%
87
+ accuracy:
70
88
 
71
- # Initialize W&B run and log confusion matrix
72
- with wandb.init(project="wildlife_classification") as run:
73
- confusion_matrix = wandb.plot.confusion_matrix(
74
- probs=wildlife_probs,
75
- y_true=wildlife_y_true,
76
- class_names=wildlife_class_names,
77
- title="Wildlife Classification Confusion Matrix",
78
- )
79
- run.log({"wildlife_confusion_matrix": confusion_matrix})
80
- ```
81
- In this example, random probabilities are used to generate a confusion
82
- matrix.
83
-
84
- 2. Logging a confusion matrix with simulated model predictions and 85%
85
- accuracy:
86
- ```
87
- import numpy as np
88
- import wandb
89
-
90
- # Define class names for wildlife
91
- wildlife_class_names = ["Lion", "Tiger", "Elephant", "Zebra"]
92
-
93
- # Simulate true labels for 200 animal images (imbalanced distribution)
94
- wildlife_y_true = np.random.choice(
95
- [0, 1, 2, 3],
96
- size=200,
97
- p=[0.2, 0.3, 0.25, 0.25],
89
+ ```python
90
+ import numpy as np
91
+ import wandb
92
+
93
+ # Define class names for wildlife
94
+ wildlife_class_names = ["Lion", "Tiger", "Elephant", "Zebra"]
95
+
96
+ # Simulate true labels for 200 animal images (imbalanced distribution)
97
+ wildlife_y_true = np.random.choice(
98
+ [0, 1, 2, 3],
99
+ size=200,
100
+ p=[0.2, 0.3, 0.25, 0.25],
101
+ )
102
+
103
+ # Simulate model predictions with 85% accuracy
104
+ wildlife_preds = [
105
+ y_t
106
+ if np.random.rand() < 0.85
107
+ else np.random.choice([x for x in range(4) if x != y_t])
108
+ for y_t in wildlife_y_true
109
+ ]
110
+
111
+ # Initialize W&B run and log confusion matrix
112
+ with wandb.init(project="wildlife_classification") as run:
113
+ confusion_matrix = wandb.plot.confusion_matrix(
114
+ preds=wildlife_preds,
115
+ y_true=wildlife_y_true,
116
+ class_names=wildlife_class_names,
117
+ title="Simulated Wildlife Classification Confusion Matrix",
98
118
  )
119
+ run.log({"wildlife_confusion_matrix": confusion_matrix})
120
+ ```
99
121
 
100
- # Simulate model predictions with 85% accuracy
101
- wildlife_preds = [
102
- y_t
103
- if np.random.rand() < 0.85
104
- else np.random.choice([x for x in range(4) if x != y_t])
105
- for y_t in wildlife_y_true
106
- ]
107
-
108
- # Initialize W&B run and log confusion matrix
109
- with wandb.init(project="wildlife_classification") as run:
110
- confusion_matrix = wandb.plot.confusion_matrix(
111
- preds=wildlife_preds,
112
- y_true=wildlife_y_true,
113
- class_names=wildlife_class_names,
114
- title="Simulated Wildlife Classification Confusion Matrix"
115
- )
116
- run.log({"wildlife_confusion_matrix": confusion_matrix})
117
- ```
118
- In this example, predictions are simulated with 85% accuracy to generate a
119
- confusion matrix.
122
+ In this example, predictions are simulated with 85% accuracy to generate a
123
+ confusion matrix.
120
124
  """
121
125
  np = util.get_module(
122
126
  "numpy",
wandb/plot/histogram.py CHANGED
@@ -18,10 +18,10 @@ def histogram(
18
18
  """Constructs a histogram chart from a W&B Table.
19
19
 
20
20
  Args:
21
- table (wandb.Table): The W&B Table containing the data for the histogram.
22
- value (str): The label for the bin axis (x-axis).
23
- title (str): The title of the histogram plot.
24
- split_table (bool): Whether the table should be split into a separate section
21
+ table: The W&B Table containing the data for the histogram.
22
+ value: The label for the bin axis (x-axis).
23
+ title: The title of the histogram plot.
24
+ split_table: Whether the table should be split into a separate section
25
25
  in the W&B UI. If `True`, the table will be displayed in a section named
26
26
  "Custom Chart Tables". Default is `False`.
27
27
 
@@ -30,31 +30,32 @@ def histogram(
30
30
  chart, pass it to `wandb.log()`.
31
31
 
32
32
  Example:
33
- ```
34
- import math
35
- import random
36
- import wandb
37
33
 
38
- # Generate random data
39
- data = [[i, random.random() + math.sin(i / 10)] for i in range(100)]
34
+ ```python
35
+ import math
36
+ import random
37
+ import wandb
38
+
39
+ # Generate random data
40
+ data = [[i, random.random() + math.sin(i / 10)] for i in range(100)]
40
41
 
41
- # Create a W&B Table
42
- table = wandb.Table(
43
- data=data,
44
- columns=["step", "height"],
45
- )
42
+ # Create a W&B Table
43
+ table = wandb.Table(
44
+ data=data,
45
+ columns=["step", "height"],
46
+ )
46
47
 
47
- # Create a histogram plot
48
- histogram = wandb.plot.histogram(
49
- table,
50
- value="height",
51
- title="My Histogram",
52
- )
48
+ # Create a histogram plot
49
+ histogram = wandb.plot.histogram(
50
+ table,
51
+ value="height",
52
+ title="My Histogram",
53
+ )
53
54
 
54
- # Log the histogram plot to W&B
55
- with wandb.init(...) as run:
56
- run.log({"histogram-plot1": histogram})
57
- ```
55
+ # Log the histogram plot to W&B
56
+ with wandb.init(...) as run:
57
+ run.log({"histogram-plot1": histogram})
58
+ ```
58
59
  """
59
60
  return plot_table(
60
61
  data_table=table,
wandb/plot/line.py CHANGED
@@ -20,13 +20,13 @@ def line(
20
20
  """Constructs a customizable line chart.
21
21
 
22
22
  Args:
23
- table (wandb.Table): The table containing data for the chart.
24
- x (str): Column name for the x-axis values.
25
- y (str): Column name for the y-axis values.
26
- stroke (str):Column name to differentiate line strokes (e.g., for
23
+ table: The table containing data for the chart.
24
+ x: Column name for the x-axis values.
25
+ y: Column name for the y-axis values.
26
+ stroke: Column name to differentiate line strokes (e.g., for
27
27
  grouping lines).
28
- title (str):Title of the chart.
29
- split_table (bool): Whether the table should be split into a separate section
28
+ title: Title of the chart.
29
+ split_table: Whether the table should be split into a separate section
30
30
  in the W&B UI. If `True`, the table will be displayed in a section named
31
31
  "Custom Chart Tables". Default is `False`.
32
32
 
@@ -35,35 +35,36 @@ def line(
35
35
  chart, pass it to `wandb.log()`.
36
36
 
37
37
  Example:
38
- ```python
39
- import math
40
- import random
41
- import wandb
42
38
 
43
- # Create multiple series of data with different patterns
44
- data = []
45
- for i in range(100):
46
- # Series 1: Sinusoidal pattern with random noise
47
- data.append([i, math.sin(i / 10) + random.uniform(-0.1, 0.1), "series_1"])
48
- # Series 2: Cosine pattern with random noise
49
- data.append([i, math.cos(i / 10) + random.uniform(-0.1, 0.1), "series_2"])
50
- # Series 3: Linear increase with random noise
51
- data.append([i, i / 10 + random.uniform(-0.5, 0.5), "series_3"])
39
+ ```python
40
+ import math
41
+ import random
42
+ import wandb
43
+
44
+ # Create multiple series of data with different patterns
45
+ data = []
46
+ for i in range(100):
47
+ # Series 1: Sinusoidal pattern with random noise
48
+ data.append([i, math.sin(i / 10) + random.uniform(-0.1, 0.1), "series_1"])
49
+ # Series 2: Cosine pattern with random noise
50
+ data.append([i, math.cos(i / 10) + random.uniform(-0.1, 0.1), "series_2"])
51
+ # Series 3: Linear increase with random noise
52
+ data.append([i, i / 10 + random.uniform(-0.5, 0.5), "series_3"])
52
53
 
53
- # Define the columns for the table
54
- table = wandb.Table(data=data, columns=["step", "value", "series"])
54
+ # Define the columns for the table
55
+ table = wandb.Table(data=data, columns=["step", "value", "series"])
55
56
 
56
- # Initialize wandb run and log the line chart
57
- with wandb.init(project="line_chart_example") as run:
58
- line_chart = wandb.plot.line(
59
- table=table,
60
- x="step",
61
- y="value",
62
- stroke="series", # Group by the "series" column
63
- title="Multi-Series Line Plot",
64
- )
65
- run.log({"line-chart": line_chart})
66
- ```
57
+ # Initialize wandb run and log the line chart
58
+ with wandb.init(project="line_chart_example") as run:
59
+ line_chart = wandb.plot.line(
60
+ table=table,
61
+ x="step",
62
+ y="value",
63
+ stroke="series", # Group by the "series" column
64
+ title="Multi-Series Line Plot",
65
+ )
66
+ run.log({"line-chart": line_chart})
67
+ ```
67
68
  """
68
69
  return plot_table(
69
70
  data_table=table,
wandb/plot/line_series.py CHANGED
@@ -20,18 +20,18 @@ def line_series(
20
20
  """Constructs a line series chart.
21
21
 
22
22
  Args:
23
- xs (Iterable[Iterable] | Iterable): Sequence of x values. If a singular
23
+ xs: Sequence of x values. If a singular
24
24
  array is provided, all y values are plotted against that x array. If
25
25
  an array of arrays is provided, each y value is plotted against the
26
26
  corresponding x array.
27
- ys (Iterable[Iterable]): Sequence of y values, where each iterable represents
27
+ ys: Sequence of y values, where each iterable represents
28
28
  a separate line series.
29
- keys (Iterable[str]): Sequence of keys for labeling each line series. If
29
+ keys: Sequence of keys for labeling each line series. If
30
30
  not provided, keys will be automatically generated as "line_1",
31
31
  "line_2", etc.
32
- title (str): Title of the chart.
33
- xname (str): Label for the x-axis.
34
- split_table (bool): Whether the table should be split into a separate section
32
+ title: Title of the chart.
33
+ xname: Label for the x-axis.
34
+ split_table: Whether the table should be split into a separate section
35
35
  in the W&B UI. If `True`, the table will be displayed in a section named
36
36
  "Custom Chart Tables". Default is `False`.
37
37
 
@@ -40,103 +40,100 @@ def line_series(
40
40
  chart, pass it to `wandb.log()`.
41
41
 
42
42
  Examples:
43
- 1. Logging a single x array where all y series are plotted against
44
- the same x values:
45
-
46
- ```
47
- import wandb
48
-
49
- # Initialize W&B run
50
- with wandb.init(project="line_series_example") as run:
51
- # x values shared across all y series
52
- xs = list(range(10))
53
-
54
- # Multiple y series to plot
55
- ys = [
56
- [i for i in range(10)], # y = x
57
- [i**2 for i in range(10)], # y = x^2
58
- [i**3 for i in range(10)], # y = x^3
59
- ]
60
-
61
- # Generate and log the line series chart
62
- line_series_chart = wandb.plot.line_series(
63
- xs,
64
- ys,
65
- title="title",
66
- xname="step",
67
- )
68
- run.log({"line-series-single-x": line_series_chart})
69
- ```
70
-
71
- In this example, a single `xs` series (shared x-values) is used for all
72
- `ys` series. This results in each y-series being plotted against the
73
- same x-values (0-9).
74
-
75
- 2. Logging multiple x arrays where each y series is plotted against
76
- its corresponding x array:
77
-
78
- ```python
79
- import wandb
80
-
81
- # Initialize W&B run
82
- with wandb.init(project="line_series_example") as run:
83
- # Separate x values for each y series
84
- xs = [
85
- [i for i in range(10)], # x for first series
86
- [2 * i for i in range(10)], # x for second series (stretched)
87
- [3 * i for i in range(10)], # x for third series (stretched more)
88
- ]
89
-
90
- # Corresponding y series
91
- ys = [
92
- [i for i in range(10)], # y = x
93
- [i**2 for i in range(10)], # y = x^2
94
- [i**3 for i in range(10)], # y = x^3
95
- ]
96
-
97
- # Generate and log the line series chart
98
- line_series_chart = wandb.plot.line_series(
99
- xs, ys, title="Multiple X Arrays Example", xname="Step"
100
- )
101
- run.log({"line-series-multiple-x": line_series_chart})
102
- ```
103
-
104
- In this example, each y series is plotted against its own unique x series.
105
- This allows for more flexibility when the x values are not uniform across
106
- the data series.
107
-
108
- 3. Customizing line labels using `keys`:
109
-
110
- ```python
111
- import wandb
112
-
113
- # Initialize W&B run
114
- with wandb.init(project="line_series_example") as run:
115
- xs = list(range(10)) # Single x array
116
- ys = [
117
- [i for i in range(10)], # y = x
118
- [i**2 for i in range(10)], # y = x^2
119
- [i**3 for i in range(10)], # y = x^3
120
- ]
121
-
122
- # Custom labels for each line
123
- keys = ["Linear", "Quadratic", "Cubic"]
124
-
125
- # Generate and log the line series chart
126
- line_series_chart = wandb.plot.line_series(
127
- xs,
128
- ys,
129
- keys=keys, # Custom keys (line labels)
130
- title="Custom Line Labels Example",
131
- xname="Step",
132
- )
133
- run.log({"line-series-custom-keys": line_series_chart})
134
- ```
135
-
136
- This example shows how to provide custom labels for the lines using
137
- the `keys` argument. The keys will appear in the legend as "Linear",
138
- "Quadratic", and "Cubic".
139
-
43
+ Logging a single x array where all y series are plotted against the same x values:
44
+
45
+ ```python
46
+ import wandb
47
+
48
+ # Initialize W&B run
49
+ with wandb.init(project="line_series_example") as run:
50
+ # x values shared across all y series
51
+ xs = list(range(10))
52
+
53
+ # Multiple y series to plot
54
+ ys = [
55
+ [i for i in range(10)], # y = x
56
+ [i**2 for i in range(10)], # y = x^2
57
+ [i**3 for i in range(10)], # y = x^3
58
+ ]
59
+
60
+ # Generate and log the line series chart
61
+ line_series_chart = wandb.plot.line_series(
62
+ xs,
63
+ ys,
64
+ title="title",
65
+ xname="step",
66
+ )
67
+ run.log({"line-series-single-x": line_series_chart})
68
+ ```
69
+
70
+ In this example, a single `xs` series (shared x-values) is used for all
71
+ `ys` series. This results in each y-series being plotted against the
72
+ same x-values (0-9).
73
+
74
+ Logging multiple x arrays where each y series is plotted against its corresponding x array:
75
+
76
+ ```python
77
+ import wandb
78
+
79
+ # Initialize W&B run
80
+ with wandb.init(project="line_series_example") as run:
81
+ # Separate x values for each y series
82
+ xs = [
83
+ [i for i in range(10)], # x for first series
84
+ [2 * i for i in range(10)], # x for second series (stretched)
85
+ [3 * i for i in range(10)], # x for third series (stretched more)
86
+ ]
87
+
88
+ # Corresponding y series
89
+ ys = [
90
+ [i for i in range(10)], # y = x
91
+ [i**2 for i in range(10)], # y = x^2
92
+ [i**3 for i in range(10)], # y = x^3
93
+ ]
94
+
95
+ # Generate and log the line series chart
96
+ line_series_chart = wandb.plot.line_series(
97
+ xs, ys, title="Multiple X Arrays Example", xname="Step"
98
+ )
99
+ run.log({"line-series-multiple-x": line_series_chart})
100
+ ```
101
+
102
+ In this example, each y series is plotted against its own unique x series.
103
+ This allows for more flexibility when the x values are not uniform across
104
+ the data series.
105
+
106
+ Customizing line labels using `keys`:
107
+
108
+ ```python
109
+ import wandb
110
+
111
+ # Initialize W&B run
112
+ with wandb.init(project="line_series_example") as run:
113
+ xs = list(range(10)) # Single x array
114
+ ys = [
115
+ [i for i in range(10)], # y = x
116
+ [i**2 for i in range(10)], # y = x^2
117
+ [i**3 for i in range(10)], # y = x^3
118
+ ]
119
+
120
+ # Custom labels for each line
121
+ keys = ["Linear", "Quadratic", "Cubic"]
122
+
123
+ # Generate and log the line series chart
124
+ line_series_chart = wandb.plot.line_series(
125
+ xs,
126
+ ys,
127
+ keys=keys, # Custom keys (line labels)
128
+ title="Custom Line Labels Example",
129
+ xname="Step",
130
+ )
131
+ run.log({"line-series-custom-keys": line_series_chart})
132
+ ```
133
+
134
+ This example shows how to provide custom labels for the lines using
135
+ the `keys` argument. The keys will appear in the legend as "Linear",
136
+ "Quadratic", and "Cubic".
140
137
  """
141
138
  # If xs is a single array, repeat it for each y in ys
142
139
  if not isinstance(xs[0], Iterable) or isinstance(xs[0], (str, bytes)):
wandb/plot/pr_curve.py CHANGED
@@ -34,24 +34,24 @@ def pr_curve(
34
34
  a model's performance.
35
35
 
36
36
  Args:
37
- y_true (Iterable): True binary labels. The shape should be (`num_samples`,).
38
- y_probas (Iterable): Predicted scores or probabilities for each class.
37
+ y_true: True binary labels. The shape should be (`num_samples`,).
38
+ y_probas: Predicted scores or probabilities for each class.
39
39
  These can be probability estimates, confidence scores, or non-thresholded
40
40
  decision values. The shape should be (`num_samples`, `num_classes`).
41
- labels (list[str] | None): Optional list of class names to replace
41
+ labels: Optional list of class names to replace
42
42
  numeric values in `y_true` for easier plot interpretation.
43
43
  For example, `labels = ['dog', 'cat', 'owl']` will replace 0 with
44
44
  'dog', 1 with 'cat', and 2 with 'owl' in the plot. If not provided,
45
45
  numeric values from `y_true` will be used.
46
- classes_to_plot (list | None): Optional list of unique class values from
46
+ classes_to_plot: Optional list of unique class values from
47
47
  y_true to be included in the plot. If not specified, all unique
48
48
  classes in y_true will be plotted.
49
- interp_size (int): Number of points to interpolate recall values. The
49
+ interp_size: Number of points to interpolate recall values. The
50
50
  recall values will be fixed to `interp_size` uniformly distributed
51
51
  points in the range [0, 1], and the precision will be interpolated
52
52
  accordingly.
53
- title (str): Title of the plot. Defaults to "Precision-Recall Curve".
54
- split_table (bool): Whether the table should be split into a separate section
53
+ title: Title of the plot. Defaults to "Precision-Recall Curve".
54
+ split_table: Whether the table should be split into a separate section
55
55
  in the W&B UI. If `True`, the table will be displayed in a section named
56
56
  "Custom Chart Tables". Default is `False`.
57
57
 
@@ -60,34 +60,35 @@ def pr_curve(
60
60
  chart, pass it to `wandb.log()`.
61
61
 
62
62
  Raises:
63
- wandb.Error: If numpy, pandas, or scikit-learn is not installed.
63
+ wandb.Error: If NumPy, pandas, or scikit-learn is not installed.
64
64
 
65
65
 
66
66
  Example:
67
- ```
68
- import wandb
69
-
70
- # Example for spam detection (binary classification)
71
- y_true = [0, 1, 1, 0, 1] # 0 = not spam, 1 = spam
72
- y_probas = [
73
- [0.9, 0.1], # Predicted probabilities for the first sample (not spam)
74
- [0.2, 0.8], # Second sample (spam), and so on
75
- [0.1, 0.9],
76
- [0.8, 0.2],
77
- [0.3, 0.7],
78
- ]
79
-
80
- labels = ["not spam", "spam"] # Optional class names for readability
81
-
82
- with wandb.init(project="spam-detection") as run:
83
- pr_curve = wandb.plot.pr_curve(
84
- y_true=y_true,
85
- y_probas=y_probas,
86
- labels=labels,
87
- title="Precision-Recall Curve for Spam Detection",
88
- )
89
- run.log({"pr-curve": pr_curve})
90
- ```
67
+
68
+ ```python
69
+ import wandb
70
+
71
+ # Example for spam detection (binary classification)
72
+ y_true = [0, 1, 1, 0, 1] # 0 = not spam, 1 = spam
73
+ y_probas = [
74
+ [0.9, 0.1], # Predicted probabilities for the first sample (not spam)
75
+ [0.2, 0.8], # Second sample (spam), and so on
76
+ [0.1, 0.9],
77
+ [0.8, 0.2],
78
+ [0.3, 0.7],
79
+ ]
80
+
81
+ labels = ["not spam", "spam"] # Optional class names for readability
82
+
83
+ with wandb.init(project="spam-detection") as run:
84
+ pr_curve = wandb.plot.pr_curve(
85
+ y_true=y_true,
86
+ y_probas=y_probas,
87
+ labels=labels,
88
+ title="Precision-Recall Curve for Spam Detection",
89
+ )
90
+ run.log({"pr-curve": pr_curve})
91
+ ```
91
92
  """
92
93
  np = util.get_module(
93
94
  "numpy",