From 2572e14891779543e7e0b9e4135ec480208c9c41 Mon Sep 17 00:00:00 2001 From: Melissa DeLucchi Date: Mon, 21 Oct 2024 09:46:48 -0400 Subject: [PATCH] Support reading a file to pyarrow table in catalog import --- src/hats_import/catalog/file_readers.py | 30 ++- src/hats_import/catalog/map_reduce.py | 115 +++++------ src/hats_import/index/map_reduce.py | 7 +- .../dataset/Norder=0/Dir=0/Npix=11.parquet | Bin 8913 -> 7585 bytes .../dataset/_common_metadata | Bin 3983 -> 2655 bytes .../dataset/_metadata | Bin 5175 -> 3775 bytes .../data/small_sky_object_catalog/properties | 6 +- .../dataset/Norder=0/Dir=0/Npix=4.parquet | Bin 11523 -> 10183 bytes .../dataset/Norder=1/Dir=0/Npix=47.parquet | Bin 137676 -> 136336 bytes .../dataset/Norder=2/Dir=0/Npix=176.parquet | Bin 29117 -> 27777 bytes .../dataset/Norder=2/Dir=0/Npix=177.parquet | Bin 89086 -> 87748 bytes .../dataset/Norder=2/Dir=0/Npix=178.parquet | Bin 95714 -> 94376 bytes .../dataset/Norder=2/Dir=0/Npix=179.parquet | Bin 103119 -> 101781 bytes .../dataset/Norder=2/Dir=0/Npix=180.parquet | Bin 43359 -> 42019 bytes .../dataset/Norder=2/Dir=0/Npix=181.parquet | Bin 56287 -> 54951 bytes .../dataset/Norder=2/Dir=0/Npix=182.parquet | Bin 75097 -> 73763 bytes .../dataset/Norder=2/Dir=0/Npix=183.parquet | Bin 69687 -> 68353 bytes .../dataset/Norder=2/Dir=0/Npix=184.parquet | Bin 82739 -> 81405 bytes .../dataset/Norder=2/Dir=0/Npix=185.parquet | Bin 167156 -> 165816 bytes .../dataset/Norder=2/Dir=0/Npix=186.parquet | Bin 32523 -> 31183 bytes .../dataset/Norder=2/Dir=0/Npix=187.parquet | Bin 44887 -> 43547 bytes .../dataset/_common_metadata | Bin 5490 -> 4150 bytes .../dataset/_metadata | Bin 30446 -> 27664 bytes .../data/small_sky_source_catalog/properties | 6 +- tests/hats_import/catalog/test_map_reduce.py | 3 +- tests/hats_import/catalog/test_run_import.py | 3 +- .../catalog/test_run_round_trip.py | 189 ++++++++++++++++-- .../index/test_index_map_reduce.py | 2 +- tests/hats_import/index/test_run_index.py | 2 +- .../margin_cache/test_margin_cache.py | 2 +- 30 files changed, 271 insertions(+), 94 deletions(-) diff --git a/src/hats_import/catalog/file_readers.py b/src/hats_import/catalog/file_readers.py index 40c05be5..68a1fafc 100644 --- a/src/hats_import/catalog/file_readers.py +++ b/src/hats_import/catalog/file_readers.py @@ -3,7 +3,7 @@ import abc import pandas as pd -import pyarrow +import pyarrow as pa import pyarrow.dataset import pyarrow.parquet as pq from astropy.io import ascii as ascii_reader @@ -356,6 +356,34 @@ def read(self, input_file, read_columns=None): yield smaller_table.to_pandas() +class ParquetPyarrowReader(InputReader): + """Parquet reader for the most common Parquet reading arguments. + + Attributes: + chunksize (int): number of rows of the file to process at once. + For large files, this can prevent loading the entire file + into memory at once. + column_names (list[str] or None): Names of columns to use from the input dataset. + If None, use all columns. + kwargs: arguments to pass along to pyarrow.parquet.ParquetFile. + See https://arrow.apache.org/docs/python/generated/pyarrow.parquet.ParquetFile.html + """ + + def __init__(self, chunksize=500_000, column_names=None, **kwargs): + self.chunksize = chunksize + self.column_names = column_names + self.kwargs = kwargs + + def read(self, input_file, read_columns=None): + self.regular_file_exists(input_file, **self.kwargs) + columns = read_columns or self.column_names + parquet_file = pq.ParquetFile(input_file, **self.kwargs) + for smaller_table in parquet_file.iter_batches(batch_size=self.chunksize, columns=columns): + table = pa.Table.from_batches([smaller_table]) + table = table.replace_schema_metadata() + yield table + + class IndexedParquetReader(InputReader): """Reads an index file, containing paths to parquet files to be read and batched diff --git a/src/hats_import/catalog/map_reduce.py b/src/hats_import/catalog/map_reduce.py index 24444929..8822bde8 100644 --- a/src/hats_import/catalog/map_reduce.py +++ b/src/hats_import/catalog/map_reduce.py @@ -4,6 +4,7 @@ import hats.pixel_math.healpix_shim as hp import numpy as np +import pandas as pd import pyarrow as pa import pyarrow.parquet as pq from hats import pixel_math @@ -50,7 +51,7 @@ def _iterate_input_file( for chunk_number, data in enumerate(file_reader.read(input_file, read_columns=read_columns)): if use_healpix_29: - if data.index.name == SPATIAL_INDEX_COLUMN: + if isinstance(data, pd.DataFrame) and data.index.name == SPATIAL_INDEX_COLUMN: mapped_pixels = spatial_index_to_healpix(data.index, target_order=highest_order) else: mapped_pixels = spatial_index_to_healpix( @@ -58,13 +59,22 @@ def _iterate_input_file( ) else: # Set up the pixel data - mapped_pixels = hp.ang2pix( - 2**highest_order, - data[ra_column].to_numpy(copy=False, dtype=float), - data[dec_column].to_numpy(copy=False, dtype=float), - lonlat=True, - nest=True, - ) + if isinstance(data, pd.DataFrame): + mapped_pixels = hp.ang2pix( + 2**highest_order, + data[ra_column].to_numpy(copy=False, dtype=float), + data[dec_column].to_numpy(copy=False, dtype=float), + lonlat=True, + nest=True, + ) + else: + mapped_pixels = hp.ang2pix( + 2**highest_order, + data[ra_column].to_numpy(), + data[dec_column].to_numpy(), + lonlat=True, + nest=True, + ) yield chunk_number, data, mapped_pixels @@ -168,17 +178,20 @@ def split_pixels( unique_pixels, unique_inverse = np.unique(aligned_pixels, return_inverse=True) for unique_index, [order, pixel, _] in enumerate(unique_pixels): - filtered_data = data.iloc[unique_inverse == unique_index] - pixel_dir = get_pixel_cache_directory(cache_shard_path, HealpixPixel(order, pixel)) file_io.make_directory(pixel_dir, exist_ok=True) output_file = file_io.append_paths_to_pointer( pixel_dir, f"shard_{splitting_key}_{chunk_number}.parquet" ) - if _has_named_index(filtered_data): - filtered_data.to_parquet(output_file.path, index=True, filesystem=output_file.fs) + if isinstance(data, pd.DataFrame): + filtered_data = data.iloc[unique_inverse == unique_index] + if _has_named_index(filtered_data): + filtered_data = filtered_data.reset_index() + filtered_data = pa.Table.from_pandas(filtered_data, preserve_index=False) else: - filtered_data.to_parquet(output_file.path, index=False, filesystem=output_file.fs) + filtered_data = data.filter(unique_inverse == unique_index) + + pq.write_table(filtered_data, output_file.path, filesystem=output_file.fs) del filtered_data ResumePlan.splitting_key_done(tmp_path=resume_path, splitting_key=splitting_key) @@ -258,15 +271,10 @@ def reduce_pixel_shards( if use_schema_file: schema = file_io.read_parquet_metadata(use_schema_file).schema.to_arrow_schema() - tables = [] + healpix_pixel = HealpixPixel(destination_pixel_order, destination_pixel_number) pixel_dir = get_pixel_cache_directory(cache_shard_path, healpix_pixel) - if schema: - tables.append(pq.read_table(pixel_dir, schema=schema)) - else: - tables.append(pq.read_table(pixel_dir)) - - merged_table = pa.concat_tables(tables) + merged_table = pq.read_table(pixel_dir, schema=schema) rows_written = len(merged_table) @@ -277,38 +285,36 @@ def reduce_pixel_shards( f" Expected {destination_pixel_size}, wrote {rows_written}" ) - dataframe = merged_table.to_pandas() if sort_columns: - dataframe = dataframe.sort_values(sort_columns.split(","), kind="stable") + split_columns = sort_columns.split(",") + if len(split_columns) > 1: + merged_table = merged_table.sort_by([(col_name, "ascending") for col_name in split_columns]) + else: + merged_table = merged_table.sort_by(sort_columns) if add_healpix_29: - ## If we had a meaningful index before, preserve it as a column. - if _has_named_index(dataframe): - dataframe = dataframe.reset_index() - - dataframe[SPATIAL_INDEX_COLUMN] = pixel_math.compute_spatial_index( - dataframe[ra_column].values, - dataframe[dec_column].values, - ) - dataframe = dataframe.set_index(SPATIAL_INDEX_COLUMN).sort_index(kind="stable") - - # Adjust the schema to make sure that the _healpix_29 will - # be saved as a uint64 + merged_table = merged_table.add_column( + 0, + SPATIAL_INDEX_COLUMN, + [ + pixel_math.compute_spatial_index( + merged_table[ra_column].to_numpy(), + merged_table[dec_column].to_numpy(), + ) + ], + ).sort_by(SPATIAL_INDEX_COLUMN) elif use_healpix_29: - if dataframe.index.name != SPATIAL_INDEX_COLUMN: - dataframe = dataframe.set_index(SPATIAL_INDEX_COLUMN) - dataframe = dataframe.sort_index(kind="stable") + merged_table = merged_table.sort_by(SPATIAL_INDEX_COLUMN) - dataframe["Norder"] = np.full(rows_written, fill_value=healpix_pixel.order, dtype=np.uint8) - dataframe["Dir"] = np.full(rows_written, fill_value=healpix_pixel.dir, dtype=np.uint64) - dataframe["Npix"] = np.full(rows_written, fill_value=healpix_pixel.pixel, dtype=np.uint64) - - if schema: - schema = _modify_arrow_schema(schema, add_healpix_29) - dataframe.to_parquet(destination_file.path, schema=schema, filesystem=destination_file.fs) - else: - dataframe.to_parquet(destination_file.path, filesystem=destination_file.fs) + merged_table = ( + merged_table.append_column( + "Norder", [np.full(rows_written, fill_value=healpix_pixel.order, dtype=np.uint8)] + ) + .append_column("Dir", [np.full(rows_written, fill_value=healpix_pixel.dir, dtype=np.uint64)]) + .append_column("Npix", [np.full(rows_written, fill_value=healpix_pixel.pixel, dtype=np.uint64)]) + ) - del dataframe, merged_table, tables + pq.write_table(merged_table, destination_file.path, filesystem=destination_file.fs) + del merged_table if delete_input_files: pixel_dir = get_pixel_cache_directory(cache_shard_path, healpix_pixel) @@ -322,18 +328,3 @@ def reduce_pixel_shards( exception, ) raise exception - - -def _modify_arrow_schema(schema, add_healpix_29): - if add_healpix_29: - pandas_index_column = schema.get_field_index("__index_level_0__") - if pandas_index_column != -1: - schema = schema.remove(pandas_index_column) - schema = schema.insert(0, pa.field(SPATIAL_INDEX_COLUMN, pa.int64())) - schema = ( - schema.append(pa.field("Norder", pa.uint8())) - .append(pa.field("Dir", pa.uint64())) - .append(pa.field("Npix", pa.uint64())) - ) - - return schema diff --git a/src/hats_import/index/map_reduce.py b/src/hats_import/index/map_reduce.py index fef062a7..4077779e 100644 --- a/src/hats_import/index/map_reduce.py +++ b/src/hats_import/index/map_reduce.py @@ -17,8 +17,9 @@ def read_leaf_file(input_file, include_columns, include_healpix_29, drop_duplica schema=schema, ) - data = data.reset_index() - if not include_healpix_29: + if data.index.name == SPATIAL_INDEX_COLUMN: + data = data.reset_index() + if not include_healpix_29 and SPATIAL_INDEX_COLUMN in data.columns: data = data.drop(columns=[SPATIAL_INDEX_COLUMN]) if drop_duplicates: @@ -32,6 +33,8 @@ def create_index(args, client): include_columns = [args.indexing_column] if args.extra_columns: include_columns.extend(args.extra_columns) + if args.include_healpix_29: + include_columns.append(SPATIAL_INDEX_COLUMN) if args.include_order_pixel: include_columns.extend(["Norder", "Dir", "Npix"]) diff --git a/tests/data/small_sky_object_catalog/dataset/Norder=0/Dir=0/Npix=11.parquet b/tests/data/small_sky_object_catalog/dataset/Norder=0/Dir=0/Npix=11.parquet index af44a7610433db34d1fbcb4f0bbeb0ec6f2d01cb..d3217ae2129aaf75c790d32bf3a9a20552584502 100644 GIT binary patch delta 1112 zcma)6OK1~O6ip_XHpa$|#-=kGZ8F06sh_r)wx%`FH`64Y^piH$ej=qNF-;SbG_~JU zL=+JbH+sc|Xr->SDp=x1DdIxKl^_c41vd&+)Rids-lQM~1TV~;`_4Uc?mO?ny!OmD z>$^~}HhzF6nLMZ%mA)8b3`YgJ#*pE;`1v z^aosj%iqxsYN;o7xXW<#mCeFZ1-xY3`Ka!(mRjBpRWwIm*ed+w^Dg>{mRhKVUnLvp z7rTXf)nF~XMLiJVX=xRG%^`fOgZl;qgQa2WX(Q}fXQLMygdg=7JVRY>g4$J9=Al!# z=(ILyw&^uESUr4ZDxuuSK(dsB8>_Z%S=wi<&~x>g5{6@SEs5h5l;s>{xvI6yX@ytK z!d$bp0gf0fz!-R_G9IA5x*=@bNS}2JZ(VTOxDyP_`m)tSBe8HQo0u7@bApA*8L_Emp63raLYm|t#rf}__I+|0)71>`G>i5rv z`<#Q1;3k8{kGqJ^%m! delta 1757 zcmah~Urbw79BywZFa_2EExi;5yU3L>m9}dcWf^$-m)k%K9qVmtHoX7ZUV86sp)IA5 zg~f+GERva>nE0?5_0{abbPqo8rtwi-T<}4o#>~VgeUO-CQR6w?mOz>DCgonDOjca=29|-)VZfLurAG+Bw zU}+&ex>gfuBV^G+SZ@&4gC6T!9rRD_bbI}J`y)N^X)jzelg0;T`io9@%RE!xf8n~G zIIzR7&HcuANcv9;{M|eQzv?;zf9SYCJU#^--9yHQgY>;YINSLVag&1Yb`Kj5hUw3T z5da|51&Hrof^T;X82=fe_ebE}u65$Z%kcEce&c&I{p%=v{p1$0cLwhE*o|L~(eIDJ zyFKHdv>db$do%E36J@-8f!-g7_f0df)ntXQnMz(u%P3)caU~~lN>Sciad~yf3OPXD zq5sDtbeLzGEzUN(n{9SAW1yRCA*9I@WuT9kdb8*3F;fQmn4@od$eo8LwkcT?rOg$g zpj1??L`@IBK^<~OU3q1gdcv(Vgi=GYO=+AeA+c6b6r{+=k|M4g#fqFJa;24Wt%!wG zMU#bsC{akQRn%e)6OIN`;8!J~j0sgLb0SyfkbawzG^CfcEZ%&1IrQojb?sW+-aAgf z-QJGDXklHH*72qzxv2&Y_14~jima8Vj--212Zo{3+Ka>V1?1<%2*@~q0R@0gi>2}Y zv3JA~MF;+zgiq0CyGJ*V9q#F|q7RYqmcqUdF8iEH_YA4|E0RZp-v85ndoo7^~k`5=_Nmq1(pG%Z^Z9$I7KAus$g)|!~ z31P*Z++sY8;wUlx$SUvJbn>hx!?B)xI+;_18Z*g+$|#N}$FrC5-ipX>mgfCHPOFN- zhvOMu4VBZEkghfCaq{6RjFGkzPF__|w73HI`fSs@E3%emqYg%{W*OC~h~ZE^m5k?@ z)k0RPMHF6*ZluGgRGiKqNhE@)a?Bs`W)k(QeLoY>M4HByRc{ShsXd92E~eSdeA4x- zEFeGQ;hjFRO-mGcZOM(3w~4G$5d&HHUElanK3)`L23u7*Hc?84ypB=c7b`x#SWfoTR z{}m#`g%de`&R3K|Q?=M77$uWCP7&uzor@@_MH{HxNoKAj^I=66)KE>ro%Tnn5*w-s zs`p%@9a>ruv}locxzPy$d0|$_9^P`kC7NDpOgI zBVK%A07#+XtENChynsIPX!xsO2>>3T+Z1fvECzo&5CbAvH2F$+xrirB0Do{|13tD7 z((@Q;>H^3to}ZYgVkU$qP=SBEW-9&)d1X{gGn^u{ZCR_{)vt z@n&W#xAm;B8k^C;92dT1KNP)a;LQ8>c`ym1aq-~M>&u^;S8r}TW$=rv{-9j^m?`8y z*R}4!*d95dS@_02Ps0`QkL=-!1_=Mn7W0S$7eD|K$1cJ-hAb_5Wh1boMr@V1lu`G%q~_PXVT+y+WGcja zl$uGd(!yI1Nz0{|*ac!lblspGbV@aqmnnfX0DN3wc?NO#9m}n7%?kd?3XIUke^_o^ zq(6z8;1v}?!KFO6t~E(@Mhg-Z7~)x;V~*SSd;aL6(I(A(QWa5(7yeI5&7hEv5F13N zH#o#k#<(E3Pz6W_w3d%ScV6?*P2QODhNj#ZSydr^;z;|6)}m8p#1!DBnIld*VZ;R&Nc#vJq!j`Q@dVs+fshc-zzsLdIAv+~fTbCYzyJHc|1|UaYoA_! z_{L`&qBbT|&3rKJ`7=7jADeCnw+hdMkz>#+GaK(UD;uQJ)K; zng8&4g-?R`wmaE=Hg*K#M~mwlW&1gDXW-LX_@mg>IB~^aE#BCylh!^bku&uFT;Dn0 z=x0hfXT(3pzPOfWP8KrDpw()~cgMPAI$Gw@icEjeNgi0e-7RI`W3d#eiD52a~;;RFgpRrIb_B6RT zR22*9q4cgKOo&d=g7N|N^$mG8-sOROQST96N-VNa4DewxbDxC{B5Exp z*+HLpvryrR%2unWi&O>JFkd}X<$7*zXOSTa!;aFjq`|0fhE)We`cxH3_A~>&+HO}m zlLlWc_1fRPnfN1ye@VX5-*-wOsV1kryf;*gN3fp1h9ws62Z>eRx zl)Q|~sr6IVpkwH4RS{|2RJTc^cE&aok*zyIXws4J)xea6P>Z`vGn{s)=g|~WOw^1yuWF<%3@HPBt4*i$FKv;~y`T zV&x(J>rx?JZf5cAG#9Is@nO2~YJon5h;=}BE{7iz6gCNZPT>&$oi4=cWy~(Uzeb)2 y(UoW^TmWbZG;f*~z(1tdZu0b`$rR{=a>Ud@1X9CUPWZ}8ApOb8!a@_Y*na?o1il;q diff --git a/tests/data/small_sky_object_catalog/dataset/_metadata b/tests/data/small_sky_object_catalog/dataset/_metadata index b216cda60ee09a2c05c172df60d8addacc916663..4b2440b5fae81bfc67690d964baea77233501c7b 100644 GIT binary patch delta 935 zcmZ8eO>7cD6ovt6ORH&%5FqqN4%sy+m>0~Td%q&GsmbH`BCe2--Gw7aZJJ+_mKuv`{%8l~3tyClWBeww&-8;4RUZ;52 zN$slFYUibd*w7#@Z_bi4HNv~XjO)Ez)fL7QO?4CnEWcp+8Ca8@G!w7l``UKo~U^|>7_u}Ue zhpbCA8&c|yjrw3kx8?oFs?ZHQQ`|6S3UkS&XktEB$rsAT@$So4PInu{G%D1R0=lDU z=m+RqQ=r3ayeZMPz(Bwk8ZRf($$U(^b^NSgyd4FVR+$g7XkBS^u{7i%WFWRlp2g89 zm(Nuq&LAB&c^BfY;PrUHlksJkc=+NX&*ke_&Qgr$1G%I#xXfke`OwhLcJo)TQs-17 zA;)0c%#l8!{$gXQScVyCR)(&Wa#Qt){{y3$>PvS9Ol{tGLGE@xCZUG#FM)XLQG^y z?j;rW67hn&ASmDhgjw{Z%>q~&>Dy@;Jw1y2?F?XM(4%&`%}(Bqkl-wF42M2p)HjXM zMFKd8gDKRdqQT@0npN3Wyfe5shEY2!$TNqN1Ty6C!4xCdFC5Xqd_0DS3=drp3IqJ& zACbO=^Cv}ocgVr)e<6>Qu&A(2eOz|dbC CgA|bf delta 1706 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 diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=1/Dir=0/Npix=47.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=1/Dir=0/Npix=47.parquet index ce27adeda1857b9ba9b82e6c6f7e5a5a9096a537..aad2a9287219f63c4e1bc4d3634065b5209fe48d 100644 GIT binary patch delta 1309 zcmZ{kZD?Cn7{_~_+}?I;^uS2l)TO1%=KW9uX_M?FV|Je2H0=#dU(%VEsjJOxnkC+( z!K~@hq1lHaLr{deJxF2cY%7YeIjYMTe(-~Wib6##Dt>X;IfkQd$b6Yv&rO}+Y7g9d z&U4TI`JdLl=l@k4xyBVYj5tG}QGDAdT|BuN4>|eCD|aO&TLHQxm?lV9;zWyrt5`Lywm?c*67L^un($lj%;qzG%f?p`w=J=Vn zsr2z}ihXk=3%^rr6JV?O8gXRH}I92?d$ ziK9afH$J;cKB%d?_+W#j;ah0~*johY9>`NgSGyox`CrPW4cMACB5Jw^BXW$~ed)g( zk#n>N(ya|Z@*4kIkMfZXD021UdX82>I=-G{iy*zbo@EQVD`D$HQ=5)i6X}uI(IItA z8&9RP*1gS-Jz;CMu7yM8y;%8c$sj_lfQvN{XmnbisW2N^AkY`un^h0TQp4u=Om=bPHaO(^NstgelOc0Lse_l}OFf_c@U<)XT$tmJ!=%D6x8 zb2ApvOI_0i!hRmK>K|HJoUtCJFxEf78}TqUz?jB58S5%H=h9=Q$NmXE%eqV1ih1sC zaHoDJChK6g;Mrpz#rZmL5FdV32OjVyv8f)~K}q5veeOx(nR;-VG WRrmX65HCL60DV6vw%zx8$r6{iA?$ftTu|`&@VuRK z{^y+EeLmcCpBH_%SVRx-F5Th{-)O7i?vK>mx4MqUP)$q4CMxQKw@VNM zP_O#Fn7g!4h?)U9NbC}hb@<@E8Z|zo>Q!H;xzA3OEcHL68faKiqmf5co$7&_yYN80 zbp8?5NWq&7y7~{bQ}sH--C9+nE(LTT_Fw9EIK?2vGPSelZHD{$EvBv-eWid()VWNp zz`G3Ud`z*b(+u~+I}EzMOf{iS8Z_wB$5c0*W6-_FIQLnG`{pcz%2%iq%rI!4hV82N z81Bw_23@0}5#3y&24Rjt_i3n8%`)8lEOu5xt$qu=2dYa0v2ajMN|OP-v0&?^JvDVTx4Eal&jikN(A=HP z$yaU08e!HNn!CLbcGokA5k`!~e}0-V!i?)^?yrrIyPnT?AI<&!9Kuzbz-4LfwT*b2 zHX}=O&!=fr!gk+H<^(GxLgC4PI3lOxi4=RN;bnFmSoYPX1~zXC}($!uUenvb2o2R1X%h*2nTw~==%y03DX>2Z zs9;yE1HYL~GUD4!{r9fNv7yj)MiOmCv&G=5*Rv-Js@1&9<@6j%iLr1zSbe=#OUC}F z9VtrSB?Uj&i_9g!PFqA%l;=%69{ufBylb(Qjo?vDYcI*l`CoY12y0_9u3ECrqNXu^~XqvK^*Y}k+qdZW24 zY(9%`t-p=^hdk(N8R*I*L906^^kR*k_N?;=3YNjP@@GC6NnA_Z)vCM@DlLT?6f1|S z=`|c;+#L&9joCGPsi4Q6^?B_Ea<(N*2E5M-En<#PDDKXRdU-;S2wK~uBiowk8{(zN z5&WqVrkD_S#YCM^@AulLf*xZ!r!izp_e-r=TcVjK?~d=y`}xHT&szq`#h@9_DIOd5 z^WFGSX7JlIM|o@$$=MPmZ?&78oAHLX6BSd6YzN3h3|L7U(Q5I=#K+L62Da?&BPOpt zCi^^-m~Jf6KQzo|23oXQoS5f($i$ll+R&dbKpV|xv=eAw1?VXcdZhv^V4Ff8S3n2! zO`$tvbxt8x11(h+Q9F@K#Pi2;5>c%dNg8N_ZXBV3R;n5OLY4$lS3)N>h59PNGL2in z8Eri8<4qa9pG4x;NabYUqI2tT{*c>~$xbFwZ`6r#hwRnMIXk9>#dD^ExAKM ibwe^ZHkuBP9}ttt1HrMekqmNHfw9P4TTnp$8U6!1Je_|4 diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=176.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=176.parquet index b2503107447bd2d153810788db32a73c6d11ea06..c4153937d52b865852705f341b2c5b7955d21d1a 100644 GIT binary patch delta 1350 zcmb7EZD?Cn816mE(pYD#Yty8xomtji!DS{*(k-dl_T=X4hNd5>%gs$1LUNO4H{RrC z#->ZfjSU&2j5&Cv_^XUDLH{`d%3uyHe&D9Fx>2{aKZ^ble+&Azi6yr@FjEf!1Ksymx`3?jSJmkyqHJ_9b^0IxXP>Non+I{LvP z>e07#54LF9yN#-1A*)ASXEa@(xVmn-=KZ&u z9Dol3lYM6&5Y_5Os=eYHP1Q?O*D^)Fe;?7m-9zwwzzE5iJtUzWrh}t>D;tj`smIIW ziN~|+=-MROLN6i#XMw6BrPU$6Q&w>xyEVzkEC7=UkH(2hxzRm<8B;@ zOmIUL;aIMiHh$h|RmS0b5Nz33RpGo3%2~6H$$K!y%7;T?A6&}z?2Ap$=h@(oGYjKL!B2uXY_QWZq@FdM9hnSdk;MSm?fO)wLh z&vE{mP;@(3kua9xl295iXY5XKLd0VDHDNByIOo}tt)j&8+~DhcYZT8Pvx01ki+pgVfwsz~bzP4=6zW4g)b??2E zbzRpHvam!x5CX!95X_vSe(;M3E+Hl=E`$$+5EU^d8qh=&L1NGt;|C+^z1@hoEk^H$ z^UgizcYgPrUr*A*UuZt~R-@}d0rUKclF4G~*IHP&wMKWZk|~Bw<&E=^t*s^0(LpeU zYu5bU$1K#rY+d90-Fh5-^)%F4Y5l3=8s_sMSP1WfQfI~doVBzBp0sX+_Z+4A^Vc-Y z&u8XuI$|X|Zycqn%hy-hiu9$G2CWiJlv5Qm`ie`f71vvt%QF-+^Qi{f{f%&>_ur@nd#&;Y&m%31u@S?bh4BbWxu;LQOS_3q2?U|_rc%UOzf zXBIXEGt|9T;P~J+{cm#=bA1lp9&7+>uoS)two`As26qOl^_R|3%#m~OC(e{Q^%vJa zS)x65n}UWCdhH*#DCX+x6!ey~Lx$S|XSokyhAUf-$E~ccyv;1r7^=dXS4a$Z>&vvv za*5lt?|-6!i;k)#W#Oiyt)BTG%9hnL|54fGRp;RTq&fE zS*hSYcxq@{_~VTSX-O4hlf%NOoK@5ey{BeBJ)De1<+L<8Y_ZcrjWzUQZnyx96(9#` zHLAogSk1~ZM#QCwgFD0R6$j~*OjI{(iw9Dc5*(Iu@yw-j8?1q(x4wU`ll zo~?V@hsRx|k)`OrmF|9Atrep@mV~#4obY@!u-!r*Dl%+9fq*R_B$SkeJo^mm9>+YkB+m_y+N{V;X1bh6iYT(o zdjfG@agRs(Fm9K}X68LPLX-<*f^f(e7dz!#A?fs*c}2z#1Z3zE4SRTt_dta6nOG^8 zU=_10dfd1mkYrP%iCEq%^NMdG;=$dM4xHX#up>O~cY5vd;QSn)UIQP+H|_TG&0gFl zE3Mj&)B7k7Kk}7pMNZC&t^_P8`-1cmk zGs|SE<(k8VL>0Bj1I5Bd2q(5o2N!<^K?x>Bk3GL6MkdO6^Wl)!R-jQGHtgs5W}z^* zs08zZMV{a#A{0C6%Ug3@DI~@Fu&}Bl$t!`RV76N#A@5X_vu6t&DK^_JS@W!FLS$u7 z=OS)e$RXtFC4pWiwi$$z4X6X}Qx30{Gl6hUAa_@StXT)So3MktgvF5|ZVxdeftieP zqY*m}lq4}+iceubiGxrVF(FG*4s(-O+@vAiof<*8o@S#FH-eCx806?_fv=M-I+Qa` zK$T?CaL_HeD0T`!+DCOw!7cppPr>F?^A?w2oG3hr&_JO$VKhP{)k1Y(bjqqR!8L4E zc$jL_Ou^m}*EDViKf@vvMvffnCPjEY(mpwlIv-iQ6k^19i4iPzv!M9okVP)!v1GVD rL3l9V(phYya49m>q@!a8va#_dA)RiDj*X4xpk1~XyQ+$c$bbJ|GPJJ0 diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=177.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=177.parquet index c49db6257fa435756b41b1e1c1b9ca8951696ac1..55462bf5ae6548cd216d98d689a29905b53b3d8f 100644 GIT binary patch delta 1460 zcmb7^e{2(F7{~YYZoOVdh+%YeQphNH{$Qc&y3vj3mUnk;cg@;$ovytSUDjJyuC(2x zZlf~z|B=n)iF13 z8?ev;c5d=xgRpQD3QlW1e%Aq;Xo~gR#vNze%*++GFc-CR*UqxSg*%2qC{&LjaW$nu z(NpfdW5gj5c5<&z8inPnES?mhtt`>|#u@ih?@yU*7ISTLh4HakE0akLS`0M{TWW4B zLd{Q$AY8xA376kB+N=fVeD%3K^S9i>-8=lhD+ZGPtvGRo7nY_?g}J4AJTAeeVh-R< z1M|htJf4y}g*k3wJly-~FonT?n5QOkHm;FeEbpr{9yCeH@>VZUNz1;MsG+B=?Kx`<3js7E&<5z<3Qns^BDmCQBKn9w*duFoP>DM=A&^*~n&x$txp z+^p2%7{afk&Lx{31WkxRY%OHpZAT8Y%5w{|Vx*SA5} zbsZrfA~B+IIOH0IAs~q#{4=u;Bhdgx67f&s7vl#a7?2Q52#JXy#1QAbEhLi-6Yhue z&OP^>-~HY5J574=(*^%bFVM81fN6@WKUAeYwjc0}16a+u9UL=tC4ASazIYYg^pgcVFpLG!9DfO_Za+=okZ^+ zWw^iIW$=|Iu;Z`o@VWZPaR#q;!y4`62Ml-ieFiUWfNK100|eD~PB6Htk&qob!Em=G z82pJFSR8AFwsjMy2w}}b!mi}5BH^Q;n*eU|B*X1H$>6sdL5~-EU^%T>hRYB%sxN=U z;58n?`u1st`|31>Q^ug-=97l7nNORB$IG%@!_BA5+9#8wY+fOr*Km(jAWcN;{%PrM zHmO8oBfZjqoJ}hkc1zWZ>?|?Z?bTIm@vOIy7%QagW|c@fMv|4RER&4BWK53s&WhnG z0UC9?*_a{?M3YLKq_SO|?#=b=o;}l39w^sfe+w*m&Nr|t8r#J_3c(iR_>~qYGh~y> zP(4jivgyHm?@)e_-pm%lxLtrMJ(<_J5F}WrSCd4%x&_K1i_Z(NzS2kLY;HP@&YQns zc01+}opo5K#vcn%gD(h>cIN+VsH;sUm|!ZtN(Z^pS+ zU{fy15l6^@$nw^Eh-c-~a<<14tP7ic!(wxANL0K@f6^iHvTdLz>e2pZ9k>2KEsd z@DE<7RLR)_6mIdtQv9Vj3aU;(Y-59r>}|bYlwpcisHynw~ZQlK#+`m zMk8??C_!VSl&r$oQU{?{YQpA(+#MPrZBOX?ys3VaYpXRH2@!1s2e$Q$V)59Q|U|SdiaR`;-(OzMxaJA+e}j0 hCx^{);hc1j)W<0f!F#ZZTyQD~0j8_6q=f#r_!mhvtV#d? diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=178.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=178.parquet index fc6d65dbbab38c8d4567b6699cb309df044c4e6a..5254a3d78bf4a23a4a7432e859e7b975b0b54dc9 100644 GIT binary patch delta 1467 zcmb7^ZA?>F7{_^fFBA@bFd_}57lXy!L?kJFLBKG~;g*)$P+scn3&=}*Ddn=;!YD76 z#mJJq_+?*g^z4HnnIFtPZ7ygqE-}Vz$+kE(%jO_+3|Z7Egs55eVN2M~X7>mZWtVK_+Wf&SA%M+LX? zmyS#w0ki(>k2-PvDWt1QtH@VJU9{LDATrYnCjH58ka+nzBJD=l;NHH2NJlA@ z7yQ16#A^$P_CO!C-sq*)7fa!LZetmd_f1f)f4qdm+dm<4!32-EbN3MWP=MV9-~EEb zTPv*Zu0Z>i1c-Apzar9B27>|<#A^?cc=914L;X-mth=D&m9@3!EG!F!?wb{p=em6 zvOZfqIn@nc6jFDiV7w!~NQ)P@qExggo3y)s2QU7cP5S1UMqb>SP32ZZ2qm(Y7dIm! z@Zw95RBlRxUg9M<=!0J1vAZ8C{xgq#{|7~T7)<-p1#gSG96no9J@;9YI^$WTeGE9!YrBcC{%IJTw)P8LqQYqIaqB>GUqlJRLNkx_S%PmPY;?`6p?n*@u(OU9MMFXys z60f(*Dz!{>X-cAPG-7km$6(d_nlj;)98+?lI?1%5K+Wr+VB6q8+@Dfx+GK=zN^+`o zSf22vJoOldSb(g~7xdDinr&3$7{;ww#<-)C#&craiLr)hM0X~#gVmVT-YGgu%q3%m zo&OwArw%)r8G~BhS!Wp}pN)YHJY;L_5a80hp+43X|D!I0$jFG!D)}?=+=TNA=ATIhF*|@#%=&p9QPC1jolc_Sx%t~TOUG*bf0asFSYmVTw eT!ZO*qW$zeDa`NL02eti0lxgw;+!1zz5W|}^4}i- delta 2158 zcmb7GTWk|Y6y@3`*-|Kll+<}Z!vaS}tkezbAC>(?f`YlGuB z4nh=!TB#3IkxEmcsNxHu3eiWTMnXuX6;*#K3jIK(AXP=s2Sp7+0b2T?Gfq&`V30Z= zckkSL=ghfh?#CYce({xG78`ny*E~7Z`h2ba&o^NFc9=DsN^;EPnt@ka^_TDKu;(RU zOD8VrxGxXF7uz+ z|K7C{yu2K$ORt|U;SSFj@Lx+|(^P*sgj)3nzG3hwFUg&mWVo3hN~XT^0_gQ$UuE!g zKU9?-{g&a*US#l!FjV8UKDeTP=Vu0+!%$QD+K&u(;TkiwS%5OoANrNShiUl04TigZ zoxz`mVJkl7hvWK_w-_u0U~TD7HyQ5gG=ujBV88zD+YD9*$ju+mFx-cisYZhcZ0A^|MEQsw}c4AL%%cJmERb=JVc7x zB6F>OSWPQ#pII^&b!WGtej<LDVC@U^JCc>{Ya0`XUM0kQ&O!(CgX^x5J zq_~*oZAIlK#l`fleYDhNj}h3w6%)2M0#)o+%XYJ}7LARDrIeCYwG7)*6JqCS%;J3! zC||pq)go$)B(%8 zpa@I5JgHsL*e-S<1p9A19nqqZOn5k-ruVT~SsQMm^;%X<=l>hV&&8m|;gE~q%>|2q zZD}ZihX0PhdZ&lXRS{})(f@_DVZMeBbvrMK^HH$l<1z5Awy=8^8J8ljw_9k*NXeKQ zF`lk8(X}z*##M26L63Sna3~J!Qx3_NK*)y3>S}V~*W*wf;+5u9P;h1>m(t)L zm*MU1LD4d576ofOB3Orl{-h%1`7OM2xRF<_Nm1yNyJcH8DvV}2?MM!)iXytaaZz;+ z2e*?tm(?t~a`@drFow*cst`1Spt1CF*hx z1^nJ5KbT6y@@_>`JtIMvk_}P@cDK*h9vJSnyPM;_sn6q(UW}I|Va0}SvEEIH@^Vo^ zcK3rk)?}zy9~G2r)R8C@i<)m(>QLg*4kcG$Z+DwX*LB@^M*=q1cwI_q zmIneLndb0)8LISYQNwQ%N2mF)CjsW#9hxm2v-4C-H6r*jL1%L|Aea@}6+dLnMf`~Z z6$7P$Q%R_v^`;YGBC5N5NwI?V~f$2#H_=F5=_WEYuQ&N4& zsH-_Yr)nl5xbp$O+gjkG*{sCRi}g}Lk*Mm+OBQ8Bl&RwUs3+f$>l{RKd^>qT&6X5Z zZ&EThTY`S~SVU;f7BB|+Y?s`S=e0USrwnz>*6o#Y2swIbpw~`p29e}O)J{e)M<&sp zKqM#8y(2*dGFkW6uti8wZtq%m@otiniB2cb@C{FbB=5Jri} zNn^Zga0umk>P;p>1R*Ci$kx+{OH^nypqyz0BNZ$l;9(UUI(`hFRAH;Ga}3|3-|jKo zqCx#L4#_l9xEP_n0z|@O!uvF6)U}fn8ZG%+;0Da5F8QzKcL&64U-{1&B`8-{>8o6{i2h>y E0|jQ$yZ`_I diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=179.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=179.parquet index a8a6fea2815f3c64d0d830aa7208538c120b7cde..b8011d372de211572cfdb60e88348c72c03883d3 100644 GIT binary patch delta 1446 zcmb7EZA@EL80PIQlzJ9pS;nV}NzbS#-&=C1XgG#bL$|m2@VW=*;Gv8fCai{Ike@8sZN#J-5t%-4ajIp7Wmf zJ82T>9;8`XcqoaCBv3)?Dg z>1#yiOi-;kwZ=+5M|76eU$|xh;6A*D=#56G(cHU=@bWi^wl+coJ!OXq>M+Bf+#fd) zHCb4G=?230ue1CVw9u0l_?I-_Y=ixT6sR~)p`Y8453kqLbQ1f~`CKG_yIL{>6>56(4e;)<7^aJKyNK7j-@h*@4n^dUE>~_; zmOa`@+cNMx=ZUt{qZu%C^3gUzi1H(DPdhs`39>ZW*Wt4U%-v(*PT!$$!V}vcYYPVs zj7J6e!JXt73Cmt7(&0-B@!_byarN{u7%84<9O&XnENF2{!GL#6j0tw3GZ_naNHI}% zr6LDd%)7@UepgDA9Tp+RAQOF(nCKn}o2{%3iFsZWM?JiCTu7LbN^Q_@do>v79vqN; zDbXyAg%wO*NOi@9QBTV4AS9>|*s1ddJS;FN7bX%Vq>BiI^z<@%PC|MKkqD#Mk*91` zVxq*JakldcN*;Lw;o(zFDzP0o;LQ!?*Pko{=F$RLJE$WMp<$uaM{9&PVxU{=_Rx qU5?>Czbh$rNY+4Fuo0#cd(U(d6}$%vTy*p}cuRLz6cs6-=6?a~#osFc delta 2062 zcmb7GYfO`86y~&*@H`>D252Tb{5S&s; zhL!pGlpDD}eu<+a-!KIx~Wf4Rj8S8j1QI0!s$ibBJ>r*}AQwkp?{k+~#S zqqGKlvlTg0`8mfS=RFWc?{LD@j~wobf(EAtVHwL=f)ApwweZ4Ea}rf`J;B)A%x~^; z!tuKt{>3sk49(8;b1fa|=*&X&#bKTL_E!sq+fy7KjYBzxV~~R~Pq#NH`)MfOyuE5;89z8UnH+*_6&4(T zMXTz%d%eD1{zV9W){d8lV7WFDl>5q9h#U#^#M}GgJ*+aHGUMYRDA3Stoex2cseC03 z#K-#~8zT7jekjaiD>^@%S<}Y9Huw4S8lB^0*%o~F05q*M@PiqeMWm^z-nlvK3HU-T z&80jYJL~;+%o>I_l%%m5tA~Mq#p*Hp2{99TYRhaG8wTxGQ8IP6Ijh1Rn^e-05RIZ# z6c#P^PPZYZcRP(8E~l}pttB9N;^HQ;s;^WG83S%-bFe;Wj(DB1FwP7^cBaj!ciW;^ zaS$||-W`%?dXt2^=~eAE*!Q$K>+pUOvRC=ycF7&8>usP+piRo=QTV;yD;q#ZujwoFci=R-Rhuy7ywltOOUPKjQXDH?{QyZ9I4vM7f(CMgRCIM!nsr00_jVXlG zFwtTNNUhEoopM0aQQO%?q7B759c_e=Dkg}zp%j063rbZas_VzsN5KG2bd7>lAtvzb zD3mK|68JOw)+g}QLr}cJ>e2P53KP})9fST(!)>z32ZzJ z)(+Ykttb-GO3YDG%QERx*-O~@_YqyQmz0eOI};v*N$&~ONi7B`<)_o5`F@5&@t&XA SUU171Xv%8N%gA8A0RI4{V6B4y diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=180.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=180.parquet index fb92ec4c5ebf0d1a5367e1d45dd9aeb41d2b1fc3..95f1fef4dc6f62b10a4faddf02fec521460ba5e3 100644 GIT binary patch delta 1313 zcmb7^O-vg{6vx@!AxNI;^o-3xnCTUYn?*_F|lM*2bx^ z!Bml>9NG&Zgy%$6lA@}i2CSBdxJeo~G_6u8haOrEy)^3Ap@$wKwWq2|KW0sO0ea|2 zJ2UUifB*a5Z>0Txo4)>lMt&?<;i6VwE@dA-O_yGWwRsa-7TAL@U+CFD&uf_nS16zs zj0ZlSquAfWuvKF&=e0)+^yXujSZLFH{D@-TxkiDt-3)gZbmf}obOvVqI~tzpZPToN zMYD5%QBZo(Tu%2MF)+*b7`P%fX_js>?71K4@|Nf~FmvxC(59L+Zxs;x%V$j4k~&W@ zk5&lbp$`2US`gIhyX7dHQOb`{BeG9Skw-CGsCJ-}z=Kd$dBh#e$<_=O~n3m7eQ;* z0K)|x)LqaYsvSES4J$-AW^;n^!WT6}-q_OkkljTXv3v1CUaMo+eeu@sM;6*I*6#)j zTVfAlcYy^6r1vYi6TqCmgGsMJw6zNpx3 zfbFXP%jZs+8v=uS%>#Sxt4 dJ27EH-Y0A%)$hrm+)%wH9IS1qs#5=o{{Uhl#bE#d delta 2025 zcma)-U2Icj7{}MXb!9kE_QlzUWIN!Qz_e?(vUS95r|a6CW?vNO>1xR6IsM$u=_*~< zwMeFS%iIR|Oa|SYY#3u?L7qKg7Mu2bGw<3uPd36zZEbmRV2mG1`17_LohO2q#i$wnBN~L zlgEe06zGp{5NsVOR-ZnPn0sF%*fsJI8orER{=L$ydlwP&=eMYYf*T{b(D?3W=$ESq z@}V^A%oSYy9m!}%bK$kolj!^n1V4|KWlda1%$aK>Q#O_h>&9d>{XK&5u@d#!TZlPy z3&E+eJ?P3E1loxr_5It3IdL0-Wjv0Ce?;*1M6o(?7cmciK=A8$1*|U5J5_`sT>e4@ ziUYLz!n}(4>kJu~L19VZPt5;uH!Mp! zN5w25-1y93K@4GmC&0q-;d&Lb6l{r#c^cV`D&}cuaq4MoacU`CTE#4-y9tk8f)@vu za;=9e6UANER_&z&LAPhHTkMk}axhHSmA*kQVodLCRkD{3x?~S74n`yi zS9k*+$=$su21ApL1$${vQ0#LDf<9bH@7!U2wU*wuFPZaxz6wqp&R*Bvx5w?-LqFM1 zr{l0@GPfiW2=>>KieN+z#k%`rAu^Rth2i96DP;;QBY=aXyO@-1sb01n*va)p?f4-r zGag5urTvw~oR)mVq9hRm_2Eh=KVo}HNAJs^vRRw0gRcvVevj;;&J}6M+3d5zp(C#& zc3TVFIYJMaM5B*ojVwNGwHEBvaIzF}TI|&hUHgF0V(%A%ZGnz}QQ#y)pOZI-MT=DJ zh;w>Qstj{Y)*eAOs1;JE#ADc1Fj`Dt85l22KCca+KGQq4BDA>%Ag%CCA8~z1dSn26GuK;cJcPG z(`<-z@mh&&#P#ZJObn}^OBEhb~J`-K+VY_5%UY=4Tt6LewIRFN{R z1D_^V!Cy0ZL-sUqQMUWt7DMbYiLi^e#=0Ck@b@p zZpA0{5{bjIt;9HVeyNKe#BlwTx2>m_jdoUPG;8tyi|jA%cH8;_&%wRh~)I45UV~?9NoPPosf_*&1atuAZw_R6-B7LHKa4 zK@o=sb0#ld2an-cwu?1J**4OIzmKd>&cB=YrZ1@&F;-$kok1(g?UF+$rScdV?)MQL VtoQh&*MLjMY%45985!i?{U2IXzeoT8 diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=181.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=181.parquet index a124074aa942c1320335cca490b49fbf25ce8c7d..37356aaeb34a7f9c93db2bb64892a4977664e08a 100644 GIT binary patch delta 1378 zcmb7EZA@EL80Plg+cH_)q|mg|X({t0YLh}+1|<=4xTSC#%Ajb!jA8Urx{J33tWes8 z>_Zm)VP@QmOAuD3Su(SzVe1e5v1G8d&S0F*ELxafiC@tziIiI~jpLmUCy0ND&bJwxbYWm0&1^T7!%<)lF3ZrLC&~%|37Szg9cVIRB z^9K~T)zzx0MGAd)kb>EB&6x!?xs}f=;FEJk)z>)%TE0xd)>>0$Oa0x|^qEg-FnMcK z%kR+W^;HFoo^K{>n#@V>4Fmo1mki7&^s0qR44VF&h7Zp-pPnFWzkSO>*^FNG%ttJ` z_7wxWrcIgP%vp+_yTQU_wn{a3jYZk3EX-&15S%?q=YL}1Y}TN9@kbUN`+){>r=O3nXVCW;&$-9DJ6RUDJ6U}Z-S?nDmIt(?GE=#1k`7-!wXBfGQz9V z>pn)sI>DfgEodp`K5VHkXV6CXTZ)+8Qp|7&&Jco)hHookb~A&DyRH6Lr|)ObMyqT7 zht1^({a2qKfX)k555lHBMlm)Jp6C;XrLkx%Zfr6<`k2XJTu=K7XW_zbM)P(h17E!B z*=99PmS{I)k7uW^DK6{|NBgyl6=r$th;)GG;zP7M(guew8aud1E5=yq6R)H zjRo7iHov87Jk;TRG8A)*JH^(Jzc&%#qqp`X`$#D2k;3iX6hAZ^@zrHseQ$)_TQ|_j zVKHEJNddoSToCykd`DaiwM(K9btc2TB>K_mIy9NiM-lSlW#zQhE$0s|7_%V0VWyd%m*T0VQ_}wI_l{ac} z1mjN3W8B?C)HyKj!C1mXVS7QbP0q2LyAx#PWR?OIcKmZdn7XYnnQvemjpjjkGjE|> za5e8xIESEarCGrb!6;cehv3wTwSpTqkDJXh3w}hN9C7nF++1l;v=a2HjlwWU=6;x6 zZK0xYWz|vUPLX~z5@;I-sgrVgx delta 2010 zcmb7_e{54#6vx-TJGuZOf?K++ko8TTC}`Jibt}Y<+jcFlS@)xZwkv-ueXl>a_udL! z*LH+3k;KFxnjAtxB7evqN}?d9Mv=gNz{UhN25uN)3=)I>g)_sb;iulWK^Uxg#( z_ndpq`QFdFNk2J4{q!}3ny_1+O==y>mHS-KU!_Hd)-eUJ=!_W_ri-%cjkn6EsqYj} z;h_ue^(&a`4H`9U^(@ay9=(>jbX5t*&y=gK4J(<`lZxzU%C2R;x<+XV7Zw}y7A!4R zQ(}9tP+7EhNzt9R6-9e@E101R6m$3oCA9Bbn++Z)(NcSFAb9J9M)l!k#PnXL;Ikof z_U98v6x6Ys2&RTgRmXls%++5IEFIRsrIQD#o4+H7pDI%wokGl)zadz0YAsZsSq4{5 z?V%?BKyYBVOm*lMV)~{L3=Es$T;Cq*ibW4jl?^V*kGebf2Oq27G>=(HK$87zX&2m3XJXq8gEs4W@_2=Q3D&0xwSJc>2N zKQd1uugyssB+n~|d5ScQrpzz@57H1kunaNtN!R9pyy6*vm*;?6n**#FG4sim=b-v3 zVxEB&F}Zj)jg->k&uyn;QZSTm<2!|J^eTy z4@kj4qOB_vmxs~GnABAxpO=ziJo982R$eH3-4@Hy?qP6#FTm#t6-l^1vZ|tiyqp|D z9!CGGboE>~^R6-{3F-4z`1FE%g@N9Yr(TTR?ndvr1Ro8F0rfzMPF`ywPAD0Dlfum# z!9PkbvGJA&#uiMLtHuHEj%v2Bf~nK*wI_IoQ041kjjT|SV6Dz}&XCq~USl}mHFo%Y zQGw5}Z?N{RYF0ExIq&9JW6Y8adeez|D~|a^LEs$jFelo({4M01!>H#RDQLc^UajXu zfi!aqY%CQa#d^+XG5RXqM&2Pe!7!1P$*%238BaAHHZ-ytOZ@<6N8GwaXKGAGpgBBIZX+qT*JK)7p3&kd@NjgjL^<1uBEsRw z_{yE0*>Ay%o@mfv%E*%mqC~*!%(VKP#u+7&#Yp@NSINiZZxIwd8Qvgtb1@kon{LQd zrRv*pEZjoyOO_}nx}&__Wbpf(Jpr#NIn$$^O}b)L8CI&m@&myeXV2~AQyANtaeT51E-oQbvhyhW4mmyrKuY7C#n%n>AGRVghAnj#Dq=B z_P{q2W@UX3+$KMbJz$!we9^}1x@SgWym_WLqSHa|WVN!6oSv*wRKOIm5|m%5RrCOV z#TF)V$QTymR%}UOms~{dC(D=DBjp{lo0*twoU-8!COt1U2tI=_lPAbXeMIg<`aN8; RGQjn{yTDzNmnZ+7{|kLK*V+I8 diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=182.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=182.parquet index 7693c7649b13267e2261ce0af73996f1979c4e78..276cf2ca4bb1d0d35ed36ea1c1155e9855706c02 100644 GIT binary patch delta 1345 zcmb7^Urbw79LG7mr9E2ngw&`arBZ(F2N zC`K_pEOD8ClKXI&!;NJ_m|KjdCg@@o79$VS2jiMB2AMALNfWY}IDFB0?q$9VcfycCjJ?gr>v))5!ABP4Yr;w?{t7FS9nbvfIY* zZhq!}aJFvBxM~x&^Mv*uamyQYGSe3y>EW}&P&$*N57xfaU0+MDg+20FT;84i@F`$W z;_e+F__Tw5v&^VP!Qheb!5n`gp6)fyZMR8dU!nv5umik6`4VkdYXo#9n`lJ{Ne}Y+ z+VJy6V5x~59Zqm*e?Ha`dOaq%24d-;5N{8Sa;a=0+&Igaz(Dy}V_zqWl2M0Oh(>~W zKFRIlI&#TayO8A5oZpND?J|FY-e^);Y{& z8gf!@G~D!RG~(~?ONR=)UC75IO_nQkrnn(r!RtaODz&(Fzpaeplh(jpQ zMU1!+>Ox3BZ3wl?=A2TDq}Vr1W>!*>rI7o-1ELgg;MHAVztVlc){pHpumdlS)4;9p zr0^9QG%L6i{#}|oQ+SURIJUD{Ti#}qw9ql><<8mic+d*=D_Ti~6*vLHzerOrHq?O@ zkjBUAfSdA-+Hk!USjR?Vj!+?L5B2wkr8d|D(gjIEYjULN)-J>n6A1B=DfyO&iM7$i z$-R5!NM6b-R&wZZWsiqFIlf(RMn<_NMEH<;!iSgi9uMHbkLo}Wnha%S(qHpmbYi%1 delta 2138 zcmb7GZERCj7~bjaZa2nstXtQWZj3v<7}(aeTNx#BaJsJDZMJqR&~`Pl^!D>^_udV< zuI&~a8e?KYh*H8)W1>;Sgb)K6X8S=R!H@tEF;Nr^GEu~cgMkKr2pZ4nFfPy~dVZYy zp7-N<-}5}DN#8xG{Q8_y*$X|!sfniFbc(s5><(@9yHooI3l8wQA}#x2lQy z>^%iKyBsj|nU@vpjFi1I(tv79LHU#`UD`yQn5DAY57n!Ve@w9l-&dgRrJz0QN^7UC z9J<>`9eKSFygYw9z4Qf*?iYe{)V`}U zI`SB(Q=OWn*_kUex=n+xsQo|E=$s0B&-_5M*S@FG9Tk|R4*g7{=N<>ERhNIF+3VM7 zbgu}!K<%ER(e7eA>pQ>D>>oF1R8j^Qbh;SyQb%vm$XEt+^r@RPyYD8ND+bkQund%w za2ZN01DmP2+qk?8kM-9)&3-yhqf5&`L$)`qIi|-%96Vfun z&{TnxC7=SWEdd|tE0s?wv?T-aNKhOR(gP+-0cN3EUwxU)D^2z^SFU82kVc(Pl}$^E zq5dBlAglpy{D=m79s@ObHE74W=Me$B^QnN{`DCbHQUP^d-q$MGyo8sdPq0G$7fL4> zK@LaK1EFCtDai?DW8E{%BJP=I8|s*a*g!5Zl1rIj7BGER|~ zTw?(T9+ouhaC*I+{iE& zfZdYp_ZdYp8#iQ51^qEZS|~{ibfXIB6=5Ih)d3?W%HfUkUAW%9A>-b%1ja*TqqS8) zr+5H`4r@Rux~BsblimdlLXtNgc33hGs7VBU&P>1GY0ix!Tg}+c@GT*MXb_gXnUF~w z;{`$+mv&`ZQ{975h;G3&%hotAdEz0X#T4*6$AdmgGKVq9C3}R{3@0~3@?K!qLf&L3 z1);5vIQly9o`5*G4tC8zABq-JdF?-2I0vO2mA;rFi8YCov%GCY#?B7yEr_%yC>B?HL?`sooZY0S^M9oovwB+lHRkgEl2h8OG2F zJum?un%4uHf*VKX8qluj9!E*?b&sPDYd}kdEo2zWHHL6o4kBhSp!+qTP0@)fYC$Xh zX$_K(jNYmRo4`1ltp&Cyo(y;7Anb?M6zn0D_^RY4Wc_oAp@l=vM>Z$fLMDqbB)LSt fNzBDDd$>MEa4_D3wJ-}hy9#)UJi3Ac@^|8Iaqh8m diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=183.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=183.parquet index d53d7d38e912f7ae70d0e5e797ce0654f87b2b46..ccd25883e8e1198287fcce66ed33a9be98adfd0f 100644 GIT binary patch delta 1265 zcmaKse@t6d6vw&mJ-DEwW58xRI>VT`(K=V49UD&DU0x}?hBD~1KbH6heS_NC7GhmV zYjke$A58?ellU+(vTXk0h#}FMLALCdL!blK0L% z@166_IiHiL<)T<10LGs8T*C|2OPcX=||%fT~C7I@-qZE8hS6)*fG zK>yONg2}W%KDfxMwX;hl@cq&wnUsO3n$p*k2jBGR@!&!(>G?%S{nhuXfu9@3(6y}3 zJK2xPkG-(t@?&syxj6OfjeL$D`2@ospOzK%T*BnSMXayMc^D z@WW_1o*Kbq{00WgiUsP&&hf(&7+zT^$8+PDER10|HMScp-1jIA4@ z%_0hWmaXdpE%{%T0?7tx-2kH6V>U(WIs_{Ol8x}ubuRugDc1~~L2?+nx{zjLTUBL?ayrR<>& zXT7qWNBRf7hr0t(q&eiOK|o!($E%Jui8SalIl?}# zD=r768mTcB^f!cqa>Sl!Kdi>0qr2T>Psov4lN3}XqesGWw7JV)Z4Mp^(xCGx`Iu8Q zcT3UA7|Zo}_CDwHHg_D2xD#@9IPPbfqLgR~NynTCM=hm3*6LcG%j;BwO7@|W1}JT! z5~VGz>L4~sTPY3GdP*BI!AF@bszXpJv!OCu zQioWxRw>iFBNJtgnUlySwAXeX@z`T>L)h$1N_(lwN3B=+$V~4aLw4o6&B&Fn+nSTZ HZn?h!9J$c( delta 2110 zcma)8ZERCj7~W}bZ##t`j*V^WLc`Z-spF zH5t^36uEC2(079H`tOax(kKRYNx(Dh?Q6YIwMD&*ro z6Y$XI8s+7y1byNoIXw1o4p(>?;r1RNVZ)?GIXbPNAKoD*x+ZP1jW;DyQ@pIySU^5g zswTLA7%Y~ROs*{1rz$z1qE8$m>1zi`*z-sO@7x`iUwo5<`yZ7ne;Fg`A4W-d?olIr zeDApYtG7vb^tW>5-XkQv|1A=hJ#K`GsdwdfkE5Ka^@XS2A?c&XNL1>*sUkQz6_ex$}Z4QlH4w@TPn@tpF($4dIU_enVOpb_4_UjkJRKGhTx8)fRJyQ86ikcbU- z8%zbLvr_6QQ{8_%)8p}gB?_A6U zx6ZDXBSv_Ac0;ujO;esi=Dq&~-Lz1xC9Nz7!m3%zVFhrlHBiF^>Sc_})$VCX^3hN{ zpuSY5#j7&nIGh4od7a^4i;&3$Ee<^w7tjMPLAoXb z>ITl>*y;B;b!;pXVdHusXtyDRE6VotMM7DJz{Q;demg23mtb+Y-OavKyTxG&yDzK* zAfb?)3b1lhJ6GdCm9nwC6GhLT{GI=BcDt09Y=4uK=q?+;bm>kGrEm zyD2-bPBP$eWPM(TF-IkujmXY&HGEEnVBDSM4Z;8y!^*LP&TMU_wTFp?JCV|&Im*Rd zQC@E{_`QyyfX9^1arCh1wpeYJ6?F_ABBo_7Z-mbUNgSykij@Gi#dtS4!q$2V$z1ST4b1+DE1*JTDghE2E(-C&1;AXKF=W1 zII0e}_4G2CjvB2N6~Zt!yfNmEI;mR;>If#I9gyBo0t4_!Un+rB#tunED$pov9g;fn z**+ve6{uNd<+TI3hZ$x^jv}JfN;g%YPS%VNg`gJbq!xUL(r_VY0z=X#g}^$3Dnl=_ z4C7Ngj^h{hwu^1gZSpxTrIgvfx0{q f=--(RrKrMvaEpp~*# z&EhirV0_tfmL1~e#C_Njx0q<7hM5>+MExSmj9H@cL8BqQMCrC_493NC%KS3AliYjG z^PKbi&-wpOa>_60|NV#O$56zImsi@#wm%=Ta~Hk@WUd=LpkI0$h>hfAHyC{94!)Cn z>2n=!?%XZ>eNHDHz68qF&SQ4&$O)cUO~42%e{tgXU+4^Ncz0kI$(g{OnxYh;iZ_1J zUNHz8#|81qhMt&uz(9F9g~2N;B}e{2*# zeNP~-vZ>hbDIK@+zSS9__~+7@H!-; zd+GLTr=WQD6vQ81e~Mdw1LEH5J;EQSq4?2hh{M$qw{!;LwQ7g()|*h=T86k%HIwhU zK}&Pf_dUj5FNSXtTsR4k2>PEkwS7f`gAfEQb$!!GCsbLma{i= zTK`-!8_`n!Xi3h@reoIkU0_as$T}UAkeaXuv_w2oP*i!JJe*gPeoa-fzG7;e#!_G* z74sF9Y`%6v$2EXcXuJX@QHIiE5!o zm==1J{k(Zgfdmn7={&Ro0S7?jBI~BeCIW7dB^D3xHib&`a{B1{A&IOFf{sI_q&-?p z*rGF2F?JlOkKG;<+?J(>_k@u|%^;*ObG0j^X0}^cu6YR5qS~-Fl9*Fp|LjD}msk9n gBVLl7h;pL!l#{~rZZ_Z}-*`ZzvAwmSfjx=;0rpYBegFUf delta 2093 zcmaJ@T}+c#80Kw@pGK!nKnr#RKlB4_q5skXf~PH%uK@~0`)3x?e*J~7rBX^MjKM&>Eam%zg7>M*B}0t;lB8W zQS2;hglRcMF=~Pee6}7=NgrKc@GD!Pj(Pn&!#zFA;LlaifuC-JD!jNA-jg1^%-~;D z#DC!u!=1Uv;M3dSiFE!t0dlZ~`TZ)x{dR@HuQrjWiUzPrKb>c=zkyVB?FPerbc4Y& z4KOafbCbcVo1upJWr5*NEihQs3_I`#4X_^fHNtM`k?$G&W+QB7j@@Fo#qUT>#7|rO zN*UqsFH1y$X5@?!T~WApBmPg z%QoJvs#a9r<(54{=Q92C#}9SLxaIoi6DNtag#MlXEqlfP3tm}L>&}u2liZ~w?kuS; zE8|MZt1K-l0hd;D13uOan|%u}9AM+gP~adWXvatg6^cweIbouZWG0cy4Nv4!G&5T;;{`R;$!+lx6vSAFhYbEn z3!9__kN4}KzNVkdOo@!dS`y#5RF3BgUE(Z6<90P@FzCVcl8&7zldnN8m($al7GmK< zKz^=9O_wt2z$rcKlA^&L{G}e)wKl;LMaY84>NDB#eLW~%CW-)FE%=ZdIu?% zkC!aU>UieIqXwvELLM;_vPH4e4DuCP(x=9WKQn+*=CX@9eBS`_;z?zOYDvC=$TN;Veq;2kE=u8Rch?pUygaCDn;&LKSC z0-M$?dkIVu*HHMHs^=9V<>Kq4pjmhExrBr}7P6aj{K#082$l|b966uYVWf9HX)%&> zE~pm@%7hZ`oS+jYgK;V*Kh>WzWP3+YJTgRzPFiBYgexX!%{sr=F&*%jGX;(jKGPRB zIV z1@CKx78%N_C-J+jpaT!S+6p!aKaJP5L5HMw8awINIgQ_F1AV1UP)`;TBeb_b5ml@4 z?KWtUbdiX5Fp%Gyjee3i*AAU9jZe0NZI)C diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=185.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=185.parquet index d112aca5c3890152bfcdfec5c1262d7730252026..dbcbebd6267dd5247c8f8f92f8290e0a73f49e8a 100644 GIT binary patch delta 1438 zcma)+ZA@EL7{|HKy;ueq2p1|yO<1?x#0@O8WxON<4!0C;LwV`6FK8rfDP6I*kale; zi?R>KWMxVs2~T*D7-P0<({65NWiFb%fzw2Ty2Qj7joWv#shNaK=D7twtus5xz2`jV zJkS3=|MN@kUvv4()A?KgMonlS9noxcl09y-I&hSMD6eo{c%*bgt| z&h)lvRhxfs!t64OXCu&pv`%&5avRF*r}y&kUIetNch2Mq8=vLQtSwewIGs8xv)4`) z;wu_vmum4&fsp(&4}Z*Os?+B+3_bh)w<5fG7&NMn7K()VGllr;I8%+!M4?2Hu1Noq zWZsn7TXQ_tL}^y)hZ14&P7(G+p(VY#&ZM|K>mT!)vcih`oTrK_$~liaG*kxa2Q})o z67^3d!uM!sA37_F^9k#kk2r8+-gK9tj7Ps->H} z@cWlMeyyC(hCy9eFnGx44vq!J2lY*OA`B}9)MACE;%DJeWG$SK1yyTSKr^RPC7h5I z5Z;bMDLf7jpOs1LlhHs*L&FLGLu2nFAdrHf&a#1M&B{Q#M|e^Q`yO-k?s2Fro7r(h z8wd^g#s|Hl!KfUHXq&5E#-(vkr}rhGjKlRe!1kO$`+81!A+gzd9nBH%A)o9nzf!7G z#(sYn`X}K4YxQ^F$w|<5iT-v%i1HANwS%r2Bsmxz=(HQ1`kt7l%YN7svIcqs?H=dB zxL=aD_kvAh9@!T3b=oJSkx{>+E`9YVjO9+&4Rwno;4)Z(E~hQ#4M_W?u1LVs84P%3 zbHaC!#-b(ebC?rexyc{}sAOm$=neIZdGtp584|F*=#5%MV_XW=MwDEaqy9CQvuAin zwkN#$V9cXvic+F`M2cDymL@`6ih->>o6|~zT4ke__zCGI5+Qy4)SiiuenNtTTI|eN zHYzbuVr!hvqN0+KBBuWis8XK+-#rEmoT*VajNcpsJ!6?of(gtcXih>4NF(@`GIx*Q zY7z{k;;1gB(2p zPA8#qa>8S%tN r)Z8>W;4nwLok62>LaHb9nrJ<}CaCs$}jm}chuVN delta 2191 zcmb7GZERCj7^ZK#bPlAI!5mvB<03aCK)QA-Y$O7wE$wc@)={ACO2X26`?=nGSJrlI zH?}d{5cx(D-Uw)je~dy9g2|MaLHwouP%-h3@&Jm<&#=xEjNZ&vBLh|h9)uG+p)dvXj;_%Co3zg*Gql_##BS#|l`g^P;zosTPU zr%A&-cmG!%e|s;OYVlr`rW)^7Xawx&G(A-(;p3}#=xXMbK1ZkI5%(d zcnt37w732+;GPuJ>wmgw;1At2;L-swO-`lYJB{|t-v%TD(5SyXZQy_Y(|}$XR!!bj zV1Y(^=T#%V&uYiUjQrgP2E0B1>oL&>_q89sZp3&Rmg;ZsGxAdtMm(B^z1ky(j5wU9 z_g_3{AyZ~9;@B>z#RqxX7p)sn-wzwLe;qTT zr=Jo%bj--#IBLWt{dAMJFx&j42HN^JpH<`j47{vAzqgt{^@b5IWhkkW{ZNBb{cyEm zk#0HE&h1G=!*V)V=&`oVsky&;v1#!Q{s~h~oV&0<$3M#yyqtyVr+ZTUgb_%MSg+$B zHv*{eq<94i9xp)6(jiU_D^XfhbF#duk&7jxa-`>x94;J!jWt7DRF(Q7Ni|Nl za@)7LR=0A)!;|k8V37{rF2cNy&c6Ogw4Zw%g8Mh04y%!HrYBoWv-`MQQq8uq{c280 z7yp|^^KNK#I+JDaW|L*W*0hvC!}?&_q^tPHi;?Ek`A@u-GRbo)pVUmpSoezF^U z4OVV=PVGG6^LYd7GEyR{gln(Wnb}ww_u$H5ctuOLv}0-*xcN@W9w)?3=;&y5l{2&`=Mx#i*vwNN?~D5QechXRl!tD#{G>a}T6#kclAJ*a-%IRcht+f;ix>JXTg zN;u%pgj{X8?tn#RT?r{$J{*jfsOT6K932JIO!Qy`%v5!^KOweL1XpX(yY(q3k2!}| zN1zU7!L+mkoZ15~jrwQ&loWp=;%+O>s+tK0JjL#y$5!H_+HEv0ip^3+J5 zOftoVLT9lhzqywrV_T_%sy!hpzJz3Hvxb76!Em50SHkEOavjN*qM$Yr_R2{6%)U`6 zPl$61OKfq_IYVf1CD}xuV4l82N1V`_#MaI@dzqWqx`_tF!%*xQ7Iv|T6)2K9W;WBn zP7*9fkJ3?k(kvikGn<0egxnn{P>~b0v5wvp$#*rI&6EfsE;bQ+*IKL@hqXGAHxJ;J zajALJi3G~q%3 diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=186.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=186.parquet index 3964dc93c386f82b350380a0f155daf6e66e3351..bc6c4172afccdf86eb696ab6c97689358c1f93e4 100644 GIT binary patch delta 1267 zcma)+e`s4(6vzAC&5}lkW^EJGH5)N*7q$k{Ch69cTD^H`+86uU{LuWEjFPEELj1)m%3EssQ5r5M zj63c{@ja%pslK5>-(I3%ZMRW*^*n{Y7U6{649R2@R0Fz-qfJt|v<{!Nn^Y^mQ24{k z6pS4(S01;Y(V(TPG`!clTYdji8lT*t40_1-G*@o-ex{-C`~eGGo9fyF8h`Tz4df+r zrOIh3`lH8iF=bG0KBV!vhj25s2lkJwqMIiX{FXARmKPAdcmlzXBR9~6*AZOs8dd9y z2%lX_ooovd;};k6Y6=L2TA9&g$C z$a19N~8F0fe`6 zgeupB@P9e(t;0~NV>?7?u|CBn1>TO)v>*RZjt3QZJII4Doo;If^^8f##uL+{{J1!o z$remK##fJ;ji#+|w6>S1tyY|4S_M3v_wTWp<{I=niQhjG>M8KY5}Bxet;HhSq0}JE z=buMhsvoZ9O;0f?Cm}@sh==Qk`+39Oa9}FMW`>Kg!Qg8#(UFT~{9x%hrG~1QiKc*)+T_O+#t;Vb<2dj9ZEpi>yLkkq1}7QiOeThiRvj zJ!hu~tV&}PzM6Z1%7AL#g}AZ>?#@1Uyd1LyOA%`@84bz5X1e7IktMc-q(YrO!bpV^ z!pn`+?nNqm%Y1CDUQaEmxiycGyK+0mkA&O>en7N`%WM~sm`LX(CcLcomr-uGGVgC} K)HXE8@7$jgBD7=x delta 2091 zcma)8ZERCj7+z1yig98E_C1zz)$3%PUAxt-$Tn`XvJp;OQ81}8BYL9-Zq0fr2Ecqa(aX>L>58cwhM6#uJ_n#X2<0GIX zhY04}4euKUboXo6wxv~n?GU1G-PVBRRny+o^0~`fw3=tmev8`b>zZvfwT9*<9T$~j z^{8Q|zTvL6;Vm7#?--&_e*=F{exbd79Kq*XjrzmiBl`Sz2rh3uqdj*T!Ksu{zxNcP zkDo+vBKouT*jWU7xYhbQXAr&b41xj91g{Ir;V;gm-TMR9`8NGm=MeqQIRsnzY3=DB z5nL5o^uL}*^e5*L%nNJ47@N?}UqE0=x9ay?K=f}vA@HTw+$ZVF7Ci64ceQXNPU+v? zsipT{L@>6@1lJ5J;Z$rT{1H3RR{n(bYLz4#jk9_~H|@ zlpx3A#YsLR<|R2xtu?+vE#i}U&19q&e3RwCcsXR2lA}@_2g`X;#1RQ0F2*Jo*`QNe z-!MzXWj+%VZi7EpF5te*MTC{d3~AbSbUm#G@p84SMaJvvy-`!LW)s& zLC*D)csVaArH9S%(Uj5T5~{%6Gd_w1%cdH&7!meQJ^g|YuTPam?pgmUwPP_`6{9S2 z!U4$%zsUYoR%&}qQyt^?j|bOg`BYqrHl1uSlhc{>fFm=YWj2h$n;B|{i+3a$#=+p@ z?RR6TkCnuH#2x4jS$zd=G?3$DuP`n+I99Z0BEgX??-qMQGpvmjyR)p*ljf{N3m3E{ zqCwkKB$N{Q68j=MlEXN*6c^k~a`UlZF+1jDgoq@HoZFw^q>)@?BZ+g{ESy^L6IJ=-EdA82y*?eUUFH7zCY+u?U^tu`cY5rJz})qWvIN?4Pj!rQJs#XCD^%^s>ACNR0i{_V3yS%eD+#Of zO|=$0V)r=ADxF5ZTP!W~6j36<;#A0be^^E!KA6unBRK$9v+d-QS1e05$qpqBA7-0s zr)+98lqB%f0(`jp-{y-2;cnLQWFqPgq_|NGFw$Qd-v|e?jZZ%E9Jpc&j;*V&Bnh_- zALQD11Qs5QmjbDn+g@VRnIz^c8x49&;gH8hbXIoQuw3GL_%b~)DNy3AVu2F~pKQ@r z>Q%?mjF8xf-$Qn!ILV*lEp}@p fQHf4(%g1wFyrOhPr>8S2>@L}tx>{;#$p67VUJB2w diff --git a/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=187.parquet b/tests/data/small_sky_source_catalog/dataset/Norder=2/Dir=0/Npix=187.parquet index d1ef8c78fafde6f0085cfcb8c92233f2b6c7db5e..d264fe612b6752246a45e22e2b160fb3fd0acee8 100644 GIT binary patch delta 1250 zcma)+ZD?Cn7=U~4J#D&n&bh8JX*1Wga;#NInxtDZFzLxnlitvDP3rQo38T49v&5S= zENi}G4#v`?jJ3?3bX z1LJ0Bw<-(H$B~+Q=XDm`%?*l`hYY@-V+yHeznZ=JGpvzD#hpzS|2oRTFXQGyyR}Zu z&3(f`>qK3}#uA4g-Us)Dr3hL%NkO@f5Uic8Q>@M*ytTo>2NULkZsa9~yRwMjtz^Ao z@neL4youmOGS4l2j=(h8pm^gmgma%Fcp~*YT$LmZWAJ-lA^hhmg2|~yaAbSA_rFH)$yA-{I_s3!dD*AZF$r( zq?*kf-eK9YQ*cKKua*)@H3*k>TJxVS_aVGfrumuwZ?ma{$>&NMT$-+DVHez+t^sC7 zS$K1%mR|9!=YXN{T$yS&@pz8;jwZy@p;*6aalck>hr?a4GW!DO3U@+Pu5k|^wh}_* zhd5oGa5SfR%HNj?3$dPLu*-WkD4F8Hm`4gZyjdYS9QL&qo_;r8e!g{}nZ395Ooe>*j2JT+ga{=Losh(#o_J7ij2w%Qi0egh#Kjv^ z!jLW@?+y6cUJm$s1_xr^jHs8AL7B-5neM1C;>tKpgaqV7xA%GcE*j|M1sw?!(oFjMxUzM6GVZ)5Hl8J$9R+&2PBVH=uiH6igRbjZ zLLg|OzZSN4Y_I_v$KXRy5vIW>ur1!!r1MKwB`` zCnKj`fd>QYV4}HX++|Uy)EJ7Y53b%7~@_Q7T26U`bm8v9ia2L?3- zUtW=u58j4}!RmBpLtKGTzeVu(phh`4iO8w@a?tKuH-4t)HQDNcA5m#>q1u#J@Pb;U zVEtmCSYGn|?2^;@CGY2xAAE<%YZp=Jn!GYuN+k<}p^tzqd)`13KO?xgN2}a@8IeOj zA(+#99=&@V!PQ=^^5IoP_FP5K)4LM3?0*q#eSK)`7X&}_Emlt5K;*6)2xPDu{dEh$ zwf&{aL$?t5+f4+gU>iDp2f@OAjq;=07~?jA>i!g(x`$w*e}VGPyNLYaE`r{E6)^q9 zaJISVJx#t^{*3~(>LmrAD9E?(BUpq5o3*zD^n1^i7Auy@RnNCXf_}au+TCI_=i$-R zrRvM%p{KNmp0Z^MGE4jFXGy+1TkZ8ZM6Uk7`ud0F=g@YYg3K*$Q4V2oakjFAg3Ok7 zxq{54?eF`F(1+QgP7W=QpPvKQhl*^(3`vRCS855aosSD*OH>R5yMr-et+shPA^L?N z_QW{P%H4qJzp z>KpI|n9V~tKaE5c6b z8F>{^8*1U}5n`^5vxF(iLg7ymV zcU0AEU$RA?RkJ3_a%hl5Ec z&k7A)J_jH7Nd&A;kEf=o(`9v{ni9vs2 z2W(*wj;RU^cs#ueJ{w)3a69-UJQ`IIl9MJQS|Y6Aj&KIEKIpaZ5+Pdjbg*LIkp*(m z1LsB!OE!s?j-Zv6Boq9MC+4%8<4ueqQ`}}s_`PB2QX+F{)AW?tDg+p)J!-&mJ3JA# z7Gv70lCF)D-{iG#P9e-8l%taO!*meJdM#x$LpgNNm|rX z(xy?h83}iC35v39kOCX5*v2TFTtU^~HB8`bw1z3106H-$|<2(Vv^e^ z87YC0bRnG%I~FP;#c(S=>9v*|imH>0*BIfOm~Q+85ml(ZwT((Nmg{tw2u0Z?Ls=Rt zA$hz~K_zruaOSvC#=x!PHaVSwRVUWT>rx=#A6E+AIZ-~}#_77!S5nmGbaPmzgNG+7 zySTfunmT)lM^vTeGbEn+19Gbj5>3_mMT=C&l diff --git a/tests/data/small_sky_source_catalog/dataset/_common_metadata b/tests/data/small_sky_source_catalog/dataset/_common_metadata index 2aa9b2e50f2bbdb0d76ff7983b2682170995d9d9..319e05059a189b05211aacd36aa87a4c18ea90d4 100644 GIT binary patch delta 670 zcmXw0UvJV-6bD4NWtc3$4AYnp5?_|Z0%hY*;+8{8;a18PKIljB3;5=n_m+8*d++(3bMEh+-#vd0zvsU^PVJ7bOwC!?*W+^iYxY;; zQS2afaFlzn(7cJ}=kU&lg6&Pr>#;F+magX)8u>SGkMe~L97j1bir#*U?;jAVA&;_E@B3>1_&T`ZqRMc`W z&^v?ox+mG^c2id`R~B;bVorUbyRu`p2WvE&TT1EnY-e%*rZnktU=LZ*8LDz%*ysdx zd|Pijw&4n)c}XxQu1rM;4Y$rBn=pDK$MAX!y<8!$fGxc;mJ(N4A+PAu+M#m%Zm9OA z6L%0AWhc-nCx^oB3@xQltOE>b|C>5ll?W)(KoKl}E+Bx5K2gU5^Z^_o3fqz53dKON zv?3=*St2Un|0f931&jC6)g)hIrub#L92fDYG@lS=_-Fbwfo3?FIZbqDn9s0TZq5V@ zLs{T8-FTk~@aIf5(InNGN*wTCvTOKx_AKsVFU#*rYch`-DQ$81VdlxrT4x90usoP* z3T=U_(Rop-4Iyc`*$0jY05GVaXlz8l#`-AgTZ~ZTMjl7i3HA9%5qzWVRMa&(2J$!L YKKUDi^4(cnz`1>S`*1H7y8yZL575`h-2eap delta 1263 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 literal 30446 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