hyb
2025-12-30 5e753a15ff53faab2261a53367e44d38caf87041
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
Ë
nñúhf•ã ól—dZddlmZddlmZmZddlZddlmZm    Z    m
Z
ddl Z ddl mZddlmZmZmZddlmZmZmZmZmZdd    lmZdd
lmZmZdd lmZdd l m!Z!m"Z"m#Z#m$Z$m%Z%dd l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0ddl1m2Z2m3Z3ddl4m5Z5ddl6m7Z7ddl8m9Z9ddl:m;Z;m<Z<ddl=m>cm?Z@ddlAmBZBddlCm>cmDcmEZFddlCmGZGmHZHmIZImJZJddlKmLZLmMZMddlNmOZOmPZPddlQmRZRddlSmTZTmUZUerddlVmWZWddlXmYZYmZZZm[Z[m\Z\m]Z]e^eFj¾«Z_e_jÁdddejÂd«dœ«d„Zbd „Zcd!„Zdee<d"dd#e_d$d%d&ejÂd'«d(œz«ePd)d*ge;d+¬,«ePgd-¢e;«ePd.d/ge;d+¬0«Gd1„deO«««««Zed5d2„Zfd5d3„Zg                        d6                    d7d4„Zhy)8z define the IntervalIndex é)Ú annotations)ÚleÚltN)Ú TYPE_CHECKINGÚAnyÚLiteral)Úlib)ÚIntervalÚ IntervalMixinÚ IntervalTree)Ú
BaseOffsetÚPeriodÚ    TimedeltaÚ    TimestampÚ    to_offset)ÚInvalidIndexError)ÚAppenderÚcache_readonly)Úrewrite_exception)Úfind_common_typeÚinfer_dtype_from_scalarÚmaybe_box_datetimelikeÚmaybe_downcast_numericÚmaybe_upcast_numeric_to_64bit)
Úensure_platform_intÚis_float_dtypeÚ
is_integerÚis_integer_dtypeÚ is_list_likeÚ    is_numberÚis_object_dtypeÚ    is_scalarÚis_string_dtypeÚ pandas_dtype)ÚDatetimeTZDtypeÚ IntervalDtype)Úis_valid_na_for_dtype©Úunique)Úvalidate_periods)Ú IntervalArrayÚ_interval_shared_docs)Úis_valid_positional_slice)ÚIndexÚ_index_shared_docsÚ ensure_indexÚmaybe_extract_name)Ú DatetimeIndexÚ
date_range)ÚExtensionIndexÚ inherit_names)Ú
MultiIndex)ÚTimedeltaIndexÚtimedelta_range)ÚHashable)ÚDtypeÚDtypeObjÚIntervalClosedTypeÚSelfÚnptÚ IntervalIndexz"IntervalIndex or list of IntervalszX         name : object, optional
              Name to be stored in the index.
         )ÚklassÚqualnameÚ target_klassÚnamecó°—t|dt|««}t|ttf«rd}t |«}t j|d«st|t«r|tjdd«zSt|«r|dzSt|«r$tj|tj«Stdt!t|««›«‚©NÚdtypezdatetime64[ns]ÚmMéÚnsz%cannot determine next label for type ©ÚgetattrÚtypeÚ
isinstancerrr$r    Ú is_np_dtyper%ÚnpÚ timedelta64rrÚ    nextafterÚinfÚ    TypeErrorÚrepr©ÚlabelrFs  úOH:\Change_password\venv_build\Lib\site-packages\pandas/core/indexes/interval.pyÚ_get_next_labelrXvs«€ä E˜7¤D¨£KÓ 0€Eܐ%œ)¤YÐ/Ô0Ø ˆÜ ˜Ó €Eä
‡u˜dÔ#¤z°%¼Ô'IØ”r—~‘~ a¨Ó.Ñ.Ð.Ü    ˜%Ô     Øq‰yÐÜ    ˜Ô    Ü|‰|˜E¤2§6¡6Ó*Ð*äÐ?ÄÄTÈ%Ã[Ó@QÐ?RÐSÓTÐTócó²—t|dt|««}t|ttf«rd}t |«}t j|d«st|t«r|tjdd«z
St|«r|dz
St|«r%tj|tj «Stdt!t|««›«‚rErJrUs  rWÚ_get_prev_labelr[‡s­€ä E˜7¤D¨£KÓ 0€Eܐ%œ)¤YÐ/Ô0Ø ˆÜ ˜Ó €Eä
‡u˜dÔ#¤z°%¼Ô'IØ”r—~‘~ a¨Ó.Ñ.Ð.Ü    ˜%Ô     Øq‰yÐÜ    ˜Ô    Ü|‰|˜E¤B§F¡F 7Ó+Ð+äÐ?ÄÄTÈ%Ã[Ó@QÐ?RÐSÓTÐTrYcó&—|jdi|¤ŽS)zv
    This is called upon unpickling, rather than the default which doesn't have
    arguments and breaks __new__.
    ©)Ú from_arrays)ÚclsÚds  rWÚ_new_IntervalIndexra˜s€ð
ˆ3?‰?Ñ ˜QÑ ÐrYÚclassz>Immutable index of intervals that are closed on the same side.rCzis_overlapping
values
Úa7    Examples
    --------
    A new ``IntervalIndex`` is typically constructed using
    :func:`interval_range`:
 
    >>> pd.interval_range(start=0, end=5)
    IntervalIndex([(0, 1], (1, 2], (2, 3], (3, 4], (4, 5]],
                  dtype='interval[int64, right]')
 
    It may also be constructed using one of the constructor
    methods: :meth:`IntervalIndex.from_arrays`,
    :meth:`IntervalIndex.from_breaks`, and :meth:`IntervalIndex.from_tuples`.
 
    See further examples in the doc strings of ``interval_range`` and the
    mentioned constructor methods.
    )r@ÚsummaryrCÚextra_attributesÚ extra_methodsÚexamplesÚ
