Пример #1
0
    def test_marshall_lightcurves_function(self):

        from marshallEngine.lightcurves import marshall_lightcurves, _plot_one
        lc = marshall_lightcurves(log=log,
                                  dbConn=dbConn,
                                  settings=settings,
                                  transientBucketIds=28121353)
        filepath, currentMag, gradient = _plot_one(28121353, log, settings)
Пример #2
0
    def test_marshall_lightcurves_function_exception(self):

        from marshallEngine.lightcurves import marshall_lightcurves
        try:
            this = marshall_lightcurves(log=log,
                                        settings=settings,
                                        fakeKey="break the code")
            this.get()
            assert False
        except Exception as e:
            assert True
            print(str(e))
Пример #3
0
    def update(self):
        """
        *Update the transient summaries table in the marshall database*

        **Return**

        - ``update_transient_summaries``


        **Usage**



        ```python
        from marshallEngine.housekeeping import update_transient_summaries
        updater = update_transient_summaries(
            log=log,
            settings=settings,
            dbConn=dbConn
        ).update()
        ```
        """
        self.log.debug('starting the ``get`` method')

        self._add_galactic_coords()
        self._add_distances()

        # UPDATE LIGHTCURVE PLOTS

        from marshallEngine.lightcurves import marshall_lightcurves
        lc = marshall_lightcurves(log=self.log,
                                  dbConn=self.dbConn,
                                  settings=self.settings,
                                  transientBucketIds=self.transientBucketIds)
        lc.plot()

        transientBucketIds = ('","').join(
            str(x) for x in self.transientBucketIds)

        # RESET UPDATE-NEEDED FLAG
        sqlQuery = """update transientBucketSummaries set updateNeeded = 0 where updateNeeded = 2 and transientBucketId in ("%(transientBucketIds)s")""" % locals(
        )
        writequery(log=self.log, sqlQuery=sqlQuery, dbConn=self.dbConn)

        # ADD HTM IDs
        self._update_htm_columns()

        self.log.debug('completed the ``get`` method')
        return None
Пример #4
0
    def test_marshall_lightcurves_function2(self):

        from marshallEngine.lightcurves import marshall_lightcurves
        lc = marshall_lightcurves(
            log=log,
            dbConn=dbConn,
            settings=settings,
            transientBucketIds=[
                17, 21, 26, 35, 43, 48, 57, 73, 81, 85, 26787201, 26787202,
                26787203, 28173350, 28173371, 28173379, 28173390, 28173405,
                28173408, 28173409, 28173428, 28173431, 28174061, 28174288,
                28174289, 28174292, 28174296, 28174298, 28177073, 28177093,
                28177094
            ])
        this = lc.plot()
        print(this)
