From af393a2a03b434f79f825ac6da11ccf075ec7c65 Mon Sep 17 00:00:00 2001 From: Mamta Wardhani Date: Thu, 25 Sep 2025 17:27:41 +0530 Subject: [PATCH 1/7] [Edit] Python: Python CLI arguments --- .../command-line-arguments.md | 188 ++++++++++++------ 1 file changed, 132 insertions(+), 56 deletions(-) diff --git a/content/python/concepts/command-line-arguments/command-line-arguments.md b/content/python/concepts/command-line-arguments/command-line-arguments.md index d09f403722a..6c3b74536f5 100644 --- a/content/python/concepts/command-line-arguments/command-line-arguments.md +++ b/content/python/concepts/command-line-arguments/command-line-arguments.md @@ -1,106 +1,182 @@ --- Title: 'Command Line Arguments' -Description: 'Python offers several methods of parsing command line arguments that are used when launching a program.' +Description: 'Provides methods to accept input values when running Python scripts from the terminal' Subjects: + - 'Code Foundations' - 'Computer Science' - - 'Data Science' Tags: - - 'Input' - 'Arguments' - - 'Bash/Shell' - 'Command Line' + - 'Input' + - 'Modules' CatalogContent: - 'learn-python-3' - 'paths/computer-science' --- -Python offers several methods of parsing **command line arguments** that are used when launching a program. The user has the option of passing various parameters to the program by adding them after the program name. These parameters can be accessed through various modules. The parameter names are left up to the programmer. By convention the parameter `-h` or `--help` (and `/h` and `/help` in Windows) is reserved to print a help message to the console listing the various command line options recognized by the program. - -Arguments are passed differently depending on the operating system: +**Command line arguments** are values passed to a Python program when running it from the terminal or command prompt. They allow users to provide input data to a program without modifying the source code, making programs more flexible and reusable by accepting different parameters at runtime. -- Unix-like arguments are a single letter preceded by a dash (`-h`) or a word preceded by two dashes (`--help`). -- Windows arguments are a letter or a whole word preceded by a slash (`/h` or `/help`). +## Ways to Handle Command Line Arguments -## Parsing With `sys.argv` +Python provides several built-in modules to handle command line arguments, each with different levels of complexity and functionality. -The `sys` module offers the most straightforward method of accessing command line arguments, but it also requires the programmer to do most of the work interpreting them. With the `sys` module, the arguments are passed along in a simple list structure named `sys.argv`. +### Using `sys.argv` -The first item in the list, `sys.argv[0]` is the name used to launch the Python program, along with the path used. Each subsequent item is a space-delimited argument from the command line used to launch the program. If an argument requires embedded spaces, it needs to be enclosed in quotes to be parsed correctly. +The `sys.argv` module provides the simplest way to access command line arguments. It stores all arguments passed to the script as a list of strings, where `sys.argv[0]` contains the script name itself. -### Example +#### Example: Basic `sys.argv` Usage -This prints the script name followed by a list of the command line arguments passed on to the program. +This example demonstrates how to access and use Python command line arguments using the `sys` module: ```py import sys -print(f"The program name used to launch me is {sys.argv[0]}.") -print("I was passed the following arguments:") -for arg in sys.argv[1:]: - print(arg) +# Display all command line arguments +print("Script name:", sys.argv[0]) +print("All arguments:", sys.argv) + +# Check if arguments are provided +if len(sys.argv) > 1: + name = sys.argv[1] + print(f"Hello, {name}!") +else: + print("No name provided. Usage: python script.py ") ``` -If this is named `test.py` it can be launched with the following result: +When running this script with `python greet.py Alice`, it produces the following output: -```bash -$ test.py --arg1 --arg2 "arg 3" -The program name used to launch me is test.py. -I was passed the following arguments: ---arg1 ---arg2 -arg 3 +```shell +Script name: greet.py +All arguments: ['greet.py', 'Alice'] +Hello, Alice! ``` -## Parsing With `getopt()` +The `sys.argv` list contains the script name as the first element, followed by all arguments passed from the command line. All arguments are stored as strings, so type conversion is needed for numeric operations. + +### Using `getopt` + +The `getopt` module provides a more structured approach to parsing command line options, similar to the C `getopt()` function. It supports both short options (single letters with a hyphen) and long options (words with double hyphens). -Using `getopt()` requires importing both the `sys` and `getopt` modules to work. With `getopt`, parameter validation is possible. This is done by passing a list of the command line arguments themselves, a string of short (one character) options, and a list of long (full word) options. To indicate that the option requires a value to be passed along with it, the short option is followed by a colon (`:`), and the long option is followed by an equals sign (`=`). +#### Example: File Processing with `getopt` -To set up options for "help", "argument", and a "value" that requires an additional passed value, would look like this: +This example shows how to create a script that processes input and output files with optional help: -- The short options would be a string like `"hav:"`. -- The long options would be a list like `["help","argument","value="]`. +```py +import sys +import getopt + +def main(): + input_file = "" + output_file = "" + + try: + # Parse command line options + opts, args = getopt.getopt(sys.argv[1:], "hi:o:", ["help", "input=", "output="]) + except getopt.GetoptError as err: + print(f"Error: {err}") + print("Usage: python script.py -i -o ") + sys.exit(2) + + for opt, arg in opts: + if opt in ("-h", "--help"): + print("Usage: python script.py -i -o ") + print("Options:") + print(" -i, --input Input file path") + print(" -o, --output Output file path") + print(" -h, --help Show this help message") + sys.exit() + elif opt in ("-i", "--input"): + input_file = arg + elif opt in ("-o", "--output"): + output_file = arg + + # Process the files + if input_file and output_file: + print(f"Processing: {input_file} -> {output_file}") + else: + print("Both input and output files are required") + sys.exit(1) + +if __name__ == "__main__": + main() +``` -### Syntax +Running this script with `python process.py -i data.txt -o result.txt` produces: -```python -options, values = getopt.getopt(arguments, short_options, long_options) +```shell +Processing: data.txt -> result.txt ``` -Where the results of `getopt()` are `options` which is a list of option/value pairs, and `values` which is a list of arguments left after the option list was stripped. The parameters passed to `getopt()` are `arguments`, a list of the arguments as provided by `sys.argv` without the initial program name, the string `short_options` and the list `long_options` as described above. +The `getopt.getopt()` function parses the argument list and returns a tuple containing option-value pairs and remaining arguments. Short options require a colon after the letter if they expect a value. -If `arguments` contains an option that is not in `short_options` or `long_options` then an `getopt.error` exception is thrown. +### Using `argparse` -### Example +The `argparse` module is the most powerful and user-friendly way to handle command line arguments. It automatically generates help messages, handles errors gracefully, and supports various argument types including positional and optional arguments. -This prints the option/value pairs passed as command line arguments. +#### Example: User Greeting with `argparse` + +This example demonstrates creating a user-friendly command line interface: ```py -import sys, getopt +import argparse + +# Create argument parser +parser = argparse.ArgumentParser(description="Greet users with customizable messages") + +# Add positional argument +parser.add_argument("name", help="Name of the person to greet") -arguments = sys.argv[1:] -short_options = "hav:" -long_options = ["help","argument","value="] +# Add optional arguments +parser.add_argument("-g", "--greeting", default="Hello", + help="Greeting message (default: Hello)") +parser.add_argument("-u", "--uppercase", action="store_true", + help="Convert output to uppercase") -options, values = getopt.getopt(arguments, short_options, long_options) +# Parse arguments +args = parser.parse_args() -for o, v in options: - print(f"Option is {o}. Value is {v}.") +# Create greeting message +message = f"{args.greeting}, {args.name}!" + +# Apply uppercase if requested +if args.uppercase: + message = message.upper() + +print(message) ``` -If this is named **test.py** it can be launched with the following results: +When executed with `python greet.py Alice -g "Good morning" --uppercase`, the output is: -```bash -$ test.py -a --value=test -Option is -a. Value is . -Option is --value. Value is test. +```shell +GOOD MORNING, ALICE! ``` -**Note**: Since `-a` wasn't defined as requiring a value passed to it, the corresponding value for the option is empty. +The `argparse` module automatically provides help documentation when using `-h` or `--help`, validates required arguments, and converts values to appropriate types. It handles argument parsing errors by displaying helpful error messages and usage information. + +## Frequently Asked Questions + +### 1. What are command line arguments in Python? + +Command line arguments in Python are values passed to a script when executing it from the terminal. They provide a way to customize program behavior without modifying the source code, making scripts more flexible and reusable. + +### 2. What are the 5 arguments in Python? + +There isn't a fixed set of "5 arguments" in Python. The number and type of command line arguments depend on what the program is designed to accept. However, common argument types include: positional arguments (required values), optional arguments (flags with values), boolean flags (on/off switches), help arguments, and version arguments. + +### 3. How to pass an argument to a Python script from command line? + +To pass arguments to a Python script, include them after the script name when running it: + +- `python script.py argument1 argument2` - passes multiple arguments +- `python script.py --option value` - passes an option with a value +- `python script.py -f --verbose` - passes flags and options + +### 4. What is an example of a command line argument? -## Other Methods of Parsing the Command Line +A simple example is running `python calculator.py 10 5 add`, where: -There are other methods of parsing command line arguments in Python, which add varying functionality to the task. Some examples include: +- `calculator.py` is the script name +- `10` and `5` are numeric arguments +- `add` is an operation argument -- The `argparse` module, that's been available since Python 3.2, validates fixed and optional arguments and offers a default help message displaying the accepted arguments. -- The `docopt` module, which is complex and versatile, provides its own language to describe command line options. -- The `click` module provides arbitrary nesting of commands and automatic help page generation. +The script can access these values using `sys.argv`, `getopt`, or `argparse` to perform the specified calculation. From 17d337a69f88d3daa70f0d35fc233ee77849af8d Mon Sep 17 00:00:00 2001 From: Mamta Wardhani Date: Thu, 25 Sep 2025 17:28:35 +0530 Subject: [PATCH 2/7] Update command-line-arguments.md --- .../command-line-arguments.md | 188 ++++++------------ 1 file changed, 56 insertions(+), 132 deletions(-) diff --git a/content/python/concepts/command-line-arguments/command-line-arguments.md b/content/python/concepts/command-line-arguments/command-line-arguments.md index 6c3b74536f5..d09f403722a 100644 --- a/content/python/concepts/command-line-arguments/command-line-arguments.md +++ b/content/python/concepts/command-line-arguments/command-line-arguments.md @@ -1,182 +1,106 @@ --- Title: 'Command Line Arguments' -Description: 'Provides methods to accept input values when running Python scripts from the terminal' +Description: 'Python offers several methods of parsing command line arguments that are used when launching a program.' Subjects: - - 'Code Foundations' - 'Computer Science' + - 'Data Science' Tags: + - 'Input' - 'Arguments' + - 'Bash/Shell' - 'Command Line' - - 'Input' - - 'Modules' CatalogContent: - 'learn-python-3' - 'paths/computer-science' --- -**Command line arguments** are values passed to a Python program when running it from the terminal or command prompt. They allow users to provide input data to a program without modifying the source code, making programs more flexible and reusable by accepting different parameters at runtime. +Python offers several methods of parsing **command line arguments** that are used when launching a program. The user has the option of passing various parameters to the program by adding them after the program name. These parameters can be accessed through various modules. The parameter names are left up to the programmer. By convention the parameter `-h` or `--help` (and `/h` and `/help` in Windows) is reserved to print a help message to the console listing the various command line options recognized by the program. + +Arguments are passed differently depending on the operating system: -## Ways to Handle Command Line Arguments +- Unix-like arguments are a single letter preceded by a dash (`-h`) or a word preceded by two dashes (`--help`). +- Windows arguments are a letter or a whole word preceded by a slash (`/h` or `/help`). -Python provides several built-in modules to handle command line arguments, each with different levels of complexity and functionality. +## Parsing With `sys.argv` -### Using `sys.argv` +The `sys` module offers the most straightforward method of accessing command line arguments, but it also requires the programmer to do most of the work interpreting them. With the `sys` module, the arguments are passed along in a simple list structure named `sys.argv`. -The `sys.argv` module provides the simplest way to access command line arguments. It stores all arguments passed to the script as a list of strings, where `sys.argv[0]` contains the script name itself. +The first item in the list, `sys.argv[0]` is the name used to launch the Python program, along with the path used. Each subsequent item is a space-delimited argument from the command line used to launch the program. If an argument requires embedded spaces, it needs to be enclosed in quotes to be parsed correctly. -#### Example: Basic `sys.argv` Usage +### Example -This example demonstrates how to access and use Python command line arguments using the `sys` module: +This prints the script name followed by a list of the command line arguments passed on to the program. ```py import sys -# Display all command line arguments -print("Script name:", sys.argv[0]) -print("All arguments:", sys.argv) - -# Check if arguments are provided -if len(sys.argv) > 1: - name = sys.argv[1] - print(f"Hello, {name}!") -else: - print("No name provided. Usage: python script.py ") +print(f"The program name used to launch me is {sys.argv[0]}.") +print("I was passed the following arguments:") +for arg in sys.argv[1:]: + print(arg) ``` -When running this script with `python greet.py Alice`, it produces the following output: +If this is named `test.py` it can be launched with the following result: -```shell -Script name: greet.py -All arguments: ['greet.py', 'Alice'] -Hello, Alice! +```bash +$ test.py --arg1 --arg2 "arg 3" +The program name used to launch me is test.py. +I was passed the following arguments: +--arg1 +--arg2 +arg 3 ``` -The `sys.argv` list contains the script name as the first element, followed by all arguments passed from the command line. All arguments are stored as strings, so type conversion is needed for numeric operations. - -### Using `getopt` - -The `getopt` module provides a more structured approach to parsing command line options, similar to the C `getopt()` function. It supports both short options (single letters with a hyphen) and long options (words with double hyphens). +## Parsing With `getopt()` -#### Example: File Processing with `getopt` +Using `getopt()` requires importing both the `sys` and `getopt` modules to work. With `getopt`, parameter validation is possible. This is done by passing a list of the command line arguments themselves, a string of short (one character) options, and a list of long (full word) options. To indicate that the option requires a value to be passed along with it, the short option is followed by a colon (`:`), and the long option is followed by an equals sign (`=`). -This example shows how to create a script that processes input and output files with optional help: +To set up options for "help", "argument", and a "value" that requires an additional passed value, would look like this: -```py -import sys -import getopt - -def main(): - input_file = "" - output_file = "" - - try: - # Parse command line options - opts, args = getopt.getopt(sys.argv[1:], "hi:o:", ["help", "input=", "output="]) - except getopt.GetoptError as err: - print(f"Error: {err}") - print("Usage: python script.py -i -o ") - sys.exit(2) - - for opt, arg in opts: - if opt in ("-h", "--help"): - print("Usage: python script.py -i -o ") - print("Options:") - print(" -i, --input Input file path") - print(" -o, --output Output file path") - print(" -h, --help Show this help message") - sys.exit() - elif opt in ("-i", "--input"): - input_file = arg - elif opt in ("-o", "--output"): - output_file = arg - - # Process the files - if input_file and output_file: - print(f"Processing: {input_file} -> {output_file}") - else: - print("Both input and output files are required") - sys.exit(1) - -if __name__ == "__main__": - main() -``` +- The short options would be a string like `"hav:"`. +- The long options would be a list like `["help","argument","value="]`. -Running this script with `python process.py -i data.txt -o result.txt` produces: +### Syntax -```shell -Processing: data.txt -> result.txt +```python +options, values = getopt.getopt(arguments, short_options, long_options) ``` -The `getopt.getopt()` function parses the argument list and returns a tuple containing option-value pairs and remaining arguments. Short options require a colon after the letter if they expect a value. +Where the results of `getopt()` are `options` which is a list of option/value pairs, and `values` which is a list of arguments left after the option list was stripped. The parameters passed to `getopt()` are `arguments`, a list of the arguments as provided by `sys.argv` without the initial program name, the string `short_options` and the list `long_options` as described above. -### Using `argparse` +If `arguments` contains an option that is not in `short_options` or `long_options` then an `getopt.error` exception is thrown. -The `argparse` module is the most powerful and user-friendly way to handle command line arguments. It automatically generates help messages, handles errors gracefully, and supports various argument types including positional and optional arguments. +### Example -#### Example: User Greeting with `argparse` - -This example demonstrates creating a user-friendly command line interface: +This prints the option/value pairs passed as command line arguments. ```py -import argparse - -# Create argument parser -parser = argparse.ArgumentParser(description="Greet users with customizable messages") - -# Add positional argument -parser.add_argument("name", help="Name of the person to greet") +import sys, getopt -# Add optional arguments -parser.add_argument("-g", "--greeting", default="Hello", - help="Greeting message (default: Hello)") -parser.add_argument("-u", "--uppercase", action="store_true", - help="Convert output to uppercase") +arguments = sys.argv[1:] +short_options = "hav:" +long_options = ["help","argument","value="] -# Parse arguments -args = parser.parse_args() +options, values = getopt.getopt(arguments, short_options, long_options) -# Create greeting message -message = f"{args.greeting}, {args.name}!" - -# Apply uppercase if requested -if args.uppercase: - message = message.upper() - -print(message) +for o, v in options: + print(f"Option is {o}. Value is {v}.") ``` -When executed with `python greet.py Alice -g "Good morning" --uppercase`, the output is: +If this is named **test.py** it can be launched with the following results: -```shell -GOOD MORNING, ALICE! +```bash +$ test.py -a --value=test +Option is -a. Value is . +Option is --value. Value is test. ``` -The `argparse` module automatically provides help documentation when using `-h` or `--help`, validates required arguments, and converts values to appropriate types. It handles argument parsing errors by displaying helpful error messages and usage information. - -## Frequently Asked Questions - -### 1. What are command line arguments in Python? - -Command line arguments in Python are values passed to a script when executing it from the terminal. They provide a way to customize program behavior without modifying the source code, making scripts more flexible and reusable. - -### 2. What are the 5 arguments in Python? - -There isn't a fixed set of "5 arguments" in Python. The number and type of command line arguments depend on what the program is designed to accept. However, common argument types include: positional arguments (required values), optional arguments (flags with values), boolean flags (on/off switches), help arguments, and version arguments. - -### 3. How to pass an argument to a Python script from command line? - -To pass arguments to a Python script, include them after the script name when running it: - -- `python script.py argument1 argument2` - passes multiple arguments -- `python script.py --option value` - passes an option with a value -- `python script.py -f --verbose` - passes flags and options - -### 4. What is an example of a command line argument? +**Note**: Since `-a` wasn't defined as requiring a value passed to it, the corresponding value for the option is empty. -A simple example is running `python calculator.py 10 5 add`, where: +## Other Methods of Parsing the Command Line -- `calculator.py` is the script name -- `10` and `5` are numeric arguments -- `add` is an operation argument +There are other methods of parsing command line arguments in Python, which add varying functionality to the task. Some examples include: -The script can access these values using `sys.argv`, `getopt`, or `argparse` to perform the specified calculation. +- The `argparse` module, that's been available since Python 3.2, validates fixed and optional arguments and offers a default help message displaying the accepted arguments. +- The `docopt` module, which is complex and versatile, provides its own language to describe command line options. +- The `click` module provides arbitrary nesting of commands and automatic help page generation. From 10578df419be463cf76952beb5b94d172adaa256 Mon Sep 17 00:00:00 2001 From: Mamta Wardhani Date: Wed, 5 Nov 2025 16:24:59 +0530 Subject: [PATCH 3/7] [Term Entry] PyTorch Tensor Operations: .log2() --- .../tensor-operations/terms/log2/log2.md | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 docs/content/pytorch/concepts/tensor-operations/terms/log2/log2.md diff --git a/docs/content/pytorch/concepts/tensor-operations/terms/log2/log2.md b/docs/content/pytorch/concepts/tensor-operations/terms/log2/log2.md new file mode 100644 index 00000000000..e617fb45add --- /dev/null +++ b/docs/content/pytorch/concepts/tensor-operations/terms/log2/log2.md @@ -0,0 +1,79 @@ +--- +Title: '.log2()' +Description: 'Computes the base-2 logarithm of each element in the input tensor and returns a new tensor with the results.' +Subjects: + - 'Code Foundations' + - 'Computer Science' + - 'Data Science' +Tags: + - 'Elements' + - 'Methods' + - 'PyTorch' + - 'Tensors' +CatalogContent: + - 'learn-python-3' + - 'paths/data-science' +--- + +The **`.log2()`** method in PyTorch returns a new [tensor](https://www.codecademy.com/resources/docs/pytorch/tensors) by computing the logarithm base 2 of each element in the input tensor. This operation is useful in numerous data-science and machine-learning workflows where values are interpreted on a log scale (e.g., information theory, binary magnitude comparisons). + +## Syntax + +```pseudo +torch.log2(input, *, out=None) → Tensor +``` + +**Parameters:** + +- `input` (Tensor): The tensor whose elements are to be transformed by base-2 logarithm. +- `out` (Tensor, optional): A tensor to store the output; must have the same shape as input if provided. + +**Return value:** + +Returns a new tensor of the same shape as `input` where each element is `log₂(input[i])`. + +## Example 1: Basic Usage of `torch.log2()` + +In this example, the base-2 logarithm is computed for a tensor of powers of two: + +```py +import torch + +# Define a tensor +input_tensor = torch.tensor([2.0, 4.0, 8.0, 16.0, 32.0]) + +# Compute base-2 logarithm +output_tensor = torch.log2(input_tensor) + +print(output_tensor) +``` + +The output of this code is: + +```shell +tensor([1., 2., 3., 4., 5.]) +``` + +## Example 2: Applying `torch.log2()` on Random Values + +In this example, a tensor with random positive values is transformed using base-2 logarithm to analyze data on a log scale: + +```py +import torch + +# Generate a tensor of random positive values +data = torch.rand(5) * 10 + 1 + +# Apply log2 transformation +log_tensor = torch.log2(data) + +print(data) +print(log_tensor) +``` + +The output of this code is: + +```shell +tensor([10.5500, 9.2777, 10.9371, 1.3551, 5.2609]) +tensor([3.3992, 3.2138, 3.4512, 0.4384, 2.3953]) +``` From 1b534c02a667ba34fd60063f05f8d63b1f80b69a Mon Sep 17 00:00:00 2001 From: Mamta Wardhani Date: Wed, 26 Nov 2025 19:56:04 +0530 Subject: [PATCH 4/7] [Term Entry] Python matplotlib - pyplot: fill_between() --- .../pyplot/terms/fill-between/fill-between.md | 80 +++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 content/matplotlib/concepts/pyplot/terms/fill-between/fill-between.md diff --git a/content/matplotlib/concepts/pyplot/terms/fill-between/fill-between.md b/content/matplotlib/concepts/pyplot/terms/fill-between/fill-between.md new file mode 100644 index 00000000000..d5257f7bee8 --- /dev/null +++ b/content/matplotlib/concepts/pyplot/terms/fill-between/fill-between.md @@ -0,0 +1,80 @@ +--- +Title: 'fill_between()' +Description: 'Fills the area between two curves or between a curve and a baseline in a plot.' +Subjects: + - 'Data Science' + - 'Data Visualization' +Tags: + - 'Graphs' + - 'Libraries' + - 'Matplotlib' + - 'Methods' +CatalogContent: + - 'learn-python-3' + - 'paths/data-science' +--- + +The **`fill_between()`** function in Matplotlib's `pyplot` module creates a shaded region between two curves or between a curve and a baseline. It is commonly used to visualize ranges, confidence intervals, thresholds, and differences between datasets. + +## Syntax + +```pseudo +matplotlib.pyplot.fill_between(x, y1, y2=0, where=None, **kwargs) +``` + +**Parameters:** + +- `x`: Sequence of x-coordinates. +- `y1`: First set of y-values. +- `y2` (optional): Second set of y-values. Defaults to `0`, creating a fill between the curve and the x-axis. +- `where` (optional): A boolean mask that controls where to fill. +- `**kwargs`: Additional styling options such as `color`, `alpha`, or `label`. + +**Return value:** + +Returns a `PolyCollection` object that represents the shaded region. + +## Example + +The example below shows how to fill the area between a curve and the x-axis: + +```py +import matplotlib.pyplot as plt +import numpy as np + +x = np.linspace(0, 10, 200) +y = np.sin(x) + +plt.plot(x, y) +plt.fill_between(x, y, 0, alpha=0.3) + +plt.title("Filled Area Under Sine Curve") +plt.show() +``` + +The output of this code is: + +![]() + +## Example + +This example fills the area between two curves: + +```py +import matplotlib.pyplot as plt +import numpy as np + +x = np.linspace(0, 5, 100) +y1 = x +y2 = x**2 + +plt.plot(x, y1, label="y = x") +plt.plot(x, y2, label="y = x^2") + +plt.fill_between(x, y1, y2, alpha=0.3) + +plt.legend() +plt.show() +``` + +![]() From a299e432578ba02fdb6dcb17076eaf8dcfec4285 Mon Sep 17 00:00:00 2001 From: Mamta Wardhani Date: Wed, 26 Nov 2025 20:07:05 +0530 Subject: [PATCH 5/7] Delete docs/content/pytorch/concepts/tensor-operations/terms/log2/log2.md --- .../tensor-operations/terms/log2/log2.md | 79 ------------------- 1 file changed, 79 deletions(-) delete mode 100644 docs/content/pytorch/concepts/tensor-operations/terms/log2/log2.md diff --git a/docs/content/pytorch/concepts/tensor-operations/terms/log2/log2.md b/docs/content/pytorch/concepts/tensor-operations/terms/log2/log2.md deleted file mode 100644 index e617fb45add..00000000000 --- a/docs/content/pytorch/concepts/tensor-operations/terms/log2/log2.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -Title: '.log2()' -Description: 'Computes the base-2 logarithm of each element in the input tensor and returns a new tensor with the results.' -Subjects: - - 'Code Foundations' - - 'Computer Science' - - 'Data Science' -Tags: - - 'Elements' - - 'Methods' - - 'PyTorch' - - 'Tensors' -CatalogContent: - - 'learn-python-3' - - 'paths/data-science' ---- - -The **`.log2()`** method in PyTorch returns a new [tensor](https://www.codecademy.com/resources/docs/pytorch/tensors) by computing the logarithm base 2 of each element in the input tensor. This operation is useful in numerous data-science and machine-learning workflows where values are interpreted on a log scale (e.g., information theory, binary magnitude comparisons). - -## Syntax - -```pseudo -torch.log2(input, *, out=None) → Tensor -``` - -**Parameters:** - -- `input` (Tensor): The tensor whose elements are to be transformed by base-2 logarithm. -- `out` (Tensor, optional): A tensor to store the output; must have the same shape as input if provided. - -**Return value:** - -Returns a new tensor of the same shape as `input` where each element is `log₂(input[i])`. - -## Example 1: Basic Usage of `torch.log2()` - -In this example, the base-2 logarithm is computed for a tensor of powers of two: - -```py -import torch - -# Define a tensor -input_tensor = torch.tensor([2.0, 4.0, 8.0, 16.0, 32.0]) - -# Compute base-2 logarithm -output_tensor = torch.log2(input_tensor) - -print(output_tensor) -``` - -The output of this code is: - -```shell -tensor([1., 2., 3., 4., 5.]) -``` - -## Example 2: Applying `torch.log2()` on Random Values - -In this example, a tensor with random positive values is transformed using base-2 logarithm to analyze data on a log scale: - -```py -import torch - -# Generate a tensor of random positive values -data = torch.rand(5) * 10 + 1 - -# Apply log2 transformation -log_tensor = torch.log2(data) - -print(data) -print(log_tensor) -``` - -The output of this code is: - -```shell -tensor([10.5500, 9.2777, 10.9371, 1.3551, 5.2609]) -tensor([3.3992, 3.2138, 3.4512, 0.4384, 2.3953]) -``` From f7e8699a19c961a67e173a32bd8b6722516fe4ac Mon Sep 17 00:00:00 2001 From: Mamta Wardhani Date: Wed, 26 Nov 2025 20:42:00 +0530 Subject: [PATCH 6/7] added alt text --- .../concepts/pyplot/terms/fill-between/fill-between.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/matplotlib/concepts/pyplot/terms/fill-between/fill-between.md b/content/matplotlib/concepts/pyplot/terms/fill-between/fill-between.md index d5257f7bee8..b149b8ebc93 100644 --- a/content/matplotlib/concepts/pyplot/terms/fill-between/fill-between.md +++ b/content/matplotlib/concepts/pyplot/terms/fill-between/fill-between.md @@ -54,7 +54,7 @@ plt.show() The output of this code is: -![]() +![A sine wave plot with a shaded region under the curve created using fill_between(), showing area fill and transparency.](https://raw.githubusercontent.com/Codecademy/docs/main/media/Figure_1.png) ## Example @@ -77,4 +77,4 @@ plt.legend() plt.show() ``` -![]() +![A plot of y = x and y = x² with the area between the two curves shaded using fill_between(), illustrating curve comparison and filled regions.](https://raw.githubusercontent.com/Codecademy/docs/main/media/Figure_2.png) From 704c98627bc95744c39ec03df8d18a674c2f6974 Mon Sep 17 00:00:00 2001 From: Mamta Wardhani Date: Wed, 26 Nov 2025 20:43:07 +0530 Subject: [PATCH 7/7] Add files via upload --- media/Figure_1.png | Bin 0 -> 27411 bytes media/Figure_2.png | Bin 0 -> 18125 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 media/Figure_1.png create mode 100644 media/Figure_2.png diff --git a/media/Figure_1.png b/media/Figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e4450ccd657991ae3d34c8e0acc81934af51f34e GIT binary patch literal 27411 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 literal 0 HcmV?d00001 diff --git a/media/Figure_2.png b/media/Figure_2.png new file mode 100644 index 0000000000000000000000000000000000000000..35a4bfa456548986ec5d83087f041f883e2d8f33 GIT binary patch literal 18125 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 fJ0=nxq*EW?{FtkFC3ORMQb