set_closedÚ    to_tuplesT)Úwrap)Ú    __array__ÚoverlapsÚcontainsÚ closed_leftÚ closed_rightÚ    open_leftÚ
open_rightÚis_emptyÚis_non_overlapping_monotonicÚclosed)Úcachec    ój‡—eZdZUdZded<ded<ded<ded<ded<ded    <d
ed <d
ed <d ZeZ                    d<                                            d=d„Ze    e
e dde jd«e jd«dœz«                d>                                    d?d„««Ze    e
e dde jd«e jd«dœz«                d>                                    d@d„««Ze    e
e dde jd«e jd«dœz«                d>                                    d@d„««ZedAd„«ZdBd„ZdCd„ZedDd„«Zd„ZedEd„«Ze
ej4j6«dFdGd „«ZedHd!„«ZedHd"„«ZedHd#„«ZdHd$„Zd%„Z dIdJd&„Z!dKd'„Z"            dL                                    dMd(„Z#e
e$d)e%z«                dNd*„«Z&dOd+„Z'                dNd,„Z(edHd-„«Z)d.Z*dPˆfd/„ Z+edHd0„«Z,dQd1„Z-dRd2„Z.edSd3„«Z/edSd4„«Z0edSd5„«Z1edSd6„«Z2d7„Z3dTd8„Z4dTd9„Z5dUd:„Z6d;„Z7ˆxZ8S)Vr?Ú intervalindexr<rtÚboolrsrnrorprqr+Ú_dataÚ_valuesFcó¶—t|||«}td|j«5t|||||¬«}ddd«|j    |«S#1swYŒxYw)Nr+)rtÚcopyrFÚverify_integrity)r1rÚ__name__r+Ú _simple_new)r_ÚdatartrFr|rCr}Úarrays        rWÚ__new__zIntervalIndex.__new__ßsa€ô" $¨¨cÓ2ˆä ˜°· ± Ó =ñ    Ü!ØØØØØ!1ô ˆE÷    ð‰˜u dÓ+Ð+÷    ð    ús ¤AÁAÚ from_breakszY
             name : str, optional
                  Name of the resulting IntervalIndex.zÇ        Examples
        --------
        >>> pd.IntervalIndex.from_breaks([0, 1, 2, 3])
        IntervalIndex([(0, 1], (1, 2], (2, 3]],
                      dtype='interval[int64, right]')
        )r@rCrgcó°—td|j«5tj||||¬«}ddd«|j    |¬«S#1swYŒxYw©Nr+)rtr|rF©rC)rr~r+rƒr)r_ÚbreaksrtrCr|rFrs       rWrƒzIntervalIndex.from_breaksõsU€ô:˜°· ± Ó =ñ    Ü!×-Ñ-ؘv¨D¸ôˆE÷    ð‰˜u¨4ˆÓ0Ð0÷        ð    úó —A Á Ar^zÏ        Examples
        --------
        >>> pd.IntervalIndex.from_arrays([0, 1, 2], [1, 2, 3])
        IntervalIndex([(0, 1], (1, 2], (2, 3]],
                      dtype='interval[int64, right]')
        có²—td|j«5tj|||||¬«}ddd«|j    |¬«S#1swYŒxYw)Nr+)r|rFr†)rr~r+r^r)r_ÚleftÚrightrtrCr|rFrs        rWr^zIntervalIndex.from_arrayssW€ô<˜°· ± Ó =ñ    Ü!×-Ñ-ؐe˜V¨$°eôˆE÷    ð‰˜u¨4ˆÓ0Ð0÷        ð    ús —A Á AÚ from_tupleszÄ        Examples
        --------
        >>> pd.IntervalIndex.from_tuples([(0, 1), (1, 2)])
        IntervalIndex([(0, 1], (1, 2]],
                       dtype='interval[int64, right]')
        có°—td|j«5tj||||¬«}ddd«|j    |¬«S#1swYŒxYwr…)rr~r+rŒr)r_r€rtrCr|rFÚarrs       rWrŒzIntervalIndex.from_tuples<sU€ô:˜°· ± Ó =ñ    YÜ×+Ñ+¨D¸ÀdÐRWÔXˆC÷    Yà‰˜s¨ˆÓ.Ð.÷    Yð    Yúrˆcóʗ|j|j«}t|«}|j|j«}t|«}t    |||j
