From 6ae4a0f22fd8031a22026060978ec7beba99fb6d Mon Sep 17 00:00:00 2001 From: void-py Date: Tue, 1 Oct 2024 13:25:13 +0530 Subject: [PATCH 1/9] finding different diffraction parameters --- physics/diffraction.py | 93 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 physics/diffraction.py diff --git a/physics/diffraction.py b/physics/diffraction.py new file mode 100644 index 000000000000..9599419d2ea8 --- /dev/null +++ b/physics/diffraction.py @@ -0,0 +1,93 @@ + +import math + + + +def check_min_intensity(slit_width = 1,diff_angle=0, wavelength=100): + """ + Checks for the condition of minimum intensity in a diffraction pattern. + + Args: + slit_width (float): The width of the slit in millimeters. + diff_angle (float): The diffraction angle in radians. + wavelength (float): The wavelength of light in nanometers. + + Returns: + bool: True if minimum intensity is met, otherwise False. + + >>> check_min_intensity(4, 0.25, 300) + False + >>> check_min_intensity(1, 0.0001, 100) + True + """ + wavelength *= 10**-6 + n_val = round(slit_width*(diff_angle)/wavelength,5) + r_val = True if (n_val-math.floor(n_val)==0) else False + return r_val + +def check_max_intensity(slit_width=1,diff_angle=0,wavelength=100): + """ + Checks for the condition of maximum intensity in a diffraction pattern. + + Args: + slit_width (float): The width of the slit in millimeters. + diff_angle (float): The diffraction angle in radians. + wavelength (float): The wavelength of light in nanometers. + + Returns: + bool: True if maximum intensity is met, otherwise False. + + >>> check_max_intensity(1, 0.001, 100) + False + >>> check_max_intensity(1, 0.00005, 100) + True + """ + wavelength *=10**-6 + n_val = round(((2*slit_width*diff_angle)-wavelength)/(2*wavelength),4) + r_val = True if (n_val-math.floor(n_val)==0) else False + return r_val + +def intensity_single_slit(slit_width=1,diff_angle=0,wavelength=100): + """ + Computes the intensity for a single slit diffraction pattern. + + Args: + slit_width (float): The width of the slit in millimeters. + diff_angle (float): The diffraction angle in radians. + wavelength (float): The wavelength of light in nanometers. + + Returns: + str: The intensity of the diffraction pattern. + + >>> intensity_single_slit(1, 0.0005, 100) + '0.9999999999177533 I0' + """ + beta = math.pi*slit_width*(math.sin(diff_angle)/wavelength) + i_coeff = (math.sin(beta)/beta)**2 + return "{coeff} I0".format(coeff=i_coeff) + +def intensity_double_slit(path_diff=0,intensity_max="I0"): + """ + Computes the intensity for a double slit diffraction pattern. + + Args: + path_diff (float): The path difference in the two waves. + intensity_max (str or int): The maximum intensity. + + Returns: + str or float: The intensity of the diffraction pattern. + + >>> intensity_double_slit(0, 1) + 4.0 + >>> intensity_double_slit(0.001, 1) + 3.999999000000084 + >>> intensity_double_slit(0) + '4.0 I0' + """ + r_val = 4*intensity_max*(math.cos(path_diff/2))**2 if (type(intensity_max)==type(0)) else "{coeff} I0".format(coeff=(4*(math.cos(path_diff/2)**2))) + return r_val + +if(__name__=="__main__"): + import doctest + doctest.testmod() + #pass \ No newline at end of file From 9f4f1394c67d92d61ccdd726a123d22ccdfc2fdd Mon Sep 17 00:00:00 2001 From: void-py Date: Tue, 1 Oct 2024 14:16:32 +0530 Subject: [PATCH 2/9] refactored changes with respect to checks --- physics/diffraction.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/physics/diffraction.py b/physics/diffraction.py index 9599419d2ea8..0347ad1c2ed7 100644 --- a/physics/diffraction.py +++ b/physics/diffraction.py @@ -1,8 +1,5 @@ - import math - - def check_min_intensity(slit_width = 1,diff_angle=0, wavelength=100): """ Checks for the condition of minimum intensity in a diffraction pattern. @@ -22,7 +19,7 @@ def check_min_intensity(slit_width = 1,diff_angle=0, wavelength=100): """ wavelength *= 10**-6 n_val = round(slit_width*(diff_angle)/wavelength,5) - r_val = True if (n_val-math.floor(n_val)==0) else False + r_val = (n_val-math.floor(n_val)==0) return r_val def check_max_intensity(slit_width=1,diff_angle=0,wavelength=100): @@ -44,7 +41,7 @@ def check_max_intensity(slit_width=1,diff_angle=0,wavelength=100): """ wavelength *=10**-6 n_val = round(((2*slit_width*diff_angle)-wavelength)/(2*wavelength),4) - r_val = True if (n_val-math.floor(n_val)==0) else False + r_val = (n_val-math.floor(n_val)==0) return r_val def intensity_single_slit(slit_width=1,diff_angle=0,wavelength=100): @@ -64,7 +61,7 @@ def intensity_single_slit(slit_width=1,diff_angle=0,wavelength=100): """ beta = math.pi*slit_width*(math.sin(diff_angle)/wavelength) i_coeff = (math.sin(beta)/beta)**2 - return "{coeff} I0".format(coeff=i_coeff) + return f"{i_coeff} I0" def intensity_double_slit(path_diff=0,intensity_max="I0"): """ @@ -84,7 +81,7 @@ def intensity_double_slit(path_diff=0,intensity_max="I0"): >>> intensity_double_slit(0) '4.0 I0' """ - r_val = 4*intensity_max*(math.cos(path_diff/2))**2 if (type(intensity_max)==type(0)) else "{coeff} I0".format(coeff=(4*(math.cos(path_diff/2)**2))) + r_val = 4*intensity_max*(math.cos(path_diff/2))**2 if (type(intensity_max) is int) else f"{4*(math.cos(path_diff/2)**2)} I0" return r_val if(__name__=="__main__"): From 0f22124dcffd23b24ae1fac2363be71a69a4145f Mon Sep 17 00:00:00 2001 From: void-py Date: Tue, 1 Oct 2024 14:22:44 +0530 Subject: [PATCH 3/9] fixed issues --- physics/diffraction.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/physics/diffraction.py b/physics/diffraction.py index 0347ad1c2ed7..46a5da9a1c64 100644 --- a/physics/diffraction.py +++ b/physics/diffraction.py @@ -1,6 +1,6 @@ import math -def check_min_intensity(slit_width = 1,diff_angle=0, wavelength=100): +def check_min_intensity(slit_width:int = 1,diff_angle:int =0, wavelength:int =100)->bool: """ Checks for the condition of minimum intensity in a diffraction pattern. @@ -22,7 +22,7 @@ def check_min_intensity(slit_width = 1,diff_angle=0, wavelength=100): r_val = (n_val-math.floor(n_val)==0) return r_val -def check_max_intensity(slit_width=1,diff_angle=0,wavelength=100): +def check_max_intensity(slit_width:int =1,diff_angle:int =0,wavelength:int =100)->bool: """ Checks for the condition of maximum intensity in a diffraction pattern. @@ -44,7 +44,7 @@ def check_max_intensity(slit_width=1,diff_angle=0,wavelength=100): r_val = (n_val-math.floor(n_val)==0) return r_val -def intensity_single_slit(slit_width=1,diff_angle=0,wavelength=100): +def intensity_single_slit(slit_width:int =1,diff_angle:int =0,wavelength:int =100)->int: """ Computes the intensity for a single slit diffraction pattern. @@ -63,7 +63,7 @@ def intensity_single_slit(slit_width=1,diff_angle=0,wavelength=100): i_coeff = (math.sin(beta)/beta)**2 return f"{i_coeff} I0" -def intensity_double_slit(path_diff=0,intensity_max="I0"): +def intensity_double_slit(path_diff:int=0,intensity_max:int="I0")->int: """ Computes the intensity for a double slit diffraction pattern. From 6be6606bfb7d17c359ff2b359212efbf5aca3d22 Mon Sep 17 00:00:00 2001 From: void-py Date: Tue, 1 Oct 2024 14:29:52 +0530 Subject: [PATCH 4/9] issue fix 2 --- physics/diffraction.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/physics/diffraction.py b/physics/diffraction.py index 46a5da9a1c64..e471dbf33aa5 100644 --- a/physics/diffraction.py +++ b/physics/diffraction.py @@ -1,6 +1,5 @@ import math - -def check_min_intensity(slit_width:int = 1,diff_angle:int =0, wavelength:int =100)->bool: +def check_min_intensity(slit_width:int=1,diff_angle:int=0, wavelength:int=100)->bool: """ Checks for the condition of minimum intensity in a diffraction pattern. @@ -21,7 +20,6 @@ def check_min_intensity(slit_width:int = 1,diff_angle:int =0, wavelength:int =10 n_val = round(slit_width*(diff_angle)/wavelength,5) r_val = (n_val-math.floor(n_val)==0) return r_val - def check_max_intensity(slit_width:int =1,diff_angle:int =0,wavelength:int =100)->bool: """ Checks for the condition of maximum intensity in a diffraction pattern. @@ -43,7 +41,6 @@ def check_max_intensity(slit_width:int =1,diff_angle:int =0,wavelength:int =100) n_val = round(((2*slit_width*diff_angle)-wavelength)/(2*wavelength),4) r_val = (n_val-math.floor(n_val)==0) return r_val - def intensity_single_slit(slit_width:int =1,diff_angle:int =0,wavelength:int =100)->int: """ Computes the intensity for a single slit diffraction pattern. @@ -62,7 +59,6 @@ def intensity_single_slit(slit_width:int =1,diff_angle:int =0,wavelength:int =10 beta = math.pi*slit_width*(math.sin(diff_angle)/wavelength) i_coeff = (math.sin(beta)/beta)**2 return f"{i_coeff} I0" - def intensity_double_slit(path_diff:int=0,intensity_max:int="I0")->int: """ Computes the intensity for a double slit diffraction pattern. @@ -83,8 +79,7 @@ def intensity_double_slit(path_diff:int=0,intensity_max:int="I0")->int: """ r_val = 4*intensity_max*(math.cos(path_diff/2))**2 if (type(intensity_max) is int) else f"{4*(math.cos(path_diff/2)**2)} I0" return r_val - if(__name__=="__main__"): import doctest doctest.testmod() - #pass \ No newline at end of file + From 80e4aaa4dbbb83d339d9e6298960bd1a59bb3f18 Mon Sep 17 00:00:00 2001 From: void-py Date: Tue, 1 Oct 2024 15:15:46 +0530 Subject: [PATCH 5/9] Resolving pre-commit-hook changes --- physics/diffraction.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/diffraction.py b/physics/diffraction.py index e471dbf33aa5..776639b5cdfe 100644 --- a/physics/diffraction.py +++ b/physics/diffraction.py @@ -2,7 +2,7 @@ def check_min_intensity(slit_width:int=1,diff_angle:int=0, wavelength:int=100)->bool: """ Checks for the condition of minimum intensity in a diffraction pattern. - + Args: slit_width (float): The width of the slit in millimeters. diff_angle (float): The diffraction angle in radians. @@ -82,4 +82,4 @@ def intensity_double_slit(path_diff:int=0,intensity_max:int="I0")->int: if(__name__=="__main__"): import doctest doctest.testmod() - + #pass From ed575a4b2955dc6cf3d7f16e94e75a816b128fac Mon Sep 17 00:00:00 2001 From: void-py Date: Tue, 1 Oct 2024 17:05:47 +0530 Subject: [PATCH 6/9] pre-commit.ci checks --- physics/diffraction.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/physics/diffraction.py b/physics/diffraction.py index 776639b5cdfe..4d2a08ffb928 100644 --- a/physics/diffraction.py +++ b/physics/diffraction.py @@ -1,5 +1,5 @@ import math -def check_min_intensity(slit_width:int=1,diff_angle:int=0, wavelength:int=100)->bool: +def check_min_intensity(slit_width:float=1.0,diff_angle:float=0.0, wavelength:float=100.0)->bool: """ Checks for the condition of minimum intensity in a diffraction pattern. @@ -20,7 +20,7 @@ def check_min_intensity(slit_width:int=1,diff_angle:int=0, wavelength:int=100)-> n_val = round(slit_width*(diff_angle)/wavelength,5) r_val = (n_val-math.floor(n_val)==0) return r_val -def check_max_intensity(slit_width:int =1,diff_angle:int =0,wavelength:int =100)->bool: +def check_max_intensity(slit_width:float =1.0,diff_angle:float =0.0,wavelength:float =100.0)->bool: """ Checks for the condition of maximum intensity in a diffraction pattern. @@ -41,7 +41,7 @@ def check_max_intensity(slit_width:int =1,diff_angle:int =0,wavelength:int =100) n_val = round(((2*slit_width*diff_angle)-wavelength)/(2*wavelength),4) r_val = (n_val-math.floor(n_val)==0) return r_val -def intensity_single_slit(slit_width:int =1,diff_angle:int =0,wavelength:int =100)->int: +def intensity_single_slit(slit_width:float =1.0,diff_angle:float =0.0,wavelength:float =100.0)->float: """ Computes the intensity for a single slit diffraction pattern. @@ -59,7 +59,7 @@ def intensity_single_slit(slit_width:int =1,diff_angle:int =0,wavelength:int =10 beta = math.pi*slit_width*(math.sin(diff_angle)/wavelength) i_coeff = (math.sin(beta)/beta)**2 return f"{i_coeff} I0" -def intensity_double_slit(path_diff:int=0,intensity_max:int="I0")->int: +def intensity_double_slit(path_diff:int=0,intensity_max:str|float="I0")->str: """ Computes the intensity for a double slit diffraction pattern. @@ -77,7 +77,7 @@ def intensity_double_slit(path_diff:int=0,intensity_max:int="I0")->int: >>> intensity_double_slit(0) '4.0 I0' """ - r_val = 4*intensity_max*(math.cos(path_diff/2))**2 if (type(intensity_max) is int) else f"{4*(math.cos(path_diff/2)**2)} I0" + r_val = str(4*intensity_max*(math.cos(path_diff/2))**2) if (type(intensity_max) is float or type(intensity_max) is int) else f"{4*(math.cos(path_diff/2)**2)} I0" return r_val if(__name__=="__main__"): import doctest From 9468055493e199624633ba402e0f24485ecea8c3 Mon Sep 17 00:00:00 2001 From: void-py Date: Tue, 1 Oct 2024 17:10:14 +0530 Subject: [PATCH 7/9] error: Incompatible return value type fixed --- physics/diffraction.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/diffraction.py b/physics/diffraction.py index 4d2a08ffb928..8602989eda90 100644 --- a/physics/diffraction.py +++ b/physics/diffraction.py @@ -71,9 +71,9 @@ def intensity_double_slit(path_diff:int=0,intensity_max:str|float="I0")->str: str or float: The intensity of the diffraction pattern. >>> intensity_double_slit(0, 1) - 4.0 + '4.0' >>> intensity_double_slit(0.001, 1) - 3.999999000000084 + '3.99999000000084' >>> intensity_double_slit(0) '4.0 I0' """ From f3fbc6090ef294df644a96c0bbda1c4488b370d3 Mon Sep 17 00:00:00 2001 From: void-py Date: Tue, 1 Oct 2024 17:12:31 +0530 Subject: [PATCH 8/9] error: Incompatible return value type fix-2 --- physics/diffraction.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/physics/diffraction.py b/physics/diffraction.py index 8602989eda90..0b0ea7fcd730 100644 --- a/physics/diffraction.py +++ b/physics/diffraction.py @@ -41,7 +41,7 @@ def check_max_intensity(slit_width:float =1.0,diff_angle:float =0.0,wavelength:f n_val = round(((2*slit_width*diff_angle)-wavelength)/(2*wavelength),4) r_val = (n_val-math.floor(n_val)==0) return r_val -def intensity_single_slit(slit_width:float =1.0,diff_angle:float =0.0,wavelength:float =100.0)->float: +def intensity_single_slit(slit_width:float =1.0,diff_angle:float =0.0,wavelength:float =100.0)->str: """ Computes the intensity for a single slit diffraction pattern. @@ -73,7 +73,7 @@ def intensity_double_slit(path_diff:int=0,intensity_max:str|float="I0")->str: >>> intensity_double_slit(0, 1) '4.0' >>> intensity_double_slit(0.001, 1) - '3.99999000000084' + '3.999999000000084' >>> intensity_double_slit(0) '4.0 I0' """ From 4981ab9898fb1fc5522cf9a91eb5100e28662dd8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 11:43:11 +0000 Subject: [PATCH 9/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- physics/diffraction.py | 61 ++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/physics/diffraction.py b/physics/diffraction.py index 0b0ea7fcd730..dc5ba9577321 100644 --- a/physics/diffraction.py +++ b/physics/diffraction.py @@ -1,5 +1,9 @@ import math -def check_min_intensity(slit_width:float=1.0,diff_angle:float=0.0, wavelength:float=100.0)->bool: + + +def check_min_intensity( + slit_width: float = 1.0, diff_angle: float = 0.0, wavelength: float = 100.0 +) -> bool: """ Checks for the condition of minimum intensity in a diffraction pattern. @@ -7,7 +11,7 @@ def check_min_intensity(slit_width:float=1.0,diff_angle:float=0.0, wavelength:fl slit_width (float): The width of the slit in millimeters. diff_angle (float): The diffraction angle in radians. wavelength (float): The wavelength of light in nanometers. - + Returns: bool: True if minimum intensity is met, otherwise False. @@ -17,18 +21,22 @@ def check_min_intensity(slit_width:float=1.0,diff_angle:float=0.0, wavelength:fl True """ wavelength *= 10**-6 - n_val = round(slit_width*(diff_angle)/wavelength,5) - r_val = (n_val-math.floor(n_val)==0) + n_val = round(slit_width * (diff_angle) / wavelength, 5) + r_val = n_val - math.floor(n_val) == 0 return r_val -def check_max_intensity(slit_width:float =1.0,diff_angle:float =0.0,wavelength:float =100.0)->bool: + + +def check_max_intensity( + slit_width: float = 1.0, diff_angle: float = 0.0, wavelength: float = 100.0 +) -> bool: """ Checks for the condition of maximum intensity in a diffraction pattern. - + Args: slit_width (float): The width of the slit in millimeters. diff_angle (float): The diffraction angle in radians. wavelength (float): The wavelength of light in nanometers. - + Returns: bool: True if maximum intensity is met, otherwise False. @@ -37,32 +45,38 @@ def check_max_intensity(slit_width:float =1.0,diff_angle:float =0.0,wavelength:f >>> check_max_intensity(1, 0.00005, 100) True """ - wavelength *=10**-6 - n_val = round(((2*slit_width*diff_angle)-wavelength)/(2*wavelength),4) - r_val = (n_val-math.floor(n_val)==0) + wavelength *= 10**-6 + n_val = round(((2 * slit_width * diff_angle) - wavelength) / (2 * wavelength), 4) + r_val = n_val - math.floor(n_val) == 0 return r_val -def intensity_single_slit(slit_width:float =1.0,diff_angle:float =0.0,wavelength:float =100.0)->str: + + +def intensity_single_slit( + slit_width: float = 1.0, diff_angle: float = 0.0, wavelength: float = 100.0 +) -> str: """ Computes the intensity for a single slit diffraction pattern. - + Args: slit_width (float): The width of the slit in millimeters. diff_angle (float): The diffraction angle in radians. wavelength (float): The wavelength of light in nanometers. - + Returns: str: The intensity of the diffraction pattern. >>> intensity_single_slit(1, 0.0005, 100) '0.9999999999177533 I0' """ - beta = math.pi*slit_width*(math.sin(diff_angle)/wavelength) - i_coeff = (math.sin(beta)/beta)**2 + beta = math.pi * slit_width * (math.sin(diff_angle) / wavelength) + i_coeff = (math.sin(beta) / beta) ** 2 return f"{i_coeff} I0" -def intensity_double_slit(path_diff:int=0,intensity_max:str|float="I0")->str: + + +def intensity_double_slit(path_diff: int = 0, intensity_max: str | float = "I0") -> str: """ Computes the intensity for a double slit diffraction pattern. - + Args: path_diff (float): The path difference in the two waves. intensity_max (str or int): The maximum intensity. @@ -77,9 +91,16 @@ def intensity_double_slit(path_diff:int=0,intensity_max:str|float="I0")->str: >>> intensity_double_slit(0) '4.0 I0' """ - r_val = str(4*intensity_max*(math.cos(path_diff/2))**2) if (type(intensity_max) is float or type(intensity_max) is int) else f"{4*(math.cos(path_diff/2)**2)} I0" + r_val = ( + str(4 * intensity_max * (math.cos(path_diff / 2)) ** 2) + if (type(intensity_max) is float or type(intensity_max) is int) + else f"{4*(math.cos(path_diff/2)**2)} I0" + ) return r_val -if(__name__=="__main__"): + + +if __name__ == "__main__": import doctest + doctest.testmod() - #pass + # pass