59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import numpy as np
 | 
						|
import pytest
 | 
						|
 | 
						|
from pandas._libs.tslibs import IncompatibleFrequency
 | 
						|
 | 
						|
from pandas import (
 | 
						|
    Index,
 | 
						|
    PeriodIndex,
 | 
						|
    period_range,
 | 
						|
)
 | 
						|
import pandas._testing as tm
 | 
						|
 | 
						|
 | 
						|
class TestJoin:
 | 
						|
    def test_join_outer_indexer(self):
 | 
						|
        pi = period_range("1/1/2000", "1/20/2000", freq="D")
 | 
						|
 | 
						|
        result = pi._outer_indexer(pi)
 | 
						|
        tm.assert_extension_array_equal(result[0], pi._values)
 | 
						|
        tm.assert_numpy_array_equal(result[1], np.arange(len(pi), dtype=np.intp))
 | 
						|
        tm.assert_numpy_array_equal(result[2], np.arange(len(pi), dtype=np.intp))
 | 
						|
 | 
						|
    def test_joins(self, join_type):
 | 
						|
        index = period_range("1/1/2000", "1/20/2000", freq="D")
 | 
						|
 | 
						|
        joined = index.join(index[:-5], how=join_type)
 | 
						|
 | 
						|
        assert isinstance(joined, PeriodIndex)
 | 
						|
        assert joined.freq == index.freq
 | 
						|
 | 
						|
    def test_join_self(self, join_type):
 | 
						|
        index = period_range("1/1/2000", "1/20/2000", freq="D")
 | 
						|
 | 
						|
        res = index.join(index, how=join_type)
 | 
						|
        assert index is res
 | 
						|
 | 
						|
    def test_join_does_not_recur(self):
 | 
						|
        df = tm.makeCustomDataframe(
 | 
						|
            3,
 | 
						|
            2,
 | 
						|
            data_gen_f=lambda *args: np.random.randint(2),
 | 
						|
            c_idx_type="p",
 | 
						|
            r_idx_type="dt",
 | 
						|
        )
 | 
						|
        ser = df.iloc[:2, 0]
 | 
						|
 | 
						|
        res = ser.index.join(df.columns, how="outer")
 | 
						|
        expected = Index(
 | 
						|
            [ser.index[0], ser.index[1], df.columns[0], df.columns[1]], object
 | 
						|
        )
 | 
						|
        tm.assert_index_equal(res, expected)
 | 
						|
 | 
						|
    def test_join_mismatched_freq_raises(self):
 | 
						|
        index = period_range("1/1/2000", "1/20/2000", freq="D")
 | 
						|
        index3 = period_range("1/1/2000", "1/20/2000", freq="2D")
 | 
						|
        msg = r".*Input has different freq=2D from Period\(freq=D\)"
 | 
						|
        with pytest.raises(IncompatibleFrequency, match=msg):
 | 
						|
            index.join(index3)
 |