¬«S)N©rt)Ú_maybe_convert_i8rŠrr‹r rt)ÚselfrŠr‹s   rWÚ_enginezIntervalIndex._engine`sS€ð×%Ñ% d§i¡iÓ0ˆÜ,¨TÓ2ˆØ×&Ñ& t§z¡zÓ2ˆÜ-¨eÓ4ˆÜ˜D %°· ± Ô<Ð<rYcó—t|«t|t«s#t||j«r |j
Sy    |j |«y#t$rYywxYw)zÏ
        return a boolean if this key is IN the index
        We *only* accept an Interval
 
        Parameters
        ----------
        key : Interval
 
        Returns
        -------
        bool
        FT)ÚhashrMr
r'rFÚhasnansÚget_locÚKeyError)r’Úkeys  rWÚ __contains__zIntervalIndex.__contains__isV€ô     ˆSŒ    Ü˜#œxÔ(Ü$ S¨$¯*©*Ô5Ø—|‘|Ð#Øð    Ø L‰L˜Ô ØøÜò    Ùð    úsÁAÁ    AÁAcól—|j|}t|«j||j¬«S)zH
        Fastpath for __getitem__ when we know we have a slice.
        r†)ryrLrÚ_name)r’ÚslobjÚress   rWÚ_getitem_slicezIntervalIndex._getitem_slice‚s0€ðj‰j˜ÑˆÜD‹z×%Ñ% c°·
±
Ð%Ó;Ð;rYcó`—tj|j|jgddg¬«S)NrŠr‹)Únames)r6r^rŠr‹©r’s rWÚ _multiindexzIntervalIndex._multiindex‰s'€ä×%Ñ% t§y¡y°$·*±*Ð&=ÀfÈgÐEVÔWÐWrYcóˆ—|j|j|j|jdœ}tt |«|fdfS)N)rŠr‹rtrC)rŠr‹rtrCrarL)r’r`s  rWÚ
__reduce__zIntervalIndex.__reduce__s<€à—I‘IØ—Z‘ZØ—k‘kØ—I‘Iñ    
ˆô "¤D¨£J° ?°DÐ8Ð8rYcó—y)z4Return a string of the type inferred from the valuesÚintervalr]r¢s rWÚ inferred_typezIntervalIndex.inferred_type–s€ðrYcót—|jj|¬«|jj|¬«zS)N)Údeep)rŠÚ memory_usager‹)r’rªs  rWr«zIntervalIndex.memory_usageœs4€ðy‰y×%Ñ%¨4Ð%Ó0°4·:±:×3JÑ3JÐPTÐ3JÓ3UÑUÐUrYcó&—|ddd…jS)z€
        Return True if the IntervalIndex is monotonic decreasing (only equal or
        decreasing values), else False
        Néÿÿÿÿ)Úis_monotonic_increasingr¢s rWÚis_monotonic_decreasingz%IntervalIndex.is_monotonic_decreasing¤s€ð ‘DbD‰z×1Ñ1Ð1rYcó^—|j}|j}|j«j«dkDry|js |jryt «}t j|jd¬««d}|D]#}||||f}||vry|j|«Œ%y)zX
        Return True if the IntervalIndex contains unique elements, else False.
        rHFT)Úkeepr)
