From MPC Orbit to N-Body Simulation with Rebound¶
This tutorial demonstrates how to take an orbit from the MPC's Orbits API and use it in an N-body simulation.¶
We will:
- Fetch the orbit of the TNO Sedna from the MPC Orbits API
- Parse it with the
mpc_orbPython package to access Cartesian elements and the covariance matrix - Sample "orbital clones" from the covariance matrix to represent orbital uncertainty
- Set up a Rebound N-body simulation with the Sun, planets, and our asteroid clones
- Integrate forward for 10 million years and plot the orbital evolution
This workflow connects MPC data products directly to the widely-used Rebound dynamical simulation package.
Further information:
Environment Setup¶
This notebook requires rebound, mpc-orb, astropy, matplotlib, numpy, tqdm, and requests. We recommend creating a dedicated conda environment and registering it as a Jupyter kernel so that all dependencies are isolated and reproducible.
Run the following commands once in a terminal before opening this notebook:
# Create and populate the environment
conda create -n orbit-tutorial python=3.11 -y
conda activate orbit-tutorial
pip install rebound mpc-orb astropy matplotlib numpy tqdm requests ipykernel
# Register the environment as a Jupyter kernel
python -m ipykernel install --user --name orbit-tutorial --display-name "Python (orbit-tutorial)"
If you do not already have a way of running Jupyter notebooks, also install Jupyter itself (pip install jupyter), then launch it from the directory containing this notebook with:
jupyter notebook
and open this file in the browser tab that appears. However you run the notebook, select Kernel > Change Kernel > Python (orbit-tutorial) before running the cells below.
Install and Import Packages¶
We need rebound for the N-body simulation, mpc-orb for parsing MPC orbit data, and astropy for time conversions.
import requests
import numpy as np
import matplotlib.pyplot as plt
from pprint import pprint
import rebound
from mpc_orb.parse import MPCORB
from astropy.time import Time
from tqdm import tqdm
Step 1: Fetch and Parse the Orbit¶
We query the MPC Orbits API for Sedna, a well-known TNO, and parse the result with mpc_orb.
The MPCORB class provides structured access to orbital elements, uncertainties, covariance matrices, and metadata.
# Fetch the orbit of Sedna from the MPC
object_name = "Sedna"
response = requests.get(
"https://data.minorplanetcenter.net/api/get-orb",
json={"desig": object_name}
)
response.raise_for_status()
mpc_orb_dict = response.json()[0]['mpc_orb'][0]
# Parse with mpc_orb
M = MPCORB(mpc_orb_dict)
# Display basic information
print(f"Object Designation Data:")
pprint(M.designation_data, indent=2, depth=2 )
print(f"Epoch (MJD): {M.epoch_data['epoch']}")
print(f"Time system: {M.epoch_data['timesystem']}")
print()
# Display Cartesian elements with uncertainties
print("Cartesian orbital elements (AU, AU/day):")
print(f"{'Name':<6} {'Value':>20} {'Uncertainty':>16}")
print("-" * 44)
for name, val, unc in zip(
M.CAR.coefficient_names,
M.CAR.coefficient_values,
M.CAR.coefficient_uncertainties
):
print(f"{name:<6} {val:>20.15f} {unc:>16.6e}")
Object Designation Data:
{ 'citation': '(90377) Sedna = 2003 VB12<br><br>Sedna is the Inuit goddess of '
'the sea and the mother of all sea creatures. She rewards the '
'people of the land with food from the sea. Without her '
'blessing, hunts fail and the people starve. She is thus one of '
'the most important figures in Inuit legend. ',
'designation_count': 1,
'iau_name': '',
'name': 'Sedna',
'orbfit_name': '90377',
'packed_primary_provisional_designation': 'K03V12B',
'packed_secondary_provisional_designations': [],
'permid': '90377',
'unpacked_primary_provisional_designation': '2003 VB12',
'unpacked_secondary_provisional_designations': []}
Epoch (MJD): 61000.0
Time system: TDT
Cartesian orbital elements (AU, AU/day):
Name Value Uncertainty
--------------------------------------------
x 39.500142193743898 1.299130e-04
y 71.045115157901293 2.314580e-04
z -17.059785559279401 5.654790e-05
vx -0.002486511225648 1.478880e-08
vy 0.000602980686416 2.055890e-08
vz 0.000201471931619 5.218910e-09
Step 2: Examine the Covariance Matrix¶
The mpc_orb package reconstructs the full symmetric covariance matrix from the stored lower-triangular elements. This matrix encodes the correlations between all orbital parameters.
We verify the matrix is positive-definite by checking that all eigenvalues are positive.
# Full covariance matrix (already assembled by mpc_orb)
cov_full = M.CAR.covariance_array
print(f"Covariance matrix shape: {cov_full.shape}")
print()
print("Covariance matrix:")
np.set_printoptions(precision=4, linewidth=120)
print(cov_full)
print()
# Compute eigenvalues to verify positive-definiteness
eigenvalues = np.linalg.eigvalsh(cov_full)
print("Eigenvalues of covariance matrix:")
for i, ev in enumerate(eigenvalues):
print(f" lambda_{i} = {ev:.6e}")
# Sanity check: all eigenvalues must be positive for a valid covariance matrix
assert np.all(eigenvalues > 0), "Covariance matrix is not positive-definite!"
print("\nAll eigenvalues positive: covariance matrix is valid.")
Covariance matrix shape: (6, 6) Covariance matrix: [[ 1.6877e-08 3.0033e-08 -7.3239e-09 -2.2439e-13 1.3942e-12 -2.3228e-13] [ 3.0033e-08 5.3573e-08 -1.3056e-08 -5.2722e-13 2.3417e-12 -3.7373e-13] [-7.3239e-09 -1.3056e-08 3.1977e-09 1.2148e-13 -5.7831e-13 9.7111e-14] [-2.2439e-13 -5.2722e-13 1.2148e-13 2.1871e-16 2.3756e-16 -6.6897e-17] [ 1.3942e-12 2.3417e-12 -5.7831e-13 2.3756e-16 4.2267e-16 -1.0257e-16] [-2.3228e-13 -3.7373e-13 9.7111e-14 -6.6897e-17 -1.0257e-16 2.7237e-17]] Eigenvalues of covariance matrix: lambda_0 = 1.520798e-19 lambda_1 = 3.851948e-19 lambda_2 = 2.576840e-16 lambda_3 = 1.450587e-11 lambda_4 = 3.107931e-11 lambda_5 = 7.360231e-08 All eigenvalues positive: covariance matrix is valid.
Step 3: Sample Orbital Clones¶
To represent the orbital uncertainty, we draw samples from a multivariate normal distribution where:
- The mean is the nominal (best-fit) orbit
- The covariance defines the uncertainty ellipsoid in 6D phase space
Though MPC orbit fits currently do not explicitly reference a prior (and therefore implicitly use flat priors), the mean and covariance matrix can be interpreted as the Gaussian approximation of the posterior distribution for the orbital elements. Thus samples drawn from this distribution ("clones") each represent a statistically plausible orbit, and by propagating a distribution of samples, we can quantify how the orbital uncertainty grows over time. Since more clones will be drawn from near the mean than towards the edges, the on-sky density of clones at any time is proportional to the likelihood of finding Sedna in that region
# Use only the 6 position/velocity components (x, y, z, vx, vy, vz)
mean = np.array(M.CAR.coefficient_values[:6])
cov = cov_full[:6, :6]
# Sample 100 orbital clones
n_clones = 100
np.random.seed(42) # For reproducibility
clones = np.random.multivariate_normal(mean, cov, n_clones)
# Display the nominal orbit and clones
names = M.CAR.coefficient_names[:6]
print(f"{'':>10}", end="")
for name in names:
print(f"{name:>20}", end="")
print()
print("-" * 130)
print(f"{'Nominal':>10}", end="")
for v in mean:
print(f"{v:>20.15f}", end="")
print()
for i, clone in enumerate(clones):
print(f"{'Clone ' + str(i):>10}", end="")
for v in clone:
print(f"{v:>20.15f}", end="")
print()
x y z vx vy vz ---------------------------------------------------------------------------------------------------------------------------------- Nominal 39.500142193743898 71.045115157901293 -17.059785559279401 -0.002486511225648 0.000602980686416 0.000201471931619 Clone 0 39.500076769035140 71.045000138802038 -17.059759938595008 -0.002486526358801 0.000602954562646 0.000201477754574 Clone 1 39.499941100947495 71.044747880717594 -17.059694738441983 -0.002486504502597 0.000602967753253 0.000201474198625 Clone 2 39.500102205320886 71.045065556735821 -17.059765392928256 -0.002486526405209 0.000602962011259 0.000201479417572 Clone 3 39.500252605773859 71.045328186097038 -17.059842189616898 -0.002486527559717 0.000602974644398 0.000201473106737 Clone 4 39.500213883246481 71.045241624024101 -17.059811993477066 -0.002486514621263 0.000602983641103 0.000201473168780 Clone 5 39.500229310577922 71.045249359278444 -17.059819545414090 -0.002486482079857 0.000603023543313 0.000201460244036 Clone 6 39.500106112102429 71.045073076167370 -17.059768736312577 -0.002486534032854 0.000602951645973 0.000201480691767 Clone 7 39.500156359111742 71.045143745639550 -17.059786563062278 -0.002486507439725 0.000602987641311 0.000201472195444 Clone 8 39.500088886615302 71.045040234959728 -17.059767296904585 -0.002486526521353 0.000602959659278 0.000201477677806 Clone 9 39.500013220140183 71.044874561177039 -17.059724301556400 -0.002486495156318 0.000602985826539 0.000201470059615 Clone 10 39.500203958608459 71.045227313362034 -17.059808466826045 -0.002486502226512 0.000602998273170 0.000201468649095 Clone 11 39.500156266290439 71.045128834447695 -17.059791015731719 -0.002486493648689 0.000603001676258 0.000201465880915 Clone 12 39.500155533070668 71.045120937752827 -17.059777893455969 -0.002486501076762 0.000602991604335 0.000201471253653 Clone 13 39.500120718461339 71.045099506471956 -17.059779472045715 -0.002486536459974 0.000602949962317 0.000201479614708 Clone 14 39.500244335972454 71.045303031126792 -17.059834565627060 -0.002486521811262 0.000602978192695 0.000201473009428 Clone 15 39.500134587617147 71.045090514208766 -17.059777510849575 -0.002486497445181 0.000602996688940 0.000201468165390 Clone 16 39.500105016889037 71.045045905894128 -17.059768881714266 -0.002486505806837 0.000602984328382 0.000201471416346 Clone 17 39.500182855584050 71.045196779806304 -17.059804259288192 -0.002486524350612 0.000602968547315 0.000201474688005 Clone 18 39.500109193846775 71.045057049296318 -17.059763875680265 -0.002486510058788 0.000602977762324 0.000201474638964 Clone 19 39.500168645351664 71.045158876627738 -17.059796297800986 -0.002486496812766 0.000603000719699 0.000201466248009 Clone 20 39.500034500926979 71.044933621445111 -17.059746109226584 -0.002486506002394 0.000602977552971 0.000201470679987 Clone 21 39.500267994411850 71.045345890620311 -17.059841795568261 -0.002486515156957 0.000602990371500 0.000201471408305 Clone 22 39.500282785834401 71.045360343645839 -17.059842096510810 -0.002486522878482 0.000602978757973 0.000201474763812 Clone 23 39.500030508835280 71.044930090369888 -17.059740447323634 -0.002486535822476 0.000602940674829 0.000201482639889 Clone 24 39.500112766792149 71.045053706652268 -17.059766323350768 -0.002486489000122 0.000603004783700 0.000201466125353 Clone 25 39.500111639764114 71.045056694898619 -17.059768907862615 -0.002486509026994 0.000602979907028 0.000201472204127 Clone 26 39.499902772961306 71.044682849143214 -17.059675866707742 -0.002486507778238 0.000602959875589 0.000201477226847 Clone 27 39.499987396847231 71.044848606096693 -17.059723736560624 -0.002486521327913 0.000602952296621 0.000201477144648 Clone 28 39.500170758838394 71.045174613379913 -17.059796057044096 -0.002486512154243 0.000602984249566 0.000201472415007 Clone 29 39.500110285854625 71.045048848526534 -17.059770033412974 -0.002486514371528 0.000602969621216 0.000201474827627 Clone 30 39.500057250349286 71.044973420771441 -17.059746227256333 -0.002486523581520 0.000602957751605 0.000201478793967 Clone 31 39.500080755437452 71.045006402289204 -17.059755698962736 -0.002486496316983 0.000602994230131 0.000201469147787 Clone 32 39.500108277042834 71.045068898913769 -17.059774066946030 -0.002486528443922 0.000602958050707 0.000201478323350 Clone 33 39.500128936716195 71.045104571315008 -17.059783555191810 -0.002486528756887 0.000602957998362 0.000201477201021 Clone 34 39.500316275396557 71.045436225021660 -17.059865169913117 -0.002486528392524 0.000602975497192 0.000201474587031 Clone 35 39.500073199330117 71.044979279693294 -17.059756952791048 -0.002486503529310 0.000602980544084 0.000201470438766 Clone 36 39.500241574317400 71.045294996926202 -17.059827347017301 -0.002486516386568 0.000602984537818 0.000201470614410 Clone 37 39.500045465354354 71.044961059712676 -17.059745004867619 -0.002486538248622 0.000602939978834 0.000201482567214 Clone 38 39.500238659841294 71.045279342421452 -17.059823230761634 -0.002486507241055 0.000602994300796 0.000201469557297 Clone 39 39.499867784628172 71.044618594313206 -17.059657072074749 -0.002486500687465 0.000602965191110 0.000201476162298 Clone 40 39.500244312747228 71.045298552640332 -17.059832153240311 -0.002486522797590 0.000602976671592 0.000201474007863 Clone 41 39.500199944887648 71.045225675117393 -17.059818904829324 -0.002486523698467 0.000602971665312 0.000201474059333 Clone 42 39.499872338815130 71.044622205149849 -17.059660203888726 -0.002486490229610 0.000602978439645 0.000201470745305 Clone 43 39.500088724222628 71.045010946496049 -17.059757099283697 -0.002486501661893 0.000602988065609 0.000201472129351 Clone 44 39.500168243395628 71.045175924059663 -17.059805834263102 -0.002486512582565 0.000602984891761 0.000201470052469 Clone 45 39.499947628161969 71.044784730974214 -17.059708502453045 -0.002486524538731 0.000602947322714 0.000201479026991 Clone 46 39.500113407146195 71.045070682242354 -17.059774559783406 -0.002486513654337 0.000602975721453 0.000201473117787 Clone 47 39.499929396264875 71.044750034819813 -17.059703957385167 -0.002486503524407 0.000602972331143 0.000201470831363 Clone 48 39.500102776871465 71.045051968925932 -17.059768900388129 -0.002486512700114 0.000602976210478 0.000201473640998 Clone 49 39.500092106143818 71.045033818122505 -17.059768734055343 -0.002486520991598 0.000602963720292 0.000201474857990 Clone 50 39.500246783573893 71.045308049318251 -17.059835093491948 -0.002486525169741 0.000602974139220 0.000201473912828 Clone 51 39.499973224888905 71.044820702848099 -17.059715477853068 -0.002486513005714 0.000602962270638 0.000201475307337 Clone 52 39.500038446089810 71.044921015750347 -17.059743885697909 -0.002486500863854 0.000602981566174 0.000201468896688 Clone 53 39.500099437632471 71.045040423045563 -17.059767623527584 -0.002486517132473 0.000602968039933 0.000201475602926 Clone 54 39.500266417506573 71.045350531386205 -17.059846582342423 -0.002486534404561 0.000602964993781 0.000201475907540 Clone 55 39.500139393945865 71.045120395800296 -17.059786491481109 -0.002486514773073 0.000602977722663 0.000201472251423 Clone 56 39.500247628238611 71.045306812270411 -17.059833661517896 -0.002486511406588 0.000602992177295 0.000201469971610 Clone 57 39.500108125248545 71.045060167468080 -17.059769959009071 -0.002486519089097 0.000602969679865 0.000201475860173 Clone 58 39.500234297241448 71.045281809360688 -17.059827245939932 -0.002486529084660 0.000602966527946 0.000201475569947 Clone 59 39.500139800623948 71.045122314199702 -17.059786517255109 -0.002486519919037 0.000602971917155 0.000201474209063 Clone 60 39.500082261557480 71.044990840053217 -17.059755920364871 -0.002486496789883 0.000602989607554 0.000201468326462 Clone 61 39.500113122310005 71.045063193330563 -17.059773279292713 -0.002486503165719 0.000602988110713 0.000201469707222 Clone 62 39.499957569099934 71.044775225720088 -17.059711743592693 -0.002486490460618 0.000602986391634 0.000201466056687 Clone 63 39.499854333434328 71.044611125913278 -17.059658834218091 -0.002486510172258 0.000602956511549 0.000201478274719 Clone 64 39.500241333924983 71.045290210123255 -17.059829673417521 -0.002486529018369 0.000602966548378 0.000201475377106 Clone 65 39.500261765105719 71.045322633459776 -17.059831356793072 -0.002486524627978 0.000602973455646 0.000201475163116 Clone 66 39.500371218825848 71.045508020968455 -17.059881858502312 -0.002486511897881 0.000603000403615 0.000201469209893 Clone 67 39.500141928221048 71.045114119613530 -17.059783588959284 -0.002486516683019 0.000602973895673 0.000201474772978 Clone 68 39.500128779831392 71.045085428765802 -17.059781446157469 -0.002486494616252 0.000602999938799 0.000201467031918 Clone 69 39.500094772248751 71.045039247211150 -17.059772552472520 -0.002486520116171 0.000602965416154 0.000201473508947 Clone 70 39.499883294304631 71.044633582194848 -17.059668434623628 -0.002486495828334 0.000602969192289 0.000201472419394 Clone 71 39.500270353837919 71.045335889363557 -17.059843979545331 -0.002486490055351 0.000603021570653 0.000201461469074 Clone 72 39.500180029541333 71.045174532368492 -17.059806390175751 -0.002486505005606 0.000602990794033 0.000201466721711 Clone 73 39.500362899707255 71.045509283142096 -17.059883100926129 -0.002486515632099 0.000602998276555 0.000201469957494 Clone 74 39.500314642079438 71.045414986121685 -17.059860560480693 -0.002486498149442 0.000603014505486 0.000201464074575 Clone 75 39.500155379749700 71.045127716892310 -17.059785467758044 -0.002486505556491 0.000602987750852 0.000201471121549 Clone 76 39.500151290148267 71.045143135097618 -17.059789488446519 -0.002486511237916 0.000602983457443 0.000201470931005 Clone 77 39.500234119039554 71.045276593539469 -17.059824632715461 -0.002486507901711 0.000602993095566 0.000201469184055 Clone 78 39.500208381404974 71.045239698676028 -17.059814441759418 -0.002486496791303 0.000603008011260 0.000201466841435 Clone 79 39.499927192706508 71.044734736917647 -17.059694878245221 -0.002486512734560 0.000602955510876 0.000201474577622 Clone 80 39.500154826376267 71.045148461977121 -17.059786748749087 -0.002486524257746 0.000602968490686 0.000201477374143 Clone 81 39.500220178409762 71.045266621136378 -17.059828277522918 -0.002486532970120 0.000602961642652 0.000201476346603 Clone 82 39.500127333415854 71.045098579604343 -17.059786828208285 -0.002486526340354 0.000602961929617 0.000201476056824 Clone 83 39.500248766353636 71.045320969517746 -17.059838352810875 -0.002486546855024 0.000602948128221 0.000201481682388 Clone 84 39.500224541039138 71.045267475908062 -17.059820042643597 -0.002486509993928 0.000602992438545 0.000201470103063 Clone 85 39.500106937907070 71.045052861881857 -17.059769406290236 -0.002486502433669 0.000602988777662 0.000201470235753 Clone 86 39.500072374572831 71.045001832371184 -17.059757620129641 -0.002486528284769 0.000602954062133 0.000201479607851 Clone 87 39.500231305006899 71.045267470568319 -17.059820130754460 -0.002486489278472 0.000603018074479 0.000201464453697 Clone 88 39.500103818357239 71.045057090330928 -17.059773241793707 -0.002486505574149 0.000602987427224 0.000201469375752 Clone 89 39.500227403669236 71.045266470763579 -17.059819136104352 -0.002486508275633 0.000602992999530 0.000201469541645 Clone 90 39.500027995789800 71.044924477318219 -17.059740327055028 -0.002486536416115 0.000602940314605 0.000201482788232 Clone 91 39.500066137010130 71.044981904652332 -17.059754371229253 -0.002486506662307 0.000602979632039 0.000201471222693 Clone 92 39.499991686230345 71.044843961272207 -17.059720936440058 -0.002486502269723 0.000602977146532 0.000201471503246 Clone 93 39.500088820323299 71.045024821507994 -17.059764362434475 -0.002486534727324 0.000602944986102 0.000201480105423 Clone 94 39.499985115241437 71.044839640170025 -17.059710169462157 -0.002486503593223 0.000602977238850 0.000201474833728 Clone 95 39.500147809630228 71.045106088113130 -17.059785814907876 -0.002486491014165 0.000603004468317 0.000201464171420 Clone 96 39.500115964607382 71.045059516376554 -17.059766792032352 -0.002486512657040 0.000602974241273 0.000201474403856 Clone 97 39.500070998878080 71.044962371394959 -17.059750636317702 -0.002486487241004 0.000602999948666 0.000201465678522 Clone 98 39.500030210510104 71.044925277847156 -17.059738934807410 -0.002486514323408 0.000602967132373 0.000201474513860 Clone 99 39.500005133768916 71.044876606095642 -17.059725987247585 -0.002486505330418 0.000602976036669 0.000201472796993
Step 4: Set Up the Rebound Simulation¶
We create a Rebound simulation at the MPC orbit epoch containing:
- The Sun and 4 planets (loaded from JPL Horizons)
- The nominal orbit of Sedna as a massless test particle
- 100 orbital clones as additional test particles
Unit and frame handling: MPC Cartesian elements use AU for positions and AU/day for velocities, so we set sim.units = ('AU', 'day', 'Msun') to match. One subtlety: Rebound's Horizons interface returns states relative to the Solar System barycenter, while the MPC state vectors are heliocentric — so we add the nominal orbit and each clone relative to the Sun particle (positions and velocities alike). For Sedna the Sun's barycentric offset is tiny compared to the orbit, but getting the frames right costs nothing and matters much more for orbits closer to the Sun.
We use the WHFast symplectic integrator, which is efficient for long-term integrations.
The timestep is set to 1/20th of Jupiters's orbital period for accuracy.
NB: It is possible that you may experience the following error when adding planets to rebound (which uses the NASA Horizons system to extract the planetary positions): RuntimeError: An error occured while accessing NASA HORIZONS. If this is a SSL certificate issue, you can try disabling the certificate verification by setting rebound.horizons.SSL_CONTEXT = 'unverified'.
- In this scenario, the simplest approach is to just retry the evaluation, and this typically will succeed.
# Convert MPC epoch (MJD) to a date string for Horizons
epoch_mjd = M.epoch_data['epoch']
epoch_date = Time(epoch_mjd, format='mjd').iso[:10] # YYYY-MM-DD
print(f"Epoch: MJD {epoch_mjd} = {epoch_date}")
# Create the simulation with AU/day/Msun units to match MPC data
sim = rebound.Simulation()
sim.units = ('AU', 'day', 'Msun')
# Add the Sun and planets from Horizons at the MPC epoch
bodies = ["Sun", "Jupiter", "Saturn", "Uranus", "Neptune"] # "Mercury", "Venus", "Earth", "Mars",
for body in bodies:
sim.add(body, date=epoch_date)
print(f"Added {body}")
# Horizons-loaded particles are barycentric; the MPC states are
# heliocentric, so add each test particle relative to the Sun particle
sun = sim.particles[0]
# Add the nominal orbit as a test particle (mass=0)
sim.add(x=sun.x + mean[0], y=sun.y + mean[1], z=sun.z + mean[2],
vx=sun.vx + mean[3], vy=sun.vy + mean[4], vz=sun.vz + mean[5])
print(f"Added nominal {object_name} orbit")
# Add the clones as test particles
for i, clone in enumerate(clones):
sim.add(x=sun.x + clone[0], y=sun.y + clone[1], z=sun.z + clone[2],
vx=sun.vx + clone[3], vy=sun.vy + clone[4], vz=sun.vz + clone[5])
print(f"Added {n_clones} orbital clones")
# Configure the integrator
sim.integrator = "whfast"
sim.dt = sim.particles[1].P / 20.0 # 1/20 of inner-most planet's orbital period
sim.move_to_com()
# Verify the nominal orbit looks correct (the nominal sits right after the massive bodies)
orb = sim.particles[len(bodies)].orbit(primary=sim.particles[0])
print(f"\nNominal {object_name} orbit check: a={orb.a:.4f} AU, e={orb.e:.4f}, inc={np.degrees(orb.inc):.2f} deg")
print(f"Total particles: {sim.N} (Sun + {len(bodies)-1} planets + 1 nominal + {n_clones} clones)")
print(f"Integrator: {sim.integrator}")
print(f"Timestep: {sim.dt:.4f} days ({sim.dt/365.25:.6f} years)")
Epoch: MJD 61000.0 = 2025-11-21 Searching NASA Horizons for 'Sun'...
Found: Sun (10) Added Sun Searching NASA Horizons for 'Jupiter'...
Found: Jupiter Barycenter (5) (chosen from query 'Jupiter') Added Jupiter Searching NASA Horizons for 'Saturn'...
Found: Saturn Barycenter (6) (chosen from query 'Saturn') Added Saturn Searching NASA Horizons for 'Uranus'...
Found: Uranus Barycenter (7) (chosen from query 'Uranus') Added Uranus Searching NASA Horizons for 'Neptune'...
Found: Neptune Barycenter (8) (chosen from query 'Neptune') Added Neptune Added nominal Sedna orbit Added 100 orbital clones Nominal Sedna orbit check: a=549.5301 AU, e=0.8613, inc=11.93 deg Total particles: 106 (Sun + 4 planets + 1 nominal + 100 clones) Integrator: whfast Timestep: 216.6078 days (0.593040 years)
Step 5: Run the Simulation¶
We integrate the system forward for 10 million years, recording the semi-major axis, eccentricity, and inclination of the nominal orbit and each clone at 1,000 evenly-spaced output times.
Note: This integration may take a few minutes depending on your machine.
# Integration parameters
t_final = 10.0e6 * 365.25 # 10 million years in days
n_outputs = 1000
times = np.linspace(0, t_final, n_outputs)
# Indices of test particles: nominal is after Sun + planets, clones after that ...
i_nominal = len(bodies)
i_first_clone = i_nominal + 1
i_clones = list(range(i_first_clone, i_first_clone + n_clones))
all_test = [i_nominal] + i_clones
n_test = len(all_test)
# Storage arrays
a_arr = np.zeros((n_outputs, n_test))
e_arr = np.zeros((n_outputs, n_test))
inc_arr = np.zeros((n_outputs, n_test))
# Integrate
for k, t in enumerate(tqdm(times)):
sim.integrate(t)
for j, idx in enumerate(all_test):
orb = sim.particles[idx].orbit(primary=sim.particles[0])
a_arr[k, j] = orb.a
e_arr[k, j] = orb.e
inc_arr[k, j] = np.degrees(orb.inc)
print("Integration complete.")
# Convert times to years for plotting
times_yr = times / 365.25
0%| | 0/1000 [00:00<?, ?it/s]
0%| | 2/1000 [00:00<04:19, 3.85it/s]
0%| | 3/1000 [00:01<06:01, 2.76it/s]
0%| | 4/1000 [00:01<06:55, 2.40it/s]
0%| | 5/1000 [00:02<07:26, 2.23it/s]
1%| | 6/1000 [00:02<07:46, 2.13it/s]
1%| | 7/1000 [00:03<08:02, 2.06it/s]
1%| | 8/1000 [00:03<08:09, 2.03it/s]
1%| | 9/1000 [00:04<08:13, 2.01it/s]
1%| | 10/1000 [00:04<08:15, 2.00it/s]
1%| | 11/1000 [00:05<08:16, 1.99it/s]
1%| | 12/1000 [00:05<08:17, 1.99it/s]
1%|▏ | 13/1000 [00:06<08:19, 1.97it/s]
1%|▏ | 14/1000 [00:06<08:20, 1.97it/s]
2%|▏ | 15/1000 [00:07<08:23, 1.96it/s]
2%|▏ | 16/1000 [00:07<08:25, 1.95it/s]
2%|▏ | 17/1000 [00:08<08:25, 1.94it/s]
2%|▏ | 18/1000 [00:08<08:26, 1.94it/s]
2%|▏ | 19/1000 [00:09<08:27, 1.93it/s]
2%|▏ | 20/1000 [00:09<08:24, 1.94it/s]
2%|▏ | 21/1000 [00:10<08:23, 1.95it/s]
2%|▏ | 22/1000 [00:10<08:26, 1.93it/s]
2%|▏ | 23/1000 [00:11<08:27, 1.92it/s]
2%|▏ | 24/1000 [00:11<08:28, 1.92it/s]
2%|▎ | 25/1000 [00:12<08:26, 1.92it/s]
3%|▎ | 26/1000 [00:12<08:26, 1.92it/s]
3%|▎ | 27/1000 [00:13<08:21, 1.94it/s]
3%|▎ | 28/1000 [00:13<08:25, 1.92it/s]
3%|▎ | 29/1000 [00:14<08:30, 1.90it/s]
3%|▎ | 30/1000 [00:14<08:31, 1.90it/s]
3%|▎ | 31/1000 [00:15<08:30, 1.90it/s]
3%|▎ | 32/1000 [00:16<08:26, 1.91it/s]
3%|▎ | 33/1000 [00:16<08:24, 1.92it/s]
3%|▎ | 34/1000 [00:17<08:24, 1.91it/s]
4%|▎ | 35/1000 [00:17<08:21, 1.92it/s]
4%|▎ | 36/1000 [00:18<08:18, 1.93it/s]
4%|▎ | 37/1000 [00:18<08:20, 1.92it/s]
4%|▍ | 38/1000 [00:19<08:19, 1.93it/s]
4%|▍ | 39/1000 [00:19<08:17, 1.93it/s]
4%|▍ | 40/1000 [00:20<08:17, 1.93it/s]
4%|▍ | 41/1000 [00:20<08:16, 1.93it/s]
4%|▍ | 42/1000 [00:21<08:13, 1.94it/s]
4%|▍ | 43/1000 [00:21<08:14, 1.94it/s]
4%|▍ | 44/1000 [00:22<08:14, 1.93it/s]
4%|▍ | 45/1000 [00:22<08:14, 1.93it/s]
5%|▍ | 46/1000 [00:23<08:16, 1.92it/s]
5%|▍ | 47/1000 [00:23<08:15, 1.92it/s]
5%|▍ | 48/1000 [00:24<08:16, 1.92it/s]
5%|▍ | 49/1000 [00:24<08:17, 1.91it/s]
5%|▌ | 50/1000 [00:25<08:16, 1.91it/s]
5%|▌ | 51/1000 [00:25<08:19, 1.90it/s]
5%|▌ | 52/1000 [00:26<08:16, 1.91it/s]
5%|▌ | 53/1000 [00:26<08:13, 1.92it/s]
5%|▌ | 54/1000 [00:27<08:09, 1.93it/s]
6%|▌ | 55/1000 [00:27<08:06, 1.94it/s]
6%|▌ | 56/1000 [00:28<08:03, 1.95it/s]
6%|▌ | 57/1000 [00:28<08:06, 1.94it/s]
6%|▌ | 58/1000 [00:29<08:03, 1.95it/s]
6%|▌ | 59/1000 [00:29<08:02, 1.95it/s]
6%|▌ | 60/1000 [00:30<08:02, 1.95it/s]
6%|▌ | 61/1000 [00:31<08:02, 1.95it/s]
6%|▌ | 62/1000 [00:31<08:01, 1.95it/s]
6%|▋ | 63/1000 [00:32<08:01, 1.95it/s]
6%|▋ | 64/1000 [00:32<08:01, 1.94it/s]
6%|▋ | 65/1000 [00:33<08:01, 1.94it/s]
7%|▋ | 66/1000 [00:33<07:59, 1.95it/s]
7%|▋ | 67/1000 [00:34<07:58, 1.95it/s]
7%|▋ | 68/1000 [00:34<07:58, 1.95it/s]
7%|▋ | 69/1000 [00:35<07:59, 1.94it/s]
7%|▋ | 70/1000 [00:35<08:00, 1.94it/s]
7%|▋ | 71/1000 [00:36<07:59, 1.94it/s]
7%|▋ | 72/1000 [00:36<07:58, 1.94it/s]
7%|▋ | 73/1000 [00:37<07:57, 1.94it/s]
7%|▋ | 74/1000 [00:37<07:58, 1.94it/s]
8%|▊ | 75/1000 [00:38<07:58, 1.93it/s]
8%|▊ | 76/1000 [00:38<07:57, 1.93it/s]
8%|▊ | 77/1000 [00:39<07:56, 1.94it/s]
8%|▊ | 78/1000 [00:39<07:57, 1.93it/s]
8%|▊ | 79/1000 [00:40<07:58, 1.93it/s]
8%|▊ | 80/1000 [00:40<07:58, 1.92it/s]
8%|▊ | 81/1000 [00:41<07:56, 1.93it/s]
8%|▊ | 82/1000 [00:41<07:56, 1.93it/s]
8%|▊ | 83/1000 [00:42<08:08, 1.88it/s]
8%|▊ | 84/1000 [00:42<08:05, 1.89it/s]
8%|▊ | 85/1000 [00:43<08:01, 1.90it/s]
9%|▊ | 86/1000 [00:44<08:01, 1.90it/s]
9%|▊ | 87/1000 [00:44<08:00, 1.90it/s]
9%|▉ | 88/1000 [00:45<07:57, 1.91it/s]
9%|▉ | 89/1000 [00:45<07:55, 1.92it/s]
9%|▉ | 90/1000 [00:46<07:53, 1.92it/s]
9%|▉ | 91/1000 [00:46<07:51, 1.93it/s]
9%|▉ | 92/1000 [00:47<07:50, 1.93it/s]
9%|▉ | 93/1000 [00:47<07:48, 1.94it/s]
9%|▉ | 94/1000 [00:48<07:47, 1.94it/s]
10%|▉ | 95/1000 [00:48<07:46, 1.94it/s]
10%|▉ | 96/1000 [00:49<07:46, 1.94it/s]
10%|▉ | 97/1000 [00:49<07:46, 1.94it/s]
10%|▉ | 98/1000 [00:50<07:45, 1.94it/s]
10%|▉ | 99/1000 [00:50<07:48, 1.92it/s]
10%|█ | 100/1000 [00:51<07:49, 1.92it/s]
10%|█ | 101/1000 [00:51<07:46, 1.93it/s]
10%|█ | 102/1000 [00:52<07:45, 1.93it/s]
10%|█ | 103/1000 [00:52<07:43, 1.93it/s]
10%|█ | 104/1000 [00:53<07:43, 1.93it/s]
10%|█ | 105/1000 [00:53<07:41, 1.94it/s]
11%|█ | 106/1000 [00:54<07:39, 1.95it/s]
11%|█ | 107/1000 [00:54<07:38, 1.95it/s]
11%|█ | 108/1000 [00:55<07:37, 1.95it/s]
11%|█ | 109/1000 [00:55<07:37, 1.95it/s]
11%|█ | 110/1000 [00:56<07:37, 1.95it/s]
11%|█ | 111/1000 [00:56<07:37, 1.94it/s]
11%|█ | 112/1000 [00:57<07:37, 1.94it/s]
11%|█▏ | 113/1000 [00:57<07:38, 1.94it/s]
11%|█▏ | 114/1000 [00:58<07:46, 1.90it/s]
12%|█▏ | 115/1000 [00:59<07:46, 1.90it/s]
12%|█▏ | 116/1000 [00:59<07:42, 1.91it/s]
12%|█▏ | 117/1000 [01:00<07:40, 1.92it/s]
12%|█▏ | 118/1000 [01:00<07:41, 1.91it/s]
12%|█▏ | 119/1000 [01:01<07:37, 1.93it/s]
12%|█▏ | 120/1000 [01:01<07:33, 1.94it/s]
12%|█▏ | 121/1000 [01:02<07:30, 1.95it/s]
12%|█▏ | 122/1000 [01:02<07:28, 1.96it/s]
12%|█▏ | 123/1000 [01:03<07:30, 1.95it/s]
12%|█▏ | 124/1000 [01:03<07:27, 1.96it/s]
12%|█▎ | 125/1000 [01:04<07:26, 1.96it/s]
13%|█▎ | 126/1000 [01:04<07:24, 1.97it/s]
13%|█▎ | 127/1000 [01:05<07:27, 1.95it/s]
13%|█▎ | 128/1000 [01:05<07:26, 1.95it/s]
13%|█▎ | 129/1000 [01:06<07:25, 1.96it/s]
13%|█▎ | 130/1000 [01:06<07:24, 1.96it/s]
13%|█▎ | 131/1000 [01:07<07:22, 1.96it/s]
13%|█▎ | 132/1000 [01:07<07:21, 1.97it/s]
13%|█▎ | 133/1000 [01:08<07:19, 1.97it/s]
13%|█▎ | 134/1000 [01:08<07:18, 1.97it/s]
14%|█▎ | 135/1000 [01:09<07:18, 1.97it/s]
14%|█▎ | 136/1000 [01:09<07:19, 1.97it/s]
14%|█▎ | 137/1000 [01:10<07:18, 1.97it/s]
14%|█▍ | 138/1000 [01:10<07:17, 1.97it/s]
14%|█▍ | 139/1000 [01:11<07:16, 1.97it/s]
14%|█▍ | 140/1000 [01:11<07:16, 1.97it/s]
14%|█▍ | 141/1000 [01:12<07:15, 1.97it/s]
14%|█▍ | 142/1000 [01:12<07:14, 1.97it/s]
14%|█▍ | 143/1000 [01:13<07:13, 1.98it/s]
14%|█▍ | 144/1000 [01:13<07:13, 1.97it/s]
14%|█▍ | 145/1000 [01:14<07:13, 1.97it/s]
15%|█▍ | 146/1000 [01:14<07:13, 1.97it/s]
15%|█▍ | 147/1000 [01:15<07:12, 1.97it/s]
15%|█▍ | 148/1000 [01:15<07:12, 1.97it/s]
15%|█▍ | 149/1000 [01:16<07:11, 1.97it/s]
15%|█▌ | 150/1000 [01:16<07:11, 1.97it/s]
15%|█▌ | 151/1000 [01:17<07:10, 1.97it/s]
15%|█▌ | 152/1000 [01:17<07:10, 1.97it/s]
15%|█▌ | 153/1000 [01:18<07:09, 1.97it/s]
15%|█▌ | 154/1000 [01:18<07:09, 1.97it/s]
16%|█▌ | 155/1000 [01:19<07:08, 1.97it/s]
16%|█▌ | 156/1000 [01:19<07:08, 1.97it/s]
16%|█▌ | 157/1000 [01:20<07:07, 1.97it/s]
16%|█▌ | 158/1000 [01:20<07:06, 1.97it/s]
16%|█▌ | 159/1000 [01:21<07:05, 1.97it/s]
16%|█▌ | 160/1000 [01:21<07:05, 1.97it/s]
16%|█▌ | 161/1000 [01:22<07:05, 1.97it/s]
16%|█▌ | 162/1000 [01:22<07:04, 1.97it/s]
16%|█▋ | 163/1000 [01:23<07:04, 1.97it/s]
16%|█▋ | 164/1000 [01:23<07:04, 1.97it/s]
16%|█▋ | 165/1000 [01:24<07:03, 1.97it/s]
17%|█▋ | 166/1000 [01:24<07:02, 1.97it/s]
17%|█▋ | 167/1000 [01:25<07:02, 1.97it/s]
17%|█▋ | 168/1000 [01:25<07:01, 1.97it/s]
17%|█▋ | 169/1000 [01:26<07:03, 1.96it/s]
17%|█▋ | 170/1000 [01:26<07:03, 1.96it/s]
17%|█▋ | 171/1000 [01:27<07:07, 1.94it/s]
17%|█▋ | 172/1000 [01:28<07:08, 1.93it/s]
17%|█▋ | 173/1000 [01:28<07:08, 1.93it/s]
17%|█▋ | 174/1000 [01:29<07:09, 1.93it/s]
18%|█▊ | 175/1000 [01:29<07:07, 1.93it/s]
18%|█▊ | 176/1000 [01:30<07:22, 1.86it/s]
18%|█▊ | 177/1000 [01:30<07:17, 1.88it/s]
18%|█▊ | 178/1000 [01:31<07:13, 1.90it/s]
18%|█▊ | 179/1000 [01:31<07:08, 1.92it/s]
18%|█▊ | 180/1000 [01:32<07:04, 1.93it/s]
18%|█▊ | 181/1000 [01:32<07:02, 1.94it/s]
18%|█▊ | 182/1000 [01:33<06:59, 1.95it/s]
18%|█▊ | 183/1000 [01:33<06:57, 1.96it/s]
18%|█▊ | 184/1000 [01:34<06:56, 1.96it/s]
18%|█▊ | 185/1000 [01:34<06:54, 1.96it/s]
19%|█▊ | 186/1000 [01:35<06:53, 1.97it/s]
19%|█▊ | 187/1000 [01:35<06:52, 1.97it/s]
19%|█▉ | 188/1000 [01:36<06:52, 1.97it/s]
19%|█▉ | 189/1000 [01:36<06:52, 1.97it/s]
19%|█▉ | 190/1000 [01:37<06:51, 1.97it/s]
19%|█▉ | 191/1000 [01:37<06:53, 1.96it/s]
19%|█▉ | 192/1000 [01:38<06:54, 1.95it/s]
19%|█▉ | 193/1000 [01:38<06:53, 1.95it/s]
19%|█▉ | 194/1000 [01:39<06:51, 1.96it/s]
20%|█▉ | 195/1000 [01:39<06:53, 1.94it/s]
20%|█▉ | 196/1000 [01:40<06:54, 1.94it/s]
20%|█▉ | 197/1000 [01:40<06:51, 1.95it/s]
20%|█▉ | 198/1000 [01:41<06:49, 1.96it/s]
20%|█▉ | 199/1000 [01:41<06:47, 1.96it/s]
20%|██ | 200/1000 [01:42<06:46, 1.97it/s]
20%|██ | 201/1000 [01:42<06:45, 1.97it/s]
20%|██ | 202/1000 [01:43<06:44, 1.97it/s]
20%|██ | 203/1000 [01:43<06:45, 1.97it/s]
20%|██ | 204/1000 [01:44<06:45, 1.96it/s]
20%|██ | 205/1000 [01:44<06:44, 1.96it/s]
21%|██ | 206/1000 [01:45<06:45, 1.96it/s]
21%|██ | 207/1000 [01:46<06:50, 1.93it/s]
21%|██ | 208/1000 [01:46<06:49, 1.93it/s]
21%|██ | 209/1000 [01:47<06:47, 1.94it/s]
21%|██ | 210/1000 [01:47<06:47, 1.94it/s]
21%|██ | 211/1000 [01:48<06:47, 1.94it/s]
21%|██ | 212/1000 [01:48<06:48, 1.93it/s]
21%|██▏ | 213/1000 [01:49<06:50, 1.92it/s]
21%|██▏ | 214/1000 [01:49<06:48, 1.92it/s]
22%|██▏ | 215/1000 [01:50<06:56, 1.88it/s]
22%|██▏ | 216/1000 [01:50<06:53, 1.89it/s]
22%|██▏ | 217/1000 [01:51<06:54, 1.89it/s]
22%|██▏ | 218/1000 [01:51<06:51, 1.90it/s]
22%|██▏ | 219/1000 [01:52<06:47, 1.92it/s]
22%|██▏ | 220/1000 [01:52<06:44, 1.93it/s]
22%|██▏ | 221/1000 [01:53<06:41, 1.94it/s]
22%|██▏ | 222/1000 [01:53<06:40, 1.94it/s]
22%|██▏ | 223/1000 [01:54<06:38, 1.95it/s]
22%|██▏ | 224/1000 [01:54<06:36, 1.96it/s]
22%|██▎ | 225/1000 [01:55<06:36, 1.96it/s]
23%|██▎ | 226/1000 [01:55<06:38, 1.94it/s]
23%|██▎ | 227/1000 [01:56<06:37, 1.94it/s]
23%|██▎ | 228/1000 [01:56<06:36, 1.95it/s]
23%|██▎ | 229/1000 [01:57<06:35, 1.95it/s]
23%|██▎ | 230/1000 [01:57<06:33, 1.95it/s]
23%|██▎ | 231/1000 [01:58<06:33, 1.95it/s]
23%|██▎ | 232/1000 [01:58<06:34, 1.95it/s]
23%|██▎ | 233/1000 [01:59<06:32, 1.96it/s]
23%|██▎ | 234/1000 [01:59<06:31, 1.96it/s]
24%|██▎ | 235/1000 [02:00<06:31, 1.95it/s]
24%|██▎ | 236/1000 [02:01<06:33, 1.94it/s]
24%|██▎ | 237/1000 [02:01<06:40, 1.90it/s]
24%|██▍ | 238/1000 [02:02<06:49, 1.86it/s]
24%|██▍ | 239/1000 [02:02<06:47, 1.87it/s]
24%|██▍ | 240/1000 [02:03<06:45, 1.87it/s]
24%|██▍ | 241/1000 [02:03<06:42, 1.88it/s]
24%|██▍ | 242/1000 [02:04<06:41, 1.89it/s]
24%|██▍ | 243/1000 [02:04<06:38, 1.90it/s]
24%|██▍ | 244/1000 [02:05<06:36, 1.91it/s]
24%|██▍ | 245/1000 [02:05<06:35, 1.91it/s]
25%|██▍ | 246/1000 [02:06<06:32, 1.92it/s]
25%|██▍ | 247/1000 [02:06<06:33, 1.91it/s]
25%|██▍ | 248/1000 [02:07<06:39, 1.88it/s]
25%|██▍ | 249/1000 [02:07<06:38, 1.89it/s]
25%|██▌ | 250/1000 [02:08<06:34, 1.90it/s]
25%|██▌ | 251/1000 [02:08<06:32, 1.91it/s]
25%|██▌ | 252/1000 [02:09<06:28, 1.92it/s]
25%|██▌ | 253/1000 [02:09<06:26, 1.93it/s]
25%|██▌ | 254/1000 [02:10<06:33, 1.90it/s]
26%|██▌ | 255/1000 [02:11<06:31, 1.90it/s]
26%|██▌ | 256/1000 [02:11<06:26, 1.92it/s]
26%|██▌ | 257/1000 [02:12<06:23, 1.94it/s]
26%|██▌ | 258/1000 [02:12<06:21, 1.94it/s]
26%|██▌ | 259/1000 [02:13<06:19, 1.95it/s]
26%|██▌ | 260/1000 [02:13<06:18, 1.96it/s]
26%|██▌ | 261/1000 [02:14<06:17, 1.96it/s]
26%|██▌ | 262/1000 [02:14<06:16, 1.96it/s]
26%|██▋ | 263/1000 [02:15<06:15, 1.96it/s]
26%|██▋ | 264/1000 [02:15<06:14, 1.97it/s]
26%|██▋ | 265/1000 [02:16<06:14, 1.96it/s]
27%|██▋ | 266/1000 [02:16<06:13, 1.96it/s]
27%|██▋ | 267/1000 [02:17<06:13, 1.96it/s]
27%|██▋ | 268/1000 [02:17<06:12, 1.96it/s]
27%|██▋ | 269/1000 [02:18<06:12, 1.96it/s]
27%|██▋ | 270/1000 [02:18<06:11, 1.96it/s]
27%|██▋ | 271/1000 [02:19<06:11, 1.96it/s]
27%|██▋ | 272/1000 [02:19<06:10, 1.97it/s]
27%|██▋ | 273/1000 [02:20<06:10, 1.96it/s]
27%|██▋ | 274/1000 [02:20<06:09, 1.96it/s]
28%|██▊ | 275/1000 [02:21<06:09, 1.96it/s]
28%|██▊ | 276/1000 [02:21<06:08, 1.97it/s]
28%|██▊ | 277/1000 [02:22<06:08, 1.96it/s]
28%|██▊ | 278/1000 [02:22<06:07, 1.97it/s]
28%|██▊ | 279/1000 [02:23<06:06, 1.97it/s]
28%|██▊ | 280/1000 [02:23<06:05, 1.97it/s]
28%|██▊ | 281/1000 [02:24<06:05, 1.97it/s]
28%|██▊ | 282/1000 [02:24<06:05, 1.97it/s]
28%|██▊ | 283/1000 [02:25<06:04, 1.97it/s]
28%|██▊ | 284/1000 [02:25<06:03, 1.97it/s]
28%|██▊ | 285/1000 [02:26<06:03, 1.96it/s]
29%|██▊ | 286/1000 [02:26<06:03, 1.97it/s]
29%|██▊ | 287/1000 [02:27<06:03, 1.96it/s]
29%|██▉ | 288/1000 [02:27<06:02, 1.97it/s]
29%|██▉ | 289/1000 [02:28<06:01, 1.97it/s]
29%|██▉ | 290/1000 [02:28<06:00, 1.97it/s]
29%|██▉ | 291/1000 [02:29<06:00, 1.97it/s]
29%|██▉ | 292/1000 [02:29<05:59, 1.97it/s]
29%|██▉ | 293/1000 [02:30<05:59, 1.97it/s]
29%|██▉ | 294/1000 [02:30<05:58, 1.97it/s]
30%|██▉ | 295/1000 [02:31<06:01, 1.95it/s]
30%|██▉ | 296/1000 [02:31<06:02, 1.94it/s]
30%|██▉ | 297/1000 [02:32<06:00, 1.95it/s]
30%|██▉ | 298/1000 [02:32<05:59, 1.95it/s]
30%|██▉ | 299/1000 [02:33<05:57, 1.96it/s]
30%|███ | 300/1000 [02:33<05:56, 1.96it/s]
30%|███ | 301/1000 [02:34<05:56, 1.96it/s]
30%|███ | 302/1000 [02:34<05:55, 1.96it/s]
30%|███ | 303/1000 [02:35<05:54, 1.97it/s]
30%|███ | 304/1000 [02:35<05:53, 1.97it/s]
30%|███ | 305/1000 [02:36<05:53, 1.97it/s]
31%|███ | 306/1000 [02:36<05:53, 1.97it/s]
31%|███ | 307/1000 [02:37<05:54, 1.95it/s]
31%|███ | 308/1000 [02:38<05:57, 1.94it/s]
31%|███ | 309/1000 [02:38<06:00, 1.92it/s]
31%|███ | 310/1000 [02:39<06:00, 1.92it/s]
31%|███ | 311/1000 [02:39<05:59, 1.92it/s]
31%|███ | 312/1000 [02:40<05:59, 1.92it/s]
31%|███▏ | 313/1000 [02:40<05:57, 1.92it/s]
31%|███▏ | 314/1000 [02:41<05:57, 1.92it/s]
32%|███▏ | 315/1000 [02:41<05:55, 1.93it/s]
32%|███▏ | 316/1000 [02:42<05:55, 1.92it/s]
32%|███▏ | 317/1000 [02:42<05:54, 1.93it/s]
32%|███▏ | 318/1000 [02:43<05:52, 1.93it/s]
32%|███▏ | 319/1000 [02:43<05:50, 1.94it/s]
32%|███▏ | 320/1000 [02:44<05:49, 1.95it/s]
32%|███▏ | 321/1000 [02:44<05:47, 1.95it/s]
32%|███▏ | 322/1000 [02:45<05:45, 1.96it/s]
32%|███▏ | 323/1000 [02:45<05:44, 1.96it/s]
32%|███▏ | 324/1000 [02:46<05:44, 1.96it/s]
32%|███▎ | 325/1000 [02:46<05:44, 1.96it/s]
33%|███▎ | 326/1000 [02:47<05:47, 1.94it/s]
33%|███▎ | 327/1000 [02:47<05:48, 1.93it/s]
33%|███▎ | 328/1000 [02:48<05:47, 1.93it/s]
33%|███▎ | 329/1000 [02:48<05:45, 1.94it/s]
33%|███▎ | 330/1000 [02:49<05:43, 1.95it/s]
33%|███▎ | 331/1000 [02:49<05:42, 1.95it/s]
33%|███▎ | 332/1000 [02:50<05:42, 1.95it/s]
33%|███▎ | 333/1000 [02:50<05:42, 1.95it/s]
33%|███▎ | 334/1000 [02:51<05:41, 1.95it/s]
34%|███▎ | 335/1000 [02:51<05:40, 1.95it/s]
34%|███▎ | 336/1000 [02:52<05:39, 1.95it/s]
34%|███▎ | 337/1000 [02:52<05:38, 1.96it/s]
34%|███▍ | 338/1000 [02:53<05:39, 1.95it/s]
34%|███▍ | 339/1000 [02:54<05:43, 1.93it/s]
34%|███▍ | 340/1000 [02:54<05:42, 1.93it/s]
34%|███▍ | 341/1000 [02:55<05:40, 1.93it/s]
34%|███▍ | 342/1000 [02:55<05:38, 1.94it/s]
34%|███▍ | 343/1000 [02:56<05:36, 1.95it/s]
34%|███▍ | 344/1000 [02:56<05:35, 1.95it/s]
34%|███▍ | 345/1000 [02:57<05:35, 1.95it/s]
35%|███▍ | 346/1000 [02:57<05:34, 1.96it/s]
35%|███▍ | 347/1000 [02:58<05:32, 1.96it/s]
35%|███▍ | 348/1000 [02:58<05:32, 1.96it/s]
35%|███▍ | 349/1000 [02:59<05:31, 1.97it/s]
35%|███▌ | 350/1000 [02:59<05:30, 1.97it/s]
35%|███▌ | 351/1000 [03:00<05:30, 1.97it/s]
35%|███▌ | 352/1000 [03:00<05:29, 1.96it/s]
35%|███▌ | 353/1000 [03:01<05:29, 1.97it/s]
35%|███▌ | 354/1000 [03:01<05:28, 1.97it/s]
36%|███▌ | 355/1000 [03:02<05:31, 1.95it/s]
36%|███▌ | 356/1000 [03:02<05:33, 1.93it/s]
36%|███▌ | 357/1000 [03:03<05:35, 1.91it/s]
36%|███▌ | 358/1000 [03:03<05:34, 1.92it/s]
36%|███▌ | 359/1000 [03:04<05:34, 1.91it/s]
36%|███▌ | 360/1000 [03:04<05:37, 1.90it/s]
36%|███▌ | 361/1000 [03:05<05:33, 1.92it/s]
36%|███▌ | 362/1000 [03:05<05:30, 1.93it/s]
36%|███▋ | 363/1000 [03:06<05:30, 1.92it/s]
36%|███▋ | 364/1000 [03:06<05:28, 1.93it/s]
36%|███▋ | 365/1000 [03:07<05:27, 1.94it/s]
37%|███▋ | 366/1000 [03:07<05:25, 1.95it/s]
37%|███▋ | 367/1000 [03:08<05:25, 1.94it/s]
37%|███▋ | 368/1000 [03:08<05:27, 1.93it/s]
37%|███▋ | 369/1000 [03:09<05:26, 1.93it/s]
37%|███▋ | 370/1000 [03:09<05:26, 1.93it/s]
37%|███▋ | 371/1000 [03:10<05:26, 1.93it/s]
37%|███▋ | 372/1000 [03:11<05:26, 1.92it/s]
37%|███▋ | 373/1000 [03:11<05:24, 1.93it/s]
37%|███▋ | 374/1000 [03:12<05:23, 1.94it/s]
38%|███▊ | 375/1000 [03:12<05:25, 1.92it/s]
38%|███▊ | 376/1000 [03:13<05:25, 1.91it/s]
38%|███▊ | 377/1000 [03:13<05:23, 1.92it/s]
38%|███▊ | 378/1000 [03:14<05:21, 1.94it/s]
38%|███▊ | 379/1000 [03:14<05:19, 1.94it/s]
38%|███▊ | 380/1000 [03:15<05:17, 1.95it/s]
38%|███▊ | 381/1000 [03:15<05:16, 1.96it/s]
38%|███▊ | 382/1000 [03:16<05:15, 1.96it/s]
38%|███▊ | 383/1000 [03:16<05:14, 1.96it/s]
38%|███▊ | 384/1000 [03:17<05:14, 1.96it/s]
38%|███▊ | 385/1000 [03:17<05:13, 1.96it/s]
39%|███▊ | 386/1000 [03:18<05:13, 1.96it/s]
39%|███▊ | 387/1000 [03:18<05:12, 1.96it/s]
39%|███▉ | 388/1000 [03:19<05:12, 1.96it/s]
39%|███▉ | 389/1000 [03:19<05:12, 1.95it/s]
39%|███▉ | 390/1000 [03:20<05:13, 1.95it/s]
39%|███▉ | 391/1000 [03:20<05:13, 1.94it/s]
39%|███▉ | 392/1000 [03:21<05:12, 1.95it/s]
39%|███▉ | 393/1000 [03:21<05:10, 1.95it/s]
39%|███▉ | 394/1000 [03:22<05:10, 1.95it/s]
40%|███▉ | 395/1000 [03:22<05:09, 1.96it/s]
40%|███▉ | 396/1000 [03:23<05:08, 1.96it/s]
40%|███▉ | 397/1000 [03:23<05:07, 1.96it/s]
40%|███▉ | 398/1000 [03:24<05:06, 1.96it/s]
40%|███▉ | 399/1000 [03:24<05:06, 1.96it/s]
40%|████ | 400/1000 [03:25<05:05, 1.96it/s]
40%|████ | 401/1000 [03:25<05:07, 1.95it/s]
40%|████ | 402/1000 [03:26<05:08, 1.94it/s]
40%|████ | 403/1000 [03:26<05:08, 1.93it/s]
40%|████ | 404/1000 [03:27<05:08, 1.93it/s]
40%|████ | 405/1000 [03:27<05:05, 1.94it/s]
41%|████ | 406/1000 [03:28<05:04, 1.95it/s]
41%|████ | 407/1000 [03:28<05:03, 1.96it/s]
41%|████ | 408/1000 [03:29<05:01, 1.96it/s]
41%|████ | 409/1000 [03:30<05:02, 1.96it/s]
41%|████ | 410/1000 [03:30<05:02, 1.95it/s]
41%|████ | 411/1000 [03:31<05:03, 1.94it/s]
41%|████ | 412/1000 [03:31<05:04, 1.93it/s]
41%|████▏ | 413/1000 [03:32<05:02, 1.94it/s]
41%|████▏ | 414/1000 [03:32<05:01, 1.94it/s]
42%|████▏ | 415/1000 [03:33<05:00, 1.95it/s]
42%|████▏ | 416/1000 [03:33<04:59, 1.95it/s]
42%|████▏ | 417/1000 [03:34<04:59, 1.95it/s]
42%|████▏ | 418/1000 [03:34<04:58, 1.95it/s]
42%|████▏ | 419/1000 [03:35<04:57, 1.95it/s]
42%|████▏ | 420/1000 [03:35<04:56, 1.96it/s]
42%|████▏ | 421/1000 [03:36<04:55, 1.96it/s]
42%|████▏ | 422/1000 [03:36<04:54, 1.96it/s]
42%|████▏ | 423/1000 [03:37<04:53, 1.96it/s]
42%|████▏ | 424/1000 [03:37<04:55, 1.95it/s]
42%|████▎ | 425/1000 [03:38<04:56, 1.94it/s]
43%|████▎ | 426/1000 [03:38<04:55, 1.94it/s]
43%|████▎ | 427/1000 [03:39<04:56, 1.93it/s]
43%|████▎ | 428/1000 [03:39<04:56, 1.93it/s]
43%|████▎ | 429/1000 [03:40<05:01, 1.89it/s]
43%|████▎ | 430/1000 [03:40<05:00, 1.90it/s]
43%|████▎ | 431/1000 [03:41<04:59, 1.90it/s]
43%|████▎ | 432/1000 [03:41<04:58, 1.90it/s]
43%|████▎ | 433/1000 [03:42<04:58, 1.90it/s]
43%|████▎ | 434/1000 [03:42<04:57, 1.90it/s]
44%|████▎ | 435/1000 [03:43<04:55, 1.91it/s]
44%|████▎ | 436/1000 [03:43<04:52, 1.93it/s]
44%|████▎ | 437/1000 [03:44<04:50, 1.94it/s]
44%|████▍ | 438/1000 [03:44<04:48, 1.95it/s]
44%|████▍ | 439/1000 [03:45<04:47, 1.95it/s]
44%|████▍ | 440/1000 [03:46<04:46, 1.96it/s]
44%|████▍ | 441/1000 [03:46<04:45, 1.96it/s]
44%|████▍ | 442/1000 [03:47<04:44, 1.96it/s]
44%|████▍ | 443/1000 [03:47<04:44, 1.96it/s]
44%|████▍ | 444/1000 [03:48<04:43, 1.96it/s]
44%|████▍ | 445/1000 [03:48<04:45, 1.94it/s]
45%|████▍ | 446/1000 [03:49<04:43, 1.95it/s]
45%|████▍ | 447/1000 [03:49<04:42, 1.96it/s]
45%|████▍ | 448/1000 [03:50<04:41, 1.96it/s]
45%|████▍ | 449/1000 [03:50<04:41, 1.96it/s]
45%|████▌ | 450/1000 [03:51<04:40, 1.96it/s]
45%|████▌ | 451/1000 [03:51<04:39, 1.96it/s]
45%|████▌ | 452/1000 [03:52<04:38, 1.96it/s]
45%|████▌ | 453/1000 [03:52<04:38, 1.96it/s]
45%|████▌ | 454/1000 [03:53<04:38, 1.96it/s]
46%|████▌ | 455/1000 [03:53<04:40, 1.94it/s]
46%|████▌ | 456/1000 [03:54<04:40, 1.94it/s]
46%|████▌ | 457/1000 [03:54<04:40, 1.94it/s]
46%|████▌ | 458/1000 [03:55<04:41, 1.93it/s]
46%|████▌ | 459/1000 [03:55<04:40, 1.93it/s]
46%|████▌ | 460/1000 [03:56<04:42, 1.91it/s]
46%|████▌ | 461/1000 [03:56<04:41, 1.92it/s]
46%|████▌ | 462/1000 [03:57<04:39, 1.92it/s]
46%|████▋ | 463/1000 [03:57<04:39, 1.92it/s]
46%|████▋ | 464/1000 [03:58<04:37, 1.93it/s]
46%|████▋ | 465/1000 [03:58<04:35, 1.94it/s]
47%|████▋ | 466/1000 [03:59<04:34, 1.95it/s]
47%|████▋ | 467/1000 [03:59<04:33, 1.95it/s]
47%|████▋ | 468/1000 [04:00<04:32, 1.95it/s]
47%|████▋ | 469/1000 [04:00<04:31, 1.96it/s]
47%|████▋ | 470/1000 [04:01<04:30, 1.96it/s]
47%|████▋ | 471/1000 [04:01<04:29, 1.96it/s]
47%|████▋ | 472/1000 [04:02<04:29, 1.96it/s]
47%|████▋ | 473/1000 [04:02<04:29, 1.95it/s]
47%|████▋ | 474/1000 [04:03<04:32, 1.93it/s]
48%|████▊ | 475/1000 [04:04<04:32, 1.93it/s]
48%|████▊ | 476/1000 [04:04<04:32, 1.93it/s]
48%|████▊ | 477/1000 [04:05<04:30, 1.93it/s]
48%|████▊ | 478/1000 [04:05<04:29, 1.93it/s]
48%|████▊ | 479/1000 [04:06<04:28, 1.94it/s]
48%|████▊ | 480/1000 [04:06<04:27, 1.94it/s]
48%|████▊ | 481/1000 [04:07<04:26, 1.95it/s]
48%|████▊ | 482/1000 [04:07<04:25, 1.95it/s]
48%|████▊ | 483/1000 [04:08<04:24, 1.95it/s]
48%|████▊ | 484/1000 [04:08<04:24, 1.95it/s]
48%|████▊ | 485/1000 [04:09<04:25, 1.94it/s]
49%|████▊ | 486/1000 [04:09<04:23, 1.95it/s]
49%|████▊ | 487/1000 [04:10<04:22, 1.95it/s]
49%|████▉ | 488/1000 [04:10<04:21, 1.95it/s]
49%|████▉ | 489/1000 [04:11<04:21, 1.95it/s]
49%|████▉ | 490/1000 [04:11<04:21, 1.95it/s]
49%|████▉ | 491/1000 [04:12<04:21, 1.94it/s]
49%|████▉ | 492/1000 [04:12<04:24, 1.92it/s]
49%|████▉ | 493/1000 [04:13<04:25, 1.91it/s]
49%|████▉ | 494/1000 [04:13<04:26, 1.90it/s]
50%|████▉ | 495/1000 [04:14<04:25, 1.90it/s]
50%|████▉ | 496/1000 [04:14<04:22, 1.92it/s]
50%|████▉ | 497/1000 [04:15<04:20, 1.93it/s]
50%|████▉ | 498/1000 [04:15<04:19, 1.94it/s]
50%|████▉ | 499/1000 [04:16<04:18, 1.94it/s]
50%|█████ | 500/1000 [04:16<04:16, 1.95it/s]
50%|█████ | 501/1000 [04:17<04:15, 1.95it/s]
50%|█████ | 502/1000 [04:17<04:15, 1.95it/s]
50%|█████ | 503/1000 [04:18<04:14, 1.95it/s]
50%|█████ | 504/1000 [04:18<04:13, 1.96it/s]
50%|█████ | 505/1000 [04:19<04:12, 1.96it/s]
51%|█████ | 506/1000 [04:19<04:11, 1.96it/s]
51%|█████ | 507/1000 [04:20<04:11, 1.96it/s]
51%|█████ | 508/1000 [04:20<04:12, 1.95it/s]
51%|█████ | 509/1000 [04:21<04:11, 1.95it/s]
51%|█████ | 510/1000 [04:22<04:10, 1.96it/s]
51%|█████ | 511/1000 [04:22<04:09, 1.96it/s]
51%|█████ | 512/1000 [04:23<04:08, 1.96it/s]
51%|█████▏ | 513/1000 [04:23<04:08, 1.96it/s]
51%|█████▏ | 514/1000 [04:24<04:08, 1.96it/s]
52%|█████▏ | 515/1000 [04:24<04:07, 1.96it/s]
52%|█████▏ | 516/1000 [04:25<04:07, 1.96it/s]
52%|█████▏ | 517/1000 [04:25<04:06, 1.96it/s]
52%|█████▏ | 518/1000 [04:26<04:08, 1.94it/s]
52%|█████▏ | 519/1000 [04:26<04:09, 1.93it/s]
52%|█████▏ | 520/1000 [04:27<04:10, 1.91it/s]
52%|█████▏ | 521/1000 [04:27<04:11, 1.90it/s]
52%|█████▏ | 522/1000 [04:28<04:09, 1.91it/s]
52%|█████▏ | 523/1000 [04:28<04:07, 1.92it/s]
52%|█████▏ | 524/1000 [04:29<04:06, 1.93it/s]
52%|█████▎ | 525/1000 [04:29<04:05, 1.94it/s]
53%|█████▎ | 526/1000 [04:30<04:03, 1.94it/s]
53%|█████▎ | 527/1000 [04:30<04:04, 1.93it/s]
53%|█████▎ | 528/1000 [04:31<04:05, 1.92it/s]
53%|█████▎ | 529/1000 [04:31<04:05, 1.92it/s]
53%|█████▎ | 530/1000 [04:32<04:04, 1.93it/s]
53%|█████▎ | 531/1000 [04:32<04:03, 1.93it/s]
53%|█████▎ | 532/1000 [04:33<04:03, 1.92it/s]
53%|█████▎ | 533/1000 [04:33<04:03, 1.92it/s]
53%|█████▎ | 534/1000 [04:34<04:04, 1.91it/s]
54%|█████▎ | 535/1000 [04:34<04:01, 1.92it/s]
54%|█████▎ | 536/1000 [04:35<04:00, 1.93it/s]
54%|█████▎ | 537/1000 [04:35<03:58, 1.94it/s]
54%|█████▍ | 538/1000 [04:36<03:57, 1.94it/s]
54%|█████▍ | 539/1000 [04:37<03:56, 1.95it/s]
54%|█████▍ | 540/1000 [04:37<03:56, 1.94it/s]
54%|█████▍ | 541/1000 [04:38<03:58, 1.93it/s]
54%|█████▍ | 542/1000 [04:38<03:58, 1.92it/s]
54%|█████▍ | 543/1000 [04:39<03:56, 1.93it/s]
54%|█████▍ | 544/1000 [04:39<03:55, 1.93it/s]
55%|█████▍ | 545/1000 [04:40<03:56, 1.93it/s]
55%|█████▍ | 546/1000 [04:40<03:55, 1.93it/s]
55%|█████▍ | 547/1000 [04:41<03:53, 1.94it/s]
55%|█████▍ | 548/1000 [04:41<03:53, 1.94it/s]
55%|█████▍ | 549/1000 [04:42<03:53, 1.93it/s]
55%|█████▌ | 550/1000 [04:42<03:53, 1.93it/s]
55%|█████▌ | 551/1000 [04:43<03:53, 1.92it/s]
55%|█████▌ | 552/1000 [04:43<03:51, 1.93it/s]
55%|█████▌ | 553/1000 [04:44<03:51, 1.93it/s]
55%|█████▌ | 554/1000 [04:44<03:50, 1.94it/s]
56%|█████▌ | 555/1000 [04:45<03:50, 1.93it/s]
56%|█████▌ | 556/1000 [04:45<03:50, 1.93it/s]
56%|█████▌ | 557/1000 [04:46<03:51, 1.92it/s]
56%|█████▌ | 558/1000 [04:46<03:51, 1.91it/s]
56%|█████▌ | 559/1000 [04:47<03:49, 1.92it/s]
56%|█████▌ | 560/1000 [04:47<03:48, 1.93it/s]
56%|█████▌ | 561/1000 [04:48<03:47, 1.93it/s]
56%|█████▌ | 562/1000 [04:48<03:48, 1.92it/s]
56%|█████▋ | 563/1000 [04:49<03:47, 1.92it/s]
56%|█████▋ | 564/1000 [04:49<03:47, 1.92it/s]
56%|█████▋ | 565/1000 [04:50<03:46, 1.92it/s]
57%|█████▋ | 566/1000 [04:51<03:45, 1.93it/s]
57%|█████▋ | 567/1000 [04:51<03:43, 1.94it/s]
57%|█████▋ | 568/1000 [04:52<03:41, 1.95it/s]
57%|█████▋ | 569/1000 [04:52<03:41, 1.95it/s]
57%|█████▋ | 570/1000 [04:53<03:40, 1.95it/s]
57%|█████▋ | 571/1000 [04:53<03:39, 1.95it/s]
57%|█████▋ | 572/1000 [04:54<03:41, 1.93it/s]
57%|█████▋ | 573/1000 [04:54<03:40, 1.93it/s]
57%|█████▋ | 574/1000 [04:55<03:39, 1.94it/s]
57%|█████▊ | 575/1000 [04:55<03:38, 1.95it/s]
58%|█████▊ | 576/1000 [04:56<03:37, 1.95it/s]
58%|█████▊ | 577/1000 [04:56<03:38, 1.93it/s]
58%|█████▊ | 578/1000 [04:57<03:38, 1.93it/s]
58%|█████▊ | 579/1000 [04:57<03:37, 1.94it/s]
58%|█████▊ | 580/1000 [04:58<03:36, 1.94it/s]
58%|█████▊ | 581/1000 [04:58<03:35, 1.94it/s]
58%|█████▊ | 582/1000 [04:59<03:36, 1.93it/s]
58%|█████▊ | 583/1000 [04:59<03:35, 1.93it/s]
58%|█████▊ | 584/1000 [05:00<03:34, 1.94it/s]
58%|█████▊ | 585/1000 [05:00<03:34, 1.94it/s]
59%|█████▊ | 586/1000 [05:01<03:32, 1.95it/s]
59%|█████▊ | 587/1000 [05:01<03:32, 1.94it/s]
59%|█████▉ | 588/1000 [05:02<03:32, 1.94it/s]
59%|█████▉ | 589/1000 [05:02<03:33, 1.93it/s]
59%|█████▉ | 590/1000 [05:03<03:34, 1.91it/s]
59%|█████▉ | 591/1000 [05:03<03:36, 1.89it/s]
59%|█████▉ | 592/1000 [05:04<03:36, 1.88it/s]
59%|█████▉ | 593/1000 [05:05<03:34, 1.90it/s]
59%|█████▉ | 594/1000 [05:05<03:31, 1.92it/s]
60%|█████▉ | 595/1000 [05:06<03:29, 1.93it/s]
60%|█████▉ | 596/1000 [05:06<03:28, 1.93it/s]
60%|█████▉ | 597/1000 [05:07<03:27, 1.94it/s]
60%|█████▉ | 598/1000 [05:07<03:26, 1.95it/s]
60%|█████▉ | 599/1000 [05:08<03:25, 1.95it/s]
60%|██████ | 600/1000 [05:08<03:27, 1.93it/s]
60%|██████ | 601/1000 [05:09<03:26, 1.93it/s]
60%|██████ | 602/1000 [05:09<03:25, 1.94it/s]
60%|██████ | 603/1000 [05:10<03:24, 1.95it/s]
60%|██████ | 604/1000 [05:10<03:23, 1.95it/s]
60%|██████ | 605/1000 [05:11<03:22, 1.95it/s]
61%|██████ | 606/1000 [05:11<03:23, 1.94it/s]
61%|██████ | 607/1000 [05:12<03:23, 1.93it/s]
61%|██████ | 608/1000 [05:12<03:22, 1.93it/s]
61%|██████ | 609/1000 [05:13<03:22, 1.93it/s]
61%|██████ | 610/1000 [05:13<03:23, 1.92it/s]
61%|██████ | 611/1000 [05:14<03:21, 1.93it/s]
61%|██████ | 612/1000 [05:14<03:21, 1.93it/s]
61%|██████▏ | 613/1000 [05:15<03:19, 1.94it/s]
61%|██████▏ | 614/1000 [05:15<03:18, 1.95it/s]
62%|██████▏ | 615/1000 [05:16<03:17, 1.95it/s]
62%|██████▏ | 616/1000 [05:16<03:16, 1.95it/s]
62%|██████▏ | 617/1000 [05:17<03:16, 1.95it/s]
62%|██████▏ | 618/1000 [05:17<03:17, 1.93it/s]
62%|██████▏ | 619/1000 [05:18<03:17, 1.92it/s]
62%|██████▏ | 620/1000 [05:18<03:19, 1.90it/s]
62%|██████▏ | 621/1000 [05:19<03:21, 1.88it/s]
62%|██████▏ | 622/1000 [05:20<03:19, 1.90it/s]
62%|██████▏ | 623/1000 [05:20<03:17, 1.91it/s]
62%|██████▏ | 624/1000 [05:21<03:15, 1.92it/s]
62%|██████▎ | 625/1000 [05:21<03:13, 1.93it/s]
63%|██████▎ | 626/1000 [05:22<03:12, 1.94it/s]
63%|██████▎ | 627/1000 [05:22<03:14, 1.91it/s]
63%|██████▎ | 628/1000 [05:23<03:12, 1.93it/s]
63%|██████▎ | 629/1000 [05:23<03:11, 1.94it/s]
63%|██████▎ | 630/1000 [05:24<03:09, 1.95it/s]
63%|██████▎ | 631/1000 [05:24<03:09, 1.95it/s]
63%|██████▎ | 632/1000 [05:25<03:08, 1.95it/s]
63%|██████▎ | 633/1000 [05:25<03:11, 1.92it/s]
63%|██████▎ | 634/1000 [05:26<03:12, 1.90it/s]
64%|██████▎ | 635/1000 [05:26<03:10, 1.92it/s]
64%|██████▎ | 636/1000 [05:27<03:08, 1.93it/s]
64%|██████▎ | 637/1000 [05:27<03:07, 1.94it/s]
64%|██████▍ | 638/1000 [05:28<03:06, 1.94it/s]
64%|██████▍ | 639/1000 [05:28<03:05, 1.94it/s]
64%|██████▍ | 640/1000 [05:29<03:05, 1.94it/s]
64%|██████▍ | 641/1000 [05:29<03:05, 1.94it/s]
64%|██████▍ | 642/1000 [05:30<03:06, 1.92it/s]
64%|██████▍ | 643/1000 [05:30<03:05, 1.92it/s]
64%|██████▍ | 644/1000 [05:31<03:05, 1.92it/s]
64%|██████▍ | 645/1000 [05:31<03:05, 1.91it/s]
65%|██████▍ | 646/1000 [05:32<03:04, 1.92it/s]
65%|██████▍ | 647/1000 [05:32<03:02, 1.93it/s]
65%|██████▍ | 648/1000 [05:33<03:01, 1.94it/s]
65%|██████▍ | 649/1000 [05:33<03:00, 1.94it/s]
65%|██████▌ | 650/1000 [05:34<03:01, 1.93it/s]
65%|██████▌ | 651/1000 [05:35<03:01, 1.92it/s]
65%|██████▌ | 652/1000 [05:35<02:59, 1.93it/s]
65%|██████▌ | 653/1000 [05:36<02:58, 1.94it/s]
65%|██████▌ | 654/1000 [05:36<02:58, 1.94it/s]
66%|██████▌ | 655/1000 [05:37<02:57, 1.94it/s]
66%|██████▌ | 656/1000 [05:37<02:57, 1.93it/s]
66%|██████▌ | 657/1000 [05:38<02:58, 1.92it/s]
66%|██████▌ | 658/1000 [05:38<02:57, 1.93it/s]
66%|██████▌ | 659/1000 [05:39<02:56, 1.94it/s]
66%|██████▌ | 660/1000 [05:39<02:56, 1.93it/s]
66%|██████▌ | 661/1000 [05:40<02:56, 1.92it/s]
66%|██████▌ | 662/1000 [05:40<02:56, 1.92it/s]
66%|██████▋ | 663/1000 [05:41<02:56, 1.91it/s]
66%|██████▋ | 664/1000 [05:41<02:55, 1.92it/s]
66%|██████▋ | 665/1000 [05:42<02:54, 1.92it/s]
67%|██████▋ | 666/1000 [05:42<02:54, 1.92it/s]
67%|██████▋ | 667/1000 [05:43<02:53, 1.92it/s]
67%|██████▋ | 668/1000 [05:43<02:52, 1.92it/s]
67%|██████▋ | 669/1000 [05:44<02:52, 1.92it/s]
67%|██████▋ | 670/1000 [05:44<02:51, 1.92it/s]
67%|██████▋ | 671/1000 [05:45<02:51, 1.92it/s]
67%|██████▋ | 672/1000 [05:45<02:52, 1.90it/s]
67%|██████▋ | 673/1000 [05:46<02:51, 1.90it/s]
67%|██████▋ | 674/1000 [05:46<02:50, 1.91it/s]
68%|██████▊ | 675/1000 [05:47<02:49, 1.91it/s]
68%|██████▊ | 676/1000 [05:48<02:49, 1.92it/s]
68%|██████▊ | 677/1000 [05:48<02:48, 1.91it/s]
68%|██████▊ | 678/1000 [05:49<02:47, 1.92it/s]
68%|██████▊ | 679/1000 [05:49<02:47, 1.92it/s]
68%|██████▊ | 680/1000 [05:50<02:46, 1.92it/s]
68%|██████▊ | 681/1000 [05:50<02:46, 1.92it/s]
68%|██████▊ | 682/1000 [05:51<02:45, 1.92it/s]
68%|██████▊ | 683/1000 [05:51<02:45, 1.92it/s]
68%|██████▊ | 684/1000 [05:52<02:44, 1.92it/s]
68%|██████▊ | 685/1000 [05:52<02:45, 1.90it/s]
69%|██████▊ | 686/1000 [05:53<02:44, 1.91it/s]
69%|██████▊ | 687/1000 [05:53<02:43, 1.91it/s]
69%|██████▉ | 688/1000 [05:54<02:43, 1.91it/s]
69%|██████▉ | 689/1000 [05:54<02:42, 1.92it/s]
69%|██████▉ | 690/1000 [05:55<02:41, 1.92it/s]
69%|██████▉ | 691/1000 [05:55<02:41, 1.92it/s]
69%|██████▉ | 692/1000 [05:56<02:40, 1.92it/s]
69%|██████▉ | 693/1000 [05:56<02:40, 1.92it/s]
69%|██████▉ | 694/1000 [05:57<02:39, 1.92it/s]
70%|██████▉ | 695/1000 [05:57<02:38, 1.92it/s]
70%|██████▉ | 696/1000 [05:58<02:38, 1.92it/s]
70%|██████▉ | 697/1000 [05:59<02:39, 1.91it/s]
70%|██████▉ | 698/1000 [05:59<02:38, 1.91it/s]
70%|██████▉ | 699/1000 [06:00<02:37, 1.91it/s]
70%|███████ | 700/1000 [06:00<02:36, 1.92it/s]
70%|███████ | 701/1000 [06:01<02:35, 1.92it/s]
70%|███████ | 702/1000 [06:01<02:35, 1.91it/s]
70%|███████ | 703/1000 [06:02<02:36, 1.90it/s]
70%|███████ | 704/1000 [06:02<02:36, 1.90it/s]
70%|███████ | 705/1000 [06:03<02:35, 1.90it/s]
71%|███████ | 706/1000 [06:03<02:35, 1.90it/s]
71%|███████ | 707/1000 [06:04<02:35, 1.88it/s]
71%|███████ | 708/1000 [06:04<02:34, 1.89it/s]
71%|███████ | 709/1000 [06:05<02:33, 1.89it/s]
71%|███████ | 710/1000 [06:05<02:33, 1.89it/s]
71%|███████ | 711/1000 [06:06<02:32, 1.89it/s]
71%|███████ | 712/1000 [06:06<02:31, 1.90it/s]
71%|███████▏ | 713/1000 [06:07<02:31, 1.90it/s]
71%|███████▏ | 714/1000 [06:07<02:33, 1.87it/s]
72%|███████▏ | 715/1000 [06:08<02:32, 1.87it/s]
72%|███████▏ | 716/1000 [06:09<02:32, 1.87it/s]
72%|███████▏ | 717/1000 [06:09<02:31, 1.86it/s]
72%|███████▏ | 718/1000 [06:10<02:31, 1.86it/s]
72%|███████▏ | 719/1000 [06:10<02:30, 1.87it/s]
72%|███████▏ | 720/1000 [06:11<02:28, 1.88it/s]
72%|███████▏ | 721/1000 [06:11<02:27, 1.89it/s]
72%|███████▏ | 722/1000 [06:12<02:27, 1.89it/s]
72%|███████▏ | 723/1000 [06:12<02:26, 1.89it/s]
72%|███████▏ | 724/1000 [06:13<02:25, 1.90it/s]
72%|███████▎ | 725/1000 [06:13<02:24, 1.91it/s]
73%|███████▎ | 726/1000 [06:14<02:23, 1.91it/s]
73%|███████▎ | 727/1000 [06:14<02:22, 1.91it/s]
73%|███████▎ | 728/1000 [06:15<02:21, 1.92it/s]
73%|███████▎ | 729/1000 [06:15<02:22, 1.91it/s]
73%|███████▎ | 730/1000 [06:16<02:22, 1.89it/s]
73%|███████▎ | 731/1000 [06:16<02:22, 1.89it/s]
73%|███████▎ | 732/1000 [06:17<02:20, 1.90it/s]
73%|███████▎ | 733/1000 [06:18<02:19, 1.91it/s]
73%|███████▎ | 734/1000 [06:18<02:19, 1.91it/s]
74%|███████▎ | 735/1000 [06:19<02:17, 1.93it/s]
74%|███████▎ | 736/1000 [06:19<02:16, 1.94it/s]
74%|███████▎ | 737/1000 [06:20<02:15, 1.94it/s]
74%|███████▍ | 738/1000 [06:20<02:14, 1.95it/s]
74%|███████▍ | 739/1000 [06:21<02:13, 1.95it/s]
74%|███████▍ | 740/1000 [06:21<02:13, 1.95it/s]
74%|███████▍ | 741/1000 [06:22<02:12, 1.96it/s]
74%|███████▍ | 742/1000 [06:22<02:13, 1.94it/s]
74%|███████▍ | 743/1000 [06:23<02:12, 1.94it/s]
74%|███████▍ | 744/1000 [06:23<02:11, 1.94it/s]
74%|███████▍ | 745/1000 [06:24<02:12, 1.93it/s]
75%|███████▍ | 746/1000 [06:24<02:12, 1.92it/s]
75%|███████▍ | 747/1000 [06:25<02:11, 1.93it/s]
75%|███████▍ | 748/1000 [06:25<02:10, 1.93it/s]
75%|███████▍ | 749/1000 [06:26<02:09, 1.93it/s]
75%|███████▌ | 750/1000 [06:26<02:09, 1.93it/s]
75%|███████▌ | 751/1000 [06:27<02:09, 1.92it/s]
75%|███████▌ | 752/1000 [06:27<02:09, 1.91it/s]
75%|███████▌ | 753/1000 [06:28<02:09, 1.91it/s]
75%|███████▌ | 754/1000 [06:28<02:07, 1.93it/s]
76%|███████▌ | 755/1000 [06:29<02:06, 1.93it/s]
76%|███████▌ | 756/1000 [06:29<02:05, 1.94it/s]
76%|███████▌ | 757/1000 [06:30<02:04, 1.95it/s]
76%|███████▌ | 758/1000 [06:30<02:04, 1.95it/s]
76%|███████▌ | 759/1000 [06:31<02:03, 1.95it/s]
76%|███████▌ | 760/1000 [06:31<02:02, 1.96it/s]
76%|███████▌ | 761/1000 [06:32<02:02, 1.96it/s]
76%|███████▌ | 762/1000 [06:32<02:01, 1.96it/s]
76%|███████▋ | 763/1000 [06:33<02:00, 1.96it/s]
76%|███████▋ | 764/1000 [06:33<02:00, 1.95it/s]
76%|███████▋ | 765/1000 [06:34<02:00, 1.95it/s]
77%|███████▋ | 766/1000 [06:35<02:00, 1.95it/s]
77%|███████▋ | 767/1000 [06:35<01:59, 1.94it/s]
77%|███████▋ | 768/1000 [06:36<02:00, 1.92it/s]
77%|███████▋ | 769/1000 [06:36<02:00, 1.91it/s]
77%|███████▋ | 770/1000 [06:37<02:00, 1.91it/s]
77%|███████▋ | 771/1000 [06:37<01:59, 1.91it/s]
77%|███████▋ | 772/1000 [06:38<02:00, 1.90it/s]
77%|███████▋ | 773/1000 [06:38<02:00, 1.89it/s]
77%|███████▋ | 774/1000 [06:39<01:58, 1.90it/s]
78%|███████▊ | 775/1000 [06:39<01:57, 1.91it/s]
78%|███████▊ | 776/1000 [06:40<01:57, 1.91it/s]
78%|███████▊ | 777/1000 [06:40<01:56, 1.91it/s]
78%|███████▊ | 778/1000 [06:41<01:55, 1.92it/s]
78%|███████▊ | 779/1000 [06:41<01:54, 1.93it/s]
78%|███████▊ | 780/1000 [06:42<01:53, 1.93it/s]
78%|███████▊ | 781/1000 [06:42<01:52, 1.94it/s]
78%|███████▊ | 782/1000 [06:43<01:52, 1.95it/s]
78%|███████▊ | 783/1000 [06:43<01:52, 1.93it/s]
78%|███████▊ | 784/1000 [06:44<01:51, 1.94it/s]
78%|███████▊ | 785/1000 [06:44<01:50, 1.95it/s]
79%|███████▊ | 786/1000 [06:45<01:49, 1.95it/s]
79%|███████▊ | 787/1000 [06:45<01:48, 1.96it/s]
79%|███████▉ | 788/1000 [06:46<01:48, 1.95it/s]
79%|███████▉ | 789/1000 [06:46<01:47, 1.96it/s]
79%|███████▉ | 790/1000 [06:47<01:47, 1.96it/s]
79%|███████▉ | 791/1000 [06:47<01:46, 1.96it/s]
79%|███████▉ | 792/1000 [06:48<01:46, 1.95it/s]
79%|███████▉ | 793/1000 [06:48<01:46, 1.95it/s]
79%|███████▉ | 794/1000 [06:49<01:45, 1.96it/s]
80%|███████▉ | 795/1000 [06:50<01:44, 1.96it/s]
80%|███████▉ | 796/1000 [06:50<01:47, 1.90it/s]
80%|███████▉ | 797/1000 [06:51<01:46, 1.90it/s]
80%|███████▉ | 798/1000 [06:51<01:45, 1.91it/s]
80%|███████▉ | 799/1000 [06:52<01:45, 1.90it/s]
80%|████████ | 800/1000 [06:52<01:45, 1.90it/s]
80%|████████ | 801/1000 [06:53<01:44, 1.91it/s]
80%|████████ | 802/1000 [06:53<01:43, 1.92it/s]
80%|████████ | 803/1000 [06:54<01:43, 1.91it/s]
80%|████████ | 804/1000 [06:54<01:43, 1.90it/s]
80%|████████ | 805/1000 [06:55<01:42, 1.91it/s]
81%|████████ | 806/1000 [06:55<01:42, 1.89it/s]
81%|████████ | 807/1000 [06:56<01:41, 1.89it/s]
81%|████████ | 808/1000 [06:56<01:41, 1.90it/s]
81%|████████ | 809/1000 [06:57<01:40, 1.91it/s]
81%|████████ | 810/1000 [06:57<01:40, 1.90it/s]
81%|████████ | 811/1000 [06:58<01:39, 1.89it/s]
81%|████████ | 812/1000 [06:58<01:39, 1.89it/s]
81%|████████▏ | 813/1000 [06:59<01:38, 1.90it/s]
81%|████████▏ | 814/1000 [07:00<01:37, 1.91it/s]
82%|████████▏ | 815/1000 [07:00<01:37, 1.90it/s]
82%|████████▏ | 816/1000 [07:01<01:37, 1.89it/s]
82%|████████▏ | 817/1000 [07:01<01:36, 1.90it/s]
82%|████████▏ | 818/1000 [07:02<01:35, 1.90it/s]
82%|████████▏ | 819/1000 [07:02<01:35, 1.90it/s]
82%|████████▏ | 820/1000 [07:03<01:34, 1.91it/s]
82%|████████▏ | 821/1000 [07:03<01:34, 1.90it/s]
82%|████████▏ | 822/1000 [07:04<01:33, 1.90it/s]
82%|████████▏ | 823/1000 [07:04<01:32, 1.90it/s]
82%|████████▏ | 824/1000 [07:05<01:32, 1.89it/s]
82%|████████▎ | 825/1000 [07:05<01:32, 1.90it/s]
83%|████████▎ | 826/1000 [07:06<01:31, 1.90it/s]
83%|████████▎ | 827/1000 [07:06<01:30, 1.90it/s]
83%|████████▎ | 828/1000 [07:07<01:30, 1.91it/s]
83%|████████▎ | 829/1000 [07:07<01:29, 1.91it/s]
83%|████████▎ | 830/1000 [07:08<01:30, 1.89it/s]
83%|████████▎ | 831/1000 [07:08<01:29, 1.90it/s]
83%|████████▎ | 832/1000 [07:09<01:28, 1.90it/s]
83%|████████▎ | 833/1000 [07:10<01:27, 1.91it/s]
83%|████████▎ | 834/1000 [07:10<01:26, 1.91it/s]
84%|████████▎ | 835/1000 [07:11<01:26, 1.91it/s]
84%|████████▎ | 836/1000 [07:11<01:25, 1.91it/s]
84%|████████▎ | 837/1000 [07:12<01:25, 1.91it/s]
84%|████████▍ | 838/1000 [07:12<01:24, 1.91it/s]
84%|████████▍ | 839/1000 [07:13<01:24, 1.92it/s]
84%|████████▍ | 840/1000 [07:13<01:23, 1.92it/s]
84%|████████▍ | 841/1000 [07:14<01:22, 1.92it/s]
84%|████████▍ | 842/1000 [07:14<01:22, 1.92it/s]
84%|████████▍ | 843/1000 [07:15<01:21, 1.92it/s]
84%|████████▍ | 844/1000 [07:15<01:21, 1.92it/s]
84%|████████▍ | 845/1000 [07:16<01:21, 1.90it/s]
85%|████████▍ | 846/1000 [07:16<01:20, 1.91it/s]
85%|████████▍ | 847/1000 [07:17<01:20, 1.91it/s]
85%|████████▍ | 848/1000 [07:17<01:19, 1.91it/s]
85%|████████▍ | 849/1000 [07:18<01:19, 1.91it/s]
85%|████████▌ | 850/1000 [07:18<01:19, 1.90it/s]
85%|████████▌ | 851/1000 [07:19<01:18, 1.90it/s]
85%|████████▌ | 852/1000 [07:19<01:17, 1.91it/s]
85%|████████▌ | 853/1000 [07:20<01:16, 1.92it/s]
85%|████████▌ | 854/1000 [07:20<01:15, 1.93it/s]
86%|████████▌ | 855/1000 [07:21<01:14, 1.94it/s]
86%|████████▌ | 856/1000 [07:22<01:14, 1.94it/s]
86%|████████▌ | 857/1000 [07:22<01:14, 1.93it/s]
86%|████████▌ | 858/1000 [07:23<01:13, 1.94it/s]
86%|████████▌ | 859/1000 [07:23<01:12, 1.94it/s]
86%|████████▌ | 860/1000 [07:24<01:12, 1.94it/s]
86%|████████▌ | 861/1000 [07:24<01:11, 1.93it/s]
86%|████████▌ | 862/1000 [07:25<01:11, 1.93it/s]
86%|████████▋ | 863/1000 [07:25<01:10, 1.94it/s]
86%|████████▋ | 864/1000 [07:26<01:10, 1.94it/s]
86%|████████▋ | 865/1000 [07:26<01:10, 1.92it/s]
87%|████████▋ | 866/1000 [07:27<01:09, 1.92it/s]
87%|████████▋ | 867/1000 [07:27<01:09, 1.92it/s]
87%|████████▋ | 868/1000 [07:28<01:08, 1.92it/s]
87%|████████▋ | 869/1000 [07:28<01:09, 1.90it/s]
87%|████████▋ | 870/1000 [07:29<01:08, 1.91it/s]
87%|████████▋ | 871/1000 [07:29<01:07, 1.92it/s]
87%|████████▋ | 872/1000 [07:30<01:06, 1.93it/s]
87%|████████▋ | 873/1000 [07:30<01:05, 1.94it/s]
87%|████████▋ | 874/1000 [07:31<01:05, 1.93it/s]
88%|████████▊ | 875/1000 [07:31<01:04, 1.94it/s]
88%|████████▊ | 876/1000 [07:32<01:04, 1.93it/s]
88%|████████▊ | 877/1000 [07:32<01:03, 1.93it/s]
88%|████████▊ | 878/1000 [07:33<01:03, 1.93it/s]
88%|████████▊ | 879/1000 [07:33<01:02, 1.94it/s]
88%|████████▊ | 880/1000 [07:34<01:01, 1.94it/s]
88%|████████▊ | 881/1000 [07:34<01:01, 1.94it/s]
88%|████████▊ | 882/1000 [07:35<01:01, 1.93it/s]
88%|████████▊ | 883/1000 [07:36<01:00, 1.94it/s]
88%|████████▊ | 884/1000 [07:36<01:01, 1.89it/s]
88%|████████▊ | 885/1000 [07:37<01:00, 1.89it/s]
89%|████████▊ | 886/1000 [07:37<01:00, 1.89it/s]
89%|████████▊ | 887/1000 [07:38<00:59, 1.89it/s]
89%|████████▉ | 888/1000 [07:38<00:59, 1.90it/s]
89%|████████▉ | 889/1000 [07:39<00:58, 1.91it/s]
89%|████████▉ | 890/1000 [07:39<00:57, 1.91it/s]
89%|████████▉ | 891/1000 [07:40<00:57, 1.91it/s]
89%|████████▉ | 892/1000 [07:40<00:56, 1.92it/s]
89%|████████▉ | 893/1000 [07:41<00:55, 1.93it/s]
89%|████████▉ | 894/1000 [07:41<00:54, 1.94it/s]
90%|████████▉ | 895/1000 [07:42<00:54, 1.94it/s]
90%|████████▉ | 896/1000 [07:42<00:54, 1.92it/s]
90%|████████▉ | 897/1000 [07:43<00:53, 1.92it/s]
90%|████████▉ | 898/1000 [07:43<00:52, 1.93it/s]
90%|████████▉ | 899/1000 [07:44<00:52, 1.94it/s]
90%|█████████ | 900/1000 [07:44<00:51, 1.95it/s]
90%|█████████ | 901/1000 [07:45<00:50, 1.95it/s]
90%|█████████ | 902/1000 [07:45<00:50, 1.95it/s]
90%|█████████ | 903/1000 [07:46<00:49, 1.95it/s]
90%|█████████ | 904/1000 [07:46<00:49, 1.95it/s]
90%|█████████ | 905/1000 [07:47<00:48, 1.95it/s]
91%|█████████ | 906/1000 [07:47<00:48, 1.95it/s]
91%|█████████ | 907/1000 [07:48<00:47, 1.96it/s]
91%|█████████ | 908/1000 [07:48<00:47, 1.96it/s]
91%|█████████ | 909/1000 [07:49<00:46, 1.96it/s]
91%|█████████ | 910/1000 [07:49<00:45, 1.96it/s]
91%|█████████ | 911/1000 [07:50<00:45, 1.96it/s]
91%|█████████ | 912/1000 [07:51<00:44, 1.96it/s]
91%|█████████▏| 913/1000 [07:51<00:44, 1.96it/s]
91%|█████████▏| 914/1000 [07:52<00:43, 1.96it/s]
92%|█████████▏| 915/1000 [07:52<00:43, 1.95it/s]
92%|█████████▏| 916/1000 [07:53<00:43, 1.94it/s]
92%|█████████▏| 917/1000 [07:53<00:42, 1.94it/s]
92%|█████████▏| 918/1000 [07:54<00:42, 1.94it/s]
92%|█████████▏| 919/1000 [07:54<00:41, 1.95it/s]
92%|█████████▏| 920/1000 [07:55<00:41, 1.95it/s]
92%|█████████▏| 921/1000 [07:55<00:40, 1.95it/s]
92%|█████████▏| 922/1000 [07:56<00:39, 1.95it/s]
92%|█████████▏| 923/1000 [07:56<00:39, 1.95it/s]
92%|█████████▏| 924/1000 [07:57<00:38, 1.95it/s]
92%|█████████▎| 925/1000 [07:57<00:38, 1.95it/s]
93%|█████████▎| 926/1000 [07:58<00:37, 1.96it/s]
93%|█████████▎| 927/1000 [07:58<00:37, 1.96it/s]
93%|█████████▎| 928/1000 [07:59<00:36, 1.95it/s]
93%|█████████▎| 929/1000 [07:59<00:36, 1.95it/s]
93%|█████████▎| 930/1000 [08:00<00:35, 1.95it/s]
93%|█████████▎| 931/1000 [08:00<00:35, 1.95it/s]
93%|█████████▎| 932/1000 [08:01<00:34, 1.96it/s]
93%|█████████▎| 933/1000 [08:01<00:34, 1.96it/s]
93%|█████████▎| 934/1000 [08:02<00:33, 1.96it/s]
94%|█████████▎| 935/1000 [08:02<00:33, 1.96it/s]
94%|█████████▎| 936/1000 [08:03<00:32, 1.96it/s]
94%|█████████▎| 937/1000 [08:03<00:32, 1.94it/s]
94%|█████████▍| 938/1000 [08:04<00:31, 1.95it/s]
94%|█████████▍| 939/1000 [08:04<00:31, 1.95it/s]
94%|█████████▍| 940/1000 [08:05<00:30, 1.95it/s]
94%|█████████▍| 941/1000 [08:05<00:30, 1.95it/s]
94%|█████████▍| 942/1000 [08:06<00:29, 1.96it/s]
94%|█████████▍| 943/1000 [08:06<00:29, 1.96it/s]
94%|█████████▍| 944/1000 [08:07<00:28, 1.95it/s]
94%|█████████▍| 945/1000 [08:07<00:28, 1.95it/s]
95%|█████████▍| 946/1000 [08:08<00:27, 1.96it/s]
95%|█████████▍| 947/1000 [08:08<00:27, 1.95it/s]
95%|█████████▍| 948/1000 [08:09<00:26, 1.95it/s]
95%|█████████▍| 949/1000 [08:09<00:26, 1.96it/s]
95%|█████████▌| 950/1000 [08:10<00:25, 1.96it/s]
95%|█████████▌| 951/1000 [08:10<00:25, 1.96it/s]
95%|█████████▌| 952/1000 [08:11<00:24, 1.96it/s]
95%|█████████▌| 953/1000 [08:12<00:24, 1.96it/s]
95%|█████████▌| 954/1000 [08:12<00:23, 1.96it/s]
96%|█████████▌| 955/1000 [08:13<00:22, 1.96it/s]
96%|█████████▌| 956/1000 [08:13<00:22, 1.96it/s]
96%|█████████▌| 957/1000 [08:14<00:21, 1.96it/s]
96%|█████████▌| 958/1000 [08:14<00:21, 1.96it/s]
96%|█████████▌| 959/1000 [08:15<00:20, 1.96it/s]
96%|█████████▌| 960/1000 [08:15<00:20, 1.96it/s]
96%|█████████▌| 961/1000 [08:16<00:19, 1.96it/s]
96%|█████████▌| 962/1000 [08:16<00:19, 1.96it/s]
96%|█████████▋| 963/1000 [08:17<00:18, 1.96it/s]
96%|█████████▋| 964/1000 [08:17<00:18, 1.96it/s]
96%|█████████▋| 965/1000 [08:18<00:17, 1.96it/s]
97%|█████████▋| 966/1000 [08:18<00:17, 1.96it/s]
97%|█████████▋| 967/1000 [08:19<00:16, 1.95it/s]
97%|█████████▋| 968/1000 [08:19<00:16, 1.95it/s]
97%|█████████▋| 969/1000 [08:20<00:15, 1.96it/s]
97%|█████████▋| 970/1000 [08:20<00:15, 1.96it/s]
97%|█████████▋| 971/1000 [08:21<00:14, 1.96it/s]
97%|█████████▋| 972/1000 [08:21<00:14, 1.96it/s]
97%|█████████▋| 973/1000 [08:22<00:13, 1.96it/s]
97%|█████████▋| 974/1000 [08:22<00:13, 1.96it/s]
98%|█████████▊| 975/1000 [08:23<00:12, 1.96it/s]
98%|█████████▊| 976/1000 [08:23<00:12, 1.96it/s]
98%|█████████▊| 977/1000 [08:24<00:11, 1.96it/s]
98%|█████████▊| 978/1000 [08:24<00:11, 1.95it/s]
98%|█████████▊| 979/1000 [08:25<00:10, 1.95it/s]
98%|█████████▊| 980/1000 [08:25<00:10, 1.95it/s]
98%|█████████▊| 981/1000 [08:26<00:09, 1.95it/s]
98%|█████████▊| 982/1000 [08:26<00:09, 1.95it/s]
98%|█████████▊| 983/1000 [08:27<00:08, 1.95it/s]
98%|█████████▊| 984/1000 [08:27<00:08, 1.94it/s]
98%|█████████▊| 985/1000 [08:28<00:07, 1.94it/s]
99%|█████████▊| 986/1000 [08:28<00:07, 1.93it/s]
99%|█████████▊| 987/1000 [08:29<00:06, 1.93it/s]
99%|█████████▉| 988/1000 [08:29<00:06, 1.93it/s]
99%|█████████▉| 989/1000 [08:30<00:05, 1.94it/s]
99%|█████████▉| 990/1000 [08:30<00:05, 1.94it/s]
99%|█████████▉| 991/1000 [08:31<00:04, 1.94it/s]
99%|█████████▉| 992/1000 [08:31<00:04, 1.94it/s]
99%|█████████▉| 993/1000 [08:32<00:03, 1.94it/s]
99%|█████████▉| 994/1000 [08:33<00:03, 1.94it/s]
100%|█████████▉| 995/1000 [08:33<00:02, 1.93it/s]
100%|█████████▉| 996/1000 [08:34<00:02, 1.94it/s]
100%|█████████▉| 997/1000 [08:34<00:01, 1.94it/s]
100%|█████████▉| 998/1000 [08:35<00:01, 1.94it/s]
100%|█████████▉| 999/1000 [08:35<00:00, 1.93it/s]
100%|██████████| 1000/1000 [08:36<00:00, 1.93it/s]
100%|██████████| 1000/1000 [08:36<00:00, 1.94it/s]
Integration complete.
Step 6: Plot the Results¶
We have saved the data into arrays, a_arr, e_arr & inc_arr that have shape (1,000, n_clones+1), such that we have 1,000 data points for the nominal orbit in, e.g., a_arr[:,0], and then 1,000 data points for each of the clones in , e.g., a_arr[:,1:].
We use these arrays to plot the orbital evolution of the nominal orbit (red, bold) and the clones (gray, transparent), showing how the orbital uncertainty spreads over 10 million years.
# Semi-major axis vs time
fig, ax = plt.subplots(figsize=(12, 5))
for j in range(1, n_test): # clones
ax.plot(times_yr, a_arr[:, j], color='gray', linewidth=0.5, alpha=0.3, label=f'Clones' if j == 1 else None )
ax.plot(times_yr, a_arr[:, 0], color='red', linewidth=1.0, label='Nominal')
ax.set_xlabel('Time (years)')
ax.set_ylabel('Semi-major axis (AU)')
ax.set_title(f'{object_name}: Semi-major axis evolution')
ax.legend()
plt.tight_layout()
plt.show()
# Eccentricity vs time
fig, ax = plt.subplots(figsize=(12, 5))
for j in range(1, n_test): # clones
ax.plot(times_yr, e_arr[:, j], color='gray', linewidth=0.5, alpha=0.3, label=f'Clones' if j == 1 else None )
ax.plot(times_yr, e_arr[:, 0], color='red', linewidth=1.0, label='Nominal')
ax.set_xlabel('Time (years)')
ax.set_ylabel('Eccentricity')
ax.set_title(f'{object_name}: Eccentricity evolution')
ax.legend()
plt.tight_layout()
plt.show()
# Inclination vs time
fig, ax = plt.subplots(figsize=(12, 5))
for j in range(1, n_test): # clones
ax.plot(times_yr, inc_arr[:, j], color='gray', linewidth=0.5, alpha=0.3, label=f'Clones' if j == 1 else None )
ax.plot(times_yr, inc_arr[:, 0], color='red', linewidth=1.0, label='Nominal')
ax.set_xlabel('Time (years)')
ax.set_ylabel('Inclination (degrees)')
ax.set_title(f'{object_name}: Inclination evolution')
ax.legend()
plt.tight_layout()
plt.show()
# (a, e) scatter: initial vs final epoch
fig, ax = plt.subplots(figsize=(8, 6))
# All epochs
ax.scatter(a_arr[:,1:], e_arr[:,1:], color='gray', marker='.', s=20, label='Clones: (All epochs)', zorder=0)
ax.scatter(a_arr[:,0], e_arr[:,0], color='black', marker='.', s=20, label='Nominal: (All epochs)', zorder=1)
# Initial epoch (first output)
ax.scatter(a_arr[0, 1:], e_arr[0, 1:], color='steelblue', alpha=0.7, s=40, label='Clones (initial)', zorder=2)
ax.scatter(a_arr[0, 0], e_arr[0, 0], color='darkblue', marker='*',s=200, label='Nominal (initial)', zorder=3)
# Final epoch (last output)
ax.scatter(a_arr[-1, 1:], e_arr[-1, 1:], color='coral', alpha=0.7,s=40, label='Clones (final)', zorder=2)
ax.scatter(a_arr[-1, 0], e_arr[-1, 0], color='darkred', marker='*',s=200, label='Nominal (final)', zorder=3)
ax.set_xlabel('Semi-major axis (AU)')
ax.set_ylabel('Eccentricity')
ax.set_title(f'{object_name}: (a, e) evolution')
ax.legend()
plt.tight_layout()
plt.show()
Summary¶
In this tutorial we:
- Fetched the orbit of Sedna from the MPC Orbits API
- Parsed it with the
mpc_orbpackage to access Cartesian state vectors and the full covariance matrix - Sampled 100 orbital clones from the covariance matrix using multivariate normal sampling
- Built a Rebound N-body simulation with the Sun, 4 planets, and all test particles
- Integrated the system forward for 10 million years using the WHFast symplectic integrator
- Plotted the orbital evolution to visualize how uncertainty propagates over time
The spread of the clones over time shows how even small uncertainties in the initial orbit can lead to divergent trajectories over long timescales.
Further Resources¶
For questions or feedback, contact the MPC via the Jira Helpdesk.