Пример #5
0
def main(arguments=None):
    """
    *The main function used when `cl_utils.py` is run as a single script from the cl, or when installed as a cl command*
    """
    # setup the command-line util settings
    su = tools(arguments=arguments,
               docString=__doc__,
               logLevel="WARNING",
               options_first=False,
               projectName="marshallEngine",
               defaultSettingsFile=True)
    arguments, settings, log, dbConn = su.setup()

    # tab completion for raw_input
    readline.set_completer_delims(' \t\n;')
    readline.parse_and_bind("tab: complete")
    readline.set_completer(tab_complete)

    # UNPACK REMAINING CL ARGUMENTS USING `EXEC` TO SETUP THE VARIABLE NAMES
    # AUTOMATICALLY
    a = {}
    for arg, val in list(arguments.items()):
        if arg[0] == "-":
            varname = arg.replace("-", "") + "Flag"
        else:
            varname = arg.replace("<", "").replace(">", "")
        a[varname] = val
        if arg == "--dbConn":
            dbConn = val
            a["dbConn"] = val
        log.debug('%s = %s' % (
            varname,
            val,
        ))

    ## START LOGGING ##
    startTime = times.get_now_sql_datetime()
    log.info('--- STARTING TO RUN THE cl_utils.py AT %s' % (startTime, ))

    init = a["init"]
    clean = a["clean"]
    iimport = a["import"]
    lightcurve = a["lightcurve"]
    transientBucketId = a["transientBucketId"]
    survey = a["survey"]
    withInLastDay = a["withInLastDay"]
    settingsFlag = a["settingsFlag"]

    # set options interactively if user requests
    if "interactiveFlag" in a and a["interactiveFlag"]:

        # load previous settings
        moduleDirectory = os.path.dirname(__file__) + "/resources"
        pathToPickleFile = "%(moduleDirectory)s/previousSettings.p" % locals()
        try:
            with open(pathToPickleFile):
                pass
            previousSettingsExist = True
        except:
            previousSettingsExist = False
        previousSettings = {}
        if previousSettingsExist:
            previousSettings = pickle.load(open(pathToPickleFile, "rb"))

        # x-raw-input
        # x-boolean-raw-input
        # x-raw-input-with-default-value-from-previous-settings

        # save the most recently used requests
        pickleMeObjects = []
        pickleMe = {}
        theseLocals = locals()
        for k in pickleMeObjects:
            pickleMe[k] = theseLocals[k]
        pickle.dump(pickleMe, open(pathToPickleFile, "wb"))

    if a["init"]:
        from os.path import expanduser
        home = expanduser("~")
        filepath = home + "/.config/marshallEngine/marshallEngine.yaml"
        try:
            cmd = """open %(filepath)s""" % locals()
            p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
        except:
            pass
        try:
            cmd = """start %(filepath)s""" % locals()
            p = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True)
        except:
            pass
        return

    # CALL FUNCTIONS/OBJECTS
    # DEFAULT VALUES
    if not withInLastDay:
        withInLastDay = 30

    # CALL FUNCTIONS/OBJECTS
    if clean:
        # RESCUE ORPHANED TRANSIENTS - NO MASTER ID FLAG
        print("rescuing orphaned transients")
        from fundamentals.mysql import writequery

        procedureNames = [
            "update_transients_with_no_masteridflag",
            "insert_new_transients_into_transientbucketsummaries",
            "resurrect_objects", "update_sherlock_xmatch_counts",
            "update_inbox_auto_archiver", "update_transient_akas"
        ]

        # CALL EACH PROCEDURE
        for p in procedureNames:
            sqlQuery = "CALL `%(p)s`();" % locals()
            writequery(
                log=log,
                sqlQuery=sqlQuery,
                dbConn=dbConn,
            )

        # UPDATE THE TRANSIENT BUCKET SUMMARY TABLE IN THE MARSHALL DATABASE
        from marshallEngine.housekeeping import update_transient_summaries
        updater = update_transient_summaries(log=log,
                                             settings=settings,
                                             dbConn=dbConn).update()

    if iimport:
        if survey.lower() == "panstarrs":
            from marshallEngine.feeders.panstarrs.data import data
            from marshallEngine.feeders.panstarrs import images
        if survey.lower() == "atlas":
            from marshallEngine.feeders.atlas.data import data
            from marshallEngine.feeders.atlas import images
        if survey.lower() == "useradded":
            from marshallEngine.feeders.useradded.data import data
            from marshallEngine.feeders.useradded import images
        if survey.lower() == "tns":
            from marshallEngine.feeders.tns.data import data
            from marshallEngine.feeders.tns import images
        if survey.lower() == "ztf":
            from marshallEngine.feeders.ztf.data import data
            from marshallEngine.feeders.ztf import images
        ingester = data(log=log, settings=settings,
                        dbConn=dbConn).ingest(withinLastDays=withInLastDay)
        cacher = images(log=log, settings=settings,
                        dbConn=dbConn).cache(limit=3000)

        from marshallEngine.services import panstarrs_location_stamps
        ps_stamp = panstarrs_location_stamps(log=log,
                                             settings=settings,
                                             dbConn=dbConn).get()

    if lightcurve:
        from marshallEngine.lightcurves import marshall_lightcurves
        lc = marshall_lightcurves(log=log,
                                  dbConn=dbConn,
                                  settings=settings,
                                  transientBucketIds=transientBucketId)
        filepath = lc.plot()
        print(
            "The lightcurve plot for transient %(transientBucketId)s can be found here: %(filepath)s"
            % locals())

    if "dbConn" in locals() and dbConn:
        dbConn.commit()
        dbConn.close()
    ## FINISH LOGGING ##
    endTime = times.get_now_sql_datetime()
    runningTime = times.calculate_time_difference(startTime, endTime)
    log.info(
        '-- FINISHED ATTEMPT TO RUN THE cl_utils.py AT %s (RUNTIME: %s) --' % (
            endTime,
            runningTime,
        ))

    return