rŠr‹ÚisnaÚsumÚ    is_uniqueÚsetrOÚwhereÚ
duplicatedÚadd)r’rŠr‹Ú
seen_pairsÚ    check_idxÚidxÚpairs       rWr´zIntervalIndex.is_unique¬s €ð
y‰yˆØ—
‘
ˆà 9‰9‹;?‰?Ó ˜qÒ  Øà >Š>˜UŸ_š_Øä“Uˆ
Ü—H‘H˜TŸ_™_°%˜_Ó8Ó9¸!Ñ<ˆ    Øò    !ˆCؘ‘I˜u S™zÐ*ˆDؐzÑ!ÙØ N‰N˜4Õ  ð        !ð rYcó.—|jjS)a
        Return True if the IntervalIndex has overlapping intervals, else False.
 
        Two intervals overlap if they share a common point, including closed
        endpoints. Intervals that only have an open endpoint in common do not
        overlap.
 
        Returns
        -------
        bool
            Boolean indicating if the IntervalIndex has overlapping intervals.
 
        See Also
        --------
        Interval.overlaps : Check whether two Interval objects overlap.
        IntervalIndex.overlaps : Check an IntervalIndex elementwise for
            overlaps.
 
        Examples
        --------
        >>> index = pd.IntervalIndex.from_tuples([(0, 2), (1, 3), (4, 5)])
        >>> index
        IntervalIndex([(0, 2], (1, 3], (4, 5]],
              dtype='interval[int64, right]')
        >>> index.is_overlapping
        True
 
        Intervals that share closed endpoints overlap:
 
        >>> index = pd.interval_range(0, 3, closed='both')
        >>> index
        IntervalIndex([[0, 1], [1, 2], [2, 3]],
              dtype='interval[int64, both]')
        >>> index.is_overlapping
        True
 
        Intervals that only have an open endpoint in common do not overlap:
 
        >>> index = pd.interval_range(0, 3, closed='left')
        >>> index
        IntervalIndex([[0, 1), [1, 2), [2, 3)],
              dtype='interval[int64, left]')
        >>> index.is_overlapping
        False
        )r“Úis_overlappingr¢s rWr¾zIntervalIndex.is_overlappingÄs€ð`|‰|×*Ñ*Ð*rYcó֗t|dd«}t|t«st|t«r|j    |j
«St tttf}t||«S)a    
        Check if a given key needs i8 conversion. Conversion is necessary for
        Timestamp, Timedelta, DatetimeIndex, and TimedeltaIndex keys. An
        Interval-like requires conversion if its endpoints are one of the
        aforementioned types.
 
        Assumes that any list-like data has already been cast to an Index.
 
        Parameters
        ----------
        key : scalar or Index-like
            The key that should be checked for i8 conversion
 
        Returns
        -------
        bool
        rFN)
rKrMr&r
Ú_needs_i8_conversionrŠrrr2r7)r’r™Ú    key_dtypeÚi8_typess    rWrÀz"IntervalIndex._needs_i8_conversionösU€ô$˜C ¨$Ó/ˆ    Ü i¤Ô /´:¸cÄ8Ô3LØ×,Ñ,¨S¯X©XÓ6Ð 6äœy¬-¼ÐHˆÜ˜#˜xÓ(Ð(rYcóš—t|«rt|«}t|«}|j|«s|St    |«}t |dd«}t |t«st |t«rc|j|j«}|j|j«}|rtntj}||||j¬«S|r„t|«\}}t |t «r |j"}n¢t |t$«r |j&}n…t |t(j*t(j,f«r[|j/d«}nI|j0t3|j4«}}|j6r|j9|j:«}|j0j<}||k7rt?d|›d|›«‚|S)a
        Maybe convert a given key to its equivalent i8 value(s). Used as a
        preprocessing step prior to IntervalTree queries (self._engine), which
        expects numeric data.
 
        Parameters
        ----------
        key : scalar or list-like
            The key that should maybe be converted to i8.
 
        Returns
        -------
        scalar or list-like
            The original key if no conversion occurred, int if converted scalar,
            Index with an int64 dtype if converted list-like.
        rFNrÚi8z)Cannot index an IntervalIndex of subtype z with values of dtype ) rr0rrÀr"rKrMr&r
r‘rŠr‹r?r^rtrrÚordinalrÚ_valuerOÚ
datetime64rPÚviewrFr.Úasi8r–r¶Ú_isnanÚsubtypeÚ
ValueError)    r’r™ÚscalarrÁrŠr‹Ú constructorÚkey_i8rËs             rWr‘zIntervalIndex._maybe_convert_i8sƒ€ô" ˜Ô ܘsÓ#ˆCÜ/°Ó4ˆCà×(Ñ(¨Ô-؈Jä˜3“ˆÜ˜C ¨$Ó/ˆ    Ü i¤Ô /´:¸cÄ8Ô3Là×)Ñ)¨#¯(©(Ó3ˆDØ×*Ñ*¨3¯9©9Ó5ˆEÙ&,(´-×2KÑ2KˆKáØe D§K¡Kôð ñ ä 7¸Ó <Ñ ˆIvܘ#œvÔ&ØŸ™‘ܘF¤IÔ.ØŸ™‘ܘF¤R§]¡]´B·N±NÐ$CÔDØŸ™ TÓ*‘ð!$§    ¡    ¬5°·±«?vˆI؏{Š{ð Ÿ™ s§z¡z kÓ2ð
—*‘*×$Ñ$ˆà iÒ ÜØ;¸G¸9ðE#Ø#, +ð/óð ð
ˆ rYcó—|js td«‚t|ttf«r t d«‚|dk(r|j js|dk(r:|j js$|j}|jr/t|«}n#|j }|jr t|«}|j||«S)Nzrcan only get slices from an IntervalIndex if bounds are non-overlapping and all monotonic increasing or decreasingz,Interval objects are not currently supportedrŠr‹)rsr˜rMr r?ÚNotImplementedErrorrŠr®r‹rqrXrpr[Ú_searchsorted_monotonic)r’rVÚsideÚsub_idxs    rWrÒz%IntervalIndex._searchsorted_monotonicQsª€Ø×0Ò0ÜðMóð ô
eœm¬]Ð;Ô <Ü%Ð&TÓUÐ Uð
FŠN˜tŸy™y×@Ò@Ø GŠO D§I¡I×$EÒ$Eà—j‘jˆG؏ŠÜ'¨Ó.‘à—i‘iˆG؏~Š~Ü'¨Ó.à×.Ñ.¨u°dÓ;Ð;rYcón—|j|«t|t«rX|j|jk7r t    |«‚|j
|j
k(|j |j k(z}nt||j«r|j«}nX|jrtnt}|jrtnt}    ||j
|«|||j «z}|j«}|dk(r t    |«‚|dk(r|j!«St#j$|j'd««}t|t(«r6|j*€*t)|j,t/|«|j0«}|S#t$r}t    |«|‚d}~wwxYw)a£
        Get integer location, slice or boolean mask for requested label.
 
        Parameters
        ----------
        key : label
 
        Returns
        -------
        int if unique index, slice if monotonic index, else mask
 
        Examples
        --------
        >>> i1, i2 = pd.Interval(0, 1), pd.Interval(1, 2)
        >>> index = pd.IntervalIndex([i1, i2])
        >>> index.get_loc(1)
        0
 
        You can also supply a point inside an interval.
 
        >>> index.get_loc(1.5)
        1
 
        If a label is in several intervals, you get the locations of all the
        relevant intervals.
 
        >>> i3 = pd.Interval(0, 2)
        >>> overlapping_index = pd.IntervalIndex([i1, i2, i3])
        >>> overlapping_index.get_loc(0.5)
        array([ True, False,  True])
 
        Only exact matches will be returned if an interval is provided.
 
        >>> index.get_loc(pd.Interval(0, 1))
        0
        NrrHÚu1)Ú_check_indexing_errorrMr
rtr˜rŠr‹r'rFr²rnrrrorSr³Úargmaxr    Úmaybe_booleans_to_slicerÈÚsliceÚstopÚstartÚlenÚstep)r’r™ÚmaskÚop_leftÚop_rightÚerrÚmatchesržs        rWr—zIntervalIndex.get_locnsR€ðJ     ×"Ñ" 3Ô'ä cœ8Ô $؏{‰{˜cŸj™jÒ(ܘs“mÐ#Ø—I‘I §¡Ñ)¨d¯j©j¸C¿I¹IÑ.EÑF‰DÜ " 3¨¯
©
Ô 3Ø—9‘9“;‰Dð!×,Ò,•b´"ˆGØ!×.Ò.•r´BˆHð -Ù˜tŸy™y¨#Ó.±¸#¸t¿z¹zÓ1JÑJð
—(‘(“*ˆØ aŠ<ܘ3“-Ð Ø aŠ<Ø—;‘;“=Ð  ä×)Ñ)¨$¯)©)°D«/Ó:ˆÜ cœ5Ô ! c§h¡hÐ&6䘟    ™    ¤3 t£9¨c¯h©hÓ7ˆC؈
øôò -ä˜s“m¨Ð,ûð -úsÃ'FÆ    F4Æ# F/Æ/F4cóX—t|t«r|j|«}t|«St|j«sVt |j«sA|j |«}|jj|j«}t|«S|j|«dS)Nr) rMr?Ú_get_indexer_unique_sidesr!rFr#r‘r“Ú get_indexerÚvaluesÚ_get_indexer_pointwiser)r’ÚtargetÚmethodÚlimitÚ    toleranceÚindexers      rWÚ _get_indexerzIntervalIndex._get_indexer±s•€ô fœmÔ ,ð
×4Ñ4°VÓ<ˆGô# 7Ó+Ð+ô" &§,¡,Ô/´?À6Ç<Á<Ô3Pð×+Ñ+¨FÓ3ˆFØ—l‘l×.Ñ.¨v¯}©}Ó=ˆGô # 7Ó+Ð+ð×.Ñ.¨vÓ6°qÑ9Ð 9rYÚget_indexer_non_uniquecóz—t|«}|j|«s%|j|«s|j|dd¬«St    |t
«re|j jr>|jjr(|j|«}|dk(j«d}n|j|«St|j«s|j|«s|j|«S|j|«}|jj!|j"«\}}t%|«t%|«fS)NFr(r­r)r0Ú_should_compareÚ_should_partial_indexÚ_get_indexer_non_comparablerMr?rŠr´r‹råÚnonzerorèr!rFr‘r“rïrçr)r’réríÚmissings    rWrïz$IntervalIndex.get_indexer_non_uniqueËs €ô˜fÓ%ˆà×#Ñ# FÔ+°D×4NÑ4NÈvÔ4Vð×3Ñ3°F¸DÈÐ3ÓOÐ Oä ˜¤ Ô .؏y‰y×"Ò" t§z¡z×';Ò';à×8Ñ8¸Ó@Ø" b™=×1Ñ1Ó3°AÑ6‘à×2Ñ2°6Ó:Ð:ä ˜VŸ\™\Ô *°$×2LÑ2LÈVÔ2Tà×.Ñ.¨vÓ6Ð 6ð
×+Ñ+¨FÓ3ˆFØ#Ÿ|™|×BÑBÀ6Ç=Á=ÓQÑ ˆGWä" 7Ó+Ô-@ÀÓ-IÐIÐIrYcóΗ|jj|j«}|jj|j«}tj||k(|d«}|S)zZ
        _get_indexer specialized to the case where both of our sides are unique.
        r­)rŠrær‹rOr¶)r’réÚ left_indexerÚ right_indexerrís     rWråz'IntervalIndex._get_indexer_unique_sidesêsP€ð—y‘y×,Ñ,¨V¯[©[Ó9ˆ ØŸ
™
×.Ñ.¨v¯|©|Ó<ˆ Ü—(‘(˜<¨=Ñ8¸,ÈÓKˆØˆrYcó´—gg}}t|«D]µ\}}    |j|«}t|t«r8t    j
|j |j|jd¬«}nEtj|«rt    j|d¬«}nt    j|«d}|j|«Œ·t    j |«}t#|«t#|«fS#t$r*|j|«t    jdg«}YŒpt$r*|j|«t    jdg«}YŒ¡wxYw)zV
        pointwise implementation for get_indexer and get_indexer_non_unique.
        Úintp©rFrH)Úndminrr­)Ú    enumerater—rMrÚrOÚarangerÜrÛrÞr    rrr¶r˜ÚappendrÚ concatenater)r’rérírõÚir™Úlocss       rWrèz$IntervalIndex._get_indexer_pointwiseös€ð ˜rˆÜ Ó'ò    !‰FˆAˆsð &Ø—|‘| CÓ(Ü˜d¤EÔ*äŸ9™9 T§Z¡Z°·±¸D¿I¹IÈVÔT‘DÜ—^‘^ DÔ)ÜŸ8™8 D°Ô2‘DôŸ8™8 D›>¨!Ñ,Dð N‰N˜4Õ  ð)    !ô,—.‘. Ó)ˆÜ" 7Ó+Ô-@ÀÓ-IÐIÐIøôò &Ø—‘˜qÔ!Ü—x‘x  “~’Ü$ò &𗑘qÔ!Ü—x‘x  “~’ð     &ús—BC3Ã30EÄ%/EÅEcóR—|j xr|jjdkS)Né)r¾r“Ú    _na_countr¢s rWÚ_index_as_uniquezIntervalIndex._index_as_uniques%€à×&Ñ&Ð&ÒE¨4¯<©<×+AÑ+AÀAÑ+EÐErYzKcannot handle overlapping indices; use IntervalIndex.get_indexer_non_uniquecó´•—|j<|jdk(s-d}|dk(r t|«‚|dk(rt|«s t|«‚t‰|||«S)NrHzClabel-based slicing with step!=1 is not supported for IntervalIndexÚlocÚgetitem)rÞrÌr-ÚsuperÚ_convert_slice_indexer)r’r™ÚkindÚmsgÚ    __class__s    €rWr z$IntervalIndex._convert_slice_indexers\ø€Ø—‘Р C§H¡H°¢MðXˆCؐuŠ}Ü  “oÐ%ؐyÒ Ü0°Ô5ä$ S›/Ð)ä‰wÑ-¨c°4Ó8Ð8rYcóF—|jjjdvS)NrG)rFrËr r¢s rWÚ_should_fallback_to_positionalz,IntervalIndex._should_fallback_to_positional,s€ð z‰z×!Ñ!×&Ñ&¨$Ð.Ð.rYcó:—t||«j||«S©N)rKÚ_maybe_cast_slice_bound)r’rVrÓs   rWrz%IntervalIndex._maybe_cast_slice_bound4s€Üt˜TÓ"×:Ñ:¸5À$ÓGÐGrYcój—t|t«syt|j|g«}t    |« S)NF)rMr&rrFr!)r’rFÚcommon_subtypes   rWÚ_is_comparable_dtypez"IntervalIndex._is_comparable_dtype7s0€Ü˜%¤Ô/ØÜ)¨4¯:©:°uÐ*=Ó>ˆÜ" >Ó2Ð2Ð2rYcóD—t|jjd¬«S©NF)r|)r.ryrŠr¢s rWrŠzIntervalIndex.left?s€äT—Z‘Z—_‘_¨5Ô1Ð1rYcóD—t|jjd¬«Sr)r.ryr‹r¢s rWr‹zIntervalIndex.rightCs€äT—Z‘Z×%Ñ%¨EÔ2Ð2rYcóD—t|jjd¬«Sr)r.ryÚmidr¢s rWrzIntervalIndex.midGs€äT—Z‘Z—^‘^¨%Ô0Ð0rYcóD—t|jjd¬«Sr)r.ryÚlengthr¢s rWrzIntervalIndex.lengthKs€äT—Z‘Z×&Ñ&¨UÔ3Ð3rYcó†—|jjr(|jjr|j|«}np|jjrI|jjr3|j    «j «dkr|j|«}n|j |«}|€|j«}|S)zL
        intersection specialized to the case with matching dtypes.
        rH)rŠr´r‹Ú_intersection_uniquer²r³Ú_intersection_non_uniqueÚ sort_values)r’ÚotherÚsortÚtakens    rWÚ _intersectionzIntervalIndex._intersectionRs—€ð
9‰9× Ò  4§:¡:×#7Ò#7Ø×-Ñ-¨eÓ4‰EØ Z‰Z× !Ò ! e§k¡k×&;Ò&;ÀÇ    Á    Ã ÇÁÓ@QÐUVÒ@Vð×.Ñ.¨tÓ4‰Eð×1Ñ1°%Ó8ˆEà ˆ<Ø×%Ñ%Ó'ˆEàˆ rYcó(—|jj|j«}|jj|j«}||k(|dk7z}|j|j    «d«}t |«}|j|«S)a'
        Used when the IntervalIndex does not have any common endpoint,
        no matter left or right.
        Return the intersection with another IntervalIndex.
        Parameters
        ----------
        other : IntervalIndex
        Returns
        -------
        IntervalIndex
        r­r)rŠrær‹Útakerôr))r’r"ÚlindexerÚrindexerÚmatchrís      rWrz"IntervalIndex._intersection_uniquefsx€ð—9‘9×(Ñ(¨¯©Ó4ˆØ—:‘:×)Ñ)¨%¯+©+Ó6ˆà˜XÑ%¨(°b©.Ñ9ˆØ—-‘- § ¡ £°Ñ 2Ó3ˆÜ˜“/ˆày‰y˜Ó!Ð!rYcóº—tjt|«t¬«}|jrC|jr7tj
t|««|j «d}d||<tt|j|j««}tt|j|j««D]\}}||vsŒ d||<Œ||S)a
        Used when the IntervalIndex does have some common endpoints,
        on either sides.
        Return the intersection with another IntervalIndex.
 
        Parameters
        ----------
        other : IntervalIndex
 
        Returns
        -------
        IntervalIndex
        rûrT) rOÚzerosrÝrxr–rþr²rµÚziprŠr‹rý)r’r"rßÚ first_nan_locÚ
other_tupsrÚtups       rWr z&IntervalIndex._intersection_non_unique|s®€ô x‰xœ˜D›    ¬Ô.ˆà <Š<˜EŸMšMÜŸI™I¤c¨$£iÓ0°·±³Ñ=¸aÑ@ˆMØ"&ˆDÑ 䜘UŸZ™Z¨¯©Ó5Ó6ˆ
ܤ D§I¡I¨t¯z©zÓ :Ó;ò    ‰FˆAˆsؐjҠؐQ’ð    ðD‰zÐrYcó—td«‚)NzRIntervalIndex does not use libjoin fastpaths or pass values to IndexEngine objects©rÑr¢s rWÚ_get_engine_targetz IntervalIndex._get_engine_target›s€ô"ð "ó
ð    
rYcó—td«‚)Nz,IntervalIndex does not use libjoin fastpathsr2)r’Úresults  rWÚ_from_join_targetzIntervalIndex._from_join_target¤s€Ü!Ð"PÓQÐQrY)NNFNT) rtúIntervalClosedType | NonerFú Dtype | Noner|rxrCúHashable | Noner}rxÚreturnr=)r‹NFN)
rtr7rCr9r|rxrFr8r:r?)
rtr<rCr9r|rxrFr8r:r?)r:r )r™rr:rx)rrÚr:r?)r:r6)r:Ústr)F)rªrxr:Úint©r:rx)rŠ)rÓzLiteral['left', 'right'])r:zint | slice | np.ndarray)NNN)
rér.rêz
str | Nonerëz
int | Nonerìz
Any | Noner:únpt.NDArray[np.intp])rér.r:z1tuple[npt.NDArray[np.intp], npt.NDArray[np.intp]])rér?r:r>)r™rÚr zLiteral['loc', 'getitem'])rÓr;)rFr;r:rx)r:r.)r"r?r:r?)r:z
np.ndarray)9r~Ú
__module__Ú __qualname__Ú_typÚ__annotations__Ú_can_hold_stringsr+Ú    _data_clsr‚Ú classmethodrr,ÚtextwrapÚdedentrƒr^rŒrr“ršrŸr£r¥Úpropertyr¨r.r«Ú__doc__r¯r´r¾rÀr‘rÒr—rîr/Ú_index_doc_kwargsrïrårèrÚ_requires_unique_msgr rrrrŠr‹rrr%rr r3r6Ú __classcell__)rs@rWr?r? s„ø…ðZ €Dð ÓØ"&Ó&ØÓØÓ؃OØÓà ÓØ ÓØÐØ€Ið-1Ø"ØØ $Ø!%ð,ð*ð,ðð    ,ð
ð ,ð ð ,ðð,ð
ó,ð,٠ؘmÑ,à$Ø#H—O‘Oð:óð
(˜Ÿ™ð óñ
ñ    
óð.-4Ø $ØØ"ð 1ð*ð 1ðð     1ð
ð 1ð ð 1ð
ò 1ó)óð* 1ð٠ؘmÑ,à$Ø#H—O‘Oð:óð
(˜Ÿ™ð óñ
ñ    
óð0&-Ø $ØØ"ð 1ð#ð     1ð
ð 1ð ð 1ðð 1ð
ò 1ó)óð* 1ð٠ؘmÑ,à$Ø#H—O‘Oð:óð
(˜Ÿ™ð óñ
ñ    
óð.&-Ø $ØØ"ð
/ð#ð
/ðð    
/ð
ð
/ð ð
/ð
ò
/ó)óð*
/ðò=óð=óó2<ðòXóðXò9ðòóðñ
ˆe× Ñ ×(Ñ(Ó)óVó*ðVðò2óð2ðòóðð.ò/+óð/+ób)ò2@ôD<ó:AðL"ؠؠ$ð ,àð,ðð,ðð    ,ð
ð ,ð
ó ,ñ4РÐ!9Ñ:Ð=NÑNÓOðJØðJà    :òJóPðJó<
ðJØðJà    :óJð@òFóðFð    Vðõ 9ðò/óð/óHó3ðò2óð2ðò3óð3ðò1óð1ðò4óð4ò ó("ó,ó>
öRrYcón—tt|«t|t«t|t«|dug«S)zJ
    Helper for interval_range to check if start/end are valid types.
    N)Úanyr rMrr)Úendpoints rWÚ_is_valid_endpointrPªs:€ô ä hÓ Ü x¤Ó +Ü x¤Ó +Ø ˜Ð ð        
ó ðrYcó¾—d„}d„}t|«xr t|«xs>||«xr||«xs*||«xr||«xstj||«S)zK
    Helper for interval_range to check type compat of start/end/freq.
    có.—t|ttf«Sr)rMrr ©Úxs rWú<lambda>z%_is_type_compatible.<locals>.<lambda>¼ó€œZ¨¬I´zÐ+BÓC€rYcó.—t|ttf«Sr)rMrr rSs rWrUz%_is_type_compatible.<locals>.<lambda>½rVrY)r ÚcomÚany_none)ÚaÚbÚ is_ts_compatÚ is_td_compats    rWÚ_is_type_compatibler^¸sc€ñD€LÙC€Lä    1‹Ò    &œ) A›,ò    Ù ˜‹OÒ /¡ ¨Q£ò    á ˜‹OÒ /¡ ¨Q£ò    ô <‰<˜˜1Ó ð    rYcól—t|«}t|«}||n|}|€&tj|||«rt|«rdnd}tj||||«dk7r t d«‚t |«st d|›«‚t |«st d|›«‚t|«}|t|«s     t|«}tt||«t||«t||«g«s td    «‚||dz }t|«rÅtj|||«rtj|||d
zz|«}nI|€t||z
|z«dz}n|€ ||dz
|zz
}n |€ ||dz
|zz}tj |||«}td „tj"|||«D««rOt%|tj&d ««}n/t)|t*«rt-||||¬ «}nt/||||¬ «}t0j3|||¬«S#t
$r}t d|›«|‚d}~wwxYw)a
    Return a fixed frequency IntervalIndex.
 
    Parameters
    ----------
    start : numeric or datetime-like, default None
        Left bound for generating intervals.
    end : numeric or datetime-like, default None
        Right bound for generating intervals.
    periods : int, default None
        Number of periods to generate.
    freq : numeric, str, Timedelta, datetime.timedelta, or DateOffset, default None
        The length of each interval. Must be consistent with the type of start
        and end, e.g. 2 for numeric, or '5H' for datetime-like.  Default is 1
        for numeric and 'D' for datetime-like.
    name : str, default None
        Name of the resulting IntervalIndex.
    closed : {'left', 'right', 'both', 'neither'}, default 'right'
        Whether the intervals are closed on the left-side, right-side, both
        or neither.
 
    Returns
    -------
    IntervalIndex
 
    See Also
    --------
    IntervalIndex : An Index of intervals that are all closed on the same side.
 
    Notes
    -----
    Of the four parameters ``start``, ``end``, ``periods``, and ``freq``,
    exactly three must be specified. If ``freq`` is omitted, the resulting
    ``IntervalIndex`` will have ``periods`` linearly spaced elements between
    ``start`` and ``end``, inclusively.
 
    To learn more about datetime-like frequency strings, please see `this link
    <https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases>`__.
 
    Examples
    --------
    Numeric ``start`` and  ``end`` is supported.
 
    >>> pd.interval_range(start=0, end=5)
    IntervalIndex([(0, 1], (1, 2], (2, 3], (3, 4], (4, 5]],
                  dtype='interval[int64, right]')
 
    Additionally, datetime-like input is also supported.
 
    >>> pd.interval_range(start=pd.Timestamp('2017-01-01'),
    ...                   end=pd.Timestamp('2017-01-04'))
    IntervalIndex([(2017-01-01 00:00:00, 2017-01-02 00:00:00],
                   (2017-01-02 00:00:00, 2017-01-03 00:00:00],
                   (2017-01-03 00:00:00, 2017-01-04 00:00:00]],
                  dtype='interval[datetime64[ns], right]')
 
    The ``freq`` parameter specifies the frequency between the left and right.
    endpoints of the individual intervals within the ``IntervalIndex``.  For
    numeric ``start`` and ``end``, the frequency must also be numeric.
 
    >>> pd.interval_range(start=0, periods=4, freq=1.5)
    IntervalIndex([(0.0, 1.5], (1.5, 3.0], (3.0, 4.5], (4.5, 6.0]],
                  dtype='interval[float64, right]')
 
    Similarly, for datetime-like ``start`` and ``end``, the frequency must be
    convertible to a DateOffset.
 
    >>> pd.interval_range(start=pd.Timestamp('2017-01-01'),
    ...                   periods=3, freq='MS')
    IntervalIndex([(2017-01-01 00:00:00, 2017-02-01 00:00:00],
                   (2017-02-01 00:00:00, 2017-03-01 00:00:00],
                   (2017-03-01 00:00:00, 2017-04-01 00:00:00]],
                  dtype='interval[datetime64[ns], right]')
 
    Specify ``start``, ``end``, and ``periods``; the frequency is generated
    automatically (linearly spaced).
 
    >>> pd.interval_range(start=0, end=6, periods=4)
    IntervalIndex([(0.0, 1.5], (1.5, 3.0], (3.0, 4.5], (4.5, 6.0]],
              dtype='interval[float64, right]')
 
    The ``closed`` parameter specifies which endpoints of the individual
    intervals within the ``IntervalIndex`` are closed.
 
    >>> pd.interval_range(end=5, periods=4, closed='both')
    IntervalIndex([[1, 2], [2, 3], [3, 4], [4, 5]],
                  dtype='interval[int64, both]')
    NrHÚDézVOf the four parameters: start, end, periods, and freq, exactly three must be specifiedz,start must be numeric or datetime-like, got z*end must be numeric or datetime-like, got z7freq must be numeric or convertible to DateOffset, got z+start, end, freq need to be type compatiblegš™™™™™¹?c3ó2K—|]}t|«–—Œy­wr)r)Ú.0rTs  rWú    <genexpr>z!interval_range.<locals>.<genexpr>`sèø€ÒE Œz˜!}ÑEùs‚Úint64)rÜÚendÚperiodsÚfreq)rCrt)rrXrYr Úcount_not_nonerÌrPr*rÚallr^rSÚ all_not_nonerOrþr<ÚlinspaceÚnot_nonerrFrMrr3r8r?rƒ)    rÜrfrgrhrCrtrOrâr‡s             rWÚinterval_rangernÆsZ€ô@ # 5Ó )€EÜ
  Ó
