From 5e3f9e8f5c0d59d96563e71b50c2eaf442abdcbb Mon Sep 17 00:00:00 2001 From: Hojae Ahn Date: Tue, 21 Dec 2021 20:10:55 +0900 Subject: [PATCH 01/17] v.0.2.4a guide lab debug --- pyproject.toml | 2 +- python/lvmagp/actor/commands/__init__.py | 5 +- python/lvmagp/actor/commands/autofocus.py | 116 +++++++++++++++------ python/lvmagp/actor/commands/guide.py | 54 +++++----- python/lvmagp/actor/commands/slew.py | 38 ++----- python/lvmagp/actor/commands/test.py | 120 ++++++++++++++++++++-- python/lvmagp/actor/commfunc.py | 6 +- python/lvmagp/actor/internalfunc.py | 9 +- python/lvmagp/actor/user_parameters.py | 9 +- 9 files changed, 255 insertions(+), 104 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index bd86c9a..b03f1f0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ generate-setup-file = false lvmagp = "lvmagp.__main__:lvmagp" [tool.poetry.dependencies] -python = "^3.7" +python = ">3.7, <3.10" sdss-tree = ">=2.15.2" sdss-access = ">=0.2.3" sdsstools = ">=0.4.0" diff --git a/python/lvmagp/actor/commands/__init__.py b/python/lvmagp/actor/commands/__init__.py index 18376ef..a2e011b 100644 --- a/python/lvmagp/actor/commands/__init__.py +++ b/python/lvmagp/actor/commands/__init__.py @@ -11,17 +11,18 @@ import os import click -from clu.parsers.click import CluGroup, help_, ping, version +from clu.parsers.click import CluGroup, help_, ping, version, command_parser +from cluplus.parsers.click import __commands @click.group(cls=CluGroup) def parser(*args): pass - parser.add_command(ping) parser.add_command(version) parser.add_command(help_) +command_parser.add_command(__commands) # Autoimport all modules in this directory so that they are added to the parser. diff --git a/python/lvmagp/actor/commands/autofocus.py b/python/lvmagp/actor/commands/autofocus.py index 76e1a82..4982313 100644 --- a/python/lvmagp/actor/commands/autofocus.py +++ b/python/lvmagp/actor/commands/autofocus.py @@ -3,9 +3,11 @@ import click from clu.command import Command -from lvmagp.actor.commfunc import * # noqa: F403 -from lvmagp.actor.internalfunc import * # noqa: F403 - +from lvmagp.actor.commfunc import (LVMEastCamera, LVMFibsel, # noqa: F401 + LVMFocuser, LVMKMirror, LVMTANInstrument, + LVMTelescope, LVMWestCamera) +from lvmagp.actor.internalfunc import GuideImage, findfocus # noqa: F403 +from lvmagp.actor.user_parameters import usrpars from . import parser @@ -16,7 +18,13 @@ def autofocus(*args): @autofocus.command() @click.argument("TEL", type=str) -async def coarse(command: Command, tel: str): +async def coarse(command: Command, + telescopes: dict[str, LVMTelescope], + eastcameras: dict[str, LVMEastCamera], + westcameras: dict[str, LVMWestCamera], + focusers: dict[str, LVMFocuser], + kmirrors: dict[str, LVMKMirror], + tel: str,): """ Find the focus coarsely by scanning whole reachable position. @@ -30,7 +38,13 @@ async def coarse(command: Command, tel: str): @autofocus.command() @click.argument("TEL", type=str) -async def fine(command: Command, tel: str): +async def fine(command: Command, + telescopes: dict[str, LVMTelescope], + eastcameras: dict[str, LVMEastCamera], + westcameras: dict[str, LVMWestCamera], + focusers: dict[str, LVMFocuser], + kmirrors: dict[str, LVMKMirror], + tel: str): """ Find the optimal focus position which is near the current position. @@ -40,10 +54,10 @@ async def fine(command: Command, tel: str): The telescope to be focused """ position, fwhm = [], [] - incremental = 100 - repeat = 5 - exptime = 3 # noqa: F841 # in seconds + incremental = usrpars.af_incremental + repeat = usrpars.af_repeat + ''' # For test pwd = os.path.dirname(os.path.abspath(__file__)) agpwd = pwd + "/../../../../" @@ -61,17 +75,13 @@ async def fine(command: Command, tel: str): "testimg/focus_series/synthetic_image_median_field_5s_seeing_06.0.fits", # noqa: E501 ] guideimgidx = [0, 1, 2, 4] - + ''' # get current pos of focus stage - foc1 = LVMFocuser(tel) # noqa: F405 - cam1 = LVMCamera(tel + "e") # noqa: F405 - cam2 = LVMCamera(tel + "w") # noqa: F405, F841 - cam1 = LVMCamera("test") # noqa: F405, F841 # this is for lab test.. - - currentposition = await foc1.getposition(command) + currentposition = await focusers[tel].getposition(command) # Move focus """ + # For test reachablelow = await send_message(command, lvmtan, "isreachable %d" % (currentposition - (incremental * (repeat - 1)) / 2.0), returnval=True, # noqa: E501 body="Reachable") reachablehigh = await send_message(command, lvmtan, "isreachable %d" % (currentposition + (incremental * (repeat - 1)) / 2.0), # noqa: E501 @@ -80,7 +90,7 @@ async def fine(command: Command, tel: str): return command.fail(text="Target position is not reachable.") """ targetposition = currentposition - (incremental * (repeat - 1)) / 2.0 - movecmd = await foc1.moveabs(command, targetposition) + movecmd = await focusers[tel].moveabs(command, targetposition) if movecmd: currentposition = targetposition @@ -89,22 +99,25 @@ async def fine(command: Command, tel: str): return command.fail(text="Focus move failed") # Take picture - guideimg = GuideImage(guideimglist[3]) # noqa: F405 """ - try: - imgcmd = await cam1.single_exposure(command, tel, exptime) - except Exception as e: - return command.fail(fail='Camera error') + For test + guideimg = GuideImage(guideimglist[3]) # noqa: F405 """ + # Picture analysis - starposition = guideimg.findstars() - guideimg.update_guidestar_properties() - fwhm.append(guideimg.FWHM) + fwhm_tmp = await get_fwhm(command, + telescopes, + eastcameras, + westcameras, + focusers, + kmirrors, + tel) + fwhm.append(fwhm_tmp) for iteration in range(repeat - 1): targetposition = currentposition + incremental - movecmd = await foc1.moveabs(command, targetposition) + movecmd = await focusers[tel].moveabs(command, targetposition) if movecmd: currentposition = targetposition @@ -112,12 +125,53 @@ async def fine(command: Command, tel: str): else: return command.fail(text="Focus move failed") - guideimg = GuideImage(guideimglist[guideimgidx[iteration]]) # noqa: F405 - guideimg.guidestarposition = starposition - guideimg.update_guidestar_properties() - fwhm.append(guideimg.FWHM) + fwhm_tmp = await get_fwhm(command, + telescopes, + eastcameras, + westcameras, + focusers, + kmirrors, + tel, + starlist=starposition) + fwhm.append(fwhm_tmp) # Fitting - bestposition, bestfocus = findfocus(position, fwhm) # noqa: F405 - movecmd = await foc1.moveabs(command, bestposition) + bestposition, bestfocus = findfocus(position, fwhm) + movecmd = await focusers[tel].moveabs(command, bestposition) return command.finish(text="Auto-focus done") + + +async def get_fwhm(command: Command, + telescopes: dict[str, LVMTelescope], + eastcameras: dict[str, LVMEastCamera], + westcameras: dict[str, LVMWestCamera], + focusers: dict[str, LVMFocuser], + kmirrors: dict[str, LVMKMirror], + tel: str, + starlist=None): + """ + Take a testshot and return FWHM of the image. + + Parameters + ---------- + tel + The telescope to be focused + starlist + List of stars whose FWHMs will be measured + If ''starlist`` is None, this function finds star in the testshot. + """ + exptime = usrpars.af_exptime + + try: + imgcmd = await westcameras[tel].test_exposure(command, exptime) + except Exception as e: + return command.fail(fail='Camera error') + + guideimg = GuideImage(imgcmd) + if starlist is not None: + guideimg.guidestarposition = starlist + guideimg.update_guidestar_properties() + else: + guideimg.findstars() + + return guideimg.FWHM \ No newline at end of file diff --git a/python/lvmagp/actor/commands/guide.py b/python/lvmagp/actor/commands/guide.py index 7ec4b15..b154dea 100644 --- a/python/lvmagp/actor/commands/guide.py +++ b/python/lvmagp/actor/commands/guide.py @@ -137,6 +137,8 @@ async def calibration( if tel not in telescopes: return command.fail(text="Telescope '%s' does not exist" % tel) + decj2000_deg = await telescopes[tel].get_dec2000_deg(command) + xpositions, ypositions = [], [] initposition, initflux = await find_guide_stars( @@ -145,6 +147,8 @@ async def calibration( xpositions.append(initposition[:, 0]) ypositions.append(initposition[:, 1]) + await asyncio.sleep(3) + # dec axis calibration for step in range(1, num_step + 1): await telescopes[tel].offset_radec(command, 0, offset_per_step) @@ -163,14 +167,14 @@ async def calibration( await telescopes[tel].offset_radec(command, 0, -num_step * offset_per_step) - xpositions = np.array(xpositions) - xpositions[0] - ypositions = np.array(ypositions) - ypositions[0] + xoffsets = np.array(xpositions) - xpositions[0] + yoffsets = np.array(ypositions) - ypositions[0] xscale_dec = ( - np.sum(xpositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + np.average(xoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / offset_per_step ) # displacement along x-axis by ra offset in pixel per arcsec. exclude the first index (0,0) yscale_dec = ( - np.sum(ypositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + np.average(yoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / offset_per_step ) # exclude the first index (0,0) @@ -179,33 +183,30 @@ async def calibration( ypositions = [initposition[:, 1]] for step in range(1, num_step + 1): - await telescopes[tel].offset_radec(command, offset_per_step, 0) + await telescopes[tel].offset_radec(command, offset_per_step/np.cos(np.deg2rad(decj2000_deg)), 0) position, flux = await find_guide_stars( command, telescopes, eastcameras, westcameras, focusers, kmirrors, tel ) xpositions.append(position[:, 0]) ypositions.append(position[:, 1]) - await telescopes[tel].offset_radec(command, -num_step * offset_per_step, 0) + await telescopes[tel].offset_radec(command, -num_step * offset_per_step/np.cos(np.deg2rad(decj2000_deg)), 0) - decj2000_deg = await telescopes[tel].get_dec2000_deg(command) xpositions = np.array(xpositions) - xpositions[0] ypositions = np.array(ypositions) - ypositions[0] xscale_ra = ( np.sum(xpositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / - offset_per_step / - np.cos(np.deg2rad(decj2000_deg)) + offset_per_step ) # exclude the first index (0,0) yscale_ra = ( np.sum(ypositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / - offset_per_step / - np.cos(np.deg2rad(decj2000_deg)) + offset_per_step ) # exclude the first index (0,0) - telescopes[tel].scale_matrix = np.matrix( - [[xscale_ra, yscale_ra], [xscale_dec, yscale_dec]] - ) + telescopes[tel].scale_matrix = np.linalg.inv(np.array( + [[xscale_ra, xscale_dec], [yscale_ra, yscale_dec]] + )) # inverse matrix.. linear system of equations.. return command.finish( xscale_ra="%.3f pixel/arcsec" % xscale_ra, yscale_ra="%.3f pixel/arcsec" % yscale_ra, @@ -236,7 +237,7 @@ async def autoguide_supervisor( If ``useteldata`` is flagged, the sequence will use the pixel scale and rotation angle from LVMTelescope. Otherwise, the sequence will get pixel scale from LVMCamera, and - it assumes that the camera is north-oriented. + it assumes that the camera is north-oriented and both axes of mount are orthogonal. """ global KHU_inner_test if 0: @@ -362,7 +363,7 @@ async def find_guide_stars( ): """ Expose an image, and find three guide stars from the image. - Also calculate the center coordinates and flux of found stars. + Also calculate the center coordinates and fluxes of found stars. Parameters ---------- @@ -446,8 +447,7 @@ async def autoguiding( tel, positionguess=initposition, ) - print(starflux) - print(initflux) + if ( np.abs( np.average(starflux / initflux - 1, weights=2.5 * np.log10(initflux * 10)) @@ -466,28 +466,28 @@ async def autoguiding( offset = np.mean(starposition - initposition, axis=0) # in x,y [pixel] if useteldata: - offset_arcsec = np.matmul( - telescopes[tel].scale_matrix.I, offset + offset_arcsec = np.dot( + telescopes[tel].scale_matrix, offset ) # in x,y(=ra,dec) [arcsec] - offset_arcsec = np.array(offset_arcsec) + correction_arcsec = -np.array(offset_arcsec)[0] else: theta = np.radians(westcameras[tel].rotationangle) c, s = np.cos(theta), np.sin(theta) R = np.array(((c, -s), (s, c))) - offset_arcsec = ( + correction_arcsec = -( np.dot(R, offset) * westcameras[tel].pixelscale ) # in x,y(=ra,dec) [arcsec] decj2000_deg = await telescopes[tel].get_dec2000_deg(command) - offset_arcsec[0] = offset_arcsec[0] / np.cos(np.deg2rad(decj2000_deg)) + correction_arcsec[0] = correction_arcsec[0] / np.cos(np.deg2rad(decj2000_deg)) if (np.sqrt(offset[0] ** 2 + offset[1] ** 2)) > usrpars.ag_min_offset: print( - "compensate: ra %.2f arcsec dec %.2f arcsec x %.2f pixel y %.2f pixel" - % (offset_arcsec[0], offset_arcsec[1], offset[0], offset[1]) + "compensate signal: ra %.2f arcsec dec %.2f arcsec x %.2f pixel y %.2f pixel" + % (correction_arcsec[0], correction_arcsec[1], -offset[0], -offset[1]) ) - await telescopes[tel].offset_radec(command, *offset_arcsec) - return offset_arcsec + await telescopes[tel].offset_radec(command, *correction_arcsec) + return correction_arcsec else: return [0.0, 0.0] diff --git a/python/lvmagp/actor/commands/slew.py b/python/lvmagp/actor/commands/slew.py index c9f6824..41ca0c4 100644 --- a/python/lvmagp/actor/commands/slew.py +++ b/python/lvmagp/actor/commands/slew.py @@ -3,6 +3,8 @@ import click import numpy as np +from astropy import units as u +from astropy.coordinates import Angle from clu.command import Command from lvmagp.actor.commfunc import (LVMEastCamera, LVMFibsel, # noqa: F401 @@ -14,25 +16,6 @@ from . import parser -async def deg_to_dms(deg): - """ - Convert the number in degree unit into a tuple consists of degree, minutes, and seconds. - Degree and minutes is integer, and seconds is float. - - Parameters - ---------- - exptime - Exposure time - """ - absdeg = np.abs(deg) - d = np.floor(absdeg) - m = np.floor((absdeg - d) * 60) - s = (absdeg - d - m / 60) * 3600 - if deg < 0: - d = -d - return (d, m, s) - - @parser.command() @click.argument("TEL", type=str) @click.argument("TARGET_RA_H", type=float) @@ -141,17 +124,18 @@ async def slew( westcameras[tel].rotationangle = westguideimg.pa eastcameras[tel].rotationangle = eastguideimg.pa - ra2000_hms = await deg_to_dms(ra2000_d / 15) - dec2000_dms = await deg_to_dms(dec2000_d) + ra2000 = Angle(ra2000_d, u.degree) + dec2000 = Angle(dec2000_d, u.degree) + + target_ra = Angle(target_ra_h, u.hour) + target_dec = Angle(target_dec_d, u.degree) - comp_ra_arcsec = (target_ra_h * 15 - ra2000_d) * 3600 - comp_dec_arcsec = (target_dec_d - dec2000_d) * 3600 + comp_ra_arcsec = (target_ra - ra2000).s + comp_dec_arcsec = (target_dec - dec2000).s command.info( - Img_ra2000="%02dh %02dm %06.3fs" - % (ra2000_hms[0], ra2000_hms[1], ra2000_hms[2]), - Img_dec2000="%02dd %02dm %06.3fs" - % (dec2000_dms[0], dec2000_dms[1], dec2000_dms[2]), + Img_ra2000=ra2000.to_string(unit=u.hour), + Img_dec2000=dec2000.to_string(unit=u.degree), Img_pa="%.3f deg" % pa_d, offset_ra="%.3f arcsec" % comp_ra_arcsec, offset_dec="%.3f arcsec" % comp_dec_arcsec, diff --git a/python/lvmagp/actor/commands/test.py b/python/lvmagp/actor/commands/test.py index 21c9a2e..f19a631 100644 --- a/python/lvmagp/actor/commands/test.py +++ b/python/lvmagp/actor/commands/test.py @@ -5,8 +5,13 @@ LVMTelescope, LVMWestCamera) from lvmagp.actor.internalfunc import GuideImage from lvmagp.actor.user_parameters import usrpars # noqa: F401 +import numpy as np +#from . import parser -from . import parser +import sys +import uuid +from cluplus.proxy import Proxy, ProxyPartialInvokeException, invoke, unpack +from clu import AMQPClient, CommandStatus # import logging @@ -19,7 +24,7 @@ # log.sh.setLevel(logging.DEBUG) -@parser.command() +#@parser.command() # @click.argument("TEL", type=str) async def test( command: Command, @@ -30,17 +35,120 @@ async def test( kmirrors: dict[str, LVMKMirror], ): + ''' + try: + amqpc = AMQPClient(name=f"{sys.argv[0]}.proxy-{uuid.uuid4().hex[:8]}") + await amqpc.start() + tcs = Proxy(amqpc, 'lvm.sci.foc') + await tcs.start() + except Exception as e: + amqpc.log.error(f"Exception: {e}") + + try: + # sequential + result = await tcs.ping() + #await tcs.ping() + + # parallel + #await invoke( + # lvm_sci_pwi.ping(), + # lvm_sci_foc.ping() + #) + + except Exception as e: + amqpc.log.error(f"Exception: {e}") + + #result = await tcs.ping() + command.finish(result["text"]) + ''' filepath = \ - "/home/sumin/lvmcam/python/lvmcam/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000107.fits" + "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000170.fits" guideimg1 = GuideImage(filepath) filepath = \ - "/home/sumin/lvmcam/python/lvmcam/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000110.fits" + "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000170.fits" guideimg2 = GuideImage(filepath) + pos = guideimg1.findstars() - print(pos) + print(pos, guideimg1.guidestarflux) guideimg2.guidestarposition = pos guideimg2.update_guidestar_properties() starposition = guideimg2.guidestarposition - print(starposition) + print(starposition, guideimg2.guidestarflux) + + +def test1(): + filepath = \ + "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000170.fits" + guideimg1 = GuideImage(filepath) + + filepath = \ + "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000172.fits" + guideimg2 = GuideImage(filepath) + + global KHU_inner_test + offset_per_step = usrpars.ag_cal_offset_per_step + num_step = usrpars.ag_cal_num_step + + decj2000_deg = 60.0 + + xpositions, ypositions = [], [] + + xpositions = [[100, 500, 1200]] + ypositions = [[40, 150, 700]] + + # dec axis calibration + xpositions = [[100, 500, 1200], [101.1, 501.0, 1201.2], [102.1, 502.1, 1202.3], [103.2, 503.5, 1203.1]] + ypositions = [[40, 150, 700], [42.2, 152.0, 701.9], [44.0, 153.8, 703.8], [45.9, 155.9, 706.3]] + + xpositions = np.array(xpositions) - xpositions[0] + ypositions = np.array(ypositions) - ypositions[0] + xscale_dec = ( + np.average(xpositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + offset_per_step + ) # displacement along x-axis by ra offset in pixel per arcsec. exclude the first index (0,0) + yscale_dec = ( + np.average(ypositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + offset_per_step + ) # exclude the first index (0,0) + + # ra axis calibration + xpositions = [[100, 500, 1200]] + ypositions = [[40, 150, 700]] + + xpositions = [[100, 500, 1200], [102.2, 502.0, 1201.9], [104.0, 503.8, 1203.8], [105.9, 505.9, 1206.3]] + ypositions = [[40, 150, 700], [38.9, 148.8, 699.1], [38.0, 147.7, 698.1], [37.1, 147.1, 696.9]] + + xpositions = np.array(xpositions) - xpositions[0] + ypositions = np.array(ypositions) - ypositions[0] + xscale_ra = ( + np.average(xpositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + offset_per_step + ) # exclude the first index (0,0) + yscale_ra = ( + np.average(ypositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + offset_per_step + ) # exclude the first index (0,0) + + #scale_matrix = np.linalg.inv(np.array( + # [[xscale_ra, xscale_dec], [yscale_ra, yscale_dec]] + #)) + scale_matrix = np.linalg.inv(np.array( + [[0.2, 0.4], [0.4, -0.2]] + )) + + offset = np.array([0.4, 0.2]) + offset_arcsec = np.dot( + scale_matrix, offset + ) # in x,y(=ra,dec) [arcsec] + correction_arcsec = -np.array(offset_arcsec)[0] + + return scale_matrix, offset_arcsec + + + +if (__name__ == "__main__"): + scale_matrix, offset_arcsec = test1() + print(scale_matrix) + print (offset_arcsec) \ No newline at end of file diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index c3ccde4..650a7ee 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -159,9 +159,9 @@ def __init__(self, tel, sitename="LCO"): self.latitude = site.lat self.longitude = site.long - self.scale_matrix = np.matrix( - [[1, 1], [1, 1]] # [x_ra , y_ra ] - ) # [x_dec, y_dec] + self.scale_matrix = np.array( + [[0, 0], [0, 0]] + ) # (ra, dec) = (scale_matrix)*(x, y) self.ag_task = None self.ag_break = False diff --git a/python/lvmagp/actor/internalfunc.py b/python/lvmagp/actor/internalfunc.py index 86286cf..651e495 100644 --- a/python/lvmagp/actor/internalfunc.py +++ b/python/lvmagp/actor/internalfunc.py @@ -51,10 +51,13 @@ def findstars(self, nstar=3): nstar The number of stars to be found """ + edgewidth = 20 + mask = np.ones(self.data.shape, dtype=bool) + mask[edgewidth:-edgewidth, edgewidth:-edgewidth] = False daofind = DAOStarFinder( fwhm=self.initFWHM, threshold=3.0 * self.std, peakmax=60000 - self.median ) # 1sigma = FWHM/(2*sqrt(2ln2)); FWHM = sigma * (2*sqrt(2ln2)) - sources = daofind(self.data[10:-10, 10:-10] - self.median) + sources = daofind(self.data - self.median, mask=mask) posnflux = np.array( [sources["xcentroid"], sources["ycentroid"], sources["flux"]] ) # xcoord, ycoord, flux @@ -91,13 +94,13 @@ def twoDgaussianfit(self): """ Conduct 2D Gaussian fitting to find center, flux of stars in ``self.guidestarposition``. """ - windowradius = 10 # only integer + windowradius = 5 # only integer plist = [] for i in range(len(self.guidestarposition[:, 0])): xcenter = int(self.guidestarposition[i, 0]) ycenter = int(self.guidestarposition[i, 1]) - p_init = models.Gaussian2D(amplitude=10000, x_mean=xcenter, y_mean=ycenter) + p_init = models.Gaussian2D(amplitude=30000, x_mean=xcenter, y_mean=ycenter) fit_p = fitting.LevMarLSQFitter() xrange = np.arange(xcenter - windowradius, xcenter + windowradius) yrange = np.arange(ycenter - windowradius, ycenter + windowradius) diff --git a/python/lvmagp/actor/user_parameters.py b/python/lvmagp/actor/user_parameters.py index 6629460..845829f 100644 --- a/python/lvmagp/actor/user_parameters.py +++ b/python/lvmagp/actor/user_parameters.py @@ -1,5 +1,8 @@ class usrpars: # autofocus parameters + af_incremental = 100 # step size for each movement + af_repeat = 5 # the number of steps + af_exptime = 3 # in seconds # acquisition parameters aqu_exptime = 5 # exposure time for acquisition in seconds @@ -11,9 +14,7 @@ class usrpars: ag_halfboxsize = 15 # 1/2 of box in pixel # ag_minsnr = 6 ag_min_offset = 0.3 # minimum offset to do correction in pixel - ag_flux_tolerance = ( - 0.3 # maximum variability of flux due to seeing to identify the guide star - ) + ag_flux_tolerance = 0.3 # maximum variability of flux due to seeing to identify the guide star - ag_cal_offset_per_step = 3.0 # Step size for calibration in arcseconds + ag_cal_offset_per_step = 5.0 # Step size for calibration in arcseconds ag_cal_num_step = 3 # number of steps of calibration per axis From ce6f9f25343734534d47b7b2d1b8a63e8f96ef20 Mon Sep 17 00:00:00 2001 From: mgjeon Date: Wed, 22 Dec 2021 04:17:41 +0900 Subject: [PATCH 02/17] v0.2.3a debug guide command -observatory --- .idea/lvmagp.iml | 2 +- .idea/misc.xml | 2 +- poetry.lock | 364 ++++++++++++++++++++-- pyproject.toml | 1 + python/lvmagp/actor/astrometry_result.txt | 22 +- python/lvmagp/actor/commands/guide.py | 31 +- python/lvmagp/actor/commands/slew.py | 4 +- python/lvmagp/actor/commfunc.py | 9 +- python/lvmagp/actor/internalfunc.py | 4 +- python/lvmagp/etc/lvmagp.yml | 2 +- 10 files changed, 379 insertions(+), 62 deletions(-) diff --git a/.idea/lvmagp.iml b/.idea/lvmagp.iml index 081e1d5..aa24706 100644 --- a/.idea/lvmagp.iml +++ b/.idea/lvmagp.iml @@ -4,7 +4,7 @@ - + diff --git a/.idea/misc.xml b/.idea/misc.xml index 4bdaaea..6b89373 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index d3fe76f..68babe2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,3 +1,33 @@ +[[package]] +name = "aio-pika" +version = "6.8.0" +description = "Wrapper for the aiormq for asyncio and humans." +category = "main" +optional = false +python-versions = ">3.5.*, <4" + +[package.dependencies] +aiormq = ">=3.2.3,<4" +yarl = "*" + +[package.extras] +develop = ["aiomisc (>=10.1.6,<10.2.0)", "async-generator", "coverage (!=4.3)", "coveralls", "pylava", "pytest", "pytest-cov", "shortuuid", "nox", "sphinx", "sphinx-autobuild", "timeout-decorator", "tox (>=2.4)"] + +[[package]] +name = "aiormq" +version = "3.3.1" +description = "Pure python AMQP asynchronous client library" +category = "main" +optional = false +python-versions = ">3.5.*" + +[package.dependencies] +pamqp = "2.3.0" +yarl = "*" + +[package.extras] +develop = ["aiomisc (>=11.0,<12.0)", "async-generator", "coverage (!=4.3)", "coveralls", "pylava", "pytest", "pytest-cov", "tox (>=2.4)"] + [[package]] name = "alabaster" version = "0.7.12" @@ -44,7 +74,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" name = "attrs" version = "21.2.0" description = "Classes Without Boilerplate" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -89,10 +119,7 @@ platformdirs = ">=2" regex = ">=2021.4.4" tomli = ">=0.2.6,<2.0.0" typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] +typing-extensions = ">=3.10.0.0" [package.extras] colorama = ["colorama (>=0.4.3)"] @@ -336,7 +363,6 @@ python-versions = ">=2.7" [package.dependencies] decorator = {version = "*", markers = "python_version > \"3.6\""} ipython = {version = ">=7.17.0", markers = "python_version > \"3.6\""} -setuptools = "*" toml = {version = ">=0.10.2", markers = "python_version > \"3.6\""} [[package]] @@ -358,7 +384,6 @@ pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" pygments = "*" -setuptools = ">=18.5" traitlets = ">=4.2" [package.extras] @@ -415,6 +440,32 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jsonpickle" +version = "1.3" +description = "Python library for serializing any arbitrary object graph into JSON" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "jsonschema" +version = "3.2.0" +description = "An implementation of JSON Schema validation for Python" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +attrs = ">=17.4.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +pyrsistent = ">=0.14.0" +six = ">=1.11.0" + +[package.extras] +format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] +format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] + [[package]] name = "kiwisolver" version = "1.3.2" @@ -469,6 +520,14 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "multidict" +version = "5.2.0" +description = "multidict implementation" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "mypy-extensions" version = "0.4.3" @@ -496,6 +555,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] pyparsing = ">=2.0.2" +[[package]] +name = "pamqp" +version = "2.3.0" +description = "RabbitMQ Focused AMQP low-level library" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +codegen = ["lxml"] + [[package]] name = "parso" version = "0.8.3" @@ -599,7 +669,7 @@ testing = ["pytest", "pytest-benchmark"] name = "prompt-toolkit" version = "3.0.23" description = "Library for building powerful interactive command lines in Python" -category = "dev" +category = "main" optional = false python-versions = ">=3.6.2" @@ -683,6 +753,14 @@ python-versions = ">=3.6" [package.extras] diagrams = ["jinja2", "railroad-diagrams"] +[[package]] +name = "pyrsistent" +version = "0.18.0" +description = "Persistent/Functional/Immutable data structures" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "pytest" version = "6.2.5" @@ -855,6 +933,39 @@ tqdm = ">=4.46.0" dev = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)", "ipython (>=7.9.0)", "matplotlib (>=3.1.1)", "flake8 (>=3.7.9)", "doc8 (>=0.8.0)", "pytest (>=5.2.2)", "pytest-cov (>=2.8.1)", "pytest-mock (>=1.13.0)", "pytest-sugar (>=0.9.2)", "isort (>=4.3.21)", "codecov (>=2.0.15)", "coverage[toml] (>=5.0)", "coveralls (>=1.7)", "ipdb (>=0.12.3)", "sdsstools[dev] (>=0.4.0)", "invoke (>=1.3.0)", "twine (>=3.1.1)", "wheel (>=0.33.6)"] docs = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)"] +[[package]] +name = "sdss-clu" +version = "1.5.5" +description = "A new protocol for SDSS actors." +category = "main" +optional = false +python-versions = ">=3.7,<4.0" + +[package.dependencies] +aio_pika = ">=6.4.1,<7.0.0" +aiormq = ">=3.2.0,<4.0.0" +click = ">=8.0,<9.0" +jsonschema = ">=3.0.1,<4.0.0" +prompt_toolkit = ">=3.0.6,<4.0.0" +sdsstools = ">=0.4.13,<0.5.0" + +[[package]] +name = "sdss-cluplus" +version = "0.0.16" +description = "Additional functionality for sdss-clu" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" + +[package.dependencies] +click-default-group = ">=1.2.2,<2.0.0" +daemonocle = ">=1.1.1,<2.0.0" +jsonpickle = "1.3" +sdss-access = ">=0.2.3" +sdss-clu = ">=1.2.0" +sdss-tree = ">=2.15.2" +sdsstools = ">=0.4.0" + [[package]] name = "sdss-tree" version = "3.1.0" @@ -883,7 +994,6 @@ python-versions = ">=3.6,<4.0" [package.dependencies] daemonocle = ">=1.0.2,<2.0.0" docutils = ">=0.16,<0.17" -importlib_metadata = {version = "*", markers = "python_version <= \"3.7\""} invoke = ">=1.3.0,<2.0.0" packaging = ">=20.4,<21.0" pygments = ">=2.5.2,<3.0.0" @@ -899,18 +1009,6 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[[package]] -name = "setuptools" -version = "59.4.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs", "sphinxcontrib-towncrier", "furo"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs (>=2.2)", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] - [[package]] name = "setuptools-scm" version = "6.3.2" @@ -921,7 +1019,6 @@ python-versions = ">=3.6" [package.dependencies] packaging = ">=20.0" -setuptools = "*" tomli = ">=1.0.0" [package.extras] @@ -961,7 +1058,6 @@ Jinja2 = ">=2.3" packaging = "*" Pygments = ">=2.0" requests = ">=2.5.0" -setuptools = "*" snowballstemmer = ">=1.1" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" @@ -1142,10 +1238,23 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "wcwidth" version = "0.2.5" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" +category = "main" optional = false python-versions = "*" +[[package]] +name = "yarl" +version = "1.7.2" +description = "Yet another URL library" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" +typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} + [[package]] name = "zipp" version = "3.6.0" @@ -1160,10 +1269,18 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [metadata] lock-version = "1.1" -python-versions = "^3.7" -content-hash = "a302b2f2db11f5c79194d902a636062cc1bfd803d7eb25939f8b9406b596ac2d" +python-versions = ">3.7, <3.10" +content-hash = "7be3affd459b0a3a6fcadacc13c7bef0110401fce866cc88e910a0816d7c2f04" [metadata.files] +aio-pika = [ + {file = "aio-pika-6.8.0.tar.gz", hash = "sha256:1d4305a5f78af3857310b4fe48348cdcf6c097e0e275ea88c2cd08570531a369"}, + {file = "aio_pika-6.8.0-py3-none-any.whl", hash = "sha256:e69afef8695f47c5d107bbdba21bdb845d5c249acb3be53ef5c2d497b02657c0"}, +] +aiormq = [ + {file = "aiormq-3.3.1-py3-none-any.whl", hash = "sha256:e584dac13a242589aaf42470fd3006cb0dc5aed6506cbd20357c7ec8bbe4a89e"}, + {file = "aiormq-3.3.1.tar.gz", hash = "sha256:8218dd9f7198d6e7935855468326bbacf0089f926c70baa8dd92944cb2496573"}, +] alabaster = [ {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, @@ -1354,6 +1471,14 @@ jinja2 = [ {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, ] +jsonpickle = [ + {file = "jsonpickle-1.3-py2.py3-none-any.whl", hash = "sha256:efc6839cb341985f0c24f98650a4c1063a2877c236ffd3d7e1662f0c482bac93"}, + {file = "jsonpickle-1.3.tar.gz", hash = "sha256:71bca2b80ae28af4e3f86629ef247100af7f97032b5ca8d791c1f8725b411d95"}, +] +jsonschema = [ + {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, + {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, +] kiwisolver = [ {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1d819553730d3c2724582124aee8a03c846ec4362ded1034c16fb3ef309264e6"}, {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d93a1095f83e908fc253f2fb569c2711414c0bfd451cab580466465b235b470"}, @@ -1481,6 +1606,80 @@ mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] +multidict = [ + {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"}, + {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"}, + {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"}, + {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"}, + {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"}, + {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"}, + {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"}, + {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"}, + {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"}, + {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"}, + {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"}, + {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"}, + {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"}, + {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"}, + {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"}, + {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"}, + {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"}, + {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"}, + {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"}, + {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"}, + {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"}, + {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"}, + {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"}, + {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"}, + {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"}, + {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"}, + {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"}, + {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"}, + {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"}, + {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"}, + {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"}, + {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"}, + {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"}, + {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"}, + {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"}, + {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"}, + {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"}, + {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"}, + {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"}, + {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"}, + {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"}, + {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"}, + {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"}, + {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"}, + {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"}, + {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"}, + {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"}, + {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"}, + {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"}, + {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"}, + {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"}, + {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"}, + {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"}, + {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"}, + {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"}, + {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"}, + {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"}, + {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"}, + {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"}, + {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"}, + {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"}, + {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"}, + {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"}, + {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"}, + {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"}, + {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"}, + {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"}, + {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"}, + {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"}, + {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"}, + {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"}, + {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"}, +] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, @@ -1519,6 +1718,10 @@ packaging = [ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, ] +pamqp = [ + {file = "pamqp-2.3.0-py2.py3-none-any.whl", hash = "sha256:2f81b5c186f668a67f165193925b6bfd83db4363a6222f599517f29ecee60b02"}, + {file = "pamqp-2.3.0.tar.gz", hash = "sha256:5cd0f5a85e89f20d5f8e19285a1507788031cfca4a9ea6f067e3cf18f5e294e8"}, +] parso = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, @@ -1699,6 +1902,29 @@ pyparsing = [ {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, ] +pyrsistent = [ + {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"}, + {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"}, + {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"}, + {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"}, + {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"}, + {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"}, + {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"}, + {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"}, + {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"}, + {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"}, + {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"}, + {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"}, + {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"}, + {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"}, +] pytest = [ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, @@ -1851,6 +2077,14 @@ sdss-access = [ {file = "sdss-access-2.0.0.tar.gz", hash = "sha256:7218c454cc6511ef613044ba514a302f55c032e771e3830dc30ee264587cf1b7"}, {file = "sdss_access-2.0.0-py2.py3-none-any.whl", hash = "sha256:ef1f90a29fb42d8eeb0f16c28ed8680d0879d2e70a88690ec2ec78b52f436004"}, ] +sdss-clu = [ + {file = "sdss-clu-1.5.5.tar.gz", hash = "sha256:21a5e164ed45fd210b5d33bd645ead1887596646c9b208f828ba1f962f70123d"}, + {file = "sdss_clu-1.5.5-py3-none-any.whl", hash = "sha256:a078c9771259b025c59375806026db20f56a86af0b5f62fb681ce31f21aa45ff"}, +] +sdss-cluplus = [ + {file = "sdss-cluplus-0.0.16.tar.gz", hash = "sha256:93400bd4a2f4ce0118c0cdfbbbedec98aa863ffac2d9b60d70976af003df05b9"}, + {file = "sdss_cluplus-0.0.16-py3-none-any.whl", hash = "sha256:ec9b90be448147359dec1ffc8b69625b12c699d362a10206a705b83a50936e08"}, +] sdss-tree = [ {file = "sdss-tree-3.1.0.tar.gz", hash = "sha256:801b7eb89643322fbacdc4cb392a3c199474af1ea204373058764e5f5c62fd4b"}, {file = "sdss_tree-3.1.0-py2.py3-none-any.whl", hash = "sha256:1ca03840b0c83f49f6130ceef7a0e6ede0f5fd0401b63923e77ade3a3b6a8080"}, @@ -1863,10 +2097,6 @@ semantic-version = [ {file = "semantic_version-2.8.5-py2.py3-none-any.whl", hash = "sha256:45e4b32ee9d6d70ba5f440ec8cc5221074c7f4b0e8918bdab748cc37912440a9"}, {file = "semantic_version-2.8.5.tar.gz", hash = "sha256:d2cb2de0558762934679b9a104e82eca7af448c9f4974d1f3eeccff651df8a54"}, ] -setuptools = [ - {file = "setuptools-59.4.0-py3-none-any.whl", hash = "sha256:feb5ff19b354cde9efd2344ef6d5e79880ce4be643037641b49508bbb850d060"}, - {file = "setuptools-59.4.0.tar.gz", hash = "sha256:b4c634615a0cf5b02cf83c7bedffc8da0ca439f00e79452699454da6fbd4153d"}, -] setuptools-scm = [ {file = "setuptools_scm-6.3.2-py3-none-any.whl", hash = "sha256:4c64444b1d49c4063ae60bfe1680f611c8b13833d556fd1d6050c0023162a119"}, {file = "setuptools_scm-6.3.2.tar.gz", hash = "sha256:a49aa8081eeb3514eb9728fa5040f2eaa962d6c6f4ec9c32f6c1fba88f88a0f2"}, @@ -1963,6 +2193,80 @@ wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] +yarl = [ + {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"}, + {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"}, + {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"}, + {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"}, + {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"}, + {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"}, + {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"}, + {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"}, + {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"}, + {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"}, + {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"}, + {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"}, + {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"}, + {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"}, + {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"}, + {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"}, + {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"}, + {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"}, + {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"}, + {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"}, + {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"}, + {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"}, +] zipp = [ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, diff --git a/pyproject.toml b/pyproject.toml index b03f1f0..4f73e0f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,7 @@ click = "^8.0.1" photutils = "^1.1.0" numpy = "^1.21.1" black = "^21.7-beta.0" +sdss-cluplus = "^0.0.16" [tool.poetry.dev-dependencies] ipython = ">=7.11.0" diff --git a/python/lvmagp/actor/astrometry_result.txt b/python/lvmagp/actor/astrometry_result.txt index ab1f8c8..35ce3c2 100644 --- a/python/lvmagp/actor/astrometry_result.txt +++ b/python/lvmagp/actor/astrometry_result.txt @@ -2,25 +2,23 @@ Reading input file 1 of 1: "/home/sumin/lvmcam/python/lvmcam/assets/testshot.fit Extracting sources... This looks like a multi-color image: processing the first image plane only. (NAXIS=3) Downsampling by 2... -simplexy: found 663 sources. +simplexy: found 611 sources. Solving... Reading file "/home/sumin/lvmcam/python/lvmcam/assets/testshot.axy"... -Only searching for solutions within 1 degrees of RA,Dec (92.25,24.33) +Only searching for solutions within 3 degrees of RA,Dec (105,0) Field 1 did not solve (index index-4211.fits, field objects 1-10). Field 1 did not solve (index index-4210.fits, field objects 1-10). Field 1 did not solve (index index-4209.fits, field objects 1-10). -Field 1 did not solve (index index-4208.fits, field objects 1-10). -Field 1 did not solve (index index-4207-05.fits, field objects 1-10). - log-odds ratio 574.743 (4.05134e+249), 117 match, 0 conflict, 311 distractors, 137 index. - RA,Dec = (92.2496,24.3312), pixel scale 2.59625 arcsec/pix. - Hit/miss: Hit/miss: +++++++++-+++++++++++++++-+++-+--+++-++++++-+-++-+-++-+-+-++-+-++-++---++--++-+++-++-++++-+++-++-+-- -Field 1: solved with index index-4206-05.fits. + log-odds ratio 150.194 (1.69249e+65), 27 match, 0 conflict, 194 distractors, 33 index. + RA,Dec = (105,0.00107933), pixel scale 2.5971 arcsec/pix. + Hit/miss: Hit/miss: +++++--++++-++--++-------++------------+-+-+-------------------+-++-------------------+------------- +Field 1: solved with index index-4208.fits. Field 1 solved: writing to file /home/sumin/lvmcam/python/lvmcam/assets/testshot.solved to indicate this. Field: /home/sumin/lvmcam/python/lvmcam/assets/testshot.fits -Field center: (RA,Dec) = (92.250015, 24.331394) deg. -Field center: (RA H:M:S, Dec D:M:S) = (06:09:00.004, +24:19:53.018). -Field size: 69.2532 x 47.6139 arcminutes -Field rotation angle: up is 99.4551 degrees E of N +Field center: (RA,Dec) = (105.000696, 0.001028) deg. +Field center: (RA H:M:S, Dec D:M:S) = (07:00:00.167, +00:00:03.702). +Field size: 69.2444 x 47.6004 arcminutes +Field rotation angle: up is 143.535 degrees E of N Field parity: pos Creating new FITS file "/home/sumin/lvmcam/python/lvmcam/assets/testshot.new"... diff --git a/python/lvmagp/actor/commands/guide.py b/python/lvmagp/actor/commands/guide.py index b154dea..580df57 100644 --- a/python/lvmagp/actor/commands/guide.py +++ b/python/lvmagp/actor/commands/guide.py @@ -169,6 +169,12 @@ async def calibration( xoffsets = np.array(xpositions) - xpositions[0] yoffsets = np.array(ypositions) - ypositions[0] + + print(xpositions) + print(xoffsets) + print(ypositions) + print(yoffsets) + xscale_dec = ( np.average(xoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / offset_per_step @@ -185,22 +191,27 @@ async def calibration( for step in range(1, num_step + 1): await telescopes[tel].offset_radec(command, offset_per_step/np.cos(np.deg2rad(decj2000_deg)), 0) position, flux = await find_guide_stars( - command, telescopes, eastcameras, westcameras, focusers, kmirrors, tel + command, telescopes, eastcameras, westcameras, focusers, kmirrors, tel, positionguess=initposition ) xpositions.append(position[:, 0]) ypositions.append(position[:, 1]) await telescopes[tel].offset_radec(command, -num_step * offset_per_step/np.cos(np.deg2rad(decj2000_deg)), 0) + xoffsets = np.array(xpositions) - xpositions[0] + yoffsets = np.array(ypositions) - ypositions[0] + + print(xpositions) + print(xoffsets) + print(ypositions) + print(yoffsets) - xpositions = np.array(xpositions) - xpositions[0] - ypositions = np.array(ypositions) - ypositions[0] xscale_ra = ( - np.sum(xpositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + np.sum(xoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / offset_per_step ) # exclude the first index (0,0) yscale_ra = ( - np.sum(ypositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + np.sum(yoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / offset_per_step ) # exclude the first index (0,0) @@ -469,20 +480,22 @@ async def autoguiding( offset_arcsec = np.dot( telescopes[tel].scale_matrix, offset ) # in x,y(=ra,dec) [arcsec] - correction_arcsec = -np.array(offset_arcsec)[0] + correction_arcsec = -np.array(offset_arcsec) + else: theta = np.radians(westcameras[tel].rotationangle) c, s = np.cos(theta), np.sin(theta) - R = np.array(((c, -s), (s, c))) + R = np.array(((c, -s), (s, c))) # inverse rotation matrix correction_arcsec = -( np.dot(R, offset) * westcameras[tel].pixelscale ) # in x,y(=ra,dec) [arcsec] decj2000_deg = await telescopes[tel].get_dec2000_deg(command) - correction_arcsec[0] = correction_arcsec[0] / np.cos(np.deg2rad(decj2000_deg)) + correction_arcsec[0] /= np.cos(np.deg2rad(decj2000_deg)) + correction_arcsec[1] *= -1 if (np.sqrt(offset[0] ** 2 + offset[1] ** 2)) > usrpars.ag_min_offset: - print( + command.info( "compensate signal: ra %.2f arcsec dec %.2f arcsec x %.2f pixel y %.2f pixel" % (correction_arcsec[0], correction_arcsec[1], -offset[0], -offset[1]) ) diff --git a/python/lvmagp/actor/commands/slew.py b/python/lvmagp/actor/commands/slew.py index 41ca0c4..e424117 100644 --- a/python/lvmagp/actor/commands/slew.py +++ b/python/lvmagp/actor/commands/slew.py @@ -130,8 +130,8 @@ async def slew( target_ra = Angle(target_ra_h, u.hour) target_dec = Angle(target_dec_d, u.degree) - comp_ra_arcsec = (target_ra - ra2000).s - comp_dec_arcsec = (target_dec - dec2000).s + comp_ra_arcsec = (target_ra - ra2000).arcsecond + comp_dec_arcsec = (target_dec - dec2000).arcsecond command.info( Img_ra2000=ra2000.to_string(unit=u.hour), diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index 650a7ee..5a1fed5 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -203,10 +203,11 @@ async def offset_radec(self, command, ra_arcsec, dec_arcsec): Distance to move along declination axis in arcseconds """ await send_message( - command, self.lvmpwi, "offset --ra_add_arcsec %f" % ra_arcsec + command, self.lvmpwi, "offset --dec_add_arcsec %f" % dec_arcsec ) + await send_message( - command, self.lvmpwi, "offset --dec_add_arcsec %f" % dec_arcsec + command, self.lvmpwi, "offset --ra_add_arcsec %f" % ra_arcsec ) return True @@ -228,8 +229,8 @@ class LVMCamera: """ def __init__(self): - self.lvmcam = "lvmcam" - self.cam = "lvmcam" + self.lvmcam = "lvmcam" # actor name + self.cam = "lvmcam" # cam name self.offset_x = -999 self.offset_y = -999 self.pixelscale = -999 diff --git a/python/lvmagp/actor/internalfunc.py b/python/lvmagp/actor/internalfunc.py index 651e495..b4e85fe 100644 --- a/python/lvmagp/actor/internalfunc.py +++ b/python/lvmagp/actor/internalfunc.py @@ -94,7 +94,7 @@ def twoDgaussianfit(self): """ Conduct 2D Gaussian fitting to find center, flux of stars in ``self.guidestarposition``. """ - windowradius = 5 # only integer + windowradius = 10 # only integer plist = [] for i in range(len(self.guidestarposition[:, 0])): @@ -163,7 +163,7 @@ async def astrometry(self, ra_h=-999, dec_d=-999): timeout = 10 scalelow = 2 scalehigh = 3 - radius = 1 + radius = 3 if ra_h == -999: cmd = ( diff --git a/python/lvmagp/etc/lvmagp.yml b/python/lvmagp/etc/lvmagp.yml index 844cced..f8d2bf3 100644 --- a/python/lvmagp/etc/lvmagp.yml +++ b/python/lvmagp/etc/lvmagp.yml @@ -11,7 +11,7 @@ sci: pixelscale: 2.60 offset_x: 0.0 offset_y: 0.0 - rotationangle: 100.0 + rotationangle: 140.0 foc: varA: null km: From a20aedc110884368d2a6fcb0e5ce906947f52ee9 Mon Sep 17 00:00:00 2001 From: Hojae Ahn Date: Tue, 11 Jan 2022 16:27:58 +0900 Subject: [PATCH 03/17] v.0.2.5a guide lab debug --- .idea/dataSources.xml | 12 + .idea/misc.xml | 2 +- poetry.lock | 6 +- python/lvmagp/actor/actor.py | 18 +- python/lvmagp/actor/commands/__init__.py | 3 +- python/lvmagp/actor/commands/autofocus.py | 132 ++---- python/lvmagp/actor/commands/cam.py | 2 +- python/lvmagp/actor/commands/focus.py | 19 +- python/lvmagp/actor/commands/guide.py | 177 +++----- python/lvmagp/actor/commands/slew.py | 45 +- python/lvmagp/actor/commands/system.py | 2 +- python/lvmagp/actor/commands/tel.py | 2 +- python/lvmagp/actor/commands/test.py | 154 ------- python/lvmagp/actor/commfunc.py | 502 +++++++++++++++++----- python/lvmagp/actor/internalfunc.py | 1 + python/lvmagp/actor/user_parameters.py | 18 +- python/lvmagp/exceptions.py | 63 +++ 17 files changed, 593 insertions(+), 565 deletions(-) create mode 100644 .idea/dataSources.xml diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..cf7569e --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,12 @@ + + + + + sqlite.xerial + true + org.sqlite.JDBC + jdbc:sqlite:$PROJECT_DIR$/python/lvmagp/actor/commands/.coverage + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 6b89373..4bdaaea 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 68babe2..099d988 100644 --- a/poetry.lock +++ b/poetry.lock @@ -4,7 +4,7 @@ version = "6.8.0" description = "Wrapper for the aiormq for asyncio and humans." category = "main" optional = false -python-versions = ">3.5.*, <4" +python-versions = ">3.5, <4" [package.dependencies] aiormq = ">=3.2.3,<4" @@ -19,7 +19,7 @@ version = "3.3.1" description = "Pure python AMQP asynchronous client library" category = "main" optional = false -python-versions = ">3.5.*" +python-versions = ">3.5" [package.dependencies] pamqp = "2.3.0" @@ -880,7 +880,7 @@ version = "2.26.0" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5" [package.dependencies] certifi = ">=2017.4.17" diff --git a/python/lvmagp/actor/actor.py b/python/lvmagp/actor/actor.py index 9c8d826..0c41970 100644 --- a/python/lvmagp/actor/actor.py +++ b/python/lvmagp/actor/actor.py @@ -2,11 +2,16 @@ from clu.actor import AMQPActor -from lvmagp.actor.commfunc import (LVMEastCamera, LVMFibsel, # noqa: F401 - LVMFocuser, LVMKMirror, LVMTANInstrument, - LVMTelescope, LVMWestCamera) +from lvmagp.actor.commfunc import ( + LVMEastCamera, # noqa: F401 + LVMFibselector, + LVMFocuser, + LVMKMirror, + LVMTelescope, + LVMWestCamera, +) -from .commands import parser as lvm_command_python +from .commands import command_parser as lvm_command_python # from scpactor import __version__ @@ -31,6 +36,7 @@ def __init__( westcameras: tuple[LVMEastCamera, ...] = (), focusers: tuple[LVMFocuser, ...] = (), kmirrors: tuple[LVMKMirror, ...] = (), + fiberselectors: tuple[LVMFibselector, ...] = (), **kwargs, ): super().__init__(*args, **kwargs) @@ -58,6 +64,7 @@ def __init__( self.westcameras = {s.name: s for s in westcameras} self.focusers = {s.name: s for s in focusers} self.kmirrors = {s.name: s for s in kmirrors} + self.fibserselctors = {s.name: s for s in fiberselectors} @classmethod def from_config(cls, config, *args, **kwargs): @@ -90,6 +97,8 @@ def from_config(cls, config, *args, **kwargs): instance.kmirrors.update({ctrname: LVMKMirror(ctrname)}) + instance.fibserselctors.update({ctrname: LVMFibselector(ctrname)}) + # print(ctrname,ctr) # print(instance.telescopes) @@ -100,5 +109,6 @@ def from_config(cls, config, *args, **kwargs): instance.westcameras, instance.focusers, instance.kmirrors, + instance.fibserselctors ] return instance diff --git a/python/lvmagp/actor/commands/__init__.py b/python/lvmagp/actor/commands/__init__.py index a2e011b..9f28b39 100644 --- a/python/lvmagp/actor/commands/__init__.py +++ b/python/lvmagp/actor/commands/__init__.py @@ -11,7 +11,7 @@ import os import click -from clu.parsers.click import CluGroup, help_, ping, version, command_parser +from clu.parsers.click import CluGroup, command_parser, help_, ping, version from cluplus.parsers.click import __commands @@ -19,6 +19,7 @@ def parser(*args): pass + parser.add_command(ping) parser.add_command(version) parser.add_command(help_) diff --git a/python/lvmagp/actor/commands/autofocus.py b/python/lvmagp/actor/commands/autofocus.py index 4982313..5b5af8d 100644 --- a/python/lvmagp/actor/commands/autofocus.py +++ b/python/lvmagp/actor/commands/autofocus.py @@ -1,14 +1,19 @@ -import os # this should be removed after connecting lvmcam - import click from clu.command import Command -from lvmagp.actor.commfunc import (LVMEastCamera, LVMFibsel, # noqa: F401 - LVMFocuser, LVMKMirror, LVMTANInstrument, - LVMTelescope, LVMWestCamera) -from lvmagp.actor.internalfunc import GuideImage, findfocus # noqa: F403 +from lvmagp.actor.commfunc import ( + LVMEastCamera, + LVMFibselector, # noqa: F401 + LVMFocuser, + LVMKMirror, + LVMTelescope, + LVMTelescopeUnit, + LVMWestCamera, +) +from lvmagp.actor.internalfunc import GuideImage from lvmagp.actor.user_parameters import usrpars -from . import parser + +from . import command_parser as parser @parser.group() @@ -18,13 +23,15 @@ def autofocus(*args): @autofocus.command() @click.argument("TEL", type=str) -async def coarse(command: Command, +async def coarse( + command: Command, telescopes: dict[str, LVMTelescope], eastcameras: dict[str, LVMEastCamera], westcameras: dict[str, LVMWestCamera], focusers: dict[str, LVMFocuser], kmirrors: dict[str, LVMKMirror], - tel: str,): + tel: str, +): """ Find the focus coarsely by scanning whole reachable position. @@ -38,13 +45,7 @@ async def coarse(command: Command, @autofocus.command() @click.argument("TEL", type=str) -async def fine(command: Command, - telescopes: dict[str, LVMTelescope], - eastcameras: dict[str, LVMEastCamera], - westcameras: dict[str, LVMWestCamera], - focusers: dict[str, LVMFocuser], - kmirrors: dict[str, LVMKMirror], - tel: str): +async def fine(command: Command, tel: str): """ Find the optimal focus position which is near the current position. @@ -53,102 +54,23 @@ async def fine(command: Command, tel The telescope to be focused """ - position, fwhm = [], [] - incremental = usrpars.af_incremental - repeat = usrpars.af_repeat - - ''' - # For test - pwd = os.path.dirname(os.path.abspath(__file__)) - agpwd = pwd + "/../../../../" - - guideimglist = [ - agpwd + - "testimg/focus_series/synthetic_image_median_field_5s_seeing_02.5.fits", # noqa: E501 - agpwd + - "testimg/focus_series/synthetic_image_median_field_5s_seeing_03.0.fits", # noqa: E501 - agpwd + - "testimg/focus_series/synthetic_image_median_field_5s_seeing_04.0.fits", # noqa: E501 - agpwd + - "testimg/focus_series/synthetic_image_median_field_5s_seeing_05.0.fits", # noqa: E501 - agpwd + - "testimg/focus_series/synthetic_image_median_field_5s_seeing_06.0.fits", # noqa: E501 - ] - guideimgidx = [0, 1, 2, 4] - ''' - # get current pos of focus stage - currentposition = await focusers[tel].getposition(command) - - # Move focus - """ - # For test - reachablelow = await send_message(command, lvmtan, "isreachable %d" % (currentposition - (incremental * (repeat - 1)) / 2.0), returnval=True, # noqa: E501 - body="Reachable") - reachablehigh = await send_message(command, lvmtan, "isreachable %d" % (currentposition + (incremental * (repeat - 1)) / 2.0), # noqa: E501 - returnval=True, body="Reachable") - if not (reachablelow and reachablehigh): - return command.fail(text="Target position is not reachable.") - """ - targetposition = currentposition - (incremental * (repeat - 1)) / 2.0 - movecmd = await focusers[tel].moveabs(command, targetposition) - - if movecmd: - currentposition = targetposition - position.append(currentposition) - else: - return command.fail(text="Focus move failed") - - # Take picture - """ - For test - guideimg = GuideImage(guideimglist[3]) # noqa: F405 - """ - + telunit = LVMTelescopeUnit(tel) + telunit.fine_autofocus() + del telunit - # Picture analysis - fwhm_tmp = await get_fwhm(command, - telescopes, - eastcameras, - westcameras, - focusers, - kmirrors, - tel) - fwhm.append(fwhm_tmp) - - for iteration in range(repeat - 1): - targetposition = currentposition + incremental - movecmd = await focusers[tel].moveabs(command, targetposition) - - if movecmd: - currentposition = targetposition - position.append(currentposition) - else: - return command.fail(text="Focus move failed") - - fwhm_tmp = await get_fwhm(command, - telescopes, - eastcameras, - westcameras, - focusers, - kmirrors, - tel, - starlist=starposition) - fwhm.append(fwhm_tmp) - - # Fitting - bestposition, bestfocus = findfocus(position, fwhm) - movecmd = await focusers[tel].moveabs(command, bestposition) return command.finish(text="Auto-focus done") -async def get_fwhm(command: Command, +async def get_fwhm( + command: Command, telescopes: dict[str, LVMTelescope], eastcameras: dict[str, LVMEastCamera], westcameras: dict[str, LVMWestCamera], focusers: dict[str, LVMFocuser], kmirrors: dict[str, LVMKMirror], tel: str, - starlist=None): + starlist=None, +): """ Take a testshot and return FWHM of the image. @@ -164,8 +86,8 @@ async def get_fwhm(command: Command, try: imgcmd = await westcameras[tel].test_exposure(command, exptime) - except Exception as e: - return command.fail(fail='Camera error') + except Exception: + return command.fail(fail="Camera error") guideimg = GuideImage(imgcmd) if starlist is not None: @@ -174,4 +96,4 @@ async def get_fwhm(command: Command, else: guideimg.findstars() - return guideimg.FWHM \ No newline at end of file + return guideimg.FWHM diff --git a/python/lvmagp/actor/commands/cam.py b/python/lvmagp/actor/commands/cam.py index 8588b4e..5b1d823 100644 --- a/python/lvmagp/actor/commands/cam.py +++ b/python/lvmagp/actor/commands/cam.py @@ -3,7 +3,7 @@ from lvmagp.actor.internalfunc import send_message # noqa: F403 -from . import parser +from . import command_parser as parser lvmcam = "lvmcam" diff --git a/python/lvmagp/actor/commands/focus.py b/python/lvmagp/actor/commands/focus.py index ca1f94c..ec9246e 100644 --- a/python/lvmagp/actor/commands/focus.py +++ b/python/lvmagp/actor/commands/focus.py @@ -3,7 +3,7 @@ from lvmagp.actor.internalfunc import send_message # noqa: F403 -from . import parser +from . import command_parser as parser lvmtan = "lvm.sci.foc" @@ -17,17 +17,7 @@ def focus(*args): @focus.command() @click.argument("STEPS", type=int) async def moverel(command: Command, steps: int): - """ - pos = await send_message( - command, lvmtan, "getposition", returnval=True, body="Position" - ) - reachable = await send_message( - command, lvmtan, "isreachable %d" % (pos+steps), returnval=True, body="Reachable" - ) - if not reachable: - return command.fail(text="Target position is not reachable.") - """ movecmd = await send_message(command, lvmtan, "moverelative %d" % steps) if movecmd: return command.finish(text="Move completed.") @@ -36,13 +26,6 @@ async def moverel(command: Command, steps: int): @focus.command() @click.argument("POSITION", type=int) async def moveabs(command: Command, position: int): - """ - reachable = await send_message( - command, lvmtan, "isreachable %d" % position, returnval=True, body="Reachable" - ) - if not reachable: - return command.fail(text="Target position is not reachable.") - """ movecmd = await send_message(command, lvmtan, "moveabsolute %d" % position) if movecmd: return command.finish(text="Move completed.") diff --git a/python/lvmagp/actor/commands/guide.py b/python/lvmagp/actor/commands/guide.py index 580df57..e31fe56 100644 --- a/python/lvmagp/actor/commands/guide.py +++ b/python/lvmagp/actor/commands/guide.py @@ -4,18 +4,18 @@ import numpy as np from clu.command import Command -from lvmagp.actor.commfunc import (LVMEastCamera, LVMFibsel, # noqa: F401 - LVMFocuser, LVMKMirror, LVMTANInstrument, - LVMTelescope, LVMWestCamera) +from lvmagp.actor.commfunc import ( + LVMEastCamera, # noqa: F401 + LVMFibselector, + LVMFocuser, + LVMKMirror, + LVMTelescope, + LVMWestCamera, +) from lvmagp.actor.internalfunc import GuideImage # noqa: F403 from lvmagp.actor.user_parameters import usrpars -from . import parser - - -question = "Is this develop branch?" - -KHU_inner_test = True +from . import command_parser as parser @parser.group() @@ -130,7 +130,7 @@ async def calibration( tel Telescope to be calibrated """ - global KHU_inner_test + offset_per_step = usrpars.ag_cal_offset_per_step num_step = usrpars.ag_cal_num_step @@ -189,14 +189,25 @@ async def calibration( ypositions = [initposition[:, 1]] for step in range(1, num_step + 1): - await telescopes[tel].offset_radec(command, offset_per_step/np.cos(np.deg2rad(decj2000_deg)), 0) + await telescopes[tel].offset_radec( + command, offset_per_step / np.cos(np.deg2rad(decj2000_deg)), 0 + ) position, flux = await find_guide_stars( - command, telescopes, eastcameras, westcameras, focusers, kmirrors, tel, positionguess=initposition + command, + telescopes, + eastcameras, + westcameras, + focusers, + kmirrors, + tel, + positionguess=initposition, ) xpositions.append(position[:, 0]) ypositions.append(position[:, 1]) - await telescopes[tel].offset_radec(command, -num_step * offset_per_step/np.cos(np.deg2rad(decj2000_deg)), 0) + await telescopes[tel].offset_radec( + command, -num_step * offset_per_step / np.cos(np.deg2rad(decj2000_deg)), 0 + ) xoffsets = np.array(xpositions) - xpositions[0] yoffsets = np.array(ypositions) - ypositions[0] @@ -215,9 +226,9 @@ async def calibration( offset_per_step ) # exclude the first index (0,0) - telescopes[tel].scale_matrix = np.linalg.inv(np.array( - [[xscale_ra, xscale_dec], [yscale_ra, yscale_dec]] - )) # inverse matrix.. linear system of equations.. + telescopes[tel].scale_matrix = np.linalg.inv( + np.array([[xscale_ra, xscale_dec], [yscale_ra, yscale_dec]]) + ) # inverse matrix.. linear system of equations.. return command.finish( xscale_ra="%.3f pixel/arcsec" % xscale_ra, yscale_ra="%.3f pixel/arcsec" % yscale_ra, @@ -250,32 +261,23 @@ async def autoguide_supervisor( Otherwise, the sequence will get pixel scale from LVMCamera, and it assumes that the camera is north-oriented and both axes of mount are orthogonal. """ - global KHU_inner_test - if 0: - i = 0 - else: - initposition, initflux = await find_guide_stars( - command, telescopes, eastcameras, westcameras, focusers, kmirrors, tel - ) + initposition, initflux = await find_guide_stars( + command, telescopes, eastcameras, westcameras, focusers, kmirrors, tel + ) while 1: - if 0: - command.info("%s %d" % (tel, i)) - i = i + 1 - await asyncio.sleep(8) - else: - await autoguiding( - command, - telescopes, - eastcameras, - westcameras, - focusers, - kmirrors, - tel, - initposition, - initflux, - useteldata, - ) + await autoguiding( + command, + telescopes, + eastcameras, + westcameras, + focusers, + kmirrors, + tel, + initposition, + initflux, + useteldata, + ) if telescopes[tel].ag_break is True: telescopes[tel].ag_break = False @@ -284,84 +286,6 @@ async def autoguide_supervisor( return True -""" Here is old version using task.cancle -@guide.command() -@click.argument("TEL", type=str) -async def start(command: Command, tel: str): - exptime = 3 # in seconds - pixelscale = 0.5 # in arcsec/pixel - halfboxsize = 15 # 1/2 of box in pixel - min_snr = 5 # minimum star SNR - - ra_agr = 0.8 - ra_hys = 0.2 - dec_agr = 0.8 - min_dist = 0.3 #in pixel - - lvmcampath = '' - - # safety check? - tel1 = LVMTelescope(tel) - cam1 = LVMCamera(tel + "e") - cam2 = LVMCamera(tel + "w") - cam1 = LVMCamera("test") # for lab testing - global tasklist - tasklist = [0,0,0,0] - try: - if tel == 'sci': - tasklist[0] = asyncio.create_task(autoguide_supervisor(command, tel)) - await tasklist[0] - elif tel == 'skye': - tasklist[1] = asyncio.create_task(autoguide_supervisor(command, tel)) - await tasklist[1] - elif tel == 'skyw': - tasklist[2] = asyncio.create_task(autoguide_supervisor(command, tel)) - await tasklist[2] - elif tel == 'phot': - tasklist[3] = asyncio.create_task(autoguide_supervisor(command, tel)) - await tasklist[3] - else: - return command.fail("Wrong telescope name") - except asyncio.CancelledError: - command.info("cancelled_main") - - -@guide.command() -@click.argument("TEL", type=str) -async def stop(command: Command, tel: str): - if tel == 'sci': - tasklist[0].cancel() - elif tel == 'skye': - tasklist[1].cancel() - elif tel == 'skyw': - tasklist[2].cancel() - elif tel == 'phot': - tasklist[3].cancel() - else: - return command.fail("Wrong telescope name") - -async def autoguide_supervisor(command, tel): - lvmcampath = '' - - try: - i = 0 - while 1: - command.info("%d" % i) - i=i+1 - await asyncio.sleep(5) - - if i==5: - break - #initposition, initflux = await register_guide_stars(command, tel) - #while 1: - # await autoguiding(command,tel, initposition, initflux) - except asyncio.CancelledError: - # Something to abort exposure .. - command.info('Guide stopped') - raise -""" - - async def find_guide_stars( command, telescopes: dict[str, LVMTelescope], @@ -386,15 +310,14 @@ async def find_guide_stars( If ``positionguess`` is not None, ``find_guide_stars`` only conduct center finding based on ``positionguess`` without finding new stars. """ - global KHU_inner_test - command.info("Taking image...") + # take an image for astrometry + command.info("Taking image...") + try: imgcmd = [] imgcmd.append(westcameras[tel].single_exposure(command, usrpars.ag_exptime)) - - if not KHU_inner_test: - imgcmd.append(eastcameras[tel].single_exposure(command, usrpars.ag_exptime)) + imgcmd.append(eastcameras[tel].single_exposure(command, usrpars.ag_exptime)) guideimgpath = await asyncio.gather(*imgcmd) @@ -402,10 +325,7 @@ async def find_guide_stars( return command.fail(fail="Camera error") westguideimg = GuideImage(guideimgpath[0]) - eastguideimg = westguideimg - - if not KHU_inner_test: - eastguideimg = GuideImage(guideimgpath[1]) # noqa: F841 + eastguideimg = GuideImage(guideimgpath[1]) if positionguess is None: starposition = westguideimg.findstars() @@ -462,8 +382,7 @@ async def autoguiding( if ( np.abs( np.average(starflux / initflux - 1, weights=2.5 * np.log10(initflux * 10)) - ) > - usrpars.ag_flux_tolerance + ) > usrpars.ag_flux_tolerance ): return command.error( "Star flux variation %.3f is too large." diff --git a/python/lvmagp/actor/commands/slew.py b/python/lvmagp/actor/commands/slew.py index e424117..7319d06 100644 --- a/python/lvmagp/actor/commands/slew.py +++ b/python/lvmagp/actor/commands/slew.py @@ -1,5 +1,4 @@ import asyncio -import os import click import numpy as np @@ -7,13 +6,18 @@ from astropy.coordinates import Angle from clu.command import Command -from lvmagp.actor.commfunc import (LVMEastCamera, LVMFibsel, # noqa: F401 - LVMFocuser, LVMKMirror, LVMTANInstrument, - LVMTelescope, LVMWestCamera) +from lvmagp.actor.commfunc import ( + LVMEastCamera, # noqa: F401 + LVMFibselector, + LVMFocuser, + LVMKMirror, + LVMTelescope, + LVMWestCamera, +) from lvmagp.actor.internalfunc import GuideImage, cal_pa, check_target from lvmagp.actor.user_parameters import usrpars -from . import parser +from . import command_parser as parser @parser.command() @@ -44,7 +48,6 @@ async def slew( The declination (J2000) of the target in degrees """ - test_KHU = True long_d = telescopes[tel].longitude lat_d = telescopes[tel].latitude @@ -77,11 +80,7 @@ async def slew( try: imgcmd = [] imgcmd.append(westcameras[tel].test_exposure(command, usrpars.aqu_exptime)) - # imgcmd.append(westcameras[tel].single_exposure(command, usrpars.aqu_exptime)) - if not test_KHU: - imgcmd.append( - eastcameras[tel].test_exposure(command, usrpars.aqu_exptime) - ) + imgcmd.append(eastcameras[tel].test_exposure(command, usrpars.aqu_exptime)) guideimgpath = await asyncio.gather(*imgcmd) except Exception: @@ -89,30 +88,13 @@ async def slew( command.info("Astrometry ...") - if 0: # Here should be changed to the camera version - pwd = os.path.dirname(os.path.abspath(__file__)) - agpwd = pwd + "/../../../../" - # Here lvmcam path and naming rule for finding latest guide image.. - - guideimgpath = ( - agpwd + - "testimg/focus_series/synthetic_image_median_field_5s_seeing_02.5.fits" - ) # noqa: E501 - westguideimg = GuideImage(guideimgpath[0]) - eastguideimg = westguideimg - - if not test_KHU: - eastguideimg = GuideImage(guideimgpath[1]) + eastguideimg = GuideImage(guideimgpath[1]) try: - # await guideimg.astrometry(ra_h=13, dec_d=-55) astcmd = [] astcmd.append(westguideimg.astrometry(ra_h=target_ra_h, dec_d=target_dec_d)) - if not test_KHU: - astcmd.append( - eastguideimg.astrometry(ra_h=target_ra_h, dec_d=target_dec_d) - ) + astcmd.append(eastguideimg.astrometry(ra_h=target_ra_h, dec_d=target_dec_d)) cmd = await asyncio.gather(*astcmd) except Exception: @@ -153,8 +135,7 @@ async def slew( else: command.info(text="Compensating ...") cmd = [] - if not test_KHU: - cmd.append(kmirrors[tel].moverel(command, -pa_d, "DEG")) + cmd.append(kmirrors[tel].moverel(command, -pa_d, "DEG")) cmd.append( telescopes[tel].offset_radec( command, comp_ra_arcsec, comp_dec_arcsec diff --git a/python/lvmagp/actor/commands/system.py b/python/lvmagp/actor/commands/system.py index b70b08c..b2cfb59 100644 --- a/python/lvmagp/actor/commands/system.py +++ b/python/lvmagp/actor/commands/system.py @@ -1,6 +1,6 @@ from clu.command import Command -from . import parser +from . import command_parser as parser @parser.group() diff --git a/python/lvmagp/actor/commands/tel.py b/python/lvmagp/actor/commands/tel.py index 1f1190a..d212f8c 100644 --- a/python/lvmagp/actor/commands/tel.py +++ b/python/lvmagp/actor/commands/tel.py @@ -3,7 +3,7 @@ from lvmagp.actor.internalfunc import send_message # noqa: F403 -from . import parser +from . import command_parser as parser lvmpwi = "lvm.pwi" diff --git a/python/lvmagp/actor/commands/test.py b/python/lvmagp/actor/commands/test.py index f19a631..e69de29 100644 --- a/python/lvmagp/actor/commands/test.py +++ b/python/lvmagp/actor/commands/test.py @@ -1,154 +0,0 @@ -from clu.command import Command - -from lvmagp.actor.commfunc import (LVMEastCamera, LVMFibsel, # noqa: F401 - LVMFocuser, LVMKMirror, LVMTANInstrument, - LVMTelescope, LVMWestCamera) -from lvmagp.actor.internalfunc import GuideImage -from lvmagp.actor.user_parameters import usrpars # noqa: F401 -import numpy as np -#from . import parser - -import sys -import uuid -from cluplus.proxy import Proxy, ProxyPartialInvokeException, invoke, unpack -from clu import AMQPClient, CommandStatus - - -# import logging -# from sdsstools import get_logger - - -test_KHU = True - -# log = get_logger("sdss-lvmagp") -# log.sh.setLevel(logging.DEBUG) - - -#@parser.command() -# @click.argument("TEL", type=str) -async def test( - command: Command, - telescopes: dict[str, LVMTelescope], - eastcameras: dict[str, LVMEastCamera], - westcameras: dict[str, LVMWestCamera], - focusers: dict[str, LVMFocuser], - kmirrors: dict[str, LVMKMirror], -): - - ''' - try: - amqpc = AMQPClient(name=f"{sys.argv[0]}.proxy-{uuid.uuid4().hex[:8]}") - await amqpc.start() - tcs = Proxy(amqpc, 'lvm.sci.foc') - await tcs.start() - except Exception as e: - amqpc.log.error(f"Exception: {e}") - - try: - # sequential - result = await tcs.ping() - #await tcs.ping() - - # parallel - #await invoke( - # lvm_sci_pwi.ping(), - # lvm_sci_foc.ping() - #) - - except Exception as e: - amqpc.log.error(f"Exception: {e}") - - #result = await tcs.ping() - command.finish(result["text"]) - ''' - filepath = \ - "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000170.fits" - guideimg1 = GuideImage(filepath) - - filepath = \ - "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000170.fits" - guideimg2 = GuideImage(filepath) - - pos = guideimg1.findstars() - print(pos, guideimg1.guidestarflux) - - guideimg2.guidestarposition = pos - guideimg2.update_guidestar_properties() - starposition = guideimg2.guidestarposition - print(starposition, guideimg2.guidestarflux) - - -def test1(): - filepath = \ - "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000170.fits" - guideimg1 = GuideImage(filepath) - - filepath = \ - "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/lvm/sci/agw/20211203/lvm.sci.agw-00000172.fits" - guideimg2 = GuideImage(filepath) - - global KHU_inner_test - offset_per_step = usrpars.ag_cal_offset_per_step - num_step = usrpars.ag_cal_num_step - - decj2000_deg = 60.0 - - xpositions, ypositions = [], [] - - xpositions = [[100, 500, 1200]] - ypositions = [[40, 150, 700]] - - # dec axis calibration - xpositions = [[100, 500, 1200], [101.1, 501.0, 1201.2], [102.1, 502.1, 1202.3], [103.2, 503.5, 1203.1]] - ypositions = [[40, 150, 700], [42.2, 152.0, 701.9], [44.0, 153.8, 703.8], [45.9, 155.9, 706.3]] - - xpositions = np.array(xpositions) - xpositions[0] - ypositions = np.array(ypositions) - ypositions[0] - xscale_dec = ( - np.average(xpositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / - offset_per_step - ) # displacement along x-axis by ra offset in pixel per arcsec. exclude the first index (0,0) - yscale_dec = ( - np.average(ypositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / - offset_per_step - ) # exclude the first index (0,0) - - # ra axis calibration - xpositions = [[100, 500, 1200]] - ypositions = [[40, 150, 700]] - - xpositions = [[100, 500, 1200], [102.2, 502.0, 1201.9], [104.0, 503.8, 1203.8], [105.9, 505.9, 1206.3]] - ypositions = [[40, 150, 700], [38.9, 148.8, 699.1], [38.0, 147.7, 698.1], [37.1, 147.1, 696.9]] - - xpositions = np.array(xpositions) - xpositions[0] - ypositions = np.array(ypositions) - ypositions[0] - xscale_ra = ( - np.average(xpositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / - offset_per_step - ) # exclude the first index (0,0) - yscale_ra = ( - np.average(ypositions[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / - offset_per_step - ) # exclude the first index (0,0) - - #scale_matrix = np.linalg.inv(np.array( - # [[xscale_ra, xscale_dec], [yscale_ra, yscale_dec]] - #)) - scale_matrix = np.linalg.inv(np.array( - [[0.2, 0.4], [0.4, -0.2]] - )) - - offset = np.array([0.4, 0.2]) - offset_arcsec = np.dot( - scale_matrix, offset - ) # in x,y(=ra,dec) [arcsec] - correction_arcsec = -np.array(offset_arcsec)[0] - - return scale_matrix, offset_arcsec - - - -if (__name__ == "__main__"): - scale_matrix, offset_arcsec = test1() - print(scale_matrix) - print (offset_arcsec) \ No newline at end of file diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index 5a1fed5..0e45502 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -1,142 +1,140 @@ +import sys +import uuid + import numpy as np +from clu import AMQPClient +from cluplus.proxy import Proxy, invoke from lvmtipo.site import Site -from lvmagp.actor.internalfunc import send_message +from lvmagp.actor.internalfunc import GuideImage, findfocus, send_message +from lvmagp.actor.user_parameters import temp_vs_focus, usrpars +from lvmagp.exceptions import LvmagpFocuserError -class LVMTANInstrument: +class LVMFocuser: """ - Class for the instruments using TAN. + Class for the focusers Parameters ---------- tel - Telescope to which the instrument belongs - inst - Type of the instrument + Telescope unit to which the focuser belongs + amqpc + AMQP client to be used for actor communication """ - def __init__(self, tel, inst): - if tel == "test" or inst == "test": - self.lvmtan = "test.first.focus_stage" - else: - self.lvmtan = "lvm." + tel + "." + inst + def __init__(self, tel, amqpc): + self.amqpc = amqpc + self._foc = None - async def getposition(self, command, unit="STEPS"): - """ - Get current position of device in given unit. + try: + self._foc = Proxy(self.amqpc, "lvm." + tel + ".foc") + self._foc.start() - Parameters - ---------- - unit - Unit of position + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") + + def focusoffset(self, delta_f=None): """ - cmd = await send_message( - command, - self.lvmtan, - "getPosition %s" % unit, - returnval=True, - body="Position", - ) - return cmd + Apply a relative telescope focus offset. - async def moveabs(self, command, position, unit="STEPS"): + Parameters: + delta_f (float): focus offset value in steps """ - Move the device at given absolute position. - Parameters - ---------- - position - Position for the device to be located - unit - Unit of position + try: + self._foc.moveRelative(delta_f, unit="STEPS") + + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") + return False + + return True + + def focus(self, value=None, temperature=None): """ - cmd = await send_message( - command, self.lvmtan, "moveAbsolute %d %s" % (position, unit) - ) - return cmd + Move focus to a particular value or a first guess given a temperature + + Parameters: + value (float): if provided, focus stage moves to this step value + temperature (float): if 'value' is not provided or 'value=None', + focus stage moves to best guess based on focus vs temperature model + Returns: + None + """ + try: + if value is not None: + self._foc.moveAbsolute(value, unit="STEPS") + else: + temp_value = temp_vs_focus(temperature=temperature) + self._foc.moveAbsolute(temp_value, unit="STEPS") - async def moverel(self, command, position, unit="STEPS"): + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") + + def getfocusposition(self, unit="STEPS"): """ - Move the device at given relative position. + Get current position of device in given unit. Parameters ---------- - position - Position for the device to be located unit Unit of position """ - cmd = await send_message( - command, self.lvmtan, "moveRelative %d %s" % (position, unit) - ) - return cmd - + try: + position = self._foc.getPosition(unit=unit)["Position"] + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") + raise LvmagpFocuserError -""" + return position - async def moveabs(self, command, position, unit="STEPS"): - task = asyncio.create_task( - send_message( - command, self.lvmtan, "moveabsolute %.4f %s" % (float(position), unit) - ) - ) - return task - async def moverel(self, command, position, unit="STEPS"): - task = asyncio.create_task( - send_message( - command, self.lvmtan, "moverelative %.4f %s" % (float(position), unit) - ) - ) - return task -""" - - -class LVMFocuser(LVMTANInstrument): +class LVMKMirror: """ - Class for the focusers + Class for the K-mirros Parameters ---------- tel - Telescope to which the focuser belongs + Telescope unit to which the focuser belongs """ - def __init__(self, tel): - super().__init__(tel, "foc") - # print(self.lvmtan) + def __init__(self, tel, amqpc): + self.amqpc = amqpc + self._km = None + try: + self._km = Proxy(self.amqpc, "lvm." + tel + ".km") + self._km.start() -class LVMKMirror(LVMTANInstrument): - """ - Class for the K-mirros - - Parameters - ---------- - tel - Telescope to which the focuser belongs - """ - - def __init__(self, tel): - super().__init__(tel, "km") + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") async def cal_traj(self, command): pass -class LVMFibsel(LVMTANInstrument): +class LVMFibselector: """ Class for the fiber selectors Parameters ---------- tel - Telescope to which the focuser belongs + Telescope unit to which the focuser belongs """ - def __init__(self): - super().__init__("spec", "fibsel") + def __init__(self, tel, amqpc): + self.amqpc = amqpc + self._fibsel = None + + try: + self._fibsel = Proxy(self.amqpc, "lvm." + tel + ".fibsel") + self._fibsel.start() + + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") class LVMTelescope: @@ -149,11 +147,10 @@ class LVMTelescope: The name of the telescope """ - def __init__(self, tel, sitename="LCO"): - if tel == "test": - self.lvmpwi = "lvm.pwi" - else: - self.lvmpwi = "lvm." + tel + ".pwi" + def __init__(self, tel, amqpc, sitename="LCO"): + self.amqpc = amqpc + self.lvmpwi = "lvm." + tel + ".pwi" + self._pwi = None site = Site(name=sitename) self.latitude = site.lat @@ -166,6 +163,42 @@ def __init__(self, tel, sitename="LCO"): self.ag_task = None self.ag_break = False + try: + self._pwi = Proxy(self.amqpc, self.lvmpwi) + self._pwi.start() + + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") + + def goto_park(self): + """ + Move telescope to safe park position. + + ====== + Comments and desired actions: + - Check dome safety interlock: + - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - run status (LVMI_interface) to check instrument status + - if not idle (i.e. carrying out any observations or calibrations), abort observation (halt in LVMI_interface) and park telescope + (in this case, we assume user wants to park due to an emergency) + """ + pass + + def goto_zenith(self): + """ + Point telescope to zenith + + ====== + Comments and desired actions: + - Check dome safety interlock: + - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - run status (LVMI_interface) to check instrument status + - if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, + then move telescope. Regularly give updates (i.e. "waiting for instrument to become idle before moving telescope") + """ + + pass + async def slew_radec2000(self, command, target_ra_h, target_dec_d): """ Slew the telescope to given equatorial coordinates whose epoch is J2000. @@ -177,6 +210,11 @@ async def slew_radec2000(self, command, target_ra_h, target_dec_d): target_dec_d Target declination in degrees in J2000 epoch """ + try: + self._pwi.gotoRaDecJ2000() + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") + cmd = await send_message( command, self.lvmpwi, "gotoRaDecJ2000 %f %f" % (target_ra_h, target_dec_d) ) @@ -222,22 +260,24 @@ async def get_dec2000_deg(self, command): return dec2000 -# Functions for camera class LVMCamera: """ Class for the FLIR guide cameras """ - def __init__(self): + def __init__(self, amqpc): self.lvmcam = "lvmcam" # actor name - self.cam = "lvmcam" # cam name + self.camname = "" # cam name self.offset_x = -999 self.offset_y = -999 self.pixelscale = -999 self.rotationangle = -999 self.lvmcampath = "" - async def single_exposure(self, command, exptime): + self.amqpc = amqpc + self._cam = None + + def single_exposure(self, exptime): """ Take a single exposure @@ -246,34 +286,40 @@ async def single_exposure(self, command, exptime): exptime Exposure time """ - path = await send_message( - command, - self.lvmcam, - "expose %f 1 %s" % (exptime, self.cam), - returnval=True, - body="PATH", - ) + path = self._cam.expose(exptime=exptime, num=1, camname=self.camname)["PATH"] + return path["0"] - async def test_exposure(self, command, exptime): + def test_exposure(self, exptime): """ Take a test exposure using ``-t`` option of lvmcam. - The image file (Temp.fits) is overwritten whenever this command is executed. + The image file (Temp.fits) will be overwritten whenever this command is executed. Parameters ---------- exptime Exposure time """ - path = await send_message( - command, - self.lvmcam, - "expose -t %f 1 %s" % (exptime, self.cam), - returnval=True, - body="PATH", - ) + path = self._cam.expose( + exptime=exptime, num=1, camname=self.camname, testshot=True + )["PATH"] + return path["0"] + def bias_exposure(self, repeat): + """ + Take a test exposure using ``-t`` option of lvmcam. + The image file (Temp.fits) will be overwritten whenever this command is executed. + + Parameters + ---------- + repeat + The number of bias images + """ + path = self._cam.expose(exptime=0, num=repeat, camname=self.camname)["PATH"] + + return path.values() + class LVMEastCamera(LVMCamera): """ @@ -287,7 +333,14 @@ class LVMEastCamera(LVMCamera): def __init__(self, tel): super().__init__() - self.cam = tel + ".age" + self.lvmcam = "lvm." + tel + ".age" + self.camname = tel + ".age" + + try: + self._cam = Proxy(self.amqpc, self.lvmcam) + self._cam.start() + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") class LVMWestCamera(LVMCamera): @@ -302,4 +355,225 @@ class LVMWestCamera(LVMCamera): def __init__(self, tel): super().__init__() - self.cam = tel + ".agw" + self.lvmcam = "lvm." + tel + ".agw" + self.camname = tel + ".agw" + + try: + self._cam = Proxy(self.amqpc, self.lvmcam) + self._cam.start() + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") + + +class LVMTelescopeUnit( + LVMTelescope, LVMFocuser, LVMWestCamera, LVMEastCamera, LVMFibselector, LVMKMirror +): + def __init__( + self, + tel, + enable_pwi=True, + enable_foc=True, + enable_agw=True, + enable_age=True, + enable_fibsel=False, + enable_km=True, + ): + self.name = tel + self.amqpc = AMQPClient(name=f"{sys.argv[0]}.proxy-{uuid.uuid4().hex[:8]}") + + try: + if enable_pwi is True: + LVMTelescope.__init__(self.name, self.amqpc) + + if enable_foc is True: + LVMFocuser.__init__(self.name, self.amqpc) + + if enable_agw is True: + self.agw = LVMWestCamera(self.name) + + if enable_age is True: + self.age = LVMEastCamera(self.name) + + if enable_fibsel is True: + LVMFibselector.__init__(self.name, self.amqpc) + + if enable_km is True: + LVMKMirror.__init__(self.name, self.amqpc) + + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") + + def __del__(self): + self.amqpc.stop() + + ############# Autofocus functions ######################### + def coarse_autofocus(self): + """ + Find the focus coarsely by scanning whole reachable position. + """ + pass + + def fine_autofocus(self): + """ + Find the optimal focus position which is near the current position. + """ + position, FWHM = [], [] + incremental = usrpars.af_incremental + repeat = usrpars.af_repeat + + # get current pos of focus stage + currentposition = self.getfocusposition(unit="STEPS") + + # Move focus + targetposition = currentposition - (incremental * (repeat - 1)) / 2.0 + self.focus(value=targetposition) + + currentposition = targetposition + position.append(currentposition) + + # Take picture & picture analysis + FWHM_tmp = self.__get_fwhm() + FWHM.append(FWHM_tmp) + + for iteration in range(repeat - 1): + targetposition = currentposition + incremental + self.focus(value=targetposition) + + currentposition = targetposition + position.append(currentposition) + + FWHM_tmp = self.__get_fwhm() + FWHM.append(FWHM_tmp) + + # Fitting + bestposition, bestfocus = findfocus(position, FWHM) + self.focus(value=bestposition) + + return bestposition, bestfocus + + def __get_fwhm(self): + """ + Take a testshot using both guide image camera and return FWHM of the image. + """ + exptime = usrpars.af_exptime + imgcmd_w, imgcmd_e = None, None + + try: + if self.name != "phot": + imgcmd_w, imgcmd_e = invoke( + self.agw.single_exposure(exptime=exptime), + self.age.single_exposure(exptime=exptime), + ) + else: + imgcmd_w = self.agw.single_exposure(exptime=exptime) + imgcmd_e = imgcmd_w + + except Exception as e: + self.amqpc.log.error(f"Exception: {e}") + + guideimg_w = GuideImage(imgcmd_w["PATH"]["0"]) + guideimg_w.findstars() + guideimg_e = GuideImage(imgcmd_e["PATH"]["0"]) + guideimg_e.findstars() + FWHM = 0.5 * (guideimg_w.FWHM + guideimg_e.FWHM) + + return FWHM + + ############# Slew functions ######################### + def goto_eq(self, ra, dec, PA=0, target="optical_axis", deg=True): + """ + Point telescope to position using RA and dec + + ====== + Comments and desired actions: + - Check dome safety interlock: + - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - run status (LVMI_interface) to check instrument status + - if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, + then move telescope. Regularly give updates (i.e. "waiting for instrument to become idle before moving telescope") + """ + + pass + + def goto_aa(self, alt, az, PA=0, target="optical_axis", deg=True): + """ + Point telescope to position using alt/az (i.e. point to screen or manually park) + + ====== + Comments and desired actions: + - Check dome safety interlock: + - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - run status (LVMI_interface) to check instrument status + - if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, + then move telescope. Regularly give updates (i.e. "waiting for instrument to become idle before moving telescope") + """ + + pass + + def goto_screen(self): + """ + Point telescope to screen for dome flats + + ====== + Comments and desired actions: + - Check dome safety interlock: + - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - run status (LVMI_interface) to check instrument status + - if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, + then move telescope. Regularly give updates (i.e. "waiting for instrument to become idle before moving telescope") + """ + + pass + + ############# Autoguide functions ######################### + def offset( + self, + target=None, + delta_ra=None, + delta_dec=None, + delta_x=None, + delta_y=None, + offset_gbox=False, + ): + """ + Pointing offset: change track rates + + ====== + Comments and desired actions: + """ + pass + + def guide_offset( + self, target=None, delta_ra=None, delta_dec=None, delta_x=None, delta_y=None + ): + """ + Guiding offset: do NOT change track rates + + ====== + Comments and desired actions: + """ + + pass + + def offset_gbox(self, delta_x=None, delta_y=None, delta_pa=None): + """ + move the guider set points by specified amount; used to move accurate + offsets by letting the guider do the work. used, e.g., for dithering. + ====== + Comments and desired actions: + """ + + pass + + def paoffset(self, delta_PA=None): + """ + Apply a relative rotation offset by moving the K-mirror + + Parameters: + delta_PA (float): rotation offset in degrees (+/- = E/W) + + Returns: + None + """ + + pass diff --git a/python/lvmagp/actor/internalfunc.py b/python/lvmagp/actor/internalfunc.py index b4e85fe..3894132 100644 --- a/python/lvmagp/actor/internalfunc.py +++ b/python/lvmagp/actor/internalfunc.py @@ -4,6 +4,7 @@ from datetime import datetime import numpy as np + # import matplotlib.pyplot as plt from astropy.io import fits from astropy.modeling import fitting, models diff --git a/python/lvmagp/actor/user_parameters.py b/python/lvmagp/actor/user_parameters.py index 845829f..4c4b255 100644 --- a/python/lvmagp/actor/user_parameters.py +++ b/python/lvmagp/actor/user_parameters.py @@ -1,4 +1,5 @@ class usrpars: + # autofocus parameters af_incremental = 100 # step size for each movement af_repeat = 5 # the number of steps @@ -14,7 +15,22 @@ class usrpars: ag_halfboxsize = 15 # 1/2 of box in pixel # ag_minsnr = 6 ag_min_offset = 0.3 # minimum offset to do correction in pixel - ag_flux_tolerance = 0.3 # maximum variability of flux due to seeing to identify the guide star + ag_flux_tolerance = ( + 0.3 # maximum variability of flux due to seeing to identify the guide star + ) ag_cal_offset_per_step = 5.0 # Step size for calibration in arcseconds ag_cal_num_step = 3 # number of steps of calibration per axis + + +def temp_vs_focus(temperature): + """ + Returns estimation of focus position in steps unit for input temperature + + Parameters + ---------- + temperature + Target temperature in Celsius + """ + pos = temperature # here put a relation between temperature (Celsius) and focus position (step) # noqa: E501 + return pos diff --git a/python/lvmagp/exceptions.py b/python/lvmagp/exceptions.py index 357e808..fd189d7 100644 --- a/python/lvmagp/exceptions.py +++ b/python/lvmagp/exceptions.py @@ -75,3 +75,66 @@ class LvmagpDeprecationWarning(LvmagpUserWarning): """A warning for deprecated features.""" pass + + +class LvmagpActorMissing(LvmagpError): + """A custom exception for not yet implemented features.""" + + def __init__(self, message=None): + + message = ( + "Some of lower actors (lvmtan, lvmpwi, lvmcam) are missing.\ + Check these actors are running." + if not message + else message + ) + + super(LvmagpActorMissing, self).__init__(message) + + +class LvmagpNotExistingHardware(LvmagpError): + """A custom exception for not yet implemented features.""" + + def __init__(self, message=None): + + message = ( + "There does not exist hardware has this name." if not message else message + ) + + super(LvmagpNotExistingHardware, self).__init__(message) + + +class LvmagpFocuserError(LvmagpError): + """A custom exception for not yet implemented features.""" + + def __init__(self, message=None): + + message = ( + "Focuser failed. Check the focuser hardware." if not message else message + ) + + super(LvmagpFocuserError, self).__init__(message) + + +class LvmagpTelescopeError(LvmagpError): + """A custom exception for not yet implemented features.""" + + def __init__(self, message=None): + + message = ( + "Telescope(mount) failed. Check the mount hardware." + if not message + else message + ) + + super(LvmagpTelescopeError, self).__init__(message) + + +class LvmagpInterlockEngaged(LvmagpError): + """A custom exception for not yet implemented features.""" + + def __init__(self, message=None): + + message = "Interlock is engaged. Unlock the system." if not message else message + + super(LvmagpInterlockEngaged, self).__init__(message) From 7509c62a6c4318eeb52a190526c20faded06823c Mon Sep 17 00:00:00 2001 From: Hojae Ahn Date: Wed, 19 Jan 2022 18:27:45 +0900 Subject: [PATCH 04/17] v.0.2.5a import cluplus --- python/lvmagp/actor/actor.py | 62 --- python/lvmagp/actor/astrometry_result.txt | 229 ++++++++- python/lvmagp/actor/commands/autofocus.py | 60 +-- python/lvmagp/actor/commands/guide.py | 15 +- python/lvmagp/actor/commands/slew.py | 121 +---- python/lvmagp/actor/commands/test.py | 4 + python/lvmagp/actor/commfunc.py | 541 ++++++++++++++++++---- python/lvmagp/actor/internalfunc.py | 89 ++-- python/lvmagp/etc/lvmagp.yml | 4 +- python/lvmagp/exceptions.py | 32 +- 10 files changed, 772 insertions(+), 385 deletions(-) diff --git a/python/lvmagp/actor/actor.py b/python/lvmagp/actor/actor.py index 0c41970..c812053 100644 --- a/python/lvmagp/actor/actor.py +++ b/python/lvmagp/actor/actor.py @@ -2,22 +2,12 @@ from clu.actor import AMQPActor -from lvmagp.actor.commfunc import ( - LVMEastCamera, # noqa: F401 - LVMFibselector, - LVMFocuser, - LVMKMirror, - LVMTelescope, - LVMWestCamera, -) - from .commands import command_parser as lvm_command_python # from scpactor import __version__ __all__ = ["lvmagp"] -tel_list = ["sci", "skye", "skyw", "spec"] class lvmagp(AMQPActor): @@ -31,12 +21,6 @@ class lvmagp(AMQPActor): def __init__( self, *args, - telescopes: tuple[LVMTelescope, ...] = (), - eastcameras: tuple[LVMEastCamera, ...] = (), - westcameras: tuple[LVMEastCamera, ...] = (), - focusers: tuple[LVMFocuser, ...] = (), - kmirrors: tuple[LVMKMirror, ...] = (), - fiberselectors: tuple[LVMFibselector, ...] = (), **kwargs, ): super().__init__(*args, **kwargs) @@ -59,56 +43,10 @@ def __init__( } self.load_schema(self.schema, is_file=False) - self.telescopes = {s.name: s for s in telescopes} - self.eastcameras = {s.name: s for s in eastcameras} - self.westcameras = {s.name: s for s in westcameras} - self.focusers = {s.name: s for s in focusers} - self.kmirrors = {s.name: s for s in kmirrors} - self.fibserselctors = {s.name: s for s in fiberselectors} - @classmethod def from_config(cls, config, *args, **kwargs): instance = super(lvmagp, cls).from_config(config, *args, **kwargs) assert isinstance(instance, lvmagp) assert isinstance(instance.config, dict) - for (ctrname, ctr) in instance.config.items(): - if ctrname in tel_list: - # print(ctrname, ctr) - instance.telescopes.update({ctrname: LVMTelescope(ctrname, "KHU")}) - - instance.eastcameras.update({ctrname: LVMEastCamera(ctrname)}) - instance.eastcameras[ctrname].pixelscale = ctr["age"]["pixelscale"] - instance.eastcameras[ctrname].offset_x = ctr["age"]["offset_x"] - instance.eastcameras[ctrname].offset_y = ctr["age"]["offset_y"] - instance.eastcameras[ctrname].rotationangle = ctr["age"][ - "rotationangle" - ] - - instance.westcameras.update({ctrname: LVMWestCamera(ctrname)}) - instance.westcameras[ctrname].pixelscale = ctr["agw"]["pixelscale"] - instance.westcameras[ctrname].offset_x = ctr["agw"]["offset_x"] - instance.westcameras[ctrname].offset_y = ctr["agw"]["offset_y"] - instance.westcameras[ctrname].rotationangle = ctr["agw"][ - "rotationangle" - ] - - instance.focusers.update({ctrname: LVMFocuser(ctrname)}) - - instance.kmirrors.update({ctrname: LVMKMirror(ctrname)}) - - instance.fibserselctors.update({ctrname: LVMFibselector(ctrname)}) - - # print(ctrname,ctr) - - # print(instance.telescopes) - - instance.parser_args = [ - instance.telescopes, - instance.eastcameras, - instance.westcameras, - instance.focusers, - instance.kmirrors, - instance.fibserselctors - ] return instance diff --git a/python/lvmagp/actor/astrometry_result.txt b/python/lvmagp/actor/astrometry_result.txt index 35ce3c2..1ad7e8e 100644 --- a/python/lvmagp/actor/astrometry_result.txt +++ b/python/lvmagp/actor/astrometry_result.txt @@ -1,24 +1,221 @@ -Reading input file 1 of 1: "/home/sumin/lvmcam/python/lvmcam/assets/testshot.fits"... +Reading input file 1 of 1: "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/2459550/sci.agw-00000061.fits"... Extracting sources... -This looks like a multi-color image: processing the first image plane only. (NAXIS=3) Downsampling by 2... -simplexy: found 611 sources. +simplexy: found 204 sources. Solving... -Reading file "/home/sumin/lvmcam/python/lvmcam/assets/testshot.axy"... -Only searching for solutions within 3 degrees of RA,Dec (105,0) +Reading file "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/2459550/sci.agw-00000061.axy"... +Field 1 did not solve (index index-4219.fits, field objects 1-10). +Field 1 did not solve (index index-4218.fits, field objects 1-10). +Field 1 did not solve (index index-4217.fits, field objects 1-10). +Field 1 did not solve (index index-4216.fits, field objects 1-10). +Field 1 did not solve (index index-4215.fits, field objects 1-10). +Field 1 did not solve (index index-4214.fits, field objects 1-10). +Field 1 did not solve (index index-4213.fits, field objects 1-10). +Field 1 did not solve (index index-4212.fits, field objects 1-10). Field 1 did not solve (index index-4211.fits, field objects 1-10). Field 1 did not solve (index index-4210.fits, field objects 1-10). Field 1 did not solve (index index-4209.fits, field objects 1-10). - log-odds ratio 150.194 (1.69249e+65), 27 match, 0 conflict, 194 distractors, 33 index. - RA,Dec = (105,0.00107933), pixel scale 2.5971 arcsec/pix. - Hit/miss: Hit/miss: +++++--++++-++--++-------++------------+-+-+-------------------+-++-------------------+------------- -Field 1: solved with index index-4208.fits. -Field 1 solved: writing to file /home/sumin/lvmcam/python/lvmcam/assets/testshot.solved to indicate this. -Field: /home/sumin/lvmcam/python/lvmcam/assets/testshot.fits -Field center: (RA,Dec) = (105.000696, 0.001028) deg. -Field center: (RA H:M:S, Dec D:M:S) = (07:00:00.167, +00:00:03.702). -Field size: 69.2444 x 47.6004 arcminutes -Field rotation angle: up is 143.535 degrees E of N +Field 1 did not solve (index index-4208.fits, field objects 1-10). +Field 1 did not solve (index index-4207-11.fits, field objects 1-10). +Field 1 did not solve (index index-4207-10.fits, field objects 1-10). +Field 1 did not solve (index index-4207-09.fits, field objects 1-10). +Field 1 did not solve (index index-4207-08.fits, field objects 1-10). +Field 1 did not solve (index index-4207-07.fits, field objects 1-10). +Field 1 did not solve (index index-4207-06.fits, field objects 1-10). +Field 1 did not solve (index index-4207-05.fits, field objects 1-10). +Field 1 did not solve (index index-4207-04.fits, field objects 1-10). +Field 1 did not solve (index index-4207-03.fits, field objects 1-10). +Field 1 did not solve (index index-4207-02.fits, field objects 1-10). +Field 1 did not solve (index index-4207-01.fits, field objects 1-10). +Field 1 did not solve (index index-4207-00.fits, field objects 1-10). +Field 1 did not solve (index index-4206-11.fits, field objects 1-10). +Field 1 did not solve (index index-4206-10.fits, field objects 1-10). +Field 1 did not solve (index index-4206-09.fits, field objects 1-10). +Field 1 did not solve (index index-4206-08.fits, field objects 1-10). +Field 1 did not solve (index index-4206-07.fits, field objects 1-10). +Field 1 did not solve (index index-4206-06.fits, field objects 1-10). +Field 1 did not solve (index index-4206-05.fits, field objects 1-10). +Field 1 did not solve (index index-4206-04.fits, field objects 1-10). +Field 1 did not solve (index index-4206-03.fits, field objects 1-10). +Field 1 did not solve (index index-4206-02.fits, field objects 1-10). +Field 1 did not solve (index index-4206-01.fits, field objects 1-10). +Field 1 did not solve (index index-4206-00.fits, field objects 1-10). +Field 1 did not solve (index index-4205-11.fits, field objects 1-10). +Field 1 did not solve (index index-4205-10.fits, field objects 1-10). +Field 1 did not solve (index index-4205-09.fits, field objects 1-10). +Field 1 did not solve (index index-4205-08.fits, field objects 1-10). +Field 1 did not solve (index index-4205-07.fits, field objects 1-10). +Field 1 did not solve (index index-4205-06.fits, field objects 1-10). +Field 1 did not solve (index index-4205-05.fits, field objects 1-10). +Field 1 did not solve (index index-4205-04.fits, field objects 1-10). +Field 1 did not solve (index index-4205-03.fits, field objects 1-10). +Field 1 did not solve (index index-4205-02.fits, field objects 1-10). +Field 1 did not solve (index index-4205-01.fits, field objects 1-10). +Field 1 did not solve (index index-4205-00.fits, field objects 1-10). +Field 1 did not solve (index index-4204-47.fits, field objects 1-10). +Field 1 did not solve (index index-4204-46.fits, field objects 1-10). +Field 1 did not solve (index index-4204-45.fits, field objects 1-10). +Field 1 did not solve (index index-4204-44.fits, field objects 1-10). +Field 1 did not solve (index index-4204-43.fits, field objects 1-10). +Field 1 did not solve (index index-4204-42.fits, field objects 1-10). +Field 1 did not solve (index index-4204-41.fits, field objects 1-10). +Field 1 did not solve (index index-4204-40.fits, field objects 1-10). +Field 1 did not solve (index index-4204-39.fits, field objects 1-10). +Field 1 did not solve (index index-4204-38.fits, field objects 1-10). +Field 1 did not solve (index index-4204-37.fits, field objects 1-10). +Field 1 did not solve (index index-4204-36.fits, field objects 1-10). +Field 1 did not solve (index index-4204-35.fits, field objects 1-10). +Field 1 did not solve (index index-4204-34.fits, field objects 1-10). +Field 1 did not solve (index index-4204-33.fits, field objects 1-10). +Field 1 did not solve (index index-4204-32.fits, field objects 1-10). +Field 1 did not solve (index index-4204-31.fits, field objects 1-10). +Field 1 did not solve (index index-4204-30.fits, field objects 1-10). +Field 1 did not solve (index index-4204-29.fits, field objects 1-10). +Field 1 did not solve (index index-4204-28.fits, field objects 1-10). +Field 1 did not solve (index index-4204-27.fits, field objects 1-10). +Field 1 did not solve (index index-4204-26.fits, field objects 1-10). +Field 1 did not solve (index index-4204-25.fits, field objects 1-10). +Field 1 did not solve (index index-4204-24.fits, field objects 1-10). +Field 1 did not solve (index index-4204-23.fits, field objects 1-10). +Field 1 did not solve (index index-4204-22.fits, field objects 1-10). +Field 1 did not solve (index index-4204-21.fits, field objects 1-10). +Field 1 did not solve (index index-4204-20.fits, field objects 1-10). +Field 1 did not solve (index index-4204-19.fits, field objects 1-10). +Field 1 did not solve (index index-4204-18.fits, field objects 1-10). +Field 1 did not solve (index index-4204-17.fits, field objects 1-10). +Field 1 did not solve (index index-4204-16.fits, field objects 1-10). +Field 1 did not solve (index index-4204-15.fits, field objects 1-10). +Field 1 did not solve (index index-4204-14.fits, field objects 1-10). +Field 1 did not solve (index index-4204-13.fits, field objects 1-10). +Field 1 did not solve (index index-4204-12.fits, field objects 1-10). +Field 1 did not solve (index index-4204-11.fits, field objects 1-10). +Field 1 did not solve (index index-4204-10.fits, field objects 1-10). +Field 1 did not solve (index index-4204-09.fits, field objects 1-10). +Field 1 did not solve (index index-4204-08.fits, field objects 1-10). +Field 1 did not solve (index index-4204-07.fits, field objects 1-10). +Field 1 did not solve (index index-4204-06.fits, field objects 1-10). +Field 1 did not solve (index index-4204-05.fits, field objects 1-10). +Field 1 did not solve (index index-4204-04.fits, field objects 1-10). +Field 1 did not solve (index index-4204-03.fits, field objects 1-10). +Field 1 did not solve (index index-4204-02.fits, field objects 1-10). +Field 1 did not solve (index index-4204-01.fits, field objects 1-10). +Field 1 did not solve (index index-4204-00.fits, field objects 1-10). +Field 1 did not solve (index index-4203-47.fits, field objects 1-10). +Field 1 did not solve (index index-4203-46.fits, field objects 1-10). +Field 1 did not solve (index index-4203-45.fits, field objects 1-10). +Field 1 did not solve (index index-4203-44.fits, field objects 1-10). +Field 1 did not solve (index index-4203-43.fits, field objects 1-10). +Field 1 did not solve (index index-4203-42.fits, field objects 1-10). +Field 1 did not solve (index index-4203-41.fits, field objects 1-10). +Field 1 did not solve (index index-4203-40.fits, field objects 1-10). +Field 1 did not solve (index index-4203-39.fits, field objects 1-10). +Field 1 did not solve (index index-4203-38.fits, field objects 1-10). +Field 1 did not solve (index index-4203-37.fits, field objects 1-10). +Field 1 did not solve (index index-4203-36.fits, field objects 1-10). +Field 1 did not solve (index index-4203-35.fits, field objects 1-10). +Field 1 did not solve (index index-4203-34.fits, field objects 1-10). +Field 1 did not solve (index index-4203-33.fits, field objects 1-10). +Field 1 did not solve (index index-4203-32.fits, field objects 1-10). +Field 1 did not solve (index index-4203-31.fits, field objects 1-10). +Field 1 did not solve (index index-4203-30.fits, field objects 1-10). +Field 1 did not solve (index index-4203-29.fits, field objects 1-10). +Field 1 did not solve (index index-4203-28.fits, field objects 1-10). +Field 1 did not solve (index index-4203-27.fits, field objects 1-10). +Field 1 did not solve (index index-4203-26.fits, field objects 1-10). +Field 1 did not solve (index index-4203-25.fits, field objects 1-10). +Field 1 did not solve (index index-4203-24.fits, field objects 1-10). +Field 1 did not solve (index index-4203-23.fits, field objects 1-10). +Field 1 did not solve (index index-4203-22.fits, field objects 1-10). +Field 1 did not solve (index index-4203-21.fits, field objects 1-10). +Field 1 did not solve (index index-4203-20.fits, field objects 1-10). +Field 1 did not solve (index index-4203-19.fits, field objects 1-10). +Field 1 did not solve (index index-4203-18.fits, field objects 1-10). +Field 1 did not solve (index index-4203-17.fits, field objects 1-10). +Field 1 did not solve (index index-4203-16.fits, field objects 1-10). +Field 1 did not solve (index index-4203-15.fits, field objects 1-10). +Field 1 did not solve (index index-4203-14.fits, field objects 1-10). +Field 1 did not solve (index index-4203-13.fits, field objects 1-10). +Field 1 did not solve (index index-4203-12.fits, field objects 1-10). +Field 1 did not solve (index index-4203-11.fits, field objects 1-10). +Field 1 did not solve (index index-4203-10.fits, field objects 1-10). +Field 1 did not solve (index index-4203-09.fits, field objects 1-10). +Field 1 did not solve (index index-4203-08.fits, field objects 1-10). +Field 1 did not solve (index index-4203-07.fits, field objects 1-10). +Field 1 did not solve (index index-4203-06.fits, field objects 1-10). +Field 1 did not solve (index index-4203-05.fits, field objects 1-10). +Field 1 did not solve (index index-4203-04.fits, field objects 1-10). +Field 1 did not solve (index index-4203-03.fits, field objects 1-10). +Field 1 did not solve (index index-4203-02.fits, field objects 1-10). +Field 1 did not solve (index index-4203-01.fits, field objects 1-10). +Field 1 did not solve (index index-4203-00.fits, field objects 1-10). +Field 1 did not solve (index index-4202-47.fits, field objects 1-10). +Field 1 did not solve (index index-4202-46.fits, field objects 1-10). +Field 1 did not solve (index index-4202-45.fits, field objects 1-10). +Field 1 did not solve (index index-4202-44.fits, field objects 1-10). +Field 1 did not solve (index index-4202-43.fits, field objects 1-10). +Field 1 did not solve (index index-4202-42.fits, field objects 1-10). +Field 1 did not solve (index index-4202-41.fits, field objects 1-10). +Field 1 did not solve (index index-4202-40.fits, field objects 1-10). +Field 1 did not solve (index index-4202-39.fits, field objects 1-10). +Field 1 did not solve (index index-4202-38.fits, field objects 1-10). +Field 1 did not solve (index index-4202-37.fits, field objects 1-10). +Field 1 did not solve (index index-4202-36.fits, field objects 1-10). +Field 1 did not solve (index index-4202-35.fits, field objects 1-10). +Field 1 did not solve (index index-4202-34.fits, field objects 1-10). +Field 1 did not solve (index index-4202-33.fits, field objects 1-10). +Field 1 did not solve (index index-4202-32.fits, field objects 1-10). +Field 1 did not solve (index index-4202-31.fits, field objects 1-10). +Field 1 did not solve (index index-4202-30.fits, field objects 1-10). +Field 1 did not solve (index index-4202-29.fits, field objects 1-10). +Field 1 did not solve (index index-4202-28.fits, field objects 1-10). +Field 1 did not solve (index index-4202-27.fits, field objects 1-10). +Field 1 did not solve (index index-4202-26.fits, field objects 1-10). +Field 1 did not solve (index index-4202-25.fits, field objects 1-10). +Field 1 did not solve (index index-4202-24.fits, field objects 1-10). +Field 1 did not solve (index index-4202-23.fits, field objects 1-10). +Field 1 did not solve (index index-4202-22.fits, field objects 1-10). +Field 1 did not solve (index index-4202-21.fits, field objects 1-10). +Field 1 did not solve (index index-4202-20.fits, field objects 1-10). +Field 1 did not solve (index index-4202-19.fits, field objects 1-10). +Field 1 did not solve (index index-4202-18.fits, field objects 1-10). +Field 1 did not solve (index index-4202-17.fits, field objects 1-10). +Field 1 did not solve (index index-4202-16.fits, field objects 1-10). +Field 1 did not solve (index index-4202-15.fits, field objects 1-10). +Field 1 did not solve (index index-4202-14.fits, field objects 1-10). +Field 1 did not solve (index index-4202-13.fits, field objects 1-10). +Field 1 did not solve (index index-4202-12.fits, field objects 1-10). +Field 1 did not solve (index index-4202-11.fits, field objects 1-10). +Field 1 did not solve (index index-4202-10.fits, field objects 1-10). +Field 1 did not solve (index index-4202-09.fits, field objects 1-10). +Field 1 did not solve (index index-4202-08.fits, field objects 1-10). +Field 1 did not solve (index index-4202-07.fits, field objects 1-10). +Field 1 did not solve (index index-4202-06.fits, field objects 1-10). +Field 1 did not solve (index index-4202-05.fits, field objects 1-10). +Field 1 did not solve (index index-4202-04.fits, field objects 1-10). +Field 1 did not solve (index index-4202-03.fits, field objects 1-10). +Field 1 did not solve (index index-4202-02.fits, field objects 1-10). +Field 1 did not solve (index index-4202-01.fits, field objects 1-10). +Field 1 did not solve (index index-4202-00.fits, field objects 1-10). +Field 1 did not solve (index index-4119.fits, field objects 1-10). +Field 1 did not solve (index index-4118.fits, field objects 1-10). +Field 1 did not solve (index index-4117.fits, field objects 1-10). +Field 1 did not solve (index index-4116.fits, field objects 1-10). +Field 1 did not solve (index index-4115.fits, field objects 1-10). +Field 1 did not solve (index index-4114.fits, field objects 1-10). +Field 1 did not solve (index index-4113.fits, field objects 1-10). +Field 1 did not solve (index index-4112.fits, field objects 1-10). +Field 1 did not solve (index index-4111.fits, field objects 1-10). +Field 1 did not solve (index index-4110.fits, field objects 1-10). + log-odds ratio 112.466 (6.9726e+48), 14 match, 0 conflict, 13 distractors, 18 index. + RA,Dec = (23.2259,30.6133), pixel scale 2.59927 arcsec/pix. + Hit/miss: Hit/miss: +++-++-+-++-+-++--+-+-----+(best)------------------------------------------------------------------------- +Field 1: solved with index index-4109.fits. +Field 1 solved: writing to file /home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/2459550/sci.agw-00000061.solved to indicate this. +Field: /home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/2459550/sci.agw-00000061.fits +Field center: (RA,Dec) = (23.226178, 30.613631) deg. +Field center: (RA H:M:S, Dec D:M:S) = (01:32:54.283, +30:36:49.071). +Field size: 69.2351 x 47.6152 arcminutes +Field rotation angle: up is 108.942 degrees E of N Field parity: pos -Creating new FITS file "/home/sumin/lvmcam/python/lvmcam/assets/testshot.new"... +Creating new FITS file "/home/hojae/Desktop/lvmagp/testimg/autoguide_sample/assets/2459550/sci.agw-00000061.new"... diff --git a/python/lvmagp/actor/commands/autofocus.py b/python/lvmagp/actor/commands/autofocus.py index 5b5af8d..c08ae1e 100644 --- a/python/lvmagp/actor/commands/autofocus.py +++ b/python/lvmagp/actor/commands/autofocus.py @@ -1,17 +1,7 @@ import click from clu.command import Command -from lvmagp.actor.commfunc import ( - LVMEastCamera, - LVMFibselector, # noqa: F401 - LVMFocuser, - LVMKMirror, - LVMTelescope, - LVMTelescopeUnit, - LVMWestCamera, -) -from lvmagp.actor.internalfunc import GuideImage -from lvmagp.actor.user_parameters import usrpars +from lvmagp.actor.commfunc import LVMTelescopeUnit from . import command_parser as parser @@ -23,15 +13,7 @@ def autofocus(*args): @autofocus.command() @click.argument("TEL", type=str) -async def coarse( - command: Command, - telescopes: dict[str, LVMTelescope], - eastcameras: dict[str, LVMEastCamera], - westcameras: dict[str, LVMWestCamera], - focusers: dict[str, LVMFocuser], - kmirrors: dict[str, LVMKMirror], - tel: str, -): +async def coarse(command: Command, tel: str): """ Find the focus coarsely by scanning whole reachable position. @@ -59,41 +41,3 @@ async def fine(command: Command, tel: str): del telunit return command.finish(text="Auto-focus done") - - -async def get_fwhm( - command: Command, - telescopes: dict[str, LVMTelescope], - eastcameras: dict[str, LVMEastCamera], - westcameras: dict[str, LVMWestCamera], - focusers: dict[str, LVMFocuser], - kmirrors: dict[str, LVMKMirror], - tel: str, - starlist=None, -): - """ - Take a testshot and return FWHM of the image. - - Parameters - ---------- - tel - The telescope to be focused - starlist - List of stars whose FWHMs will be measured - If ''starlist`` is None, this function finds star in the testshot. - """ - exptime = usrpars.af_exptime - - try: - imgcmd = await westcameras[tel].test_exposure(command, exptime) - except Exception: - return command.fail(fail="Camera error") - - guideimg = GuideImage(imgcmd) - if starlist is not None: - guideimg.guidestarposition = starlist - guideimg.update_guidestar_properties() - else: - guideimg.findstars() - - return guideimg.FWHM diff --git a/python/lvmagp/actor/commands/guide.py b/python/lvmagp/actor/commands/guide.py index e31fe56..139aad5 100644 --- a/python/lvmagp/actor/commands/guide.py +++ b/python/lvmagp/actor/commands/guide.py @@ -4,9 +4,9 @@ import numpy as np from clu.command import Command +from lvmagp.actor.commfunc import LVMEastCamera # noqa: F401 from lvmagp.actor.commfunc import ( - LVMEastCamera, # noqa: F401 - LVMFibselector, + LVMFiborselector, LVMFocuser, LVMKMirror, LVMTelescope, @@ -218,12 +218,12 @@ async def calibration( print(yoffsets) xscale_ra = ( - np.sum(xoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / - offset_per_step + np.sum(xoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) + / offset_per_step ) # exclude the first index (0,0) yscale_ra = ( - np.sum(yoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / - offset_per_step + np.sum(yoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) + / offset_per_step ) # exclude the first index (0,0) telescopes[tel].scale_matrix = np.linalg.inv( @@ -382,7 +382,8 @@ async def autoguiding( if ( np.abs( np.average(starflux / initflux - 1, weights=2.5 * np.log10(initflux * 10)) - ) > usrpars.ag_flux_tolerance + ) + > usrpars.ag_flux_tolerance ): return command.error( "Star flux variation %.3f is too large." diff --git a/python/lvmagp/actor/commands/slew.py b/python/lvmagp/actor/commands/slew.py index 7319d06..5955fed 100644 --- a/python/lvmagp/actor/commands/slew.py +++ b/python/lvmagp/actor/commands/slew.py @@ -1,21 +1,7 @@ -import asyncio - import click -import numpy as np -from astropy import units as u -from astropy.coordinates import Angle from clu.command import Command -from lvmagp.actor.commfunc import ( - LVMEastCamera, # noqa: F401 - LVMFibselector, - LVMFocuser, - LVMKMirror, - LVMTelescope, - LVMWestCamera, -) -from lvmagp.actor.internalfunc import GuideImage, cal_pa, check_target -from lvmagp.actor.user_parameters import usrpars +from lvmagp.actor.commfunc import LVMTelescopeUnit from . import command_parser as parser @@ -26,11 +12,6 @@ @click.argument("TARGET_DEC_D", type=float) async def slew( command: Command, - telescopes: dict[str, LVMTelescope], - eastcameras: dict[str, LVMEastCamera], - westcameras: dict[str, LVMWestCamera], - focusers: dict[str, LVMFocuser], - kmirrors: dict[str, LVMKMirror], tel: str, target_ra_h: float, target_dec_d: float, @@ -48,102 +29,8 @@ async def slew( The declination (J2000) of the target in degrees """ - long_d = telescopes[tel].longitude - lat_d = telescopes[tel].latitude - - cmd = [] - - # Check the target is in reachable area - if not check_target(target_ra_h, target_dec_d, long_d, lat_d): - return command.fail(fail="Target is over the limit") - - # Calculate position angle and rotate K-mirror :: should be changed to traj method. - target_pa_d = cal_pa(target_ra_h, target_dec_d, long_d, lat_d) - command.info("Rotate K-mirror to pa = %.3f deg" % target_pa_d) - cmd.append(kmirrors[tel].moveabs(command, target_pa_d, "DEG")) - - # send slew command to lvmpwi - try: - await telescopes[tel].reset_offset_radec(command) - command.info("Telescope slewing ...") - cmd.append(telescopes[tel].slew_radec2000(command, target_ra_h, target_dec_d)) - - except Exception: - return command.fail(fail="Telescope error") - await asyncio.gather(*cmd) - - command.info("Initial slew completed.") - - for iter in range(usrpars.aqu_max_iter + 1): - command.info("Taking image...") - # take an image for astrometry - try: - imgcmd = [] - imgcmd.append(westcameras[tel].test_exposure(command, usrpars.aqu_exptime)) - imgcmd.append(eastcameras[tel].test_exposure(command, usrpars.aqu_exptime)) - guideimgpath = await asyncio.gather(*imgcmd) - - except Exception: - return command.fail(fail="Camera error") - - command.info("Astrometry ...") - - westguideimg = GuideImage(guideimgpath[0]) - eastguideimg = GuideImage(guideimgpath[1]) - - try: - astcmd = [] - astcmd.append(westguideimg.astrometry(ra_h=target_ra_h, dec_d=target_dec_d)) - astcmd.append(eastguideimg.astrometry(ra_h=target_ra_h, dec_d=target_dec_d)) - cmd = await asyncio.gather(*astcmd) - - except Exception: - return command.fail(text="Astrometry timeout") - - ra2000_d = 0.5 * (eastguideimg.ra2000 + westguideimg.ra2000) - dec2000_d = 0.5 * (eastguideimg.dec2000 + westguideimg.dec2000) - pa_d = 0.5 * (eastguideimg.pa + westguideimg.pa) - westcameras[tel].rotationangle = westguideimg.pa - eastcameras[tel].rotationangle = eastguideimg.pa - - ra2000 = Angle(ra2000_d, u.degree) - dec2000 = Angle(dec2000_d, u.degree) - - target_ra = Angle(target_ra_h, u.hour) - target_dec = Angle(target_dec_d, u.degree) - - comp_ra_arcsec = (target_ra - ra2000).arcsecond - comp_dec_arcsec = (target_dec - dec2000).arcsecond - - command.info( - Img_ra2000=ra2000.to_string(unit=u.hour), - Img_dec2000=dec2000.to_string(unit=u.degree), - Img_pa="%.3f deg" % pa_d, - offset_ra="%.3f arcsec" % comp_ra_arcsec, - offset_dec="%.3f arcsec" % comp_dec_arcsec, - ) - - # Compensation // Compensation for K-mirror based on astrometry result? - # may be by offset method.. - - if ( - np.sqrt(comp_ra_arcsec ** 2 + comp_dec_arcsec ** 2) > - usrpars.aqu_tolerance_arcsec - ): - if iter >= usrpars.aqu_max_iter: - return command.fail(fail="Compensation failed.") - else: - command.info(text="Compensating ...") - cmd = [] - cmd.append(kmirrors[tel].moverel(command, -pa_d, "DEG")) - cmd.append( - telescopes[tel].offset_radec( - command, comp_ra_arcsec, comp_dec_arcsec - ) - ) - await asyncio.gather(*cmd) - - else: - break + telunit = LVMTelescopeUnit(tel) + telunit.slew_radec2000(target_ra_h=target_ra_h, target_dec_d=target_dec_d) + del telunit return command.finish(text="Acquisition done") diff --git a/python/lvmagp/actor/commands/test.py b/python/lvmagp/actor/commands/test.py index e69de29..cffdc66 100644 --- a/python/lvmagp/actor/commands/test.py +++ b/python/lvmagp/actor/commands/test.py @@ -0,0 +1,4 @@ +from lvmagp.actor.commfunc import LVMTelescopeUnit + + +sci = LVMTelescopeUnit("sci") diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index 0e45502..f75644b 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -1,14 +1,32 @@ +import datetime +import logging import sys import uuid +from multiprocessing import Manager, Process +import astropy.units as u import numpy as np +from astropy.coordinates import Angle from clu import AMQPClient from cluplus.proxy import Proxy, invoke from lvmtipo.site import Site -from lvmagp.actor.internalfunc import GuideImage, findfocus, send_message +from sdsstools import get_logger + +from lvmagp.actor.internalfunc import ( + GuideImage, + cal_pa, + check_target, + define_visb_limit, + findfocus, +) from lvmagp.actor.user_parameters import temp_vs_focus, usrpars -from lvmagp.exceptions import LvmagpFocuserError +from lvmagp.exceptions import ( + LvmagpAcquisitionFailed, + LvmagpActorMissing, + LvmagpInterlockEngaged, + LvmagpTargetOverTheLimit, +) class LVMFocuser: @@ -32,7 +50,8 @@ def __init__(self, tel, amqpc): self._foc.start() except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise def focusoffset(self, delta_f=None): """ @@ -43,12 +62,13 @@ def focusoffset(self, delta_f=None): """ try: + self.amqpc.log.debug(f"{datetime.datetime.now()} | Move focus by {delta_f}") self._foc.moveRelative(delta_f, unit="STEPS") except Exception as e: - self.amqpc.log.error(f"Exception: {e}") - return False - + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise + self.amqpc.log.debug(f"{datetime.datetime.now()} | Move focus done") return True def focus(self, value=None, temperature=None): @@ -62,15 +82,25 @@ def focus(self, value=None, temperature=None): Returns: None """ + try: if value is not None: + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Move focus to {value}" + ) self._foc.moveAbsolute(value, unit="STEPS") else: temp_value = temp_vs_focus(temperature=temperature) + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Move focus to {value} (estimated)" + ) self._foc.moveAbsolute(temp_value, unit="STEPS") except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise + + self.amqpc.log.debug(f"{datetime.datetime.now()} | Move focus done") def getfocusposition(self, unit="STEPS"): """ @@ -84,9 +114,12 @@ def getfocusposition(self, unit="STEPS"): try: position = self._foc.getPosition(unit=unit)["Position"] except Exception as e: - self.amqpc.log.error(f"Exception: {e}") - raise LvmagpFocuserError + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise + self.amqpc.log.info( + f"{datetime.datetime.now()} | Current focus position: {position}" + ) return position @@ -109,13 +142,33 @@ def __init__(self, tel, amqpc): self._km.start() except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise async def cal_traj(self, command): pass + def derotate(self, pa=None): + """ + Derotate the field to correct the given position angle. -class LVMFibselector: + Parameters + ---------- + pa + Target position angle to be corrected + """ + + try: + self.amqpc.log.debug(f"{datetime.datetime.now()} | Move Kmirror to {pa}") + self._km.moveAbsolute(pa, unit="DEG") + + except Exception as e: + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise + self.amqpc.log.debug(f"{datetime.datetime.now()} | Move Kmirror done") + + +class LVMFiberselector: """ Class for the fiber selectors @@ -134,7 +187,8 @@ def __init__(self, tel, amqpc): self._fibsel.start() except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise class LVMTelescope: @@ -168,7 +222,8 @@ def __init__(self, tel, amqpc, sitename="LCO"): self._pwi.start() except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise def goto_park(self): """ @@ -177,9 +232,11 @@ def goto_park(self): ====== Comments and desired actions: - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - if interlock is engaged, do not move the telescope. Return error message + (assume people are inside dome) - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), abort observation (halt in LVMI_interface) and park telescope + - if not idle (i.e. carrying out any observations or calibrations), + abort observation (halt in LVMI_interface) and park telescope (in this case, we assume user wants to park due to an emergency) """ pass @@ -191,15 +248,16 @@ def goto_zenith(self): ====== Comments and desired actions: - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - if interlock is engaged, do not move the telescope. + Return error message (assume people are inside dome) - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, - then move telescope. Regularly give updates (i.e. "waiting for instrument to become idle before moving telescope") + - if not idle (i.e. carrying out any observations or calibrations), + repeat status command regularly until it returns idle, + then move telescope. Regularly give updates + (i.e. "waiting for instrument to become idle before moving telescope") """ - pass - - async def slew_radec2000(self, command, target_ra_h, target_dec_d): + def slew_radec2000(self, target_ra_h, target_dec_d): """ Slew the telescope to given equatorial coordinates whose epoch is J2000. @@ -211,25 +269,53 @@ async def slew_radec2000(self, command, target_ra_h, target_dec_d): Target declination in degrees in J2000 epoch """ try: - self._pwi.gotoRaDecJ2000() + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Start to slew telescope to RA {target_ra_h}, Dec {target_dec_d}." # noqa: E501 + ) + self._pwi.gotoRaDecJ2000(ra_h=target_ra_h, deg_d=target_dec_d) except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") + raise + self.amqpc.log.debug(f"{datetime.datetime.now()} | Slew completed.") - cmd = await send_message( - command, self.lvmpwi, "gotoRaDecJ2000 %f %f" % (target_ra_h, target_dec_d) - ) - return cmd + def slew_altaz(self, target_alt_d, target_az_d): + """ + Slew the telescope to given horizontal coordinates. + + Parameters + ---------- + target_alt_d + Target altitude in degree + target_az_d + Target azimuth in degree + """ + try: + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Start to slew telescope to Alt {target_alt_d}, Az {target_az_d}." # noqa: E501 + ) + self._pwi.gotoRaDecJ2000(alt_d=target_alt_d, az_d=target_az_d) + except Exception as e: + self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") + raise + self.amqpc.log.debug(f"{datetime.datetime.now()} | Slew completed.") - async def reset_offset_radec(self, command): + def reset_offset_radec(self): """ Reset the offset of both axes to zero. """ - await send_message(command, self.lvmpwi, "offset --ra_reset") - await send_message(command, self.lvmpwi, "offset --dec_reset") - - return True + try: + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Set telescope offsets to zero." + ) + self._pwi.offset(ra_reset=0, dec_reset=0) + except Exception as e: + self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") + raise + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Zero offset setting completed." + ) - async def offset_radec(self, command, ra_arcsec, dec_arcsec): + def offset_radec(self, ra_arcsec, dec_arcsec): """ Give some offset to the mount @@ -240,24 +326,28 @@ async def offset_radec(self, command, ra_arcsec, dec_arcsec): dec_arcsec Distance to move along declination axis in arcseconds """ - await send_message( - command, self.lvmpwi, "offset --dec_add_arcsec %f" % dec_arcsec - ) - await send_message( - command, self.lvmpwi, "offset --ra_add_arcsec %f" % ra_arcsec - ) - - return True + try: + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Set telescope offsets ra={ra_arcsec}, dec={dec_arcsec}" # noqa: E501 + ) + self._pwi.offset(ra_add_arcsec=ra_arcsec, dec_add_arcsec=dec_arcsec) + except Exception as e: + self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") + raise + self.amqpc.log.debug(f"{datetime.datetime.now()} | Set offset done") - async def get_dec2000_deg(self, command): + def get_dec2000_deg(self): """ Return the declination (J2000) of current position in degrees """ - dec2000 = await send_message( - command, self.lvmpwi, "status", returnval=True, body="dec_j2000_degs" - ) - return dec2000 + try: + status = self._pwi.status() + except Exception as e: + self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") + raise + + return status["dec_j2000_degs"] class LVMCamera: @@ -265,16 +355,12 @@ class LVMCamera: Class for the FLIR guide cameras """ - def __init__(self, amqpc): + def __init__(self): self.lvmcam = "lvmcam" # actor name self.camname = "" # cam name - self.offset_x = -999 - self.offset_y = -999 - self.pixelscale = -999 - self.rotationangle = -999 self.lvmcampath = "" - self.amqpc = amqpc + self.amqpc = None self._cam = None def single_exposure(self, exptime): @@ -286,7 +372,21 @@ def single_exposure(self, exptime): exptime Exposure time """ - path = self._cam.expose(exptime=exptime, num=1, camname=self.camname)["PATH"] + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Guider {self.camname} exposure started" + ) + + try: + path = self._cam.expose(exptime=exptime, num=1, camname=self.camname)[ + "PATH" + ] + except Exception as e: + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise + + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Guider {self.camname} exposure done" + ) return path["0"] @@ -300,9 +400,21 @@ def test_exposure(self, exptime): exptime Exposure time """ - path = self._cam.expose( - exptime=exptime, num=1, camname=self.camname, testshot=True - )["PATH"] + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Guider {self.camname} exposure started" + ) + + try: + path = self._cam.expose( + exptime=exptime, num=1, camname=self.camname, testshot=True + )["PATH"] + except Exception as e: + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise + + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Guider {self.camname} exposure done" + ) return path["0"] @@ -316,7 +428,15 @@ def bias_exposure(self, repeat): repeat The number of bias images """ - path = self._cam.expose(exptime=0, num=repeat, camname=self.camname)["PATH"] + try: + path = self._cam.expose(exptime=0, num=repeat, camname=self.camname)["PATH"] + except Exception as e: + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise + + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Guider {self.camname} exposure done" + ) return path.values() @@ -331,8 +451,9 @@ class LVMEastCamera(LVMCamera): Telescope to which the camera belongs """ - def __init__(self, tel): + def __init__(self, tel, amqpc): super().__init__() + self.amqpc = amqpc self.lvmcam = "lvm." + tel + ".age" self.camname = tel + ".age" @@ -340,7 +461,8 @@ def __init__(self, tel): self._cam = Proxy(self.amqpc, self.lvmcam) self._cam.start() except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise class LVMWestCamera(LVMCamera): @@ -353,8 +475,9 @@ class LVMWestCamera(LVMCamera): Telescope to which the camera belongs """ - def __init__(self, tel): + def __init__(self, tel, amqpc): super().__init__() + self.amqpc = amqpc self.lvmcam = "lvm." + tel + ".agw" self.camname = tel + ".agw" @@ -362,11 +485,12 @@ def __init__(self, tel): self._cam = Proxy(self.amqpc, self.lvmcam) self._cam.start() except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise class LVMTelescopeUnit( - LVMTelescope, LVMFocuser, LVMWestCamera, LVMEastCamera, LVMFibselector, LVMKMirror + LVMTelescope, LVMFocuser, LVMWestCamera, LVMEastCamera, LVMFiberselector, LVMKMirror ): def __init__( self, @@ -379,32 +503,56 @@ def __init__( enable_km=True, ): self.name = tel - self.amqpc = AMQPClient(name=f"{sys.argv[0]}.proxy-{uuid.uuid4().hex[:8]}") + self.log = get_logger(f"sdss-lvmagp-{tel}") + self.log.sh.setLevel(logging.DEBUG) + self.amqpc = AMQPClient( + name=f"{sys.argv[0]}.proxy-{uuid.uuid4().hex[:8]}", + log_dir="/home/hojae/Desktop/lvmagp/logs", + log=self.log, + ) + # log_dir => How to fix?? + self.__connect_actors( + enable_pwi, enable_foc, enable_agw, enable_age, enable_fibsel, enable_km + ) + self.__read_parameters() + def __connect_actors( + self, enable_pwi, enable_foc, enable_agw, enable_age, enable_fibsel, enable_km + ): try: if enable_pwi is True: - LVMTelescope.__init__(self.name, self.amqpc) + LVMTelescope.__init__(self, self.name, self.amqpc) if enable_foc is True: - LVMFocuser.__init__(self.name, self.amqpc) + LVMFocuser.__init__(self, self.name, self.amqpc) if enable_agw is True: - self.agw = LVMWestCamera(self.name) + self.agw = LVMWestCamera(self.name, self.amqpc) if enable_age is True: - self.age = LVMEastCamera(self.name) + self.age = LVMEastCamera(self.name, self.amqpc) if enable_fibsel is True: - LVMFibselector.__init__(self.name, self.amqpc) + LVMFiberselector.__init__(self, self.name, self.amqpc) if enable_km is True: - LVMKMirror.__init__(self.name, self.amqpc) + LVMKMirror.__init__(self, self.name, self.amqpc) + except Exception: + raise LvmagpActorMissing - except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.debug( + f"{datetime.datetime.now()} | All instrument actors are connected." + ) - def __del__(self): - self.amqpc.stop() + def __read_parameters(self): + # should be predefined somewhere... + self.offset_x = -999 + self.offset_y = -999 + self.pixelscale = -999 + self.rotationangle = -999 + + self.screen_alt_d = -999 + self.screen_az_d = -999 ############# Autofocus functions ######################### def coarse_autofocus(self): @@ -421,6 +569,10 @@ def fine_autofocus(self): incremental = usrpars.af_incremental repeat = usrpars.af_repeat + self.amqpc.log.info( + f"{datetime.datetime.now()} | (lvmagp) Fine autofocus start" + ) + # get current pos of focus stage currentposition = self.getfocusposition(unit="STEPS") @@ -433,6 +585,9 @@ def fine_autofocus(self): # Take picture & picture analysis FWHM_tmp = self.__get_fwhm() + self.amqpc.log.info( + f"{datetime.datetime.now()} | Focus at {currentposition}: {FWHM_tmp}" + ) FWHM.append(FWHM_tmp) for iteration in range(repeat - 1): @@ -448,6 +603,9 @@ def fine_autofocus(self): # Fitting bestposition, bestfocus = findfocus(position, FWHM) self.focus(value=bestposition) + self.amqpc.log.info( + f"{datetime.datetime.now()} | (lvmagp) Fine autofocus done: pos={bestposition}, focus={bestfocus}" # noqa: E501 + ) return bestposition, bestfocus @@ -469,7 +627,8 @@ def __get_fwhm(self): imgcmd_e = imgcmd_w except Exception as e: - self.amqpc.log.error(f"Exception: {e}") + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise guideimg_w = GuideImage(imgcmd_w["PATH"]["0"]) guideimg_w.findstars() @@ -480,35 +639,227 @@ def __get_fwhm(self): return FWHM ############# Slew functions ######################### - def goto_eq(self, ra, dec, PA=0, target="optical_axis", deg=True): + + def goto_eq( + self, + target_ra_h, + target_dec_d, + target_pa_d=0, + target="optical_axis", + ra_d=False, + ): """ - Point telescope to position using RA and dec + Point telescope to position using RA and dec (J2000). - ====== Comments and desired actions: - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - if interlock is engaged, do not move the telescope. + Return error message (assume people are inside dome) - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, - then move telescope. Regularly give updates (i.e. "waiting for instrument to become idle before moving telescope") - """ + - if not idle (i.e. carrying out any observations or calibrations), + repeat status command regularly until it returns idle, + then move telescope. Regularly give updates + (i.e. "waiting for instrument to become idle before moving telescope") - pass + Parameters + ---------- + target_ra_h + The right ascension (J2000) of the target in hours + target_dec_d + The declination (J2000) of the target in degrees + target_pa_d + Desired position angle of the image + target + ??? + ra_d + If ``True``, the RA of target should be given in degrees. + """ + if self.check_safety_interlock(): + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) safety interlock engaged" + ) + raise LvmagpInterlockEngaged + + # Check status to confirm the system is in idle state? + + # Check the target is in reachable area + long_d = self.latitude + lat_d = self.latitude + + if not check_target(target_ra_h, target_dec_d, long_d, lat_d): + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) Target is over the limit" + ) + raise LvmagpTargetOverTheLimit + + self.reset_offset_radec() + + # Calculate position angle and rotate K-mirror :: should be changed to traj method. + target_pa_d0 = cal_pa(target_ra_h, target_dec_d, long_d, lat_d) + + invoke( + self.derotate(target_pa_d0 + target_pa_d), + self.slew_radec2000(target_ra_h=target_ra_h, target_dec_d=target_dec_d), + ) + + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) Initial slew completed" + ) + + for iter in range(usrpars.aqu_max_iter + 1): + + # take an image for astrometry + guideimgpath = invoke( + self.agw.test_exposure(usrpars.aqu_exptime), + self.age.test_exposure(usrpars.aqu_exptime), + ) + + westguideimg = GuideImage(guideimgpath[0]) + eastguideimg = GuideImage(guideimgpath[1]) + + # astrometry + manager = Manager() + posinfo1 = manager.dict() + posinfo2 = manager.dict() + + processes = [] + processes.append( + Process( + target=westguideimg.astrometry, + args=(target_ra_h, target_dec_d, posinfo1), + ) + ) + processes.append( + Process( + target=eastguideimg.astrometry, + args=(target_ra_h, target_dec_d, posinfo2), + ) + ) + + for p in processes: + p.start() + + for p in processes: + p.join() + + westguideimg.ra2000 = posinfo1["ra"] + westguideimg.dec2000 = posinfo1["dec"] + westguideimg.pa = posinfo1["pa"] + eastguideimg.ra2000 = posinfo1["ra"] + eastguideimg.dec2000 = posinfo1["dec"] + eastguideimg.pa = posinfo1["pa"] + + ra2000_d = 0.5 * (eastguideimg.ra2000 + westguideimg.ra2000) + dec2000_d = 0.5 * (eastguideimg.dec2000 + westguideimg.dec2000) + pa_d = 0.5 * (eastguideimg.pa + westguideimg.pa) + # LVMWestCamera.rotationangle = westguideimg.pa should be defined to which place? + # LVMEastCamera.rotationangle = eastguideimg.pa should be defined to which place? + + ra2000 = Angle(ra2000_d, u.degree) + dec2000 = Angle(dec2000_d, u.degree) + + target_ra = Angle(target_ra_h, u.hour) + target_dec = Angle(target_dec_d, u.degree) + + comp_ra_arcsec = (target_ra - ra2000).arcsecond + comp_dec_arcsec = (target_dec - dec2000).arcsecond + + self.amqpc.log.info( + f"{datetime.datetime.now()} | (lvmagp) Astrometry result" + f"Img_ra2000={ra2000.to_string(unit=u.hour)}" + f"Img_dec2000={dec2000.to_string(unit=u.degree)}" + f"Img_pa={pa_d:%.3f} deg" + f"offset_ra={comp_ra_arcsec:%.3f} arcsec" + f"offset_dec={comp_dec_arcsec:%.3f} arcsec" + ) + + # Compensation // Compensation for K-mirror based on astrometry result? + # may be by offset method.. + if ( + np.sqrt(comp_ra_arcsec ** 2 + comp_dec_arcsec ** 2) > + usrpars.aqu_tolerance_arcsec + ): + if iter >= usrpars.aqu_max_iter: + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) Acquisition compensation failed" + ) + raise LvmagpAcquisitionFailed + else: + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) Compensate offset: #{iter}" + ) + invoke( + self.derotate(target_pa_d - pa_d), + self.offset_radec( + ra_arcsec=comp_ra_arcsec, dec_arcsec=comp_dec_arcsec + ), + ) + else: + break - def goto_aa(self, alt, az, PA=0, target="optical_axis", deg=True): + def goto_aa( + self, target_alt_d, target_az_d, target_pa_d=0, target="optical_axis", deg=True + ): """ Point telescope to position using alt/az (i.e. point to screen or manually park) + It does not run additional compensation based on astrometry. ====== Comments and desired actions: - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - if interlock is engaged, do not move the telescope. + Return error message (assume people are inside dome) - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, - then move telescope. Regularly give updates (i.e. "waiting for instrument to become idle before moving telescope") - """ + - if not idle (i.e. carrying out any observations or calibrations), + repeat status command regularly until it returns idle, + then move telescope. Regularly give updates + (i.e. "waiting for instrument to become idle before moving telescope") - pass + Parameters + ---------- + target_alt_d + Target altitude in degree + target_az_d + Target azimuth in degree + target_pa_d + Target position angle in degree + target + ??? + deg + ??? + """ + + if self.check_safety_interlock(): + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) safety interlock engaged" + ) + raise LvmagpInterlockEngaged + + # Check status to confirm the system is in idle state? + + # Check the target is in reachable area + alt_low, alt_high = define_visb_limit(target_az_d) + if not (alt_low < target_alt_d) or not (target_alt_d < alt_high): + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) Target is over the limit" + ) + raise LvmagpTargetOverTheLimit + + self.reset_offset_radec() + + # Calculate position angle and rotate K-mirror :: should be changed to traj method. + target_pa_d0 = ( + 0 # I dont know ... # cal_pa(target_ra_h, target_dec_d, long_d, lat_d) + ) + + invoke( + self.derotate(target_pa_d0 + target_pa_d), + self.slew_altaz(target_alt_d=target_alt_d, target_az_d=target_az_d), + ) + + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) Initial slew completed" + ) def goto_screen(self): """ @@ -517,13 +868,16 @@ def goto_screen(self): ====== Comments and desired actions: - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) + - if interlock is engaged, do not move the telescope. + Return error message (assume people are inside dome) - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, - then move telescope. Regularly give updates (i.e. "waiting for instrument to become idle before moving telescope") + - if not idle (i.e. carrying out any observations or calibrations), + repeat status command regularly until it returns idle, + then move telescope. Regularly give updates + (i.e. "waiting for instrument to become idle before moving telescope") """ - pass + self.goto_aa(target_alt_d=self.screen_alt_d, target_az_d=self.screen_az_d) ############# Autoguide functions ######################### def offset( @@ -577,3 +931,6 @@ def paoffset(self, delta_PA=None): """ pass + + def check_safety_interlock(self): + pass diff --git a/python/lvmagp/actor/internalfunc.py b/python/lvmagp/actor/internalfunc.py index 3894132..673f1b0 100644 --- a/python/lvmagp/actor/internalfunc.py +++ b/python/lvmagp/actor/internalfunc.py @@ -1,11 +1,9 @@ -import asyncio import os +import subprocess import warnings from datetime import datetime import numpy as np - -# import matplotlib.pyplot as plt from astropy.io import fits from astropy.modeling import fitting, models from astropy.stats import sigma_clipped_stats @@ -144,7 +142,7 @@ def update_guidestar_properties(self): return True - async def astrometry(self, ra_h=-999, dec_d=-999): + def astrometry(self, ra_h=-999, dec_d=-999, returndict=None): """ Conduct astrometry to find where the image is taken. Astromery result is saved in astrometry_result.txt in same directory with this python file, @@ -157,41 +155,69 @@ async def astrometry(self, ra_h=-999, dec_d=-999): dec_d The initial guess for declination (J2000) in degrees """ + + returndict["ra"] = -999.0 + returndict["dec"] = -999.0 + returndict["pa"] = -999.0 + ospassword = "0000" - resultpath = ( - os.path.dirname(os.path.abspath(__file__)) + "/astrometry_result.txt" - ) - timeout = 10 - scalelow = 2 - scalehigh = 3 - radius = 3 + pathsplit = self.filepath.split("/") + if "age" in pathsplit[-1]: + resultpath = ( + os.path.dirname(os.path.abspath(__file__)) + + "/astrometry_result_age.txt" + ) + elif "agw" in pathsplit[-1]: + resultpath = ( + os.path.dirname(os.path.abspath(__file__)) + + "/astrometry_result_agw.txt" + ) + else: + resultpath = ( + os.path.dirname(os.path.abspath(__file__)) + "/astrometry_result.txt" + ) + + timeout = 5.0 + scalelow = 2.0 + scalehigh = 3.0 + radius = 3.0 if ra_h == -999: - cmd = ( - "echo %s | sudo -S /usr/local/astrometry/bin/solve-field %s --cpulimit %f --overwrite \ + proc = subprocess.Popen( + [ + "echo %s | sudo -S /usr/local/astrometry/bin/solve-field %s --cpulimit %f --overwrite \ --downsample 2 --no-plots > %s" - % (ospassword, self.filepath, timeout, resultpath) + % (ospassword, self.filepath, timeout, resultpath) + ], + stdin=subprocess.PIPE, + stdout=subprocess.DEVNULL, + shell=True, ) else: - cmd = "echo %s | sudo -S /usr/local/astrometry/bin/solve-field %s --cpulimit %f --overwrite \ - --downsample 2 --scale-units arcsecperpix --scale-low %f --scale-high %f --ra %f --dec %f \ - --radius %f --no-plots > %s" % ( # noqa: E501 - ospassword, - self.filepath, - timeout, - scalelow, - scalehigh, - ra_h * 15, - dec_d, - radius, - resultpath, + proc = subprocess.Popen( + [ + "echo %s | sudo -S /usr/local/astrometry/bin/solve-field %s --cpulimit %f --overwrite \ + --downsample 2 --scale-units arcsecperpix --scale-low %f --scale-high \ + %f --ra %f --dec %f --radius %f --no-plots > %s" + % ( # noqa: E501 + ospassword, + self.filepath, + timeout, + scalelow, + scalehigh, + ra_h * 15, + dec_d, + radius, + resultpath, + ) + ], + stdin=subprocess.PIPE, + stdout=subprocess.DEVNULL, + shell=True, ) - proc = await asyncio.create_subprocess_shell( - cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE - ) - await proc.communicate() + out, err = proc.communicate() with open(resultpath, "r") as f: result = f.readlines() @@ -204,6 +230,8 @@ async def astrometry(self, ra_h=-999, dec_d=-999): self.ra2000 = float(line[startidx + 1: mididx]) self.dec2000 = float(line[mididx + 1: endidx]) + returndict["ra"] = self.ra2000 + returndict["dec"] = self.dec2000 elif "Field rotation angle" in line: startidx = line.find("is") @@ -213,6 +241,7 @@ async def astrometry(self, ra_h=-999, dec_d=-999): self.pa = float(line[startidx + 3: endidx - 1]) elif line[endidx + 8] == "W": self.pa = 360 - float(line[startidx + 3: endidx - 1]) + returndict["pa"] = self.pa elif "Total CPU time limit reached!" in line: raise Exception("Astrometry timeout") diff --git a/python/lvmagp/etc/lvmagp.yml b/python/lvmagp/etc/lvmagp.yml index f8d2bf3..eaa61a6 100644 --- a/python/lvmagp/etc/lvmagp.yml +++ b/python/lvmagp/etc/lvmagp.yml @@ -77,5 +77,5 @@ actor: name: lvmagp host: localhost port: 5672 - version: '0.2.3a' - log_dir: './logs' \ No newline at end of file + version: '0.2.5a' + log_dir: '../../../../logs' \ No newline at end of file diff --git a/python/lvmagp/exceptions.py b/python/lvmagp/exceptions.py index fd189d7..6626259 100644 --- a/python/lvmagp/exceptions.py +++ b/python/lvmagp/exceptions.py @@ -98,7 +98,9 @@ class LvmagpNotExistingHardware(LvmagpError): def __init__(self, message=None): message = ( - "There does not exist hardware has this name." if not message else message + "There does not exist hardware which has this name." + if not message + else message ) super(LvmagpNotExistingHardware, self).__init__(message) @@ -138,3 +140,31 @@ def __init__(self, message=None): message = "Interlock is engaged. Unlock the system." if not message else message super(LvmagpInterlockEngaged, self).__init__(message) + + +class LvmagpTargetOverTheLimit(LvmagpError): + """A custom exception for not yet implemented features.""" + + def __init__(self, message=None): + + message = ( + "Target is over the limit. Check the coordinates or set another target." + if not message + else message + ) + + super(LvmagpTargetOverTheLimit, self).__init__(message) + + +class LvmagpAcquisitionFailed(LvmagpError): + """A custom exception for not yet implemented features.""" + + def __init__(self, message=None): + + message = ( + "Telescope failed to center the target after several compensation." + if not message + else message + ) + + super(LvmagpAcquisitionFailed, self).__init__(message) From 90f90bb78836ab3f2574ac832a9877952e953c23 Mon Sep 17 00:00:00 2001 From: Hojae Ahn Date: Wed, 19 Jan 2022 18:29:02 +0900 Subject: [PATCH 05/17] delete some files --- python/lvmagp/actor/commands/focus.py | 74 -------------------------- python/lvmagp/actor/commands/system.py | 18 ------- 2 files changed, 92 deletions(-) delete mode 100644 python/lvmagp/actor/commands/focus.py delete mode 100644 python/lvmagp/actor/commands/system.py diff --git a/python/lvmagp/actor/commands/focus.py b/python/lvmagp/actor/commands/focus.py deleted file mode 100644 index ec9246e..0000000 --- a/python/lvmagp/actor/commands/focus.py +++ /dev/null @@ -1,74 +0,0 @@ -import click -from clu.command import Command - -from lvmagp.actor.internalfunc import send_message # noqa: F403 - -from . import command_parser as parser - - -lvmtan = "lvm.sci.foc" - - -@parser.group() -def focus(*args): - pass - - -@focus.command() -@click.argument("STEPS", type=int) -async def moverel(command: Command, steps: int): - - movecmd = await send_message(command, lvmtan, "moverelative %d" % steps) - if movecmd: - return command.finish(text="Move completed.") - - -@focus.command() -@click.argument("POSITION", type=int) -async def moveabs(command: Command, position: int): - movecmd = await send_message(command, lvmtan, "moveabsolute %d" % position) - if movecmd: - return command.finish(text="Move completed.") - - -@focus.command() -async def home(command: Command): - ishome = await send_message(command, lvmtan, "movetohome") - if ishome: - return command.finish(text="Motor is at home position.") - else: - return command.fail(text="Commend is not complete due to unknown error.") - - -@focus.command() -async def status(command: Command): - pos = await send_message( - command, lvmtan, "getposition", returnval=True, body="Position" - ) - vel = await send_message( - command, lvmtan, "getvelocity", returnval=True, body="Velocity" - ) - ismove = await send_message( - command, lvmtan, "ismoving", returnval=True, body="Moving" - ) - - stat = {"Position": pos, "Velocity": vel, "IsMoving": ismove} - - return command.finish(STATUS=stat) - - -@focus.command() -async def ismoving(command: Command): - ismove = await send_message( - command, lvmtan, "ismoving", returnval=True, body="Moving" - ) - return command.finish(isMoving=ismove) - - -@focus.command() -@click.argument("POSITION", type=int) -async def isreachable(command: Command, position: int): - isreach = await send_message( - command, lvmtan, "isreachable %d" % position, returnval=True, body="Reachable" - ) - return command.finish(isReachable=isreach) diff --git a/python/lvmagp/actor/commands/system.py b/python/lvmagp/actor/commands/system.py deleted file mode 100644 index b2cfb59..0000000 --- a/python/lvmagp/actor/commands/system.py +++ /dev/null @@ -1,18 +0,0 @@ -from clu.command import Command - -from . import command_parser as parser - - -@parser.group() -def system(*args): - pass - - -@system.command() -# @click.option("--telescope", type=bool, default=True) -async def bootup(command: Command): - pass - - -async def shutdown(command: Command): - pass From fe0848162f42c956326b40637fa96ee2fcb86878 Mon Sep 17 00:00:00 2001 From: mgjeon Date: Tue, 8 Feb 2022 17:00:35 +0900 Subject: [PATCH 06/17] only include commfunc.py in document --- .gitignore | 2 + readthedocs.yml => .readthedocs.yml | 4 + CHANGELOG.rst => CHANGELOG.md | 3 - README.md | 2 +- docs/sphinx/CHANGELOG.rst | 2 - docs/sphinx/api.rst | 15 - docs/sphinx/changelog.md | 4 + docs/sphinx/conf.py | 124 +- docs/sphinx/index.rst | 40 +- docs/sphinx/intro.rst | 7 - docs/sphinx/module.rst | 9 + docs/sphinx/readme.md | 4 + docs/sphinx/requirements.txt | 9 +- poetry.lock | 2273 --------------------------- 14 files changed, 62 insertions(+), 2436 deletions(-) rename readthedocs.yml => .readthedocs.yml (64%) rename CHANGELOG.rst => CHANGELOG.md (59%) delete mode 100644 docs/sphinx/CHANGELOG.rst delete mode 100644 docs/sphinx/api.rst create mode 100644 docs/sphinx/changelog.md delete mode 100644 docs/sphinx/intro.rst create mode 100644 docs/sphinx/module.rst create mode 100644 docs/sphinx/readme.md delete mode 100644 poetry.lock diff --git a/.gitignore b/.gitignore index ab804af..8fdfb21 100644 --- a/.gitignore +++ b/.gitignore @@ -113,3 +113,5 @@ ENV/ *~ *.swp *.swo + +poetry.lock \ No newline at end of file diff --git a/readthedocs.yml b/.readthedocs.yml similarity index 64% rename from readthedocs.yml rename to .readthedocs.yml index 65ae459..8486fc8 100644 --- a/readthedocs.yml +++ b/.readthedocs.yml @@ -1,4 +1,6 @@ version: 2 +sphinx: + configuration: docs/sphinx/conf.py build: image: latest @@ -9,3 +11,5 @@ python: - requirements: docs/sphinx/requirements.txt - method: pip path: . + extra_requirements: + - docs \ No newline at end of file diff --git a/CHANGELOG.rst b/CHANGELOG.md similarity index 59% rename from CHANGELOG.rst rename to CHANGELOG.md index c4eb690..2ec7cd5 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.md @@ -1,6 +1,3 @@ -.. _lvmagp-changelog: - -========== Change Log ========== diff --git a/README.md b/README.md index ab56293..f212b32 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # lvmagp -![Versions](https://img.shields.io/badge/python->3.7-blue) +[![Versions](https://img.shields.io/badge/python->3.7-blue)](https://img.shields.io/badge/python->3.7-blue) [![Documentation Status](https://readthedocs.org/projects/sdss-lvmagp/badge/?version=latest)](https://sdss-lvmagp.readthedocs.io/en/latest/?badge=latest) [![Travis (.org)](https://img.shields.io/travis/sdss/lvmagp)](https://travis-ci.org/sdss/lvmagp) [![codecov](https://codecov.io/gh/sdss/lvmagp/branch/main/graph/badge.svg)](https://codecov.io/gh/sdss/lvmagp) diff --git a/docs/sphinx/CHANGELOG.rst b/docs/sphinx/CHANGELOG.rst deleted file mode 100644 index fee2d8a..0000000 --- a/docs/sphinx/CHANGELOG.rst +++ /dev/null @@ -1,2 +0,0 @@ - -.. include:: ../../CHANGELOG.rst diff --git a/docs/sphinx/api.rst b/docs/sphinx/api.rst deleted file mode 100644 index e843b1e..0000000 --- a/docs/sphinx/api.rst +++ /dev/null @@ -1,15 +0,0 @@ - -.. _api: - -lvmagp Reference -========================= - -.. _api-main: - -Main ----- - -.. automodule:: lvmagp.main - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/sphinx/changelog.md b/docs/sphinx/changelog.md new file mode 100644 index 0000000..abf5601 --- /dev/null +++ b/docs/sphinx/changelog.md @@ -0,0 +1,4 @@ +(lvmagp-changelog)= + +```{include} ../../CHANGELOG.md +``` diff --git a/docs/sphinx/conf.py b/docs/sphinx/conf.py index 6da92fd..904560c 100644 --- a/docs/sphinx/conf.py +++ b/docs/sphinx/conf.py @@ -27,13 +27,6 @@ # Are we building in RTD? on_rtd = os.environ.get("READTHEDOCS") == "True" -# Sphinx template selected in cookiecutter and whether to use releases -sphinx_template = "sphinx-bootstrap" -use_releases = "no" - -if sphinx_template == "sphinx-bootstrap": - import sphinx_bootstrap_theme - # Importing matplotlib here with agg to prevent tkinter error in readthedocs # import matplotlib @@ -57,6 +50,10 @@ "sphinx.ext.viewcode", "sphinx.ext.mathjax", "sphinx.ext.intersphinx", + "sphinx_click", + "sphinx-jsonschema", + "myst_parser", + "sphinx_copybutton", ] # Add any paths that contain templates here, relative to this directory. @@ -77,8 +74,8 @@ # General information about the project. project = "lvmagp" -copyright = "{0}, {1}".format("2021", "sumin lee") -author = "sumin lee" +copyright = "{0}, {1}".format("2021", "Hojae Ahn") +author = "Hojae Ahn" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -131,16 +128,20 @@ # Intersphinx mappings intersphinx_mapping = { "python": ("https://docs.python.org/", None), - "astropy": ("http://docs.astropy.org/en/latest", None), "numpy": ("http://docs.scipy.org/doc/numpy/", None), + "clu": ("http://clu.readthedocs.io/en/latest/", None), } autodoc_mock_imports = ["_tkinter"] autodoc_member_order = "groupwise" +autodoc_typehints = "description" napoleon_use_rtype = False napoleon_use_ivar = True +copybutton_prompt_text = r">>> |\$ " +copybutton_prompt_is_regexp = True + rst_epilog = f""" .. |numpy_array| replace:: Numpy array .. |HDUList| replace:: :class:`~astropy.io.fits.HDUList` @@ -155,98 +156,9 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -if sphinx_template == "sphinx-bootstrap": - - html_theme = "bootstrap" - - html_sidebars = {} - - # Theme options are theme-specific and customize the look and feel of a theme - # further. For a list of options available for each theme, see the - # documentation. - html_theme_options = { - # Navigation bar title. (Default: ``project`` value) - "navbar_title": "SDSS: {0}".format(project), - # Tab name for entire site. (Default: "Site") - "navbar_site_name": "Site", - # A list of tuples containing pages or urls to link to. - # Valid tuples should be in the following forms: - # (name, page) # a link to a page - # (name, "/aa/bb", 1) # a link to an arbitrary relative url - # (name, "http://example.com", True) # arbitrary absolute url - # Note the "1" or "True" value above as the third argument to indicate - # an arbitrary url. - "navbar_links": [], - # Render the next and previous page links in navbar. (Default: true) - "navbar_sidebarrel": False, - # Render the current pages TOC in the navbar. (Default: true) - "navbar_pagenav": False, - # Tab name for the current pages TOC. (Default: "Page") - "navbar_pagenav_name": "Page", - # Global TOC depth for "site" navbar tab. (Default: 1) - # Switching to -1 shows all levels. - "globaltoc_depth": 2, - # Include hidden TOCs in Site navbar? - # - # Note: If this is "false", you cannot have mixed ``:hidden:`` and - # non-hidden ``toctree`` directives in the same page, or else the build - # will break. - # - # Values: "true" (default) or "false" - "globaltoc_includehidden": "true", - # HTML navbar class (Default: "navbar") to attach to
element. - # For black navbar, do "navbar navbar-inverse" - "navbar_class": "navbar", - # Fix navigation bar to top of page? - # Values: "true" (default) or "false" - "navbar_fixed_top": "true", - # Location of link to source. - # Options are "nav" (default), "footer" or anything else to exclude. - "source_link_position": "", - # Bootswatch (http://bootswatch.com/) theme. - # - # Options are nothing (default) or the name of a valid theme - # such as "amelia" or "cosmo". - "bootswatch_theme": "paper", - # Choose Bootstrap version. - # Values: "3" (default) or "2" (in quotes) - "bootstrap_version": "3", - } - - # Add any paths that contain custom themes here, relative to this directory. - html_theme_path = sphinx_bootstrap_theme.get_html_theme_path() - - html_logo = "_static/sdssv_logo_small.png" - - html_css_files += ["custom_bootstrap.css"] - - html_sidebars = {"**": ["localtoc.html"]} - -elif sphinx_template == "alabaster": - - html_theme = "alabaster" - - html_theme_options = { - "logo": "sdssv_logo.png", - "github_user": "sdss", - "github_repo": project, - "github_button": True, - "github_type": "star", - "sidebar_collapse": True, - "page_width": "80%", - } - - html_sidebars = { - "**": [ - "about.html", - "navigation.html", - "relations.html", - "searchbox.html", - ] - } - - html_css_files += ["custom.css"] - +html_theme = "furo" +html_title = "lvmagp" +html_logo = "_static/sdssv_logo.png" html_favicon = "./_static/favicon_sdssv.ico" # Add any paths that contain custom static files (such as style sheets) here, @@ -318,11 +230,3 @@ "Miscellaneous", ), ] - -if use_releases == "yes": - - extensions += ["sdsstools.releases"] - - releases_github_path = "sdss/lvmagp" - releases_document_name = ["CHANGELOG"] - releases_unstable_prehistory = True diff --git a/docs/sphinx/index.rst b/docs/sphinx/index.rst index 83e137a..b7790c3 100644 --- a/docs/sphinx/index.rst +++ b/docs/sphinx/index.rst @@ -1,35 +1,27 @@ lvmagp's documentation -============================================= +====================== -This is the documentation for the SDSS Python product lvmagp. The current version is |lvmagp_version|. You can install the package by doing - -.. code-block:: console - - $ pip install sdss-lvmagp - - -Contents --------- +This is the documentation for the SDSS Python product lvmagp. The current version is |lvmagp_version|. .. toctree:: - :maxdepth: 2 + :maxdepth: 3 + :hidden: - What's new in lvmagp? - Introduction to lvmagp - - -Reference ---------- + README .. toctree:: - :maxdepth: 1 + :caption: Reference + :maxdepth: 3 + :hidden: - api + module +.. toctree:: + :caption: Development + :maxdepth: 3 + :hidden: -Indices and tables ------------------- - -* :ref:`genindex` -* :ref:`modindex` + Changelog + GitHub Repository + Issues diff --git a/docs/sphinx/intro.rst b/docs/sphinx/intro.rst deleted file mode 100644 index 8f62b9e..0000000 --- a/docs/sphinx/intro.rst +++ /dev/null @@ -1,7 +0,0 @@ - -.. _intro: - -Introduction to lvmagp -=============================== - -We should write an introduction here. diff --git a/docs/sphinx/module.rst b/docs/sphinx/module.rst new file mode 100644 index 0000000..61cfc11 --- /dev/null +++ b/docs/sphinx/module.rst @@ -0,0 +1,9 @@ +.. _module: + +Module +====== + +.. automodule:: lvmagp.actor.commfunc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/sphinx/readme.md b/docs/sphinx/readme.md new file mode 100644 index 0000000..a575a57 --- /dev/null +++ b/docs/sphinx/readme.md @@ -0,0 +1,4 @@ +(lvmagp-readme)= + +```{include} ../../README.md +``` diff --git a/docs/sphinx/requirements.txt b/docs/sphinx/requirements.txt index c9ed3eb..c9810e9 100644 --- a/docs/sphinx/requirements.txt +++ b/docs/sphinx/requirements.txt @@ -1 +1,8 @@ -sphinx_bootstrap_theme~=0.4.12 +sphinx-click>=3.0.2 +sphinx-jsonschema>=1.16.7 +myst-parser>=0.14.0 +furo<=2021.6.18-beta.36 +sphinx-autobuild>=2021.3.14 +sphinx-copybutton>=0.3.3 +scipy>=1.7.3 +sdss-lvmtipo>=0.0.7 \ No newline at end of file diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 099d988..0000000 --- a/poetry.lock +++ /dev/null @@ -1,2273 +0,0 @@ -[[package]] -name = "aio-pika" -version = "6.8.0" -description = "Wrapper for the aiormq for asyncio and humans." -category = "main" -optional = false -python-versions = ">3.5, <4" - -[package.dependencies] -aiormq = ">=3.2.3,<4" -yarl = "*" - -[package.extras] -develop = ["aiomisc (>=10.1.6,<10.2.0)", "async-generator", "coverage (!=4.3)", "coveralls", "pylava", "pytest", "pytest-cov", "shortuuid", "nox", "sphinx", "sphinx-autobuild", "timeout-decorator", "tox (>=2.4)"] - -[[package]] -name = "aiormq" -version = "3.3.1" -description = "Pure python AMQP asynchronous client library" -category = "main" -optional = false -python-versions = ">3.5" - -[package.dependencies] -pamqp = "2.3.0" -yarl = "*" - -[package.extras] -develop = ["aiomisc (>=11.0,<12.0)", "async-generator", "coverage (!=4.3)", "coveralls", "pylava", "pytest", "pytest-cov", "tox (>=2.4)"] - -[[package]] -name = "alabaster" -version = "0.7.12" -description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "appnope" -version = "0.1.2" -description = "Disable App Nap on macOS >= 10.9" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "astropy" -version = "4.3.1" -description = "Astronomy and astrophysics core library" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version == \"3.7\""} -numpy = ">=1.17" -pyerfa = ">=1.7.3" - -[package.extras] -all = ["scipy (>=1.1)", "certifi", "dask", "h5py", "beautifulsoup4", "html5lib", "bleach", "PyYAML (>=3.13)", "pandas", "sortedcontainers", "pytz", "jplephem", "matplotlib (>=3.0,!=3.4.0)", "mpmath", "asdf (>=2.6)", "bottleneck", "ipython (>=4.2)", "pytest"] -docs = ["sphinx (<4)", "sphinx-astropy (>=1.3)", "pytest", "PyYAML (>=3.13)", "scipy (>=1.1)", "matplotlib (>=3.1,!=3.4.0)", "sphinx-changelog (>=1.1.0)", "packaging"] -test = ["pytest-astropy (>=0.8)", "pytest-xdist", "objgraph", "ipython (>=4.2)", "coverage", "skyfield (>=1.20)", "sgp4 (>=2.3)", "packaging"] - -[[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "21.2.0" -description = "Classes Without Boilerplate" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] - -[[package]] -name = "babel" -version = "2.9.1" -description = "Internationalization utilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -pytz = ">=2015.7" - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "black" -version = "21.11b1" -description = "The uncompromising code formatter." -category = "main" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -click = ">=7.1.2" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" -platformdirs = ">=2" -regex = ">=2021.4.4" -tomli = ">=0.2.6,<2.0.0" -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} -typing-extensions = ">=3.10.0.0" - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "certifi" -version = "2021.10.8" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "charset-normalizer" -version = "2.0.8" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" -optional = false -python-versions = ">=3.5.0" - -[package.extras] -unicode_backport = ["unicodedata2"] - -[[package]] -name = "click" -version = "8.0.3" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[[package]] -name = "click-default-group" -version = "1.2.2" -description = "Extends click.Group to invoke a command without explicit subcommand name" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -click = "*" - -[[package]] -name = "codecov" -version = "2.1.12" -description = "Hosted coverage reports for GitHub, Bitbucket and Gitlab" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -coverage = "*" -requests = ">=2.7.9" - -[[package]] -name = "colorama" -version = "0.4.4" -description = "Cross-platform colored terminal text." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "configparser" -version = "5.1.0" -description = "Updated configparser from Python 3.8 for Python 2.6+." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"] - -[[package]] -name = "coverage" -version = "6.2" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "cycler" -version = "0.11.0" -description = "Composable style cycles" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "daemonocle" -version = "1.2.3" -description = "A Python library for creating super fancy Unix daemons" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -click = "*" -psutil = "*" - -[package.extras] -test = ["coveralls", "flake8", "flake8-bugbear", "flake8-isort", "pytest", "pytest-cov"] - -[[package]] -name = "decorator" -version = "5.1.0" -description = "Decorators for Humans" -category = "dev" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "doc8" -version = "0.10.1" -description = "Style checker for Sphinx (or other) RST documentation" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -docutils = "*" -Pygments = "*" -restructuredtext-lint = ">=0.7" -stevedore = "*" - -[[package]] -name = "docutils" -version = "0.16" -description = "Docutils -- Python Documentation Utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "flake8" -version = "4.0.1" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = "<4.3", markers = "python_version < \"3.8\""} -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.8.0,<2.9.0" -pyflakes = ">=2.4.0,<2.5.0" - -[[package]] -name = "fonttools" -version = "4.28.2" -description = "Tools to manipulate font files" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=13.0.0)", "xattr"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["scipy", "munkres"] -lxml = ["lxml (>=4.0,<5)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -symfont = ["sympy"] -type1 = ["xattr"] -ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=13.0.0)"] -woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] - -[[package]] -name = "idna" -version = "3.3" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "imagesize" -version = "1.3.0" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "importlib-metadata" -version = "4.2.0" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] - -[[package]] -name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "invoke" -version = "1.6.0" -description = "Pythonic task execution" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "ipdb" -version = "0.13.9" -description = "IPython-enabled pdb" -category = "dev" -optional = false -python-versions = ">=2.7" - -[package.dependencies] -decorator = {version = "*", markers = "python_version > \"3.6\""} -ipython = {version = ">=7.17.0", markers = "python_version > \"3.6\""} -toml = {version = ">=0.10.2", markers = "python_version > \"3.6\""} - -[[package]] -name = "ipython" -version = "7.30.1" -description = "IPython: Productive Interactive Computing" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -traitlets = ">=4.2" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["notebook", "ipywidgets"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"] - -[[package]] -name = "isort" -version = "5.10.1" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.6.1,<4.0" - -[package.extras] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] -requirements_deprecated_finder = ["pipreqs", "pip-api"] -colors = ["colorama (>=0.4.3,<0.5.0)"] -plugins = ["setuptools"] - -[[package]] -name = "jedi" -version = "0.18.1" -description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -parso = ">=0.8.0,<0.9.0" - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] - -[[package]] -name = "jinja2" -version = "3.0.3" -description = "A very fast and expressive template engine." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "jsonpickle" -version = "1.3" -description = "Python library for serializing any arbitrary object graph into JSON" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "jsonschema" -version = "3.2.0" -description = "An implementation of JSON Schema validation for Python" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -attrs = ">=17.4.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -pyrsistent = ">=0.14.0" -six = ">=1.11.0" - -[package.extras] -format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] -format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] - -[[package]] -name = "kiwisolver" -version = "1.3.2" -description = "A fast implementation of the Cassowary constraint solver" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "markupsafe" -version = "2.0.1" -description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "matplotlib" -version = "3.5.0" -description = "Python plotting package" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -cycler = ">=0.10" -fonttools = ">=4.22.0" -kiwisolver = ">=1.0.1" -numpy = ">=1.17" -packaging = ">=20.0" -pillow = ">=6.2.0" -pyparsing = ">=2.2.1" -python-dateutil = ">=2.7" -setuptools_scm = ">=4" - -[[package]] -name = "matplotlib-inline" -version = "0.1.3" -description = "Inline Matplotlib backend for Jupyter" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "multidict" -version = "5.2.0" -description = "multidict implementation" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "numpy" -version = "1.21.1" -description = "NumPy is the fundamental package for array computing with Python." -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "packaging" -version = "20.9" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -pyparsing = ">=2.0.2" - -[[package]] -name = "pamqp" -version = "2.3.0" -description = "RabbitMQ Focused AMQP low-level library" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -codegen = ["lxml"] - -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - -[[package]] -name = "pathspec" -version = "0.9.0" -description = "Utility library for gitignore style pattern matching of file paths." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[[package]] -name = "pbr" -version = "5.8.0" -description = "Python Build Reasonableness" -category = "dev" -optional = false -python-versions = ">=2.6" - -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "photutils" -version = "1.2.0" -description = "An Astropy package for source detection and photometry" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -astropy = ">=4.0" -numpy = ">=1.17" - -[package.extras] -all = ["scipy (>=1.6.0)", "matplotlib (>=2.2)", "scikit-image (>=0.14.2)", "scikit-learn", "gwcs (>=0.12)", "bottleneck"] -docs = ["scipy (>=1.6.0)", "sphinx (<4)", "sphinx-astropy", "matplotlib (>=2.2)", "scikit-image (>=0.14.2)", "scikit-learn", "gwcs (>=0.12)"] -test = ["pytest-astropy"] - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "pillow" -version = "8.4.0" -description = "Python Imaging Library (Fork)" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "platformdirs" -version = "2.4.0" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "prompt-toolkit" -version = "3.0.23" -description = "Library for building powerful interactive command lines in Python" -category = "main" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psutil" -version = "5.8.0" -description = "Cross-platform lib for process and system monitoring in Python." -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.extras] -test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pycodestyle" -version = "2.8.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pyerfa" -version = "2.0.0.1" -description = "Python bindings for ERFA" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -numpy = ">=1.17" - -[package.extras] -docs = ["sphinx-astropy (>=1.3)"] -test = ["pytest", "pytest-doctestplus (>=0.7)"] - -[[package]] -name = "pyflakes" -version = "2.4.0" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pygments" -version = "2.10.0" -description = "Pygments is a syntax highlighting package written in Python." -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "pyparsing" -version = "3.0.6" -description = "Python parsing module" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pyrsistent" -version = "0.18.0" -description = "Persistent/Functional/Immutable data structures" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "pytest" -version = "6.2.5" -description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] - -[[package]] -name = "pytest-asyncio" -version = "0.16.0" -description = "Pytest support for asyncio." -category = "dev" -optional = false -python-versions = ">= 3.6" - -[package.dependencies] -pytest = ">=5.4.0" - -[package.extras] -testing = ["coverage", "hypothesis (>=5.7.1)"] - -[[package]] -name = "pytest-cov" -version = "3.0.0" -description = "Pytest plugin for measuring coverage." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] - -[[package]] -name = "pytest-mock" -version = "3.6.1" -description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytest = ">=5.0" - -[package.extras] -dev = ["pre-commit", "tox", "pytest-asyncio"] - -[[package]] -name = "pytest-sugar" -version = "0.9.4" -description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -packaging = ">=14.1" -pytest = ">=2.9" -termcolor = ">=1.1.0" - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "pytz" -version = "2021.3" -description = "World timezone definitions, modern and historical" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "regex" -version = "2021.11.10" -description = "Alternative regular expression module, to replace re." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "requests" -version = "2.26.0" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} -idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] - -[[package]] -name = "restructuredtext-lint" -version = "1.3.2" -description = "reStructuredText linter" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -docutils = ">=0.11,<1.0" - -[[package]] -name = "rstcheck" -version = "3.3.1" -description = "Checks syntax of reStructuredText and code blocks nested within it" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -docutils = ">=0.7" - -[[package]] -name = "sdss-access" -version = "2.0.0" -description = "Package to dynamically build filepaths and access all SDSS SAS products" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -requests = ">=2.10.0" -sdss-tree = ">=3.0.0" -sdsstools = ">=0.4.5" -six = ">=1.11" -tqdm = ">=4.46.0" - -[package.extras] -dev = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)", "ipython (>=7.9.0)", "matplotlib (>=3.1.1)", "flake8 (>=3.7.9)", "doc8 (>=0.8.0)", "pytest (>=5.2.2)", "pytest-cov (>=2.8.1)", "pytest-mock (>=1.13.0)", "pytest-sugar (>=0.9.2)", "isort (>=4.3.21)", "codecov (>=2.0.15)", "coverage[toml] (>=5.0)", "coveralls (>=1.7)", "ipdb (>=0.12.3)", "sdsstools[dev] (>=0.4.0)", "invoke (>=1.3.0)", "twine (>=3.1.1)", "wheel (>=0.33.6)"] -docs = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)"] - -[[package]] -name = "sdss-clu" -version = "1.5.5" -description = "A new protocol for SDSS actors." -category = "main" -optional = false -python-versions = ">=3.7,<4.0" - -[package.dependencies] -aio_pika = ">=6.4.1,<7.0.0" -aiormq = ">=3.2.0,<4.0.0" -click = ">=8.0,<9.0" -jsonschema = ">=3.0.1,<4.0.0" -prompt_toolkit = ">=3.0.6,<4.0.0" -sdsstools = ">=0.4.13,<0.5.0" - -[[package]] -name = "sdss-cluplus" -version = "0.0.16" -description = "Additional functionality for sdss-clu" -category = "main" -optional = false -python-versions = ">=3.7,<4.0" - -[package.dependencies] -click-default-group = ">=1.2.2,<2.0.0" -daemonocle = ">=1.1.1,<2.0.0" -jsonpickle = "1.3" -sdss-access = ">=0.2.3" -sdss-clu = ">=1.2.0" -sdss-tree = ">=2.15.2" -sdsstools = ">=0.4.0" - -[[package]] -name = "sdss-tree" -version = "3.1.0" -description = "Control and setup of SDSS tree environment and modules" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -configparser = ">=3.5.0" -pygments = ">=2.6" -sdsstools = ">=0.4.5" - -[package.extras] -dev = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-argparse (>=0.2.5)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)", "ipython (>=7.9.0)", "matplotlib (>=3.1.1)", "flake8 (>=3.7.9)", "doc8 (>=0.8.0)", "pytest (>=5.2.2)", "pytest-cov (>=2.8.1)", "pytest-mock (>=1.13.0)", "pytest-sugar (>=0.9.2)", "isort (>=4.3.21)", "codecov (>=2.0.15)", "coverage[toml] (>=5.0)", "coveralls (>=1.7)", "ipdb (>=0.12.3)", "sdsstools[dev] (>=0.4.0)", "invoke (>=1.3.0)", "twine (>=3.1.1)", "wheel (>=0.33.6)"] -docs = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-argparse (>=0.2.5)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)"] - -[[package]] -name = "sdsstools" -version = "0.4.13" -description = "Small tools for SDSS products" -category = "main" -optional = false -python-versions = ">=3.6,<4.0" - -[package.dependencies] -daemonocle = ">=1.0.2,<2.0.0" -docutils = ">=0.16,<0.17" -invoke = ">=1.3.0,<2.0.0" -packaging = ">=20.4,<21.0" -pygments = ">=2.5.2,<3.0.0" -pyyaml = ">=4.0" -semantic-version = ">=2.8.4,<3.0.0" -six = ">=1.14.0,<2.0.0" - -[[package]] -name = "semantic-version" -version = "2.8.5" -description = "A library implementing the 'SemVer' scheme." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "setuptools-scm" -version = "6.3.2" -description = "the blessed package to manage your versions by scm tags" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -packaging = ">=20.0" -tomli = ">=1.0.0" - -[package.extras] -toml = ["setuptools (>=42)", "tomli (>=1.0.0)"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "sphinx" -version = "3.5.4" -description = "Python documentation generator" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=1.3" -colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.12,<0.17" -imagesize = "*" -Jinja2 = ">=2.3" -packaging = "*" -Pygments = ">=2.0" -requests = ">=2.5.0" -snowballstemmer = ">=1.1" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = "*" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = "*" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.800)", "docutils-stubs"] -test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.0" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest", "html5lib"] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -test = ["pytest", "flake8", "mypy"] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -name = "stevedore" -version = "3.5.0" -description = "Manage dynamic plugins for Python applications" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""} -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "termcolor" -version = "1.1.0" -description = "ANSII Color formatting for output in terminal." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tomli" -version = "1.2.2" -description = "A lil' TOML parser" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "tqdm" -version = "4.62.3" -description = "Fast, Extensible Progress Meter" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] -notebook = ["ipywidgets (>=6)"] -telegram = ["requests"] - -[[package]] -name = "traitlets" -version = "5.1.1" -description = "Traitlets Python configuration system" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -test = ["pytest"] - -[[package]] -name = "typed-ast" -version = "1.5.0" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "typing-extensions" -version = "4.0.1" -description = "Backported and Experimental Type Hints for Python 3.6+" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "urllib3" -version = "1.26.7" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.extras] -brotli = ["brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "wcwidth" -version = "0.2.5" -description = "Measures the displayed width of unicode strings in a terminal" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "yarl" -version = "1.7.2" -description = "Yet another URL library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" -typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} - -[[package]] -name = "zipp" -version = "3.6.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] - -[metadata] -lock-version = "1.1" -python-versions = ">3.7, <3.10" -content-hash = "7be3affd459b0a3a6fcadacc13c7bef0110401fce866cc88e910a0816d7c2f04" - -[metadata.files] -aio-pika = [ - {file = "aio-pika-6.8.0.tar.gz", hash = "sha256:1d4305a5f78af3857310b4fe48348cdcf6c097e0e275ea88c2cd08570531a369"}, - {file = "aio_pika-6.8.0-py3-none-any.whl", hash = "sha256:e69afef8695f47c5d107bbdba21bdb845d5c249acb3be53ef5c2d497b02657c0"}, -] -aiormq = [ - {file = "aiormq-3.3.1-py3-none-any.whl", hash = "sha256:e584dac13a242589aaf42470fd3006cb0dc5aed6506cbd20357c7ec8bbe4a89e"}, - {file = "aiormq-3.3.1.tar.gz", hash = "sha256:8218dd9f7198d6e7935855468326bbacf0089f926c70baa8dd92944cb2496573"}, -] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -appnope = [ - {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"}, - {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"}, -] -astropy = [ - {file = "astropy-4.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0764d7f68034c584dda8d1c9cc4357ade05cec4c1134db43bce804fcf656ff1"}, - {file = "astropy-4.3.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ce1095e385ec74c655866eacd1853535fbc2dd2c42a8188503fe9a68b8a98ea0"}, - {file = "astropy-4.3.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a01cc7b9d50f265d5d77e1f7206cda22c62720f5bed63158ee56440708848ea"}, - {file = "astropy-4.3.1-cp37-cp37m-win32.whl", hash = "sha256:98bba44f60bb3584b3ad24d1ffad1763138d4d18fc7ca31921732d2449419dd9"}, - {file = "astropy-4.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:aae1e9e6b2c7811070e4a3373c54eac603f882dc381a796b981a25c02e7fafe2"}, - {file = "astropy-4.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a5fb4ce4c964f02d7ac2b755f80f5210157a413cbfcdccbc25ad6e7586c258f"}, - {file = "astropy-4.3.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9e5613e897cb6da64330c5969981f576385491ff5ea61435218117d717a71ff2"}, - {file = "astropy-4.3.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0b4576d9bc2ab8359f2c4b87d0496c5ad768c7a14d1b16dc634ec24d22147c79"}, - {file = "astropy-4.3.1-cp38-cp38-win32.whl", hash = "sha256:26f8dce66d3de8aa761508d76b99627ed745d99ec7c5e10289566c2082fa7dc3"}, - {file = "astropy-4.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:bcedff7bad0fbc70209751e8eb98eec7c0bd3f0e202f4ee7ff65b8ddf19d5e53"}, - {file = "astropy-4.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:beddc4a365d696214e13ff9aa9362d418ecc112f1dba6338f8ac4218fe475e25"}, - {file = "astropy-4.3.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4b0ff70baee2a2c768cfc5f7966a371fa0741c93a7283d7e99d6a668f2606851"}, - {file = "astropy-4.3.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:34992c0ac1da577d7a1b13171cd8097cdb4544f09687bbd27e433806d3fd2e9f"}, - {file = "astropy-4.3.1-cp39-cp39-win32.whl", hash = "sha256:dcb6d7e6631d92d5d15b7ae4e0a994829609b09a4e3af2055995187edb8989e3"}, - {file = "astropy-4.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:434ab46e85f5406acc9f2d2084e5e36890abeaf615c8aa71178e835134b64726"}, - {file = "astropy-4.3.1.tar.gz", hash = "sha256:2d3951223b4eb7f368fcad8c8340d27374c5d8e3b635a636275acdb38f35cd51"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, - {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, -] -babel = [ - {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, - {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, -] -backcall = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] -black = [ - {file = "black-21.11b1-py3-none-any.whl", hash = "sha256:802c6c30b637b28645b7fde282ed2569c0cd777dbe493a41b6a03c1d903f99ac"}, - {file = "black-21.11b1.tar.gz", hash = "sha256:a042adbb18b3262faad5aff4e834ff186bb893f95ba3a8013f09de1e5569def2"}, -] -certifi = [ - {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"}, - {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"}, -] -click = [ - {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, - {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, -] -click-default-group = [ - {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, -] -codecov = [ - {file = "codecov-2.1.12-py2.py3-none-any.whl", hash = "sha256:585dc217dc3d8185198ceb402f85d5cb5dbfa0c5f350a5abcdf9e347776a5b47"}, - {file = "codecov-2.1.12-py3.8.egg", hash = "sha256:782a8e5352f22593cbc5427a35320b99490eb24d9dcfa2155fd99d2b75cfb635"}, - {file = "codecov-2.1.12.tar.gz", hash = "sha256:a0da46bb5025426da895af90938def8ee12d37fcbcbbbc15b6dc64cf7ebc51c1"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -configparser = [ - {file = "configparser-5.1.0-py3-none-any.whl", hash = "sha256:f99c2256b24c551de13cf9e42c7b5db96fb133f0ca4de5dcb1df1aaf89f48298"}, - {file = "configparser-5.1.0.tar.gz", hash = "sha256:202b9679a809b703720afa2eacaad4c6c2d63196070e5d9edc953c0489dfd536"}, -] -coverage = [ - {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"}, - {file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"}, - {file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"}, - {file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"}, - {file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"}, - {file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"}, - {file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"}, - {file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"}, - {file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"}, - {file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"}, - {file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"}, - {file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"}, - {file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"}, - {file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"}, - {file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"}, - {file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"}, - {file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"}, - {file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"}, - {file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"}, - {file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"}, -] -cycler = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, -] -daemonocle = [ - {file = "daemonocle-1.2.3.tar.gz", hash = "sha256:741ce6abc37c85ca396379a0d45710ac27ab5f17eeaadbc64a0f5cc4c4f666ea"}, -] -decorator = [ - {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"}, - {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"}, -] -doc8 = [ - {file = "doc8-0.10.1-py3-none-any.whl", hash = "sha256:551a61df5915f0107e518d582fead47a0a56df7d4a9374feab955ea14dedea84"}, - {file = "doc8-0.10.1.tar.gz", hash = "sha256:376e50f4e70a1ae935416ddfcf93db35dd5d4cc0e557f2ec72f0667d0ace4548"}, -] -docutils = [ - {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, - {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, -] -flake8 = [ - {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, - {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, -] -fonttools = [ - {file = "fonttools-4.28.2-py3-none-any.whl", hash = "sha256:eff1da7ea274c54cb8842853005a139f711646cbf6f1bcfb6c9b86a627f35ff0"}, - {file = "fonttools-4.28.2.zip", hash = "sha256:dca694331af74c8ad47acc5171e57f6b78fac5692bf050f2ab572964577ac0dd"}, -] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] -imagesize = [ - {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, - {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"}, - {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -invoke = [ - {file = "invoke-1.6.0-py2-none-any.whl", hash = "sha256:e6c9917a1e3e73e7ea91fdf82d5f151ccfe85bf30cc65cdb892444c02dbb5f74"}, - {file = "invoke-1.6.0-py3-none-any.whl", hash = "sha256:769e90caeb1bd07d484821732f931f1ad8916a38e3f3e618644687fc09cb6317"}, - {file = "invoke-1.6.0.tar.gz", hash = "sha256:374d1e2ecf78981da94bfaf95366216aaec27c2d6a7b7d5818d92da55aa258d3"}, -] -ipdb = [ - {file = "ipdb-0.13.9.tar.gz", hash = "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5"}, -] -ipython = [ - {file = "ipython-7.30.1-py3-none-any.whl", hash = "sha256:fc60ef843e0863dd4e24ab2bb5698f071031332801ecf8d1aeb4fb622056545c"}, - {file = "ipython-7.30.1.tar.gz", hash = "sha256:cb6aef731bf708a7727ab6cde8df87f0281b1427d41e65d62d4b68934fa54e97"}, -] -isort = [ - {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, - {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, -] -jedi = [ - {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, - {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, -] -jinja2 = [ - {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, - {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, -] -jsonpickle = [ - {file = "jsonpickle-1.3-py2.py3-none-any.whl", hash = "sha256:efc6839cb341985f0c24f98650a4c1063a2877c236ffd3d7e1662f0c482bac93"}, - {file = "jsonpickle-1.3.tar.gz", hash = "sha256:71bca2b80ae28af4e3f86629ef247100af7f97032b5ca8d791c1f8725b411d95"}, -] -jsonschema = [ - {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, - {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, -] -kiwisolver = [ - {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1d819553730d3c2724582124aee8a03c846ec4362ded1034c16fb3ef309264e6"}, - {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d93a1095f83e908fc253f2fb569c2711414c0bfd451cab580466465b235b470"}, - {file = "kiwisolver-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4550a359c5157aaf8507e6820d98682872b9100ce7607f8aa070b4b8af6c298"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2210f28778c7d2ee13f3c2a20a3a22db889e75f4ec13a21072eabb5693801e84"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:82f49c5a79d3839bc8f38cb5f4bfc87e15f04cbafa5fbd12fb32c941cb529cfb"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9661a04ca3c950a8ac8c47f53cbc0b530bce1b52f516a1e87b7736fec24bfff0"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ddb500a2808c100e72c075cbb00bf32e62763c82b6a882d403f01a119e3f402"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72be6ebb4e92520b9726d7146bc9c9b277513a57a38efcf66db0620aec0097e0"}, - {file = "kiwisolver-1.3.2-cp310-cp310-win32.whl", hash = "sha256:83d2c9db5dfc537d0171e32de160461230eb14663299b7e6d18ca6dca21e4977"}, - {file = "kiwisolver-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:cba430db673c29376135e695c6e2501c44c256a81495da849e85d1793ee975ad"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4116ba9a58109ed5e4cb315bdcbff9838f3159d099ba5259c7c7fb77f8537492"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19554bd8d54cf41139f376753af1a644b63c9ca93f8f72009d50a2080f870f77"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a4cf5bbdc861987a7745aed7a536c6405256853c94abc9f3287c3fa401b174"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0007840186bacfaa0aba4466d5890334ea5938e0bb7e28078a0eb0e63b5b59d5"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec2eba188c1906b05b9b49ae55aae4efd8150c61ba450e6721f64620c50b59eb"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3dbb3cea20b4af4f49f84cffaf45dd5f88e8594d18568e0225e6ad9dec0e7967"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:5326ddfacbe51abf9469fe668944bc2e399181a2158cb5d45e1d40856b2a0589"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c6572c2dab23c86a14e82c245473d45b4c515314f1f859e92608dcafbd2f19b8"}, - {file = "kiwisolver-1.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b5074fb09429f2b7bc82b6fb4be8645dcbac14e592128beeff5461dcde0af09f"}, - {file = "kiwisolver-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22521219ca739654a296eea6d4367703558fba16f98688bd8ce65abff36eaa84"}, - {file = "kiwisolver-1.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c358721aebd40c243894298f685a19eb0491a5c3e0b923b9f887ef1193ddf829"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ba5a1041480c6e0a8b11a9544d53562abc2d19220bfa14133e0cdd9967e97af"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44e6adf67577dbdfa2d9f06db9fbc5639afefdb5bf2b4dfec25c3a7fbc619536"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d45d1c74f88b9f41062716c727f78f2a59a5476ecbe74956fafb423c5c87a76"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70adc3658138bc77a36ce769f5f183169bc0a2906a4f61f09673f7181255ac9b"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6a5431940f28b6de123de42f0eb47b84a073ee3c3345dc109ad550a3307dd28"}, - {file = "kiwisolver-1.3.2-cp38-cp38-win32.whl", hash = "sha256:ee040a7de8d295dbd261ef2d6d3192f13e2b08ec4a954de34a6fb8ff6422e24c"}, - {file = "kiwisolver-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:8dc3d842fa41a33fe83d9f5c66c0cc1f28756530cd89944b63b072281e852031"}, - {file = "kiwisolver-1.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a498bcd005e8a3fedd0022bb30ee0ad92728154a8798b703f394484452550507"}, - {file = "kiwisolver-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80efd202108c3a4150e042b269f7c78643420cc232a0a771743bb96b742f838f"}, - {file = "kiwisolver-1.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f8eb7b6716f5b50e9c06207a14172cf2de201e41912ebe732846c02c830455b9"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f441422bb313ab25de7b3dbfd388e790eceb76ce01a18199ec4944b369017009"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:30fa008c172355c7768159983a7270cb23838c4d7db73d6c0f6b60dde0d432c6"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f8f6c8f4f1cff93ca5058d6ec5f0efda922ecb3f4c5fb76181f327decff98b8"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba677bcaff9429fd1bf01648ad0901cea56c0d068df383d5f5856d88221fe75b"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7843b1624d6ccca403a610d1277f7c28ad184c5aa88a1750c1a999754e65b439"}, - {file = "kiwisolver-1.3.2-cp39-cp39-win32.whl", hash = "sha256:e6f5eb2f53fac7d408a45fbcdeda7224b1cfff64919d0f95473420a931347ae9"}, - {file = "kiwisolver-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:eedd3b59190885d1ebdf6c5e0ca56828beb1949b4dfe6e5d0256a461429ac386"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dedc71c8eb9c5096037766390172c34fb86ef048b8e8958b4e484b9e505d66bc"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bf7eb45d14fc036514c09554bf983f2a72323254912ed0c3c8e697b62c4c158f"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b65bd35f3e06a47b5c30ea99e0c2b88f72c6476eedaf8cfbc8e66adb5479dcf"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25405f88a37c5f5bcba01c6e350086d65e7465fd1caaf986333d2a045045a223"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bcadb05c3d4794eb9eee1dddf1c24215c92fb7b55a80beae7a60530a91060560"}, - {file = "kiwisolver-1.3.2.tar.gz", hash = "sha256:fc4453705b81d03568d5b808ad8f09c77c47534f6ac2e72e733f9ca4714aa75c"}, -] -markupsafe = [ - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, -] -matplotlib = [ - {file = "matplotlib-3.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4b018ea6f26424a0852eb60eb406420d9f0d34f65736ea7bbfbb104946a66d86"}, - {file = "matplotlib-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a07ff2565da72a7b384a9e000b15b6b8270d81370af8a3531a16f6fbcee023cc"}, - {file = "matplotlib-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2eea16883aa7724c95eea0eb473ab585c6cf66f0e28f7f13e63deb38f4fd6d0f"}, - {file = "matplotlib-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e020a42f3338823a393dd2f80e39a2c07b9f941dfe2c778eb104eeb33d60bb5"}, - {file = "matplotlib-3.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bac8eb1eccef540d7f4e844b6313d9f7722efd48c07e1b4bfec1056132127fd"}, - {file = "matplotlib-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a7cb59ebd63a8ac4542ec1c61dd08724f82ec3aa7bb6b4b9e212d43c611ce3d"}, - {file = "matplotlib-3.5.0-cp310-cp310-win32.whl", hash = "sha256:6e0e6b2111165522ad336705499b1f968c34a9e84d05d498ee5af0b5697d1efe"}, - {file = "matplotlib-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:ff5d9fe518ad2de14ce82ab906b6ab5c2b0c7f4f984400ff8a7a905daa580a0a"}, - {file = "matplotlib-3.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:66b172610db0ececebebb09d146f54205f87c7b841454e408fba854764f91bdd"}, - {file = "matplotlib-3.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee3d9ff16d749a9aa521bd7d86f0dbf256b2d2ac8ce31b19e4d2c86d2f2ff0b6"}, - {file = "matplotlib-3.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970aa97297537540369d05fe0fd1bb952593f9ab696c9b427c06990a83e2418b"}, - {file = "matplotlib-3.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:153a0cf6a6ff4f406a0600d2034710c49988bacc6313d193b32716f98a697580"}, - {file = "matplotlib-3.5.0-cp37-cp37m-win32.whl", hash = "sha256:6db02c5605f063b67780f4d5753476b6a4944343284aa4e93c5e8ff6e9ec7f76"}, - {file = "matplotlib-3.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:df0042cab69f4d246f4cb8fc297770ac4ae6ec2983f61836b04a117722037dcd"}, - {file = "matplotlib-3.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a7bf8b05c214d32fb7ca7c001fde70b9b426378e897b0adbf77b85ea3569d56a"}, - {file = "matplotlib-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0abf8b51cc6d3ba34d1b15b26e329f23879848a0cf1216954c1f432ffc7e1af7"}, - {file = "matplotlib-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:13930a0c9bec0fd25f43c448b047a21af1353328b946f044a8fc3be077c6b1a8"}, - {file = "matplotlib-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18f6e52386300db5cc4d1e9019ad9da2e80658bab018834d963ebb0aa5355095"}, - {file = "matplotlib-3.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba107add08e12600b072cf3c47aaa1ab85dd4d3c48107a5d3377d1bf80f8b235"}, - {file = "matplotlib-3.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2089b9014792dcc87bb1d620cde847913338abf7d957ef05587382b0cb76d44e"}, - {file = "matplotlib-3.5.0-cp38-cp38-win32.whl", hash = "sha256:f23fbf70d2e80f4e03a83fc1206a8306d9bc50482fee4239f10676ce7e470c83"}, - {file = "matplotlib-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:71a1851111f23f82fc43d2b6b2bfdd3f760579a664ebc939576fe21cc6133d01"}, - {file = "matplotlib-3.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d092b7ba63182d2dd427904e3eb58dd5c46ec67c5968de14a4b5007010a3a4cc"}, - {file = "matplotlib-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ac17a7e7b06ee426a4989f0b7f24ab1a592e39cdf56353a90f4e998bc0bf44d6"}, - {file = "matplotlib-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a5b62d1805cc83d755972033c05cea78a1e177a159fc84da5c9c4ab6303ccbd9"}, - {file = "matplotlib-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:666d717a4798eb9c5d3ae83fe80c7bc6ed696b93e879cb01cb24a74155c73612"}, - {file = "matplotlib-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65f877882b7ddede7090c7d87be27a0f4720fe7fc6fddd4409c06e1aa0f1ae8d"}, - {file = "matplotlib-3.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7baf23adb698d8c6ca7339c9dde00931bc47b2dd82fa912827fef9f93db77f5e"}, - {file = "matplotlib-3.5.0-cp39-cp39-win32.whl", hash = "sha256:b3b687e905da32e5f2e5f16efa713f5d1fcd9fb8b8c697895de35c91fedeb086"}, - {file = "matplotlib-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6cef5b31e27c31253c0f852b629a38d550ae66ec6850129c49d872f9ee428cb"}, - {file = "matplotlib-3.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0dcaf5648cecddc328e81a0421821a1f65a1d517b20746c94a1f0f5c36fb51a"}, - {file = "matplotlib-3.5.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b5e439d9e55d645f2a4dca63e2f66d68fe974c405053b132d61c7e98c25dfeb2"}, - {file = "matplotlib-3.5.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dc8c5c23e7056e126275dbf29efba817b3d94196690930d0968873ac3a94ab82"}, - {file = "matplotlib-3.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a0ea10faa3bab0714d3a19c7e0921279a68d57552414d6eceaea99f97d7735db"}, - {file = "matplotlib-3.5.0.tar.gz", hash = "sha256:38892a254420d95594285077276162a5e9e9c30b6da08bdc2a4d53331ad9a6fa"}, -] -matplotlib-inline = [ - {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, - {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -multidict = [ - {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"}, - {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"}, - {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"}, - {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"}, - {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"}, - {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"}, - {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"}, - {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"}, - {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"}, - {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"}, - {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"}, - {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"}, - {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"}, - {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"}, - {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"}, - {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"}, - {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"}, - {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"}, - {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"}, - {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"}, - {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"}, - {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -numpy = [ - {file = "numpy-1.21.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38e8648f9449a549a7dfe8d8755a5979b45b3538520d1e735637ef28e8c2dc50"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fd7d7409fa643a91d0a05c7554dd68aa9c9bb16e186f6ccfe40d6e003156e33a"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a75b4498b1e93d8b700282dc8e655b8bd559c0904b3910b144646dbbbc03e062"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1412aa0aec3e00bc23fbb8664d76552b4efde98fb71f60737c83efbac24112f1"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e46ceaff65609b5399163de5893d8f2a82d3c77d5e56d976c8b5fb01faa6b671"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c6a2324085dd52f96498419ba95b5777e40b6bcbc20088fddb9e8cbb58885e8e"}, - {file = "numpy-1.21.1-cp37-cp37m-win32.whl", hash = "sha256:73101b2a1fef16602696d133db402a7e7586654682244344b8329cdcbbb82172"}, - {file = "numpy-1.21.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7a708a79c9a9d26904d1cca8d383bf869edf6f8e7650d85dbc77b041e8c5a0f8"}, - {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95b995d0c413f5d0428b3f880e8fe1660ff9396dcd1f9eedbc311f37b5652e16"}, - {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:635e6bd31c9fb3d475c8f44a089569070d10a9ef18ed13738b03049280281267"}, - {file = "numpy-1.21.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a3d5fb89bfe21be2ef47c0614b9c9c707b7362386c9a3ff1feae63e0267ccb6"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a326af80e86d0e9ce92bcc1e65c8ff88297de4fa14ee936cb2293d414c9ec63"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:791492091744b0fe390a6ce85cc1bf5149968ac7d5f0477288f78c89b385d9af"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0318c465786c1f63ac05d7c4dbcecd4d2d7e13f0959b01b534ea1e92202235c5"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a513bd9c1551894ee3d31369f9b07460ef223694098cf27d399513415855b68"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91c6f5fc58df1e0a3cc0c3a717bb3308ff850abdaa6d2d802573ee2b11f674a8"}, - {file = "numpy-1.21.1-cp38-cp38-win32.whl", hash = "sha256:978010b68e17150db8765355d1ccdd450f9fc916824e8c4e35ee620590e234cd"}, - {file = "numpy-1.21.1-cp38-cp38-win_amd64.whl", hash = "sha256:9749a40a5b22333467f02fe11edc98f022133ee1bfa8ab99bda5e5437b831214"}, - {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d7a4aeac3b94af92a9373d6e77b37691b86411f9745190d2c351f410ab3a791f"}, - {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9e7912a56108aba9b31df688a4c4f5cb0d9d3787386b87d504762b6754fbb1b"}, - {file = "numpy-1.21.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:25b40b98ebdd272bc3020935427a4530b7d60dfbe1ab9381a39147834e985eac"}, - {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a92c5aea763d14ba9d6475803fc7904bda7decc2a0a68153f587ad82941fec1"}, - {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05a0f648eb28bae4bcb204e6fd14603de2908de982e761a2fc78efe0f19e96e1"}, - {file = "numpy-1.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f01f28075a92eede918b965e86e8f0ba7b7797a95aa8d35e1cc8821f5fc3ad6a"}, - {file = "numpy-1.21.1-cp39-cp39-win32.whl", hash = "sha256:88c0b89ad1cc24a5efbb99ff9ab5db0f9a86e9cc50240177a571fbe9c2860ac2"}, - {file = "numpy-1.21.1-cp39-cp39-win_amd64.whl", hash = "sha256:01721eefe70544d548425a07c80be8377096a54118070b8a62476866d5208e33"}, - {file = "numpy-1.21.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d4d1de6e6fb3d28781c73fbde702ac97f03d79e4ffd6598b880b2d95d62ead4"}, - {file = "numpy-1.21.1.zip", hash = "sha256:dff4af63638afcc57a3dfb9e4b26d434a7a602d225b42d746ea7fe2edf1342fd"}, -] -packaging = [ - {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, - {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, -] -pamqp = [ - {file = "pamqp-2.3.0-py2.py3-none-any.whl", hash = "sha256:2f81b5c186f668a67f165193925b6bfd83db4363a6222f599517f29ecee60b02"}, - {file = "pamqp-2.3.0.tar.gz", hash = "sha256:5cd0f5a85e89f20d5f8e19285a1507788031cfca4a9ea6f067e3cf18f5e294e8"}, -] -parso = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -pbr = [ - {file = "pbr-5.8.0-py2.py3-none-any.whl", hash = "sha256:176e8560eaf61e127817ef93d8a844803abb27a4d4637f0ff3bb783129be2e0a"}, - {file = "pbr-5.8.0.tar.gz", hash = "sha256:672d8ebee84921862110f23fcec2acea191ef58543d34dfe9ef3d9f13c31cddf"}, -] -pexpect = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] -photutils = [ - {file = "photutils-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e9b730d6a31532e464914dc0960a8e22693858fb20b315366b013cf28b022a25"}, - {file = "photutils-1.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3cb8483d717baf217ecd316ec882da3bb5ce99033fe0f359a0ebb2a555cec8e7"}, - {file = "photutils-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05d91d90e9667587d816bb6752689fb4d7d4cc2ae0a13d50ca128df95c0cf9a4"}, - {file = "photutils-1.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:500b93bc648ba4aad643972d86e911c33bed02129c191354b914062afff7d210"}, - {file = "photutils-1.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3d1b160c33f9ac09df2fb1278c752905219e7c81dc887fe5c943193e029f7bc2"}, - {file = "photutils-1.2.0-cp37-cp37m-win32.whl", hash = "sha256:e44e3b0eef95bc31664a786dbeb0daf4569fa84fe9f9765b68e93b923d74a333"}, - {file = "photutils-1.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4aad3322214e31627d4ddc7e78499571ea4a02054a2c3f54504c95dd9be22ef4"}, - {file = "photutils-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fa65716526fc371f10362381deb134f73fa56211bdaabed75cea1a0c78680508"}, - {file = "photutils-1.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:699cafb1e761c5396937f016e3e237bb93c92fb28572ed5729088fb66e59fce0"}, - {file = "photutils-1.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6cae27f9c7c441ede39dd9ea6c9c12fdebfe5aa25768ca26d0ffcc7b01b34507"}, - {file = "photutils-1.2.0-cp38-cp38-win32.whl", hash = "sha256:d32656fdd65bdd7dd2ffbe745d7a1c83531bef99626c2ecbbf7bb312ec5c1795"}, - {file = "photutils-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ae0161aee33954eaf17afc993503ad59d3be571f9e1d47eab27b3abd785cf05b"}, - {file = "photutils-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ff13042e0e3a55e49f2b244c8a0e22f2cf19d9f195263c3150f6e46a37022c45"}, - {file = "photutils-1.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a7be401f94927c0f950f160910c747fb118b7065ec2fed92c5c107df9a3f3435"}, - {file = "photutils-1.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:54c5f923de49cd4c32e56eac64aaec0fba5578ed94df0ac389daabeedf48805e"}, - {file = "photutils-1.2.0-cp39-cp39-win32.whl", hash = "sha256:a7761cfafba8965930ef65484683f5d90d0a8a6964e17e80c17d142cf9113eac"}, - {file = "photutils-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:50c0f98cba96b5aa1c788ae929b7a32692756f940bf8c196b39e1a6c3720fcec"}, - {file = "photutils-1.2.0.tar.gz", hash = "sha256:8a060a09bf30f26157531d19f5aeedb1b5ec49ce379eb7df0dade460e76ffd25"}, -] -pickleshare = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] -pillow = [ - {file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"}, - {file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"}, - {file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"}, - {file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"}, - {file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"}, - {file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"}, - {file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"}, - {file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"}, - {file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"}, - {file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"}, - {file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"}, - {file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"}, - {file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"}, - {file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"}, - {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"}, -] -platformdirs = [ - {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, - {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -prompt-toolkit = [ - {file = "prompt_toolkit-3.0.23-py3-none-any.whl", hash = "sha256:5f29d62cb7a0ecacfa3d8ceea05a63cd22500543472d64298fc06ddda906b25d"}, - {file = "prompt_toolkit-3.0.23.tar.gz", hash = "sha256:7053aba00895473cb357819358ef33f11aa97e4ac83d38efb123e5649ceeecaf"}, -] -psutil = [ - {file = "psutil-5.8.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0066a82f7b1b37d334e68697faba68e5ad5e858279fd6351c8ca6024e8d6ba64"}, - {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ae6f386d8d297177fd288be6e8d1afc05966878704dad9847719650e44fc49c"}, - {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:12d844996d6c2b1d3881cfa6fa201fd635971869a9da945cf6756105af73d2df"}, - {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:02b8292609b1f7fcb34173b25e48d0da8667bc85f81d7476584d889c6e0f2131"}, - {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6ffe81843131ee0ffa02c317186ed1e759a145267d54fdef1bc4ea5f5931ab60"}, - {file = "psutil-5.8.0-cp27-none-win32.whl", hash = "sha256:ea313bb02e5e25224e518e4352af4bf5e062755160f77e4b1767dd5ccb65f876"}, - {file = "psutil-5.8.0-cp27-none-win_amd64.whl", hash = "sha256:5da29e394bdedd9144c7331192e20c1f79283fb03b06e6abd3a8ae45ffecee65"}, - {file = "psutil-5.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:74fb2557d1430fff18ff0d72613c5ca30c45cdbfcddd6a5773e9fc1fe9364be8"}, - {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:74f2d0be88db96ada78756cb3a3e1b107ce8ab79f65aa885f76d7664e56928f6"}, - {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:99de3e8739258b3c3e8669cb9757c9a861b2a25ad0955f8e53ac662d66de61ac"}, - {file = "psutil-5.8.0-cp36-cp36m-win32.whl", hash = "sha256:36b3b6c9e2a34b7d7fbae330a85bf72c30b1c827a4366a07443fc4b6270449e2"}, - {file = "psutil-5.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:52de075468cd394ac98c66f9ca33b2f54ae1d9bff1ef6b67a212ee8f639ec06d"}, - {file = "psutil-5.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c6a5fd10ce6b6344e616cf01cc5b849fa8103fbb5ba507b6b2dee4c11e84c935"}, - {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:61f05864b42fedc0771d6d8e49c35f07efd209ade09a5afe6a5059e7bb7bf83d"}, - {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0dd4465a039d343925cdc29023bb6960ccf4e74a65ad53e768403746a9207023"}, - {file = "psutil-5.8.0-cp37-cp37m-win32.whl", hash = "sha256:1bff0d07e76114ec24ee32e7f7f8d0c4b0514b3fae93e3d2aaafd65d22502394"}, - {file = "psutil-5.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:fcc01e900c1d7bee2a37e5d6e4f9194760a93597c97fee89c4ae51701de03563"}, - {file = "psutil-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6223d07a1ae93f86451d0198a0c361032c4c93ebd4bf6d25e2fb3edfad9571ef"}, - {file = "psutil-5.8.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d225cd8319aa1d3c85bf195c4e07d17d3cd68636b8fc97e6cf198f782f99af28"}, - {file = "psutil-5.8.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:28ff7c95293ae74bf1ca1a79e8805fcde005c18a122ca983abf676ea3466362b"}, - {file = "psutil-5.8.0-cp38-cp38-win32.whl", hash = "sha256:ce8b867423291cb65cfc6d9c4955ee9bfc1e21fe03bb50e177f2b957f1c2469d"}, - {file = "psutil-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:90f31c34d25b1b3ed6c40cdd34ff122b1887a825297c017e4cbd6796dd8b672d"}, - {file = "psutil-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6323d5d845c2785efb20aded4726636546b26d3b577aded22492908f7c1bdda7"}, - {file = "psutil-5.8.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:245b5509968ac0bd179287d91210cd3f37add77dad385ef238b275bad35fa1c4"}, - {file = "psutil-5.8.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:90d4091c2d30ddd0a03e0b97e6a33a48628469b99585e2ad6bf21f17423b112b"}, - {file = "psutil-5.8.0-cp39-cp39-win32.whl", hash = "sha256:ea372bcc129394485824ae3e3ddabe67dc0b118d262c568b4d2602a7070afdb0"}, - {file = "psutil-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f4634b033faf0d968bb9220dd1c793b897ab7f1189956e1aa9eae752527127d3"}, - {file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"}, -] -ptyprocess = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycodestyle = [ - {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, - {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, -] -pyerfa = [ - {file = "pyerfa-2.0.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:278832de7803f2fb0ef4b14263200f98dfdb3eaa78dc63835d93796fd8fc42c6"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:629248cebc8626a52e80f69d4e2f30cc6e751f57803f5ba7ec99edd09785d181"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3285d95dfe398a931a633da961f6f1c0b8690f2a3b1c510a4efe639f784cd9c7"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:177f50f0e8354f1a7115c2d4784668b365f1cc2f2c7d1e2f4ddf354160559b32"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:041939a7554a98b72885904ffddd8882567191bee62358727679448480174c31"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-win32.whl", hash = "sha256:f9e149bc3d423ae891f6587c1383fd471ae07744b88152e66b5e9f64a8bc9006"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:f00dc4fc48a16eb39fd0121f2f06c03ee762b79a207cc5b0bc17d94191b51302"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1ba3668e1e181a678ce788d23a4f8666aabd8518f77fdde5157ba4744bc73d4a"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8f08f6e6d75a261bb92b707bea19eba2e46a8fcbfb499b789f3eb0d0352ea00"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da89304d6b25ac056e470f44f85770b04c9674eced07a7f93b5eb0ce1edaabd9"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:36738ba75e7a69e0ea6a7e96a5d33a852816427e7e94e7089c188ef920b02669"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5c077aed4ccd585c1fe2f96ada8edb66e9d27b4ae8ff13ea2783283b298ba0c6"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-win32.whl", hash = "sha256:0833f8ebba9f84a19a04ee5ca5aa90be75729abfbb8328e7a6d89ed1b04e058c"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:e86c08c9c0b75e448818473c6d709e3887a439c05a1aa34042d26774251422b7"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b935fa9d10dfd7206760859236640c835aa652609c0ae8a6584593324eb6f318"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67711a748821c5d91f7a8907b9125094dfc3e5ab6a6b7ad8e207fd6afbe6b37f"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d2c10838241aaf17279468dcc731cb2c09bfb7dd7b340c0f527fd70c7c9e53d1"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:37249e1e2b378d1f56e9379e4bb8f2cf87645c160a8a3e92166a1b7bb7ad7ea6"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f76fb4b64a87da2af9d0b6b79cc25e1ecc5b4143b2b3c8c9f10b221748c5db4d"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-win32.whl", hash = "sha256:486e672c52bf58eab61140968660ac7fb3b756116b53c26c334ae95dadd943ee"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d603f1e8123f98a0593433aa6dad4ba03f0b0ceef4cb3e96f9a69aa7ab8d5c61"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef5590b2075c50395b958f102988e519e339d96509dfdca0360f26dde94c47e7"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ca8c98842f1ae10c1fbcea0e03a41ddc13456da88da2dc9b8335a8c414d7a3"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d3e7dedce1d7e4e044f6f81d192b1f6b373c8ad6716aa8721ec6d3cf4d36f5f3"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:690116a6026ee84ce5fec794c9e21bdc8c0ac8345d6722323810181486745068"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:da5ee24eaf5e5f841f36885ea16461800b7bea11df5b657bcff85d7a7f51d2d8"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-win32.whl", hash = "sha256:7895b7e6f3bc36442d1969bf3bda5a4c3b661be7a5a468798369cbd5d81023d8"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:63a83c35cea8c5d50d53c18089f1e625c0ffc59a7a5b8d44e0f1b3ec5288f183"}, - {file = "pyerfa-2.0.0.1.tar.gz", hash = "sha256:2fd4637ffe2c1e6ede7482c13f583ba7c73119d78bef90175448ce506a0ede30"}, -] -pyflakes = [ - {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, - {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, -] -pygments = [ - {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, - {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, -] -pyparsing = [ - {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, - {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, -] -pyrsistent = [ - {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"}, - {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"}, - {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] -pytest-asyncio = [ - {file = "pytest-asyncio-0.16.0.tar.gz", hash = "sha256:7496c5977ce88c34379df64a66459fe395cd05543f0a2f837016e7144391fcfb"}, - {file = "pytest_asyncio-0.16.0-py3-none-any.whl", hash = "sha256:5f2a21273c47b331ae6aa5b36087047b4899e40f03f18397c0e65fa5cca54e9b"}, -] -pytest-cov = [ - {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, - {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, -] -pytest-mock = [ - {file = "pytest-mock-3.6.1.tar.gz", hash = "sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62"}, - {file = "pytest_mock-3.6.1-py3-none-any.whl", hash = "sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3"}, -] -pytest-sugar = [ - {file = "pytest-sugar-0.9.4.tar.gz", hash = "sha256:b1b2186b0a72aada6859bea2a5764145e3aaa2c1cfbb23c3a19b5f7b697563d3"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] -pytz = [ - {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, - {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, -] -pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -regex = [ - {file = "regex-2021.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9345b6f7ee578bad8e475129ed40123d265464c4cfead6c261fd60fc9de00bcf"}, - {file = "regex-2021.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:416c5f1a188c91e3eb41e9c8787288e707f7d2ebe66e0a6563af280d9b68478f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0538c43565ee6e703d3a7c3bdfe4037a5209250e8502c98f20fea6f5fdf2965"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee1227cf08b6716c85504aebc49ac827eb88fcc6e51564f010f11a406c0a667"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6650f16365f1924d6014d2ea770bde8555b4a39dc9576abb95e3cd1ff0263b36"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30ab804ea73972049b7a2a5c62d97687d69b5a60a67adca07eb73a0ddbc9e29f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68a067c11463de2a37157930d8b153005085e42bcb7ad9ca562d77ba7d1404e0"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:162abfd74e88001d20cb73ceaffbfe601469923e875caf9118333b1a4aaafdc4"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9ed0b1e5e0759d6b7f8e2f143894b2a7f3edd313f38cf44e1e15d360e11749b"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:473e67837f786404570eae33c3b64a4b9635ae9f00145250851a1292f484c063"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2fee3ed82a011184807d2127f1733b4f6b2ff6ec7151d83ef3477f3b96a13d03"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d5fd67df77bab0d3f4ea1d7afca9ef15c2ee35dfb348c7b57ffb9782a6e4db6e"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5d408a642a5484b9b4d11dea15a489ea0928c7e410c7525cd892f4d04f2f617b"}, - {file = "regex-2021.11.10-cp310-cp310-win32.whl", hash = "sha256:98ba568e8ae26beb726aeea2273053c717641933836568c2a0278a84987b2a1a"}, - {file = "regex-2021.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:780b48456a0f0ba4d390e8b5f7c661fdd218934388cde1a974010a965e200e12"}, - {file = "regex-2021.11.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dba70f30fd81f8ce6d32ddeef37d91c8948e5d5a4c63242d16a2b2df8143aafc"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1f54b9b4b6c53369f40028d2dd07a8c374583417ee6ec0ea304e710a20f80a0"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbb9dc00e39f3e6c0ef48edee202f9520dafb233e8b51b06b8428cfcb92abd30"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666abff54e474d28ff42756d94544cdfd42e2ee97065857413b72e8a2d6a6345"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5537f71b6d646f7f5f340562ec4c77b6e1c915f8baae822ea0b7e46c1f09b733"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2e07c6a26ed4bea91b897ee2b0835c21716d9a469a96c3e878dc5f8c55bb23"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca5f18a75e1256ce07494e245cdb146f5a9267d3c702ebf9b65c7f8bd843431e"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:74cbeac0451f27d4f50e6e8a8f3a52ca074b5e2da9f7b505c4201a57a8ed6286"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:3598893bde43091ee5ca0a6ad20f08a0435e93a69255eeb5f81b85e81e329264"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:50a7ddf3d131dc5633dccdb51417e2d1910d25cbcf842115a3a5893509140a3a"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:61600a7ca4bcf78a96a68a27c2ae9389763b5b94b63943d5158f2a377e09d29a"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:563d5f9354e15e048465061509403f68424fef37d5add3064038c2511c8f5e00"}, - {file = "regex-2021.11.10-cp36-cp36m-win32.whl", hash = "sha256:93a5051fcf5fad72de73b96f07d30bc29665697fb8ecdfbc474f3452c78adcf4"}, - {file = "regex-2021.11.10-cp36-cp36m-win_amd64.whl", hash = "sha256:b483c9d00a565633c87abd0aaf27eb5016de23fed952e054ecc19ce32f6a9e7e"}, - {file = "regex-2021.11.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fff55f3ce50a3ff63ec8e2a8d3dd924f1941b250b0aac3d3d42b687eeff07a8e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32d2a2b02ccbef10145df9135751abea1f9f076e67a4e261b05f24b94219e36"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53db2c6be8a2710b359bfd3d3aa17ba38f8aa72a82309a12ae99d3c0c3dcd74d"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2207ae4f64ad3af399e2d30dde66f0b36ae5c3129b52885f1bffc2f05ec505c8"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ca078bb666c4a9d1287a379fe617a6dccd18c3e8a7e6c7e1eb8974330c626a"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd33eb9bdcfbabab3459c9ee651d94c842bc8a05fabc95edf4ee0c15a072495e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05b7d6d7e64efe309972adab77fc2af8907bb93217ec60aa9fe12a0dad35874f"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:42b50fa6666b0d50c30a990527127334d6b96dd969011e843e726a64011485da"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6e1d2cc79e8dae442b3fa4a26c5794428b98f81389af90623ffcc650ce9f6732"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:0416f7399e918c4b0e074a0f66e5191077ee2ca32a0f99d4c187a62beb47aa05"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ce298e3d0c65bd03fa65ffcc6db0e2b578e8f626d468db64fdf8457731052942"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dc07f021ee80510f3cd3af2cad5b6a3b3a10b057521d9e6aaeb621730d320c5a"}, - {file = "regex-2021.11.10-cp37-cp37m-win32.whl", hash = "sha256:e71255ba42567d34a13c03968736c5d39bb4a97ce98188fafb27ce981115beec"}, - {file = "regex-2021.11.10-cp37-cp37m-win_amd64.whl", hash = "sha256:07856afef5ffcc052e7eccf3213317fbb94e4a5cd8177a2caa69c980657b3cb4"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba05430e819e58544e840a68b03b28b6d328aff2e41579037e8bab7653b37d83"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f301b11b9d214f83ddaf689181051e7f48905568b0c7017c04c06dfd065e244"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aaa4e0705ef2b73dd8e36eeb4c868f80f8393f5f4d855e94025ce7ad8525f50"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:788aef3549f1924d5c38263104dae7395bf020a42776d5ec5ea2b0d3d85d6646"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8af619e3be812a2059b212064ea7a640aff0568d972cd1b9e920837469eb3cb"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85bfa6a5413be0ee6c5c4a663668a2cad2cbecdee367630d097d7823041bdeec"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f23222527b307970e383433daec128d769ff778d9b29343fb3496472dc20dabe"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:da1a90c1ddb7531b1d5ff1e171b4ee61f6345119be7351104b67ff413843fe94"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f5be7805e53dafe94d295399cfbe5227f39995a997f4fd8539bf3cbdc8f47ca8"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a955b747d620a50408b7fdf948e04359d6e762ff8a85f5775d907ceced715129"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:139a23d1f5d30db2cc6c7fd9c6d6497872a672db22c4ae1910be22d4f4b2068a"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ca49e1ab99593438b204e00f3970e7a5f70d045267051dfa6b5f4304fcfa1dbf"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:96fc32c16ea6d60d3ca7f63397bff5c75c5a562f7db6dec7d412f7c4d2e78ec0"}, - {file = "regex-2021.11.10-cp38-cp38-win32.whl", hash = "sha256:0617383e2fe465732af4509e61648b77cbe3aee68b6ac8c0b6fe934db90be5cc"}, - {file = "regex-2021.11.10-cp38-cp38-win_amd64.whl", hash = "sha256:a3feefd5e95871872673b08636f96b61ebef62971eab044f5124fb4dea39919d"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7f325be2804246a75a4f45c72d4ce80d2443ab815063cdf70ee8fb2ca59ee1b"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:537ca6a3586931b16a85ac38c08cc48f10fc870a5b25e51794c74df843e9966d"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2afb0fd1747f33f1ee3e209bce1ed582d1896b240ccc5e2697e3275f037c7"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:432bd15d40ed835a51617521d60d0125867f7b88acf653e4ed994a1f8e4995dc"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b43c2b8a330a490daaef5a47ab114935002b13b3f9dc5da56d5322ff218eeadb"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:962b9a917dd7ceacbe5cd424556914cb0d636001e393b43dc886ba31d2a1e449"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa8c626d6441e2d04b6ee703ef2d1e17608ad44c7cb75258c09dd42bacdfc64b"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3c5fb32cc6077abad3bbf0323067636d93307c9fa93e072771cf9a64d1c0f3ef"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cd410a1cbb2d297c67d8521759ab2ee3f1d66206d2e4328502a487589a2cb21b"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e6096b0688e6e14af6a1b10eaad86b4ff17935c49aa774eac7c95a57a4e8c296"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:529801a0d58809b60b3531ee804d3e3be4b412c94b5d267daa3de7fadef00f49"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f594b96fe2e0821d026365f72ac7b4f0b487487fb3d4aaf10dd9d97d88a9737"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2409b5c9cef7054dde93a9803156b411b677affc84fca69e908b1cb2c540025d"}, - {file = "regex-2021.11.10-cp39-cp39-win32.whl", hash = "sha256:3b5df18db1fccd66de15aa59c41e4f853b5df7550723d26aa6cb7f40e5d9da5a"}, - {file = "regex-2021.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:83ee89483672b11f8952b158640d0c0ff02dc43d9cb1b70c1564b49abe92ce29"}, - {file = "regex-2021.11.10.tar.gz", hash = "sha256:f341ee2df0999bfdf7a95e448075effe0db212a59387de1a70690e4acb03d4c6"}, -] -requests = [ - {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, - {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, -] -restructuredtext-lint = [ - {file = "restructuredtext_lint-1.3.2.tar.gz", hash = "sha256:d3b10a1fe2ecac537e51ae6d151b223b78de9fafdd50e5eb6b08c243df173c80"}, -] -rstcheck = [ - {file = "rstcheck-3.3.1.tar.gz", hash = "sha256:92c4f79256a54270e0402ba16a2f92d0b3c15c8f4410cb9c57127067c215741f"}, -] -sdss-access = [ - {file = "sdss-access-2.0.0.tar.gz", hash = "sha256:7218c454cc6511ef613044ba514a302f55c032e771e3830dc30ee264587cf1b7"}, - {file = "sdss_access-2.0.0-py2.py3-none-any.whl", hash = "sha256:ef1f90a29fb42d8eeb0f16c28ed8680d0879d2e70a88690ec2ec78b52f436004"}, -] -sdss-clu = [ - {file = "sdss-clu-1.5.5.tar.gz", hash = "sha256:21a5e164ed45fd210b5d33bd645ead1887596646c9b208f828ba1f962f70123d"}, - {file = "sdss_clu-1.5.5-py3-none-any.whl", hash = "sha256:a078c9771259b025c59375806026db20f56a86af0b5f62fb681ce31f21aa45ff"}, -] -sdss-cluplus = [ - {file = "sdss-cluplus-0.0.16.tar.gz", hash = "sha256:93400bd4a2f4ce0118c0cdfbbbedec98aa863ffac2d9b60d70976af003df05b9"}, - {file = "sdss_cluplus-0.0.16-py3-none-any.whl", hash = "sha256:ec9b90be448147359dec1ffc8b69625b12c699d362a10206a705b83a50936e08"}, -] -sdss-tree = [ - {file = "sdss-tree-3.1.0.tar.gz", hash = "sha256:801b7eb89643322fbacdc4cb392a3c199474af1ea204373058764e5f5c62fd4b"}, - {file = "sdss_tree-3.1.0-py2.py3-none-any.whl", hash = "sha256:1ca03840b0c83f49f6130ceef7a0e6ede0f5fd0401b63923e77ade3a3b6a8080"}, -] -sdsstools = [ - {file = "sdsstools-0.4.13-py3-none-any.whl", hash = "sha256:758ce248bf5794cfd62eacf053f2cda2e05d3aeb561919b9db5811d76d2aed59"}, - {file = "sdsstools-0.4.13.tar.gz", hash = "sha256:f7d2463017e71c4dcb9a6647192f8258f0242a1ae511d731b88f1fdd1ad33656"}, -] -semantic-version = [ - {file = "semantic_version-2.8.5-py2.py3-none-any.whl", hash = "sha256:45e4b32ee9d6d70ba5f440ec8cc5221074c7f4b0e8918bdab748cc37912440a9"}, - {file = "semantic_version-2.8.5.tar.gz", hash = "sha256:d2cb2de0558762934679b9a104e82eca7af448c9f4974d1f3eeccff651df8a54"}, -] -setuptools-scm = [ - {file = "setuptools_scm-6.3.2-py3-none-any.whl", hash = "sha256:4c64444b1d49c4063ae60bfe1680f611c8b13833d556fd1d6050c0023162a119"}, - {file = "setuptools_scm-6.3.2.tar.gz", hash = "sha256:a49aa8081eeb3514eb9728fa5040f2eaa962d6c6f4ec9c32f6c1fba88f88a0f2"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -sphinx = [ - {file = "Sphinx-3.5.4-py3-none-any.whl", hash = "sha256:2320d4e994a191f4b4be27da514e46b3d6b420f2ff895d064f52415d342461e8"}, - {file = "Sphinx-3.5.4.tar.gz", hash = "sha256:19010b7b9fa0dc7756a6e105b2aacd3a80f798af3c25c273be64d7beeb482cb1"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -stevedore = [ - {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"}, - {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"}, -] -termcolor = [ - {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -tomli = [ - {file = "tomli-1.2.2-py3-none-any.whl", hash = "sha256:f04066f68f5554911363063a30b108d2b5a5b1a010aa8b6132af78489fe3aade"}, - {file = "tomli-1.2.2.tar.gz", hash = "sha256:c6ce0015eb38820eaf32b5db832dbc26deb3dd427bd5f6556cf0acac2c214fee"}, -] -tqdm = [ - {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"}, - {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"}, -] -traitlets = [ - {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, - {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, -] -typed-ast = [ - {file = "typed_ast-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b310a207ee9fde3f46ba327989e6cba4195bc0c8c70a158456e7b10233e6bed"}, - {file = "typed_ast-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52ca2b2b524d770bed7a393371a38e91943f9160a190141e0df911586066ecda"}, - {file = "typed_ast-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:14fed8820114a389a2b7e91624db5f85f3f6682fda09fe0268a59aabd28fe5f5"}, - {file = "typed_ast-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:65c81abbabda7d760df7304d843cc9dbe7ef5d485504ca59a46ae2d1731d2428"}, - {file = "typed_ast-1.5.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:37ba2ab65a0028b1a4f2b61a8fe77f12d242731977d274a03d68ebb751271508"}, - {file = "typed_ast-1.5.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:49af5b8f6f03ed1eb89ee06c1d7c2e7c8e743d720c3746a5857609a1abc94c94"}, - {file = "typed_ast-1.5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e4374a76e61399a173137e7984a1d7e356038cf844f24fd8aea46c8029a2f712"}, - {file = "typed_ast-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ea517c2bb11c5e4ba7a83a91482a2837041181d57d3ed0749a6c382a2b6b7086"}, - {file = "typed_ast-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:51040bf45aacefa44fa67fb9ebcd1f2bec73182b99a532c2394eea7dabd18e24"}, - {file = "typed_ast-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:806e0c7346b9b4af8c62d9a29053f484599921a4448c37fbbcbbf15c25138570"}, - {file = "typed_ast-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a67fd5914603e2165e075f1b12f5a8356bfb9557e8bfb74511108cfbab0f51ed"}, - {file = "typed_ast-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:224afecb8b39739f5c9562794a7c98325cb9d972712e1a98b6989a4720219541"}, - {file = "typed_ast-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:155b74b078be842d2eb630dd30a280025eca0a5383c7d45853c27afee65f278f"}, - {file = "typed_ast-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:361b9e5d27bd8e3ccb6ea6ad6c4f3c0be322a1a0f8177db6d56264fa0ae40410"}, - {file = "typed_ast-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:618912cbc7e17b4aeba86ffe071698c6e2d292acbd6d1d5ec1ee724b8c4ae450"}, - {file = "typed_ast-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7e6731044f748340ef68dcadb5172a4b1f40847a2983fe3983b2a66445fbc8e6"}, - {file = "typed_ast-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e8a9b9c87801cecaad3b4c2b8876387115d1a14caa602c1618cedbb0cb2a14e6"}, - {file = "typed_ast-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:ec184dfb5d3d11e82841dbb973e7092b75f306b625fad7b2e665b64c5d60ab3f"}, - {file = "typed_ast-1.5.0.tar.gz", hash = "sha256:ff4ad88271aa7a55f19b6a161ed44e088c393846d954729549e3cde8257747bb"}, -] -typing-extensions = [ - {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, - {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, -] -urllib3 = [ - {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"}, - {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"}, -] -wcwidth = [ - {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, - {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, -] -yarl = [ - {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"}, - {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"}, - {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"}, - {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"}, - {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"}, - {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"}, - {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"}, - {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"}, - {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"}, - {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"}, - {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"}, - {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"}, - {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"}, - {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"}, - {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"}, - {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"}, - {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"}, - {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"}, - {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"}, - {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"}, - {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"}, - {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"}, -] -zipp = [ - {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, - {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, -] From 6058e06224d5779940a868af961ce3630e69fd1b Mon Sep 17 00:00:00 2001 From: mgjeon Date: Tue, 8 Feb 2022 17:15:36 +0900 Subject: [PATCH 07/17] add ignores to flake8 & comment out isort --- .flake8 | 6 +++++- .github/workflows/test.yml | 8 ++++---- pyproject.toml | 2 +- python/lvmagp/actor/commands/guide.py | 2 +- python/lvmagp/actor/commfunc.py | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.flake8 b/.flake8 index d0adef6..6c59d56 100644 --- a/.flake8 +++ b/.flake8 @@ -4,7 +4,11 @@ ignore = H101 N W504 - + E266 + F401 + F841 + W503 + per-file-ignores = */__init__.py:E,W diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 400d037..03715b4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,10 +43,10 @@ jobs: # stop the build if there are Python syntax errors or undefined names flake8 ./python/lvmagp --count --show-source --statistics - - name: Lint with isort - run: | - pip install isort - isort -c . + # - name: Lint with isort + # run: | + # pip install isort + # isort -c . #- name: Test with pytest # run: | diff --git a/pyproject.toml b/pyproject.toml index 4f73e0f..e722ef4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,7 @@ black = "^21.7-beta.0" sdss-cluplus = "^0.0.16" [tool.poetry.dev-dependencies] -ipython = ">=7.11.0" +ipython = ">=7.31.1" matplotlib = ">=3.1.1" flake8 = ">=3.7.9" doc8 = ">=0.8.0" diff --git a/python/lvmagp/actor/commands/guide.py b/python/lvmagp/actor/commands/guide.py index 139aad5..bed4355 100644 --- a/python/lvmagp/actor/commands/guide.py +++ b/python/lvmagp/actor/commands/guide.py @@ -6,7 +6,7 @@ from lvmagp.actor.commfunc import LVMEastCamera # noqa: F401 from lvmagp.actor.commfunc import ( - LVMFiborselector, + LVMFiberselector, LVMFocuser, LVMKMirror, LVMTelescope, diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index f75644b..0d58ba9 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -554,7 +554,7 @@ def __read_parameters(self): self.screen_alt_d = -999 self.screen_az_d = -999 - ############# Autofocus functions ######################### + ######## Autofocus functions ############# def coarse_autofocus(self): """ Find the focus coarsely by scanning whole reachable position. From 7a14522eabca3be1ff2ede854d89b21c992a8b91 Mon Sep 17 00:00:00 2001 From: Hojae Ahn Date: Tue, 15 Feb 2022 16:29:05 +0900 Subject: [PATCH 08/17] v.0.2.6a API updating --- .idea/vcs.xml | 1 - poetry.lock | 773 +++++++++++-------------- python/lvmagp/actor/commands/guide.py | 6 +- python/lvmagp/actor/commands/slew.py | 2 +- python/lvmagp/actor/commfunc.py | 535 ++++++++++++++--- python/lvmagp/actor/internalfunc.py | 4 +- python/lvmagp/actor/user_parameters.py | 5 + 7 files changed, 795 insertions(+), 531 deletions(-) diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 929b291..3ace023 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,7 +2,6 @@ - \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 099d988..1acde93 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,10 @@ [[package]] name = "aio-pika" -version = "6.8.0" +version = "6.8.1" description = "Wrapper for the aiormq for asyncio and humans." category = "main" optional = false -python-versions = ">3.5, <4" +python-versions = ">=3.5, <4" [package.dependencies] aiormq = ">=3.2.3,<4" @@ -19,7 +19,7 @@ version = "3.3.1" description = "Pure python AMQP asynchronous client library" category = "main" optional = false -python-versions = ">3.5" +python-versions = ">3.5.*" [package.dependencies] pamqp = "2.3.0" @@ -72,17 +72,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" -version = "21.2.0" +version = "21.4.0" description = "Classes Without Boilerplate" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "babel" @@ -105,7 +105,7 @@ python-versions = "*" [[package]] name = "black" -version = "21.11b1" +version = "21.12b0" description = "The uncompromising code formatter." category = "main" optional = false @@ -116,7 +116,6 @@ click = ">=7.1.2" mypy-extensions = ">=0.4.3" pathspec = ">=0.9.0,<1" platformdirs = ">=2" -regex = ">=2021.4.4" tomli = ">=0.2.6,<2.0.0" typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} typing-extensions = ">=3.10.0.0" @@ -138,7 +137,7 @@ python-versions = "*" [[package]] name = "charset-normalizer" -version = "2.0.8" +version = "2.0.10" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -192,7 +191,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "configparser" -version = "5.1.0" +version = "5.2.0" description = "Updated configparser from Python 3.8 for Python 2.6+." category = "main" optional = false @@ -200,7 +199,7 @@ python-versions = ">=3.6" [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "types-backports", "pytest-black (>=0.3.7)", "pytest-mypy"] [[package]] name = "coverage" @@ -241,7 +240,7 @@ test = ["coveralls", "flake8", "flake8-bugbear", "flake8-isort", "pytest", "pyte [[package]] name = "decorator" -version = "5.1.0" +version = "5.1.1" description = "Decorators for Humans" category = "dev" optional = false @@ -285,14 +284,14 @@ pyflakes = ">=2.4.0,<2.5.0" [[package]] name = "fonttools" -version = "4.28.2" +version = "4.29.0" description = "Tools to manipulate font files" category = "dev" optional = false python-versions = ">=3.7" [package.extras] -all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=13.0.0)", "xattr"] +all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["scipy", "munkres"] lxml = ["lxml (>=4.0,<5)"] @@ -301,7 +300,7 @@ plot = ["matplotlib"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=13.0.0)"] +unicode = ["unicodedata2 (>=14.0.0)"] woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] [[package]] @@ -367,7 +366,7 @@ toml = {version = ">=0.10.2", markers = "python_version > \"3.6\""} [[package]] name = "ipython" -version = "7.30.1" +version = "7.31.1" description = "IPython: Productive Interactive Computing" category = "dev" optional = false @@ -484,7 +483,7 @@ python-versions = ">=3.6" [[package]] name = "matplotlib" -version = "3.5.0" +version = "3.5.1" description = "Python plotting package" category = "dev" optional = false @@ -522,11 +521,11 @@ python-versions = "*" [[package]] name = "multidict" -version = "5.2.0" +version = "6.0.2" description = "multidict implementation" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "mypy-extensions" @@ -538,11 +537,11 @@ python-versions = "*" [[package]] name = "numpy" -version = "1.21.1" +version = "1.21.5" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.7,<3.11" [[package]] name = "packaging" @@ -607,7 +606,7 @@ ptyprocess = ">=0.5" [[package]] name = "photutils" -version = "1.2.0" +version = "1.3.0" description = "An Astropy package for source detection and photometry" category = "main" optional = false @@ -632,19 +631,19 @@ python-versions = "*" [[package]] name = "pillow" -version = "8.4.0" +version = "9.0.0" description = "Python Imaging Library (Fork)" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "platformdirs" -version = "2.4.0" +version = "2.4.1" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] @@ -667,7 +666,7 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prompt-toolkit" -version = "3.0.23" +version = "3.0.24" description = "Library for building powerful interactive command lines in Python" category = "main" optional = false @@ -678,7 +677,7 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.8.0" +version = "5.9.0" description = "Cross-platform lib for process and system monitoring in Python." category = "main" optional = false @@ -736,7 +735,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pygments" -version = "2.10.0" +version = "2.11.2" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false @@ -744,7 +743,7 @@ python-versions = ">=3.5" [[package]] name = "pyparsing" -version = "3.0.6" +version = "3.0.7" description = "Python parsing module" category = "main" optional = false @@ -755,11 +754,11 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyrsistent" -version = "0.18.0" +version = "0.18.1" description = "Persistent/Functional/Immutable data structures" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "pytest" @@ -785,17 +784,18 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm [[package]] name = "pytest-asyncio" -version = "0.16.0" -description = "Pytest support for asyncio." +version = "0.17.2" +description = "Pytest support for asyncio" category = "dev" optional = false -python-versions = ">= 3.6" +python-versions = ">=3.7" [package.dependencies] -pytest = ">=5.4.0" +pytest = ">=6.1.0" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.8\""} [package.extras] -testing = ["coverage", "hypothesis (>=5.7.1)"] +testing = ["coverage (==6.2)", "hypothesis (>=5.7.1)", "flaky (>=3.5.0)", "mypy (==0.931)"] [[package]] name = "pytest-cov" @@ -866,21 +866,13 @@ category = "main" optional = false python-versions = ">=3.6" -[[package]] -name = "regex" -version = "2021.11.10" -description = "Alternative regular expression module, to replace re." -category = "main" -optional = false -python-versions = "*" - [[package]] name = "requests" -version = "2.26.0" +version = "2.27.1" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.dependencies] certifi = ">=2017.4.17" @@ -935,7 +927,7 @@ docs = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark ( [[package]] name = "sdss-clu" -version = "1.5.5" +version = "1.5.6" description = "A new protocol for SDSS actors." category = "main" optional = false @@ -968,7 +960,7 @@ sdsstools = ">=0.4.0" [[package]] name = "sdss-tree" -version = "3.1.0" +version = "3.1.1" description = "Control and setup of SDSS tree environment and modules" category = "main" optional = false @@ -1011,7 +1003,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "setuptools-scm" -version = "6.3.2" +version = "6.4.2" description = "the blessed package to manage your versions by scm tags" category = "dev" optional = false @@ -1022,7 +1014,8 @@ packaging = ">=20.0" tomli = ">=1.0.0" [package.extras] -toml = ["setuptools (>=42)", "tomli (>=1.0.0)"] +test = ["pytest (>=6.2)", "virtualenv (>20)"] +toml = ["setuptools (>=42)"] [[package]] name = "six" @@ -1172,7 +1165,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.2.2" +version = "1.2.3" description = "A lil' TOML parser" category = "main" optional = false @@ -1207,7 +1200,7 @@ test = ["pytest"] [[package]] name = "typed-ast" -version = "1.5.0" +version = "1.5.2" description = "a fork of Python 2 and 3 ast modules with type comment support" category = "main" optional = false @@ -1223,7 +1216,7 @@ python-versions = ">=3.6" [[package]] name = "urllib3" -version = "1.26.7" +version = "1.26.8" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false @@ -1257,15 +1250,15 @@ typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [[package]] name = "zipp" -version = "3.6.0" +version = "3.7.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] [metadata] lock-version = "1.1" @@ -1274,8 +1267,8 @@ content-hash = "7be3affd459b0a3a6fcadacc13c7bef0110401fce866cc88e910a0816d7c2f04 [metadata.files] aio-pika = [ - {file = "aio-pika-6.8.0.tar.gz", hash = "sha256:1d4305a5f78af3857310b4fe48348cdcf6c097e0e275ea88c2cd08570531a369"}, - {file = "aio_pika-6.8.0-py3-none-any.whl", hash = "sha256:e69afef8695f47c5d107bbdba21bdb845d5c249acb3be53ef5c2d497b02657c0"}, + {file = "aio-pika-6.8.1.tar.gz", hash = "sha256:c2b2b46949a34252ff0e64c3bc208eef1893e5791b51aeefabf1676788d56b66"}, + {file = "aio_pika-6.8.1-py3-none-any.whl", hash = "sha256:059ab8ecc03d73997f64ed28df7269105984232174d0e6406389c4e8ed30941c"}, ] aiormq = [ {file = "aiormq-3.3.1-py3-none-any.whl", hash = "sha256:e584dac13a242589aaf42470fd3006cb0dc5aed6506cbd20357c7ec8bbe4a89e"}, @@ -1312,8 +1305,8 @@ atomicwrites = [ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, - {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] babel = [ {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, @@ -1324,16 +1317,16 @@ backcall = [ {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] black = [ - {file = "black-21.11b1-py3-none-any.whl", hash = "sha256:802c6c30b637b28645b7fde282ed2569c0cd777dbe493a41b6a03c1d903f99ac"}, - {file = "black-21.11b1.tar.gz", hash = "sha256:a042adbb18b3262faad5aff4e834ff186bb893f95ba3a8013f09de1e5569def2"}, + {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, + {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, ] certifi = [ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.8.tar.gz", hash = "sha256:735e240d9a8506778cd7a453d97e817e536bb1fc29f4f6961ce297b9c7a917b0"}, - {file = "charset_normalizer-2.0.8-py3-none-any.whl", hash = "sha256:83fcdeb225499d6344c8f7f34684c2981270beacc32ede2e669e94f7fa544405"}, + {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"}, + {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"}, ] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, @@ -1352,8 +1345,8 @@ colorama = [ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] configparser = [ - {file = "configparser-5.1.0-py3-none-any.whl", hash = "sha256:f99c2256b24c551de13cf9e42c7b5db96fb133f0ca4de5dcb1df1aaf89f48298"}, - {file = "configparser-5.1.0.tar.gz", hash = "sha256:202b9679a809b703720afa2eacaad4c6c2d63196070e5d9edc953c0489dfd536"}, + {file = "configparser-5.2.0-py3-none-any.whl", hash = "sha256:e8b39238fb6f0153a069aa253d349467c3c4737934f253ef6abac5fe0eca1e5d"}, + {file = "configparser-5.2.0.tar.gz", hash = "sha256:1b35798fdf1713f1c3139016cfcbc461f09edbf099d1fb658d4b7479fcaa3daa"}, ] coverage = [ {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"}, @@ -1412,8 +1405,8 @@ daemonocle = [ {file = "daemonocle-1.2.3.tar.gz", hash = "sha256:741ce6abc37c85ca396379a0d45710ac27ab5f17eeaadbc64a0f5cc4c4f666ea"}, ] decorator = [ - {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"}, - {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"}, + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] doc8 = [ {file = "doc8-0.10.1-py3-none-any.whl", hash = "sha256:551a61df5915f0107e518d582fead47a0a56df7d4a9374feab955ea14dedea84"}, @@ -1428,8 +1421,8 @@ flake8 = [ {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, ] fonttools = [ - {file = "fonttools-4.28.2-py3-none-any.whl", hash = "sha256:eff1da7ea274c54cb8842853005a139f711646cbf6f1bcfb6c9b86a627f35ff0"}, - {file = "fonttools-4.28.2.zip", hash = "sha256:dca694331af74c8ad47acc5171e57f6b78fac5692bf050f2ab572964577ac0dd"}, + {file = "fonttools-4.29.0-py3-none-any.whl", hash = "sha256:ed9496e5650b977a697c50ac99c8e8331f9eae3f99e5ae649623359103306dfe"}, + {file = "fonttools-4.29.0.zip", hash = "sha256:f4834250db2c9855c3385459579dbb5cdf74349ab059ea0e619359b65ae72037"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -1456,8 +1449,8 @@ ipdb = [ {file = "ipdb-0.13.9.tar.gz", hash = "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5"}, ] ipython = [ - {file = "ipython-7.30.1-py3-none-any.whl", hash = "sha256:fc60ef843e0863dd4e24ab2bb5698f071031332801ecf8d1aeb4fb622056545c"}, - {file = "ipython-7.30.1.tar.gz", hash = "sha256:cb6aef731bf708a7727ab6cde8df87f0281b1427d41e65d62d4b68934fa54e97"}, + {file = "ipython-7.31.1-py3-none-any.whl", hash = "sha256:55df3e0bd0f94e715abd968bedd89d4e8a7bce4bf498fb123fed4f5398fea874"}, + {file = "ipython-7.31.1.tar.gz", hash = "sha256:b5548ec5329a4bcf054a5deed5099b0f9622eb9ea51aaa7104d215fece201d8c"}, ] isort = [ {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, @@ -1562,41 +1555,41 @@ markupsafe = [ {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, ] matplotlib = [ - {file = "matplotlib-3.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4b018ea6f26424a0852eb60eb406420d9f0d34f65736ea7bbfbb104946a66d86"}, - {file = "matplotlib-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a07ff2565da72a7b384a9e000b15b6b8270d81370af8a3531a16f6fbcee023cc"}, - {file = "matplotlib-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2eea16883aa7724c95eea0eb473ab585c6cf66f0e28f7f13e63deb38f4fd6d0f"}, - {file = "matplotlib-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e020a42f3338823a393dd2f80e39a2c07b9f941dfe2c778eb104eeb33d60bb5"}, - {file = "matplotlib-3.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bac8eb1eccef540d7f4e844b6313d9f7722efd48c07e1b4bfec1056132127fd"}, - {file = "matplotlib-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a7cb59ebd63a8ac4542ec1c61dd08724f82ec3aa7bb6b4b9e212d43c611ce3d"}, - {file = "matplotlib-3.5.0-cp310-cp310-win32.whl", hash = "sha256:6e0e6b2111165522ad336705499b1f968c34a9e84d05d498ee5af0b5697d1efe"}, - {file = "matplotlib-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:ff5d9fe518ad2de14ce82ab906b6ab5c2b0c7f4f984400ff8a7a905daa580a0a"}, - {file = "matplotlib-3.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:66b172610db0ececebebb09d146f54205f87c7b841454e408fba854764f91bdd"}, - {file = "matplotlib-3.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee3d9ff16d749a9aa521bd7d86f0dbf256b2d2ac8ce31b19e4d2c86d2f2ff0b6"}, - {file = "matplotlib-3.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970aa97297537540369d05fe0fd1bb952593f9ab696c9b427c06990a83e2418b"}, - {file = "matplotlib-3.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:153a0cf6a6ff4f406a0600d2034710c49988bacc6313d193b32716f98a697580"}, - {file = "matplotlib-3.5.0-cp37-cp37m-win32.whl", hash = "sha256:6db02c5605f063b67780f4d5753476b6a4944343284aa4e93c5e8ff6e9ec7f76"}, - {file = "matplotlib-3.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:df0042cab69f4d246f4cb8fc297770ac4ae6ec2983f61836b04a117722037dcd"}, - {file = "matplotlib-3.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a7bf8b05c214d32fb7ca7c001fde70b9b426378e897b0adbf77b85ea3569d56a"}, - {file = "matplotlib-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0abf8b51cc6d3ba34d1b15b26e329f23879848a0cf1216954c1f432ffc7e1af7"}, - {file = "matplotlib-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:13930a0c9bec0fd25f43c448b047a21af1353328b946f044a8fc3be077c6b1a8"}, - {file = "matplotlib-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18f6e52386300db5cc4d1e9019ad9da2e80658bab018834d963ebb0aa5355095"}, - {file = "matplotlib-3.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba107add08e12600b072cf3c47aaa1ab85dd4d3c48107a5d3377d1bf80f8b235"}, - {file = "matplotlib-3.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2089b9014792dcc87bb1d620cde847913338abf7d957ef05587382b0cb76d44e"}, - {file = "matplotlib-3.5.0-cp38-cp38-win32.whl", hash = "sha256:f23fbf70d2e80f4e03a83fc1206a8306d9bc50482fee4239f10676ce7e470c83"}, - {file = "matplotlib-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:71a1851111f23f82fc43d2b6b2bfdd3f760579a664ebc939576fe21cc6133d01"}, - {file = "matplotlib-3.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d092b7ba63182d2dd427904e3eb58dd5c46ec67c5968de14a4b5007010a3a4cc"}, - {file = "matplotlib-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ac17a7e7b06ee426a4989f0b7f24ab1a592e39cdf56353a90f4e998bc0bf44d6"}, - {file = "matplotlib-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a5b62d1805cc83d755972033c05cea78a1e177a159fc84da5c9c4ab6303ccbd9"}, - {file = "matplotlib-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:666d717a4798eb9c5d3ae83fe80c7bc6ed696b93e879cb01cb24a74155c73612"}, - {file = "matplotlib-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65f877882b7ddede7090c7d87be27a0f4720fe7fc6fddd4409c06e1aa0f1ae8d"}, - {file = "matplotlib-3.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7baf23adb698d8c6ca7339c9dde00931bc47b2dd82fa912827fef9f93db77f5e"}, - {file = "matplotlib-3.5.0-cp39-cp39-win32.whl", hash = "sha256:b3b687e905da32e5f2e5f16efa713f5d1fcd9fb8b8c697895de35c91fedeb086"}, - {file = "matplotlib-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6cef5b31e27c31253c0f852b629a38d550ae66ec6850129c49d872f9ee428cb"}, - {file = "matplotlib-3.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0dcaf5648cecddc328e81a0421821a1f65a1d517b20746c94a1f0f5c36fb51a"}, - {file = "matplotlib-3.5.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b5e439d9e55d645f2a4dca63e2f66d68fe974c405053b132d61c7e98c25dfeb2"}, - {file = "matplotlib-3.5.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dc8c5c23e7056e126275dbf29efba817b3d94196690930d0968873ac3a94ab82"}, - {file = "matplotlib-3.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a0ea10faa3bab0714d3a19c7e0921279a68d57552414d6eceaea99f97d7735db"}, - {file = "matplotlib-3.5.0.tar.gz", hash = "sha256:38892a254420d95594285077276162a5e9e9c30b6da08bdc2a4d53331ad9a6fa"}, + {file = "matplotlib-3.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:456cc8334f6d1124e8ff856b42d2cc1c84335375a16448189999496549f7182b"}, + {file = "matplotlib-3.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8a77906dc2ef9b67407cec0bdbf08e3971141e535db888974a915be5e1e3efc6"}, + {file = "matplotlib-3.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e70ae6475cfd0fad3816dcbf6cac536dc6f100f7474be58d59fa306e6e768a4"}, + {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53273c5487d1c19c3bc03b9eb82adaf8456f243b97ed79d09dded747abaf1235"}, + {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3b6f3fd0d8ca37861c31e9a7cab71a0ef14c639b4c95654ea1dd153158bf0df"}, + {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8c87cdaf06fd7b2477f68909838ff4176f105064a72ca9d24d3f2a29f73d393"}, + {file = "matplotlib-3.5.1-cp310-cp310-win32.whl", hash = "sha256:e2f28a07b4f82abb40267864ad7b3a4ed76f1b1663e81c7efc84a9b9248f672f"}, + {file = "matplotlib-3.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:d70a32ee1f8b55eed3fd4e892f0286df8cccc7e0475c11d33b5d0a148f5c7599"}, + {file = "matplotlib-3.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:68fa30cec89b6139dc559ed6ef226c53fd80396da1919a1b5ef672c911aaa767"}, + {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e3484d8455af3fdb0424eae1789af61f6a79da0c80079125112fd5c1b604218"}, + {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e293b16cf303fe82995e41700d172a58a15efc5331125d08246b520843ef21ee"}, + {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e3520a274a0e054e919f5b3279ee5dbccf5311833819ccf3399dab7c83e90a25"}, + {file = "matplotlib-3.5.1-cp37-cp37m-win32.whl", hash = "sha256:2252bfac85cec7af4a67e494bfccf9080bcba8a0299701eab075f48847cca907"}, + {file = "matplotlib-3.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf67e05a1b7f86583f6ebd01f69b693b9c535276f4e943292e444855870a1b8"}, + {file = "matplotlib-3.5.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6c094e4bfecd2fa7f9adffd03d8abceed7157c928c2976899de282f3600f0a3d"}, + {file = "matplotlib-3.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:506b210cc6e66a0d1c2bb765d055f4f6bc2745070fb1129203b67e85bbfa5c18"}, + {file = "matplotlib-3.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b04fc29bcef04d4e2d626af28d9d892be6aba94856cb46ed52bcb219ceac8943"}, + {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577ed20ec9a18d6bdedb4616f5e9e957b4c08563a9f985563a31fd5b10564d2a"}, + {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e486f60db0cd1c8d68464d9484fd2a94011c1ac8593d765d0211f9daba2bd535"}, + {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b71f3a7ca935fc759f2aed7cec06cfe10bc3100fadb5dbd9c435b04e557971e1"}, + {file = "matplotlib-3.5.1-cp38-cp38-win32.whl", hash = "sha256:d24e5bb8028541ce25e59390122f5e48c8506b7e35587e5135efcb6471b4ac6c"}, + {file = "matplotlib-3.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:778d398c4866d8e36ee3bf833779c940b5f57192fa0a549b3ad67bc4c822771b"}, + {file = "matplotlib-3.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bb1c613908f11bac270bc7494d68b1ef6e7c224b7a4204d5dacf3522a41e2bc3"}, + {file = "matplotlib-3.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:edf5e4e1d5fb22c18820e8586fb867455de3b109c309cb4fce3aaed85d9468d1"}, + {file = "matplotlib-3.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:40e0d7df05e8efe60397c69b467fc8f87a2affeb4d562fe92b72ff8937a2b511"}, + {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a350ca685d9f594123f652ba796ee37219bf72c8e0fc4b471473d87121d6d34"}, + {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3e66497cd990b1a130e21919b004da2f1dc112132c01ac78011a90a0f9229778"}, + {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:87900c67c0f1728e6db17c6809ec05c025c6624dcf96a8020326ea15378fe8e7"}, + {file = "matplotlib-3.5.1-cp39-cp39-win32.whl", hash = "sha256:b8a4fb2a0c5afbe9604f8a91d7d0f27b1832c3e0b5e365f95a13015822b4cd65"}, + {file = "matplotlib-3.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:fe8d40c434a8e2c68d64c6d6a04e77f21791a93ff6afe0dce169597c110d3079"}, + {file = "matplotlib-3.5.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:34a1fc29f8f96e78ec57a5eff5e8d8b53d3298c3be6df61e7aa9efba26929522"}, + {file = "matplotlib-3.5.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b19a761b948e939a9e20173aaae76070025f0024fc8f7ba08bef22a5c8573afc"}, + {file = "matplotlib-3.5.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6803299cbf4665eca14428d9e886de62e24f4223ac31ab9c5d6d5339a39782c7"}, + {file = "matplotlib-3.5.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14334b9902ec776461c4b8c6516e26b450f7ebe0b3ef8703bf5cdfbbaecf774a"}, + {file = "matplotlib-3.5.1.tar.gz", hash = "sha256:b2e9810e09c3a47b73ce9cab5a72243a1258f61e7900969097a817232246ce1c"}, ] matplotlib-inline = [ {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, @@ -1607,112 +1600,101 @@ mccabe = [ {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] multidict = [ - {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3822c5894c72e3b35aae9909bef66ec83e44522faf767c0ad39e0e2de11d3b55"}, - {file = "multidict-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:28e6d883acd8674887d7edc896b91751dc2d8e87fbdca8359591a13872799e4e"}, - {file = "multidict-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b61f85101ef08cbbc37846ac0e43f027f7844f3fade9b7f6dd087178caedeee7"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9b668c065968c5979fe6b6fa6760bb6ab9aeb94b75b73c0a9c1acf6393ac3bf"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517d75522b7b18a3385726b54a081afd425d4f41144a5399e5abd97ccafdf36b"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1b4ac3ba7a97b35a5ccf34f41b5a8642a01d1e55454b699e5e8e7a99b5a3acf5"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:df23c83398715b26ab09574217ca21e14694917a0c857e356fd39e1c64f8283f"}, - {file = "multidict-5.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e58a9b5cc96e014ddf93c2227cbdeca94b56a7eb77300205d6e4001805391747"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f76440e480c3b2ca7f843ff8a48dc82446b86ed4930552d736c0bac507498a52"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cfde464ca4af42a629648c0b0d79b8f295cf5b695412451716531d6916461628"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0fed465af2e0eb6357ba95795d003ac0bdb546305cc2366b1fc8f0ad67cc3fda"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:b70913cbf2e14275013be98a06ef4b412329fe7b4f83d64eb70dce8269ed1e1a"}, - {file = "multidict-5.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5635bcf1b75f0f6ef3c8a1ad07b500104a971e38d3683167b9454cb6465ac86"}, - {file = "multidict-5.2.0-cp310-cp310-win32.whl", hash = "sha256:77f0fb7200cc7dedda7a60912f2059086e29ff67cefbc58d2506638c1a9132d7"}, - {file = "multidict-5.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:9416cf11bcd73c861267e88aea71e9fcc35302b3943e45e1dbb4317f91a4b34f"}, - {file = "multidict-5.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fd77c8f3cba815aa69cb97ee2b2ef385c7c12ada9c734b0f3b32e26bb88bbf1d"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98ec9aea6223adf46999f22e2c0ab6cf33f5914be604a404f658386a8f1fba37"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5283c0a00f48e8cafcecadebfa0ed1dac8b39e295c7248c44c665c16dc1138b"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5f79c19c6420962eb17c7e48878a03053b7ccd7b69f389d5831c0a4a7f1ac0a1"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e4a67f1080123de76e4e97a18d10350df6a7182e243312426d508712e99988d4"}, - {file = "multidict-5.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:94b117e27efd8e08b4046c57461d5a114d26b40824995a2eb58372b94f9fca02"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2e77282fd1d677c313ffcaddfec236bf23f273c4fba7cdf198108f5940ae10f5"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:116347c63ba049c1ea56e157fa8aa6edaf5e92925c9b64f3da7769bdfa012858"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:dc3a866cf6c13d59a01878cd806f219340f3e82eed514485e094321f24900677"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac42181292099d91217a82e3fa3ce0e0ddf3a74fd891b7c2b347a7f5aa0edded"}, - {file = "multidict-5.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:f0bb0973f42ffcb5e3537548e0767079420aefd94ba990b61cf7bb8d47f4916d"}, - {file = "multidict-5.2.0-cp36-cp36m-win32.whl", hash = "sha256:ea21d4d5104b4f840b91d9dc8cbc832aba9612121eaba503e54eaab1ad140eb9"}, - {file = "multidict-5.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6453f3cbeb78440747096f239d282cc57a2997a16b5197c9bc839099e1633d0"}, - {file = "multidict-5.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d3def943bfd5f1c47d51fd324df1e806d8da1f8e105cc7f1c76a1daf0f7e17b0"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35591729668a303a02b06e8dba0eb8140c4a1bfd4c4b3209a436a02a5ac1de11"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8cacda0b679ebc25624d5de66c705bc53dcc7c6f02a7fb0f3ca5e227d80422"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:baf1856fab8212bf35230c019cde7c641887e3fc08cadd39d32a421a30151ea3"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a43616aec0f0d53c411582c451f5d3e1123a68cc7b3475d6f7d97a626f8ff90d"}, - {file = "multidict-5.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25cbd39a9029b409167aa0a20d8a17f502d43f2efebfe9e3ac019fe6796c59ac"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a2cbcfbea6dc776782a444db819c8b78afe4db597211298dd8b2222f73e9cd0"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d2d7d1fff8e09d99354c04c3fd5b560fb04639fd45926b34e27cfdec678a704"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a37e9a68349f6abe24130846e2f1d2e38f7ddab30b81b754e5a1fde32f782b23"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:637c1896497ff19e1ee27c1c2c2ddaa9f2d134bbb5e0c52254361ea20486418d"}, - {file = "multidict-5.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9815765f9dcda04921ba467957be543423e5ec6a1136135d84f2ae092c50d87b"}, - {file = "multidict-5.2.0-cp37-cp37m-win32.whl", hash = "sha256:8b911d74acdc1fe2941e59b4f1a278a330e9c34c6c8ca1ee21264c51ec9b67ef"}, - {file = "multidict-5.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:380b868f55f63d048a25931a1632818f90e4be71d2081c2338fcf656d299949a"}, - {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e7d81ce5744757d2f05fc41896e3b2ae0458464b14b5a2c1e87a6a9d69aefaa8"}, - {file = "multidict-5.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d1d55cdf706ddc62822d394d1df53573d32a7a07d4f099470d3cb9323b721b6"}, - {file = "multidict-5.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4771d0d0ac9d9fe9e24e33bed482a13dfc1256d008d101485fe460359476065"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da7d57ea65744d249427793c042094c4016789eb2562576fb831870f9c878d9e"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdd68778f96216596218b4e8882944d24a634d984ee1a5a049b300377878fa7c"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecc99bce8ee42dcad15848c7885197d26841cb24fa2ee6e89d23b8993c871c64"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:067150fad08e6f2dd91a650c7a49ba65085303fcc3decbd64a57dc13a2733031"}, - {file = "multidict-5.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:78c106b2b506b4d895ddc801ff509f941119394b89c9115580014127414e6c2d"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e6c4fa1ec16e01e292315ba76eb1d012c025b99d22896bd14a66628b245e3e01"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b227345e4186809d31f22087d0265655114af7cda442ecaf72246275865bebe4"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:06560fbdcf22c9387100979e65b26fba0816c162b888cb65b845d3def7a54c9b"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7878b61c867fb2df7a95e44b316f88d5a3742390c99dfba6c557a21b30180cac"}, - {file = "multidict-5.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:246145bff76cc4b19310f0ad28bd0769b940c2a49fc601b86bfd150cbd72bb22"}, - {file = "multidict-5.2.0-cp38-cp38-win32.whl", hash = "sha256:c30ac9f562106cd9e8071c23949a067b10211917fdcb75b4718cf5775356a940"}, - {file = "multidict-5.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:f19001e790013ed580abfde2a4465388950728861b52f0da73e8e8a9418533c0"}, - {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c1ff762e2ee126e6f1258650ac641e2b8e1f3d927a925aafcfde943b77a36d24"}, - {file = "multidict-5.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bd6c9c50bf2ad3f0448edaa1a3b55b2e6866ef8feca5d8dbec10ec7c94371d21"}, - {file = "multidict-5.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc66d4016f6e50ed36fb39cd287a3878ffcebfa90008535c62e0e90a7ab713ae"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9acb76d5f3dd9421874923da2ed1e76041cb51b9337fd7f507edde1d86535d6"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dfc924a7e946dd3c6360e50e8f750d51e3ef5395c95dc054bc9eab0f70df4f9c"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fdba7333eb2351fee2596b756d730d62b5827d5e1ab2f84e6cbb287cc67fe0"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b9aad49466b8d828b96b9e3630006234879c8d3e2b0a9d99219b3121bc5cdb17"}, - {file = "multidict-5.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:93de39267c4c676c9ebb2057e98a8138bade0d806aad4d864322eee0803140a0"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9bef5cff994ca3026fcc90680e326d1a19df9841c5e3d224076407cc21471a1"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5f841c4f14331fd1e36cbf3336ed7be2cb2a8f110ce40ea253e5573387db7621"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:38ba256ee9b310da6a1a0f013ef4e422fca30a685bcbec86a969bd520504e341"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3bc3b1621b979621cee9f7b09f024ec76ec03cc365e638126a056317470bde1b"}, - {file = "multidict-5.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6ee908c070020d682e9b42c8f621e8bb10c767d04416e2ebe44e37d0f44d9ad5"}, - {file = "multidict-5.2.0-cp39-cp39-win32.whl", hash = "sha256:1c7976cd1c157fa7ba5456ae5d31ccdf1479680dc9b8d8aa28afabc370df42b8"}, - {file = "multidict-5.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:c9631c642e08b9fff1c6255487e62971d8b8e821808ddd013d8ac058087591ac"}, - {file = "multidict-5.2.0.tar.gz", hash = "sha256:0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"}, + {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"}, + {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"}, + {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"}, + {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"}, + {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"}, + {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"}, + {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"}, + {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"}, + {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, + {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] numpy = [ - {file = "numpy-1.21.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38e8648f9449a549a7dfe8d8755a5979b45b3538520d1e735637ef28e8c2dc50"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fd7d7409fa643a91d0a05c7554dd68aa9c9bb16e186f6ccfe40d6e003156e33a"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a75b4498b1e93d8b700282dc8e655b8bd559c0904b3910b144646dbbbc03e062"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1412aa0aec3e00bc23fbb8664d76552b4efde98fb71f60737c83efbac24112f1"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e46ceaff65609b5399163de5893d8f2a82d3c77d5e56d976c8b5fb01faa6b671"}, - {file = "numpy-1.21.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c6a2324085dd52f96498419ba95b5777e40b6bcbc20088fddb9e8cbb58885e8e"}, - {file = "numpy-1.21.1-cp37-cp37m-win32.whl", hash = "sha256:73101b2a1fef16602696d133db402a7e7586654682244344b8329cdcbbb82172"}, - {file = "numpy-1.21.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7a708a79c9a9d26904d1cca8d383bf869edf6f8e7650d85dbc77b041e8c5a0f8"}, - {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95b995d0c413f5d0428b3f880e8fe1660ff9396dcd1f9eedbc311f37b5652e16"}, - {file = "numpy-1.21.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:635e6bd31c9fb3d475c8f44a089569070d10a9ef18ed13738b03049280281267"}, - {file = "numpy-1.21.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a3d5fb89bfe21be2ef47c0614b9c9c707b7362386c9a3ff1feae63e0267ccb6"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a326af80e86d0e9ce92bcc1e65c8ff88297de4fa14ee936cb2293d414c9ec63"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:791492091744b0fe390a6ce85cc1bf5149968ac7d5f0477288f78c89b385d9af"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0318c465786c1f63ac05d7c4dbcecd4d2d7e13f0959b01b534ea1e92202235c5"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a513bd9c1551894ee3d31369f9b07460ef223694098cf27d399513415855b68"}, - {file = "numpy-1.21.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91c6f5fc58df1e0a3cc0c3a717bb3308ff850abdaa6d2d802573ee2b11f674a8"}, - {file = "numpy-1.21.1-cp38-cp38-win32.whl", hash = "sha256:978010b68e17150db8765355d1ccdd450f9fc916824e8c4e35ee620590e234cd"}, - {file = "numpy-1.21.1-cp38-cp38-win_amd64.whl", hash = "sha256:9749a40a5b22333467f02fe11edc98f022133ee1bfa8ab99bda5e5437b831214"}, - {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d7a4aeac3b94af92a9373d6e77b37691b86411f9745190d2c351f410ab3a791f"}, - {file = "numpy-1.21.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9e7912a56108aba9b31df688a4c4f5cb0d9d3787386b87d504762b6754fbb1b"}, - {file = "numpy-1.21.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:25b40b98ebdd272bc3020935427a4530b7d60dfbe1ab9381a39147834e985eac"}, - {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8a92c5aea763d14ba9d6475803fc7904bda7decc2a0a68153f587ad82941fec1"}, - {file = "numpy-1.21.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05a0f648eb28bae4bcb204e6fd14603de2908de982e761a2fc78efe0f19e96e1"}, - {file = "numpy-1.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f01f28075a92eede918b965e86e8f0ba7b7797a95aa8d35e1cc8821f5fc3ad6a"}, - {file = "numpy-1.21.1-cp39-cp39-win32.whl", hash = "sha256:88c0b89ad1cc24a5efbb99ff9ab5db0f9a86e9cc50240177a571fbe9c2860ac2"}, - {file = "numpy-1.21.1-cp39-cp39-win_amd64.whl", hash = "sha256:01721eefe70544d548425a07c80be8377096a54118070b8a62476866d5208e33"}, - {file = "numpy-1.21.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d4d1de6e6fb3d28781c73fbde702ac97f03d79e4ffd6598b880b2d95d62ead4"}, - {file = "numpy-1.21.1.zip", hash = "sha256:dff4af63638afcc57a3dfb9e4b26d434a7a602d225b42d746ea7fe2edf1342fd"}, + {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166"}, + {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7e8f6216f180f3fd4efb73de5d1eaefb5f5a1ee5b645c67333033e39440e63a"}, + {file = "numpy-1.21.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc7a7d7b0ed72589fd8b8486b9b42a564f10b8762be8bd4d9df94b807af4a089"}, + {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58ca1d7c8aef6e996112d0ce873ac9dfa1eaf4a1196b4ff7ff73880a09923ba7"}, + {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4b2fb01f1b4ddbe2453468ea0719f4dbb1f5caa712c8b21bb3dd1480cd30d9"}, + {file = "numpy-1.21.5-cp310-cp310-win_amd64.whl", hash = "sha256:cc1b30205d138d1005adb52087ff45708febbef0e420386f58664f984ef56954"}, + {file = "numpy-1.21.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:08de8472d9f7571f9d51b27b75e827f5296295fa78817032e84464be8bb905bc"}, + {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4fe6a006557b87b352c04596a6e3f12a57d6e5f401d804947bd3188e6b0e0e76"}, + {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3d893b0871322eaa2f8c7072cdb552d8e2b27645b7875a70833c31e9274d4611"}, + {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341dddcfe3b7b6427a28a27baa59af5ad51baa59bfec3264f1ab287aa3b30b13"}, + {file = "numpy-1.21.5-cp37-cp37m-win32.whl", hash = "sha256:ca9c23848292c6fe0a19d212790e62f398fd9609aaa838859be8459bfbe558aa"}, + {file = "numpy-1.21.5-cp37-cp37m-win_amd64.whl", hash = "sha256:025b497014bc33fc23897859350f284323f32a2fff7654697f5a5fc2a19e9939"}, + {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a5098df115340fb17fc93867317a947e1dcd978c3888c5ddb118366095851f8"}, + {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:311283acf880cfcc20369201bd75da907909afc4666966c7895cbed6f9d2c640"}, + {file = "numpy-1.21.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b545ebadaa2b878c8630e5bcdb97fc4096e779f335fc0f943547c1c91540c815"}, + {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c5562bcc1a9b61960fc8950ade44d00e3de28f891af0acc96307c73613d18f6e"}, + {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eed2afaa97ec33b4411995be12f8bdb95c87984eaa28d76cf628970c8a2d689a"}, + {file = "numpy-1.21.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61bada43d494515d5b122f4532af226fdb5ee08fe5b5918b111279843dc6836a"}, + {file = "numpy-1.21.5-cp38-cp38-win32.whl", hash = "sha256:7b9d6b14fc9a4864b08d1ba57d732b248f0e482c7b2ff55c313137e3ed4d8449"}, + {file = "numpy-1.21.5-cp38-cp38-win_amd64.whl", hash = "sha256:dbce7adeb66b895c6aaa1fad796aaefc299ced597f6fbd9ceddb0dd735245354"}, + {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:507c05c7a37b3683eb08a3ff993bd1ee1e6c752f77c2f275260533b265ecdb6c"}, + {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:00c9fa73a6989895b8815d98300a20ac993c49ac36c8277e8ffeaa3631c0dbbb"}, + {file = "numpy-1.21.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69a5a8d71c308d7ef33ef72371c2388a90e3495dbb7993430e674006f94797d5"}, + {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2d8adfca843bc46ac199a4645233f13abf2011a0b2f4affc5c37cd552626f27b"}, + {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c293d3c0321996cd8ffe84215ffe5d269fd9d1d12c6f4ffe2b597a7c30d3e593"}, + {file = "numpy-1.21.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c978544be9e04ed12016dd295a74283773149b48f507d69b36f91aa90a643e5"}, + {file = "numpy-1.21.5-cp39-cp39-win32.whl", hash = "sha256:2a9add27d7fc0fdb572abc3b2486eb3b1395da71e0254c5552b2aad2a18b5441"}, + {file = "numpy-1.21.5-cp39-cp39-win_amd64.whl", hash = "sha256:1964db2d4a00348b7a60ee9d013c8cb0c566644a589eaa80995126eac3b99ced"}, + {file = "numpy-1.21.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7c4b701ca418cd39e28ec3b496e6388fe06de83f5f0cb74794fa31cfa384c02"}, + {file = "numpy-1.21.5.zip", hash = "sha256:6a5928bc6241264dce5ed509e66f33676fc97f464e7a919edc672fb5532221ee"}, ] packaging = [ {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, @@ -1739,113 +1721,103 @@ pexpect = [ {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, ] photutils = [ - {file = "photutils-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e9b730d6a31532e464914dc0960a8e22693858fb20b315366b013cf28b022a25"}, - {file = "photutils-1.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3cb8483d717baf217ecd316ec882da3bb5ce99033fe0f359a0ebb2a555cec8e7"}, - {file = "photutils-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05d91d90e9667587d816bb6752689fb4d7d4cc2ae0a13d50ca128df95c0cf9a4"}, - {file = "photutils-1.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:500b93bc648ba4aad643972d86e911c33bed02129c191354b914062afff7d210"}, - {file = "photutils-1.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3d1b160c33f9ac09df2fb1278c752905219e7c81dc887fe5c943193e029f7bc2"}, - {file = "photutils-1.2.0-cp37-cp37m-win32.whl", hash = "sha256:e44e3b0eef95bc31664a786dbeb0daf4569fa84fe9f9765b68e93b923d74a333"}, - {file = "photutils-1.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4aad3322214e31627d4ddc7e78499571ea4a02054a2c3f54504c95dd9be22ef4"}, - {file = "photutils-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fa65716526fc371f10362381deb134f73fa56211bdaabed75cea1a0c78680508"}, - {file = "photutils-1.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:699cafb1e761c5396937f016e3e237bb93c92fb28572ed5729088fb66e59fce0"}, - {file = "photutils-1.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6cae27f9c7c441ede39dd9ea6c9c12fdebfe5aa25768ca26d0ffcc7b01b34507"}, - {file = "photutils-1.2.0-cp38-cp38-win32.whl", hash = "sha256:d32656fdd65bdd7dd2ffbe745d7a1c83531bef99626c2ecbbf7bb312ec5c1795"}, - {file = "photutils-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:ae0161aee33954eaf17afc993503ad59d3be571f9e1d47eab27b3abd785cf05b"}, - {file = "photutils-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ff13042e0e3a55e49f2b244c8a0e22f2cf19d9f195263c3150f6e46a37022c45"}, - {file = "photutils-1.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a7be401f94927c0f950f160910c747fb118b7065ec2fed92c5c107df9a3f3435"}, - {file = "photutils-1.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:54c5f923de49cd4c32e56eac64aaec0fba5578ed94df0ac389daabeedf48805e"}, - {file = "photutils-1.2.0-cp39-cp39-win32.whl", hash = "sha256:a7761cfafba8965930ef65484683f5d90d0a8a6964e17e80c17d142cf9113eac"}, - {file = "photutils-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:50c0f98cba96b5aa1c788ae929b7a32692756f940bf8c196b39e1a6c3720fcec"}, - {file = "photutils-1.2.0.tar.gz", hash = "sha256:8a060a09bf30f26157531d19f5aeedb1b5ec49ce379eb7df0dade460e76ffd25"}, + {file = "photutils-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e11045e5b8c8e00c9bf34241d3ef288d6e6fe94dc67f2bcf378468384173379a"}, + {file = "photutils-1.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43c09ff55e045640b114d5a8774c56a7d191fc140eec04e097a365c8679aaf6e"}, + {file = "photutils-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:e4ebb4ebccd4e5d99617d1a2823d08d360e827abd255a836199f43fdccdc352a"}, + {file = "photutils-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2adaa51ea1c83ad12961eec29b229c54595a9d67023c07a58cb06c6b52508c84"}, + {file = "photutils-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78229fbc63a2d9436014caafdd384f3376e069ce6d8a805ad53a20c7e103b2ec"}, + {file = "photutils-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:836769b43eca921ee89b3708ed3996f92c3ca326ba9926f9c4e7574a28f44f88"}, + {file = "photutils-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:588a0098f50acbd112d0aff36b8c781b96508b76b87e4531331ce41df5f1917e"}, + {file = "photutils-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:132c3b72dfb4cc892607ae283a47e567951911bb07a31a60c7e139e873ffef45"}, + {file = "photutils-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:667cc1751993531a34c454e0f169d021f90c69a376c05894c42839bbf0fa298d"}, + {file = "photutils-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:93bffdb264c46abef4646504bdba85adadc520570b1d77dcd9781914f91451a3"}, + {file = "photutils-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10a85fba348d9d5c8af34f4f4482e00fe456ecfa3368f08c349149591ee8790d"}, + {file = "photutils-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:f78e747a2da764f3e8193224a6dae7bcb156f22efa7f6365539c7dc0ce5f0997"}, + {file = "photutils-1.3.0.tar.gz", hash = "sha256:b6fae658413ac41f01cd980bedf2fb38af343e9bef0c91762cdc28afa6920da9"}, ] pickleshare = [ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] pillow = [ - {file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"}, - {file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"}, - {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"}, - {file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"}, - {file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"}, - {file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"}, - {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"}, - {file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"}, - {file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"}, - {file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"}, - {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"}, - {file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"}, - {file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"}, - {file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"}, - {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"}, - {file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"}, - {file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"}, - {file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"}, - {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"}, - {file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"}, - {file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"}, - {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"}, - {file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"}, - {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"}, + {file = "Pillow-9.0.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:113723312215b25c22df1fdf0e2da7a3b9c357a7d24a93ebbe80bfda4f37a8d4"}, + {file = "Pillow-9.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bb47a548cea95b86494a26c89d153fd31122ed65255db5dcbc421a2d28eb3379"}, + {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31b265496e603985fad54d52d11970383e317d11e18e856971bdbb86af7242a4"}, + {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d154ed971a4cc04b93a6d5b47f37948d1f621f25de3e8fa0c26b2d44f24e3e8f"}, + {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fe92813d208ce8aa7d76da878bdc84b90809f79ccbad2a288e9bcbeac1d9bd"}, + {file = "Pillow-9.0.0-cp310-cp310-win32.whl", hash = "sha256:d5dcea1387331c905405b09cdbfb34611050cc52c865d71f2362f354faee1e9f"}, + {file = "Pillow-9.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:52abae4c96b5da630a8b4247de5428f593465291e5b239f3f843a911a3cf0105"}, + {file = "Pillow-9.0.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:72c3110228944019e5f27232296c5923398496b28be42535e3b2dc7297b6e8b6"}, + {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b6d21771da41497b81652d44191489296555b761684f82b7b544c49989110f"}, + {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72f649d93d4cc4d8cf79c91ebc25137c358718ad75f99e99e043325ea7d56100"}, + {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aaf07085c756f6cb1c692ee0d5a86c531703b6e8c9cae581b31b562c16b98ce"}, + {file = "Pillow-9.0.0-cp37-cp37m-win32.whl", hash = "sha256:03b27b197deb4ee400ed57d8d4e572d2d8d80f825b6634daf6e2c18c3c6ccfa6"}, + {file = "Pillow-9.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a09a9d4ec2b7887f7a088bbaacfd5c07160e746e3d47ec5e8050ae3b2a229e9f"}, + {file = "Pillow-9.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:490e52e99224858f154975db61c060686df8a6b3f0212a678e5d2e2ce24675c9"}, + {file = "Pillow-9.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:500d397ddf4bbf2ca42e198399ac13e7841956c72645513e8ddf243b31ad2128"}, + {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ebd8b9137630a7bbbff8c4b31e774ff05bbb90f7911d93ea2c9371e41039b52"}, + {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd0e5062f11cb3e730450a7d9f323f4051b532781026395c4323b8ad055523c4"}, + {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f3b4522148586d35e78313db4db0df4b759ddd7649ef70002b6c3767d0fdeb7"}, + {file = "Pillow-9.0.0-cp38-cp38-win32.whl", hash = "sha256:0b281fcadbb688607ea6ece7649c5d59d4bbd574e90db6cd030e9e85bde9fecc"}, + {file = "Pillow-9.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5050d681bcf5c9f2570b93bee5d3ec8ae4cf23158812f91ed57f7126df91762"}, + {file = "Pillow-9.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c2067b3bb0781f14059b112c9da5a91c80a600a97915b4f48b37f197895dd925"}, + {file = "Pillow-9.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d16b6196fb7a54aff6b5e3ecd00f7c0bab1b56eee39214b2b223a9d938c50af"}, + {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98cb63ca63cb61f594511c06218ab4394bf80388b3d66cd61d0b1f63ee0ea69f"}, + {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc462d24500ba707e9cbdef436c16e5c8cbf29908278af053008d9f689f56dee"}, + {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3586e12d874ce2f1bc875a3ffba98732ebb12e18fb6d97be482bd62b56803281"}, + {file = "Pillow-9.0.0-cp39-cp39-win32.whl", hash = "sha256:68e06f8b2248f6dc8b899c3e7ecf02c9f413aab622f4d6190df53a78b93d97a5"}, + {file = "Pillow-9.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:6579f9ba84a3d4f1807c4aab4be06f373017fc65fff43498885ac50a9b47a553"}, + {file = "Pillow-9.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:47f5cf60bcb9fbc46011f75c9b45a8b5ad077ca352a78185bd3e7f1d294b98bb"}, + {file = "Pillow-9.0.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fd8053e1f8ff1844419842fd474fc359676b2e2a2b66b11cc59f4fa0a301315"}, + {file = "Pillow-9.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c5439bfb35a89cac50e81c751317faea647b9a3ec11c039900cd6915831064d"}, + {file = "Pillow-9.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95545137fc56ce8c10de646074d242001a112a92de169986abd8c88c27566a05"}, + {file = "Pillow-9.0.0.tar.gz", hash = "sha256:ee6e2963e92762923956fe5d3479b1fdc3b76c83f290aad131a2f98c3df0593e"}, ] platformdirs = [ - {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, - {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, + {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"}, + {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.23-py3-none-any.whl", hash = "sha256:5f29d62cb7a0ecacfa3d8ceea05a63cd22500543472d64298fc06ddda906b25d"}, - {file = "prompt_toolkit-3.0.23.tar.gz", hash = "sha256:7053aba00895473cb357819358ef33f11aa97e4ac83d38efb123e5649ceeecaf"}, + {file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"}, + {file = "prompt_toolkit-3.0.24.tar.gz", hash = "sha256:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6"}, ] psutil = [ - {file = "psutil-5.8.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0066a82f7b1b37d334e68697faba68e5ad5e858279fd6351c8ca6024e8d6ba64"}, - {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ae6f386d8d297177fd288be6e8d1afc05966878704dad9847719650e44fc49c"}, - {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:12d844996d6c2b1d3881cfa6fa201fd635971869a9da945cf6756105af73d2df"}, - {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:02b8292609b1f7fcb34173b25e48d0da8667bc85f81d7476584d889c6e0f2131"}, - {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6ffe81843131ee0ffa02c317186ed1e759a145267d54fdef1bc4ea5f5931ab60"}, - {file = "psutil-5.8.0-cp27-none-win32.whl", hash = "sha256:ea313bb02e5e25224e518e4352af4bf5e062755160f77e4b1767dd5ccb65f876"}, - {file = "psutil-5.8.0-cp27-none-win_amd64.whl", hash = "sha256:5da29e394bdedd9144c7331192e20c1f79283fb03b06e6abd3a8ae45ffecee65"}, - {file = "psutil-5.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:74fb2557d1430fff18ff0d72613c5ca30c45cdbfcddd6a5773e9fc1fe9364be8"}, - {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:74f2d0be88db96ada78756cb3a3e1b107ce8ab79f65aa885f76d7664e56928f6"}, - {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:99de3e8739258b3c3e8669cb9757c9a861b2a25ad0955f8e53ac662d66de61ac"}, - {file = "psutil-5.8.0-cp36-cp36m-win32.whl", hash = "sha256:36b3b6c9e2a34b7d7fbae330a85bf72c30b1c827a4366a07443fc4b6270449e2"}, - {file = "psutil-5.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:52de075468cd394ac98c66f9ca33b2f54ae1d9bff1ef6b67a212ee8f639ec06d"}, - {file = "psutil-5.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c6a5fd10ce6b6344e616cf01cc5b849fa8103fbb5ba507b6b2dee4c11e84c935"}, - {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:61f05864b42fedc0771d6d8e49c35f07efd209ade09a5afe6a5059e7bb7bf83d"}, - {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0dd4465a039d343925cdc29023bb6960ccf4e74a65ad53e768403746a9207023"}, - {file = "psutil-5.8.0-cp37-cp37m-win32.whl", hash = "sha256:1bff0d07e76114ec24ee32e7f7f8d0c4b0514b3fae93e3d2aaafd65d22502394"}, - {file = "psutil-5.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:fcc01e900c1d7bee2a37e5d6e4f9194760a93597c97fee89c4ae51701de03563"}, - {file = "psutil-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6223d07a1ae93f86451d0198a0c361032c4c93ebd4bf6d25e2fb3edfad9571ef"}, - {file = "psutil-5.8.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d225cd8319aa1d3c85bf195c4e07d17d3cd68636b8fc97e6cf198f782f99af28"}, - {file = "psutil-5.8.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:28ff7c95293ae74bf1ca1a79e8805fcde005c18a122ca983abf676ea3466362b"}, - {file = "psutil-5.8.0-cp38-cp38-win32.whl", hash = "sha256:ce8b867423291cb65cfc6d9c4955ee9bfc1e21fe03bb50e177f2b957f1c2469d"}, - {file = "psutil-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:90f31c34d25b1b3ed6c40cdd34ff122b1887a825297c017e4cbd6796dd8b672d"}, - {file = "psutil-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6323d5d845c2785efb20aded4726636546b26d3b577aded22492908f7c1bdda7"}, - {file = "psutil-5.8.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:245b5509968ac0bd179287d91210cd3f37add77dad385ef238b275bad35fa1c4"}, - {file = "psutil-5.8.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:90d4091c2d30ddd0a03e0b97e6a33a48628469b99585e2ad6bf21f17423b112b"}, - {file = "psutil-5.8.0-cp39-cp39-win32.whl", hash = "sha256:ea372bcc129394485824ae3e3ddabe67dc0b118d262c568b4d2602a7070afdb0"}, - {file = "psutil-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f4634b033faf0d968bb9220dd1c793b897ab7f1189956e1aa9eae752527127d3"}, - {file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"}, + {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"}, + {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:7336292a13a80eb93c21f36bde4328aa748a04b68c13d01dfddd67fc13fd0618"}, + {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cb8d10461c1ceee0c25a64f2dd54872b70b89c26419e147a05a10b753ad36ec2"}, + {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7641300de73e4909e5d148e90cc3142fb890079e1525a840cf0dfd39195239fd"}, + {file = "psutil-5.9.0-cp27-none-win32.whl", hash = "sha256:ea42d747c5f71b5ccaa6897b216a7dadb9f52c72a0fe2b872ef7d3e1eacf3ba3"}, + {file = "psutil-5.9.0-cp27-none-win_amd64.whl", hash = "sha256:ef216cc9feb60634bda2f341a9559ac594e2eeaadd0ba187a4c2eb5b5d40b91c"}, + {file = "psutil-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90a58b9fcae2dbfe4ba852b57bd4a1dded6b990a33d6428c7614b7d48eccb492"}, + {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d41f8b3e9ebb6b6110057e40019a432e96aae2008951121ba4e56040b84f3"}, + {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:742c34fff804f34f62659279ed5c5b723bb0195e9d7bd9907591de9f8f6558e2"}, + {file = "psutil-5.9.0-cp310-cp310-win32.whl", hash = "sha256:8293942e4ce0c5689821f65ce6522ce4786d02af57f13c0195b40e1edb1db61d"}, + {file = "psutil-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:9b51917c1af3fa35a3f2dabd7ba96a2a4f19df3dec911da73875e1edaf22a40b"}, + {file = "psutil-5.9.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e9805fed4f2a81de98ae5fe38b75a74c6e6ad2df8a5c479594c7629a1fe35f56"}, + {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c51f1af02334e4b516ec221ee26b8fdf105032418ca5a5ab9737e8c87dafe203"}, + {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32acf55cb9a8cbfb29167cd005951df81b567099295291bcfd1027365b36591d"}, + {file = "psutil-5.9.0-cp36-cp36m-win32.whl", hash = "sha256:e5c783d0b1ad6ca8a5d3e7b680468c9c926b804be83a3a8e95141b05c39c9f64"}, + {file = "psutil-5.9.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d62a2796e08dd024b8179bd441cb714e0f81226c352c802fca0fd3f89eeacd94"}, + {file = "psutil-5.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d00a664e31921009a84367266b35ba0aac04a2a6cad09c550a89041034d19a0"}, + {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7779be4025c540d1d65a2de3f30caeacc49ae7a2152108adeaf42c7534a115ce"}, + {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072664401ae6e7c1bfb878c65d7282d4b4391f1bc9a56d5e03b5a490403271b5"}, + {file = "psutil-5.9.0-cp37-cp37m-win32.whl", hash = "sha256:df2c8bd48fb83a8408c8390b143c6a6fa10cb1a674ca664954de193fdcab36a9"}, + {file = "psutil-5.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1d7b433519b9a38192dfda962dd8f44446668c009833e1429a52424624f408b4"}, + {file = "psutil-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3400cae15bdb449d518545cbd5b649117de54e3596ded84aacabfbb3297ead2"}, + {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2237f35c4bbae932ee98902a08050a27821f8f6dfa880a47195e5993af4702d"}, + {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1070a9b287846a21a5d572d6dddd369517510b68710fca56b0e9e02fd24bed9a"}, + {file = "psutil-5.9.0-cp38-cp38-win32.whl", hash = "sha256:76cebf84aac1d6da5b63df11fe0d377b46b7b500d892284068bacccf12f20666"}, + {file = "psutil-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:3151a58f0fbd8942ba94f7c31c7e6b310d2989f4da74fcbf28b934374e9bf841"}, + {file = "psutil-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:539e429da49c5d27d5a58e3563886057f8fc3868a5547b4f1876d9c0f007bccf"}, + {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58c7d923dc209225600aec73aa2c4ae8ea33b1ab31bc11ef8a5933b027476f07"}, + {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3611e87eea393f779a35b192b46a164b1d01167c9d323dda9b1e527ea69d697d"}, + {file = "psutil-5.9.0-cp39-cp39-win32.whl", hash = "sha256:4e2fb92e3aeae3ec3b7b66c528981fd327fb93fd906a77215200404444ec1845"}, + {file = "psutil-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:7d190ee2eaef7831163f254dc58f6d2e2a22e27382b936aab51c835fc080c3d3"}, + {file = "psutil-5.9.0.tar.gz", hash = "sha256:869842dbd66bb80c3217158e629d6fceaecc3a3166d3d1faee515b05dd26ca25"}, ] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, @@ -1895,43 +1867,43 @@ pyflakes = [ {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, ] pygments = [ - {file = "Pygments-2.10.0-py3-none-any.whl", hash = "sha256:b8e67fe6af78f492b3c4b3e2970c0624cbf08beb1e493b2c99b9fa1b67a20380"}, - {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, + {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, + {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, ] pyparsing = [ - {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, - {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, ] pyrsistent = [ - {file = "pyrsistent-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f4c8cabb46ff8e5d61f56a037974228e978f26bfefce4f61a4b1ac0ba7a2ab72"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da6e5e818d18459fa46fac0a4a4e543507fe1110e808101277c5a2b5bab0cd2d"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5e4395bbf841693eaebaa5bb5c8f5cdbb1d139e07c975c682ec4e4f8126e03d2"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:527be2bfa8dc80f6f8ddd65242ba476a6c4fb4e3aedbf281dfbac1b1ed4165b1"}, - {file = "pyrsistent-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2aaf19dc8ce517a8653746d98e962ef480ff34b6bc563fc067be6401ffb457c7"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58a70d93fb79dc585b21f9d72487b929a6fe58da0754fa4cb9f279bb92369396"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4916c10896721e472ee12c95cdc2891ce5890898d2f9907b1b4ae0f53588b710"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:73ff61b1411e3fb0ba144b8f08d6749749775fe89688093e1efef9839d2dcc35"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:b29b869cf58412ca5738d23691e96d8aff535e17390128a1a52717c9a109da4f"}, - {file = "pyrsistent-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:097b96f129dd36a8c9e33594e7ebb151b1515eb52cceb08474c10a5479e799f2"}, - {file = "pyrsistent-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:772e94c2c6864f2cd2ffbe58bb3bdefbe2a32afa0acb1a77e472aac831f83427"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c1a9ff320fa699337e05edcaae79ef8c2880b52720bc031b219e5b5008ebbdef"}, - {file = "pyrsistent-0.18.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cd3caef37a415fd0dae6148a1b6957a8c5f275a62cca02e18474608cb263640c"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win32.whl", hash = "sha256:e79d94ca58fcafef6395f6352383fa1a76922268fa02caa2272fff501c2fdc78"}, - {file = "pyrsistent-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:a0c772d791c38bbc77be659af29bb14c38ced151433592e326361610250c605b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d5ec194c9c573aafaceebf05fc400656722793dac57f254cd4741f3c27ae57b4"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:6b5eed00e597b5b5773b4ca30bd48a5774ef1e96f2a45d105db5b4ebb4bca680"}, - {file = "pyrsistent-0.18.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:48578680353f41dca1ca3dc48629fb77dfc745128b56fc01096b2530c13fd426"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win32.whl", hash = "sha256:f3ef98d7b76da5eb19c37fda834d50262ff9167c65658d1d8f974d2e4d90676b"}, - {file = "pyrsistent-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:404e1f1d254d314d55adb8d87f4f465c8693d6f902f67eb6ef5b4526dc58e6ea"}, - {file = "pyrsistent-0.18.0.tar.gz", hash = "sha256:773c781216f8c2900b42a7b638d5b517bb134ae1acbebe4d1e8f1f41ea60eb4b"}, + {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, + {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, + {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, + {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, + {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, + {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, + {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, + {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, + {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, + {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, + {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, ] pytest = [ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, ] pytest-asyncio = [ - {file = "pytest-asyncio-0.16.0.tar.gz", hash = "sha256:7496c5977ce88c34379df64a66459fe395cd05543f0a2f837016e7144391fcfb"}, - {file = "pytest_asyncio-0.16.0-py3-none-any.whl", hash = "sha256:5f2a21273c47b331ae6aa5b36087047b4899e40f03f18397c0e65fa5cca54e9b"}, + {file = "pytest-asyncio-0.17.2.tar.gz", hash = "sha256:6d895b02432c028e6957d25fc936494e78c6305736e785d9fee408b1efbc7ff4"}, + {file = "pytest_asyncio-0.17.2-py3-none-any.whl", hash = "sha256:e0fe5dbea40516b661ef1bcfe0bd9461c2847c4ef4bb40012324f2454fb7d56d"}, ] pytest-cov = [ {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, @@ -1987,85 +1959,9 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] -regex = [ - {file = "regex-2021.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9345b6f7ee578bad8e475129ed40123d265464c4cfead6c261fd60fc9de00bcf"}, - {file = "regex-2021.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:416c5f1a188c91e3eb41e9c8787288e707f7d2ebe66e0a6563af280d9b68478f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0538c43565ee6e703d3a7c3bdfe4037a5209250e8502c98f20fea6f5fdf2965"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee1227cf08b6716c85504aebc49ac827eb88fcc6e51564f010f11a406c0a667"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6650f16365f1924d6014d2ea770bde8555b4a39dc9576abb95e3cd1ff0263b36"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30ab804ea73972049b7a2a5c62d97687d69b5a60a67adca07eb73a0ddbc9e29f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68a067c11463de2a37157930d8b153005085e42bcb7ad9ca562d77ba7d1404e0"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:162abfd74e88001d20cb73ceaffbfe601469923e875caf9118333b1a4aaafdc4"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9ed0b1e5e0759d6b7f8e2f143894b2a7f3edd313f38cf44e1e15d360e11749b"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:473e67837f786404570eae33c3b64a4b9635ae9f00145250851a1292f484c063"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2fee3ed82a011184807d2127f1733b4f6b2ff6ec7151d83ef3477f3b96a13d03"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d5fd67df77bab0d3f4ea1d7afca9ef15c2ee35dfb348c7b57ffb9782a6e4db6e"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5d408a642a5484b9b4d11dea15a489ea0928c7e410c7525cd892f4d04f2f617b"}, - {file = "regex-2021.11.10-cp310-cp310-win32.whl", hash = "sha256:98ba568e8ae26beb726aeea2273053c717641933836568c2a0278a84987b2a1a"}, - {file = "regex-2021.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:780b48456a0f0ba4d390e8b5f7c661fdd218934388cde1a974010a965e200e12"}, - {file = "regex-2021.11.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dba70f30fd81f8ce6d32ddeef37d91c8948e5d5a4c63242d16a2b2df8143aafc"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1f54b9b4b6c53369f40028d2dd07a8c374583417ee6ec0ea304e710a20f80a0"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbb9dc00e39f3e6c0ef48edee202f9520dafb233e8b51b06b8428cfcb92abd30"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666abff54e474d28ff42756d94544cdfd42e2ee97065857413b72e8a2d6a6345"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5537f71b6d646f7f5f340562ec4c77b6e1c915f8baae822ea0b7e46c1f09b733"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2e07c6a26ed4bea91b897ee2b0835c21716d9a469a96c3e878dc5f8c55bb23"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca5f18a75e1256ce07494e245cdb146f5a9267d3c702ebf9b65c7f8bd843431e"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:74cbeac0451f27d4f50e6e8a8f3a52ca074b5e2da9f7b505c4201a57a8ed6286"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:3598893bde43091ee5ca0a6ad20f08a0435e93a69255eeb5f81b85e81e329264"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:50a7ddf3d131dc5633dccdb51417e2d1910d25cbcf842115a3a5893509140a3a"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:61600a7ca4bcf78a96a68a27c2ae9389763b5b94b63943d5158f2a377e09d29a"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:563d5f9354e15e048465061509403f68424fef37d5add3064038c2511c8f5e00"}, - {file = "regex-2021.11.10-cp36-cp36m-win32.whl", hash = "sha256:93a5051fcf5fad72de73b96f07d30bc29665697fb8ecdfbc474f3452c78adcf4"}, - {file = "regex-2021.11.10-cp36-cp36m-win_amd64.whl", hash = "sha256:b483c9d00a565633c87abd0aaf27eb5016de23fed952e054ecc19ce32f6a9e7e"}, - {file = "regex-2021.11.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fff55f3ce50a3ff63ec8e2a8d3dd924f1941b250b0aac3d3d42b687eeff07a8e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32d2a2b02ccbef10145df9135751abea1f9f076e67a4e261b05f24b94219e36"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53db2c6be8a2710b359bfd3d3aa17ba38f8aa72a82309a12ae99d3c0c3dcd74d"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2207ae4f64ad3af399e2d30dde66f0b36ae5c3129b52885f1bffc2f05ec505c8"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ca078bb666c4a9d1287a379fe617a6dccd18c3e8a7e6c7e1eb8974330c626a"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd33eb9bdcfbabab3459c9ee651d94c842bc8a05fabc95edf4ee0c15a072495e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05b7d6d7e64efe309972adab77fc2af8907bb93217ec60aa9fe12a0dad35874f"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:42b50fa6666b0d50c30a990527127334d6b96dd969011e843e726a64011485da"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6e1d2cc79e8dae442b3fa4a26c5794428b98f81389af90623ffcc650ce9f6732"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:0416f7399e918c4b0e074a0f66e5191077ee2ca32a0f99d4c187a62beb47aa05"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ce298e3d0c65bd03fa65ffcc6db0e2b578e8f626d468db64fdf8457731052942"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dc07f021ee80510f3cd3af2cad5b6a3b3a10b057521d9e6aaeb621730d320c5a"}, - {file = "regex-2021.11.10-cp37-cp37m-win32.whl", hash = "sha256:e71255ba42567d34a13c03968736c5d39bb4a97ce98188fafb27ce981115beec"}, - {file = "regex-2021.11.10-cp37-cp37m-win_amd64.whl", hash = "sha256:07856afef5ffcc052e7eccf3213317fbb94e4a5cd8177a2caa69c980657b3cb4"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba05430e819e58544e840a68b03b28b6d328aff2e41579037e8bab7653b37d83"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f301b11b9d214f83ddaf689181051e7f48905568b0c7017c04c06dfd065e244"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aaa4e0705ef2b73dd8e36eeb4c868f80f8393f5f4d855e94025ce7ad8525f50"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:788aef3549f1924d5c38263104dae7395bf020a42776d5ec5ea2b0d3d85d6646"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8af619e3be812a2059b212064ea7a640aff0568d972cd1b9e920837469eb3cb"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85bfa6a5413be0ee6c5c4a663668a2cad2cbecdee367630d097d7823041bdeec"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f23222527b307970e383433daec128d769ff778d9b29343fb3496472dc20dabe"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:da1a90c1ddb7531b1d5ff1e171b4ee61f6345119be7351104b67ff413843fe94"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f5be7805e53dafe94d295399cfbe5227f39995a997f4fd8539bf3cbdc8f47ca8"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a955b747d620a50408b7fdf948e04359d6e762ff8a85f5775d907ceced715129"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:139a23d1f5d30db2cc6c7fd9c6d6497872a672db22c4ae1910be22d4f4b2068a"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ca49e1ab99593438b204e00f3970e7a5f70d045267051dfa6b5f4304fcfa1dbf"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:96fc32c16ea6d60d3ca7f63397bff5c75c5a562f7db6dec7d412f7c4d2e78ec0"}, - {file = "regex-2021.11.10-cp38-cp38-win32.whl", hash = "sha256:0617383e2fe465732af4509e61648b77cbe3aee68b6ac8c0b6fe934db90be5cc"}, - {file = "regex-2021.11.10-cp38-cp38-win_amd64.whl", hash = "sha256:a3feefd5e95871872673b08636f96b61ebef62971eab044f5124fb4dea39919d"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7f325be2804246a75a4f45c72d4ce80d2443ab815063cdf70ee8fb2ca59ee1b"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:537ca6a3586931b16a85ac38c08cc48f10fc870a5b25e51794c74df843e9966d"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2afb0fd1747f33f1ee3e209bce1ed582d1896b240ccc5e2697e3275f037c7"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:432bd15d40ed835a51617521d60d0125867f7b88acf653e4ed994a1f8e4995dc"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b43c2b8a330a490daaef5a47ab114935002b13b3f9dc5da56d5322ff218eeadb"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:962b9a917dd7ceacbe5cd424556914cb0d636001e393b43dc886ba31d2a1e449"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa8c626d6441e2d04b6ee703ef2d1e17608ad44c7cb75258c09dd42bacdfc64b"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3c5fb32cc6077abad3bbf0323067636d93307c9fa93e072771cf9a64d1c0f3ef"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cd410a1cbb2d297c67d8521759ab2ee3f1d66206d2e4328502a487589a2cb21b"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e6096b0688e6e14af6a1b10eaad86b4ff17935c49aa774eac7c95a57a4e8c296"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:529801a0d58809b60b3531ee804d3e3be4b412c94b5d267daa3de7fadef00f49"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f594b96fe2e0821d026365f72ac7b4f0b487487fb3d4aaf10dd9d97d88a9737"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2409b5c9cef7054dde93a9803156b411b677affc84fca69e908b1cb2c540025d"}, - {file = "regex-2021.11.10-cp39-cp39-win32.whl", hash = "sha256:3b5df18db1fccd66de15aa59c41e4f853b5df7550723d26aa6cb7f40e5d9da5a"}, - {file = "regex-2021.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:83ee89483672b11f8952b158640d0c0ff02dc43d9cb1b70c1564b49abe92ce29"}, - {file = "regex-2021.11.10.tar.gz", hash = "sha256:f341ee2df0999bfdf7a95e448075effe0db212a59387de1a70690e4acb03d4c6"}, -] requests = [ - {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, - {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, ] restructuredtext-lint = [ {file = "restructuredtext_lint-1.3.2.tar.gz", hash = "sha256:d3b10a1fe2ecac537e51ae6d151b223b78de9fafdd50e5eb6b08c243df173c80"}, @@ -2078,16 +1974,16 @@ sdss-access = [ {file = "sdss_access-2.0.0-py2.py3-none-any.whl", hash = "sha256:ef1f90a29fb42d8eeb0f16c28ed8680d0879d2e70a88690ec2ec78b52f436004"}, ] sdss-clu = [ - {file = "sdss-clu-1.5.5.tar.gz", hash = "sha256:21a5e164ed45fd210b5d33bd645ead1887596646c9b208f828ba1f962f70123d"}, - {file = "sdss_clu-1.5.5-py3-none-any.whl", hash = "sha256:a078c9771259b025c59375806026db20f56a86af0b5f62fb681ce31f21aa45ff"}, + {file = "sdss-clu-1.5.6.tar.gz", hash = "sha256:0701ce732feccb691fb50cb42faa3604862d2a390748ee5f3ccf8af5e401223c"}, + {file = "sdss_clu-1.5.6-py3-none-any.whl", hash = "sha256:519c586c2802b91b5760bc4d20323b96f5d1967e44fe7a77ec963411f3b85a45"}, ] sdss-cluplus = [ {file = "sdss-cluplus-0.0.16.tar.gz", hash = "sha256:93400bd4a2f4ce0118c0cdfbbbedec98aa863ffac2d9b60d70976af003df05b9"}, {file = "sdss_cluplus-0.0.16-py3-none-any.whl", hash = "sha256:ec9b90be448147359dec1ffc8b69625b12c699d362a10206a705b83a50936e08"}, ] sdss-tree = [ - {file = "sdss-tree-3.1.0.tar.gz", hash = "sha256:801b7eb89643322fbacdc4cb392a3c199474af1ea204373058764e5f5c62fd4b"}, - {file = "sdss_tree-3.1.0-py2.py3-none-any.whl", hash = "sha256:1ca03840b0c83f49f6130ceef7a0e6ede0f5fd0401b63923e77ade3a3b6a8080"}, + {file = "sdss-tree-3.1.1.tar.gz", hash = "sha256:a8e18c52535ae85124610768b5f5597ca660f7309f8f98c8faf15f0a7a9b4ff2"}, + {file = "sdss_tree-3.1.1-py2.py3-none-any.whl", hash = "sha256:2585d29bf7ff7abbbca3dc8380a73f18fcfac949751930f9cbd3b90a2fa4dd23"}, ] sdsstools = [ {file = "sdsstools-0.4.13-py3-none-any.whl", hash = "sha256:758ce248bf5794cfd62eacf053f2cda2e05d3aeb561919b9db5811d76d2aed59"}, @@ -2098,8 +1994,8 @@ semantic-version = [ {file = "semantic_version-2.8.5.tar.gz", hash = "sha256:d2cb2de0558762934679b9a104e82eca7af448c9f4974d1f3eeccff651df8a54"}, ] setuptools-scm = [ - {file = "setuptools_scm-6.3.2-py3-none-any.whl", hash = "sha256:4c64444b1d49c4063ae60bfe1680f611c8b13833d556fd1d6050c0023162a119"}, - {file = "setuptools_scm-6.3.2.tar.gz", hash = "sha256:a49aa8081eeb3514eb9728fa5040f2eaa962d6c6f4ec9c32f6c1fba88f88a0f2"}, + {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, + {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, ] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, @@ -2149,8 +2045,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.2.2-py3-none-any.whl", hash = "sha256:f04066f68f5554911363063a30b108d2b5a5b1a010aa8b6132af78489fe3aade"}, - {file = "tomli-1.2.2.tar.gz", hash = "sha256:c6ce0015eb38820eaf32b5db832dbc26deb3dd427bd5f6556cf0acac2c214fee"}, + {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, + {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, ] tqdm = [ {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"}, @@ -2161,33 +2057,38 @@ traitlets = [ {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, ] typed-ast = [ - {file = "typed_ast-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b310a207ee9fde3f46ba327989e6cba4195bc0c8c70a158456e7b10233e6bed"}, - {file = "typed_ast-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52ca2b2b524d770bed7a393371a38e91943f9160a190141e0df911586066ecda"}, - {file = "typed_ast-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:14fed8820114a389a2b7e91624db5f85f3f6682fda09fe0268a59aabd28fe5f5"}, - {file = "typed_ast-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:65c81abbabda7d760df7304d843cc9dbe7ef5d485504ca59a46ae2d1731d2428"}, - {file = "typed_ast-1.5.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:37ba2ab65a0028b1a4f2b61a8fe77f12d242731977d274a03d68ebb751271508"}, - {file = "typed_ast-1.5.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:49af5b8f6f03ed1eb89ee06c1d7c2e7c8e743d720c3746a5857609a1abc94c94"}, - {file = "typed_ast-1.5.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e4374a76e61399a173137e7984a1d7e356038cf844f24fd8aea46c8029a2f712"}, - {file = "typed_ast-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ea517c2bb11c5e4ba7a83a91482a2837041181d57d3ed0749a6c382a2b6b7086"}, - {file = "typed_ast-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:51040bf45aacefa44fa67fb9ebcd1f2bec73182b99a532c2394eea7dabd18e24"}, - {file = "typed_ast-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:806e0c7346b9b4af8c62d9a29053f484599921a4448c37fbbcbbf15c25138570"}, - {file = "typed_ast-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a67fd5914603e2165e075f1b12f5a8356bfb9557e8bfb74511108cfbab0f51ed"}, - {file = "typed_ast-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:224afecb8b39739f5c9562794a7c98325cb9d972712e1a98b6989a4720219541"}, - {file = "typed_ast-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:155b74b078be842d2eb630dd30a280025eca0a5383c7d45853c27afee65f278f"}, - {file = "typed_ast-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:361b9e5d27bd8e3ccb6ea6ad6c4f3c0be322a1a0f8177db6d56264fa0ae40410"}, - {file = "typed_ast-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:618912cbc7e17b4aeba86ffe071698c6e2d292acbd6d1d5ec1ee724b8c4ae450"}, - {file = "typed_ast-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7e6731044f748340ef68dcadb5172a4b1f40847a2983fe3983b2a66445fbc8e6"}, - {file = "typed_ast-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e8a9b9c87801cecaad3b4c2b8876387115d1a14caa602c1618cedbb0cb2a14e6"}, - {file = "typed_ast-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:ec184dfb5d3d11e82841dbb973e7092b75f306b625fad7b2e665b64c5d60ab3f"}, - {file = "typed_ast-1.5.0.tar.gz", hash = "sha256:ff4ad88271aa7a55f19b6a161ed44e088c393846d954729549e3cde8257747bb"}, + {file = "typed_ast-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266"}, + {file = "typed_ast-1.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596"}, + {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985"}, + {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76"}, + {file = "typed_ast-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a"}, + {file = "typed_ast-1.5.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837"}, + {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78"}, + {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e"}, + {file = "typed_ast-1.5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d"}, + {file = "typed_ast-1.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd"}, + {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88"}, + {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7"}, + {file = "typed_ast-1.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30"}, + {file = "typed_ast-1.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4"}, + {file = "typed_ast-1.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca"}, + {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb"}, + {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b"}, + {file = "typed_ast-1.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7"}, + {file = "typed_ast-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098"}, + {file = "typed_ast-1.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344"}, + {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e"}, + {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e"}, + {file = "typed_ast-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5"}, + {file = "typed_ast-1.5.2.tar.gz", hash = "sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27"}, ] typing-extensions = [ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, ] urllib3 = [ - {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"}, - {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"}, + {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, + {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, ] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, @@ -2268,6 +2169,6 @@ yarl = [ {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"}, ] zipp = [ - {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, - {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, + {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, + {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, ] diff --git a/python/lvmagp/actor/commands/guide.py b/python/lvmagp/actor/commands/guide.py index 139aad5..07402a4 100644 --- a/python/lvmagp/actor/commands/guide.py +++ b/python/lvmagp/actor/commands/guide.py @@ -6,7 +6,7 @@ from lvmagp.actor.commfunc import LVMEastCamera # noqa: F401 from lvmagp.actor.commfunc import ( - LVMFiborselector, + LVMFiberselector, LVMFocuser, LVMKMirror, LVMTelescope, @@ -25,7 +25,7 @@ def guide(*args): @guide.command() @click.argument("TEL", type=str) -@click.option("--useteldata", type=float, is_flag=True) +@click.option("--useteldata", type=bool, is_flag=True) async def start( command: Command, telescopes: dict[str, LVMTelescope], @@ -279,7 +279,7 @@ async def autoguide_supervisor( useteldata, ) - if telescopes[tel].ag_break is True: + if telescopes[tel].ag_break: telescopes[tel].ag_break = False break diff --git a/python/lvmagp/actor/commands/slew.py b/python/lvmagp/actor/commands/slew.py index 5955fed..263e124 100644 --- a/python/lvmagp/actor/commands/slew.py +++ b/python/lvmagp/actor/commands/slew.py @@ -30,7 +30,7 @@ async def slew( """ telunit = LVMTelescopeUnit(tel) - telunit.slew_radec2000(target_ra_h=target_ra_h, target_dec_d=target_dec_d) + telunit.goto_eq(target_ra_h=target_ra_h, target_dec_d=target_dec_d) del telunit return command.finish(text="Acquisition done") diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index f75644b..553276b 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -63,7 +63,7 @@ def focusoffset(self, delta_f=None): try: self.amqpc.log.debug(f"{datetime.datetime.now()} | Move focus by {delta_f}") - self._foc.moveRelative(delta_f, unit="STEPS") + self._foc.moveRelative(delta_f, "STEPS") except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") @@ -88,13 +88,13 @@ def focus(self, value=None, temperature=None): self.amqpc.log.debug( f"{datetime.datetime.now()} | Move focus to {value}" ) - self._foc.moveAbsolute(value, unit="STEPS") + self._foc.moveAbsolute(value, "STEPS") else: temp_value = temp_vs_focus(temperature=temperature) self.amqpc.log.debug( f"{datetime.datetime.now()} | Move focus to {value} (estimated)" ) - self._foc.moveAbsolute(temp_value, unit="STEPS") + self._foc.moveAbsolute(temp_value, "STEPS") except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") @@ -112,7 +112,7 @@ def getfocusposition(self, unit="STEPS"): Unit of position """ try: - position = self._foc.getPosition(unit=unit)["Position"] + position = self._foc.getPosition(unit)["Position"] except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise @@ -225,39 +225,7 @@ def __init__(self, tel, amqpc, sitename="LCO"): self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise - def goto_park(self): - """ - Move telescope to safe park position. - - ====== - Comments and desired actions: - - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. Return error message - (assume people are inside dome) - - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), - abort observation (halt in LVMI_interface) and park telescope - (in this case, we assume user wants to park due to an emergency) - """ - pass - - def goto_zenith(self): - """ - Point telescope to zenith - - ====== - Comments and desired actions: - - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. - Return error message (assume people are inside dome) - - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), - repeat status command regularly until it returns idle, - then move telescope. Regularly give updates - (i.e. "waiting for instrument to become idle before moving telescope") - """ - - def slew_radec2000(self, target_ra_h, target_dec_d): + def _slew_radec2000(self, target_ra_h, target_dec_d): """ Slew the telescope to given equatorial coordinates whose epoch is J2000. @@ -272,13 +240,13 @@ def slew_radec2000(self, target_ra_h, target_dec_d): self.amqpc.log.debug( f"{datetime.datetime.now()} | Start to slew telescope to RA {target_ra_h}, Dec {target_dec_d}." # noqa: E501 ) - self._pwi.gotoRaDecJ2000(ra_h=target_ra_h, deg_d=target_dec_d) + self._pwi.gotoRaDecJ2000(target_ra_h, target_dec_d) except Exception as e: self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") raise self.amqpc.log.debug(f"{datetime.datetime.now()} | Slew completed.") - def slew_altaz(self, target_alt_d, target_az_d): + def _slew_altaz(self, target_alt_d, target_az_d): """ Slew the telescope to given horizontal coordinates. @@ -293,13 +261,13 @@ def slew_altaz(self, target_alt_d, target_az_d): self.amqpc.log.debug( f"{datetime.datetime.now()} | Start to slew telescope to Alt {target_alt_d}, Az {target_az_d}." # noqa: E501 ) - self._pwi.gotoRaDecJ2000(alt_d=target_alt_d, az_d=target_az_d) + self._pwi.gotoAltAzJ2000(target_alt_d, target_az_d) except Exception as e: self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") raise self.amqpc.log.debug(f"{datetime.datetime.now()} | Slew completed.") - def reset_offset_radec(self): + def _reset_offset_radec(self): """ Reset the offset of both axes to zero. """ @@ -315,7 +283,7 @@ def reset_offset_radec(self): f"{datetime.datetime.now()} | Zero offset setting completed." ) - def offset_radec(self, ra_arcsec, dec_arcsec): + def _offset_radec(self, ra_arcsec, dec_arcsec): """ Give some offset to the mount @@ -326,18 +294,17 @@ def offset_radec(self, ra_arcsec, dec_arcsec): dec_arcsec Distance to move along declination axis in arcseconds """ - + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Set telescope offsets ra={ra_arcsec}, dec={dec_arcsec}" # noqa: E501 + ) try: - self.amqpc.log.debug( - f"{datetime.datetime.now()} | Set telescope offsets ra={ra_arcsec}, dec={dec_arcsec}" # noqa: E501 - ) self._pwi.offset(ra_add_arcsec=ra_arcsec, dec_add_arcsec=dec_arcsec) except Exception as e: self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") raise self.amqpc.log.debug(f"{datetime.datetime.now()} | Set offset done") - def get_dec2000_deg(self): + def _get_dec2000_deg(self): """ Return the declination (J2000) of current position in degrees """ @@ -349,6 +316,25 @@ def get_dec2000_deg(self): return status["dec_j2000_degs"] + def _set_tracking(self, enable): + """ + Turn on or off the mount tracking + + Parameters + ---------- + enable + If enable is True, tracking will be started. Otherwise, the tracking will be stopped. + """ + + + s = "ON" if enable else "OFF" + self.amqpc.log.debug(f"{datetime.datetime.now()} | Set tracking {s}") + try: + self._pwi.setTracking(enable) + except Exception as e: + self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") + raise + class LVMCamera: """ @@ -377,7 +363,7 @@ def single_exposure(self, exptime): ) try: - path = self._cam.expose(exptime=exptime, num=1, camname=self.camname)[ + path = self._cam.expose(exptime, 1, self.camname)[ "PATH" ] except Exception as e: @@ -406,7 +392,7 @@ def test_exposure(self, exptime): try: path = self._cam.expose( - exptime=exptime, num=1, camname=self.camname, testshot=True + exptime, 1, self.camname, testshot="" )["PATH"] except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") @@ -428,8 +414,12 @@ def bias_exposure(self, repeat): repeat The number of bias images """ + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Guider {self.camname} exposure started" + ) + try: - path = self._cam.expose(exptime=0, num=repeat, camname=self.camname)["PATH"] + path = self._cam.expose(0, repeat, self.camname)["PATH"] except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise @@ -440,6 +430,22 @@ def bias_exposure(self, repeat): return path.values() + def status(self): + ''' + Return status of autoguide camera (i.e. power status, exposing/reading out/idle ). + ''' + + try: + status = self._cam.status() + except Exception as e: + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise + + self.amqpc.log.info( + f"{datetime.datetime.now()} | {status}" + ) + + return status class LVMEastCamera(LVMCamera): """ @@ -510,6 +516,9 @@ def __init__( log_dir="/home/hojae/Desktop/lvmagp/logs", log=self.log, ) + self.ag_on = False + self.ag_break = False + # log_dir => How to fix?? self.__connect_actors( enable_pwi, enable_foc, enable_agw, enable_age, enable_fibsel, enable_km @@ -551,9 +560,6 @@ def __read_parameters(self): self.pixelscale = -999 self.rotationangle = -999 - self.screen_alt_d = -999 - self.screen_az_d = -999 - ############# Autofocus functions ######################### def coarse_autofocus(self): """ @@ -692,14 +698,14 @@ def goto_eq( ) raise LvmagpTargetOverTheLimit - self.reset_offset_radec() + self._reset_offset_radec() # Calculate position angle and rotate K-mirror :: should be changed to traj method. target_pa_d0 = cal_pa(target_ra_h, target_dec_d, long_d, lat_d) invoke( self.derotate(target_pa_d0 + target_pa_d), - self.slew_radec2000(target_ra_h=target_ra_h, target_dec_d=target_dec_d), + self._slew_radec2000(target_ra_h=target_ra_h, target_dec_d=target_dec_d), ) self.amqpc.log.debug( @@ -790,7 +796,7 @@ def goto_eq( ) invoke( self.derotate(target_pa_d - pa_d), - self.offset_radec( + self._offset_radec( ra_arcsec=comp_ra_arcsec, dec_arcsec=comp_dec_arcsec ), ) @@ -845,7 +851,7 @@ def goto_aa( ) raise LvmagpTargetOverTheLimit - self.reset_offset_radec() + self._reset_offset_radec() # Calculate position angle and rotate K-mirror :: should be changed to traj method. target_pa_d0 = ( @@ -854,7 +860,7 @@ def goto_aa( invoke( self.derotate(target_pa_d0 + target_pa_d), - self.slew_altaz(target_alt_d=target_alt_d, target_az_d=target_az_d), + self._slew_altaz(target_alt_d=target_alt_d, target_az_d=target_az_d), ) self.amqpc.log.debug( @@ -877,60 +883,413 @@ def goto_screen(self): (i.e. "waiting for instrument to become idle before moving telescope") """ - self.goto_aa(target_alt_d=self.screen_alt_d, target_az_d=self.screen_az_d) + self.goto_aa(target_alt_d=usrpars.screen_alt_d, target_az_d=usrpars.screen_az_d) - ############# Autoguide functions ######################### - def offset( - self, - target=None, - delta_ra=None, - delta_dec=None, - delta_x=None, - delta_y=None, - offset_gbox=False, - ): + def goto_park(self): """ - Pointing offset: change track rates + Move telescope to safe park position. ====== Comments and desired actions: + - Check dome safety interlock: + - if interlock is engaged, do not move the telescope. Return error message + (assume people are inside dome) + - run status (LVMI_interface) to check instrument status + - if not idle (i.e. carrying out any observations or calibrations), + abort observation (halt in LVMI_interface) and park telescope + (in this case, we assume user wants to park due to an emergency) """ - pass + self.goto_aa(target_alt_d=usrpars.park_alt_d, target_az_d=usrpars.park_az_d) - def guide_offset( - self, target=None, delta_ra=None, delta_dec=None, delta_x=None, delta_y=None - ): + def goto_zenith(self): """ - Guiding offset: do NOT change track rates + Point telescope to zenith ====== Comments and desired actions: + - Check dome safety interlock: + - if interlock is engaged, do not move the telescope. + Return error message (assume people are inside dome) + - run status (LVMI_interface) to check instrument status + - if not idle (i.e. carrying out any observations or calibrations), + repeat status command regularly until it returns idle, + then move telescope. Regularly give updates + (i.e. "waiting for instrument to become idle before moving telescope") + """ + self.goto_aa(target_alt_d=89.9999, target_az_d=180.) + + def track_on(self, derotator=True): + ''' + Turn on tracking, optionally track in rotation, optionally + supply non-sidereal track rates. + + Parameters + ---------- + derotator + If True, derotator will work to compensate the field rotation. + ''' + self._set_tracking(enable=True) + if derotator: + pass # do something to derotate the field + + def track_off(self): + ''' + Turn off mount tracking and field derotating. + ''' + + self._set_tracking(enable=False) + # do something to stop the derotator + + ############# Autoguide functions ######################### + def offset( + self, target=None, delta_ra=None, delta_dec=None, delta_x=None, delta_y=None, delta_pa=None + ): """ + Normal offset (for guiding): do NOT change track rates - pass + Parameters + ---------- + target + ??? + delta_ra + Offset in ra direction in arcsecond (+/- = E/W) + delta_dec + Offset in dec direction in arcsecond(+/- = N/S) + delta_x + Offset in x direction in guide frame in pixel(+/- = R/L) + delta_y + Offset in y direction in guide frame in pixel (+/- = U/D) + delta_pa + Offset in position angle in degree (+/- = CW/CCW) + """ + + pass - def offset_gbox(self, delta_x=None, delta_y=None, delta_pa=None): + def dither(self, delta_x=None, delta_y=None, delta_pa=None): """ - move the guider set points by specified amount; used to move accurate + move the guider set points (guide boxes) by specified amount; used to move accurate offsets by letting the guider do the work. used, e.g., for dithering. - ====== - Comments and desired actions: + + Parameters + ---------- + delta_x + Offset in x direction in guide frame in pixel(+/- = R/L) + delta_y + Offset in y direction in guide frame in pixel (+/- = U/D) + delta_pa + Offset in position angle in degree (+/- = CW/CCW) """ - pass + pass + - def paoffset(self, delta_PA=None): + def guide_on(self, useteldata=False, guide_parameters=None): + ''' + Start guiding, or modify parameters of running guide loop. <--- modify???? + guide_parameters is a dictionary containing additional parameters for + the guiders, e.g. exposure times, cadence, PID parameters, readout or window modes, ... + + useteldata + If ``useteldata`` is flagged, the sequence will use the pixel scale and + rotation angle from LVMTelescope. + Otherwise, the sequence will get pixel scale from LVMCamera, and + it assumes that the camera is north-oriented. + guide_parameters + exposure times, cadence, PID parameters, readout or window modes, ... ??? + ''' + if self.ag_on: + pass #raise lvmagpguidealreadyrunning ????? + + try: + autoguide_supervisor(useteldata, + timeout=3600) + await telescopes[tel].ag_task + + except asyncio.TimeoutError: + command.error("Autoguide timeout") + + finally: + telescopes[tel].ag_task = None + + return command.finish("Guide stopped") + + + def guide_off(self): + ''' + Turn off guiding, revert to tracking (track_on). + ''' + if tel in telescopes: + if telescopes[tel].ag_task is not None: + telescopes[tel].ag_break = True + else: + return command.fail( + text="There is no autoguiding loop for telescope '%s'" % tel + ) + else: + return command.fail(text="Telescope '%s' does not exist" % tel) + + return command.finish() + + ''' + async def calibration(): + """ + Run calibration sequence to calculate the transformation + from the equatorial coordinates to the xy coordinates of the image. """ - Apply a relative rotation offset by moving the K-mirror - Parameters: - delta_PA (float): rotation offset in degrees (+/- = E/W) + offset_per_step = usrpars.ag_cal_offset_per_step + num_step = usrpars.ag_cal_num_step - Returns: - None + if tel not in telescopes: + return command.fail(text="Telescope '%s' does not exist" % tel) + + decj2000_deg = await telescopes[tel].get_dec2000_deg(command) + + xpositions, ypositions = [], [] + + initposition, initflux = await find_guide_stars( + command, telescopes, eastcameras, westcameras, focusers, kmirrors, tel + ) + xpositions.append(initposition[:, 0]) + ypositions.append(initposition[:, 1]) + + await asyncio.sleep(3) + + # dec axis calibration + for step in range(1, num_step + 1): + await telescopes[tel].offset_radec(command, 0, offset_per_step) + position, flux = await find_guide_stars( + command, + telescopes, + eastcameras, + westcameras, + focusers, + kmirrors, + tel, + positionguess=initposition, + ) + xpositions.append(position[:, 0]) + ypositions.append(position[:, 1]) + + await telescopes[tel].offset_radec(command, 0, -num_step * offset_per_step) + + xoffsets = np.array(xpositions) - xpositions[0] + yoffsets = np.array(ypositions) - ypositions[0] + + print(xpositions) + print(xoffsets) + print(ypositions) + print(yoffsets) + + xscale_dec = ( + np.average(xoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + offset_per_step + ) # displacement along x-axis by ra offset in pixel per arcsec. exclude the first index (0,0) + yscale_dec = ( + np.average(yoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) / + offset_per_step + ) # exclude the first index (0,0) + + # ra axis calibration + xpositions = [initposition[:, 0]] + ypositions = [initposition[:, 1]] + + for step in range(1, num_step + 1): + await telescopes[tel].offset_radec( + command, offset_per_step / np.cos(np.deg2rad(decj2000_deg)), 0 + ) + position, flux = await find_guide_stars( + command, + telescopes, + eastcameras, + westcameras, + focusers, + kmirrors, + tel, + positionguess=initposition, + ) + xpositions.append(position[:, 0]) + ypositions.append(position[:, 1]) + + await telescopes[tel].offset_radec( + command, -num_step * offset_per_step / np.cos(np.deg2rad(decj2000_deg)), 0 + ) + + xoffsets = np.array(xpositions) - xpositions[0] + yoffsets = np.array(ypositions) - ypositions[0] + + print(xpositions) + print(xoffsets) + print(ypositions) + print(yoffsets) + + xscale_ra = ( + np.sum(xoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) + / offset_per_step + ) # exclude the first index (0,0) + yscale_ra = ( + np.sum(yoffsets[1:] / np.array([[i] * 3 for i in range(1, num_step + 1)])) + / offset_per_step + ) # exclude the first index (0,0) + + telescopes[tel].scale_matrix = np.linalg.inv( + np.array([[xscale_ra, xscale_dec], [yscale_ra, yscale_dec]]) + ) # inverse matrix.. linear system of equations.. + return command.finish( + xscale_ra="%.3f pixel/arcsec" % xscale_ra, + yscale_ra="%.3f pixel/arcsec" % yscale_ra, + xscale_dec="%.3f pixel/arcsec" % xscale_dec, + yscale_dec="%.3f pixel/arcsec" % yscale_dec, + ) + ''' + + def autoguide_supervisor(self, useteldata): + """ + Manage the autoguide sequence. + It starts real autoguide loop and keeps it until the break signal comes. + + Parameters + ---------- + tel + Telescope to autoguide + useteldata + If ``useteldata`` is flagged, + the sequence will use the pixel scale and rotation angle from LVMTelescope. + Otherwise, the sequence will get pixel scale from LVMCamera, and + it assumes that the camera is north-oriented and both axes of mount are orthogonal. + """ + initposition, initflux = self.find_guide_stars() + + while 1: + await autoguiding( + initposition, + initflux, + useteldata, + ) + + if telescopes[tel].ag_break: + telescopes[tel].ag_break = False + break + + return True + + async def find_guide_stars(self, positionguess=None): + """ + Expose an image, and find three guide stars from the image. + Also calculate the center coordinates and fluxes of found stars. + + Parameters + ---------- + positionguess + Initial guess of guidestar position. + It should be given in np.ndarray as [[x1, y1], [x2, y2], ...] + If ``positionguess`` is not None, ``find_guide_stars`` only conduct center finding + based on ``positionguess`` without finding new stars. + """ + + # take an image for astrometry + command.info("Taking image...") + + try: + imgcmd = [] + imgcmd.append(westcameras[tel].single_exposure(command, usrpars.ag_exptime)) + imgcmd.append(eastcameras[tel].single_exposure(command, usrpars.ag_exptime)) + + guideimgpath = await asyncio.gather(*imgcmd) + + except Exception: + return command.fail(fail="Camera error") + + westguideimg = GuideImage(guideimgpath[0]) + eastguideimg = GuideImage(guideimgpath[1]) + + if positionguess is None: + starposition = westguideimg.findstars() + else: + westguideimg.guidestarposition = positionguess + westguideimg.update_guidestar_properties() + starposition = westguideimg.guidestarposition + starflux = westguideimg.guidestarflux + + return starposition, starflux + + async def autoguiding(self, initposition, + initflux, + useteldata, + ): """ + Expose an image, and calculate offset from the image and initial values. + Compensate the offset. + + Parameters + ---------- + tel + Telescope to autoguide + initposition + Position of guide stars when the autoguide is started + initflux + Flux of guide stars when the autoguide is started + positionguess + Initial guess of guidestar position. + It should be given in np.ndarray as [[x1, y1], [x2, y2], ...] + If ``positionguess`` is not None, ``find_guide_stars`` only conduct center finding + based on ``positionguess`` without finding new stars. + """ + starposition, starflux = self.find_guide_stars( + positionguess=initposition, + ) + + if ( + np.abs( + np.average(starflux / initflux - 1, weights=2.5 * np.log10(initflux * 10)) + ) + > usrpars.ag_flux_tolerance + ): + return command.error( + "Star flux variation %.3f is too large." + % np.abs( + np.average( + starflux / initflux - 1, weights=2.5 * np.log10(initflux * 10) + ) + ) + ) + + offset = np.mean(starposition - initposition, axis=0) # in x,y [pixel] + + if useteldata: + offset_arcsec = np.dot( + telescopes[tel].scale_matrix, offset + ) # in x,y(=ra,dec) [arcsec] + correction_arcsec = -np.array(offset_arcsec) + + else: + theta = np.radians(westcameras[tel].rotationangle) + c, s = np.cos(theta), np.sin(theta) + R = np.array(((c, -s), (s, c))) # inverse rotation matrix + correction_arcsec = -( + np.dot(R, offset) * westcameras[tel].pixelscale + ) # in x,y(=ra,dec) [arcsec] + + decj2000_deg = await telescopes[tel].get_dec2000_deg(command) + correction_arcsec[0] /= np.cos(np.deg2rad(decj2000_deg)) + correction_arcsec[1] *= -1 + + if (np.sqrt(offset[0] ** 2 + offset[1] ** 2)) > usrpars.ag_min_offset: + command.info( + "compensate signal: ra %.2f arcsec dec %.2f arcsec x %.2f pixel y %.2f pixel" + % (correction_arcsec[0], correction_arcsec[1], -offset[0], -offset[1]) + ) + await telescopes[tel].offset_radec(command, *correction_arcsec) + return correction_arcsec + + else: + return [0.0, 0.0] - pass + def zero_coordinates(self): + ''' + Zero-out mount model once pointing is verified. + ''' + pass #what is this? def check_safety_interlock(self): pass diff --git a/python/lvmagp/actor/internalfunc.py b/python/lvmagp/actor/internalfunc.py index 673f1b0..4a1ea2b 100644 --- a/python/lvmagp/actor/internalfunc.py +++ b/python/lvmagp/actor/internalfunc.py @@ -99,7 +99,7 @@ def twoDgaussianfit(self): for i in range(len(self.guidestarposition[:, 0])): xcenter = int(self.guidestarposition[i, 0]) ycenter = int(self.guidestarposition[i, 1]) - p_init = models.Gaussian2D(amplitude=30000, x_mean=xcenter, y_mean=ycenter) + p_init = models.Gaussian2D(amplitude=60000, x_mean=xcenter, y_mean=ycenter) fit_p = fitting.LevMarLSQFitter() xrange = np.arange(xcenter - windowradius, xcenter + windowradius) yrange = np.arange(ycenter - windowradius, ycenter + windowradius) @@ -123,7 +123,7 @@ def twoDgaussianfit(self): def update_guidestar_properties(self): """ Using ``twoDGaussianfit`` method, update guidestar properties in ``self.guidestarflux``, - ``self.guidestarposition``, ``self.guidestarsize``, and ``slef.FWHM``. + ``self.guidestarposition``, ``self.guidestarsize``, and ``self.FWHM``. """ if len(self.guidestarposition) == 0: pass diff --git a/python/lvmagp/actor/user_parameters.py b/python/lvmagp/actor/user_parameters.py index 4c4b255..b8be530 100644 --- a/python/lvmagp/actor/user_parameters.py +++ b/python/lvmagp/actor/user_parameters.py @@ -1,4 +1,9 @@ class usrpars: + # special positions + screen_alt_d = -999 + screen_az_d = -999 + park_alt_d = -999 + park_az_d = -999 # autofocus parameters af_incremental = 100 # step size for each movement From be766bc861a25bb643278d83fddc9c21ea40c768 Mon Sep 17 00:00:00 2001 From: mgjeon Date: Thu, 17 Feb 2022 13:21:46 +0900 Subject: [PATCH 09/17] (temp) fix async syntax error in commfunc.py --- python/lvmagp/actor/commfunc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index 553276b..9bcfdef 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -983,7 +983,7 @@ def dither(self, delta_x=None, delta_y=None, delta_pa=None): pass - def guide_on(self, useteldata=False, guide_parameters=None): + async def guide_on(self, useteldata=False, guide_parameters=None): ''' Start guiding, or modify parameters of running guide loop. <--- modify???? guide_parameters is a dictionary containing additional parameters for @@ -1143,7 +1143,7 @@ async def calibration(): ) ''' - def autoguide_supervisor(self, useteldata): + async def autoguide_supervisor(self, useteldata): """ Manage the autoguide sequence. It starts real autoguide loop and keeps it until the break signal comes. From 232c2bdccffbebd91bcbd3d044abc0f32fc63776 Mon Sep 17 00:00:00 2001 From: mgjeon Date: Thu, 3 Mar 2022 19:50:25 +0900 Subject: [PATCH 10/17] delete poetry.lock --- poetry.lock | 2174 --------------------------------------------------- 1 file changed, 2174 deletions(-) delete mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 1acde93..0000000 --- a/poetry.lock +++ /dev/null @@ -1,2174 +0,0 @@ -[[package]] -name = "aio-pika" -version = "6.8.1" -description = "Wrapper for the aiormq for asyncio and humans." -category = "main" -optional = false -python-versions = ">=3.5, <4" - -[package.dependencies] -aiormq = ">=3.2.3,<4" -yarl = "*" - -[package.extras] -develop = ["aiomisc (>=10.1.6,<10.2.0)", "async-generator", "coverage (!=4.3)", "coveralls", "pylava", "pytest", "pytest-cov", "shortuuid", "nox", "sphinx", "sphinx-autobuild", "timeout-decorator", "tox (>=2.4)"] - -[[package]] -name = "aiormq" -version = "3.3.1" -description = "Pure python AMQP asynchronous client library" -category = "main" -optional = false -python-versions = ">3.5.*" - -[package.dependencies] -pamqp = "2.3.0" -yarl = "*" - -[package.extras] -develop = ["aiomisc (>=11.0,<12.0)", "async-generator", "coverage (!=4.3)", "coveralls", "pylava", "pytest", "pytest-cov", "tox (>=2.4)"] - -[[package]] -name = "alabaster" -version = "0.7.12" -description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "appnope" -version = "0.1.2" -description = "Disable App Nap on macOS >= 10.9" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "astropy" -version = "4.3.1" -description = "Astronomy and astrophysics core library" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version == \"3.7\""} -numpy = ">=1.17" -pyerfa = ">=1.7.3" - -[package.extras] -all = ["scipy (>=1.1)", "certifi", "dask", "h5py", "beautifulsoup4", "html5lib", "bleach", "PyYAML (>=3.13)", "pandas", "sortedcontainers", "pytz", "jplephem", "matplotlib (>=3.0,!=3.4.0)", "mpmath", "asdf (>=2.6)", "bottleneck", "ipython (>=4.2)", "pytest"] -docs = ["sphinx (<4)", "sphinx-astropy (>=1.3)", "pytest", "PyYAML (>=3.13)", "scipy (>=1.1)", "matplotlib (>=3.1,!=3.4.0)", "sphinx-changelog (>=1.1.0)", "packaging"] -test = ["pytest-astropy (>=0.8)", "pytest-xdist", "objgraph", "ipython (>=4.2)", "coverage", "skyfield (>=1.20)", "sgp4 (>=2.3)", "packaging"] - -[[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "21.4.0" -description = "Classes Without Boilerplate" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] - -[[package]] -name = "babel" -version = "2.9.1" -description = "Internationalization utilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -pytz = ">=2015.7" - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "black" -version = "21.12b0" -description = "The uncompromising code formatter." -category = "main" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -click = ">=7.1.2" -mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" -platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} -typing-extensions = ">=3.10.0.0" - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "certifi" -version = "2021.10.8" -description = "Python package for providing Mozilla's CA Bundle." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "charset-normalizer" -version = "2.0.10" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" -optional = false -python-versions = ">=3.5.0" - -[package.extras] -unicode_backport = ["unicodedata2"] - -[[package]] -name = "click" -version = "8.0.3" -description = "Composable command line interface toolkit" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[[package]] -name = "click-default-group" -version = "1.2.2" -description = "Extends click.Group to invoke a command without explicit subcommand name" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -click = "*" - -[[package]] -name = "codecov" -version = "2.1.12" -description = "Hosted coverage reports for GitHub, Bitbucket and Gitlab" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -coverage = "*" -requests = ">=2.7.9" - -[[package]] -name = "colorama" -version = "0.4.4" -description = "Cross-platform colored terminal text." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "configparser" -version = "5.2.0" -description = "Updated configparser from Python 3.8 for Python 2.6+." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "types-backports", "pytest-black (>=0.3.7)", "pytest-mypy"] - -[[package]] -name = "coverage" -version = "6.2" -description = "Code coverage measurement for Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -tomli = {version = "*", optional = true, markers = "extra == \"toml\""} - -[package.extras] -toml = ["tomli"] - -[[package]] -name = "cycler" -version = "0.11.0" -description = "Composable style cycles" -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "daemonocle" -version = "1.2.3" -description = "A Python library for creating super fancy Unix daemons" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -click = "*" -psutil = "*" - -[package.extras] -test = ["coveralls", "flake8", "flake8-bugbear", "flake8-isort", "pytest", "pytest-cov"] - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -category = "dev" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "doc8" -version = "0.10.1" -description = "Style checker for Sphinx (or other) RST documentation" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -docutils = "*" -Pygments = "*" -restructuredtext-lint = ">=0.7" -stevedore = "*" - -[[package]] -name = "docutils" -version = "0.16" -description = "Docutils -- Python Documentation Utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "flake8" -version = "4.0.1" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = "<4.3", markers = "python_version < \"3.8\""} -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.8.0,<2.9.0" -pyflakes = ">=2.4.0,<2.5.0" - -[[package]] -name = "fonttools" -version = "4.29.0" -description = "Tools to manipulate font files" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["scipy", "munkres"] -lxml = ["lxml (>=4.0,<5)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -symfont = ["sympy"] -type1 = ["xattr"] -ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=14.0.0)"] -woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] - -[[package]] -name = "idna" -version = "3.3" -description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "imagesize" -version = "1.3.0" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "importlib-metadata" -version = "4.2.0" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] - -[[package]] -name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "invoke" -version = "1.6.0" -description = "Pythonic task execution" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "ipdb" -version = "0.13.9" -description = "IPython-enabled pdb" -category = "dev" -optional = false -python-versions = ">=2.7" - -[package.dependencies] -decorator = {version = "*", markers = "python_version > \"3.6\""} -ipython = {version = ">=7.17.0", markers = "python_version > \"3.6\""} -toml = {version = ">=0.10.2", markers = "python_version > \"3.6\""} - -[[package]] -name = "ipython" -version = "7.31.1" -description = "IPython: Productive Interactive Computing" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -traitlets = ">=4.2" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["notebook", "ipywidgets"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"] - -[[package]] -name = "isort" -version = "5.10.1" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.6.1,<4.0" - -[package.extras] -pipfile_deprecated_finder = ["pipreqs", "requirementslib"] -requirements_deprecated_finder = ["pipreqs", "pip-api"] -colors = ["colorama (>=0.4.3,<0.5.0)"] -plugins = ["setuptools"] - -[[package]] -name = "jedi" -version = "0.18.1" -description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -parso = ">=0.8.0,<0.9.0" - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] - -[[package]] -name = "jinja2" -version = "3.0.3" -description = "A very fast and expressive template engine." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "jsonpickle" -version = "1.3" -description = "Python library for serializing any arbitrary object graph into JSON" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "jsonschema" -version = "3.2.0" -description = "An implementation of JSON Schema validation for Python" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -attrs = ">=17.4.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -pyrsistent = ">=0.14.0" -six = ">=1.11.0" - -[package.extras] -format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] -format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] - -[[package]] -name = "kiwisolver" -version = "1.3.2" -description = "A fast implementation of the Cassowary constraint solver" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "markupsafe" -version = "2.0.1" -description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "matplotlib" -version = "3.5.1" -description = "Python plotting package" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -cycler = ">=0.10" -fonttools = ">=4.22.0" -kiwisolver = ">=1.0.1" -numpy = ">=1.17" -packaging = ">=20.0" -pillow = ">=6.2.0" -pyparsing = ">=2.2.1" -python-dateutil = ">=2.7" -setuptools_scm = ">=4" - -[[package]] -name = "matplotlib-inline" -version = "0.1.3" -description = "Inline Matplotlib backend for Jupyter" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "multidict" -version = "6.0.2" -description = "multidict implementation" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "numpy" -version = "1.21.5" -description = "NumPy is the fundamental package for array computing with Python." -category = "main" -optional = false -python-versions = ">=3.7,<3.11" - -[[package]] -name = "packaging" -version = "20.9" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.dependencies] -pyparsing = ">=2.0.2" - -[[package]] -name = "pamqp" -version = "2.3.0" -description = "RabbitMQ Focused AMQP low-level library" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -codegen = ["lxml"] - -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - -[[package]] -name = "pathspec" -version = "0.9.0" -description = "Utility library for gitignore style pattern matching of file paths." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[[package]] -name = "pbr" -version = "5.8.0" -description = "Python Build Reasonableness" -category = "dev" -optional = false -python-versions = ">=2.6" - -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "photutils" -version = "1.3.0" -description = "An Astropy package for source detection and photometry" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -astropy = ">=4.0" -numpy = ">=1.17" - -[package.extras] -all = ["scipy (>=1.6.0)", "matplotlib (>=2.2)", "scikit-image (>=0.14.2)", "scikit-learn", "gwcs (>=0.12)", "bottleneck"] -docs = ["scipy (>=1.6.0)", "sphinx (<4)", "sphinx-astropy", "matplotlib (>=2.2)", "scikit-image (>=0.14.2)", "scikit-learn", "gwcs (>=0.12)"] -test = ["pytest-astropy"] - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "pillow" -version = "9.0.0" -description = "Python Imaging Library (Fork)" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "platformdirs" -version = "2.4.1" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "prompt-toolkit" -version = "3.0.24" -description = "Library for building powerful interactive command lines in Python" -category = "main" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psutil" -version = "5.9.0" -description = "Cross-platform lib for process and system monitoring in Python." -category = "main" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.extras] -test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pycodestyle" -version = "2.8.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[[package]] -name = "pyerfa" -version = "2.0.0.1" -description = "Python bindings for ERFA" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -numpy = ">=1.17" - -[package.extras] -docs = ["sphinx-astropy (>=1.3)"] -test = ["pytest", "pytest-doctestplus (>=0.7)"] - -[[package]] -name = "pyflakes" -version = "2.4.0" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "pygments" -version = "2.11.2" -description = "Pygments is a syntax highlighting package written in Python." -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "pyparsing" -version = "3.0.7" -description = "Python parsing module" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -diagrams = ["jinja2", "railroad-diagrams"] - -[[package]] -name = "pyrsistent" -version = "0.18.1" -description = "Persistent/Functional/Immutable data structures" -category = "main" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "pytest" -version = "6.2.5" -description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] - -[[package]] -name = "pytest-asyncio" -version = "0.17.2" -description = "Pytest support for asyncio" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -pytest = ">=6.1.0" -typing-extensions = {version = ">=4.0", markers = "python_version < \"3.8\""} - -[package.extras] -testing = ["coverage (==6.2)", "hypothesis (>=5.7.1)", "flaky (>=3.5.0)", "mypy (==0.931)"] - -[[package]] -name = "pytest-cov" -version = "3.0.0" -description = "Pytest plugin for measuring coverage." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -coverage = {version = ">=5.2.1", extras = ["toml"]} -pytest = ">=4.6" - -[package.extras] -testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] - -[[package]] -name = "pytest-mock" -version = "3.6.1" -description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytest = ">=5.0" - -[package.extras] -dev = ["pre-commit", "tox", "pytest-asyncio"] - -[[package]] -name = "pytest-sugar" -version = "0.9.4" -description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -packaging = ">=14.1" -pytest = ">=2.9" -termcolor = ">=1.1.0" - -[[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" -category = "dev" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "pytz" -version = "2021.3" -description = "World timezone definitions, modern and historical" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "requests" -version = "2.27.1" -description = "Python HTTP for Humans." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} -idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} -urllib3 = ">=1.21.1,<1.27" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] - -[[package]] -name = "restructuredtext-lint" -version = "1.3.2" -description = "reStructuredText linter" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -docutils = ">=0.11,<1.0" - -[[package]] -name = "rstcheck" -version = "3.3.1" -description = "Checks syntax of reStructuredText and code blocks nested within it" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -docutils = ">=0.7" - -[[package]] -name = "sdss-access" -version = "2.0.0" -description = "Package to dynamically build filepaths and access all SDSS SAS products" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -requests = ">=2.10.0" -sdss-tree = ">=3.0.0" -sdsstools = ">=0.4.5" -six = ">=1.11" -tqdm = ">=4.46.0" - -[package.extras] -dev = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)", "ipython (>=7.9.0)", "matplotlib (>=3.1.1)", "flake8 (>=3.7.9)", "doc8 (>=0.8.0)", "pytest (>=5.2.2)", "pytest-cov (>=2.8.1)", "pytest-mock (>=1.13.0)", "pytest-sugar (>=0.9.2)", "isort (>=4.3.21)", "codecov (>=2.0.15)", "coverage[toml] (>=5.0)", "coveralls (>=1.7)", "ipdb (>=0.12.3)", "sdsstools[dev] (>=0.4.0)", "invoke (>=1.3.0)", "twine (>=3.1.1)", "wheel (>=0.33.6)"] -docs = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)"] - -[[package]] -name = "sdss-clu" -version = "1.5.6" -description = "A new protocol for SDSS actors." -category = "main" -optional = false -python-versions = ">=3.7,<4.0" - -[package.dependencies] -aio_pika = ">=6.4.1,<7.0.0" -aiormq = ">=3.2.0,<4.0.0" -click = ">=8.0,<9.0" -jsonschema = ">=3.0.1,<4.0.0" -prompt_toolkit = ">=3.0.6,<4.0.0" -sdsstools = ">=0.4.13,<0.5.0" - -[[package]] -name = "sdss-cluplus" -version = "0.0.16" -description = "Additional functionality for sdss-clu" -category = "main" -optional = false -python-versions = ">=3.7,<4.0" - -[package.dependencies] -click-default-group = ">=1.2.2,<2.0.0" -daemonocle = ">=1.1.1,<2.0.0" -jsonpickle = "1.3" -sdss-access = ">=0.2.3" -sdss-clu = ">=1.2.0" -sdss-tree = ">=2.15.2" -sdsstools = ">=0.4.0" - -[[package]] -name = "sdss-tree" -version = "3.1.1" -description = "Control and setup of SDSS tree environment and modules" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -configparser = ">=3.5.0" -pygments = ">=2.6" -sdsstools = ">=0.4.5" - -[package.extras] -dev = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-argparse (>=0.2.5)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)", "ipython (>=7.9.0)", "matplotlib (>=3.1.1)", "flake8 (>=3.7.9)", "doc8 (>=0.8.0)", "pytest (>=5.2.2)", "pytest-cov (>=2.8.1)", "pytest-mock (>=1.13.0)", "pytest-sugar (>=0.9.2)", "isort (>=4.3.21)", "codecov (>=2.0.15)", "coverage[toml] (>=5.0)", "coveralls (>=1.7)", "ipdb (>=0.12.3)", "sdsstools[dev] (>=0.4.0)", "invoke (>=1.3.0)", "twine (>=3.1.1)", "wheel (>=0.33.6)"] -docs = ["Sphinx (>=2.1.0)", "sphinx-bootstrap-theme (>=0.4.12)", "recommonmark (>=0.6)", "sphinx-argparse (>=0.2.5)", "sphinx-issues (>=1.2.0)", "importlib-metadata (>=1.6.0)"] - -[[package]] -name = "sdsstools" -version = "0.4.13" -description = "Small tools for SDSS products" -category = "main" -optional = false -python-versions = ">=3.6,<4.0" - -[package.dependencies] -daemonocle = ">=1.0.2,<2.0.0" -docutils = ">=0.16,<0.17" -invoke = ">=1.3.0,<2.0.0" -packaging = ">=20.4,<21.0" -pygments = ">=2.5.2,<3.0.0" -pyyaml = ">=4.0" -semantic-version = ">=2.8.4,<3.0.0" -six = ">=1.14.0,<2.0.0" - -[[package]] -name = "semantic-version" -version = "2.8.5" -description = "A library implementing the 'SemVer' scheme." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "setuptools-scm" -version = "6.4.2" -description = "the blessed package to manage your versions by scm tags" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -packaging = ">=20.0" -tomli = ">=1.0.0" - -[package.extras] -test = ["pytest (>=6.2)", "virtualenv (>20)"] -toml = ["setuptools (>=42)"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "sphinx" -version = "3.5.4" -description = "Python documentation generator" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=1.3" -colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.12,<0.17" -imagesize = "*" -Jinja2 = ">=2.3" -packaging = "*" -Pygments = ">=2.0" -requests = ">=2.5.0" -snowballstemmer = ">=1.1" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = "*" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = "*" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.800)", "docutils-stubs"] -test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.0" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest", "html5lib"] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -test = ["pytest", "flake8", "mypy"] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -name = "stevedore" -version = "3.5.0" -description = "Manage dynamic plugins for Python applications" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""} -pbr = ">=2.0.0,<2.1.0 || >2.1.0" - -[[package]] -name = "termcolor" -version = "1.1.0" -description = "ANSII Color formatting for output in terminal." -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "tomli" -version = "1.2.3" -description = "A lil' TOML parser" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "tqdm" -version = "4.62.3" -description = "Fast, Extensible Progress Meter" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] -notebook = ["ipywidgets (>=6)"] -telegram = ["requests"] - -[[package]] -name = "traitlets" -version = "5.1.1" -description = "Traitlets Python configuration system" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -test = ["pytest"] - -[[package]] -name = "typed-ast" -version = "1.5.2" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "typing-extensions" -version = "4.0.1" -description = "Backported and Experimental Type Hints for Python 3.6+" -category = "main" -optional = false -python-versions = ">=3.6" - -[[package]] -name = "urllib3" -version = "1.26.8" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" - -[package.extras] -brotli = ["brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "wcwidth" -version = "0.2.5" -description = "Measures the displayed width of unicode strings in a terminal" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "yarl" -version = "1.7.2" -description = "Yet another URL library" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" -typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} - -[[package]] -name = "zipp" -version = "3.7.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] - -[metadata] -lock-version = "1.1" -python-versions = ">3.7, <3.10" -content-hash = "7be3affd459b0a3a6fcadacc13c7bef0110401fce866cc88e910a0816d7c2f04" - -[metadata.files] -aio-pika = [ - {file = "aio-pika-6.8.1.tar.gz", hash = "sha256:c2b2b46949a34252ff0e64c3bc208eef1893e5791b51aeefabf1676788d56b66"}, - {file = "aio_pika-6.8.1-py3-none-any.whl", hash = "sha256:059ab8ecc03d73997f64ed28df7269105984232174d0e6406389c4e8ed30941c"}, -] -aiormq = [ - {file = "aiormq-3.3.1-py3-none-any.whl", hash = "sha256:e584dac13a242589aaf42470fd3006cb0dc5aed6506cbd20357c7ec8bbe4a89e"}, - {file = "aiormq-3.3.1.tar.gz", hash = "sha256:8218dd9f7198d6e7935855468326bbacf0089f926c70baa8dd92944cb2496573"}, -] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -appnope = [ - {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"}, - {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"}, -] -astropy = [ - {file = "astropy-4.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0764d7f68034c584dda8d1c9cc4357ade05cec4c1134db43bce804fcf656ff1"}, - {file = "astropy-4.3.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ce1095e385ec74c655866eacd1853535fbc2dd2c42a8188503fe9a68b8a98ea0"}, - {file = "astropy-4.3.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a01cc7b9d50f265d5d77e1f7206cda22c62720f5bed63158ee56440708848ea"}, - {file = "astropy-4.3.1-cp37-cp37m-win32.whl", hash = "sha256:98bba44f60bb3584b3ad24d1ffad1763138d4d18fc7ca31921732d2449419dd9"}, - {file = "astropy-4.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:aae1e9e6b2c7811070e4a3373c54eac603f882dc381a796b981a25c02e7fafe2"}, - {file = "astropy-4.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a5fb4ce4c964f02d7ac2b755f80f5210157a413cbfcdccbc25ad6e7586c258f"}, - {file = "astropy-4.3.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9e5613e897cb6da64330c5969981f576385491ff5ea61435218117d717a71ff2"}, - {file = "astropy-4.3.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0b4576d9bc2ab8359f2c4b87d0496c5ad768c7a14d1b16dc634ec24d22147c79"}, - {file = "astropy-4.3.1-cp38-cp38-win32.whl", hash = "sha256:26f8dce66d3de8aa761508d76b99627ed745d99ec7c5e10289566c2082fa7dc3"}, - {file = "astropy-4.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:bcedff7bad0fbc70209751e8eb98eec7c0bd3f0e202f4ee7ff65b8ddf19d5e53"}, - {file = "astropy-4.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:beddc4a365d696214e13ff9aa9362d418ecc112f1dba6338f8ac4218fe475e25"}, - {file = "astropy-4.3.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4b0ff70baee2a2c768cfc5f7966a371fa0741c93a7283d7e99d6a668f2606851"}, - {file = "astropy-4.3.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:34992c0ac1da577d7a1b13171cd8097cdb4544f09687bbd27e433806d3fd2e9f"}, - {file = "astropy-4.3.1-cp39-cp39-win32.whl", hash = "sha256:dcb6d7e6631d92d5d15b7ae4e0a994829609b09a4e3af2055995187edb8989e3"}, - {file = "astropy-4.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:434ab46e85f5406acc9f2d2084e5e36890abeaf615c8aa71178e835134b64726"}, - {file = "astropy-4.3.1.tar.gz", hash = "sha256:2d3951223b4eb7f368fcad8c8340d27374c5d8e3b635a636275acdb38f35cd51"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -babel = [ - {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, - {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, -] -backcall = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] -black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, -] -certifi = [ - {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, -] -charset-normalizer = [ - {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"}, - {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"}, -] -click = [ - {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, - {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, -] -click-default-group = [ - {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, -] -codecov = [ - {file = "codecov-2.1.12-py2.py3-none-any.whl", hash = "sha256:585dc217dc3d8185198ceb402f85d5cb5dbfa0c5f350a5abcdf9e347776a5b47"}, - {file = "codecov-2.1.12-py3.8.egg", hash = "sha256:782a8e5352f22593cbc5427a35320b99490eb24d9dcfa2155fd99d2b75cfb635"}, - {file = "codecov-2.1.12.tar.gz", hash = "sha256:a0da46bb5025426da895af90938def8ee12d37fcbcbbbc15b6dc64cf7ebc51c1"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -configparser = [ - {file = "configparser-5.2.0-py3-none-any.whl", hash = "sha256:e8b39238fb6f0153a069aa253d349467c3c4737934f253ef6abac5fe0eca1e5d"}, - {file = "configparser-5.2.0.tar.gz", hash = "sha256:1b35798fdf1713f1c3139016cfcbc461f09edbf099d1fb658d4b7479fcaa3daa"}, -] -coverage = [ - {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"}, - {file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"}, - {file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"}, - {file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"}, - {file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"}, - {file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"}, - {file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"}, - {file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"}, - {file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"}, - {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"}, - {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"}, - {file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"}, - {file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"}, - {file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"}, - {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"}, - {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"}, - {file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"}, - {file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"}, - {file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"}, - {file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"}, - {file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"}, - {file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"}, - {file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"}, - {file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"}, - {file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"}, - {file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"}, - {file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"}, - {file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"}, - {file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"}, -] -cycler = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, -] -daemonocle = [ - {file = "daemonocle-1.2.3.tar.gz", hash = "sha256:741ce6abc37c85ca396379a0d45710ac27ab5f17eeaadbc64a0f5cc4c4f666ea"}, -] -decorator = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] -doc8 = [ - {file = "doc8-0.10.1-py3-none-any.whl", hash = "sha256:551a61df5915f0107e518d582fead47a0a56df7d4a9374feab955ea14dedea84"}, - {file = "doc8-0.10.1.tar.gz", hash = "sha256:376e50f4e70a1ae935416ddfcf93db35dd5d4cc0e557f2ec72f0667d0ace4548"}, -] -docutils = [ - {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, - {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, -] -flake8 = [ - {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, - {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, -] -fonttools = [ - {file = "fonttools-4.29.0-py3-none-any.whl", hash = "sha256:ed9496e5650b977a697c50ac99c8e8331f9eae3f99e5ae649623359103306dfe"}, - {file = "fonttools-4.29.0.zip", hash = "sha256:f4834250db2c9855c3385459579dbb5cdf74349ab059ea0e619359b65ae72037"}, -] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] -imagesize = [ - {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, - {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"}, - {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -invoke = [ - {file = "invoke-1.6.0-py2-none-any.whl", hash = "sha256:e6c9917a1e3e73e7ea91fdf82d5f151ccfe85bf30cc65cdb892444c02dbb5f74"}, - {file = "invoke-1.6.0-py3-none-any.whl", hash = "sha256:769e90caeb1bd07d484821732f931f1ad8916a38e3f3e618644687fc09cb6317"}, - {file = "invoke-1.6.0.tar.gz", hash = "sha256:374d1e2ecf78981da94bfaf95366216aaec27c2d6a7b7d5818d92da55aa258d3"}, -] -ipdb = [ - {file = "ipdb-0.13.9.tar.gz", hash = "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5"}, -] -ipython = [ - {file = "ipython-7.31.1-py3-none-any.whl", hash = "sha256:55df3e0bd0f94e715abd968bedd89d4e8a7bce4bf498fb123fed4f5398fea874"}, - {file = "ipython-7.31.1.tar.gz", hash = "sha256:b5548ec5329a4bcf054a5deed5099b0f9622eb9ea51aaa7104d215fece201d8c"}, -] -isort = [ - {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, - {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, -] -jedi = [ - {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, - {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, -] -jinja2 = [ - {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, - {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, -] -jsonpickle = [ - {file = "jsonpickle-1.3-py2.py3-none-any.whl", hash = "sha256:efc6839cb341985f0c24f98650a4c1063a2877c236ffd3d7e1662f0c482bac93"}, - {file = "jsonpickle-1.3.tar.gz", hash = "sha256:71bca2b80ae28af4e3f86629ef247100af7f97032b5ca8d791c1f8725b411d95"}, -] -jsonschema = [ - {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, - {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, -] -kiwisolver = [ - {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1d819553730d3c2724582124aee8a03c846ec4362ded1034c16fb3ef309264e6"}, - {file = "kiwisolver-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d93a1095f83e908fc253f2fb569c2711414c0bfd451cab580466465b235b470"}, - {file = "kiwisolver-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4550a359c5157aaf8507e6820d98682872b9100ce7607f8aa070b4b8af6c298"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2210f28778c7d2ee13f3c2a20a3a22db889e75f4ec13a21072eabb5693801e84"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:82f49c5a79d3839bc8f38cb5f4bfc87e15f04cbafa5fbd12fb32c941cb529cfb"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9661a04ca3c950a8ac8c47f53cbc0b530bce1b52f516a1e87b7736fec24bfff0"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ddb500a2808c100e72c075cbb00bf32e62763c82b6a882d403f01a119e3f402"}, - {file = "kiwisolver-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72be6ebb4e92520b9726d7146bc9c9b277513a57a38efcf66db0620aec0097e0"}, - {file = "kiwisolver-1.3.2-cp310-cp310-win32.whl", hash = "sha256:83d2c9db5dfc537d0171e32de160461230eb14663299b7e6d18ca6dca21e4977"}, - {file = "kiwisolver-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:cba430db673c29376135e695c6e2501c44c256a81495da849e85d1793ee975ad"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4116ba9a58109ed5e4cb315bdcbff9838f3159d099ba5259c7c7fb77f8537492"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19554bd8d54cf41139f376753af1a644b63c9ca93f8f72009d50a2080f870f77"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a4cf5bbdc861987a7745aed7a536c6405256853c94abc9f3287c3fa401b174"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0007840186bacfaa0aba4466d5890334ea5938e0bb7e28078a0eb0e63b5b59d5"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec2eba188c1906b05b9b49ae55aae4efd8150c61ba450e6721f64620c50b59eb"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3dbb3cea20b4af4f49f84cffaf45dd5f88e8594d18568e0225e6ad9dec0e7967"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-win32.whl", hash = "sha256:5326ddfacbe51abf9469fe668944bc2e399181a2158cb5d45e1d40856b2a0589"}, - {file = "kiwisolver-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c6572c2dab23c86a14e82c245473d45b4c515314f1f859e92608dcafbd2f19b8"}, - {file = "kiwisolver-1.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b5074fb09429f2b7bc82b6fb4be8645dcbac14e592128beeff5461dcde0af09f"}, - {file = "kiwisolver-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:22521219ca739654a296eea6d4367703558fba16f98688bd8ce65abff36eaa84"}, - {file = "kiwisolver-1.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c358721aebd40c243894298f685a19eb0491a5c3e0b923b9f887ef1193ddf829"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ba5a1041480c6e0a8b11a9544d53562abc2d19220bfa14133e0cdd9967e97af"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44e6adf67577dbdfa2d9f06db9fbc5639afefdb5bf2b4dfec25c3a7fbc619536"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d45d1c74f88b9f41062716c727f78f2a59a5476ecbe74956fafb423c5c87a76"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70adc3658138bc77a36ce769f5f183169bc0a2906a4f61f09673f7181255ac9b"}, - {file = "kiwisolver-1.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6a5431940f28b6de123de42f0eb47b84a073ee3c3345dc109ad550a3307dd28"}, - {file = "kiwisolver-1.3.2-cp38-cp38-win32.whl", hash = "sha256:ee040a7de8d295dbd261ef2d6d3192f13e2b08ec4a954de34a6fb8ff6422e24c"}, - {file = "kiwisolver-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:8dc3d842fa41a33fe83d9f5c66c0cc1f28756530cd89944b63b072281e852031"}, - {file = "kiwisolver-1.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a498bcd005e8a3fedd0022bb30ee0ad92728154a8798b703f394484452550507"}, - {file = "kiwisolver-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80efd202108c3a4150e042b269f7c78643420cc232a0a771743bb96b742f838f"}, - {file = "kiwisolver-1.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f8eb7b6716f5b50e9c06207a14172cf2de201e41912ebe732846c02c830455b9"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f441422bb313ab25de7b3dbfd388e790eceb76ce01a18199ec4944b369017009"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:30fa008c172355c7768159983a7270cb23838c4d7db73d6c0f6b60dde0d432c6"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f8f6c8f4f1cff93ca5058d6ec5f0efda922ecb3f4c5fb76181f327decff98b8"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba677bcaff9429fd1bf01648ad0901cea56c0d068df383d5f5856d88221fe75b"}, - {file = "kiwisolver-1.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7843b1624d6ccca403a610d1277f7c28ad184c5aa88a1750c1a999754e65b439"}, - {file = "kiwisolver-1.3.2-cp39-cp39-win32.whl", hash = "sha256:e6f5eb2f53fac7d408a45fbcdeda7224b1cfff64919d0f95473420a931347ae9"}, - {file = "kiwisolver-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:eedd3b59190885d1ebdf6c5e0ca56828beb1949b4dfe6e5d0256a461429ac386"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dedc71c8eb9c5096037766390172c34fb86ef048b8e8958b4e484b9e505d66bc"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bf7eb45d14fc036514c09554bf983f2a72323254912ed0c3c8e697b62c4c158f"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b65bd35f3e06a47b5c30ea99e0c2b88f72c6476eedaf8cfbc8e66adb5479dcf"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25405f88a37c5f5bcba01c6e350086d65e7465fd1caaf986333d2a045045a223"}, - {file = "kiwisolver-1.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bcadb05c3d4794eb9eee1dddf1c24215c92fb7b55a80beae7a60530a91060560"}, - {file = "kiwisolver-1.3.2.tar.gz", hash = "sha256:fc4453705b81d03568d5b808ad8f09c77c47534f6ac2e72e733f9ca4714aa75c"}, -] -markupsafe = [ - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, -] -matplotlib = [ - {file = "matplotlib-3.5.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:456cc8334f6d1124e8ff856b42d2cc1c84335375a16448189999496549f7182b"}, - {file = "matplotlib-3.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8a77906dc2ef9b67407cec0bdbf08e3971141e535db888974a915be5e1e3efc6"}, - {file = "matplotlib-3.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e70ae6475cfd0fad3816dcbf6cac536dc6f100f7474be58d59fa306e6e768a4"}, - {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53273c5487d1c19c3bc03b9eb82adaf8456f243b97ed79d09dded747abaf1235"}, - {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3b6f3fd0d8ca37861c31e9a7cab71a0ef14c639b4c95654ea1dd153158bf0df"}, - {file = "matplotlib-3.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8c87cdaf06fd7b2477f68909838ff4176f105064a72ca9d24d3f2a29f73d393"}, - {file = "matplotlib-3.5.1-cp310-cp310-win32.whl", hash = "sha256:e2f28a07b4f82abb40267864ad7b3a4ed76f1b1663e81c7efc84a9b9248f672f"}, - {file = "matplotlib-3.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:d70a32ee1f8b55eed3fd4e892f0286df8cccc7e0475c11d33b5d0a148f5c7599"}, - {file = "matplotlib-3.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:68fa30cec89b6139dc559ed6ef226c53fd80396da1919a1b5ef672c911aaa767"}, - {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e3484d8455af3fdb0424eae1789af61f6a79da0c80079125112fd5c1b604218"}, - {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e293b16cf303fe82995e41700d172a58a15efc5331125d08246b520843ef21ee"}, - {file = "matplotlib-3.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e3520a274a0e054e919f5b3279ee5dbccf5311833819ccf3399dab7c83e90a25"}, - {file = "matplotlib-3.5.1-cp37-cp37m-win32.whl", hash = "sha256:2252bfac85cec7af4a67e494bfccf9080bcba8a0299701eab075f48847cca907"}, - {file = "matplotlib-3.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf67e05a1b7f86583f6ebd01f69b693b9c535276f4e943292e444855870a1b8"}, - {file = "matplotlib-3.5.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6c094e4bfecd2fa7f9adffd03d8abceed7157c928c2976899de282f3600f0a3d"}, - {file = "matplotlib-3.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:506b210cc6e66a0d1c2bb765d055f4f6bc2745070fb1129203b67e85bbfa5c18"}, - {file = "matplotlib-3.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b04fc29bcef04d4e2d626af28d9d892be6aba94856cb46ed52bcb219ceac8943"}, - {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577ed20ec9a18d6bdedb4616f5e9e957b4c08563a9f985563a31fd5b10564d2a"}, - {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e486f60db0cd1c8d68464d9484fd2a94011c1ac8593d765d0211f9daba2bd535"}, - {file = "matplotlib-3.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b71f3a7ca935fc759f2aed7cec06cfe10bc3100fadb5dbd9c435b04e557971e1"}, - {file = "matplotlib-3.5.1-cp38-cp38-win32.whl", hash = "sha256:d24e5bb8028541ce25e59390122f5e48c8506b7e35587e5135efcb6471b4ac6c"}, - {file = "matplotlib-3.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:778d398c4866d8e36ee3bf833779c940b5f57192fa0a549b3ad67bc4c822771b"}, - {file = "matplotlib-3.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bb1c613908f11bac270bc7494d68b1ef6e7c224b7a4204d5dacf3522a41e2bc3"}, - {file = "matplotlib-3.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:edf5e4e1d5fb22c18820e8586fb867455de3b109c309cb4fce3aaed85d9468d1"}, - {file = "matplotlib-3.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:40e0d7df05e8efe60397c69b467fc8f87a2affeb4d562fe92b72ff8937a2b511"}, - {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a350ca685d9f594123f652ba796ee37219bf72c8e0fc4b471473d87121d6d34"}, - {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3e66497cd990b1a130e21919b004da2f1dc112132c01ac78011a90a0f9229778"}, - {file = "matplotlib-3.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:87900c67c0f1728e6db17c6809ec05c025c6624dcf96a8020326ea15378fe8e7"}, - {file = "matplotlib-3.5.1-cp39-cp39-win32.whl", hash = "sha256:b8a4fb2a0c5afbe9604f8a91d7d0f27b1832c3e0b5e365f95a13015822b4cd65"}, - {file = "matplotlib-3.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:fe8d40c434a8e2c68d64c6d6a04e77f21791a93ff6afe0dce169597c110d3079"}, - {file = "matplotlib-3.5.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:34a1fc29f8f96e78ec57a5eff5e8d8b53d3298c3be6df61e7aa9efba26929522"}, - {file = "matplotlib-3.5.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b19a761b948e939a9e20173aaae76070025f0024fc8f7ba08bef22a5c8573afc"}, - {file = "matplotlib-3.5.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6803299cbf4665eca14428d9e886de62e24f4223ac31ab9c5d6d5339a39782c7"}, - {file = "matplotlib-3.5.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:14334b9902ec776461c4b8c6516e26b450f7ebe0b3ef8703bf5cdfbbaecf774a"}, - {file = "matplotlib-3.5.1.tar.gz", hash = "sha256:b2e9810e09c3a47b73ce9cab5a72243a1258f61e7900969097a817232246ce1c"}, -] -matplotlib-inline = [ - {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, - {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -multidict = [ - {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, - {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"}, - {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"}, - {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"}, - {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"}, - {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"}, - {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"}, - {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"}, - {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"}, - {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"}, - {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"}, - {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"}, - {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"}, - {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"}, - {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"}, - {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"}, - {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"}, - {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"}, - {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"}, - {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"}, - {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"}, - {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"}, - {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"}, - {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"}, - {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"}, - {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, - {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, -] -mypy-extensions = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, -] -numpy = [ - {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:301e408a052fdcda5cdcf03021ebafc3c6ea093021bf9d1aa47c54d48bdad166"}, - {file = "numpy-1.21.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7e8f6216f180f3fd4efb73de5d1eaefb5f5a1ee5b645c67333033e39440e63a"}, - {file = "numpy-1.21.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc7a7d7b0ed72589fd8b8486b9b42a564f10b8762be8bd4d9df94b807af4a089"}, - {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58ca1d7c8aef6e996112d0ce873ac9dfa1eaf4a1196b4ff7ff73880a09923ba7"}, - {file = "numpy-1.21.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4b2fb01f1b4ddbe2453468ea0719f4dbb1f5caa712c8b21bb3dd1480cd30d9"}, - {file = "numpy-1.21.5-cp310-cp310-win_amd64.whl", hash = "sha256:cc1b30205d138d1005adb52087ff45708febbef0e420386f58664f984ef56954"}, - {file = "numpy-1.21.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:08de8472d9f7571f9d51b27b75e827f5296295fa78817032e84464be8bb905bc"}, - {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4fe6a006557b87b352c04596a6e3f12a57d6e5f401d804947bd3188e6b0e0e76"}, - {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3d893b0871322eaa2f8c7072cdb552d8e2b27645b7875a70833c31e9274d4611"}, - {file = "numpy-1.21.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341dddcfe3b7b6427a28a27baa59af5ad51baa59bfec3264f1ab287aa3b30b13"}, - {file = "numpy-1.21.5-cp37-cp37m-win32.whl", hash = "sha256:ca9c23848292c6fe0a19d212790e62f398fd9609aaa838859be8459bfbe558aa"}, - {file = "numpy-1.21.5-cp37-cp37m-win_amd64.whl", hash = "sha256:025b497014bc33fc23897859350f284323f32a2fff7654697f5a5fc2a19e9939"}, - {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a5098df115340fb17fc93867317a947e1dcd978c3888c5ddb118366095851f8"}, - {file = "numpy-1.21.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:311283acf880cfcc20369201bd75da907909afc4666966c7895cbed6f9d2c640"}, - {file = "numpy-1.21.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b545ebadaa2b878c8630e5bcdb97fc4096e779f335fc0f943547c1c91540c815"}, - {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c5562bcc1a9b61960fc8950ade44d00e3de28f891af0acc96307c73613d18f6e"}, - {file = "numpy-1.21.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eed2afaa97ec33b4411995be12f8bdb95c87984eaa28d76cf628970c8a2d689a"}, - {file = "numpy-1.21.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61bada43d494515d5b122f4532af226fdb5ee08fe5b5918b111279843dc6836a"}, - {file = "numpy-1.21.5-cp38-cp38-win32.whl", hash = "sha256:7b9d6b14fc9a4864b08d1ba57d732b248f0e482c7b2ff55c313137e3ed4d8449"}, - {file = "numpy-1.21.5-cp38-cp38-win_amd64.whl", hash = "sha256:dbce7adeb66b895c6aaa1fad796aaefc299ced597f6fbd9ceddb0dd735245354"}, - {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:507c05c7a37b3683eb08a3ff993bd1ee1e6c752f77c2f275260533b265ecdb6c"}, - {file = "numpy-1.21.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:00c9fa73a6989895b8815d98300a20ac993c49ac36c8277e8ffeaa3631c0dbbb"}, - {file = "numpy-1.21.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69a5a8d71c308d7ef33ef72371c2388a90e3495dbb7993430e674006f94797d5"}, - {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2d8adfca843bc46ac199a4645233f13abf2011a0b2f4affc5c37cd552626f27b"}, - {file = "numpy-1.21.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c293d3c0321996cd8ffe84215ffe5d269fd9d1d12c6f4ffe2b597a7c30d3e593"}, - {file = "numpy-1.21.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c978544be9e04ed12016dd295a74283773149b48f507d69b36f91aa90a643e5"}, - {file = "numpy-1.21.5-cp39-cp39-win32.whl", hash = "sha256:2a9add27d7fc0fdb572abc3b2486eb3b1395da71e0254c5552b2aad2a18b5441"}, - {file = "numpy-1.21.5-cp39-cp39-win_amd64.whl", hash = "sha256:1964db2d4a00348b7a60ee9d013c8cb0c566644a589eaa80995126eac3b99ced"}, - {file = "numpy-1.21.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a7c4b701ca418cd39e28ec3b496e6388fe06de83f5f0cb74794fa31cfa384c02"}, - {file = "numpy-1.21.5.zip", hash = "sha256:6a5928bc6241264dce5ed509e66f33676fc97f464e7a919edc672fb5532221ee"}, -] -packaging = [ - {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, - {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, -] -pamqp = [ - {file = "pamqp-2.3.0-py2.py3-none-any.whl", hash = "sha256:2f81b5c186f668a67f165193925b6bfd83db4363a6222f599517f29ecee60b02"}, - {file = "pamqp-2.3.0.tar.gz", hash = "sha256:5cd0f5a85e89f20d5f8e19285a1507788031cfca4a9ea6f067e3cf18f5e294e8"}, -] -parso = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, -] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] -pbr = [ - {file = "pbr-5.8.0-py2.py3-none-any.whl", hash = "sha256:176e8560eaf61e127817ef93d8a844803abb27a4d4637f0ff3bb783129be2e0a"}, - {file = "pbr-5.8.0.tar.gz", hash = "sha256:672d8ebee84921862110f23fcec2acea191ef58543d34dfe9ef3d9f13c31cddf"}, -] -pexpect = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] -photutils = [ - {file = "photutils-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e11045e5b8c8e00c9bf34241d3ef288d6e6fe94dc67f2bcf378468384173379a"}, - {file = "photutils-1.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43c09ff55e045640b114d5a8774c56a7d191fc140eec04e097a365c8679aaf6e"}, - {file = "photutils-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:e4ebb4ebccd4e5d99617d1a2823d08d360e827abd255a836199f43fdccdc352a"}, - {file = "photutils-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2adaa51ea1c83ad12961eec29b229c54595a9d67023c07a58cb06c6b52508c84"}, - {file = "photutils-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78229fbc63a2d9436014caafdd384f3376e069ce6d8a805ad53a20c7e103b2ec"}, - {file = "photutils-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:836769b43eca921ee89b3708ed3996f92c3ca326ba9926f9c4e7574a28f44f88"}, - {file = "photutils-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:588a0098f50acbd112d0aff36b8c781b96508b76b87e4531331ce41df5f1917e"}, - {file = "photutils-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:132c3b72dfb4cc892607ae283a47e567951911bb07a31a60c7e139e873ffef45"}, - {file = "photutils-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:667cc1751993531a34c454e0f169d021f90c69a376c05894c42839bbf0fa298d"}, - {file = "photutils-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:93bffdb264c46abef4646504bdba85adadc520570b1d77dcd9781914f91451a3"}, - {file = "photutils-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10a85fba348d9d5c8af34f4f4482e00fe456ecfa3368f08c349149591ee8790d"}, - {file = "photutils-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:f78e747a2da764f3e8193224a6dae7bcb156f22efa7f6365539c7dc0ce5f0997"}, - {file = "photutils-1.3.0.tar.gz", hash = "sha256:b6fae658413ac41f01cd980bedf2fb38af343e9bef0c91762cdc28afa6920da9"}, -] -pickleshare = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] -pillow = [ - {file = "Pillow-9.0.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:113723312215b25c22df1fdf0e2da7a3b9c357a7d24a93ebbe80bfda4f37a8d4"}, - {file = "Pillow-9.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bb47a548cea95b86494a26c89d153fd31122ed65255db5dcbc421a2d28eb3379"}, - {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31b265496e603985fad54d52d11970383e317d11e18e856971bdbb86af7242a4"}, - {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d154ed971a4cc04b93a6d5b47f37948d1f621f25de3e8fa0c26b2d44f24e3e8f"}, - {file = "Pillow-9.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fe92813d208ce8aa7d76da878bdc84b90809f79ccbad2a288e9bcbeac1d9bd"}, - {file = "Pillow-9.0.0-cp310-cp310-win32.whl", hash = "sha256:d5dcea1387331c905405b09cdbfb34611050cc52c865d71f2362f354faee1e9f"}, - {file = "Pillow-9.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:52abae4c96b5da630a8b4247de5428f593465291e5b239f3f843a911a3cf0105"}, - {file = "Pillow-9.0.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:72c3110228944019e5f27232296c5923398496b28be42535e3b2dc7297b6e8b6"}, - {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b6d21771da41497b81652d44191489296555b761684f82b7b544c49989110f"}, - {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72f649d93d4cc4d8cf79c91ebc25137c358718ad75f99e99e043325ea7d56100"}, - {file = "Pillow-9.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aaf07085c756f6cb1c692ee0d5a86c531703b6e8c9cae581b31b562c16b98ce"}, - {file = "Pillow-9.0.0-cp37-cp37m-win32.whl", hash = "sha256:03b27b197deb4ee400ed57d8d4e572d2d8d80f825b6634daf6e2c18c3c6ccfa6"}, - {file = "Pillow-9.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a09a9d4ec2b7887f7a088bbaacfd5c07160e746e3d47ec5e8050ae3b2a229e9f"}, - {file = "Pillow-9.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:490e52e99224858f154975db61c060686df8a6b3f0212a678e5d2e2ce24675c9"}, - {file = "Pillow-9.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:500d397ddf4bbf2ca42e198399ac13e7841956c72645513e8ddf243b31ad2128"}, - {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ebd8b9137630a7bbbff8c4b31e774ff05bbb90f7911d93ea2c9371e41039b52"}, - {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd0e5062f11cb3e730450a7d9f323f4051b532781026395c4323b8ad055523c4"}, - {file = "Pillow-9.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f3b4522148586d35e78313db4db0df4b759ddd7649ef70002b6c3767d0fdeb7"}, - {file = "Pillow-9.0.0-cp38-cp38-win32.whl", hash = "sha256:0b281fcadbb688607ea6ece7649c5d59d4bbd574e90db6cd030e9e85bde9fecc"}, - {file = "Pillow-9.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5050d681bcf5c9f2570b93bee5d3ec8ae4cf23158812f91ed57f7126df91762"}, - {file = "Pillow-9.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c2067b3bb0781f14059b112c9da5a91c80a600a97915b4f48b37f197895dd925"}, - {file = "Pillow-9.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d16b6196fb7a54aff6b5e3ecd00f7c0bab1b56eee39214b2b223a9d938c50af"}, - {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98cb63ca63cb61f594511c06218ab4394bf80388b3d66cd61d0b1f63ee0ea69f"}, - {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc462d24500ba707e9cbdef436c16e5c8cbf29908278af053008d9f689f56dee"}, - {file = "Pillow-9.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3586e12d874ce2f1bc875a3ffba98732ebb12e18fb6d97be482bd62b56803281"}, - {file = "Pillow-9.0.0-cp39-cp39-win32.whl", hash = "sha256:68e06f8b2248f6dc8b899c3e7ecf02c9f413aab622f4d6190df53a78b93d97a5"}, - {file = "Pillow-9.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:6579f9ba84a3d4f1807c4aab4be06f373017fc65fff43498885ac50a9b47a553"}, - {file = "Pillow-9.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:47f5cf60bcb9fbc46011f75c9b45a8b5ad077ca352a78185bd3e7f1d294b98bb"}, - {file = "Pillow-9.0.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fd8053e1f8ff1844419842fd474fc359676b2e2a2b66b11cc59f4fa0a301315"}, - {file = "Pillow-9.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c5439bfb35a89cac50e81c751317faea647b9a3ec11c039900cd6915831064d"}, - {file = "Pillow-9.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95545137fc56ce8c10de646074d242001a112a92de169986abd8c88c27566a05"}, - {file = "Pillow-9.0.0.tar.gz", hash = "sha256:ee6e2963e92762923956fe5d3479b1fdc3b76c83f290aad131a2f98c3df0593e"}, -] -platformdirs = [ - {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"}, - {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -prompt-toolkit = [ - {file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"}, - {file = "prompt_toolkit-3.0.24.tar.gz", hash = "sha256:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6"}, -] -psutil = [ - {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:55ce319452e3d139e25d6c3f85a1acf12d1607ddedea5e35fb47a552c051161b"}, - {file = "psutil-5.9.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:7336292a13a80eb93c21f36bde4328aa748a04b68c13d01dfddd67fc13fd0618"}, - {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cb8d10461c1ceee0c25a64f2dd54872b70b89c26419e147a05a10b753ad36ec2"}, - {file = "psutil-5.9.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:7641300de73e4909e5d148e90cc3142fb890079e1525a840cf0dfd39195239fd"}, - {file = "psutil-5.9.0-cp27-none-win32.whl", hash = "sha256:ea42d747c5f71b5ccaa6897b216a7dadb9f52c72a0fe2b872ef7d3e1eacf3ba3"}, - {file = "psutil-5.9.0-cp27-none-win_amd64.whl", hash = "sha256:ef216cc9feb60634bda2f341a9559ac594e2eeaadd0ba187a4c2eb5b5d40b91c"}, - {file = "psutil-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90a58b9fcae2dbfe4ba852b57bd4a1dded6b990a33d6428c7614b7d48eccb492"}, - {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff0d41f8b3e9ebb6b6110057e40019a432e96aae2008951121ba4e56040b84f3"}, - {file = "psutil-5.9.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:742c34fff804f34f62659279ed5c5b723bb0195e9d7bd9907591de9f8f6558e2"}, - {file = "psutil-5.9.0-cp310-cp310-win32.whl", hash = "sha256:8293942e4ce0c5689821f65ce6522ce4786d02af57f13c0195b40e1edb1db61d"}, - {file = "psutil-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:9b51917c1af3fa35a3f2dabd7ba96a2a4f19df3dec911da73875e1edaf22a40b"}, - {file = "psutil-5.9.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e9805fed4f2a81de98ae5fe38b75a74c6e6ad2df8a5c479594c7629a1fe35f56"}, - {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c51f1af02334e4b516ec221ee26b8fdf105032418ca5a5ab9737e8c87dafe203"}, - {file = "psutil-5.9.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32acf55cb9a8cbfb29167cd005951df81b567099295291bcfd1027365b36591d"}, - {file = "psutil-5.9.0-cp36-cp36m-win32.whl", hash = "sha256:e5c783d0b1ad6ca8a5d3e7b680468c9c926b804be83a3a8e95141b05c39c9f64"}, - {file = "psutil-5.9.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d62a2796e08dd024b8179bd441cb714e0f81226c352c802fca0fd3f89eeacd94"}, - {file = "psutil-5.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d00a664e31921009a84367266b35ba0aac04a2a6cad09c550a89041034d19a0"}, - {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7779be4025c540d1d65a2de3f30caeacc49ae7a2152108adeaf42c7534a115ce"}, - {file = "psutil-5.9.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:072664401ae6e7c1bfb878c65d7282d4b4391f1bc9a56d5e03b5a490403271b5"}, - {file = "psutil-5.9.0-cp37-cp37m-win32.whl", hash = "sha256:df2c8bd48fb83a8408c8390b143c6a6fa10cb1a674ca664954de193fdcab36a9"}, - {file = "psutil-5.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1d7b433519b9a38192dfda962dd8f44446668c009833e1429a52424624f408b4"}, - {file = "psutil-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3400cae15bdb449d518545cbd5b649117de54e3596ded84aacabfbb3297ead2"}, - {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2237f35c4bbae932ee98902a08050a27821f8f6dfa880a47195e5993af4702d"}, - {file = "psutil-5.9.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1070a9b287846a21a5d572d6dddd369517510b68710fca56b0e9e02fd24bed9a"}, - {file = "psutil-5.9.0-cp38-cp38-win32.whl", hash = "sha256:76cebf84aac1d6da5b63df11fe0d377b46b7b500d892284068bacccf12f20666"}, - {file = "psutil-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:3151a58f0fbd8942ba94f7c31c7e6b310d2989f4da74fcbf28b934374e9bf841"}, - {file = "psutil-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:539e429da49c5d27d5a58e3563886057f8fc3868a5547b4f1876d9c0f007bccf"}, - {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58c7d923dc209225600aec73aa2c4ae8ea33b1ab31bc11ef8a5933b027476f07"}, - {file = "psutil-5.9.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3611e87eea393f779a35b192b46a164b1d01167c9d323dda9b1e527ea69d697d"}, - {file = "psutil-5.9.0-cp39-cp39-win32.whl", hash = "sha256:4e2fb92e3aeae3ec3b7b66c528981fd327fb93fd906a77215200404444ec1845"}, - {file = "psutil-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:7d190ee2eaef7831163f254dc58f6d2e2a22e27382b936aab51c835fc080c3d3"}, - {file = "psutil-5.9.0.tar.gz", hash = "sha256:869842dbd66bb80c3217158e629d6fceaecc3a3166d3d1faee515b05dd26ca25"}, -] -ptyprocess = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pycodestyle = [ - {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, - {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, -] -pyerfa = [ - {file = "pyerfa-2.0.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:278832de7803f2fb0ef4b14263200f98dfdb3eaa78dc63835d93796fd8fc42c6"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:629248cebc8626a52e80f69d4e2f30cc6e751f57803f5ba7ec99edd09785d181"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:3285d95dfe398a931a633da961f6f1c0b8690f2a3b1c510a4efe639f784cd9c7"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:177f50f0e8354f1a7115c2d4784668b365f1cc2f2c7d1e2f4ddf354160559b32"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:041939a7554a98b72885904ffddd8882567191bee62358727679448480174c31"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-win32.whl", hash = "sha256:f9e149bc3d423ae891f6587c1383fd471ae07744b88152e66b5e9f64a8bc9006"}, - {file = "pyerfa-2.0.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:f00dc4fc48a16eb39fd0121f2f06c03ee762b79a207cc5b0bc17d94191b51302"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1ba3668e1e181a678ce788d23a4f8666aabd8518f77fdde5157ba4744bc73d4a"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8f08f6e6d75a261bb92b707bea19eba2e46a8fcbfb499b789f3eb0d0352ea00"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da89304d6b25ac056e470f44f85770b04c9674eced07a7f93b5eb0ce1edaabd9"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:36738ba75e7a69e0ea6a7e96a5d33a852816427e7e94e7089c188ef920b02669"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5c077aed4ccd585c1fe2f96ada8edb66e9d27b4ae8ff13ea2783283b298ba0c6"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-win32.whl", hash = "sha256:0833f8ebba9f84a19a04ee5ca5aa90be75729abfbb8328e7a6d89ed1b04e058c"}, - {file = "pyerfa-2.0.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:e86c08c9c0b75e448818473c6d709e3887a439c05a1aa34042d26774251422b7"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b935fa9d10dfd7206760859236640c835aa652609c0ae8a6584593324eb6f318"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67711a748821c5d91f7a8907b9125094dfc3e5ab6a6b7ad8e207fd6afbe6b37f"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d2c10838241aaf17279468dcc731cb2c09bfb7dd7b340c0f527fd70c7c9e53d1"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:37249e1e2b378d1f56e9379e4bb8f2cf87645c160a8a3e92166a1b7bb7ad7ea6"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f76fb4b64a87da2af9d0b6b79cc25e1ecc5b4143b2b3c8c9f10b221748c5db4d"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-win32.whl", hash = "sha256:486e672c52bf58eab61140968660ac7fb3b756116b53c26c334ae95dadd943ee"}, - {file = "pyerfa-2.0.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d603f1e8123f98a0593433aa6dad4ba03f0b0ceef4cb3e96f9a69aa7ab8d5c61"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef5590b2075c50395b958f102988e519e339d96509dfdca0360f26dde94c47e7"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ca8c98842f1ae10c1fbcea0e03a41ddc13456da88da2dc9b8335a8c414d7a3"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d3e7dedce1d7e4e044f6f81d192b1f6b373c8ad6716aa8721ec6d3cf4d36f5f3"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:690116a6026ee84ce5fec794c9e21bdc8c0ac8345d6722323810181486745068"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:da5ee24eaf5e5f841f36885ea16461800b7bea11df5b657bcff85d7a7f51d2d8"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-win32.whl", hash = "sha256:7895b7e6f3bc36442d1969bf3bda5a4c3b661be7a5a468798369cbd5d81023d8"}, - {file = "pyerfa-2.0.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:63a83c35cea8c5d50d53c18089f1e625c0ffc59a7a5b8d44e0f1b3ec5288f183"}, - {file = "pyerfa-2.0.0.1.tar.gz", hash = "sha256:2fd4637ffe2c1e6ede7482c13f583ba7c73119d78bef90175448ce506a0ede30"}, -] -pyflakes = [ - {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, - {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, -] -pygments = [ - {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, - {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, -] -pyparsing = [ - {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, - {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, -] -pyrsistent = [ - {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, - {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win32.whl", hash = "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6"}, - {file = "pyrsistent-0.18.1-cp310-cp310-win_amd64.whl", hash = "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win32.whl", hash = "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8"}, - {file = "pyrsistent-0.18.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286"}, - {file = "pyrsistent-0.18.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec"}, - {file = "pyrsistent-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win32.whl", hash = "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca"}, - {file = "pyrsistent-0.18.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a"}, - {file = "pyrsistent-0.18.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045"}, - {file = "pyrsistent-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win32.whl", hash = "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc"}, - {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, - {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] -pytest-asyncio = [ - {file = "pytest-asyncio-0.17.2.tar.gz", hash = "sha256:6d895b02432c028e6957d25fc936494e78c6305736e785d9fee408b1efbc7ff4"}, - {file = "pytest_asyncio-0.17.2-py3-none-any.whl", hash = "sha256:e0fe5dbea40516b661ef1bcfe0bd9461c2847c4ef4bb40012324f2454fb7d56d"}, -] -pytest-cov = [ - {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, - {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, -] -pytest-mock = [ - {file = "pytest-mock-3.6.1.tar.gz", hash = "sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62"}, - {file = "pytest_mock-3.6.1-py3-none-any.whl", hash = "sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3"}, -] -pytest-sugar = [ - {file = "pytest-sugar-0.9.4.tar.gz", hash = "sha256:b1b2186b0a72aada6859bea2a5764145e3aaa2c1cfbb23c3a19b5f7b697563d3"}, -] -python-dateutil = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] -pytz = [ - {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, - {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, -] -pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -requests = [ - {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, - {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, -] -restructuredtext-lint = [ - {file = "restructuredtext_lint-1.3.2.tar.gz", hash = "sha256:d3b10a1fe2ecac537e51ae6d151b223b78de9fafdd50e5eb6b08c243df173c80"}, -] -rstcheck = [ - {file = "rstcheck-3.3.1.tar.gz", hash = "sha256:92c4f79256a54270e0402ba16a2f92d0b3c15c8f4410cb9c57127067c215741f"}, -] -sdss-access = [ - {file = "sdss-access-2.0.0.tar.gz", hash = "sha256:7218c454cc6511ef613044ba514a302f55c032e771e3830dc30ee264587cf1b7"}, - {file = "sdss_access-2.0.0-py2.py3-none-any.whl", hash = "sha256:ef1f90a29fb42d8eeb0f16c28ed8680d0879d2e70a88690ec2ec78b52f436004"}, -] -sdss-clu = [ - {file = "sdss-clu-1.5.6.tar.gz", hash = "sha256:0701ce732feccb691fb50cb42faa3604862d2a390748ee5f3ccf8af5e401223c"}, - {file = "sdss_clu-1.5.6-py3-none-any.whl", hash = "sha256:519c586c2802b91b5760bc4d20323b96f5d1967e44fe7a77ec963411f3b85a45"}, -] -sdss-cluplus = [ - {file = "sdss-cluplus-0.0.16.tar.gz", hash = "sha256:93400bd4a2f4ce0118c0cdfbbbedec98aa863ffac2d9b60d70976af003df05b9"}, - {file = "sdss_cluplus-0.0.16-py3-none-any.whl", hash = "sha256:ec9b90be448147359dec1ffc8b69625b12c699d362a10206a705b83a50936e08"}, -] -sdss-tree = [ - {file = "sdss-tree-3.1.1.tar.gz", hash = "sha256:a8e18c52535ae85124610768b5f5597ca660f7309f8f98c8faf15f0a7a9b4ff2"}, - {file = "sdss_tree-3.1.1-py2.py3-none-any.whl", hash = "sha256:2585d29bf7ff7abbbca3dc8380a73f18fcfac949751930f9cbd3b90a2fa4dd23"}, -] -sdsstools = [ - {file = "sdsstools-0.4.13-py3-none-any.whl", hash = "sha256:758ce248bf5794cfd62eacf053f2cda2e05d3aeb561919b9db5811d76d2aed59"}, - {file = "sdsstools-0.4.13.tar.gz", hash = "sha256:f7d2463017e71c4dcb9a6647192f8258f0242a1ae511d731b88f1fdd1ad33656"}, -] -semantic-version = [ - {file = "semantic_version-2.8.5-py2.py3-none-any.whl", hash = "sha256:45e4b32ee9d6d70ba5f440ec8cc5221074c7f4b0e8918bdab748cc37912440a9"}, - {file = "semantic_version-2.8.5.tar.gz", hash = "sha256:d2cb2de0558762934679b9a104e82eca7af448c9f4974d1f3eeccff651df8a54"}, -] -setuptools-scm = [ - {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, - {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -snowballstemmer = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] -sphinx = [ - {file = "Sphinx-3.5.4-py3-none-any.whl", hash = "sha256:2320d4e994a191f4b4be27da514e46b3d6b420f2ff895d064f52415d342461e8"}, - {file = "Sphinx-3.5.4.tar.gz", hash = "sha256:19010b7b9fa0dc7756a6e105b2aacd3a80f798af3c25c273be64d7beeb482cb1"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, - {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, -] -stevedore = [ - {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"}, - {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"}, -] -termcolor = [ - {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -tomli = [ - {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, -] -tqdm = [ - {file = "tqdm-4.62.3-py2.py3-none-any.whl", hash = "sha256:8dd278a422499cd6b727e6ae4061c40b48fce8b76d1ccbf5d34fca9b7f925b0c"}, - {file = "tqdm-4.62.3.tar.gz", hash = "sha256:d359de7217506c9851b7869f3708d8ee53ed70a1b8edbba4dbcb47442592920d"}, -] -traitlets = [ - {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, - {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, -] -typed-ast = [ - {file = "typed_ast-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:183b183b7771a508395d2cbffd6db67d6ad52958a5fdc99f450d954003900266"}, - {file = "typed_ast-1.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:676d051b1da67a852c0447621fdd11c4e104827417bf216092ec3e286f7da596"}, - {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc2542e83ac8399752bc16e0b35e038bdb659ba237f4222616b4e83fb9654985"}, - {file = "typed_ast-1.5.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74cac86cc586db8dfda0ce65d8bcd2bf17b58668dfcc3652762f3ef0e6677e76"}, - {file = "typed_ast-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:18fe320f354d6f9ad3147859b6e16649a0781425268c4dde596093177660e71a"}, - {file = "typed_ast-1.5.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:31d8c6b2df19a777bc8826770b872a45a1f30cfefcfd729491baa5237faae837"}, - {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:963a0ccc9a4188524e6e6d39b12c9ca24cc2d45a71cfdd04a26d883c922b4b78"}, - {file = "typed_ast-1.5.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0eb77764ea470f14fcbb89d51bc6bbf5e7623446ac4ed06cbd9ca9495b62e36e"}, - {file = "typed_ast-1.5.2-cp36-cp36m-win_amd64.whl", hash = "sha256:294a6903a4d087db805a7656989f613371915fc45c8cc0ddc5c5a0a8ad9bea4d"}, - {file = "typed_ast-1.5.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:26a432dc219c6b6f38be20a958cbe1abffcc5492821d7e27f08606ef99e0dffd"}, - {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7407cfcad702f0b6c0e0f3e7ab876cd1d2c13b14ce770e412c0c4b9728a0f88"}, - {file = "typed_ast-1.5.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f30ddd110634c2d7534b2d4e0e22967e88366b0d356b24de87419cc4410c41b7"}, - {file = "typed_ast-1.5.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8c08d6625bb258179b6e512f55ad20f9dfef019bbfbe3095247401e053a3ea30"}, - {file = "typed_ast-1.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:90904d889ab8e81a956f2c0935a523cc4e077c7847a836abee832f868d5c26a4"}, - {file = "typed_ast-1.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bbebc31bf11762b63bf61aaae232becb41c5bf6b3461b80a4df7e791fabb3aca"}, - {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29dd9a3a9d259c9fa19d19738d021632d673f6ed9b35a739f48e5f807f264fb"}, - {file = "typed_ast-1.5.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:58ae097a325e9bb7a684572d20eb3e1809802c5c9ec7108e85da1eb6c1a3331b"}, - {file = "typed_ast-1.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:da0a98d458010bf4fe535f2d1e367a2e2060e105978873c04c04212fb20543f7"}, - {file = "typed_ast-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:33b4a19ddc9fc551ebabca9765d54d04600c4a50eda13893dadf67ed81d9a098"}, - {file = "typed_ast-1.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1098df9a0592dd4c8c0ccfc2e98931278a6c6c53cb3a3e2cf7e9ee3b06153344"}, - {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42c47c3b43fe3a39ddf8de1d40dbbfca60ac8530a36c9b198ea5b9efac75c09e"}, - {file = "typed_ast-1.5.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f290617f74a610849bd8f5514e34ae3d09eafd521dceaa6cf68b3f4414266d4e"}, - {file = "typed_ast-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:df05aa5b241e2e8045f5f4367a9f6187b09c4cdf8578bb219861c4e27c443db5"}, - {file = "typed_ast-1.5.2.tar.gz", hash = "sha256:525a2d4088e70a9f75b08b3f87a51acc9cde640e19cc523c7e41aa355564ae27"}, -] -typing-extensions = [ - {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, - {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, -] -urllib3 = [ - {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, - {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, -] -wcwidth = [ - {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, - {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, -] -yarl = [ - {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"}, - {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"}, - {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"}, - {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"}, - {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"}, - {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"}, - {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"}, - {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"}, - {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"}, - {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"}, - {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"}, - {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"}, - {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"}, - {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"}, - {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"}, - {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"}, - {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"}, - {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"}, - {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"}, - {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"}, - {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"}, - {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"}, - {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"}, - {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"}, - {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"}, - {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"}, - {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"}, - {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"}, - {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"}, - {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"}, - {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"}, - {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"}, -] -zipp = [ - {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, - {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, -] From 0d171e8e69bb9773cf7e7d7a082cf221ab186abd Mon Sep 17 00:00:00 2001 From: mgjeon Date: Thu, 3 Mar 2022 22:22:56 +0900 Subject: [PATCH 11/17] test for autofocus, goto_eq --- .github/workflows/test.yml | 2 +- pyproject.toml | 1 + python/lvmagp/actor/commands/test.py | 8 ++- python/lvmagp/actor/commfunc.py | 91 +++++++++++++++++++--------- python/lvmagp/actor/internalfunc.py | 4 +- 5 files changed, 75 insertions(+), 31 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 03715b4..d85f35f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -41,7 +41,7 @@ jobs: run: | pip install flake8 # stop the build if there are Python syntax errors or undefined names - flake8 ./python/lvmagp --count --show-source --statistics + flake8 . --count --show-source --statistics # - name: Lint with isort # run: | diff --git a/pyproject.toml b/pyproject.toml index e722ef4..fd150a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,6 +43,7 @@ photutils = "^1.1.0" numpy = "^1.21.1" black = "^21.7-beta.0" sdss-cluplus = "^0.0.16" +sdss-lvmtipo = "^0.0.7" [tool.poetry.dev-dependencies] ipython = ">=7.31.1" diff --git a/python/lvmagp/actor/commands/test.py b/python/lvmagp/actor/commands/test.py index cffdc66..0da608e 100644 --- a/python/lvmagp/actor/commands/test.py +++ b/python/lvmagp/actor/commands/test.py @@ -1,4 +1,10 @@ from lvmagp.actor.commfunc import LVMTelescopeUnit - sci = LVMTelescopeUnit("sci") + +# sci.fine_autofocus() + +# sci.goto_aa(58, 315) +# sci.goto_eq(50, -80) + +# sci.find_guide_stars() diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index 9bcfdef..aa37f7e 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -2,6 +2,8 @@ import logging import sys import uuid +# import asyncio, threading +# from multiprocessing.pool import ThreadPool from multiprocessing import Manager, Process import astropy.units as u @@ -160,7 +162,7 @@ def derotate(self, pa=None): try: self.amqpc.log.debug(f"{datetime.datetime.now()} | Move Kmirror to {pa}") - self._km.moveAbsolute(pa, unit="DEG") + self._km.moveAbsolute(pa, "DEG") except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") @@ -391,7 +393,7 @@ def test_exposure(self, exptime): ) try: - path = self._cam.expose( + path = self._cam.expose( exptime, 1, self.camname, testshot="" )["PATH"] except Exception as e: @@ -466,6 +468,11 @@ def __init__(self, tel, amqpc): try: self._cam = Proxy(self.amqpc, self.lvmcam) self._cam.start() + try: + self._cam.disconnect() + self._cam.connect(name=self.camname) + except Exception as e: + self._cam.connect(name=self.camname) except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise @@ -490,6 +497,11 @@ def __init__(self, tel, amqpc): try: self._cam = Proxy(self.amqpc, self.lvmcam) self._cam.start() + try: + self._cam.disconnect() + self._cam.connect(name=self.camname) + except Exception as e: + self._cam.connect(name=self.camname) except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise @@ -621,12 +633,35 @@ def __get_fwhm(self): """ exptime = usrpars.af_exptime imgcmd_w, imgcmd_e = None, None + + # pool = ThreadPool(processes=2) + # a_agw = pool.apply_async(self.agw.single_exposure, (exptime,)) + # a_age = pool.apply_async(self.age.single_exposure, (exptime,)) + + # p_agw = Process( + # target=self.agw.single_exposure, + # args=(exptime,), + # ) + # p_age = Process( + # target=self.age.single_exposure, + # args=(exptime,), + # ) try: if self.name != "phot": - imgcmd_w, imgcmd_e = invoke( + # imgcmd_w, imgcmd_e = ( + # a_agw.get(), + # a_age.get() + # ) + + # p_agw.start() + # p_age.start() + # p_agw.join() + # p_age.join() + + imgcmd_w, imgcmd_e = ( self.agw.single_exposure(exptime=exptime), - self.age.single_exposure(exptime=exptime), + self.age.single_exposure(exptime=exptime) ) else: imgcmd_w = self.agw.single_exposure(exptime=exptime) @@ -635,10 +670,10 @@ def __get_fwhm(self): except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise - - guideimg_w = GuideImage(imgcmd_w["PATH"]["0"]) + + guideimg_w = GuideImage(imgcmd_w) guideimg_w.findstars() - guideimg_e = GuideImage(imgcmd_e["PATH"]["0"]) + guideimg_e = GuideImage(imgcmd_e) guideimg_e.findstars() FWHM = 0.5 * (guideimg_w.FWHM + guideimg_e.FWHM) @@ -703,10 +738,10 @@ def goto_eq( # Calculate position angle and rotate K-mirror :: should be changed to traj method. target_pa_d0 = cal_pa(target_ra_h, target_dec_d, long_d, lat_d) - invoke( - self.derotate(target_pa_d0 + target_pa_d), - self._slew_radec2000(target_ra_h=target_ra_h, target_dec_d=target_dec_d), - ) + # invoke( + self.derotate(target_pa_d0 + target_pa_d) + self._slew_radec2000(target_ra_h=target_ra_h, target_dec_d=target_dec_d), + # ) self.amqpc.log.debug( f"{datetime.datetime.now()} | (lvmagp) Initial slew completed" @@ -715,7 +750,7 @@ def goto_eq( for iter in range(usrpars.aqu_max_iter + 1): # take an image for astrometry - guideimgpath = invoke( + guideimgpath = ( self.agw.test_exposure(usrpars.aqu_exptime), self.age.test_exposure(usrpars.aqu_exptime), ) @@ -771,12 +806,12 @@ def goto_eq( comp_dec_arcsec = (target_dec - dec2000).arcsecond self.amqpc.log.info( - f"{datetime.datetime.now()} | (lvmagp) Astrometry result" - f"Img_ra2000={ra2000.to_string(unit=u.hour)}" - f"Img_dec2000={dec2000.to_string(unit=u.degree)}" - f"Img_pa={pa_d:%.3f} deg" - f"offset_ra={comp_ra_arcsec:%.3f} arcsec" - f"offset_dec={comp_dec_arcsec:%.3f} arcsec" + f"{datetime.datetime.now()} | (lvmagp) Astrometry result"+ + f"Img_ra2000={ra2000.to_string(unit=u.hour)}"+ + f"Img_dec2000={dec2000.to_string(unit=u.degree)}"+ + f"Img_pa={pa_d:.3f} deg"+ + f"offset_ra={comp_ra_arcsec:.3f} arcsec"+ + f"offset_dec={comp_dec_arcsec:.3f} arcsec" ) # Compensation // Compensation for K-mirror based on astrometry result? @@ -794,12 +829,12 @@ def goto_eq( self.amqpc.log.debug( f"{datetime.datetime.now()} | (lvmagp) Compensate offset: #{iter}" ) - invoke( - self.derotate(target_pa_d - pa_d), - self._offset_radec( - ra_arcsec=comp_ra_arcsec, dec_arcsec=comp_dec_arcsec - ), - ) + # invoke( + self.derotate(target_pa_d - pa_d), + self._offset_radec( + ra_arcsec=comp_ra_arcsec, dec_arcsec=comp_dec_arcsec + ), + # ) else: break @@ -858,10 +893,10 @@ def goto_aa( 0 # I dont know ... # cal_pa(target_ra_h, target_dec_d, long_d, lat_d) ) - invoke( - self.derotate(target_pa_d0 + target_pa_d), - self._slew_altaz(target_alt_d=target_alt_d, target_az_d=target_az_d), - ) + # invoke( + self.derotate(target_pa_d0 + target_pa_d) + self._slew_altaz(target_alt_d=target_alt_d, target_az_d=target_az_d), + # ) self.amqpc.log.debug( f"{datetime.datetime.now()} | (lvmagp) Initial slew completed" diff --git a/python/lvmagp/actor/internalfunc.py b/python/lvmagp/actor/internalfunc.py index 4a1ea2b..4300e08 100644 --- a/python/lvmagp/actor/internalfunc.py +++ b/python/lvmagp/actor/internalfunc.py @@ -28,7 +28,8 @@ def __init__(self, filepath): self.initFWHM = 3 self.FWHM = -999 self.hdu = fits.open(self.filepath) - self.data, self.hdr = self.hdu[0].data[0], self.hdu[0].header + print(self.hdu.info()) + self.data, self.hdr = self.hdu[0].data, self.hdu[0].header self.mean, self.median, self.std = sigma_clipped_stats(self.data, sigma=3.0) self.guidestarposition = np.zeros(1) self.guidestarflux = np.zeros(1) @@ -369,6 +370,7 @@ def check_target(ra_h, dec_d, long_d, lat_d): """ alt, az = star_altaz(ra_h, dec_d, long_d, lat_d) alt_low, alt_high = define_visb_limit(az) + print(f'alt_low = {alt_low} | alt = {alt} | alt_high = {alt_high}') if (alt_low < alt) and (alt < alt_high): return True else: From 02384ac08275bb187c83902e09fb46ec29099fac Mon Sep 17 00:00:00 2001 From: mgjeon Date: Sun, 6 Mar 2022 00:51:32 +0900 Subject: [PATCH 12/17] fix for autoguide in commfunc --- python/lvmagp/actor/commands/test.py | 9 +- python/lvmagp/actor/commfunc.py | 164 +++++++++++-------------- python/lvmagp/actor/internalfunc.py | 4 +- python/lvmagp/actor/user_parameters.py | 12 ++ 4 files changed, 95 insertions(+), 94 deletions(-) diff --git a/python/lvmagp/actor/commands/test.py b/python/lvmagp/actor/commands/test.py index 0da608e..5f14477 100644 --- a/python/lvmagp/actor/commands/test.py +++ b/python/lvmagp/actor/commands/test.py @@ -4,7 +4,10 @@ # sci.fine_autofocus() -# sci.goto_aa(58, 315) -# sci.goto_eq(50, -80) +sci.goto_aa(58, 315) +# sci.goto_eq(22.5, -10.5) + +# print(sci.find_guide_stars()) +# sci.guide_on() +# sci.calibration() -# sci.find_guide_stars() diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index aa37f7e..a90ff16 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -30,6 +30,8 @@ LvmagpTargetOverTheLimit, ) +import time + class LVMFocuser: """ @@ -147,7 +149,7 @@ def __init__(self, tel, amqpc): self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise - async def cal_traj(self, command): + def cal_traj(self): pass def derotate(self, pa=None): @@ -351,6 +353,9 @@ def __init__(self): self.amqpc = None self._cam = None + self.pixelscale = usrpars.pixelscale + self.rotationangle = usrpars.rotationangle + def single_exposure(self, exptime): """ Take a single exposure @@ -567,10 +572,10 @@ def __connect_actors( def __read_parameters(self): # should be predefined somewhere... - self.offset_x = -999 - self.offset_y = -999 - self.pixelscale = -999 - self.rotationangle = -999 + self.offset_x = usrpars.offset_x + self.offset_y = usrpars.offset_y + # self.pixelscale = -999 + # self.rotationangle = -999 ############# Autofocus functions ######################### def coarse_autofocus(self): @@ -751,8 +756,8 @@ def goto_eq( # take an image for astrometry guideimgpath = ( - self.agw.test_exposure(usrpars.aqu_exptime), - self.age.test_exposure(usrpars.aqu_exptime), + self.agw.single_exposure(usrpars.aqu_exptime), + self.age.single_exposure(usrpars.aqu_exptime), ) westguideimg = GuideImage(guideimgpath[0]) @@ -793,8 +798,8 @@ def goto_eq( ra2000_d = 0.5 * (eastguideimg.ra2000 + westguideimg.ra2000) dec2000_d = 0.5 * (eastguideimg.dec2000 + westguideimg.dec2000) pa_d = 0.5 * (eastguideimg.pa + westguideimg.pa) - # LVMWestCamera.rotationangle = westguideimg.pa should be defined to which place? - # LVMEastCamera.rotationangle = eastguideimg.pa should be defined to which place? + self.agw.rotationangle = westguideimg.pa + self.age.rotationangle = eastguideimg.pa ra2000 = Angle(ra2000_d, u.degree) dec2000 = Angle(dec2000_d, u.degree) @@ -1018,7 +1023,7 @@ def dither(self, delta_x=None, delta_y=None, delta_pa=None): pass - async def guide_on(self, useteldata=False, guide_parameters=None): + def guide_on(self, useteldata=False, guide_parameters=None): ''' Start guiding, or modify parameters of running guide loop. <--- modify???? guide_parameters is a dictionary containing additional parameters for @@ -1036,37 +1041,34 @@ async def guide_on(self, useteldata=False, guide_parameters=None): pass #raise lvmagpguidealreadyrunning ????? try: - autoguide_supervisor(useteldata, - timeout=3600) - await telescopes[tel].ag_task + self.autoguide_supervisor(useteldata) + self._ag_task - except asyncio.TimeoutError: - command.error("Autoguide timeout") + except Exception as e: + self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") + raise finally: - telescopes[tel].ag_task = None + self.ag_task = None - return command.finish("Guide stopped") + return self.amqpc.log.debug(f"{datetime.datetime.now()} | Guide stopped") def guide_off(self): ''' Turn off guiding, revert to tracking (track_on). ''' - if tel in telescopes: - if telescopes[tel].ag_task is not None: - telescopes[tel].ag_break = True - else: - return command.fail( - text="There is no autoguiding loop for telescope '%s'" % tel - ) + if self.ag_task is not None: + self.ag_break = True else: - return command.fail(text="Telescope '%s' does not exist" % tel) + return self.amqpc.log.error( + f"There is no autoguiding loop for telescope {self.name}" + ) - return command.finish() + return - ''' - async def calibration(): + + def calibration(self): """ Run calibration sequence to calculate the transformation from the equatorial coordinates to the xy coordinates of the image. @@ -1075,38 +1077,24 @@ async def calibration(): offset_per_step = usrpars.ag_cal_offset_per_step num_step = usrpars.ag_cal_num_step - if tel not in telescopes: - return command.fail(text="Telescope '%s' does not exist" % tel) - - decj2000_deg = await telescopes[tel].get_dec2000_deg(command) + decj2000_deg = self._get_dec2000_deg() xpositions, ypositions = [], [] - initposition, initflux = await find_guide_stars( - command, telescopes, eastcameras, westcameras, focusers, kmirrors, tel - ) + initposition, initflux = self.find_guide_stars() xpositions.append(initposition[:, 0]) ypositions.append(initposition[:, 1]) - await asyncio.sleep(3) + time.sleep(3) # dec axis calibration for step in range(1, num_step + 1): - await telescopes[tel].offset_radec(command, 0, offset_per_step) - position, flux = await find_guide_stars( - command, - telescopes, - eastcameras, - westcameras, - focusers, - kmirrors, - tel, - positionguess=initposition, - ) + self._offset_radec(0, offset_per_step) + position, flux = self.find_guide_stars(positionguess=initposition) xpositions.append(position[:, 0]) ypositions.append(position[:, 1]) - await telescopes[tel].offset_radec(command, 0, -num_step * offset_per_step) + self._offset_radec(0, -num_step * offset_per_step) xoffsets = np.array(xpositions) - xpositions[0] yoffsets = np.array(ypositions) - ypositions[0] @@ -1130,24 +1118,15 @@ async def calibration(): ypositions = [initposition[:, 1]] for step in range(1, num_step + 1): - await telescopes[tel].offset_radec( - command, offset_per_step / np.cos(np.deg2rad(decj2000_deg)), 0 - ) - position, flux = await find_guide_stars( - command, - telescopes, - eastcameras, - westcameras, - focusers, - kmirrors, - tel, - positionguess=initposition, + self._offset_radec( + offset_per_step / np.cos(np.deg2rad(decj2000_deg)), 0 ) + position, flux = self.find_guide_stars(positionguess=initposition) xpositions.append(position[:, 0]) ypositions.append(position[:, 1]) - await telescopes[tel].offset_radec( - command, -num_step * offset_per_step / np.cos(np.deg2rad(decj2000_deg)), 0 + self._offset_radec( + -num_step * offset_per_step / np.cos(np.deg2rad(decj2000_deg)), 0 ) xoffsets = np.array(xpositions) - xpositions[0] @@ -1167,18 +1146,20 @@ async def calibration(): / offset_per_step ) # exclude the first index (0,0) - telescopes[tel].scale_matrix = np.linalg.inv( + self.scale_matrix = np.linalg.inv( np.array([[xscale_ra, xscale_dec], [yscale_ra, yscale_dec]]) ) # inverse matrix.. linear system of equations.. - return command.finish( - xscale_ra="%.3f pixel/arcsec" % xscale_ra, - yscale_ra="%.3f pixel/arcsec" % yscale_ra, - xscale_dec="%.3f pixel/arcsec" % xscale_dec, - yscale_dec="%.3f pixel/arcsec" % yscale_dec, + + return self.amqpc.log.debug( + f"{datetime.datetime.now()} |"+ + f'xscale_ra={xscale_ra} pixel/arcsec'+ + f'yscale_ra={yscale_ra} pixel/arcsec'+ + f'xscale_dec={xscale_dec} pixel/arcsec'+ + f'yscale_dec={yscale_dec} pixel/arcsec' ) - ''' + - async def autoguide_supervisor(self, useteldata): + def autoguide_supervisor(self, useteldata): """ Manage the autoguide sequence. It starts real autoguide loop and keeps it until the break signal comes. @@ -1196,19 +1177,19 @@ async def autoguide_supervisor(self, useteldata): initposition, initflux = self.find_guide_stars() while 1: - await autoguiding( + self.autoguiding( initposition, initflux, useteldata, ) - if telescopes[tel].ag_break: - telescopes[tel].ag_break = False + if self.ag_break: + self.ag_break = False break return True - async def find_guide_stars(self, positionguess=None): + def find_guide_stars(self, positionguess=None): """ Expose an image, and find three guide stars from the image. Also calculate the center coordinates and fluxes of found stars. @@ -1223,17 +1204,22 @@ async def find_guide_stars(self, positionguess=None): """ # take an image for astrometry - command.info("Taking image...") + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Taking image..." + ) try: - imgcmd = [] - imgcmd.append(westcameras[tel].single_exposure(command, usrpars.ag_exptime)) - imgcmd.append(eastcameras[tel].single_exposure(command, usrpars.ag_exptime)) - - guideimgpath = await asyncio.gather(*imgcmd) + # guideimgpath = await asyncio.gather(*imgcmd) + guideimgpath = [ + self.agw.single_exposure(usrpars.ag_exptime), + self.age.single_exposure(usrpars.ag_exptime) + ] - except Exception: - return command.fail(fail="Camera error") + except Exception as e: + self.amqpc.log.error( + f"{datetime.datetime.now()} | {e}" + ) + raise westguideimg = GuideImage(guideimgpath[0]) eastguideimg = GuideImage(guideimgpath[1]) @@ -1248,7 +1234,7 @@ async def find_guide_stars(self, positionguess=None): return starposition, starflux - async def autoguiding(self, initposition, + def autoguiding(self, initposition, initflux, useteldata, ): @@ -1280,7 +1266,7 @@ async def autoguiding(self, initposition, ) > usrpars.ag_flux_tolerance ): - return command.error( + return self.amqpc.log.error( "Star flux variation %.3f is too large." % np.abs( np.average( @@ -1298,23 +1284,23 @@ async def autoguiding(self, initposition, correction_arcsec = -np.array(offset_arcsec) else: - theta = np.radians(westcameras[tel].rotationangle) + theta = np.radians(self.agw.rotationangle) c, s = np.cos(theta), np.sin(theta) R = np.array(((c, -s), (s, c))) # inverse rotation matrix correction_arcsec = -( - np.dot(R, offset) * westcameras[tel].pixelscale + np.dot(R, offset) * self.agw.pixelscale ) # in x,y(=ra,dec) [arcsec] - decj2000_deg = await telescopes[tel].get_dec2000_deg(command) + decj2000_deg = self._get_dec2000_deg() correction_arcsec[0] /= np.cos(np.deg2rad(decj2000_deg)) correction_arcsec[1] *= -1 if (np.sqrt(offset[0] ** 2 + offset[1] ** 2)) > usrpars.ag_min_offset: - command.info( + self.amqpc.log.debug( "compensate signal: ra %.2f arcsec dec %.2f arcsec x %.2f pixel y %.2f pixel" % (correction_arcsec[0], correction_arcsec[1], -offset[0], -offset[1]) ) - await telescopes[tel].offset_radec(command, *correction_arcsec) + self._offset_radec(*correction_arcsec) return correction_arcsec else: diff --git a/python/lvmagp/actor/internalfunc.py b/python/lvmagp/actor/internalfunc.py index 4300e08..4657b83 100644 --- a/python/lvmagp/actor/internalfunc.py +++ b/python/lvmagp/actor/internalfunc.py @@ -9,7 +9,7 @@ from astropy.stats import sigma_clipped_stats from astropy.time import Time from photutils.detection import DAOStarFinder -from scipy.spatial import KDTree +from scipy.spatial import cKDTree class GuideImage: @@ -71,7 +71,7 @@ def findstars(self, nstar=3): self.liststarpass = [] for i in range(len(positions[:, 0])): positions_del = np.delete(positions, i, 0) - kdtree = KDTree(positions_del) + kdtree = cKDTree(positions_del) dist, idx = kdtree.query(positions[i]) if dist > 5.0 * self.initFWHM: self.liststarpass.append(i) diff --git a/python/lvmagp/actor/user_parameters.py b/python/lvmagp/actor/user_parameters.py index b8be530..d022c66 100644 --- a/python/lvmagp/actor/user_parameters.py +++ b/python/lvmagp/actor/user_parameters.py @@ -1,3 +1,10 @@ +from sdsstools import read_yaml_file +import os + +config = '../../etc/lvmagp.yml' +config = os.path.abspath(config) +config = read_yaml_file(config) + class usrpars: # special positions screen_alt_d = -999 @@ -27,6 +34,11 @@ class usrpars: ag_cal_offset_per_step = 5.0 # Step size for calibration in arcseconds ag_cal_num_step = 3 # number of steps of calibration per axis + pixelscale = config['sci']['agw']['pixelscale'] + offset_x = config['sci']['agw']['offset_x'] + offset_y = config['sci']['agw']['offset_y'] + rotationangle = config['sci']['agw']['rotationangle'] + def temp_vs_focus(temperature): """ From d6349b1877f655cba8919a04505b7fd31a5f0da9 Mon Sep 17 00:00:00 2001 From: mgjeon Date: Sun, 6 Mar 2022 01:10:57 +0900 Subject: [PATCH 13/17] change for docs --- .github/workflows/test.yml | 10 ++--- python/lvmagp/actor/commfunc.py | 60 ++++++++++++-------------- python/lvmagp/actor/user_parameters.py | 15 ++----- 3 files changed, 37 insertions(+), 48 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d85f35f..9da779b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,11 +37,11 @@ jobs: python -m pip install --upgrade pip pip install . - - name: Lint with flake8 - run: | - pip install flake8 - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --show-source --statistics + # - name: Lint with flake8 + # run: | + # pip install flake8 + # # stop the build if there are Python syntax errors or undefined names + # flake8 . --count --show-source --statistics # - name: Lint with isort # run: | diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index a90ff16..8425e59 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -698,14 +698,13 @@ def goto_eq( Point telescope to position using RA and dec (J2000). Comments and desired actions: - - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. + Check dome safety interlock: if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) - - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), + + run status (LVMI_interface) to check instrument status: if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, - then move telescope. Regularly give updates - (i.e. "waiting for instrument to become idle before moving telescope") + then move telescope. Regularly give updates + (i.e. "waiting for instrument to become idle before moving telescope") Parameters ---------- @@ -850,16 +849,14 @@ def goto_aa( Point telescope to position using alt/az (i.e. point to screen or manually park) It does not run additional compensation based on astrometry. - ====== Comments and desired actions: - - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. + Check dome safety interlock: if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) - - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), + + run status (LVMI_interface) to check instrument status: if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, - then move telescope. Regularly give updates - (i.e. "waiting for instrument to become idle before moving telescope") + then move telescope. Regularly give updates + (i.e. "waiting for instrument to become idle before moving telescope") Parameters ---------- @@ -911,16 +908,15 @@ def goto_screen(self): """ Point telescope to screen for dome flats - ====== Comments and desired actions: - - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. + Check dome safety interlock: if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) - - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), + + run status (LVMI_interface) to check instrument status: if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, - then move telescope. Regularly give updates - (i.e. "waiting for instrument to become idle before moving telescope") + then move telescope. Regularly give updates + (i.e. "waiting for instrument to become idle before moving telescope") + """ self.goto_aa(target_alt_d=usrpars.screen_alt_d, target_az_d=usrpars.screen_az_d) @@ -929,15 +925,14 @@ def goto_park(self): """ Move telescope to safe park position. - ====== Comments and desired actions: - - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. Return error message + Check dome safety interlock: if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) - - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), + + run status (LVMI_interface) to check instrument status: if not idle (i.e. carrying out any observations or calibrations), abort observation (halt in LVMI_interface) and park telescope (in this case, we assume user wants to park due to an emergency) + """ self.goto_aa(target_alt_d=usrpars.park_alt_d, target_az_d=usrpars.park_az_d) @@ -945,16 +940,15 @@ def goto_zenith(self): """ Point telescope to zenith - ====== Comments and desired actions: - - Check dome safety interlock: - - if interlock is engaged, do not move the telescope. + Check dome safety interlock: if interlock is engaged, do not move the telescope. Return error message (assume people are inside dome) - - run status (LVMI_interface) to check instrument status - - if not idle (i.e. carrying out any observations or calibrations), + + run status (LVMI_interface) to check instrument status: if not idle (i.e. carrying out any observations or calibrations), repeat status command regularly until it returns idle, - then move telescope. Regularly give updates - (i.e. "waiting for instrument to become idle before moving telescope") + then move telescope. Regularly give updates + (i.e. "waiting for instrument to become idle before moving telescope") + """ self.goto_aa(target_alt_d=89.9999, target_az_d=180.) @@ -1029,6 +1023,8 @@ def guide_on(self, useteldata=False, guide_parameters=None): guide_parameters is a dictionary containing additional parameters for the guiders, e.g. exposure times, cadence, PID parameters, readout or window modes, ... + Parameters + ---------- useteldata If ``useteldata`` is flagged, the sequence will use the pixel scale and rotation angle from LVMTelescope. diff --git a/python/lvmagp/actor/user_parameters.py b/python/lvmagp/actor/user_parameters.py index d022c66..62974ac 100644 --- a/python/lvmagp/actor/user_parameters.py +++ b/python/lvmagp/actor/user_parameters.py @@ -1,10 +1,3 @@ -from sdsstools import read_yaml_file -import os - -config = '../../etc/lvmagp.yml' -config = os.path.abspath(config) -config = read_yaml_file(config) - class usrpars: # special positions screen_alt_d = -999 @@ -34,10 +27,10 @@ class usrpars: ag_cal_offset_per_step = 5.0 # Step size for calibration in arcseconds ag_cal_num_step = 3 # number of steps of calibration per axis - pixelscale = config['sci']['agw']['pixelscale'] - offset_x = config['sci']['agw']['offset_x'] - offset_y = config['sci']['agw']['offset_y'] - rotationangle = config['sci']['agw']['rotationangle'] + pixelscale = 2.60 + offset_x = 0.0 + offset_y = 0.0 + rotationangle = 140.0 def temp_vs_focus(temperature): From 8616df2e16e544cc0024475ae20fe8cb727fcfde Mon Sep 17 00:00:00 2001 From: Hojae Ahn Date: Fri, 11 Mar 2022 14:19:22 +0900 Subject: [PATCH 14/17] Find star algorithm correction --- python/lvmagp/actor/commands/guide.py | 1 - python/lvmagp/actor/commfunc.py | 11 +++++------ python/lvmagp/actor/internalfunc.py | 14 +++++++++++--- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/python/lvmagp/actor/commands/guide.py b/python/lvmagp/actor/commands/guide.py index 07402a4..601b442 100644 --- a/python/lvmagp/actor/commands/guide.py +++ b/python/lvmagp/actor/commands/guide.py @@ -22,7 +22,6 @@ def guide(*args): pass - @guide.command() @click.argument("TEL", type=str) @click.option("--useteldata", type=bool, is_flag=True) diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index 8425e59..2174420 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -12,6 +12,7 @@ from clu import AMQPClient from cluplus.proxy import Proxy, invoke from lvmtipo.site import Site +from lvmtipo.siderostat import Siderostat from sdsstools import get_logger @@ -77,7 +78,7 @@ def focusoffset(self, delta_f=None): def focus(self, value=None, temperature=None): """ - Move focus to a particular value or a first guess given a temperature + Move focus to a particular value or a first guess from a given temperature Parameters: value (float): if provided, focus stage moves to this step value @@ -149,17 +150,15 @@ def __init__(self, tel, amqpc): self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise - def cal_traj(self): - pass - - def derotate(self, pa=None): + def derotate(self, pa): """ Derotate the field to correct the given position angle. Parameters ---------- pa - Target position angle to be corrected + Target position angle to be corrected. + The direction where position = pa will head up after the derotation. """ try: diff --git a/python/lvmagp/actor/internalfunc.py b/python/lvmagp/actor/internalfunc.py index 4657b83..7253492 100644 --- a/python/lvmagp/actor/internalfunc.py +++ b/python/lvmagp/actor/internalfunc.py @@ -100,7 +100,12 @@ def twoDgaussianfit(self): for i in range(len(self.guidestarposition[:, 0])): xcenter = int(self.guidestarposition[i, 0]) ycenter = int(self.guidestarposition[i, 1]) - p_init = models.Gaussian2D(amplitude=60000, x_mean=xcenter, y_mean=ycenter) + + if self.guidestarflux[0] > 1: + amplitude = int(self.guidestarflux[i]) + # p_init.amplitude.min = 0.8*amplitude + # p_init.amplitude.max = 1.2*amplitude + fit_p = fitting.LevMarLSQFitter() xrange = np.arange(xcenter - windowradius, xcenter + windowradius) yrange = np.arange(ycenter - windowradius, ycenter + windowradius) @@ -109,10 +114,13 @@ def twoDgaussianfit(self): Y = np.ravel(Y) Z = np.ravel( (self.data - self.median)[ - ycenter - windowradius: ycenter + windowradius, - xcenter - windowradius: xcenter + windowradius, + ycenter - windowradius: ycenter + windowradius, + xcenter - windowradius: xcenter + windowradius, ] ) + maxindex = Z.argmax() + xmax, ymax = X[maxindex], Y[maxindex] + p_init = models.Gaussian2D(amplitude=60000, x_mean=xmax, y_mean=ymax) with warnings.catch_warnings(): # Ignore model linearity warning from the fitter From 7c81ebb9ac542e68e8e940b2282ae41bdd72808b Mon Sep 17 00:00:00 2001 From: mgjeon Date: Fri, 11 Mar 2022 17:41:35 +0900 Subject: [PATCH 15/17] fix some errors --- python/lvmagp/actor/commands/test.py | 8 +++-- python/lvmagp/actor/commfunc.py | 48 ++++++++++++++++++++++---- python/lvmagp/actor/internalfunc.py | 6 ++-- python/lvmagp/actor/user_parameters.py | 4 +-- 4 files changed, 51 insertions(+), 15 deletions(-) diff --git a/python/lvmagp/actor/commands/test.py b/python/lvmagp/actor/commands/test.py index 5f14477..04f3be9 100644 --- a/python/lvmagp/actor/commands/test.py +++ b/python/lvmagp/actor/commands/test.py @@ -4,10 +4,12 @@ # sci.fine_autofocus() -sci.goto_aa(58, 315) -# sci.goto_eq(22.5, -10.5) +# sci.goto_aa(58, 315) +sci.goto_eq(12.2, -17.5) # print(sci.find_guide_stars()) -# sci.guide_on() +# sci.track_off() +# sci.track_on() +sci.guide_on() # sci.calibration() diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index 2174420..c9e1c6f 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -249,6 +249,31 @@ def _slew_radec2000(self, target_ra_h, target_dec_d): raise self.amqpc.log.debug(f"{datetime.datetime.now()} | Slew completed.") + def _slew_radec2000_offset(self, target_ra_h, target_dec_d): + """ + Slew the telescope to given equatorial coordinates whose epoch is J2000. + + Parameters + ---------- + target_ra_h + Target right ascension in hours in J2000 epoch + target_dec_d + Target declination in degrees in J2000 epoch + """ + offset_ra = 0 #+ (1/3600)*(24/360) + offset_dec = -30/60 #+ 1/3600 + + try: + self.amqpc.log.debug( + f"{datetime.datetime.now()} | Start to slew telescope to RA {target_ra_h}, Dec {target_dec_d}." # noqa: E501 + ) + self._pwi.gotoRaDecJ2000(target_ra_h + offset_ra, target_dec_d + offset_dec) + except Exception as e: + self.amqpc.log.debug(f"{datetime.datetime.now()} | {e}") + raise + self.amqpc.log.debug(f"{datetime.datetime.now()} | Slew completed.") + + def _slew_altaz(self, target_alt_d, target_az_d): """ Slew the telescope to given horizontal coordinates. @@ -727,7 +752,7 @@ def goto_eq( # Check status to confirm the system is in idle state? # Check the target is in reachable area - long_d = self.latitude + long_d = self.longitude lat_d = self.latitude if not check_target(target_ra_h, target_dec_d, long_d, lat_d): @@ -743,7 +768,7 @@ def goto_eq( # invoke( self.derotate(target_pa_d0 + target_pa_d) - self._slew_radec2000(target_ra_h=target_ra_h, target_dec_d=target_dec_d), + self._slew_radec2000_offset(target_ra_h=target_ra_h, target_dec_d=target_dec_d), # ) self.amqpc.log.debug( @@ -804,6 +829,8 @@ def goto_eq( target_ra = Angle(target_ra_h, u.hour) target_dec = Angle(target_dec_d, u.degree) + print('target_ra', target_ra) + print('target_dec', target_dec) comp_ra_arcsec = (target_ra - ra2000).arcsecond comp_dec_arcsec = (target_dec - dec2000).arcsecond @@ -833,10 +860,8 @@ def goto_eq( f"{datetime.datetime.now()} | (lvmagp) Compensate offset: #{iter}" ) # invoke( - self.derotate(target_pa_d - pa_d), - self._offset_radec( - ra_arcsec=comp_ra_arcsec, dec_arcsec=comp_dec_arcsec - ), + self.derotate(target_pa_d - pa_d) + self._offset_radec(ra_arcsec=comp_ra_arcsec, dec_arcsec=comp_dec_arcsec) # ) else: break @@ -1251,10 +1276,19 @@ def autoguiding(self, initposition, If ``positionguess`` is not None, ``find_guide_stars`` only conduct center finding based on ``positionguess`` without finding new stars. """ + + self._pwi.offset(ra_add_arcsec=3, dec_add_arcsec=-2) + + time.sleep(1) + starposition, starflux = self.find_guide_stars( positionguess=initposition, ) + print(f'initposition = {initposition} | initflux = {initflux}') + print(f'starposition = {starposition} | starflux = {starflux}') + + if ( np.abs( np.average(starflux / initflux - 1, weights=2.5 * np.log10(initflux * 10)) @@ -1287,7 +1321,7 @@ def autoguiding(self, initposition, ) # in x,y(=ra,dec) [arcsec] decj2000_deg = self._get_dec2000_deg() - correction_arcsec[0] /= np.cos(np.deg2rad(decj2000_deg)) + correction_arcsec[0] /= -np.cos(np.deg2rad(decj2000_deg)) correction_arcsec[1] *= -1 if (np.sqrt(offset[0] ** 2 + offset[1] ** 2)) > usrpars.ag_min_offset: diff --git a/python/lvmagp/actor/internalfunc.py b/python/lvmagp/actor/internalfunc.py index 7253492..cdee8fd 100644 --- a/python/lvmagp/actor/internalfunc.py +++ b/python/lvmagp/actor/internalfunc.py @@ -169,7 +169,7 @@ def astrometry(self, ra_h=-999, dec_d=-999, returndict=None): returndict["dec"] = -999.0 returndict["pa"] = -999.0 - ospassword = "0000" + ospassword = "user" pathsplit = self.filepath.split("/") if "age" in pathsplit[-1]: resultpath = ( @@ -187,8 +187,8 @@ def astrometry(self, ra_h=-999, dec_d=-999, returndict=None): ) timeout = 5.0 - scalelow = 2.0 - scalehigh = 3.0 + scalelow = 1.0 + scalehigh = 1.5 radius = 3.0 if ra_h == -999: diff --git a/python/lvmagp/actor/user_parameters.py b/python/lvmagp/actor/user_parameters.py index 62974ac..703b67c 100644 --- a/python/lvmagp/actor/user_parameters.py +++ b/python/lvmagp/actor/user_parameters.py @@ -6,7 +6,7 @@ class usrpars: park_az_d = -999 # autofocus parameters - af_incremental = 100 # step size for each movement + af_incremental = 10000 # step size for each movement af_repeat = 5 # the number of steps af_exptime = 3 # in seconds @@ -27,7 +27,7 @@ class usrpars: ag_cal_offset_per_step = 5.0 # Step size for calibration in arcseconds ag_cal_num_step = 3 # number of steps of calibration per axis - pixelscale = 2.60 + pixelscale = 1.01 offset_x = 0.0 offset_y = 0.0 rotationangle = 140.0 From 14d432537b6668ca39a3de0c4ab4684bbd1d6855 Mon Sep 17 00:00:00 2001 From: mgjeon Date: Sat, 19 Mar 2022 09:19:39 +0900 Subject: [PATCH 16/17] autoguide thread --- python/lvmagp/actor/commands/test.py | 20 ++-- python/lvmagp/actor/commands/test2.py | 81 +++++++++++++++ python/lvmagp/actor/commands/test3.py | 65 ++++++++++++ python/lvmagp/actor/commfunc.py | 136 +++++++++++++++++--------- 4 files changed, 247 insertions(+), 55 deletions(-) create mode 100644 python/lvmagp/actor/commands/test2.py create mode 100644 python/lvmagp/actor/commands/test3.py diff --git a/python/lvmagp/actor/commands/test.py b/python/lvmagp/actor/commands/test.py index 04f3be9..5d4773e 100644 --- a/python/lvmagp/actor/commands/test.py +++ b/python/lvmagp/actor/commands/test.py @@ -2,14 +2,18 @@ sci = LVMTelescopeUnit("sci") -# sci.fine_autofocus() +sci.fine_autofocus() +sci.goto_eq(8, -38) +sci.guide_on() -# sci.goto_aa(58, 315) -sci.goto_eq(12.2, -17.5) +import time +def my_exposure(exptime): + print("my_exposure Start") + time.sleep(exptime) + print("my_exposure Done") + return True -# print(sci.find_guide_stars()) -# sci.track_off() -# sci.track_on() -sci.guide_on() -# sci.calibration() +res = my_exposure(60) +if (res): + sci.guide_off() \ No newline at end of file diff --git a/python/lvmagp/actor/commands/test2.py b/python/lvmagp/actor/commands/test2.py new file mode 100644 index 0000000..0facfc7 --- /dev/null +++ b/python/lvmagp/actor/commands/test2.py @@ -0,0 +1,81 @@ +import time +import signal + +import multiprocessing + +class LVMTelescopeUnit(): + def __init__(self, tel): + self.tel = tel + # self.ag_task = None + self.ag_break = False + self.proc = None + + def handler(self, signum, frame): + self.guide_off() + + def autoguide_supervisor(self, msg): + while True: + self.autoguiding(msg) + if self.ag_break: break + + def autoguiding(self, msg): + time.sleep(1) + print(msg) + + def guide_on(self, timeout=None): + # self.ag_task = True + print(f"{self.tel} | Autoguide Start") + + try: + signal.signal(signal.SIGINT, self.handler) + if timeout is not None: + signal.signal(signal.SIGALRM, self.handler) + signal.alarm(timeout) + self.proc = multiprocessing.Process(target=self.autoguide_supervisor, args=(f"{self.tel} | Autoguiding...", )) + self.proc.start() + except: + raise Exception + # finally: + # self.ag_task = None + + # if not self.proc.is_alive(): + # return print(f"{self.tel} | Autoguide Done") + + def guide_off(self, proc=None): + + if self.proc is not None: + try: + self.proc.terminate() + except: + raise Exception + + # if self.ag_task is not None: + # self.ag_break = True + # else: + # raise Exception + + def expose(self, exptime): + print(f"{self.tel} | Expose Start") + time.sleep(exptime) + print(f"{self.tel} | Expose Done") + self.guide_off() + + +if __name__ == '__main__' : + start = time.perf_counter() + + sci = LVMTelescopeUnit("sci") + # aaa = LVMTelescopeUnit("aaa") + + # p = multiprocessing.Process(target=sci.guide_on) + # p = multiprocessing.Process(target=sci.guide_on, args=(5,)) + # p.start() + + # aaa.expose(1) + # p.join() + sci.guide_on() + sci.expose(5) + + + finish = time.perf_counter() + print(f'Finished in {round(finish-start, 2)} second(s)') \ No newline at end of file diff --git a/python/lvmagp/actor/commands/test3.py b/python/lvmagp/actor/commands/test3.py new file mode 100644 index 0000000..a8a3359 --- /dev/null +++ b/python/lvmagp/actor/commands/test3.py @@ -0,0 +1,65 @@ +import time +import signal + +import threading + +class LVMTelescopeUnit(): + def __init__(self, tel): + self.tel = tel + self.ag_break = False + # self.proc = None + + def handler(self, signum, frame): + self.guide_off() + + def autoguide_supervisor(self, msg): + while True: + self.autoguiding(msg) + if self.ag_break: break + + def autoguiding(self, msg): + time.sleep(1) + print(msg) + + def guide_on(self, timeout=None): + print(f"{self.tel} | Autoguide Start") + + try: + signal.signal(signal.SIGINT, self.handler) + if timeout is not None: + signal.signal(signal.SIGALRM, self.handler) + signal.alarm(timeout) + t = threading.Thread(target=self.autoguide_supervisor, args=(f"{self.tel} | Autoguiding...", )) + t.setDaemon(True) + t.start() + except: + raise Exception + + + def guide_off(self, proc=None): + self.ag_break = True + # if self.proc is not None: + # try: + # self.proc.terminate() + # except: + # raise Exception + + + def expose(self, exptime): + print(f"{self.tel} | Expose Start") + time.sleep(exptime) + print(f"{self.tel} | Expose Done") + self.guide_off() + + +if __name__ == '__main__' : + start = time.perf_counter() + + sci = LVMTelescopeUnit("sci") + + sci.guide_on() + sci.expose(5) + + + finish = time.perf_counter() + print(f'Finished in {round(finish-start, 2)} second(s)') \ No newline at end of file diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index c9e1c6f..02233cb 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -2,10 +2,10 @@ import logging import sys import uuid -# import asyncio, threading -# from multiprocessing.pool import ThreadPool from multiprocessing import Manager, Process - +from threading import Thread +import time +import signal import astropy.units as u import numpy as np from astropy.coordinates import Angle @@ -31,8 +31,6 @@ LvmagpTargetOverTheLimit, ) -import time - class LVMFocuser: """ @@ -380,7 +378,9 @@ def __init__(self): self.pixelscale = usrpars.pixelscale self.rotationangle = usrpars.rotationangle - def single_exposure(self, exptime): + def single_exposure(self, exptime + # , result=None + ): """ Take a single exposure @@ -400,12 +400,18 @@ def single_exposure(self, exptime): except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise + + # if result is not None: + # try: + # result.append(path['0']) + # except Exception as e: + # result.put(path['0']) self.amqpc.log.debug( f"{datetime.datetime.now()} | Guider {self.camname} exposure done" ) - return path["0"] + return path['0'] def test_exposure(self, exptime): """ @@ -662,32 +668,8 @@ def __get_fwhm(self): """ exptime = usrpars.af_exptime imgcmd_w, imgcmd_e = None, None - - # pool = ThreadPool(processes=2) - # a_agw = pool.apply_async(self.agw.single_exposure, (exptime,)) - # a_age = pool.apply_async(self.age.single_exposure, (exptime,)) - - # p_agw = Process( - # target=self.agw.single_exposure, - # args=(exptime,), - # ) - # p_age = Process( - # target=self.age.single_exposure, - # args=(exptime,), - # ) - try: if self.name != "phot": - # imgcmd_w, imgcmd_e = ( - # a_agw.get(), - # a_age.get() - # ) - - # p_agw.start() - # p_age.start() - # p_agw.join() - # p_age.join() - imgcmd_w, imgcmd_e = ( self.agw.single_exposure(exptime=exptime), self.age.single_exposure(exptime=exptime) @@ -778,6 +760,51 @@ def goto_eq( for iter in range(usrpars.aqu_max_iter + 1): # take an image for astrometry + + # result = Queue() + # processes = [] + # processes.append( + # Process( + # target=self.agw.single_exposure, + # args=(usrpars.aqu_exptime, result), + # ) + # ) + # processes.append( + # Process( + # target=self.age.single_exposure, + # args=(usrpars.aqu_exptime, result), + # ) + # ) + # for p in processes: + # p.start() + # for p in processes: + # p.join() + # print(result) + + # result = list() + # threads = [] + # threads.append( + # Thread( + # target=self.agw.single_exposure, + # args=(usrpars.aqu_exptime, result), + # ) + # ) + # threads.append( + # Thread( + # target=self.age.single_exposure, + # args=(usrpars.aqu_exptime, result), + # ) + # ) + # for t in threads: + # t.start() + # for t in threads: + # t.join() + # guideimgpath = result + + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) Astrometry..." + ) + guideimgpath = ( self.agw.single_exposure(usrpars.aqu_exptime), self.age.single_exposure(usrpars.aqu_exptime), @@ -835,14 +862,12 @@ def goto_eq( comp_ra_arcsec = (target_ra - ra2000).arcsecond comp_dec_arcsec = (target_dec - dec2000).arcsecond - self.amqpc.log.info( - f"{datetime.datetime.now()} | (lvmagp) Astrometry result"+ - f"Img_ra2000={ra2000.to_string(unit=u.hour)}"+ - f"Img_dec2000={dec2000.to_string(unit=u.degree)}"+ - f"Img_pa={pa_d:.3f} deg"+ - f"offset_ra={comp_ra_arcsec:.3f} arcsec"+ - f"offset_dec={comp_dec_arcsec:.3f} arcsec" - ) + self.amqpc.log.info(f"{datetime.datetime.now()} | (lvmagp) Astrometry result") + self.amqpc.log.info(f"Img_ra2000={ra2000.to_string(unit=u.hour)}") + self.amqpc.log.info(f"Img_dec2000={dec2000.to_string(unit=u.degree)}") + self.amqpc.log.info(f"Img_pa={pa_d:.3f} deg") + self.amqpc.log.info(f"offset_ra={comp_ra_arcsec:.3f} arcsec") + self.amqpc.log.info(f"offset_dec={comp_dec_arcsec:.3f} arcsec") # Compensation // Compensation for K-mirror based on astrometry result? # may be by offset method.. @@ -1041,7 +1066,10 @@ def dither(self, delta_x=None, delta_y=None, delta_pa=None): pass - def guide_on(self, useteldata=False, guide_parameters=None): + def handler(self, signum, frame): + self.guide_off() + + def guide_on(self, timeout=None, useteldata=False, guide_parameters=None): ''' Start guiding, or modify parameters of running guide loop. <--- modify???? guide_parameters is a dictionary containing additional parameters for @@ -1060,18 +1088,32 @@ def guide_on(self, useteldata=False, guide_parameters=None): if self.ag_on: pass #raise lvmagpguidealreadyrunning ????? + self.ag_task = True + self.amqpc.log.debug( + f"{datetime.datetime.now()} | (lvmagp) Autoguide Start" + ) + + signal.signal(signal.SIGINT, self.handler) + if timeout is not None: + signal.signal(signal.SIGALRM, self.handler) + signal.alarm(timeout) + try: - self.autoguide_supervisor(useteldata) - self._ag_task + t = Thread(target=self.autoguide_supervisor, args=(useteldata, )) + t.setDaemon(True) + t.start() except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise - - finally: - self.ag_task = None - - return self.amqpc.log.debug(f"{datetime.datetime.now()} | Guide stopped") + # if self.ag_break: + # self.amqpc.log.debug( + # f"{datetime.datetime.now()} | (lvmagp) Autoguide Done" + # ) + # finally: + # self.ag_task = None + + # return self.amqpc.log.debug(f"{datetime.datetime.now()} | Guide stopped") def guide_off(self): From b66ea905e478715ec2ddad5955526f1b82fc75af Mon Sep 17 00:00:00 2001 From: mgjeon Date: Tue, 22 Mar 2022 16:33:28 +0900 Subject: [PATCH 17/17] change code in guide_on --- python/lvmagp/actor/commands/test.py | 19 ++++++++++++------- python/lvmagp/actor/commfunc.py | 22 +++++++--------------- python/lvmagp/actor/user_parameters.py | 2 +- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/python/lvmagp/actor/commands/test.py b/python/lvmagp/actor/commands/test.py index 5d4773e..eb318f8 100644 --- a/python/lvmagp/actor/commands/test.py +++ b/python/lvmagp/actor/commands/test.py @@ -1,11 +1,5 @@ from lvmagp.actor.commfunc import LVMTelescopeUnit -sci = LVMTelescopeUnit("sci") - -sci.fine_autofocus() -sci.goto_eq(8, -38) -sci.guide_on() - import time def my_exposure(exptime): print("my_exposure Start") @@ -13,7 +7,18 @@ def my_exposure(exptime): print("my_exposure Done") return True -res = my_exposure(60) +sci = LVMTelescopeUnit("sci") + +# autofocus +sci.fine_autofocus() + +# slew +sci.goto_eq(11, -25) + +# autoguide +sci.guide_on() +# kill autoguide loop +res = my_exposure(10) if (res): sci.guide_off() \ No newline at end of file diff --git a/python/lvmagp/actor/commfunc.py b/python/lvmagp/actor/commfunc.py index 02233cb..d928f7a 100644 --- a/python/lvmagp/actor/commfunc.py +++ b/python/lvmagp/actor/commfunc.py @@ -1065,11 +1065,7 @@ def dither(self, delta_x=None, delta_y=None, delta_pa=None): pass - - def handler(self, signum, frame): - self.guide_off() - - def guide_on(self, timeout=None, useteldata=False, guide_parameters=None): + def guide_on(self, useteldata=False, guide_parameters=None): ''' Start guiding, or modify parameters of running guide loop. <--- modify???? guide_parameters is a dictionary containing additional parameters for @@ -1093,23 +1089,14 @@ def guide_on(self, timeout=None, useteldata=False, guide_parameters=None): f"{datetime.datetime.now()} | (lvmagp) Autoguide Start" ) - signal.signal(signal.SIGINT, self.handler) - if timeout is not None: - signal.signal(signal.SIGALRM, self.handler) - signal.alarm(timeout) - try: t = Thread(target=self.autoguide_supervisor, args=(useteldata, )) - t.setDaemon(True) t.start() except Exception as e: self.amqpc.log.error(f"{datetime.datetime.now()} | {e}") raise - # if self.ag_break: - # self.amqpc.log.debug( - # f"{datetime.datetime.now()} | (lvmagp) Autoguide Done" - # ) + # finally: # self.ag_task = None @@ -1122,6 +1109,7 @@ def guide_off(self): ''' if self.ag_task is not None: self.ag_break = True + self.ag_task = None else: return self.amqpc.log.error( f"There is no autoguiding loop for telescope {self.name}" @@ -1238,12 +1226,16 @@ def autoguide_supervisor(self, useteldata): """ initposition, initflux = self.find_guide_stars() + # counter = 0 while 1: + print("autoguiding loop Start") self.autoguiding( initposition, initflux, useteldata, ) + print("autoguiding loop Done") + # counter = counter + 1 if self.ag_break: self.ag_break = False diff --git a/python/lvmagp/actor/user_parameters.py b/python/lvmagp/actor/user_parameters.py index 703b67c..25eb779 100644 --- a/python/lvmagp/actor/user_parameters.py +++ b/python/lvmagp/actor/user_parameters.py @@ -6,7 +6,7 @@ class usrpars: park_az_d = -999 # autofocus parameters - af_incremental = 10000 # step size for each movement + af_incremental = 100 # step size for each movement af_repeat = 5 # the number of steps af_exptime = 3 # in seconds