Пример #6
0
    def test_marshall_lightcurves_function2(self):

        from marshallEngine.lightcurves import marshall_lightcurves
        lc = marshall_lightcurves(
            log=log,
            dbConn=dbConn,
            settings=settings,
            transientBucketIds=[
                17, 21, 26, 35, 43, 48, 57, 73, 81, 85, 26787201, 26787202,
                26787203, 28173350, 28173371, 28173379, 28173390, 28173405,
                28173408, 28173409, 28173428, 28173431, 28174061, 28174288,
                28174289, 28174292, 28174296, 28174298, 28177073, 28177093,
                28177094, 28177101, 28177102, 28177103, 28177104, 28186206,
                28186332, 28186333, 28186400, 28186405, 28186549, 28186556,
                28209373, 28209376, 28209471, 28209598, 28209680, 28209703,
                28213418, 28215192, 28216068, 28217670, 28218141, 28219894,
                28221483, 28222019, 28223558, 28223685, 28223873, 28224076,
                28224178, 28224338, 28224451, 28224486, 28224760, 28225233,
                28225276, 28225319, 28225354, 28225850, 28227606, 28229285,
                28229287, 28229290, 28229669, 28230537, 28231134, 28231167,
                28231194, 28231267, 28231282, 28231297, 28231344, 28231367,
                28231382, 28245269, 28245274, 28245306, 28248990, 28249012,
                28249022, 28249026, 28249625, 28258042, 28258051, 28281107,
                28311604, 28311605, 28311625, 28311645, 28311792, 28328861,
                28344469, 28346029, 28375300, 28375372, 28375373, 28375374,
                28375376, 28375377, 28413765, 28413776, 28413798, 28413874,
                28413897, 28413920, 28414093, 28414094, 28432567, 28474770,
                28474773, 28487399, 28487463, 28487533, 28499612, 28506917,
                28584363, 28584571, 28591929, 28609924, 28631545, 28698746,
                28721269, 28721443, 28721538, 28722036, 28722246, 28723417,
                28731817, 28752248, 28779194, 28782374, 28782384, 28784481,
                28784646, 28784718, 28784731, 28784748, 28789282, 28790436,
                28790443, 28790453, 28790454, 28800489, 28800493, 28800626,
                28805322, 28805324, 28805329, 28805957, 28805961, 28810674,
                28810675, 28831086, 28833697, 28834738, 28834756, 28836005,
                28836006, 28836007, 28851862, 28851864, 28851865, 28851871,
                28851873, 28851875, 28851876, 28851879, 28851880, 28872936,
                28982063, 28986065, 29010258, 29056403, 29056541, 29090092,
                29090100, 29095308, 29095367, 29095466, 29095469, 29103499,
                29124487, 29156143, 29327170, 29347567, 29364278, 29364762,
                29368813, 29369127, 29371728, 29371859, 29372860, 29389311,
                29390277, 29390596, 29390650, 29460442, 29460479, 29460542,
                29531540, 29556884, 29561270, 29561719, 29615016, 29615413,
                29627011, 29627015, 29627022, 29627024, 29627026, 29627028,
                29631369, 29631376, 29631381, 29631384, 29631388, 29631392,
                29631393, 29631394, 29631396, 29631577, 29659022, 29659025,
                29659028, 29659030, 29659032, 29659035, 29659036, 29659348,
                29662189, 29672480, 29677525, 29680200, 29680480, 29680753,
                29680809, 29691730, 29692576, 29692864, 29692865, 29692870,
                29692871, 29708403, 29708404, 29708408, 29708409, 29708410,
                29708411, 29708412, 29716779, 29717707, 29719731, 29719745,
                29727670, 29727689, 29727708, 29728979, 29728999, 29729000,
                29729001, 29729002, 29729004, 29729005, 29729018, 29729020,
                29729021, 29729022, 29729023, 29729026, 29729031, 29729032,
                29729037, 29729044, 29729045, 29729046, 29729047, 29729048,
                29729049, 29729050, 29729564, 29729690, 29729693, 29733947,
                29733951, 29733955, 29733956, 29733957, 29733961, 29733962,
                29733963, 29741083, 29741084, 29741085, 29742504, 29742505,
                29742506, 29742510, 29742511, 29755395, 29755397, 29756159,
                29763030, 29763761, 29763762, 29841595, 29841647, 29841740,
                29841848, 29841905, 29842025, 29842223, 29842280, 29842489,
                29842540, 29842643, 29842730, 29842754, 29845280, 29867750,
                29878011, 29894595, 29906577, 29906623, 29906798, 29906956,
                29907062, 29907206, 29912187, 29912220, 29912301, 29912321,
                29944350, 29944351, 29944352, 29944353, 29944354, 29956342,
                29959481, 29962728, 29970635, 29985020, 30005309, 30014094,
                30020766, 30031442, 30031625, 30035343, 30035506, 30036988,
                30037332, 30049851, 30050015, 30050358, 30063593, 30071389,
                30071484, 30071560, 30087023, 30087158, 30087597, 30095171,
                30099576, 30101956, 30106433, 30108555, 30110270, 30110354,
                30110537, 30120942, 30121063, 30121176, 30123872, 30135091,
                30135202, 30135778, 30135911, 30136552, 30143009, 30143249,
                30143437, 30143544, 30143754, 30144011, 30148157, 30148276,
                30148454, 30148607, 30148742, 30148948, 30149059, 30150289,
                30150846, 30151284, 30151551, 30152572, 30152779, 30153106,
                30154635, 30155797, 30156484, 30156892, 30157138, 30157627,
                30157880, 30157882, 30157883, 30157884, 30157885, 30157886,
                30157887, 30157888, 30157889, 30157890, 30157891, 30157892,
                30157893, 30157894, 30157895, 30157896, 30157897, 30157898,
                30157899, 30157900, 30157901, 30157902, 30157904, 30157906,
                30157907, 30157908, 30157909, 30158053, 30158055, 30158841,
                30159265, 30159752, 30159995, 30161156, 30161439, 30162232,
                30162375, 30163365, 30163424, 30163513, 30163744, 30163943,
                30165048, 30165220, 30165333, 30165496, 30165916, 30166048,
                30166053, 30166070, 30174798, 30179125, 30179561, 30185222,
                30185237, 30185279, 30185341, 30185362, 30188029, 30188042,
                30188061, 30200733, 30200738, 30200740, 30200742, 30205954,
                30205960, 30205961, 30205962, 30205963, 30205964, 30205965,
                30205966, 30205967, 30205968, 30205969, 30205970, 30205971,
                30205972, 30205973, 30205974, 30205975, 30205976, 30205977,
                30205980, 30205982, 30205983, 30205984, 30205985, 30205986,
                30205987, 30205988, 30205989, 30205991, 30205992, 30205993,
                30205994, 30205995, 30205996, 30205997, 30205998, 30205999,
                30206000, 30206001, 30206002, 30206003, 30206004, 30206005,
                30206006, 30206007, 30206008, 30206009, 30206010, 30206011,
                30206012, 30206013, 30206014, 30206015, 30206016, 30206017,
                30206018, 30206019, 30206020, 30206021, 30206022, 30206023,
                30206025, 30206026, 30206027, 30206029, 30206030, 30206031,
                30206032, 30206033, 30206034, 30206035, 30206036, 30206038,
                30206039, 30206043, 30206045, 30206046, 30206051, 30206059,
                30206062, 30206064, 30206067, 30206068, 30206071, 30206073,
                30206081, 30207367, 30207385, 30207427, 30207442, 30207457,
                30207487, 30208687, 30208691, 30208726, 30208747, 30208756,
                30208793, 30208797, 30208810, 30208811, 30208815, 30208823,
                30222510, 30222516, 30222531, 30222536, 30222545, 30222547,
                30223681, 30223706, 30223710, 30223711, 30223712, 30223713,
                30223714, 30223715, 30223716, 30223717, 30223718, 30223719,
                30223720, 30223721, 30223722, 30223724, 30233047, 30233048,
                30233050, 30233051, 30233052, 30233053, 30233054, 30233055,
                30233056, 30233057, 30233058, 30233059, 30233060, 30233061,
                30233062, 30233063, 30233064, 30233065, 30233066, 30233068,
                30233071, 30233072, 30233073, 30233074, 30233075, 30233076,
                30233079, 30233118, 30233120, 30233127, 30233136, 30233138,
                30233242, 30233243, 30233257, 30235071, 30250645, 30250646,
                30250647, 30250648, 30250649, 30250650, 30250651, 30250652,
                30250653, 30250663, 30250665, 30250666, 30252900, 30252902,
                30321459, 30321475, 30328767, 30328769, 30328771, 30339962,
                30339984, 30345567, 30345569, 30384342, 30384343, 30384344,
                30384349, 30400541, 30400543, 30406663, 30406665, 30406667,
                30406669, 30406671, 30406674, 30448055, 30470918, 30480924,
                30481221, 30481324, 30481407, 30481704, 30481762, 30487778,
                30493130, 30493131, 30493132, 30493133, 30493138, 30493139,
                30493140, 30493141, 30493142, 30493143, 30493144, 30493145,
                30493146, 30532869, 30532894, 30533538, 30544542, 30554249,
                30555139, 30558863, 30558971, 30559009, 30560809, 30560846,
                30565202, 30565456, 30565620, 30565788, 30565975, 30570606,
                30571108, 30571289, 30577876, 30578287, 30579816, 30580317,
                30580406, 30582019, 30582163, 30585416, 30585722, 30585789,
                30585885, 30585906, 30586043, 30586467, 30586836, 30587183,
                30587208, 30587242, 30587467, 30587617, 30587829, 30587995,
                30588032, 30588101, 30588469, 30588556, 30588857, 30588920,
                30614780, 30614838, 30628746, 30628769, 30628782, 30628793,
                30632581, 30632583, 30632584, 30632587, 30632588, 30632589,
                30632590, 30632811, 30644428, 30644430, 30644432, 30650227,
                30650617, 30650619, 30650620, 30652371, 30652375, 30652384,
                30652387, 30652390, 30652395, 30653252, 30665290, 30666623,
                30666745, 30666791, 30666831, 30666955, 30666977, 30671324,
                30672009, 30672527, 30677934, 30677935, 30677936, 30677937,
                30677942, 30678185, 30678201, 30679028, 30679038, 30679092,
                30679101, 30679112, 30679132, 30679140, 30679978, 30679980,
                30688880, 30688881, 30688882, 30688883, 30688884, 30688885,
                30688886, 30688887, 30689072, 30689113, 30689122, 30689124,
                30709864, 30709868, 30709869, 30709870, 30709872, 30709874,
                30709877, 30709878, 30709879, 30709880, 30709881, 30709882,
                30709883, 30709885, 30709888, 30709889, 30709890, 30709891,
                30709918, 30709919, 30709922, 30709924, 30710778, 30710850,
                30710873, 30712619, 30712620, 30712621, 30712622, 30712623,
                30712917, 30712928, 30713096, 30713097, 30713100, 30713113,
                30713148, 30715023, 30715027, 30715029, 30715030, 30715031,
                30715032, 30715033, 30715034, 30715035, 30715036, 30715037,
                30715038, 30715043, 30715064, 30715073, 30715157, 30715178,
                30715187, 30715200, 30715215, 30715257, 30715325, 30715385,
                30715414, 30715432, 30715465, 30715483, 30716182, 30716250,
                30716289, 30716303, 30716313, 30717172, 30717181, 30717229,
                30717262, 30717295, 30717319, 30717332, 30717365, 30722574,
                30722607, 30722628, 30722679, 30722718, 30722728, 30722736,
                30722744, 30722765, 30722819, 30722835, 30722874, 30722931,
                30722946, 30722961, 30722992, 30723013, 30723034, 30723037,
                30723061, 30723092, 30723119, 30723136, 30723209, 30724707,
                30724728, 30724765, 30724817, 30724828, 30724854, 30724906,
                30724942, 30730670, 30730671, 30730672, 30730673, 30730674,
                30730675, 30730676, 30730677, 30730678, 30730679, 30730680,
                30730681, 30730682, 30730683, 30730684, 30730685, 30730686,
                30730687, 30730688, 30730689, 30730690, 30730691, 30730692,
                30730693, 30730694, 30730695, 30730696, 30730697, 30730698,
                30730699, 30730700, 30730701, 30730702, 30730703, 30730704,
                30730705, 30730706, 30730707, 30730708, 30730709, 30730710,
                30730711, 30730712, 30730713, 30730714, 30730715, 30730716,
                30730717, 30730718, 30730719, 30730720, 30730721, 30730722,
                30730723, 30730724, 30730725, 30730726, 30730727, 30730728,
                30730729, 30730730, 30730731, 30730732, 30730733, 30730734,
                30730735, 30730736, 30730737, 30730738, 30730739, 30730740,
                30730741, 30730742, 30730743, 30730744, 30730745, 30730746,
                30730747, 30730748, 30730749, 30730750, 30730751, 30730752,
                30730753, 30730754, 30730755, 30730756, 30730757, 30730758,
                30730759, 30730760, 30730761, 30730762, 30730763, 30730764,
                30730765, 30730766, 30730767, 30730768, 30730769, 30730770,
                30730771, 30730772, 30730773, 30730774, 30730775, 30730776,
                30730777, 30730778, 30730779, 30730780, 30730781, 30730782,
                30730783, 30730784, 30730785, 30730786, 30730787, 30730788,
                30730789, 30730790, 30730791, 30730792, 30730793, 30730794,
                30730795, 30730796, 30730797, 30730798, 30730799, 30730800,
                30730801, 30730802, 30730803, 30730804, 30730805, 30730806,
                30730807, 30730808, 30730809, 30730810, 30730811, 30730812,
                30730813, 30730814, 30730815, 30730816, 30730817, 30730818,
                30730819, 30730820, 30730821, 30730822, 30730823, 30730824,
                30730825, 30730826, 30730827, 30730828, 30730829, 30730830,
                30730831, 30730832, 30730833, 30730834, 30730835, 30730836,
                30730837, 30730838, 30730839, 30730840, 30730841, 30730842,
                30730843, 30730844, 30730845, 30730846, 30730847, 30730848,
                30730849, 30730850, 30730851, 30730852, 30730853, 30730854,
                30730855, 30730856, 30730857, 30730858, 30730859, 30730860,
                30730861, 30730862, 30730863, 30730864, 30730865, 30730866,
                30730867, 30730868, 30730869, 30730870, 30730871, 30730872,
                30730873, 30730874, 30730875, 30730876, 30730877, 30730878,
                30730879, 30730880, 30730881, 30730882, 30730883, 30730884,
                30730885, 30730886, 30730887, 30730888, 30730889, 30730890,
                30730891, 30730892, 30730893, 30730894, 30730895, 30730896,
                30730897, 30730898, 30730899, 30730900, 30730901, 30730902,
                30730903, 30730904, 30730905, 30730906, 30730907, 30730908,
                30730909, 30730910, 30730911, 30730912, 30730913, 30730914,
                30730915, 30730916, 30730917, 30730918, 30730919, 30730920,
                30730921, 30730922, 30730923, 30730924, 30730925, 30730926,
                30730927, 30730928, 30730929, 30730930, 30730931, 30730932,
                30730933, 30730934, 30730935, 30730936, 30730937, 30730938,
                30730939, 30730940, 30730941, 30730942, 30730943, 30730944,
                30730945, 30730946, 30730947, 30730948, 30730949, 30730950,
                30730951, 30730952, 30730953, 30730954, 30730955, 30730956,
                30730957, 30730958, 30730959, 30730960, 30730961, 30730962,
                30730963, 30730964, 30730965, 30730966, 30730967, 30730968,
                30730969, 30730970, 30730971, 30730972, 30730973, 30730974,
                30730975, 30730976, 30730977, 30730978, 30730979, 30730980,
                30730981, 30730982, 30730983, 30730984, 30730985, 30730986,
                30730987, 30730988, 30730989, 30730990, 30730991, 30730992,
                30730993, 30730994, 30730995, 30730996, 30730997, 30730998,
                30730999, 30731000, 30731001, 30731002, 30731003, 30731004,
                30731005, 30731006, 30731007, 30731008, 30731009, 30731010,
                30731011, 30731012, 30731013, 30731014, 30731015, 30731016,
                30731017, 30731018, 30731019, 30731020, 30731021, 30731022,
                30731023, 30731024, 30731025, 30731026, 30731027, 30731028,
                30731029, 30731030, 30731031, 30731032, 30731033, 30731034,
                30731035, 30731036, 30731037, 30731038, 30731039, 30731040,
                30731041, 30731042, 30731043, 30731044, 30731045, 30731046,
                30731047, 30731048, 30731049, 30731050, 30731051, 30731052,
                30731053, 30731054, 30731055, 30731056, 30731057, 30731058,
                30731059, 30731060, 30731061, 30731062, 30731063, 30731064,
                30731065, 30731066, 30731067, 30731068, 30731069, 30731070,
                30731071, 30731072, 30731073, 30731074, 30731075, 30731076,
                30731077, 30731078, 30731079, 30731080, 30731081, 30731082,
                30731083, 30731084, 30731085, 30731086, 30731087, 30731088,
                30731089, 30731090, 30731091, 30731092, 30731093, 30731094,
                30731095, 30731096, 30731097, 30731098, 30731099, 30731100,
                30731101, 30731102, 30731103, 30731104, 30731105, 30731106,
                30731107, 30731108, 30731109, 30731110, 30731111, 30731112,
                30731113, 30731114, 30731115, 30731116, 30731117, 30731118,
                30731119, 30731120, 30731121, 30731122, 30731123, 30731124,
                30731125, 30731126, 30731127, 30731128, 30731129, 30731130,
                30731131, 30731132, 30731133, 30731134, 30731135, 30731136,
                30731137, 30731138, 30731139, 30731140, 30731141, 30731142,
                30731143, 30731144, 30731145, 30731146, 30731147, 30731148,
                30731149, 30731150, 30731151, 30731152, 30731153, 30731154,
                30731155, 30731156, 30731157, 30731158, 30731159, 30731160,
                30731161, 30731162, 30731163, 30731164, 30731165, 30731166,
                30731167, 30731168, 30731169, 30731170, 30731171, 30731172,
                30731173, 30731174, 30731175, 30731176, 30731177, 30731178,
                30731179, 30731180, 30731181, 30731182, 30731183, 30731184,
                30731185, 30731186, 30731187, 30731188, 30731189, 30731190,
                30731191, 30731192, 30731193, 30731194, 30731195, 30731196,
                30731197, 30731198, 30731199, 30731200, 30731201, 30731202,
                30731203, 30731204, 30731205, 30731206, 30731207, 30731208,
                30731209, 30731210, 30731211, 30731212, 30731213, 30731214,
                30731215, 30731216, 30731217, 30731218, 30731219, 30731220,
                30731221, 30731222, 30731223, 30731224, 30731225, 30731226,
                30731227, 30731228, 30731229, 30731230, 30731231, 30731232,
                30731233, 30731234, 30731235, 30731236, 30731237, 30731238,
                30731239, 30731240, 30731241, 30731242, 30731243, 30731244,
                30731245, 30731246, 30731247, 30731248, 30731249, 30731250,
                30731251, 30731252, 30731253, 30731254, 30731255, 30731256,
                30731257, 30731258, 30731259, 30731260, 30731261, 30731262,
                30731263, 30731264, 30731265, 30731266, 30731267, 30731268,
                30731269, 30731270, 30731271, 30731272, 30731273, 30731274,
                30731275, 30731276, 30731277, 30731278, 30731279, 30731280,
                30731281, 30731282, 30731283, 30731284, 30731285, 30731286,
                30731287, 30731288, 30731289, 30731290, 30731291, 30731292,
                30731293, 30731294, 30731295, 30731296, 30731297, 30731298,
                30731299, 30731300, 30731301, 30731302, 30731303, 30731304,
                30731305, 30731306, 30731307, 30731308, 30731309, 30731310,
                30731311, 30731312, 30731313, 30731314, 30731315, 30731316,
                30731317, 30731318, 30731319, 30731320, 30731321, 30731322,
                30731323, 30731324, 30731325, 30731326, 30731327, 30731328,
                30731329, 30731330, 30731331, 30731332, 30731333, 30731334,
                30731335, 30731336, 30731337, 30731338, 30731339, 30731340,
                30731341, 30731342, 30731343, 30731344, 30731345, 30731346,
                30731347, 30731348, 30731349, 30731350, 30731351, 30731352,
                30731353, 30731354, 30731355, 30731356, 30731357, 30731358,
                30731359, 30731360, 30731361, 30731362, 30731363, 30731364,
                30731365, 30731366, 30731367, 30731368, 30731369, 30731370,
                30731371, 30731372, 30731373, 30731374, 30731375, 30731376,
                30731377, 30731378, 30731379, 30731380, 30731381, 30731382,
                30731383, 30731384, 30731385, 30731386, 30731387, 30731388,
                30731389, 30731390, 30731391, 30731392, 30731393, 30731394,
                30731395, 30731396, 30731397, 30731398, 30731399, 30731400,
                30731401, 30731402, 30731403, 30731404, 30731405, 30731406,
                30731407, 30731408, 30731409, 30731410, 30731411, 30731412,
                30731413, 30731414, 30731415, 30731416, 30731417, 30731418,
                30731419, 30731420, 30731421, 30731422, 30731423, 30731424,
                30731425, 30731426, 30731427, 30731428, 30731429, 30731430,
                30731431, 30731432, 30731433, 30731434, 30731435, 30731436,
                30731437, 30731438, 30731439, 30731440, 30731441, 30731442,
                30731443, 30731444, 30731445, 30731446, 30731447, 30731448,
                30731449, 30731450, 30731451, 30731452, 30731453, 30731454,
                30731455, 30731456, 30731457, 30731458, 30731459, 30731460,
                30731461, 30731462, 30731463, 30731464, 30731465, 30731466,
                30731467, 30731468, 30731469, 30731470, 30731471, 30731472,
                30731473, 30731474, 30731475, 30731476, 30731477, 30731478,
                30731479, 30731480, 30731481, 30731482, 30731483, 30731484,
                30731485, 30731486, 30731487, 30731488, 30731489, 30731490,
                30731491, 30731492, 30731493, 30731494, 30731495, 30731496,
                30731497, 30731498, 30731499, 30731500, 30731501, 30731502,
                30731503, 30731504, 30731505, 30731506, 30731507, 30731508,
                30731509, 30731510, 30731511, 30731512, 30731513, 30731514,
                30731515, 30731516, 30731517, 30731518, 30731519, 30731520,
                30731521, 30731522, 30731523, 30731524, 30731525, 30731526,
                30731527, 30731528, 30731529, 30731530, 30731531, 30731532,
                30731533, 30731534, 30731535, 30731536, 30731537, 30731538,
                30731539, 30731540, 30731541, 30731542, 30731543, 30731544,
                30731545, 30731546, 30731547, 30731548, 30731549, 30731550,
                30731551, 30731552, 30731553, 30731554, 30731555, 30731556,
                30731557, 30731558, 30731559, 30731560, 30731561, 30731562,
                30731563, 30731564, 30731565, 30731566, 30731567, 30731568,
                30731569, 30731570, 30731571, 30731572, 30731573, 30731663,
                30731664, 30731665
            ])
        this = lc.plot()
        print(this)