%€CØÐ)‰u¨s€Hà €|œŸ ™  W¨e°SÔ9ܘhÔ'‰q¨Sˆä
×ј%  g¨tÓ4¸Ò9Üð 4ó
ð    
ô
˜eÔ $ÜÐGÈÀwÐOÓPÐPÜ ˜cÔ "ÜÐEÀcÀUÐKÓLÐLä˜wÓ'€Gà Ф    ¨$¤ð    Ü˜T“?ˆDô ä   sÓ +Ü   tÓ ,Ü   TÓ *ð    
ô ôÐEÓFÐFðÐØ1‰ ˆôÔÜ × Ñ ˜E 3¨Ô -ä—Y‘Y˜u c¨T°C©ZÑ&8¸$Ó?‰FðˆÜ˜s U™{¨tÑ3Ó4°qÑ8‘ؘؐw¨™{¨dÑ2Ñ2‘ؘؐw¨™{¨dÑ2Ñ2ä—[‘[ ¨¨WÓ5ˆFÜ ÑE¤c§l¡l°5¸#¸tÓ&DÔEÔ Eô ,ØÜ—‘˜Ó!ó‰Fô h¤    Ô *Ü e°¸gÈDÔQ‰Fä$¨5°cÀ7ÐQUÔVˆFä × $Ñ $ V°$¸vÐ $Ó FÐFøôiò    ÜØIÈ$ÈÐPóàð ûð    úsÂ6 HÈ    H3ÈH.È.H3r=)NNNNNr‹)rCr9rtr<r:r?)irIÚ
__future__rÚoperatorrrrFÚtypingrrrÚnumpyrOÚ pandas._libsr    Úpandas._libs.intervalr
r r Úpandas._libs.tslibsr rrrrÚ pandas.errorsrÚpandas.util._decoratorsrrÚpandas.util._exceptionsrÚpandas.core.dtypes.castrrrrrÚpandas.core.dtypes.commonrrrrrr r!r"r#r$Úpandas.core.dtypes.dtypesr%r&Úpandas.core.dtypes.missingr'Úpandas.core.algorithmsr)Úpandas.core.arrays.datetimeliker*Úpandas.core.arrays.intervalr+r,Úpandas.core.commonÚcoreÚcommonrXÚpandas.core.indexersr-Úpandas.core.indexes.baseÚindexesÚbaseÚibaser.r/r0r1Úpandas.core.indexes.datetimesr2r3Úpandas.core.indexes.extensionr4r5Úpandas.core.indexes.multir6Úpandas.core.indexes.timedeltasr7r8Úcollections.abcr9Úpandas._typingr:r;r<r=r>ÚdictrJÚupdaterGrXr[rar?rPr^rnr]rYrWú<module>rsðÙ Ý"÷ó÷ñó å÷ñ÷
õõ,÷õ6÷õ÷ ÷ ÷ ÷õ=å)Ý<÷÷!РÝ:ß(Ó(÷ó÷ ÷õ1÷ñ
Ý(÷õñ˜×0Ñ0Ó1Ðà×Ñà Ø#Ø<ؐ—‘ð ó
ñ    
ô òUò"Uò" ñ
ؘ'Ñ"à ØSØ! &Ñ)Ø6ØØ#H—O‘Oð ó
ñ ñóñ: ˜kÐ*¨MÀÔEÙò    ðó ñÐ.°Ð9¸=ÐPTÔUôY RNóY RóVó óFó;ðXY Ró| ó ð Ø Ø Ø     Ø Ø!(ð kGð
ð kGð ð kGðôkGrY