Update package name & Redefine hdf5 format using the standard I wrote
This commit is contained in:
parent
7ec119c58d
commit
718bcd390b
5 changed files with 731 additions and 271 deletions
Binary file not shown.
706
generate_h5df.py
706
generate_h5df.py
|
@ -2,6 +2,7 @@ from rich.console import Console
|
|||
from rich.table import Table
|
||||
from rich.theme import Theme
|
||||
from rich.logging import RichHandler
|
||||
from rich.progress import Progress
|
||||
|
||||
from finesse.model import Model
|
||||
from finesse.analysis.actions import (
|
||||
|
@ -16,27 +17,32 @@ from finesse.exceptions import ModelMissingAttributeError
|
|||
|
||||
from pathlib import Path
|
||||
|
||||
from logging import getLogger, basicConfig, INFO, WARNING
|
||||
from logging import getLogger, basicConfig, WARNING
|
||||
|
||||
from astropy.units import rad, W, m # pyright: ignore[reportAttributeAccessIssue]
|
||||
from astropy.units import rad, W, m, mW # pyright: ignore[reportAttributeAccessIssue]
|
||||
|
||||
from gwpy.frequencyseries import FrequencySeries
|
||||
|
||||
from numpy import (
|
||||
geomspace,
|
||||
sqrt,
|
||||
mean,
|
||||
diff,
|
||||
)
|
||||
|
||||
from matplotlib.pyplot import figure, show
|
||||
|
||||
from h5py import File
|
||||
|
||||
from utils import (
|
||||
DisplayData,
|
||||
display_displaydata,
|
||||
fix_dark_fringe,
|
||||
TF,
|
||||
)
|
||||
from utils import fix_dark_fringe, TF
|
||||
from MaskedReadoutDC import MaskedReadoutDC
|
||||
|
||||
from argparse import ArgumentParser
|
||||
from datetime import date
|
||||
|
||||
from git import Repo
|
||||
from importlib.metadata import version, PackageNotFoundError
|
||||
|
||||
theme = Theme(
|
||||
{
|
||||
"strong": "cyan underline",
|
||||
|
@ -55,290 +61,454 @@ logger = getLogger(__name__)
|
|||
|
||||
# Parameters
|
||||
|
||||
C_FILE_NAME = "SR-aligned-O4.h5df" # name of the created file
|
||||
C_POWER = 17.9 * W # power injection on the interferometer
|
||||
C_DARK_FRINGE = 6.27e-3 * W # power on dark fringe
|
||||
C_PRECISION = 1000 # number of point in the simulation
|
||||
C_SR_ROTATION = 0 * rad # yaw SR misalignement angle
|
||||
C_MAXTEM = 9 # number of modes in the model
|
||||
parser = ArgumentParser(
|
||||
prog="generate_h5df",
|
||||
description="Generate a model file containing computed Transfer Function",
|
||||
usage="python generate_h5df.py --filename={filename} --laser-power={laser power} --dark-fringe={dark fringe power} --sr-rotation={sr rotation} --max-tem={maxtem} [--precision={precision} | --quiet | --verbose]",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-f",
|
||||
"--filename",
|
||||
help="path to the new file containing the transfer funciton",
|
||||
type=Path,
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-p",
|
||||
"--laser-power",
|
||||
help="power injected in the interferometer (in W)",
|
||||
type=float,
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-d",
|
||||
"--dark-fringe",
|
||||
help="power on the dark fringe (dark fringe offset) (in W)",
|
||||
type=float,
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-r",
|
||||
"--sr-rotation",
|
||||
help="yaw SR misalignement angle (in rad)",
|
||||
type=float,
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-m",
|
||||
"--max-tem",
|
||||
help="number of modes in the model",
|
||||
type=int,
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-n",
|
||||
"--precision",
|
||||
help="number of point in the transfer function model",
|
||||
type=int,
|
||||
default=1000,
|
||||
required=False,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-q",
|
||||
"--quiet",
|
||||
help="suppress outputs in the terminal",
|
||||
action="store_true",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-V",
|
||||
"--verbose",
|
||||
help="display graph and table on the terminal",
|
||||
action="store_true",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-a",
|
||||
"--name",
|
||||
help="name of the generated result. Should be unique",
|
||||
type=str,
|
||||
required=True,
|
||||
)
|
||||
|
||||
C_B1_DETECTOR = "TF" # depends on the code itself (don't change)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Creating model
|
||||
|
||||
model = Model()
|
||||
model.phase_config(zero_k00=False, zero_tem00_gouy=True)
|
||||
model.parse(Path("model.kat").read_text())
|
||||
model.lambda0 = model.get("wavelength")
|
||||
model.get("fsig").f = 1.0
|
||||
filename = args.filename # name of the created file
|
||||
laser_power = args.laser_power * W # power injected
|
||||
dark_fringe_power = args.dark_fringe * W # power on dark fringe
|
||||
precision = args.precision # number of point in the simulation
|
||||
sr_rotation = args.sr_rotation * rad # yaw SR misalignement angle
|
||||
maxtem = args.max_tem # number of modes in the model
|
||||
quiet = args.quiet # no progress bar
|
||||
verbose = args.verbose # display figure and tables
|
||||
name = args.name # uniqeu name of the generated hdf5 data
|
||||
|
||||
current_date = date.today()
|
||||
try:
|
||||
model.get("SR").xbeta = C_SR_ROTATION.to(rad).value
|
||||
model.get("laser").P = C_POWER.to(W).value
|
||||
except ModelMissingAttributeError:
|
||||
logger.warning("SR, or laser is not define in the model")
|
||||
current_version = version("finesse-simulation-o4")
|
||||
except PackageNotFoundError:
|
||||
current_version = "unknown"
|
||||
|
||||
if filename.suffix != ".hdf5":
|
||||
filename = filename.with_suffix(".hdf5")
|
||||
|
||||
with Progress(console=console) as progress:
|
||||
model_building = progress.add_task(
|
||||
description="building the model",
|
||||
start=False,
|
||||
total=None,
|
||||
visible=False,
|
||||
)
|
||||
locking = progress.add_task(
|
||||
description="locking the model",
|
||||
start=False,
|
||||
total=None,
|
||||
visible=False,
|
||||
)
|
||||
set_dark_fringe = progress.add_task(
|
||||
description="set dark fringe offset",
|
||||
start=False,
|
||||
total=None,
|
||||
visible=False,
|
||||
)
|
||||
computing_TF = progress.add_task(
|
||||
description="computing transfer function",
|
||||
start=False,
|
||||
total=8,
|
||||
visible=False,
|
||||
)
|
||||
write_file = progress.add_task(
|
||||
description="writing file",
|
||||
start=False,
|
||||
total=None,
|
||||
visible=False,
|
||||
)
|
||||
|
||||
C_B1_DETECTOR = "TF" # depends on the code itself (don't change)
|
||||
|
||||
# Creating model
|
||||
|
||||
progress.start_task(model_building)
|
||||
progress.update(model_building, visible=not quiet)
|
||||
|
||||
model = Model()
|
||||
model.phase_config(zero_k00=False, zero_tem00_gouy=True)
|
||||
model.parse(Path("model.kat").read_text())
|
||||
model.lambda0 = model.get("wavelength")
|
||||
model.get("fsig").f = 1.0
|
||||
|
||||
try:
|
||||
model.get("B1")
|
||||
logger.info("B1 already exists")
|
||||
except ModelMissingAttributeError:
|
||||
try:
|
||||
model.add(
|
||||
MaskedReadoutDC(
|
||||
"B1",
|
||||
optical_node=model.get("SDB1").p2.o,
|
||||
output_detectors=True,
|
||||
pdtype=None,
|
||||
)
|
||||
)
|
||||
logger.info("B1 created")
|
||||
model.get("SR").xbeta = sr_rotation.to(rad).value
|
||||
model.get("laser").P = laser_power.to(W).value
|
||||
except ModelMissingAttributeError:
|
||||
logger.warning("SDB1 does not exist in the model")
|
||||
logger.warning("SR, or laser is not define in the model")
|
||||
|
||||
# Locking
|
||||
try:
|
||||
model.get("B1")
|
||||
logger.info("B1 already exists")
|
||||
except ModelMissingAttributeError:
|
||||
try:
|
||||
model.add(
|
||||
MaskedReadoutDC(
|
||||
"B1",
|
||||
optical_node=model.get("SDB1").p2.o,
|
||||
output_detectors=True,
|
||||
pdtype=None,
|
||||
)
|
||||
)
|
||||
logger.info("B1 created")
|
||||
except ModelMissingAttributeError:
|
||||
logger.warning("SDB1 does not exist in the model")
|
||||
|
||||
result = model.run(
|
||||
TemporaryParameters(
|
||||
Series(
|
||||
Change(
|
||||
{
|
||||
"SR.misaligned": True,
|
||||
"PR.misaligned": True,
|
||||
}
|
||||
progress.remove_task(model_building)
|
||||
progress.start_task(locking)
|
||||
progress.update(locking, visible=not quiet)
|
||||
# Locking
|
||||
|
||||
result = model.run(
|
||||
TemporaryParameters(
|
||||
Series(
|
||||
Change(
|
||||
{
|
||||
"SR.misaligned": True,
|
||||
"PR.misaligned": True,
|
||||
}
|
||||
),
|
||||
Maximize(
|
||||
model.get("NE_p1"),
|
||||
model.get("NORTH_ARM.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Maximize(
|
||||
model.get("WE_p1"),
|
||||
model.get("WEST_ARM.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Minimize(
|
||||
model.get("SR_p2"),
|
||||
model.get("MICH.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Change(
|
||||
{
|
||||
"PR.misaligned": False,
|
||||
},
|
||||
),
|
||||
Maximize(
|
||||
model.get("PR_p2"),
|
||||
model.get("PRCL.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Change(
|
||||
{
|
||||
"SR.misaligned": False,
|
||||
},
|
||||
),
|
||||
Maximize(
|
||||
model.get("B1_DC"),
|
||||
model.get("SRCL.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Change(
|
||||
{
|
||||
"SRCL.DC": -90,
|
||||
},
|
||||
relative=True,
|
||||
),
|
||||
),
|
||||
Maximize(
|
||||
model.get("NE_p1"),
|
||||
model.get("NORTH_ARM.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Maximize(
|
||||
model.get("WE_p1"),
|
||||
model.get("WEST_ARM.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Minimize(
|
||||
model.get("SR_p2"),
|
||||
model.get("MICH.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Change(
|
||||
{
|
||||
"PR.misaligned": False,
|
||||
},
|
||||
),
|
||||
Maximize(
|
||||
model.get("PR_p2"),
|
||||
model.get("PRCL.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Change(
|
||||
{
|
||||
"SR.misaligned": False,
|
||||
},
|
||||
),
|
||||
Maximize(
|
||||
model.get("B1_DC"),
|
||||
model.get("SRCL.DC"),
|
||||
bounds=[-180, 180],
|
||||
tol=1e-14,
|
||||
),
|
||||
Change(
|
||||
{
|
||||
"SRCL.DC": -90,
|
||||
},
|
||||
relative=True,
|
||||
exclude=(
|
||||
"NE.phi",
|
||||
"NI.Phi",
|
||||
"WE.phi",
|
||||
"WI.phi",
|
||||
"SR.phi",
|
||||
"PR.phi",
|
||||
"NORTH_ARM.DC",
|
||||
"WEST_ARM.DC",
|
||||
"DARM.DC",
|
||||
"MICH.DC",
|
||||
"PRCL.DC",
|
||||
"SRCL.DC",
|
||||
"SR.misaligned",
|
||||
"PR.misaligned",
|
||||
),
|
||||
),
|
||||
exclude=(
|
||||
"NE.phi",
|
||||
"NI.Phi",
|
||||
"WE.phi",
|
||||
"WI.phi",
|
||||
"SR.phi",
|
||||
"PR.phi",
|
||||
"NORTH_ARM.DC",
|
||||
"WEST_ARM.DC",
|
||||
"DARM.DC",
|
||||
"MICH.DC",
|
||||
"PRCL.DC",
|
||||
"SRCL.DC",
|
||||
"SR.misaligned",
|
||||
"PR.misaligned",
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
# Adding HOMs
|
||||
model.modes(maxtem=C_MAXTEM)
|
||||
model.get("B1").select_mask(exclude=(0, 0))
|
||||
|
||||
solution = model.run(Noxaxis())
|
||||
if solution is None:
|
||||
raise Exception("error when modeling the locked model")
|
||||
table = Table(title="Puissances dans l'interferomètre")
|
||||
table.add_column("position", justify="left", style="white")
|
||||
table.add_column("puissance (W)", justify="left", style="cyan")
|
||||
|
||||
table.add_row("Injection", str(model.get("laser").P.eval()))
|
||||
table.add_row("PR", str(solution["PR_p1"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row(
|
||||
"cavité de recyclage de puissance",
|
||||
str(solution["PR_p2"]), # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
)
|
||||
table.add_row("cavité ouest", str(solution["WE_p1"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("cavité nord", str(solution["NE_p1"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("frange noire", str(solution["SR_p2"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("SNEB", str(solution["SNEB_DC"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("SWEB", str(solution["SWEB_DC"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("SDB1", str(solution["SDB1_DC"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
|
||||
console.print(table)
|
||||
|
||||
"""
|
||||
display_displaydata(
|
||||
model,
|
||||
[
|
||||
DisplayData("NORTH_ARM", 10),
|
||||
DisplayData("WEST_ARM", 10),
|
||||
DisplayData("PRCL", 10),
|
||||
DisplayData("SRCL", 10),
|
||||
DisplayData("MICH", 10),
|
||||
DisplayData("DARM", 10),
|
||||
],
|
||||
)
|
||||
"""
|
||||
number, power = fix_dark_fringe(model, C_DARK_FRINGE.to(W).value)
|
||||
logger.info(
|
||||
"[result]{dof}[/result] with [result]{number} steps[/result] give [result]{power:.6f} mW[/result] on the [strong]dark fringe[/strong]".format(
|
||||
number=number,
|
||||
dof=model.get("DARM").DC,
|
||||
power=power,
|
||||
),
|
||||
)
|
||||
dark_fringe_power = power # to keep this result for the h5df metadata
|
||||
|
||||
# Computing TF
|
||||
|
||||
model.get("SNEB").phi = model.get("NE").phi - 45
|
||||
model.get("SWEB").phi = model.get("WE").phi - 45
|
||||
model.get("SDB1").phi = model.get("SR").phi + 45
|
||||
|
||||
quad_tf: dict[str, TF] = dict() # bench is in phase quadrature (Kn)
|
||||
in_tf: dict[str, TF] = dict() # bench is in phase (Kp)
|
||||
|
||||
for bench_name in ["SNEB", "SWEB", "SDB1"]:
|
||||
quad_tf[bench_name] = TF(
|
||||
model,
|
||||
["{}_z".format(bench_name)],
|
||||
[C_B1_DETECTOR],
|
||||
geomspace(5, 10000, C_PRECISION), # pyright: ignore[reportArgumentType]
|
||||
)
|
||||
|
||||
quad_tf["DARM"] = TF(
|
||||
model,
|
||||
["DARM"],
|
||||
[C_B1_DETECTOR],
|
||||
geomspace(5, 10000, C_PRECISION), # pyright: ignore[reportArgumentType]
|
||||
)
|
||||
# Adding HOMs
|
||||
model.modes(maxtem=maxtem)
|
||||
model.get("B1").select_mask(exclude=(0, 0))
|
||||
|
||||
model.get("SNEB").phi = model.get("NE").phi
|
||||
model.get("SWEB").phi = model.get("WE").phi
|
||||
model.get("SDB1").phi = model.get("SR").phi
|
||||
progress.remove_task(locking)
|
||||
|
||||
for bench_name in ["SNEB", "SWEB", "SDB1"]:
|
||||
in_tf[bench_name] = TF(
|
||||
if verbose:
|
||||
solution = model.run(Noxaxis())
|
||||
if solution is None:
|
||||
raise Exception("error when modeling the locked model")
|
||||
table = Table(title="Puissances dans l'interferomètre")
|
||||
table.add_column("position", justify="left", style="white")
|
||||
table.add_column("puissance (W)", justify="left", style="cyan")
|
||||
|
||||
table.add_row("Injection", str(model.get("laser").P.eval()))
|
||||
table.add_row("PR", str(solution["PR_p1"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row(
|
||||
"cavité de recyclage de puissance",
|
||||
str(solution["PR_p2"]), # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
)
|
||||
table.add_row("cavité ouest", str(solution["WE_p1"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("cavité nord", str(solution["NE_p1"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("frange noire", str(solution["SR_p2"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("SNEB", str(solution["SNEB_DC"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("SWEB", str(solution["SWEB_DC"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
table.add_row("SDB1", str(solution["SDB1_DC"])) # pyright: ignore[reportArgumentType,reportCallIssue]
|
||||
|
||||
console.print(table)
|
||||
|
||||
"""
|
||||
display_displaydata(
|
||||
model,
|
||||
["{}_z".format(bench_name)],
|
||||
[C_B1_DETECTOR],
|
||||
geomspace(5, 10000, C_PRECISION), # pyright: ignore[reportArgumentType]
|
||||
[
|
||||
DisplayData("NORTH_ARM", 10),
|
||||
DisplayData("WEST_ARM", 10),
|
||||
DisplayData("PRCL", 10),
|
||||
DisplayData("SRCL", 10),
|
||||
DisplayData("MICH", 10),
|
||||
DisplayData("DARM", 10),
|
||||
],
|
||||
)
|
||||
"""
|
||||
|
||||
progress.start_task(set_dark_fringe)
|
||||
progress.update(set_dark_fringe, visible=not quiet)
|
||||
|
||||
number, power = fix_dark_fringe(
|
||||
model, dark_fringe_power.to(W).value
|
||||
)
|
||||
power = power * W
|
||||
|
||||
if verbose:
|
||||
console.print(
|
||||
"[result]{dof}[/result] with [result]{number} steps[/result] give [result]{power:.6f}[/result] on the [strong]dark fringe[/strong]".format(
|
||||
number=number,
|
||||
dof=model.get("DARM").DC,
|
||||
power=power.to(mW),
|
||||
),
|
||||
)
|
||||
dark_fringe_power = (
|
||||
power # to keep this result for the h5df metadata
|
||||
)
|
||||
|
||||
in_tf["DARM"] = TF(
|
||||
model,
|
||||
["DARM"],
|
||||
[C_B1_DETECTOR],
|
||||
geomspace(5, 10000, C_PRECISION), # pyright: ignore[reportArgumentType]
|
||||
)
|
||||
progress.remove_task(set_dark_fringe)
|
||||
progress.start_task(computing_TF)
|
||||
progress.update(computing_TF, visible=not quiet)
|
||||
|
||||
bench_names = ["SNEB", "SWEB", "SDB1"]
|
||||
# Computing TF
|
||||
|
||||
for bench_name in bench_names:
|
||||
Figure = figure()
|
||||
ax = Figure.gca()
|
||||
ax.set_title(
|
||||
"finesse {bench_name}".format(bench_name=bench_name)
|
||||
).figure.gca().loglog(
|
||||
quad_tf[bench_name].f,
|
||||
sqrt(
|
||||
(
|
||||
model.get("SNEB").phi = model.get("NE").phi - 45
|
||||
model.get("SWEB").phi = model.get("WE").phi - 45
|
||||
model.get("SDB1").phi = model.get("SR").phi + 45
|
||||
|
||||
quad_tf: dict[str, TF] = dict() # bench is in phase quadrature (Kn)
|
||||
in_tf: dict[str, TF] = dict() # bench is in phase (Kp)
|
||||
|
||||
for bench_name in ["SNEB", "SWEB", "SDB1"]:
|
||||
quad_tf[bench_name] = TF(
|
||||
model,
|
||||
["{}_z".format(bench_name)],
|
||||
[C_B1_DETECTOR],
|
||||
geomspace(5, 10000, precision), # pyright: ignore[reportArgumentType]
|
||||
)
|
||||
progress.update(computing_TF, advance=1)
|
||||
|
||||
quad_tf["DARM"] = TF(
|
||||
model,
|
||||
["DARM"],
|
||||
[C_B1_DETECTOR],
|
||||
geomspace(5, 10000, precision), # pyright: ignore[reportArgumentType]
|
||||
)
|
||||
progress.update(computing_TF, advance=1)
|
||||
|
||||
model.get("SNEB").phi = model.get("NE").phi
|
||||
model.get("SWEB").phi = model.get("WE").phi
|
||||
model.get("SDB1").phi = model.get("SR").phi
|
||||
|
||||
for bench_name in ["SNEB", "SWEB", "SDB1"]:
|
||||
in_tf[bench_name] = TF(
|
||||
model,
|
||||
["{}_z".format(bench_name)],
|
||||
[C_B1_DETECTOR],
|
||||
geomspace(5, 10000, precision), # pyright: ignore[reportArgumentType]
|
||||
)
|
||||
progress.update(computing_TF, advance=1)
|
||||
|
||||
in_tf["DARM"] = TF(
|
||||
model,
|
||||
["DARM"],
|
||||
[C_B1_DETECTOR],
|
||||
geomspace(5, 10000, precision), # pyright: ignore[reportArgumentType]
|
||||
)
|
||||
progress.update(computing_TF, advance=1)
|
||||
|
||||
bench_names = ["SNEB", "SWEB", "SDB1"]
|
||||
|
||||
if verbose:
|
||||
for bench_name in bench_names:
|
||||
Figure = figure()
|
||||
ax = Figure.gca()
|
||||
ax.set_title(
|
||||
"finesse {bench_name}".format(bench_name=bench_name)
|
||||
).figure.gca().loglog(
|
||||
quad_tf[bench_name].f,
|
||||
sqrt(
|
||||
(
|
||||
abs(quad_tf[bench_name].get(C_B1_DETECTOR))
|
||||
/ abs(quad_tf["DARM"].get(C_B1_DETECTOR))
|
||||
/ model.get("space_NI_NE").L.eval()
|
||||
)
|
||||
** 2
|
||||
+ (
|
||||
abs(in_tf[bench_name].get(C_B1_DETECTOR))
|
||||
/ abs(in_tf["DARM"].get(C_B1_DETECTOR))
|
||||
/ model.get("space_NI_NE").L.eval()
|
||||
)
|
||||
** 2
|
||||
),
|
||||
label="sum of TF ($\\sqrt{{K_n^2 + K_p^2}}$)",
|
||||
)[0].figure.gca().loglog(
|
||||
quad_tf[bench_name].f,
|
||||
abs(quad_tf[bench_name].get(C_B1_DETECTOR))
|
||||
/ abs(quad_tf["DARM"].get(C_B1_DETECTOR))
|
||||
/ model.get("space_NI_NE").L.eval()
|
||||
)
|
||||
** 2
|
||||
+ (
|
||||
/ model.get("space_NI_NE").L.eval(),
|
||||
label="Kn",
|
||||
)[0].figure.gca().loglog(
|
||||
in_tf[bench_name].f,
|
||||
abs(in_tf[bench_name].get(C_B1_DETECTOR))
|
||||
/ abs(in_tf["DARM"].get(C_B1_DETECTOR))
|
||||
/ model.get("space_NI_NE").L.eval()
|
||||
)
|
||||
** 2
|
||||
),
|
||||
label="sum of TF ($\\sqrt{{K_n^2 + K_p^2}}$)",
|
||||
)[0].figure.gca().loglog(
|
||||
quad_tf[bench_name].f,
|
||||
abs(quad_tf[bench_name].get(C_B1_DETECTOR))
|
||||
/ abs(quad_tf["DARM"].get(C_B1_DETECTOR))
|
||||
/ model.get("space_NI_NE").L.eval(),
|
||||
label="Kn",
|
||||
)[0].figure.gca().loglog(
|
||||
in_tf[bench_name].f,
|
||||
abs(in_tf[bench_name].get(C_B1_DETECTOR))
|
||||
/ abs(in_tf["DARM"].get(C_B1_DETECTOR))
|
||||
/ model.get("space_NI_NE").L.eval(),
|
||||
label="Kp",
|
||||
)[0].figure.gca().set_ylabel(
|
||||
"$\\frac{{m}}{{m}}$"
|
||||
).figure.gca().legend().figure.gca().set_xlabel(
|
||||
"Frequencies ($Hz$)"
|
||||
).figure.gca().grid(True, "both", "both")
|
||||
show()
|
||||
/ model.get("space_NI_NE").L.eval(),
|
||||
label="Kp",
|
||||
)[0].figure.gca().set_ylabel(
|
||||
"$\\frac{{m}}{{m}}$"
|
||||
).figure.gca().legend().figure.gca().set_xlabel(
|
||||
"Frequencies ($Hz$)"
|
||||
).figure.gca().grid(True, "both", "both")
|
||||
show()
|
||||
|
||||
with File(Path("output") / C_FILE_NAME, "w") as file:
|
||||
file.attrs["SR yaw rotation"] = model.get("SR").xbeta * rad
|
||||
file.attrs["injected power"] = model.get("laser").P * W
|
||||
file.attrs["dark fringe power"] = dark_fringe_power * W
|
||||
file.attrs["maxtem"] = 9
|
||||
file.attrs["date"] = "2025-06-12"
|
||||
arm_length = file.create_group("arm length")
|
||||
arm_length.attrs["north"] = model.get("space_NI_NE").L.eval() * m
|
||||
arm_length.attrs["west"] = model.get("space_WI_WE").L.eval() * m
|
||||
darm_group = file.create_group("DARM")
|
||||
_ = darm_group.create_dataset(
|
||||
"signal",
|
||||
data=quad_tf["DARM"].get(C_B1_DETECTOR),
|
||||
)
|
||||
_ = darm_group.create_dataset(
|
||||
"frequency",
|
||||
data=quad_tf["DARM"].f,
|
||||
)
|
||||
for bench_name in ["SNEB", "SWEB", "SDB1"]:
|
||||
bench_group = file.require_group("benches").create_group(
|
||||
bench_name
|
||||
)
|
||||
bench_group.attrs["name"] = bench_name
|
||||
_ = bench_group.create_dataset(
|
||||
"frequency",
|
||||
data=quad_tf[bench_name].f,
|
||||
)
|
||||
_ = bench_group.create_dataset(
|
||||
"Kn",
|
||||
data=quad_tf[bench_name].get(C_B1_DETECTOR),
|
||||
)
|
||||
_ = bench_group.create_dataset(
|
||||
"Kp",
|
||||
data=in_tf[bench_name].get(C_B1_DETECTOR),
|
||||
progress.remove_task(computing_TF)
|
||||
progress.start_task(write_file)
|
||||
progress.update(write_file, visible=not quiet)
|
||||
|
||||
repo = Repo(Path("."))
|
||||
|
||||
with File(filename, "w") as file:
|
||||
file.attrs["name"] = name
|
||||
file.attrs["maxtem"] = maxtem
|
||||
|
||||
git = file.create_group("git")
|
||||
git.attrs["location"] = repo.remote().url
|
||||
git.attrs["commit"] = repo.active_branch.commit.hexsha
|
||||
git.attrs["version"] = current_version
|
||||
git.attrs["branch"] = repo.active_branch.name
|
||||
|
||||
itf = file.create_group("interferometer")
|
||||
itf.attrs["dark fringe power"] = dark_fringe_power
|
||||
itf.attrs["injection power"] = model.get("laser").P * W
|
||||
itf.attrs["SR yaw"] = model.get("SR").xbeta * rad
|
||||
itf.attrs["north arm"] = model.get("space_NI_NE").L.eval() * m
|
||||
itf.attrs["west arm"] = model.get("space_WI_WE").L.eval() * m
|
||||
|
||||
darm = FrequencySeries(
|
||||
quad_tf["DARM"].get(C_B1_DETECTOR),
|
||||
unit=W / m, # power on B1 to arm displacement
|
||||
f0=quad_tf["DARM"].f[0],
|
||||
df=mean(diff(quad_tf["DARM"].f)),
|
||||
)
|
||||
|
||||
file.create_dataset("DARM", data=darm)
|
||||
|
||||
for bench_name in ["SNEB", "SWEB", "SDB1"]:
|
||||
bench_group = file.require_group(
|
||||
"scatterers",
|
||||
).create_group(
|
||||
bench_name,
|
||||
)
|
||||
bench_group.attrs["name"] = bench_name
|
||||
|
||||
kn = FrequencySeries(
|
||||
quad_tf[bench_name].get(C_B1_DETECTOR),
|
||||
unit=m / W, # bench displacement to power on b1
|
||||
f0=quad_tf[bench_name].f[0],
|
||||
df=mean(diff(quad_tf[bench_name].f)),
|
||||
)
|
||||
kp = FrequencySeries(
|
||||
in_tf[bench_name].get(C_B1_DETECTOR),
|
||||
unit=m / W, # bench displacement to power on b1
|
||||
f0=in_tf[bench_name].f[0],
|
||||
df=mean(diff(in_tf[bench_name].f)),
|
||||
)
|
||||
_ = bench_group.create_dataset("Kn", data=kn)
|
||||
_ = bench_group.create_dataset("Kp", data=kp)
|
||||
|
||||
progress.remove_task(write_file)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[project]
|
||||
name = "finesse-simulation-04"
|
||||
name = "finesse-simulation-o4"
|
||||
version = "0.1.0"
|
||||
description = ""
|
||||
authors = [{ name = "linarphy", email = "augustin.demagny@ligo.org" }]
|
||||
|
@ -10,12 +10,15 @@ dependencies = [
|
|||
"basedpyright>=1.27.1",
|
||||
"finesse>=3.0a31",
|
||||
"finesse-virgo>=1.0.9",
|
||||
"gitpython>=3.1.44",
|
||||
"gwpy>=3.0.12",
|
||||
"ipympl>=0.9.7",
|
||||
"ipywidgets>=8.1.5",
|
||||
"jupyter-lsp>=2.2.5",
|
||||
"jupyterlab>=4.3.5",
|
||||
"jupyterlab-code-formatter>=3.0.2",
|
||||
"jupyterlab-lsp>=5.1.0",
|
||||
"pip>=25.1.1",
|
||||
"pygraphviz>=1.14",
|
||||
"pyqt6>=6.9.1",
|
||||
"rich>=13.9.4",
|
||||
|
@ -25,6 +28,7 @@ dependencies = [
|
|||
|
||||
[tool.uv.sources]
|
||||
science-signal = { git = "https://git.linarphy.net/linarphy/science_signal.git" }
|
||||
finesse-simulation-o4 = { workspace = true }
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 72
|
||||
|
|
2
utils.py
2
utils.py
|
@ -122,7 +122,7 @@ def fix_dark_fringe(model: Model, power: float) -> tuple[int, float]:
|
|||
if type(model.get("DARM")) is DegreeOfFreedom:
|
||||
result = solution["B1_DC"]
|
||||
start, stop, nb = 0, 1, 0
|
||||
while (abs(result - power) > 1e-4) and (nb < 100):
|
||||
while (abs(result - power) > 1e-6) and (nb < 500):
|
||||
nb += 1
|
||||
temp = start + (stop - start) / 2
|
||||
|
||||
|
|
288
uv.lock
288
uv.lock
|
@ -322,6 +322,41 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/b2/9b/972af6f963631c10e98e35fe53a46f6f4ec1e2dd05c5d88f63f3c75c3d21/control-0.10.1-py3-none-any.whl", hash = "sha256:ff4c7620addb7edcafa24f712b9cad61dcdf50a40018f16b8dcb0b26c7774524", size = 549597 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cryptography"
|
||||
version = "45.0.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/fe/c8/a2a376a8711c1e11708b9c9972e0c3223f5fc682552c82d8db844393d6ce/cryptography-45.0.4.tar.gz", hash = "sha256:7405ade85c83c37682c8fe65554759800a4a8c54b2d96e0f8ad114d31b808d57", size = 744890 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/cc/1c/92637793de053832523b410dbe016d3f5c11b41d0cf6eef8787aabb51d41/cryptography-45.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:425a9a6ac2823ee6e46a76a21a4e8342d8fa5c01e08b823c1f19a8b74f096069", size = 7055712 },
|
||||
{ url = "https://files.pythonhosted.org/packages/ba/14/93b69f2af9ba832ad6618a03f8a034a5851dc9a3314336a3d71c252467e1/cryptography-45.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:680806cf63baa0039b920f4976f5f31b10e772de42f16310a6839d9f21a26b0d", size = 4205335 },
|
||||
{ url = "https://files.pythonhosted.org/packages/67/30/fae1000228634bf0b647fca80403db5ca9e3933b91dd060570689f0bd0f7/cryptography-45.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4ca0f52170e821bc8da6fc0cc565b7bb8ff8d90d36b5e9fdd68e8a86bdf72036", size = 4431487 },
|
||||
{ url = "https://files.pythonhosted.org/packages/6d/5a/7dffcf8cdf0cb3c2430de7404b327e3db64735747d641fc492539978caeb/cryptography-45.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f3fe7a5ae34d5a414957cc7f457e2b92076e72938423ac64d215722f6cf49a9e", size = 4208922 },
|
||||
{ url = "https://files.pythonhosted.org/packages/c6/f3/528729726eb6c3060fa3637253430547fbaaea95ab0535ea41baa4a6fbd8/cryptography-45.0.4-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:25eb4d4d3e54595dc8adebc6bbd5623588991d86591a78c2548ffb64797341e2", size = 3900433 },
|
||||
{ url = "https://files.pythonhosted.org/packages/d9/4a/67ba2e40f619e04d83c32f7e1d484c1538c0800a17c56a22ff07d092ccc1/cryptography-45.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:ce1678a2ccbe696cf3af15a75bb72ee008d7ff183c9228592ede9db467e64f1b", size = 4464163 },
|
||||
{ url = "https://files.pythonhosted.org/packages/7e/9a/b4d5aa83661483ac372464809c4b49b5022dbfe36b12fe9e323ca8512420/cryptography-45.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:49fe9155ab32721b9122975e168a6760d8ce4cffe423bcd7ca269ba41b5dfac1", size = 4208687 },
|
||||
{ url = "https://files.pythonhosted.org/packages/db/b7/a84bdcd19d9c02ec5807f2ec2d1456fd8451592c5ee353816c09250e3561/cryptography-45.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2882338b2a6e0bd337052e8b9007ced85c637da19ef9ecaf437744495c8c2999", size = 4463623 },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/84/69707d502d4d905021cac3fb59a316344e9f078b1da7fb43ecde5e10840a/cryptography-45.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:23b9c3ea30c3ed4db59e7b9619272e94891f8a3a5591d0b656a7582631ccf750", size = 4332447 },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/ee/d4f2ab688e057e90ded24384e34838086a9b09963389a5ba6854b5876598/cryptography-45.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0a97c927497e3bc36b33987abb99bf17a9a175a19af38a892dc4bbb844d7ee2", size = 4572830 },
|
||||
{ url = "https://files.pythonhosted.org/packages/70/d4/994773a261d7ff98034f72c0e8251fe2755eac45e2265db4c866c1c6829c/cryptography-45.0.4-cp311-abi3-win32.whl", hash = "sha256:e00a6c10a5c53979d6242f123c0a97cff9f3abed7f064fc412c36dc521b5f257", size = 2932769 },
|
||||
{ url = "https://files.pythonhosted.org/packages/5a/42/c80bd0b67e9b769b364963b5252b17778a397cefdd36fa9aa4a5f34c599a/cryptography-45.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:817ee05c6c9f7a69a16200f0c90ab26d23a87701e2a284bd15156783e46dbcc8", size = 3410441 },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/0b/2488c89f3a30bc821c9d96eeacfcab6ff3accc08a9601ba03339c0fd05e5/cryptography-45.0.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:964bcc28d867e0f5491a564b7debb3ffdd8717928d315d12e0d7defa9e43b723", size = 7031836 },
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/51/8c584ed426093aac257462ae62d26ad61ef1cbf5b58d8b67e6e13c39960e/cryptography-45.0.4-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6a5bf57554e80f75a7db3d4b1dacaa2764611ae166ab42ea9a72bcdb5d577637", size = 4195746 },
|
||||
{ url = "https://files.pythonhosted.org/packages/5c/7d/4b0ca4d7af95a704eef2f8f80a8199ed236aaf185d55385ae1d1610c03c2/cryptography-45.0.4-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:46cf7088bf91bdc9b26f9c55636492c1cce3e7aaf8041bbf0243f5e5325cfb2d", size = 4424456 },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/45/5fabacbc6e76ff056f84d9f60eeac18819badf0cefc1b6612ee03d4ab678/cryptography-45.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7bedbe4cc930fa4b100fc845ea1ea5788fcd7ae9562e669989c11618ae8d76ee", size = 4198495 },
|
||||
{ url = "https://files.pythonhosted.org/packages/55/b7/ffc9945b290eb0a5d4dab9b7636706e3b5b92f14ee5d9d4449409d010d54/cryptography-45.0.4-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:eaa3e28ea2235b33220b949c5a0d6cf79baa80eab2eb5607ca8ab7525331b9ff", size = 3885540 },
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/e3/57b010282346980475e77d414080acdcb3dab9a0be63071efc2041a2c6bd/cryptography-45.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:7ef2dde4fa9408475038fc9aadfc1fb2676b174e68356359632e980c661ec8f6", size = 4452052 },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/e6/ddc4ac2558bf2ef517a358df26f45bc774a99bf4653e7ee34b5e749c03e3/cryptography-45.0.4-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:6a3511ae33f09094185d111160fd192c67aa0a2a8d19b54d36e4c78f651dc5ad", size = 4198024 },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/c0/85fa358ddb063ec588aed4a6ea1df57dc3e3bc1712d87c8fa162d02a65fc/cryptography-45.0.4-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:06509dc70dd71fa56eaa138336244e2fbaf2ac164fc9b5e66828fccfd2b680d6", size = 4451442 },
|
||||
{ url = "https://files.pythonhosted.org/packages/33/67/362d6ec1492596e73da24e669a7fbbaeb1c428d6bf49a29f7a12acffd5dc/cryptography-45.0.4-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5f31e6b0a5a253f6aa49be67279be4a7e5a4ef259a9f33c69f7d1b1191939872", size = 4325038 },
|
||||
{ url = "https://files.pythonhosted.org/packages/53/75/82a14bf047a96a1b13ebb47fb9811c4f73096cfa2e2b17c86879687f9027/cryptography-45.0.4-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:944e9ccf67a9594137f942d5b52c8d238b1b4e46c7a0c2891b7ae6e01e7c80a4", size = 4560964 },
|
||||
{ url = "https://files.pythonhosted.org/packages/cd/37/1a3cba4c5a468ebf9b95523a5ef5651244693dc712001e276682c278fc00/cryptography-45.0.4-cp37-abi3-win32.whl", hash = "sha256:c22fe01e53dc65edd1945a2e6f0015e887f84ced233acecb64b4daadb32f5c97", size = 2924557 },
|
||||
{ url = "https://files.pythonhosted.org/packages/2a/4b/3256759723b7e66380397d958ca07c59cfc3fb5c794fb5516758afd05d41/cryptography-45.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:627ba1bc94f6adf0b0a2e35d87020285ead22d9f648c7e75bb64f367375f3b22", size = 3395508 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cycler"
|
||||
version = "0.12.1"
|
||||
|
@ -331,6 +366,21 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dateparser"
|
||||
version = "1.2.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "python-dateutil" },
|
||||
{ name = "pytz" },
|
||||
{ name = "regex" },
|
||||
{ name = "tzlocal" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a9/30/064144f0df1749e7bb5faaa7f52b007d7c2d08ec08fed8411aba87207f68/dateparser-1.2.2.tar.gz", hash = "sha256:986316f17cb8cdc23ea8ce563027c5ef12fc725b6fb1d137c14ca08777c5ecf7", size = 329840 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl", hash = "sha256:5a5d7211a09013499867547023a2a0c91d5a27d15dd4dbcea676ea9fe66f2482", size = 315453 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "debugpy"
|
||||
version = "1.8.14"
|
||||
|
@ -383,6 +433,20 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dqsegdb2"
|
||||
version = "1.3.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "click" },
|
||||
{ name = "igwn-auth-utils" },
|
||||
{ name = "igwn-segments" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c4/37/7874b39abede48fe05c3b5a25092e419e521145e9705c97b711965e5f05d/dqsegdb2-1.3.0.tar.gz", hash = "sha256:4e291899cd395daf5913c48a835d213ef20833d78354871cb848988cc2cc8ae4", size = 33661 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/78/67/c977e7307d432911fe28acf55dba01f84f3a0a4a2a968350195c0f52d23e/dqsegdb2-1.3.0-py3-none-any.whl", hash = "sha256:c93087da332b7d91519a370abed3cfc91b64a6bf393ec64d79c2747c837aeb66", size = 27957 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "executing"
|
||||
version = "2.2.0"
|
||||
|
@ -431,7 +495,7 @@ wheels = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "finesse-simulation-04"
|
||||
name = "finesse-simulation-o4"
|
||||
version = "0.1.0"
|
||||
source = { virtual = "." }
|
||||
dependencies = [
|
||||
|
@ -439,12 +503,15 @@ dependencies = [
|
|||
{ name = "basedpyright" },
|
||||
{ name = "finesse" },
|
||||
{ name = "finesse-virgo" },
|
||||
{ name = "gitpython" },
|
||||
{ name = "gwpy" },
|
||||
{ name = "ipympl" },
|
||||
{ name = "ipywidgets" },
|
||||
{ name = "jupyter-lsp" },
|
||||
{ name = "jupyterlab" },
|
||||
{ name = "jupyterlab-code-formatter" },
|
||||
{ name = "jupyterlab-lsp" },
|
||||
{ name = "pip" },
|
||||
{ name = "pygraphviz" },
|
||||
{ name = "pyqt6" },
|
||||
{ name = "rich" },
|
||||
|
@ -458,12 +525,15 @@ requires-dist = [
|
|||
{ name = "basedpyright", specifier = ">=1.27.1" },
|
||||
{ name = "finesse", specifier = ">=3.0a31" },
|
||||
{ name = "finesse-virgo", specifier = ">=1.0.9" },
|
||||
{ name = "gitpython", specifier = ">=3.1.44" },
|
||||
{ name = "gwpy", specifier = ">=3.0.12" },
|
||||
{ name = "ipympl", specifier = ">=0.9.7" },
|
||||
{ name = "ipywidgets", specifier = ">=8.1.5" },
|
||||
{ name = "jupyter-lsp", specifier = ">=2.2.5" },
|
||||
{ name = "jupyterlab", specifier = ">=4.3.5" },
|
||||
{ name = "jupyterlab-code-formatter", specifier = ">=3.0.2" },
|
||||
{ name = "jupyterlab-lsp", specifier = ">=5.1.0" },
|
||||
{ name = "pip", specifier = ">=25.1.1" },
|
||||
{ name = "pygraphviz", specifier = ">=1.14" },
|
||||
{ name = "pyqt6", specifier = ">=6.9.1" },
|
||||
{ name = "rich", specifier = ">=13.9.4" },
|
||||
|
@ -514,6 +584,81 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gitdb"
|
||||
version = "4.0.12"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "smmap" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gitpython"
|
||||
version = "3.1.44"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "gitdb" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c0/89/37df0b71473153574a5cdef8f242de422a0f5d26d7a9e231e6f169b4ad14/gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269", size = 214196 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110", size = 207599 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gwdatafind"
|
||||
version = "2.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "igwn-auth-utils" },
|
||||
{ name = "igwn-segments" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f7/d8/d63db7552cfda6db05464442234ecfbafdcd09c41493d19ac32dbdbf1f62/gwdatafind-2.0.0.tar.gz", hash = "sha256:04fb1aa18ea1f22148a17eb1ac30406b8737f89a6d86113f3c06b86c30ba7127", size = 37609 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/78/ae/0edf7a201604d2222ecd7796fd438597494d6a051bb4dc4501c9dff051a8/gwdatafind-2.0.0-py3-none-any.whl", hash = "sha256:1f78cd0edcb4bf8b4ab3cbafe6e02dc8386c09a45f97906faf2d98b900e354a9", size = 39693 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gwosc"
|
||||
version = "0.8.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "requests" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/3b/4e/6756e30841a81540ea38d429892f0900c9a33fa5c6269697fd021c20f018/gwosc-0.8.1.tar.gz", hash = "sha256:d4a890147ffbd76bfa800f6d01dd614cfb85b7623c537b93d713656144a9edff", size = 35494 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a9/63/5dc667739398c194679cb44813e1e180fd2dff843155c1c7d8391276f2bc/gwosc-0.8.1-py3-none-any.whl", hash = "sha256:e6040e1901f8b8e43a7ed292f92a17eb67490a85124c93d45b2ab50ae4000b41", size = 32222 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gwpy"
|
||||
version = "3.0.12"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "astropy" },
|
||||
{ name = "dateparser" },
|
||||
{ name = "dqsegdb2" },
|
||||
{ name = "gwdatafind" },
|
||||
{ name = "gwosc" },
|
||||
{ name = "h5py" },
|
||||
{ name = "igwn-segments" },
|
||||
{ name = "ligotimegps" },
|
||||
{ name = "matplotlib" },
|
||||
{ name = "numpy" },
|
||||
{ name = "packaging" },
|
||||
{ name = "python-dateutil" },
|
||||
{ name = "requests" },
|
||||
{ name = "scipy" },
|
||||
{ name = "tqdm" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a6/94/b2ead3b71b2a8a20ea463a8df1cb4e0e636cdd5a7018834a9389cb111399/gwpy-3.0.12.tar.gz", hash = "sha256:9c99c6cf62142911cb5f64c1219770deaeb5129e7d78cfd7c0537838d0432231", size = 1539703 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/ec/39/4f373ed9eb4e2464c91873ea242f17c4f286d0ee2e94cf9a545e82f0390b/gwpy-3.0.12-py3-none-any.whl", hash = "sha256:ace40fbb03d3cccc7dc806e6545725701dfdf6bab7dbd60ab9e346c44a3baef8", size = 1394829 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h11"
|
||||
version = "0.16.0"
|
||||
|
@ -576,6 +721,35 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "igwn-auth-utils"
|
||||
version = "1.4.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "cryptography" },
|
||||
{ name = "requests" },
|
||||
{ name = "safe-netrc" },
|
||||
{ name = "scitokens" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e9/88/a94ef60db81bb38137a3a7278a71efe729623bfa4a5bf4cabed8a8f44b69/igwn_auth_utils-1.4.0.tar.gz", hash = "sha256:8ebd331a1d6de16e843e94cde2dc0a09d07a7fbc089bc525fa0eabddd89ea187", size = 40693 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/70/a0/6d3b9b7ff91c1cc73a0f45972a5032a4e89439ffb16e617806867cee905b/igwn_auth_utils-1.4.0-py3-none-any.whl", hash = "sha256:3936dbc4e630b1a31eeb1376abf25ac7b518629f84e34ecc37a9d88ebd86e582", size = 34292 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "igwn-segments"
|
||||
version = "2.1.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/71/10/e041c7818e486d9e08fc168270038a092d2e6c2b4a8603e155d4e21a1a90/igwn_segments-2.1.0.tar.gz", hash = "sha256:71931772a6af0f581a252cab84c7f2a696a219c71c5e5750682353d651f23229", size = 59701 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a5/68/75c634b687afba69610373be97839840d640d7d4f5649eb4711ccc6127b5/igwn_segments-2.1.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:010e4f4a6231357e9c694d6e8151cf3e30994547f820de06c7e35887ff614495", size = 65775 },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/3d/a4aa5c429a2406e96f7023454a7d4553b5f133605c5639f4a47a59eaa2dd/igwn_segments-2.1.0-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:c9c75c15243ede02d0999b4ad7048331bf6e9d84cab0b6be289ce0446f3b2dd8", size = 65665 },
|
||||
{ url = "https://files.pythonhosted.org/packages/c3/ec/327db532d19754db299f1e35eeb06648bfd7b3ba5e8d01c8d4e141da045f/igwn_segments-2.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a94536bc74551b68227b98d5b8c6429f77367b997d5fb7066e30230cacfc1bc", size = 131529 },
|
||||
{ url = "https://files.pythonhosted.org/packages/d9/5b/ed9889d117e519ee45546da4db31631d58f6c464d6e91fedc4c3bd4ebc63/igwn_segments-2.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2d26fba79637de72f9f34274e9b3f2fda4390357404c00aa4c17756e054fd6f", size = 130229 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/12/14df34127a8e3933920e502823ba9ea9c5e44b37e7099173275d8b093156/igwn_segments-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:97fad32aca0c5f886ec2e57c6239a4b917458bc3aedfe181e80fda05d9c9af40", size = 130053 },
|
||||
{ url = "https://files.pythonhosted.org/packages/94/a6/55e636b0d07a5de1609da4c93ae1a7daa4236f30d9893bff993491ce2d5c/igwn_segments-2.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ff3d08b2c517d3524bb68aa0888f37a7286325b44f6b1d759f9915f1a08b1a7b", size = 129895 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ipykernel"
|
||||
version = "6.29.5"
|
||||
|
@ -985,6 +1159,15 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ligotimegps"
|
||||
version = "2.0.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/39/2e/cef2ee4c4f3f1f04566e3e7e9343811a74f6e9a0bc6ef4711248f132e3bb/ligotimegps-2.0.1.tar.gz", hash = "sha256:88626c02ad9a464d1242a1147b40074792f424bafa2ab013eee629c7d1b6469c", size = 35191 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/69/b6/6d6d0585fa2ae936a9f5d411b1f0fbe9fcb0aca0c51a775aa4f8f95fdf5e/ligotimegps-2.0.1-py2.py3-none-any.whl", hash = "sha256:da8c1289ba1310337ef5177e7936e25ce47d4e8e6a269cbdd5e9abfc5b5db490", size = 19930 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "3.0.0"
|
||||
|
@ -1343,6 +1526,15 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/67/32/32dc030cfa91ca0fc52baebbba2e009bb001122a1daa8b6a79ad830b38d3/pillow-11.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:225c832a13326e34f212d2072982bb1adb210e0cc0b153e688743018c94a2681", size = 2417234 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pip"
|
||||
version = "25.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/59/de/241caa0ca606f2ec5fe0c1f4261b0465df78d786a38da693864a116c37f4/pip-25.1.1.tar.gz", hash = "sha256:3de45d411d308d5054c2168185d8da7f9a2cd753dbac8acbfa88a8909ecd9077", size = 1940155 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/29/a2/d40fb2460e883eca5199c62cfc2463fd261f760556ae6290f88488c362c0/pip-25.1.1-py3-none-any.whl", hash = "sha256:2913a38a2abf4ea6b64ab507bd9e967f3b53dc1ede74b01b0931e1ce548751af", size = 1825227 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "platformdirs"
|
||||
version = "4.3.8"
|
||||
|
@ -1466,6 +1658,15 @@ version = "1.14"
|
|||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/66/ca/823d5c74a73d6b8b08e1f5aea12468ef334f0732c65cbb18df2a7f285c87/pygraphviz-1.14.tar.gz", hash = "sha256:c10df02377f4e39b00ae17c862f4ee7e5767317f1c6b2dfd04cea6acc7fc2bea", size = 106003 }
|
||||
|
||||
[[package]]
|
||||
name = "pyjwt"
|
||||
version = "2.10.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyparsing"
|
||||
version = "3.2.3"
|
||||
|
@ -1548,6 +1749,15 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pytz"
|
||||
version = "2025.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pywin32"
|
||||
version = "310"
|
||||
|
@ -1637,6 +1847,29 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "2024.11.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/8e/5f/bd69653fbfb76cf8604468d3b4ec4c403197144c7bfe0e6a5fc9e02a07cb/regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519", size = 399494 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/90/73/bcb0e36614601016552fa9344544a3a2ae1809dc1401b100eab02e772e1f/regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84", size = 483525 },
|
||||
{ url = "https://files.pythonhosted.org/packages/0f/3f/f1a082a46b31e25291d830b369b6b0c5576a6f7fb89d3053a354c24b8a83/regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4", size = 288324 },
|
||||
{ url = "https://files.pythonhosted.org/packages/09/c9/4e68181a4a652fb3ef5099e077faf4fd2a694ea6e0f806a7737aff9e758a/regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0", size = 284617 },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/fd/37868b75eaf63843165f1d2122ca6cb94bfc0271e4428cf58c0616786dce/regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0", size = 795023 },
|
||||
{ url = "https://files.pythonhosted.org/packages/c4/7c/d4cd9c528502a3dedb5c13c146e7a7a539a3853dc20209c8e75d9ba9d1b2/regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7", size = 833072 },
|
||||
{ url = "https://files.pythonhosted.org/packages/4f/db/46f563a08f969159c5a0f0e722260568425363bea43bb7ae370becb66a67/regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7", size = 823130 },
|
||||
{ url = "https://files.pythonhosted.org/packages/db/60/1eeca2074f5b87df394fccaa432ae3fc06c9c9bfa97c5051aed70e6e00c2/regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c", size = 796857 },
|
||||
{ url = "https://files.pythonhosted.org/packages/10/db/ac718a08fcee981554d2f7bb8402f1faa7e868c1345c16ab1ebec54b0d7b/regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3", size = 784006 },
|
||||
{ url = "https://files.pythonhosted.org/packages/c2/41/7da3fe70216cea93144bf12da2b87367590bcf07db97604edeea55dac9ad/regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07", size = 781650 },
|
||||
{ url = "https://files.pythonhosted.org/packages/a7/d5/880921ee4eec393a4752e6ab9f0fe28009435417c3102fc413f3fe81c4e5/regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e", size = 789545 },
|
||||
{ url = "https://files.pythonhosted.org/packages/dc/96/53770115e507081122beca8899ab7f5ae28ae790bfcc82b5e38976df6a77/regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6", size = 853045 },
|
||||
{ url = "https://files.pythonhosted.org/packages/31/d3/1372add5251cc2d44b451bd94f43b2ec78e15a6e82bff6a290ef9fd8f00a/regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4", size = 860182 },
|
||||
{ url = "https://files.pythonhosted.org/packages/ed/e3/c446a64984ea9f69982ba1a69d4658d5014bc7a0ea468a07e1a1265db6e2/regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d", size = 787733 },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/f1/e40c8373e3480e4f29f2692bd21b3e05f296d3afebc7e5dcf21b9756ca1c/regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff", size = 262122 },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/94/bc295babb3062a731f52621cdc992d123111282e291abaf23faa413443ea/regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a", size = 273545 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "requests"
|
||||
version = "2.32.3"
|
||||
|
@ -1746,6 +1979,15 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/ce/eb/09c132cff3cc30b2e7244191dcce69437352d6d6709c0adf374f3e6f476e/ruff-0.11.11-py3-none-win_arm64.whl", hash = "sha256:6c51f136c0364ab1b774767aa8b86331bd8e9d414e2d107db7a2189f35ea1f7b", size = 10735951 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "safe-netrc"
|
||||
version = "1.0.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e4/f1/fb3c8ccd4a8963d7400cfd80100d5ae7fd95d49ace3a6722736bb4c1c1a6/safe-netrc-1.0.1.tar.gz", hash = "sha256:1dcc7263b4d9ce72e0109d8e2bc9ba89c8056ccc618d26c8c94802c6fd753720", size = 10846 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/26/2a/b5b09ff2781c7ea694b337f65f52a00319396578c049af8890ff9b4b8232/safe_netrc-1.0.1-py3-none-any.whl", hash = "sha256:5f0dd6a5e304b1da3be220f15efedbf09e50779fe90462143c228c781b9d8218", size = 10891 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "science-signal"
|
||||
version = "1.0.0"
|
||||
|
@ -1784,6 +2026,20 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scitokens"
|
||||
version = "1.8.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "cryptography" },
|
||||
{ name = "pyjwt" },
|
||||
{ name = "requests" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/dc/13/13372ff4f4b6335819d2592b7f10ff1e56513261558b2a4162f6d6cba971/scitokens-1.8.1.tar.gz", hash = "sha256:f255383d9c7402b3fcd20d5ed26a6b407b4be8bec6f282d0af29b6275382b54d", size = 48564 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/40/17/916811af05e98d86b347f3a9d9c2d490ef9e5c75dc5980842bf946a70ba3/scitokens-1.8.1-py3-none-any.whl", hash = "sha256:a5455d85969cd7c7b341ed8691ea89e0e446bd414a734f8443752081b049b46c", size = 31190 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "send2trash"
|
||||
version = "1.8.3"
|
||||
|
@ -1820,6 +2076,15 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/8e/4d/c96d807295183f2360329cd8d8bf5e8072c53d664125b3858c04153f026e/sly-0.5-py3-none-any.whl", hash = "sha256:20485483259eec7f6ba85ff4d2e96a4e50c6621902667fc2695cc8bc2a3e5133", size = 28864 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smmap"
|
||||
version = "5.0.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sniffio"
|
||||
version = "1.3.1"
|
||||
|
@ -1948,6 +2213,27 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/8b/54/b1ae86c0973cc6f0210b53d508ca3641fb6d0c56823f288d108bc7ab3cc8/typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c", size = 45806 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tzdata"
|
||||
version = "2025.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tzlocal"
|
||||
version = "5.3.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "tzdata", marker = "sys_platform == 'win32'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/8b/2e/c14812d3d4d9cd1773c6be938f89e5735a1f11a9f184ac3639b93cef35d5/tzlocal-5.3.1.tar.gz", hash = "sha256:cceffc7edecefea1f595541dbd6e990cb1ea3d19bf01b2809f362a03dd7921fd", size = 30761 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl", hash = "sha256:eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d", size = 18026 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uri-template"
|
||||
version = "1.3.0"
|
||||
|
|
Loading…
Reference in a new issue